aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2015-06-15 21:36:28 +0200
committermarha <marha@users.sourceforge.net>2015-06-15 21:36:28 +0200
commit008a8d8051786badb83e455bd9281103ba9a6470 (patch)
treef99ea672d105271cb60a726fac8022ce47ea2866
parent912e881bec8b16f2331225960645c3bdf5a8ba2d (diff)
parente8d5e7c4bb11f7fcb0a4ba5c13f43e7929849a2f (diff)
downloadvcxsrv-008a8d8051786badb83e455bd9281103ba9a6470.tar.gz
vcxsrv-008a8d8051786badb83e455bd9281103ba9a6470.tar.bz2
vcxsrv-008a8d8051786badb83e455bd9281103ba9a6470.zip
Merge remote-tracking branch 'origin/released'
Conflicts: freetype/src/base/ftfntfmt.c freetype/src/cache/ftcimage.c freetype/src/cid/cidriver.c freetype/src/truetype/ttdriver.c mesalib/src/mesa/drivers/dri/common/dri_util.c mesalib/src/mesa/drivers/dri/swrast/swrast.c openssl/Makefile
-rw-r--r--fontconfig/README40
-rw-r--r--fontconfig/configure.ac2
-rw-r--r--fontconfig/doc/fontconfig-devel.sgml1
-rw-r--r--fontconfig/doc/fontconfig-user.sgml6
-rw-r--r--fontconfig/fontconfig/fontconfig.h10
-rw-r--r--fontconfig/src/fccache.c6
-rw-r--r--fontconfig/src/fcdbg.c88
-rw-r--r--fontconfig/src/fcdefault.c1
-rw-r--r--fontconfig/src/fcfreetype.c80
-rw-r--r--fontconfig/src/fcinit.c28
-rw-r--r--fontconfig/src/fcint.h41
-rw-r--r--fontconfig/src/fcmatch.c44
-rw-r--r--fontconfig/src/fcname.c20
-rw-r--r--fontconfig/src/fcobjs.c31
-rw-r--r--fontconfig/src/fcobjs.h1
-rw-r--r--fontconfig/src/fcpat.c6
-rw-r--r--fontconfig/src/fcrange.c109
-rw-r--r--fontconfig/src/fcxml.c63
-rw-r--r--freetype/CMakeLists.txt8
-rw-r--r--freetype/ChangeLog1639
-rw-r--r--freetype/ChangeLog.202
-rw-r--r--freetype/ChangeLog.212
-rw-r--r--freetype/ChangeLog.222
-rw-r--r--freetype/ChangeLog.232
-rw-r--r--freetype/ChangeLog.242
-rw-r--r--freetype/Jamfile4
-rw-r--r--freetype/Jamrules2
-rw-r--r--freetype/Makefile2
-rw-r--r--freetype/README12
-rw-r--r--freetype/README.git2
-rw-r--r--freetype/autogen.sh2
-rw-r--r--freetype/builds/amiga/README2
-rw-r--r--freetype/builds/amiga/include/config/ftconfig.h2
-rw-r--r--freetype/builds/amiga/include/config/ftmodule.h2
-rw-r--r--freetype/builds/amiga/makefile18
-rw-r--r--freetype/builds/amiga/makefile.os418
-rw-r--r--freetype/builds/amiga/smakefile12
-rw-r--r--freetype/builds/amiga/src/base/ftdebug.c2
-rw-r--r--freetype/builds/amiga/src/base/ftsystem.c2
-rw-r--r--freetype/builds/ansi/ansi-def.mk2
-rw-r--r--freetype/builds/ansi/ansi.mk2
-rw-r--r--freetype/builds/beos/beos-def.mk2
-rw-r--r--freetype/builds/beos/beos.mk2
-rw-r--r--freetype/builds/beos/detect.mk2
-rwxr-xr-xfreetype/builds/cmake/iOS.cmake2
-rw-r--r--freetype/builds/compiler/ansi-cc.mk2
-rw-r--r--freetype/builds/compiler/bcc-dev.mk2
-rw-r--r--freetype/builds/compiler/bcc.mk2
-rw-r--r--freetype/builds/compiler/emx.mk2
-rw-r--r--freetype/builds/compiler/gcc-dev.mk2
-rw-r--r--freetype/builds/compiler/gcc.mk2
-rw-r--r--freetype/builds/compiler/intelc.mk2
-rw-r--r--freetype/builds/compiler/unix-lcc.mk2
-rw-r--r--freetype/builds/compiler/visualage.mk2
-rw-r--r--freetype/builds/compiler/visualc.mk2
-rw-r--r--freetype/builds/compiler/watcom.mk2
-rw-r--r--freetype/builds/compiler/win-lcc.mk2
-rw-r--r--freetype/builds/detect.mk2
-rw-r--r--freetype/builds/dos/detect.mk2
-rw-r--r--freetype/builds/dos/dos-def.mk2
-rw-r--r--freetype/builds/dos/dos-emx.mk2
-rw-r--r--freetype/builds/dos/dos-gcc.mk2
-rw-r--r--freetype/builds/dos/dos-wat.mk2
-rw-r--r--freetype/builds/exports.mk2
-rw-r--r--freetype/builds/freetype.mk34
-rw-r--r--freetype/builds/link_dos.mk2
-rw-r--r--freetype/builds/link_std.mk2
-rw-r--r--freetype/builds/mac/FreeType.m68k_cfm.make.txt6
-rw-r--r--freetype/builds/mac/FreeType.m68k_far.make.txt6
-rw-r--r--freetype/builds/mac/FreeType.ppc_carbon.make.txt6
-rw-r--r--freetype/builds/mac/FreeType.ppc_classic.make.txt6
-rw-r--r--freetype/builds/mac/ftmac.c2
-rw-r--r--freetype/builds/modules.mk2
-rw-r--r--freetype/builds/os2/detect.mk2
-rw-r--r--freetype/builds/os2/os2-def.mk2
-rw-r--r--freetype/builds/os2/os2-dev.mk2
-rw-r--r--freetype/builds/os2/os2-gcc.mk2
-rw-r--r--freetype/builds/symbian/bld.inf4
-rw-r--r--freetype/builds/symbian/freetype.mmp3
-rw-r--r--freetype/builds/toplevel.mk44
-rw-r--r--freetype/builds/unix/aclocal.m4662
-rw-r--r--freetype/builds/unix/config.guess31
-rw-r--r--freetype/builds/unix/config.sub19
-rw-r--r--freetype/builds/unix/configure576
-rw-r--r--freetype/builds/unix/configure.ac6
-rw-r--r--freetype/builds/unix/configure.raw4
-rw-r--r--freetype/builds/unix/detect.mk9
-rw-r--r--freetype/builds/unix/freetype-config.in2
-rw-r--r--freetype/builds/unix/freetype2.m42
-rw-r--r--freetype/builds/unix/ft-munmap.m42
-rw-r--r--freetype/builds/unix/ftconfig.in21
-rw-r--r--freetype/builds/unix/ftsystem.c2
-rw-r--r--freetype/builds/unix/install-sh31
-rw-r--r--freetype/builds/unix/install.mk2
-rw-r--r--freetype/builds/unix/ltmain.sh173
-rw-r--r--freetype/builds/unix/unix-cc.in2
-rw-r--r--freetype/builds/unix/unix-def.in2
-rw-r--r--freetype/builds/unix/unix-dev.mk2
-rw-r--r--freetype/builds/unix/unix-lcc.mk2
-rw-r--r--freetype/builds/unix/unix.mk2
-rw-r--r--freetype/builds/unix/unixddef.mk2
-rw-r--r--freetype/builds/vms/ftconfig.h19
-rw-r--r--freetype/builds/vms/ftsystem.c2
-rw-r--r--freetype/builds/wince/ftdebug.c2
-rw-r--r--freetype/builds/wince/vc2005-ce/freetype.vcproj80
-rw-r--r--freetype/builds/wince/vc2005-ce/index.html10
-rw-r--r--freetype/builds/wince/vc2008-ce/freetype.vcproj84
-rw-r--r--freetype/builds/wince/vc2008-ce/index.html10
-rw-r--r--freetype/builds/windows/detect.mk2
-rw-r--r--freetype/builds/windows/ftdebug.c2
-rw-r--r--freetype/builds/windows/vc2005/freetype.vcproj16
-rw-r--r--freetype/builds/windows/vc2005/index.html10
-rw-r--r--freetype/builds/windows/vc2008/freetype.vcproj20
-rw-r--r--freetype/builds/windows/vc2008/index.html10
-rw-r--r--freetype/builds/windows/vc2010/freetype.vcxproj26
-rw-r--r--freetype/builds/windows/vc2010/freetype.vcxproj.filters6
-rw-r--r--freetype/builds/windows/vc2010/index.html14
-rw-r--r--freetype/builds/windows/visualc/freetype.dsp28
-rw-r--r--freetype/builds/windows/visualc/freetype.vcproj20
-rw-r--r--freetype/builds/windows/visualc/index.html10
-rw-r--r--freetype/builds/windows/visualce/freetype.dsp28
-rw-r--r--freetype/builds/windows/visualce/freetype.vcproj92
-rw-r--r--freetype/builds/windows/visualce/index.html10
-rw-r--r--freetype/builds/windows/w32-bcc.mk2
-rw-r--r--freetype/builds/windows/w32-bccd.mk2
-rw-r--r--freetype/builds/windows/w32-dev.mk2
-rw-r--r--freetype/builds/windows/w32-gcc.mk2
-rw-r--r--freetype/builds/windows/w32-icc.mk2
-rw-r--r--freetype/builds/windows/w32-intl.mk2
-rw-r--r--freetype/builds/windows/w32-lcc.mk2
-rw-r--r--freetype/builds/windows/w32-mingw32.mk2
-rw-r--r--freetype/builds/windows/w32-vcc.mk2
-rw-r--r--freetype/builds/windows/w32-wat.mk2
-rw-r--r--freetype/builds/windows/win32-def.mk2
-rw-r--r--freetype/configure2
-rw-r--r--freetype/devel/ft2build.h2
-rw-r--r--freetype/devel/ftoption.h29
-rw-r--r--freetype/docs/CHANGES108
-rw-r--r--freetype/docs/CUSTOMIZE2
-rw-r--r--freetype/docs/DEBUG2
-rw-r--r--freetype/docs/INSTALL4
-rw-r--r--freetype/docs/INSTALL.ANY10
-rw-r--r--freetype/docs/INSTALL.CROSS4
-rw-r--r--freetype/docs/INSTALL.GNU2
-rw-r--r--freetype/docs/INSTALL.UNIX2
-rw-r--r--freetype/docs/INSTALL.VMS2
-rw-r--r--freetype/docs/TODO2
-rw-r--r--freetype/docs/VERSION.DLL3
-rw-r--r--freetype/docs/formats.txt10
-rw-r--r--freetype/docs/freetype-config.12
-rw-r--r--freetype/docs/raster.txt2
-rw-r--r--freetype/docs/reference/ft2-auto_hinter.html34
-rw-r--r--freetype/docs/reference/ft2-base_interface.html25
-rw-r--r--freetype/docs/reference/ft2-basic_types.html7
-rw-r--r--freetype/docs/reference/ft2-bdf_fonts.html4
-rw-r--r--freetype/docs/reference/ft2-bitmap_handling.html20
-rw-r--r--freetype/docs/reference/ft2-bzip2.html4
-rw-r--r--freetype/docs/reference/ft2-cache_subsystem.html8
-rw-r--r--freetype/docs/reference/ft2-cff_driver.html4
-rw-r--r--freetype/docs/reference/ft2-cid_fonts.html4
-rw-r--r--freetype/docs/reference/ft2-computations.html4
-rw-r--r--freetype/docs/reference/ft2-font_formats.html24
-rw-r--r--freetype/docs/reference/ft2-gasp_table.html4
-rw-r--r--freetype/docs/reference/ft2-glyph_management.html4
-rw-r--r--freetype/docs/reference/ft2-glyph_stroker.html4
-rw-r--r--freetype/docs/reference/ft2-glyph_variants.html4
-rw-r--r--freetype/docs/reference/ft2-gx_validation.html4
-rw-r--r--freetype/docs/reference/ft2-gzip.html4
-rw-r--r--freetype/docs/reference/ft2-header_file_macros.html15
-rw-r--r--freetype/docs/reference/ft2-header_inclusion.html4
-rw-r--r--freetype/docs/reference/ft2-incremental.html4
-rw-r--r--freetype/docs/reference/ft2-index.html544
-rw-r--r--freetype/docs/reference/ft2-lcd_filtering.html4
-rw-r--r--freetype/docs/reference/ft2-list_processing.html4
-rw-r--r--freetype/docs/reference/ft2-lzw.html4
-rw-r--r--freetype/docs/reference/ft2-mac_specific.html4
-rw-r--r--freetype/docs/reference/ft2-module_management.html8
-rw-r--r--freetype/docs/reference/ft2-multiple_masters.html16
-rw-r--r--freetype/docs/reference/ft2-ot_validation.html4
-rw-r--r--freetype/docs/reference/ft2-outline_processing.html4
-rw-r--r--freetype/docs/reference/ft2-pfr_fonts.html4
-rw-r--r--freetype/docs/reference/ft2-quick_advance.html6
-rw-r--r--freetype/docs/reference/ft2-raster.html8
-rw-r--r--freetype/docs/reference/ft2-sfnt_names.html4
-rw-r--r--freetype/docs/reference/ft2-sizes_management.html4
-rw-r--r--freetype/docs/reference/ft2-system_interface.html4
-rw-r--r--freetype/docs/reference/ft2-toc.html6
-rw-r--r--freetype/docs/reference/ft2-truetype_engine.html4
-rw-r--r--freetype/docs/reference/ft2-truetype_tables.html6
-rw-r--r--freetype/docs/reference/ft2-tt_driver.html57
-rw-r--r--freetype/docs/reference/ft2-type1_tables.html6
-rw-r--r--freetype/docs/reference/ft2-user_allocation.html4
-rw-r--r--freetype/docs/reference/ft2-version.html8
-rw-r--r--freetype/docs/reference/ft2-winfnt_fonts.html8
-rw-r--r--freetype/docs/release2
-rw-r--r--freetype/include/config/ftconfig.h19
-rw-r--r--freetype/include/config/ftheader.h12
-rw-r--r--freetype/include/config/ftoption.h31
-rw-r--r--freetype/include/config/ftstdlib.h5
-rw-r--r--freetype/include/freetype.h55
-rw-r--r--freetype/include/ft2build.h2
-rw-r--r--freetype/include/ftadvanc.h4
-rw-r--r--freetype/include/ftautoh.h52
-rw-r--r--freetype/include/ftbbox.h2
-rw-r--r--freetype/include/ftbdf.h2
-rw-r--r--freetype/include/ftbitmap.h14
-rw-r--r--freetype/include/ftbzip2.h2
-rw-r--r--freetype/include/ftcache.h6
-rw-r--r--freetype/include/ftcffdrv.h2
-rw-r--r--freetype/include/ftcid.h3
-rw-r--r--freetype/include/fterrdef.h2
-rw-r--r--freetype/include/fterrors.h2
-rwxr-xr-x[-rw-r--r--]freetype/include/ftfntfmt.h (renamed from freetype/include/ftxf86.h)36
-rw-r--r--freetype/include/ftgasp.h2
-rw-r--r--freetype/include/ftglyph.h2
-rw-r--r--freetype/include/ftgxval.h2
-rw-r--r--freetype/include/ftgzip.h2
-rw-r--r--freetype/include/ftimage.h20
-rw-r--r--freetype/include/ftincrem.h2
-rw-r--r--freetype/include/ftlcdfil.h2
-rw-r--r--freetype/include/ftlist.h2
-rw-r--r--freetype/include/ftlzw.h2
-rw-r--r--freetype/include/ftmac.h2
-rw-r--r--freetype/include/ftmm.h28
-rw-r--r--freetype/include/ftmodapi.h6
-rw-r--r--freetype/include/ftmoderr.h2
-rw-r--r--freetype/include/ftotval.h2
-rw-r--r--freetype/include/ftoutln.h2
-rw-r--r--freetype/include/ftpfr.h2
-rw-r--r--freetype/include/ftrender.h11
-rw-r--r--freetype/include/ftsizes.h2
-rw-r--r--freetype/include/ftsnames.h2
-rw-r--r--freetype/include/ftstroke.h2
-rw-r--r--freetype/include/ftsynth.h8
-rw-r--r--freetype/include/ftsystem.h2
-rw-r--r--freetype/include/fttrigon.h2
-rw-r--r--freetype/include/ftttdrv.h107
-rw-r--r--freetype/include/fttypes.h2
-rw-r--r--freetype/include/ftwinfnt.h6
-rw-r--r--freetype/include/internal/autohint.h2
-rw-r--r--freetype/include/internal/ftcalc.h2
-rw-r--r--freetype/include/internal/ftdebug.h4
-rw-r--r--freetype/include/internal/ftdriver.h2
-rw-r--r--freetype/include/internal/ftgloadr.h38
-rw-r--r--freetype/include/internal/ftmemory.h28
-rw-r--r--freetype/include/internal/ftobjs.h18
-rw-r--r--freetype/include/internal/ftpic.h2
-rw-r--r--freetype/include/internal/ftrfork.h6
-rw-r--r--freetype/include/internal/ftserv.h4
-rw-r--r--freetype/include/internal/ftstream.h4
-rw-r--r--freetype/include/internal/fttrace.h2
-rw-r--r--freetype/include/internal/ftvalid.h2
-rw-r--r--freetype/include/internal/internal.h2
-rw-r--r--freetype/include/internal/psaux.h20
-rw-r--r--freetype/include/internal/pshints.h4
-rw-r--r--freetype/include/internal/services/svbdf.h2
-rw-r--r--freetype/include/internal/services/svcid.h3
-rwxr-xr-x[-rw-r--r--]freetype/include/internal/services/svfntfmt.h (renamed from freetype/include/internal/services/svxf86nm.h)32
-rw-r--r--freetype/include/internal/services/svgldict.h2
-rw-r--r--freetype/include/internal/services/svgxval.h2
-rw-r--r--freetype/include/internal/services/svkern.h2
-rw-r--r--freetype/include/internal/services/svmm.h2
-rw-r--r--freetype/include/internal/services/svotval.h2
-rw-r--r--freetype/include/internal/services/svpfr.h2
-rw-r--r--freetype/include/internal/services/svpostnm.h2
-rw-r--r--freetype/include/internal/services/svprop.h2
-rw-r--r--freetype/include/internal/services/svpscmap.h2
-rw-r--r--freetype/include/internal/services/svpsinfo.h2
-rw-r--r--freetype/include/internal/services/svsfnt.h2
-rw-r--r--freetype/include/internal/services/svttcmap.h6
-rw-r--r--freetype/include/internal/services/svtteng.h2
-rw-r--r--freetype/include/internal/services/svttglyf.h3
-rw-r--r--freetype/include/internal/services/svwinfnt.h2
-rw-r--r--freetype/include/internal/sfnt.h2
-rw-r--r--freetype/include/internal/t1types.h20
-rw-r--r--freetype/include/internal/tttypes.h12
-rw-r--r--freetype/include/t1tables.h7
-rw-r--r--freetype/include/ttnameid.h4
-rw-r--r--freetype/include/tttables.h4
-rw-r--r--freetype/include/tttags.h2
-rw-r--r--freetype/include/ttunpat.h2
-rw-r--r--freetype/modules.cfg12
-rw-r--r--freetype/src/Jamfile2
-rw-r--r--freetype/src/autofit/Jamfile2
-rw-r--r--freetype/src/autofit/afangles.c4
-rw-r--r--freetype/src/autofit/afblue.c32
-rw-r--r--freetype/src/autofit/afblue.cin2
-rw-r--r--freetype/src/autofit/afblue.dat41
-rw-r--r--freetype/src/autofit/afblue.h89
-rw-r--r--freetype/src/autofit/afblue.hin14
-rw-r--r--freetype/src/autofit/afcjk.c76
-rw-r--r--freetype/src/autofit/afcjk.h14
-rw-r--r--freetype/src/autofit/afcover.h2
-rw-r--r--freetype/src/autofit/afdummy.c2
-rw-r--r--freetype/src/autofit/afdummy.h2
-rw-r--r--freetype/src/autofit/aferrors.h2
-rw-r--r--freetype/src/autofit/afglobal.c7
-rw-r--r--freetype/src/autofit/afglobal.h2
-rw-r--r--freetype/src/autofit/afhints.c199
-rw-r--r--freetype/src/autofit/afhints.h73
-rw-r--r--freetype/src/autofit/afindic.c2
-rw-r--r--freetype/src/autofit/afindic.h2
-rw-r--r--freetype/src/autofit/aflatin.c80
-rw-r--r--freetype/src/autofit/aflatin.h30
-rw-r--r--freetype/src/autofit/aflatin2.c75
-rw-r--r--freetype/src/autofit/aflatin2.h2
-rw-r--r--freetype/src/autofit/afloader.c220
-rw-r--r--freetype/src/autofit/afloader.h21
-rw-r--r--freetype/src/autofit/afmodule.c114
-rw-r--r--freetype/src/autofit/afmodule.h19
-rw-r--r--freetype/src/autofit/afpic.c2
-rw-r--r--freetype/src/autofit/afpic.h2
-rw-r--r--freetype/src/autofit/afranges.c19
-rw-r--r--freetype/src/autofit/afranges.h2
-rw-r--r--freetype/src/autofit/afscript.h12
-rw-r--r--freetype/src/autofit/afstyles.h17
-rw-r--r--freetype/src/autofit/aftypes.h18
-rw-r--r--freetype/src/autofit/afwarp.c8
-rw-r--r--freetype/src/autofit/afwarp.h4
-rw-r--r--freetype/src/autofit/afwrtsys.h2
-rw-r--r--freetype/src/autofit/autofit.c2
-rw-r--r--freetype/src/autofit/hbshim.c13
-rw-r--r--freetype/src/autofit/hbshim.h2
-rw-r--r--freetype/src/autofit/module.mk2
-rw-r--r--freetype/src/autofit/rules.mk7
-rw-r--r--freetype/src/base/Jamfile2
-rw-r--r--freetype/src/base/basepic.c2
-rw-r--r--freetype/src/base/basepic.h2
-rw-r--r--freetype/src/base/ftadvanc.c2
-rw-r--r--freetype/src/base/ftapi.c2
-rw-r--r--freetype/src/base/ftbase.c2
-rw-r--r--freetype/src/base/ftbase.h2
-rw-r--r--freetype/src/base/ftbbox.c9
-rwxr-xr-xfreetype/src/base/ftbdf.c2
-rw-r--r--freetype/src/base/ftbitmap.c67
-rw-r--r--freetype/src/base/ftcalc.c287
-rw-r--r--freetype/src/base/ftcid.c3
-rw-r--r--freetype/src/base/ftdbgmem.c126
-rw-r--r--freetype/src/base/ftdebug.c2
-rwxr-xr-x[-rw-r--r--]freetype/src/base/ftfntfmt.c (renamed from freetype/src/base/ftxf86.c)29
-rw-r--r--freetype/src/base/ftfstype.c2
-rw-r--r--freetype/src/base/ftgasp.c2
-rw-r--r--freetype/src/base/ftgloadr.c17
-rw-r--r--freetype/src/base/ftglyph.c20
-rw-r--r--freetype/src/base/ftgxval.c2
-rw-r--r--freetype/src/base/ftinit.c10
-rw-r--r--freetype/src/base/ftlcdfil.c14
-rw-r--r--freetype/src/base/ftmac.c2
-rw-r--r--freetype/src/base/ftmm.c2
-rw-r--r--freetype/src/base/ftobjs.c142
-rw-r--r--freetype/src/base/ftotval.c2
-rw-r--r--freetype/src/base/ftoutln.c24
-rw-r--r--freetype/src/base/ftpatent.c3
-rw-r--r--freetype/src/base/ftpfr.c2
-rw-r--r--freetype/src/base/ftpic.c2
-rw-r--r--freetype/src/base/ftrfork.c22
-rw-r--r--freetype/src/base/ftsnames.c2
-rw-r--r--freetype/src/base/ftstream.c88
-rw-r--r--freetype/src/base/ftstroke.c40
-rw-r--r--freetype/src/base/ftsynth.c2
-rw-r--r--freetype/src/base/ftsystem.c16
-rw-r--r--freetype/src/base/fttrigon.c75
-rwxr-xr-xfreetype/src/base/fttype1.c2
-rw-r--r--freetype/src/base/ftutil.c14
-rw-r--r--freetype/src/base/ftwinfnt.c2
-rw-r--r--freetype/src/base/rules.mk7
-rw-r--r--freetype/src/bdf/Jamfile2
-rw-r--r--freetype/src/bdf/bdf.h10
-rw-r--r--freetype/src/bdf/bdfdrivr.c30
-rw-r--r--freetype/src/bdf/bdfdrivr.h2
-rw-r--r--freetype/src/bdf/bdflib.c133
-rw-r--r--freetype/src/bdf/rules.mk5
-rw-r--r--freetype/src/bzip2/Jamfile5
-rw-r--r--freetype/src/bzip2/ftbzip2.c7
-rw-r--r--freetype/src/bzip2/rules.mk9
-rw-r--r--freetype/src/cache/Jamfile2
-rw-r--r--freetype/src/cache/ftcache.c2
-rw-r--r--freetype/src/cache/ftcbasic.c28
-rw-r--r--freetype/src/cache/ftccache.c18
-rw-r--r--freetype/src/cache/ftccache.h18
-rw-r--r--freetype/src/cache/ftccback.h2
-rw-r--r--freetype/src/cache/ftccmap.c10
-rw-r--r--freetype/src/cache/ftcerror.h2
-rw-r--r--freetype/src/cache/ftcglyph.c4
-rw-r--r--freetype/src/cache/ftcglyph.h4
-rwxr-xr-x[-rw-r--r--]freetype/src/cache/ftcimage.c9
-rw-r--r--freetype/src/cache/ftcimage.h2
-rw-r--r--freetype/src/cache/ftcmanag.c11
-rw-r--r--freetype/src/cache/ftcmanag.h2
-rw-r--r--freetype/src/cache/ftcmru.c2
-rw-r--r--freetype/src/cache/ftcmru.h2
-rw-r--r--freetype/src/cache/ftcsbits.c8
-rw-r--r--freetype/src/cache/ftcsbits.h2
-rw-r--r--freetype/src/cache/rules.mk9
-rw-r--r--freetype/src/cff/Jamfile2
-rw-r--r--freetype/src/cff/cf2arrst.c2
-rw-r--r--freetype/src/cff/cf2fixed.h22
-rw-r--r--freetype/src/cff/cf2font.h7
-rw-r--r--freetype/src/cff/cf2ft.c23
-rw-r--r--freetype/src/cff/cf2ft.h2
-rw-r--r--freetype/src/cff/cf2hints.c6
-rw-r--r--freetype/src/cff/cf2intrp.c52
-rw-r--r--freetype/src/cff/cff.c2
-rw-r--r--freetype/src/cff/cffcmap.c2
-rw-r--r--freetype/src/cff/cffcmap.h2
-rw-r--r--freetype/src/cff/cffdrivr.c100
-rw-r--r--freetype/src/cff/cffdrivr.h2
-rw-r--r--freetype/src/cff/cfferrs.h2
-rw-r--r--freetype/src/cff/cffgload.c99
-rw-r--r--freetype/src/cff/cffgload.h9
-rw-r--r--freetype/src/cff/cffload.c12
-rw-r--r--freetype/src/cff/cffload.h2
-rw-r--r--freetype/src/cff/cffobjs.c41
-rw-r--r--freetype/src/cff/cffobjs.h2
-rw-r--r--freetype/src/cff/cffparse.c32
-rw-r--r--freetype/src/cff/cffparse.h2
-rw-r--r--freetype/src/cff/cffpic.c2
-rw-r--r--freetype/src/cff/cffpic.h2
-rw-r--r--freetype/src/cff/cfftoken.h2
-rw-r--r--freetype/src/cff/cfftypes.h2
-rw-r--r--freetype/src/cff/module.mk2
-rw-r--r--freetype/src/cff/rules.mk7
-rw-r--r--freetype/src/cid/Jamfile2
-rw-r--r--freetype/src/cid/ciderrs.h2
-rw-r--r--freetype/src/cid/cidgload.c24
-rw-r--r--freetype/src/cid/cidgload.h2
-rw-r--r--freetype/src/cid/cidload.c36
-rw-r--r--freetype/src/cid/cidload.h4
-rw-r--r--freetype/src/cid/cidobjs.c14
-rw-r--r--freetype/src/cid/cidobjs.h2
-rw-r--r--freetype/src/cid/cidparse.c19
-rw-r--r--freetype/src/cid/cidparse.h6
-rwxr-xr-x[-rw-r--r--]freetype/src/cid/cidriver.c6
-rw-r--r--freetype/src/cid/cidriver.h2
-rw-r--r--freetype/src/cid/cidtoken.h2
-rw-r--r--freetype/src/cid/module.mk2
-rw-r--r--freetype/src/cid/rules.mk7
-rw-r--r--freetype/src/cid/type1cid.c2
-rw-r--r--freetype/src/gxvalid/Jamfile2
-rw-r--r--freetype/src/gxvalid/README2
-rw-r--r--freetype/src/gxvalid/gxvalid.c3
-rw-r--r--freetype/src/gxvalid/gxvalid.h3
-rw-r--r--freetype/src/gxvalid/gxvbsln.c5
-rw-r--r--freetype/src/gxvalid/gxvcommn.c39
-rw-r--r--freetype/src/gxvalid/gxvcommn.h6
-rw-r--r--freetype/src/gxvalid/gxverror.h4
-rw-r--r--freetype/src/gxvalid/gxvfeat.c2
-rw-r--r--freetype/src/gxvalid/gxvfeat.h3
-rw-r--r--freetype/src/gxvalid/gxvfgen.c3
-rw-r--r--freetype/src/gxvalid/gxvjust.c38
-rw-r--r--freetype/src/gxvalid/gxvkern.c8
-rw-r--r--freetype/src/gxvalid/gxvlcar.c9
-rw-r--r--freetype/src/gxvalid/gxvmod.c4
-rw-r--r--freetype/src/gxvalid/gxvmod.h3
-rw-r--r--freetype/src/gxvalid/gxvmort.c7
-rw-r--r--freetype/src/gxvalid/gxvmort.h3
-rw-r--r--freetype/src/gxvalid/gxvmort0.c3
-rw-r--r--freetype/src/gxvalid/gxvmort1.c5
-rw-r--r--freetype/src/gxvalid/gxvmort2.c5
-rw-r--r--freetype/src/gxvalid/gxvmort4.c3
-rw-r--r--freetype/src/gxvalid/gxvmort5.c3
-rw-r--r--freetype/src/gxvalid/gxvmorx.c4
-rw-r--r--freetype/src/gxvalid/gxvmorx.h3
-rw-r--r--freetype/src/gxvalid/gxvmorx0.c3
-rw-r--r--freetype/src/gxvalid/gxvmorx1.c7
-rw-r--r--freetype/src/gxvalid/gxvmorx2.c6
-rw-r--r--freetype/src/gxvalid/gxvmorx4.c3
-rw-r--r--freetype/src/gxvalid/gxvmorx5.c3
-rw-r--r--freetype/src/gxvalid/gxvopbd.c5
-rw-r--r--freetype/src/gxvalid/gxvprop.c5
-rw-r--r--freetype/src/gxvalid/gxvtrak.c10
-rw-r--r--freetype/src/gxvalid/module.mk6
-rw-r--r--freetype/src/gxvalid/rules.mk8
-rw-r--r--freetype/src/gzip/Jamfile2
-rw-r--r--freetype/src/gzip/ftgzip.c3
-rw-r--r--freetype/src/gzip/rules.mk11
-rw-r--r--freetype/src/lzw/Jamfile2
-rw-r--r--freetype/src/lzw/ftlzw.c5
-rw-r--r--freetype/src/lzw/ftzopen.c5
-rw-r--r--freetype/src/lzw/ftzopen.h7
-rw-r--r--freetype/src/lzw/rules.mk10
-rw-r--r--freetype/src/otvalid/Jamfile2
-rw-r--r--freetype/src/otvalid/module.mk2
-rw-r--r--freetype/src/otvalid/otvalid.c2
-rw-r--r--freetype/src/otvalid/otvalid.h2
-rw-r--r--freetype/src/otvalid/otvbase.c2
-rw-r--r--freetype/src/otvalid/otvcommn.c4
-rw-r--r--freetype/src/otvalid/otvcommn.h2
-rw-r--r--freetype/src/otvalid/otverror.h2
-rw-r--r--freetype/src/otvalid/otvgdef.c4
-rw-r--r--freetype/src/otvalid/otvgpos.c10
-rw-r--r--freetype/src/otvalid/otvgpos.h2
-rw-r--r--freetype/src/otvalid/otvgsub.c10
-rw-r--r--freetype/src/otvalid/otvjstf.c2
-rw-r--r--freetype/src/otvalid/otvmath.c10
-rw-r--r--freetype/src/otvalid/otvmod.c2
-rw-r--r--freetype/src/otvalid/otvmod.h2
-rw-r--r--freetype/src/otvalid/rules.mk7
-rw-r--r--freetype/src/pcf/Jamfile2
-rw-r--r--freetype/src/pcf/pcf.h4
-rw-r--r--freetype/src/pcf/pcfdrivr.c50
-rw-r--r--freetype/src/pcf/pcfread.c37
-rw-r--r--freetype/src/pcf/rules.mk5
-rw-r--r--freetype/src/pfr/Jamfile2
-rw-r--r--freetype/src/pfr/module.mk2
-rw-r--r--freetype/src/pfr/pfr.c2
-rw-r--r--freetype/src/pfr/pfrcmap.c2
-rw-r--r--freetype/src/pfr/pfrcmap.h2
-rw-r--r--freetype/src/pfr/pfrdrivr.c20
-rw-r--r--freetype/src/pfr/pfrdrivr.h2
-rw-r--r--freetype/src/pfr/pfrerror.h2
-rw-r--r--freetype/src/pfr/pfrgload.c8
-rw-r--r--freetype/src/pfr/pfrgload.h2
-rw-r--r--freetype/src/pfr/pfrload.c19
-rw-r--r--freetype/src/pfr/pfrload.h4
-rwxr-xr-xfreetype/src/pfr/pfrobjs.c28
-rw-r--r--freetype/src/pfr/pfrobjs.h2
-rw-r--r--freetype/src/pfr/pfrsbit.c71
-rw-r--r--freetype/src/pfr/pfrsbit.h2
-rw-r--r--freetype/src/pfr/pfrtypes.h6
-rw-r--r--freetype/src/pfr/rules.mk7
-rw-r--r--freetype/src/psaux/Jamfile2
-rw-r--r--freetype/src/psaux/afmparse.c45
-rw-r--r--freetype/src/psaux/afmparse.h5
-rw-r--r--freetype/src/psaux/module.mk2
-rw-r--r--freetype/src/psaux/psaux.c2
-rw-r--r--freetype/src/psaux/psauxerr.h2
-rw-r--r--freetype/src/psaux/psauxmod.c2
-rw-r--r--freetype/src/psaux/psauxmod.h2
-rw-r--r--freetype/src/psaux/psconv.c6
-rw-r--r--freetype/src/psaux/psconv.h2
-rw-r--r--freetype/src/psaux/psobjs.c36
-rw-r--r--freetype/src/psaux/psobjs.h12
-rw-r--r--freetype/src/psaux/rules.mk7
-rw-r--r--freetype/src/psaux/t1cmap.c10
-rw-r--r--freetype/src/psaux/t1cmap.h2
-rw-r--r--freetype/src/psaux/t1decode.c32
-rw-r--r--freetype/src/psaux/t1decode.h2
-rw-r--r--freetype/src/pshinter/Jamfile2
-rw-r--r--freetype/src/pshinter/module.mk2
-rw-r--r--freetype/src/pshinter/pshalgo.c49
-rw-r--r--freetype/src/pshinter/pshalgo.h49
-rw-r--r--freetype/src/pshinter/pshglob.c10
-rw-r--r--freetype/src/pshinter/pshglob.h2
-rw-r--r--freetype/src/pshinter/pshinter.c2
-rw-r--r--freetype/src/pshinter/pshmod.c2
-rw-r--r--freetype/src/pshinter/pshmod.h2
-rw-r--r--freetype/src/pshinter/pshnterr.h2
-rw-r--r--freetype/src/pshinter/pshpic.c2
-rw-r--r--freetype/src/pshinter/pshpic.h2
-rw-r--r--freetype/src/pshinter/pshrec.c190
-rw-r--r--freetype/src/pshinter/pshrec.h10
-rw-r--r--freetype/src/pshinter/rules.mk7
-rw-r--r--freetype/src/psnames/Jamfile2
-rw-r--r--freetype/src/psnames/module.mk2
-rw-r--r--freetype/src/psnames/psmodule.c4
-rw-r--r--freetype/src/psnames/psmodule.h2
-rw-r--r--freetype/src/psnames/psnamerr.h2
-rw-r--r--freetype/src/psnames/psnames.c2
-rw-r--r--freetype/src/psnames/pspic.c2
-rw-r--r--freetype/src/psnames/pspic.h2
-rw-r--r--freetype/src/psnames/pstables.h2
-rw-r--r--freetype/src/psnames/rules.mk7
-rw-r--r--freetype/src/raster/Jamfile2
-rw-r--r--freetype/src/raster/ftmisc.h2
-rw-r--r--freetype/src/raster/ftraster.c715
-rw-r--r--freetype/src/raster/ftraster.h2
-rw-r--r--freetype/src/raster/ftrend1.c114
-rw-r--r--freetype/src/raster/ftrend1.h2
-rw-r--r--freetype/src/raster/module.mk2
-rw-r--r--freetype/src/raster/raster.c2
-rw-r--r--freetype/src/raster/rasterrs.h2
-rw-r--r--freetype/src/raster/rastpic.c2
-rw-r--r--freetype/src/raster/rastpic.h2
-rw-r--r--freetype/src/raster/rules.mk7
-rw-r--r--freetype/src/sfnt/Jamfile2
-rw-r--r--freetype/src/sfnt/module.mk2
-rw-r--r--freetype/src/sfnt/pngshim.c35
-rw-r--r--freetype/src/sfnt/pngshim.h3
-rw-r--r--freetype/src/sfnt/rules.mk7
-rw-r--r--freetype/src/sfnt/sfdriver.c8
-rw-r--r--freetype/src/sfnt/sfdriver.h2
-rw-r--r--freetype/src/sfnt/sferrors.h2
-rw-r--r--freetype/src/sfnt/sfnt.c2
-rw-r--r--freetype/src/sfnt/sfntpic.c2
-rw-r--r--freetype/src/sfnt/sfntpic.h2
-rw-r--r--freetype/src/sfnt/sfobjs.c33
-rw-r--r--freetype/src/sfnt/sfobjs.h2
-rw-r--r--freetype/src/sfnt/ttbdf.c2
-rw-r--r--freetype/src/sfnt/ttbdf.h2
-rw-r--r--freetype/src/sfnt/ttcmap.c24
-rw-r--r--freetype/src/sfnt/ttcmap.h2
-rw-r--r--freetype/src/sfnt/ttcmapc.h2
-rw-r--r--freetype/src/sfnt/ttkern.c6
-rw-r--r--freetype/src/sfnt/ttkern.h2
-rw-r--r--freetype/src/sfnt/ttload.c57
-rw-r--r--freetype/src/sfnt/ttload.h2
-rw-r--r--freetype/src/sfnt/ttmtx.c2
-rw-r--r--freetype/src/sfnt/ttmtx.h2
-rw-r--r--freetype/src/sfnt/ttpost.c34
-rw-r--r--freetype/src/sfnt/ttpost.h2
-rw-r--r--freetype/src/sfnt/ttsbit.c62
-rw-r--r--freetype/src/sfnt/ttsbit.h2
-rw-r--r--freetype/src/smooth/Jamfile2
-rw-r--r--freetype/src/smooth/ftgrays.c124
-rw-r--r--freetype/src/smooth/ftgrays.h2
-rw-r--r--freetype/src/smooth/ftsmerrs.h2
-rw-r--r--freetype/src/smooth/ftsmooth.c8
-rw-r--r--freetype/src/smooth/ftsmooth.h2
-rw-r--r--freetype/src/smooth/ftspic.c2
-rw-r--r--freetype/src/smooth/ftspic.h2
-rw-r--r--freetype/src/smooth/module.mk2
-rw-r--r--freetype/src/smooth/rules.mk8
-rw-r--r--freetype/src/smooth/smooth.c2
-rw-r--r--freetype/src/tools/afblue.pl2
-rw-r--r--freetype/src/tools/apinames.c6
-rw-r--r--freetype/src/tools/docmaker/content.py2
-rw-r--r--freetype/src/tools/docmaker/docmaker.py2
-rw-r--r--freetype/src/tools/docmaker/formatter.py2
-rw-r--r--freetype/src/tools/docmaker/sources.py2
-rw-r--r--freetype/src/tools/docmaker/tohtml.py2
-rw-r--r--freetype/src/tools/docmaker/utils.py2
-rw-r--r--freetype/src/tools/glnames.py6
-rwxr-xr-xfreetype/src/tools/no-copyright61
-rw-r--r--freetype/src/tools/test_afm.c2
-rwxr-xr-xfreetype/src/tools/update-copyright14
-rwxr-xr-xfreetype/src/tools/update-copyright-year135
-rw-r--r--freetype/src/truetype/Jamfile2
-rw-r--r--freetype/src/truetype/module.mk2
-rw-r--r--freetype/src/truetype/rules.mk7
-rw-r--r--freetype/src/truetype/truetype.c2
-rwxr-xr-x[-rw-r--r--]freetype/src/truetype/ttdriver.c16
-rw-r--r--freetype/src/truetype/ttdriver.h2
-rw-r--r--freetype/src/truetype/tterrors.h2
-rw-r--r--freetype/src/truetype/ttgload.c362
-rw-r--r--freetype/src/truetype/ttgload.h2
-rw-r--r--freetype/src/truetype/ttgxvar.c931
-rw-r--r--freetype/src/truetype/ttgxvar.h10
-rw-r--r--freetype/src/truetype/ttinterp.c5960
-rw-r--r--freetype/src/truetype/ttinterp.h64
-rw-r--r--freetype/src/truetype/ttobjs.c66
-rw-r--r--freetype/src/truetype/ttobjs.h12
-rw-r--r--freetype/src/truetype/ttpic.c2
-rw-r--r--freetype/src/truetype/ttpic.h2
-rw-r--r--freetype/src/truetype/ttpload.c16
-rw-r--r--freetype/src/truetype/ttpload.h2
-rw-r--r--freetype/src/truetype/ttsubpix.c84
-rw-r--r--freetype/src/truetype/ttsubpix.h42
-rw-r--r--freetype/src/type1/Jamfile2
-rw-r--r--freetype/src/type1/module.mk2
-rw-r--r--freetype/src/type1/rules.mk7
-rw-r--r--freetype/src/type1/t1afm.c8
-rw-r--r--freetype/src/type1/t1afm.h2
-rw-r--r--freetype/src/type1/t1driver.c36
-rw-r--r--freetype/src/type1/t1driver.h2
-rw-r--r--freetype/src/type1/t1errors.h2
-rw-r--r--freetype/src/type1/t1gload.c10
-rw-r--r--freetype/src/type1/t1gload.h2
-rw-r--r--freetype/src/type1/t1load.c237
-rw-r--r--freetype/src/type1/t1load.h2
-rw-r--r--freetype/src/type1/t1objs.c10
-rw-r--r--freetype/src/type1/t1objs.h2
-rw-r--r--freetype/src/type1/t1parse.c24
-rw-r--r--freetype/src/type1/t1parse.h8
-rw-r--r--freetype/src/type1/t1tokens.h2
-rw-r--r--freetype/src/type1/type1.c2
-rw-r--r--freetype/src/type42/Jamfile2
-rw-r--r--freetype/src/type42/module.mk2
-rw-r--r--freetype/src/type42/rules.mk7
-rw-r--r--freetype/src/type42/t42drivr.c6
-rw-r--r--freetype/src/type42/t42drivr.h3
-rw-r--r--freetype/src/type42/t42error.h2
-rw-r--r--freetype/src/type42/t42objs.c20
-rw-r--r--freetype/src/type42/t42objs.h4
-rw-r--r--freetype/src/type42/t42parse.c71
-rw-r--r--freetype/src/type42/t42parse.h7
-rw-r--r--freetype/src/type42/t42types.h5
-rw-r--r--freetype/src/type42/type42.c2
-rw-r--r--freetype/src/winfonts/Jamfile2
-rw-r--r--freetype/src/winfonts/fnterrs.h2
-rw-r--r--freetype/src/winfonts/module.mk2
-rw-r--r--freetype/src/winfonts/rules.mk7
-rw-r--r--freetype/src/winfonts/winfnt.c50
-rw-r--r--freetype/src/winfonts/winfnt.h2
-rw-r--r--freetype/vms_make.com10
-rw-r--r--include/xcb/xcbext.h77
-rw-r--r--libX11/modules/im/ximcp/imLcPrs.c6
-rw-r--r--libX11/modules/om/generic/omGeneric.c2
-rw-r--r--libX11/src/FontNames.c2
-rw-r--r--libX11/src/GetFPath.c2
-rw-r--r--libX11/src/ListExt.c2
-rwxr-xr-xlibxcb/src/c_client.py103
-rwxr-xr-xlibxcb/src/xcb_in.c1
-rw-r--r--libxcb/src/xcb_out.c85
-rw-r--r--libxcb/src/xcbext.h77
-rw-r--r--libxcb/xcb-proto/doc/xml-xcb.txt11
-rw-r--r--libxcb/xcb-proto/src/present.xml10
-rw-r--r--libxcb/xcb-proto/src/xprint.xml8
-rw-r--r--mesalib/Android.common.mk9
-rw-r--r--mesalib/Android.mk12
-rw-r--r--mesalib/CleanSpec.mk1
-rw-r--r--mesalib/VERSION2
-rw-r--r--mesalib/configure.ac32
-rw-r--r--mesalib/docs/GL3.txt16
-rw-r--r--mesalib/docs/devinfo.html394
-rw-r--r--mesalib/docs/index.html19
-rw-r--r--mesalib/docs/relnotes.html3
-rw-r--r--mesalib/docs/relnotes/10.5.6.html147
-rw-r--r--mesalib/docs/relnotes/10.5.7.html103
-rw-r--r--mesalib/docs/relnotes/10.6.0.html248
-rw-r--r--mesalib/docs/relnotes/10.7.0.html60
-rw-r--r--mesalib/include/EGL/egl.h562
-rw-r--r--mesalib/include/EGL/eglext.h258
-rw-r--r--mesalib/include/EGL/eglmesaext.h33
-rw-r--r--mesalib/include/EGL/eglplatform.h19
-rw-r--r--mesalib/include/KHR/khrplatform.h19
-rw-r--r--mesalib/scons/llvm.py4
-rw-r--r--mesalib/src/Makefile.am3
-rw-r--r--mesalib/src/gallium/Android.common.mk8
-rw-r--r--mesalib/src/gallium/Android.mk15
-rw-r--r--mesalib/src/gallium/auxiliary/Android.mk11
-rw-r--r--mesalib/src/gallium/auxiliary/hud/hud_context.c6
-rw-r--r--mesalib/src/gallium/auxiliary/nir/tgsi_to_nir.c3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blit.c6
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blitter.c27
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_blitter.h16
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_dump_state.c2
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_format_etc.c3
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_math.h20
-rw-r--r--mesalib/src/gallium/auxiliary/util/u_tests.h8
-rw-r--r--mesalib/src/glsl/Android.mk1
-rw-r--r--mesalib/src/glsl/Makefile.am33
-rw-r--r--mesalib/src/glsl/SConscript4
-rw-r--r--mesalib/src/glsl/ast_array_index.cpp2
-rw-r--r--mesalib/src/glsl/ast_function.cpp30
-rw-r--r--mesalib/src/glsl/ast_to_hir.cpp128
-rwxr-xr-xmesalib/src/glsl/builtin_functions.cpp18
-rw-r--r--mesalib/src/glsl/glsl_parser_extras.cpp4
-rw-r--r--mesalib/src/glsl/glsl_types.cpp2
-rw-r--r--mesalib/src/glsl/glsl_types.h14
-rwxr-xr-xmesalib/src/glsl/ir.cpp4
-rw-r--r--mesalib/src/glsl/ir.h24
-rw-r--r--mesalib/src/glsl/ir_hierarchical_visitor.cpp9
-rw-r--r--mesalib/src/glsl/ir_hierarchical_visitor.h3
-rw-r--r--mesalib/src/glsl/ir_hv_accept.cpp6
-rw-r--r--mesalib/src/glsl/ir_print_visitor.cpp5
-rw-r--r--mesalib/src/glsl/ir_print_visitor.h1
-rw-r--r--mesalib/src/glsl/ir_uniform.h5
-rw-r--r--mesalib/src/glsl/ir_visitor.h2
-rw-r--r--mesalib/src/glsl/link_atomics.cpp2
-rw-r--r--mesalib/src/glsl/link_uniform_initializers.cpp4
-rw-r--r--mesalib/src/glsl/link_uniforms.cpp55
-rw-r--r--mesalib/src/glsl/link_varyings.cpp2
-rw-r--r--mesalib/src/glsl/linker.cpp30
-rw-r--r--mesalib/src/glsl/lower_clip_distance.cpp8
-rw-r--r--mesalib/src/glsl/main.cpp8
-rw-r--r--mesalib/src/glsl/nir/glsl_to_nir.cpp15
-rw-r--r--mesalib/src/glsl/nir/nir_intrinsics.h20
-rw-r--r--mesalib/src/glsl/nir/nir_lower_atomics.c2
-rw-r--r--mesalib/src/glsl/nir/nir_lower_io.c2
-rw-r--r--mesalib/src/glsl/nir/nir_lower_phis_to_scalar.c5
-rw-r--r--mesalib/src/glsl/nir/nir_opt_algebraic.py2
-rw-r--r--mesalib/src/glsl/nir/nir_opt_peephole_ffma.c19
-rw-r--r--mesalib/src/glsl/standalone_scaffolding.cpp2
-rwxr-xr-xmesalib/src/loader/Android.mk2
-rwxr-xr-xmesalib/src/loader/Makefile.am10
-rw-r--r--mesalib/src/mapi/glapi/gen/AMD_performance_monitor.xml22
-rw-r--r--mesalib/src/mapi/glapi/gen/APPLE_object_purgeable.xml6
-rw-r--r--mesalib/src/mapi/glapi/gen/APPLE_vertex_array_object.xml10
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_ES2_compatibility.xml10
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_base_instance.xml9
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_blend_func_extended.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_clear_buffer_object.xml8
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_clear_texture.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_clip_control.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_copy_buffer.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_copy_image.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_direct_state_access.xml158
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_draw_buffers_blend.xml8
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml11
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_draw_indirect.xml8
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_draw_instanced.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_framebuffer_object.xml46
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_geometry_shader4.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_get_program_binary.xml6
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_gpu_shader_fp64.xml36
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_internalformat_query.xml3
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_invalidate_subdata.xml12
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_map_buffer_range.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_multi_bind.xml12
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_program_interface_query.xml12
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_robustness.xml40
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_sampler_objects.xml28
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_separate_shader_objects.xml122
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_shader_atomic_counters.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_shader_image_load_store.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_sync.xml14
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_texture_buffer_range.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_texture_multisample.xml8
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_texture_storage.xml12
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_texture_storage_multisample.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_texture_view.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml14
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_vertex_array_object.xml8
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml20
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml12
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_vertex_type_2_10_10_10_rev.xml106
-rw-r--r--mesalib/src/mapi/glapi/gen/ARB_viewport_array.xml20
-rw-r--r--mesalib/src/mapi/glapi/gen/EXT_framebuffer_object.xml6
-rw-r--r--mesalib/src/mapi/glapi/gen/EXT_gpu_shader4.xml28
-rw-r--r--mesalib/src/mapi/glapi/gen/EXT_provoking_vertex.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/EXT_separate_shader_objects.xml94
-rw-r--r--mesalib/src/mapi/glapi/gen/EXT_texture_integer.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/EXT_transform_feedback.xml16
-rw-r--r--mesalib/src/mapi/glapi/gen/GL3x.xml100
-rw-r--r--mesalib/src/mapi/glapi/gen/GL4x.xml10
-rw-r--r--mesalib/src/mapi/glapi/gen/INTEL_performance_query.xml20
-rw-r--r--mesalib/src/mapi/glapi/gen/KHR_debug.xml20
-rw-r--r--mesalib/src/mapi/glapi/gen/Makefile.am8
-rw-r--r--mesalib/src/mapi/glapi/gen/NV_primitive_restart.xml4
-rw-r--r--mesalib/src/mapi/glapi/gen/NV_texture_barrier.xml2
-rw-r--r--mesalib/src/mapi/glapi/gen/NV_vdpau_interop.xml20
-rw-r--r--mesalib/src/mapi/glapi/gen/OES_EGL_image.xml6
-rw-r--r--mesalib/src/mapi/glapi/gen/OES_fixed_point.xml123
-rw-r--r--mesalib/src/mapi/glapi/gen/OES_single_precision.xml17
-rw-r--r--mesalib/src/mapi/glapi/gen/apiexec.py240
-rw-r--r--mesalib/src/mapi/glapi/gen/es_EXT.xml166
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gen.sh6
-rwxr-xr-xmesalib/src/mapi/glapi/gen/glX_proto_recv.py62
-rwxr-xr-xmesalib/src/mapi/glapi/gen/glX_proto_send.py70
-rwxr-xr-xmesalib/src/mapi/glapi/gen/glX_proto_size.py99
-rwxr-xr-xmesalib/src/mapi/glapi/gen/glX_server_table.py38
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_API.dtd2
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_API.xml1741
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_SPARC_asm.py41
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_XML.py20
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_and_es_API.xml86
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_apitemp.py44
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_enums.py34
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_genexec.py90
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_gentable.py34
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_procs.py52
-rwxr-xr-xmesalib/src/mapi/glapi/gen/gl_table.py97
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py47
-rw-r--r--mesalib/src/mapi/glapi/gen/gl_x86_asm.py45
-rwxr-xr-xmesalib/src/mapi/glapi/gen/remap_helper.py53
-rw-r--r--mesalib/src/mapi/glapi/gen/static_data.py1729
-rw-r--r--mesalib/src/mesa/Android.gen.mk16
-rw-r--r--mesalib/src/mesa/Android.libmesa_glsl_utils.mk6
-rw-r--r--mesalib/src/mesa/Makefile.am1
-rw-r--r--mesalib/src/mesa/drivers/SConscript3
-rwxr-xr-xmesalib/src/mesa/drivers/common/meta_blit.c6
-rw-r--r--mesalib/src/mesa/drivers/common/meta_tex_subimage.c12
-rw-r--r--mesalib/src/mesa/drivers/dri/Makefile.am1
-rw-r--r--mesalib/src/mesa/drivers/dri/common/Android.mk8
-rw-r--r--mesalib/src/mesa/drivers/dri/common/Makefile.am6
-rw-r--r--mesalib/src/mesa/drivers/dri/common/Makefile.sources4
-rw-r--r--mesalib/src/mesa/drivers/dri/common/SConscript2
-rwxr-xr-xmesalib/src/mesa/drivers/dri/common/dri_util.c24
-rwxr-xr-xmesalib/src/mesa/drivers/dri/swrast/swrast.c3
-rw-r--r--mesalib/src/mesa/drivers/haiku/swrast/SConscript33
-rw-r--r--mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp697
-rw-r--r--mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.h95
-rw-r--r--mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.rdef39
-rw-r--r--mesalib/src/mesa/main/api_exec.h3
-rw-r--r--mesalib/src/mesa/main/api_loopback.c2
-rw-r--r--mesalib/src/mesa/main/arrayobj.c22
-rw-r--r--mesalib/src/mesa/main/attrib.c22
-rw-r--r--mesalib/src/mesa/main/blit.c7
-rwxr-xr-xmesalib/src/mesa/main/bufferobj.c105
-rw-r--r--mesalib/src/mesa/main/buffers.c21
-rw-r--r--mesalib/src/mesa/main/clear.c32
-rw-r--r--mesalib/src/mesa/main/config.h13
-rw-r--r--mesalib/src/mesa/main/context.c73
-rw-r--r--mesalib/src/mesa/main/copyimage.c39
-rw-r--r--mesalib/src/mesa/main/depth.c6
-rw-r--r--mesalib/src/mesa/main/dlist.c30
-rw-r--r--mesalib/src/mesa/main/errors.c1
-rw-r--r--mesalib/src/mesa/main/extensions.c2
-rw-r--r--mesalib/src/mesa/main/fbobject.c103
-rw-r--r--mesalib/src/mesa/main/formats.c11
-rw-r--r--mesalib/src/mesa/main/genmipmap.c7
-rw-r--r--mesalib/src/mesa/main/get.c12
-rw-r--r--mesalib/src/mesa/main/get_hash_params.py8
-rw-r--r--mesalib/src/mesa/main/getstring.c16
-rw-r--r--mesalib/src/mesa/main/glformats.c43
-rw-r--r--mesalib/src/mesa/main/glformats.h2
-rw-r--r--mesalib/src/mesa/main/glheader.h6
-rw-r--r--mesalib/src/mesa/main/hash.c28
-rw-r--r--mesalib/src/mesa/main/hash.h3
-rw-r--r--mesalib/src/mesa/main/mtypes.h14
-rw-r--r--mesalib/src/mesa/main/pipelineobj.c6
-rw-r--r--mesalib/src/mesa/main/program_resource.c6
-rwxr-xr-xmesalib/src/mesa/main/queryobj.c7
-rw-r--r--mesalib/src/mesa/main/readpix.c25
-rw-r--r--mesalib/src/mesa/main/readpix.h3
-rw-r--r--mesalib/src/mesa/main/samplerobj.c7
-rw-r--r--mesalib/src/mesa/main/shader_query.cpp25
-rw-r--r--mesalib/src/mesa/main/shaderapi.c6
-rw-r--r--mesalib/src/mesa/main/shaderobj.c4
-rw-r--r--mesalib/src/mesa/main/shared.c1
-rw-r--r--mesalib/src/mesa/main/state.c2
-rw-r--r--mesalib/src/mesa/main/texgetimage.c14
-rw-r--r--mesalib/src/mesa/main/teximage.c76
-rw-r--r--mesalib/src/mesa/main/texobj.c14
-rw-r--r--mesalib/src/mesa/main/texparam.c84
-rw-r--r--mesalib/src/mesa/main/texstorage.c7
-rw-r--r--mesalib/src/mesa/main/textureview.c95
-rw-r--r--mesalib/src/mesa/main/textureview.h9
-rw-r--r--mesalib/src/mesa/main/transformfeedback.c42
-rw-r--r--mesalib/src/mesa/main/uniform_query.cpp15
-rw-r--r--mesalib/src/mesa/main/uniforms.h4
-rw-r--r--mesalib/src/mesa/main/varray.c64
-rw-r--r--mesalib/src/mesa/main/version.c75
-rw-r--r--mesalib/src/mesa/main/version.h3
-rw-r--r--mesalib/src/mesa/main/vtxfmt.c2
-rw-r--r--mesalib/src/mesa/program/dummy_errors.c30
-rw-r--r--mesalib/src/mesa/program/ir_to_mesa.cpp20
-rw-r--r--mesalib/src/mesa/program/prog_execute.c2
-rw-r--r--mesalib/src/mesa/program/prog_instruction.c12
-rw-r--r--mesalib/src/mesa/program/prog_instruction.h33
-rw-r--r--mesalib/src/mesa/program/prog_optimize.c4
-rw-r--r--mesalib/src/mesa/program/prog_print.c8
-rw-r--r--mesalib/src/mesa/program/prog_to_nir.c108
-rw-r--r--mesalib/src/mesa/program/program.c24
-rw-r--r--mesalib/src/mesa/program/program_parse.y8
-rw-r--r--mesalib/src/mesa/program/program_parse_extra.c4
-rw-r--r--mesalib/src/mesa/program/programopt.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_shader.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_bitmap.c8
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_blit.c4
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_clear.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawpixels.c8
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_drawtex.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_program.c8
-rw-r--r--mesalib/src/mesa/state_tracker/st_context.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_draw.c2
-rw-r--r--mesalib/src/mesa/state_tracker/st_extensions.c6
-rw-r--r--mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp829
-rw-r--r--mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.h2
-rw-r--r--mesalib/src/mesa/state_tracker/st_manager.c3
-rw-r--r--mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c9
-rw-r--r--mesalib/src/mesa/state_tracker/st_program.c24
-rw-r--r--mesalib/src/mesa/state_tracker/st_program.h1
-rw-r--r--mesalib/src/mesa/tnl/t_context.c1
-rw-r--r--mesalib/src/mesa/vbo/vbo_exec_array.c5
-rw-r--r--mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj1
-rw-r--r--mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj.filters3
-rw-r--r--mesalib/windows/VC8/mesa/mesa/mesa.vcxproj1
-rw-r--r--mesalib/windows/VC8/mesa/mesa/mesa.vcxproj.filters3
-rw-r--r--openssl/CHANGES90
-rwxr-xr-xopenssl/Configure45
-rw-r--r--openssl/Makefile.org26
-rw-r--r--openssl/NEWS12
-rw-r--r--openssl/README2
-rw-r--r--openssl/apps/Makefile19
-rw-r--r--openssl/apps/apps.c6
-rw-r--r--openssl/apps/asn1pars.c2
-rw-r--r--openssl/apps/ca.c10
-rw-r--r--openssl/apps/cms.c4
-rw-r--r--openssl/apps/enc.c13
-rw-r--r--openssl/apps/ocsp.c2
-rw-r--r--openssl/apps/s_cb.c5
-rw-r--r--openssl/apps/s_client.c15
-rw-r--r--openssl/apps/s_server.c79
-rw-r--r--openssl/apps/s_time.c2
-rw-r--r--openssl/apps/smime.c2
-rw-r--r--openssl/apps/speed.c11
-rw-r--r--openssl/apps/srp.c4
-rw-r--r--openssl/apps/verify.c2
-rw-r--r--openssl/crypto/Makefile11
-rw-r--r--openssl/crypto/aes/Makefile2
-rwxr-xr-xopenssl/crypto/aes/asm/aesni-sha256-x86_64.pl6
-rw-r--r--openssl/crypto/aes/asm/aesni-x86.pl319
-rw-r--r--openssl/crypto/aes/asm/aesni-x86_64.pl945
-rwxr-xr-xopenssl/crypto/aes/asm/aesv8-armx.pl209
-rw-r--r--openssl/crypto/asn1/Makefile2
-rw-r--r--openssl/crypto/asn1/a_int.c6
-rw-r--r--openssl/crypto/asn1/ameth_lib.c18
-rw-r--r--openssl/crypto/asn1/asn1_gen.c40
-rw-r--r--openssl/crypto/asn1/asn_mime.c3
-rw-r--r--openssl/crypto/asn1/bio_ndef.c4
-rw-r--r--openssl/crypto/asn1/tasn_new.c3
-rw-r--r--openssl/crypto/asn1/tasn_prn.c2
-rw-r--r--openssl/crypto/asn1/x_x509.c4
-rw-r--r--openssl/crypto/bf/Makefile2
-rw-r--r--openssl/crypto/bio/Makefile2
-rw-r--r--openssl/crypto/bio/b_print.c45
-rw-r--r--openssl/crypto/bio/bf_nbio.c6
-rw-r--r--openssl/crypto/bio/bio_lib.c8
-rw-r--r--openssl/crypto/bio/bss_dgram.c23
-rw-r--r--openssl/crypto/bn/Makefile2
-rwxr-xr-xopenssl/crypto/bn/asm/vis3-mont.pl10
-rw-r--r--openssl/crypto/bn/asm/x86_64-mont5.pl13
-rw-r--r--openssl/crypto/bn/bn.h5
-rw-r--r--openssl/crypto/bn/bn_err.c6
-rw-r--r--openssl/crypto/bn/bn_gf2m.c18
-rw-r--r--openssl/crypto/bn/bn_lcl.h2
-rw-r--r--openssl/crypto/bn/bn_print.c7
-rw-r--r--openssl/crypto/bn/bn_rand.c10
-rw-r--r--openssl/crypto/bn/bn_shift.c10
-rw-r--r--openssl/crypto/buffer/Makefile2
-rw-r--r--openssl/crypto/buffer/buffer.c2
-rw-r--r--openssl/crypto/camellia/Makefile2
-rw-r--r--openssl/crypto/cast/Makefile2
-rw-r--r--openssl/crypto/cmac/Makefile2
-rw-r--r--openssl/crypto/cmac/cmac.c2
-rw-r--r--openssl/crypto/cms/Makefile2
-rwxr-xr-xopenssl/crypto/cms/cms_kari.c4
-rw-r--r--openssl/crypto/cms/cms_pwri.c7
-rw-r--r--openssl/crypto/cms/cms_smime.c2
-rw-r--r--openssl/crypto/comp/Makefile2
-rw-r--r--openssl/crypto/conf/Makefile2
-rwxr-xr-xopenssl/crypto/cryptlib.c2
-rw-r--r--openssl/crypto/des/Makefile2
-rw-r--r--openssl/crypto/des/des.c6
-rw-r--r--openssl/crypto/des/enc_writ.c7
-rw-r--r--openssl/crypto/dh/Makefile2
-rw-r--r--openssl/crypto/dh/dh_ameth.c2
-rw-r--r--openssl/crypto/dh/dh_pmeth.c2
-rw-r--r--openssl/crypto/dsa/Makefile2
-rw-r--r--openssl/crypto/dsa/dsa_gen.c3
-rw-r--r--openssl/crypto/dsa/dsa_ossl.c8
-rw-r--r--openssl/crypto/dso/Makefile2
-rw-r--r--openssl/crypto/dso/dso_lib.c2
-rw-r--r--openssl/crypto/dso/dso_vms.c2
-rw-r--r--openssl/crypto/ebcdic.c2
-rw-r--r--openssl/crypto/ec/Makefile2
-rwxr-xr-xopenssl/crypto/ec/asm/ecp_nistz256-x86_64.pl28
-rw-r--r--openssl/crypto/ec/ec.h11
-rw-r--r--openssl/crypto/ec/ec2_oct.c2
-rw-r--r--openssl/crypto/ec/ec_asn1.c20
-rw-r--r--openssl/crypto/ec/ec_check.c2
-rw-r--r--openssl/crypto/ec/ec_err.c15
-rw-r--r--openssl/crypto/ec/ec_key.c2
-rw-r--r--openssl/crypto/ec/ec_lcl.h8
-rw-r--r--openssl/crypto/ec/ec_lib.c7
-rw-r--r--openssl/crypto/ec/eck_prn.c4
-rwxr-xr-xopenssl/crypto/ec/ecp_nistz256.c135
-rw-r--r--openssl/crypto/ec/ecp_oct.c2
-rw-r--r--openssl/crypto/ec/ectest.c24
-rw-r--r--openssl/crypto/ecdh/Makefile2
-rw-r--r--openssl/crypto/ecdsa/Makefile2
-rw-r--r--openssl/crypto/ecdsa/ecdsatest.c4
-rw-r--r--openssl/crypto/engine/Makefile2
-rw-r--r--openssl/crypto/err/Makefile2
-rw-r--r--openssl/crypto/evp/Makefile2
-rw-r--r--openssl/crypto/evp/bio_ok.c3
-rw-r--r--openssl/crypto/evp/e_aes.c7
-rw-r--r--openssl/crypto/evp/e_aes_cbc_hmac_sha1.c11
-rwxr-xr-xopenssl/crypto/evp/e_aes_cbc_hmac_sha256.c9
-rw-r--r--openssl/crypto/evp/e_des3.c3
-rw-r--r--openssl/crypto/evp/e_rc4_hmac_md5.c10
-rw-r--r--openssl/crypto/evp/encode.c4
-rw-r--r--openssl/crypto/evp/evp.h17
-rw-r--r--openssl/crypto/evp/p_seal.c5
-rw-r--r--openssl/crypto/hmac/Makefile2
-rw-r--r--openssl/crypto/hmac/hmac.c19
-rw-r--r--openssl/crypto/hmac/hmactest.c179
-rw-r--r--openssl/crypto/idea/Makefile2
-rw-r--r--openssl/crypto/jpake/Makefile2
-rw-r--r--openssl/crypto/krb5/Makefile2
-rw-r--r--openssl/crypto/lhash/Makefile2
-rw-r--r--openssl/crypto/md2/Makefile2
-rw-r--r--openssl/crypto/md4/Makefile2
-rw-r--r--openssl/crypto/md5/Makefile2
-rw-r--r--openssl/crypto/mdc2/Makefile2
-rw-r--r--openssl/crypto/mem.c3
-rw-r--r--openssl/crypto/modes/Makefile2
-rwxr-xr-xopenssl/crypto/modes/asm/ghashv8-armx.pl276
-rw-r--r--openssl/crypto/modes/gcm128.c4
-rw-r--r--openssl/crypto/modes/modes_lcl.h38
-rw-r--r--openssl/crypto/objects/Makefile2
-rw-r--r--openssl/crypto/objects/o_names.c2
-rw-r--r--openssl/crypto/objects/obj_dat.c5
-rw-r--r--openssl/crypto/objects/objects.README8
-rw-r--r--openssl/crypto/objects/objects.pl2
-rw-r--r--openssl/crypto/ocsp/Makefile2
-rw-r--r--openssl/crypto/ocsp/ocsp_ext.c4
-rw-r--r--openssl/crypto/ocsp/ocsp_vfy.c21
-rw-r--r--openssl/crypto/opensslv.h6
-rw-r--r--openssl/crypto/pem/Makefile2
-rw-r--r--openssl/crypto/pem/pem_pk8.c2
-rw-r--r--openssl/crypto/pkcs12/Makefile2
-rw-r--r--openssl/crypto/pkcs12/p12_mutl.c3
-rw-r--r--openssl/crypto/pkcs7/Makefile2
-rw-r--r--openssl/crypto/pkcs7/pk7_doit.c16
-rw-r--r--openssl/crypto/pqueue/Makefile2
-rw-r--r--openssl/crypto/rand/Makefile2
-rw-r--r--openssl/crypto/rand/rand_os2.c2
-rw-r--r--openssl/crypto/rc2/Makefile2
-rw-r--r--openssl/crypto/rc4/Makefile2
-rw-r--r--openssl/crypto/rc5/Makefile2
-rw-r--r--openssl/crypto/ripemd/Makefile2
-rw-r--r--openssl/crypto/rsa/Makefile2
-rw-r--r--openssl/crypto/rsa/rsa_pmeth.c8
-rw-r--r--openssl/crypto/seed/Makefile2
-rw-r--r--openssl/crypto/sha/Makefile2
-rwxr-xr-xopenssl/crypto/sha/asm/sha1-armv8.pl6
-rw-r--r--openssl/crypto/sha/asm/sha256-armv4.pl74
-rwxr-xr-xopenssl/crypto/sha/asm/sha512-armv8.pl6
-rw-r--r--openssl/crypto/srp/Makefile2
-rw-r--r--openssl/crypto/srp/srp_vfy.c9
-rw-r--r--openssl/crypto/stack/Makefile2
-rw-r--r--openssl/crypto/store/Makefile2
-rw-r--r--openssl/crypto/threads/th-lock.c12
-rw-r--r--openssl/crypto/ts/Makefile2
-rw-r--r--openssl/crypto/txt_db/Makefile2
-rw-r--r--openssl/crypto/ui/Makefile2
-rw-r--r--openssl/crypto/whrlpool/Makefile2
-rw-r--r--openssl/crypto/x509/Makefile2
-rw-r--r--openssl/crypto/x509/x509_lu.c2
-rw-r--r--openssl/crypto/x509/x509_vfy.c236
-rw-r--r--openssl/crypto/x509/x509_vfy.h6
-rw-r--r--openssl/crypto/x509/x509_vpm.c11
-rw-r--r--openssl/crypto/x509/x509type.c3
-rw-r--r--openssl/crypto/x509v3/Makefile34
-rw-r--r--openssl/crypto/x509v3/v3_alt.c18
-rw-r--r--openssl/crypto/x509v3/v3_cpols.c8
-rwxr-xr-xopenssl/crypto/x509v3/v3_scts.c11
-rw-r--r--openssl/crypto/x509v3/v3_utl.c6
-rw-r--r--openssl/demos/easy_tls/easy-tls.c3
-rw-r--r--openssl/doc/apps/ciphers.pod2
-rw-r--r--openssl/doc/apps/cms.pod5
-rw-r--r--openssl/doc/apps/config.pod53
-rw-r--r--openssl/doc/apps/dhparam.pod13
-rw-r--r--openssl/doc/apps/ocsp.pod11
-rw-r--r--openssl/doc/apps/s_client.pod7
-rw-r--r--openssl/doc/apps/s_server.pod9
-rw-r--r--openssl/doc/apps/smime.pod4
-rw-r--r--openssl/doc/apps/verify.pod13
-rw-r--r--openssl/doc/crypto/BN_rand.pod3
-rw-r--r--openssl/doc/crypto/BN_set_bit.pod8
-rw-r--r--openssl/doc/crypto/EVP_BytesToKey.pod4
-rw-r--r--openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod8
-rw-r--r--openssl/doc/crypto/pem.pod27
-rw-r--r--openssl/doc/ssl/SSL_COMP_add_compression_method.pod12
-rw-r--r--openssl/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod106
-rw-r--r--openssl/e_os2.h8
-rw-r--r--openssl/engines/Makefile13
-rw-r--r--openssl/engines/ccgost/Makefile18
-rw-r--r--openssl/engines/ccgost/e_gost_err.c3
-rw-r--r--openssl/engines/ccgost/e_gost_err.h1
-rw-r--r--openssl/engines/ccgost/gost2001.c229
-rw-r--r--openssl/engines/ccgost/gost94_keyx.c6
-rw-r--r--openssl/engines/ccgost/gost_ameth.c36
-rw-r--r--openssl/engines/ccgost/gost_pmeth.c2
-rw-r--r--openssl/engines/ccgost/gost_sign.c87
-rw-r--r--openssl/engines/e_sureware.c27
-rw-r--r--openssl/openssl.spec2
-rw-r--r--openssl/ssl/Makefile54
-rw-r--r--openssl/ssl/d1_both.c46
-rw-r--r--openssl/ssl/d1_clnt.c10
-rw-r--r--openssl/ssl/d1_pkt.c2
-rw-r--r--openssl/ssl/d1_srvr.c33
-rw-r--r--openssl/ssl/s2_pkt.c14
-rw-r--r--openssl/ssl/s2_srvr.c104
-rw-r--r--openssl/ssl/s3_both.c2
-rw-r--r--openssl/ssl/s3_cbc.c16
-rw-r--r--openssl/ssl/s3_clnt.c327
-rw-r--r--openssl/ssl/s3_lib.c4
-rw-r--r--openssl/ssl/s3_pkt.c15
-rw-r--r--openssl/ssl/s3_srvr.c232
-rw-r--r--openssl/ssl/ssl.h5
-rw-r--r--openssl/ssl/ssl_err.c6
-rw-r--r--openssl/ssl/ssl_lib.c16
-rw-r--r--openssl/ssl/ssl_locl.h2
-rw-r--r--openssl/ssl/ssl_sess.c131
-rw-r--r--openssl/ssl/ssl_stat.c6
-rw-r--r--openssl/ssl/ssltest.c58
-rw-r--r--openssl/ssl/t1_enc.c17
-rw-r--r--openssl/ssl/t1_lib.c268
-rw-r--r--openssl/ssl/tls_srp.c3
-rw-r--r--openssl/test/Makefile17
-rw-r--r--openssl/test/cms-test.pl10
l---------[-rw-r--r--]openssl/test/evp_extra_test.c0
-rw-r--r--openssl/test/testssl62
-rwxr-xr-xopenssl/test/tocsp2
-rw-r--r--openssl/tools/Makefile2
-rw-r--r--openssl/tools/c_rehash6
-rw-r--r--openssl/tools/c_rehash.in6
-rw-r--r--openssl/util/libeay.num1
-rwxr-xr-xopenssl/util/mk1mf.pl2
-rw-r--r--openssl/util/mkerr.pl21
-rw-r--r--openssl/util/pl/BC-32.pl2
-rwxr-xr-xopenssl/util/pl/VC-32.pl2
-rw-r--r--packages.txt4
-rw-r--r--pixman/pixman/pixman-arm-common.h11
-rw-r--r--pixman/pixman/pixman-arm-neon.c24
-rw-r--r--pixman/pixman/pixman-arm-simd.c18
-rw-r--r--pixman/pixman/pixman-inlines.h3
-rw-r--r--pixman/pixman/pixman-mips-dspr2.c8
-rw-r--r--pixman/pixman/pixman-mips-dspr2.h6
-rw-r--r--pixman/pixman/pixman-mmx.c24
-rw-r--r--pixman/pixman/pixman-sse2.c24
-rw-r--r--pixman/test/solid-test.c9
-rw-r--r--xorg-server/config/10-evdev.conf40
-rw-r--r--xorg-server/config/Makefile.am4
-rw-r--r--xorg-server/dix/devices.c4
-rw-r--r--xorg-server/dix/getevents.c27
-rw-r--r--xorg-server/dix/inpututils.c78
-rw-r--r--xorg-server/glamor/glamor_largepixmap.c9
-rw-r--r--xorg-server/glamor/glamor_render.c9
-rw-r--r--xorg-server/glx/dispatch.h1265
-rw-r--r--xorg-server/glx/glapitable.h1249
-rw-r--r--xorg-server/glx/glfunctions.h1
-rw-r--r--xorg-server/glx/glprocs.h2962
-rw-r--r--xorg-server/glx/remap_helper.h3
-rw-r--r--xorg-server/hw/xfree86/common/xf86Module.h2
-rw-r--r--xorg-server/hw/xfree86/common/xf86Xinput.c4
-rw-r--r--xorg-server/hw/xfree86/os-support/linux/lnx_init.c12
-rw-r--r--xorg-server/hw/xwayland/xwayland-cursor.c26
-rw-r--r--xorg-server/hw/xwayland/xwayland-input.c2
-rw-r--r--xorg-server/hw/xwayland/xwayland.c4
-rw-r--r--xorg-server/hw/xwayland/xwayland.h4
-rwxr-xr-xxorg-server/include/input.h15
-rw-r--r--xorg-server/include/inpututils.h2
-rwxr-xr-xxorg-server/include/os.h17
-rw-r--r--xorg-server/os/access.c109
-rw-r--r--xorg-server/os/auth.c8
-rw-r--r--xorg-server/os/backtrace.c4
-rw-r--r--xorg-server/os/makefile1
-rw-r--r--xorg-server/present/present.c8
-rw-r--r--xorg-server/test/input.c63
-rw-r--r--xorg-server/xkeyboard-config/NEWS2
-rw-r--r--xorg-server/xkeyboard-config/configure.ac2
-rw-r--r--xorg-server/xkeyboard-config/po/ca.po2201
-rw-r--r--xorg-server/xkeyboard-config/po/cs.po1514
-rw-r--r--xorg-server/xkeyboard-config/po/da.po1673
-rw-r--r--xorg-server/xkeyboard-config/po/de.po1514
-rw-r--r--xorg-server/xkeyboard-config/po/es.po1674
-rw-r--r--xorg-server/xkeyboard-config/po/fr.po1512
-rw-r--r--xorg-server/xkeyboard-config/po/gl.po1514
-rw-r--r--xorg-server/xkeyboard-config/po/ko.po1518
-rw-r--r--xorg-server/xkeyboard-config/po/nl.po1547
-rw-r--r--xorg-server/xkeyboard-config/po/pl.po1512
-rw-r--r--xorg-server/xkeyboard-config/po/sv.po1517
-rw-r--r--xorg-server/xkeyboard-config/po/uk.po1671
-rw-r--r--xorg-server/xkeyboard-config/rules/base.xml.in2
-rw-r--r--xorg-server/xkeyboard-config/symbols/cm52
-rw-r--r--xorg-server/xkeyboard-config/symbols/lk12
-rw-r--r--xorg-server/xkeyboard-config/symbols/ph2
1243 files changed, 36422 insertions, 27823 deletions
diff --git a/fontconfig/README b/fontconfig/README
index 4a4dc307b..8f04b9b3c 100644
--- a/fontconfig/README
+++ b/fontconfig/README
@@ -1,12 +1,48 @@
Fontconfig
Font configuration and customization library
- Version 2.11.93 (2.12 RC3)
- 2015-03-09
+ Version 2.11.94 (2.12 RC4)
+ 2015-06-02
Check INSTALL for compilation and installation instructions.
Report bugs to https://bugs.freedesktop.org in the fontconfig module.
+2.11.94 (2.12 RC4)
+
+Akira TAGOH (16):
+ Remove the dead code
+ Bug 89617 - FcConfigAppFontAddFile() returns false on any font file
+ Fix unknown attribute in Win32
+ Fix SIGFPE
+ Fix a typo for the latest cache version
+ Fix a typo in fontconfig-user.sgml
+ Drop unmaintained code
+ Observe blanks to compute correct languages in fc-query/fc-scan
+ Add missing description for usage
+ Make FC_SCALE deprecated
+ Bug 90148 - Don't warn if cachedir isn't specified
+ Fix memory leaks after FcFini()
+ Fix a typo
+ Fix a crash
+ Detect the overflow for the object ID
+ Revert the previous change
+
+Behdad Esfahbod (11):
+ Fix bitmap scaling
+ Add su[pport for symbol fonts
+ Write ranges using a [start finish) format
+ Only set FC_SIZE for scalable fonts if OS/2 version 5 is present
+ Add bitmap-only font size as Double, not Range
+ Accept Integer for FC_SIZE
+ Don't set FC_SIZE for bitmap fonts
+ Fix compiler warnings
+ Simplify FcRange
+ Reduce number of places that cache version is specified to 1
+ Bump cache version number to 6, because of recent FcRange changes
+
+Руслан Ижбулатов (1):
+ W32: Support cache paths relative to the root directory
+
2.11.93 (2.12 RC3)
Akira TAGOH (18):
diff --git a/fontconfig/configure.ac b/fontconfig/configure.ac
index bb9880487..e888f2c9e 100644
--- a/fontconfig/configure.ac
+++ b/fontconfig/configure.ac
@@ -33,7 +33,7 @@ dnl This is the package version number, not the shared library
dnl version. This same version number must appear in fontconfig/fontconfig.h
dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
dnl not possible to extract the version number here from fontconfig.h
-AC_INIT([fontconfig], [2.11.93], [https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig])
+AC_INIT([fontconfig], [2.11.94], [https://bugs.freedesktop.org/enter_bug.cgi?product=fontconfig])
AM_INIT_AUTOMAKE([1.11 parallel-tests dist-bzip2])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
diff --git a/fontconfig/doc/fontconfig-devel.sgml b/fontconfig/doc/fontconfig-devel.sgml
index 17402c7bc..d0ec8a579 100644
--- a/fontconfig/doc/fontconfig-devel.sgml
+++ b/fontconfig/doc/fontconfig-devel.sgml
@@ -177,6 +177,7 @@ convenience for the application's rendering mechanism.
scalable FC_SCALABLE Bool Whether glyphs can be scaled
scale FC_SCALE Double Scale factor for point->pixel
conversions (deprecated)
+ symbol FC_SYMBOL Bool Whether font uses MS symbol-font encoding
color FC_COLOR Bool Whether any glyphs have color
dpi FC_DPI Double Target dots per inch
rgba FC_RGBA Int unknown, rgb, bgr, vrgb,
diff --git a/fontconfig/doc/fontconfig-user.sgml b/fontconfig/doc/fontconfig-user.sgml
index e7cdb2e77..8f49f78ed 100644
--- a/fontconfig/doc/fontconfig-user.sgml
+++ b/fontconfig/doc/fontconfig-user.sgml
@@ -258,7 +258,7 @@ debugging messages.
MEMORY 512 Monitor fontconfig memory usage
CONFIG 1024 Monitor which config files are loaded
LANGSET 2048 Dump char sets used to construct lang values
- OBJTYPES 4096 Display message when value typechecks fail
+ MATCH2 4096 Display font-matching transformation in patterns
</programlisting>
<para>
Add the value of the desired debug levels together and assign that (in
@@ -787,6 +787,10 @@ is used to override the default configuration directory.
is used to output the detailed debugging messages. see <link linkend="debug">Debugging Applications</link> section for more details.
</para>
<para>
+<emphasis>FC_DBG_MATCH_FILTER</emphasis>
+is used to filter out the patterns. this takes a comma-separated list of object names and effects only when FC_DEBUG has MATCH2. see <link linkend="debug">Debugging Applications</link> section for more details.
+ </para>
+ <para>
<emphasis>FONTCONFIG_USE_MMAP</emphasis>
is used to control the use of mmap(2) for the cache files if available. this take a boolean value. fontconfig will checks if the cache files are stored on the filesystem that is safe to use mmap(2). explicitly setting this environment variable will causes skipping this check and enforce to use or not use mmap(2) anyway.
</para>
diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h
index 58b6b5137..a570b2f5c 100644
--- a/fontconfig/fontconfig/fontconfig.h
+++ b/fontconfig/fontconfig/fontconfig.h
@@ -52,7 +52,7 @@ typedef int FcBool;
#define FC_MAJOR 2
#define FC_MINOR 11
-#define FC_REVISION 93
+#define FC_REVISION 94
#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
@@ -66,7 +66,10 @@ typedef int FcBool;
* it means multiple copies of the font information.
*/
-#define FC_CACHE_VERSION "5"
+#define FC_CACHE_VERSION_NUMBER 6
+#define _FC_STRINGIFY_(s) #s
+#define _FC_STRINGIFY(s) _FC_STRINGIFY_(s)
+#define FC_CACHE_VERSION _FC_STRINGIFY(FC_CACHE_VERSION_NUMBER)
#define FcTrue 1
#define FcFalse 0
@@ -96,6 +99,7 @@ typedef int FcBool;
#define FC_SCALABLE "scalable" /* Bool */
#define FC_COLOR "color" /* Bool */
#define FC_SCALE "scale" /* double (deprecated) */
+#define FC_SYMBOL "symbol" /* Bool */
#define FC_DPI "dpi" /* double */
#define FC_RGBA "rgba" /* Int */
#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */
@@ -216,7 +220,7 @@ typedef struct _FcMatrix {
typedef struct _FcCharSet FcCharSet;
typedef struct _FcObjectType {
- const char *object;
+ char *object;
FcType type;
} FcObjectType;
diff --git a/fontconfig/src/fccache.c b/fontconfig/src/fccache.c
index 25538bd70..fc3ed410a 100644
--- a/fontconfig/src/fccache.c
+++ b/fontconfig/src/fccache.c
@@ -655,7 +655,7 @@ FcDirCacheMapFd (FcConfig *config, int fd, struct stat *fd_stat, struct stat *di
allocated = FcTrue;
}
if (cache->magic != FC_CACHE_MAGIC_MMAP ||
- cache->version < FC_CACHE_CONTENT_VERSION ||
+ cache->version < FC_CACHE_VERSION_NUMBER ||
cache->size != (intptr_t) fd_stat->st_size ||
!FcCacheTimeValid (config, cache, dir_stat) ||
!FcCacheDirsValid (config, cache) ||
@@ -751,7 +751,7 @@ FcDirCacheValidateHelper (FcConfig *config, int fd, struct stat *fd_stat, struct
ret = FcFalse;
else if (c.magic != FC_CACHE_MAGIC_MMAP)
ret = FcFalse;
- else if (c.version < FC_CACHE_CONTENT_VERSION)
+ else if (c.version < FC_CACHE_VERSION_NUMBER)
ret = FcFalse;
else if (fd_stat->st_size != c.size)
ret = FcFalse;
@@ -828,7 +828,7 @@ FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcSt
serialize->linear = cache;
cache->magic = FC_CACHE_MAGIC_ALLOC;
- cache->version = FC_CACHE_CONTENT_VERSION;
+ cache->version = FC_CACHE_VERSION_NUMBER;
cache->size = serialize->size;
cache->checksum = (int) dir_stat->st_mtime;
diff --git a/fontconfig/src/fcdbg.c b/fontconfig/src/fcdbg.c
index ef038f017..c2853fff3 100644
--- a/fontconfig/src/fcdbg.c
+++ b/fontconfig/src/fcdbg.c
@@ -29,8 +29,6 @@
static void
_FcValuePrintFile (FILE *f, const FcValue v)
{
- FcRange r;
-
switch (v.type) {
case FcTypeUnknown:
fprintf (f, "<unknown>");
@@ -64,8 +62,7 @@ _FcValuePrintFile (FILE *f, const FcValue v)
fprintf (f, "face");
break;
case FcTypeRange:
- r = FcRangeCanonicalize (v.u.r);
- fprintf (f, "(%g, %g)", r.u.d.begin, r.u.d.end);
+ fprintf (f, "[%g %g)", v.u.r->begin, v.u.r->end);
break;
}
}
@@ -214,6 +211,84 @@ FcPatternPrint (const FcPattern *p)
}
void
+FcPatternPrint2 (FcPattern *pp1,
+ FcPattern *pp2,
+ const FcObjectSet *os)
+{
+ int i, j, k, pos;
+ FcPatternElt *e1, *e2;
+ FcPattern *p1, *p2;
+
+ if (os)
+ {
+ p1 = FcPatternFilter (pp1, os);
+ p2 = FcPatternFilter (pp2, os);
+ }
+ else
+ {
+ p1 = pp1;
+ p2 = pp2;
+ }
+ printf ("Pattern has %d elts (size %d), %d elts (size %d)\n",
+ p1->num, p1->size, p2->num, p2->size);
+ for (i = 0, j = 0; i < p1->num; i++)
+ {
+ e1 = &FcPatternElts(p1)[i];
+ e2 = &FcPatternElts(p2)[j];
+ if (!e2 || e1->object != e2->object)
+ {
+ pos = FcPatternPosition (p2, FcObjectName (e1->object));
+ if (pos >= 0)
+ {
+ for (k = j; k < pos; k++)
+ {
+ e2 = &FcPatternElts(p2)[k];
+ printf ("\t%s: (None) -> ", FcObjectName (e2->object));
+ FcValueListPrint (FcPatternEltValues (e2));
+ printf ("\n");
+ }
+ j = pos;
+ goto cont;
+ }
+ else
+ {
+ printf ("\t%s:", FcObjectName (e1->object));
+ FcValueListPrint (FcPatternEltValues (e1));
+ printf (" -> (None)\n");
+ }
+ }
+ else
+ {
+ cont:
+ printf ("\t%s:", FcObjectName (e1->object));
+ FcValueListPrint (FcPatternEltValues (e1));
+ printf (" -> ");
+ e2 = &FcPatternElts(p2)[j];
+ FcValueListPrint (FcPatternEltValues (e2));
+ printf ("\n");
+ j++;
+ }
+ }
+ if (j < p2->num)
+ {
+ for (k = j; k < p2->num; k++)
+ {
+ e2 = &FcPatternElts(p2)[k];
+ if (FcObjectName (e2->object))
+ {
+ printf ("\t%s: (None) -> ", FcObjectName (e2->object));
+ FcValueListPrint (FcPatternEltValues (e2));
+ printf ("\n");
+ }
+ }
+ }
+ if (p1 != pp1)
+ FcPatternDestroy (p1);
+ if (p2 != pp2)
+ FcPatternDestroy (p2);
+}
+
+void
FcOpPrint (FcOp op_)
{
FcOp op = FC_OP_GET_OP (op_);
@@ -267,8 +342,6 @@ FcOpPrint (FcOp op_)
void
FcExprPrint (const FcExpr *expr)
{
- FcRange r;
-
if (!expr) printf ("none");
else switch (FC_OP_GET_OP (expr->op)) {
case FcOpInteger: printf ("%d", expr->u.ival); break;
@@ -286,8 +359,7 @@ FcExprPrint (const FcExpr *expr)
printf ("]");
break;
case FcOpRange:
- r = FcRangeCanonicalize (expr->u.rval);
- printf ("(%g, %g)", r.u.d.begin, r.u.d.end);
+ printf ("(%g, %g)", expr->u.rval->begin, expr->u.rval->end);
break;
case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
case FcOpCharSet: printf ("charset\n"); break;
diff --git a/fontconfig/src/fcdefault.c b/fontconfig/src/fcdefault.c
index 7c16f4841..4643e46dc 100644
--- a/fontconfig/src/fcdefault.c
+++ b/fontconfig/src/fcdefault.c
@@ -38,6 +38,7 @@ static const struct {
{ FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
{ FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */
{ FC_DECORATIVE_OBJECT, FcFalse },
+ { FC_SYMBOL_OBJECT, FcFalse },
};
#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0])
diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c
index 7493a922f..ee9fd10ac 100644
--- a/fontconfig/src/fcfreetype.c
+++ b/fontconfig/src/fcfreetype.c
@@ -1199,7 +1199,8 @@ FcFreeTypeQueryFace (const FT_Face face,
const char *tmp;
FcRange *r = NULL;
- double lower_size = 0.0L, upper_size = DBL_MAX;
+
+ FcBool symbol = FcFalse;
FcInitDebug (); /* We might be called with no initizalization whatsoever. */
@@ -1615,13 +1616,12 @@ FcFreeTypeQueryFace (const FT_Face face,
#if defined (HAVE_TT_OS2_USUPPEROPTICALPOINTSIZE) && defined (HAVE_TT_OS2_USLOWEROPTICALPOINTSIZE)
if (os2 && os2->version >= 0x0005 && os2->version != 0xffff)
{
+ double lower_size, upper_size;
+
/* usLowerPointSize and usUpperPointSize is actually twips */
lower_size = os2->usLowerOpticalPointSize / 20.0L;
upper_size = os2->usUpperOpticalPointSize / 20.0L;
- }
-#endif
- if (os2)
- {
+
r = FcRangeCreateDouble (lower_size, upper_size);
if (!FcPatternAddRange (pat, FC_SIZE, r))
{
@@ -1630,20 +1630,7 @@ FcFreeTypeQueryFace (const FT_Face face,
}
FcRangeDestroy (r);
}
- else
- {
- for (i = 0; i < face->num_fixed_sizes; i++)
- {
- double d = FcGetPixelSize (face, i);
- r = FcRangeCreateDouble (d, d);
- if (!FcPatternAddRange (pat, FC_SIZE, r))
- {
- FcRangeDestroy (r);
- goto bail1;
- }
- FcRangeDestroy (r);
- }
- }
+#endif
/*
* Type 1: Check for FontInfo dictionary information
@@ -1803,6 +1790,11 @@ FcFreeTypeQueryFace (const FT_Face face,
if (!cs)
goto bail1;
+ /* The FcFreeTypeCharSetAndSpacing() chose the encoding; test it for symbol. */
+ symbol = face->charmap && face->charmap->encoding == FT_ENCODING_MS_SYMBOL;
+ if (!FcPatternAddBool (pat, FC_SYMBOL, symbol))
+ goto bail1;
+
#if HAVE_FT_GET_BDF_PROPERTY
/* For PCF fonts, override the computed spacing with the one from
the property */
@@ -1835,9 +1827,18 @@ FcFreeTypeQueryFace (const FT_Face face,
if (!FcPatternAddCharSet (pat, FC_CHARSET, cs))
goto bail2;
- ls = FcFreeTypeLangSet (cs, exclusiveLang);
- if (!ls)
- goto bail2;
+ if (!symbol)
+ {
+ ls = FcFreeTypeLangSet (cs, exclusiveLang);
+ if (!ls)
+ goto bail2;
+ }
+ else
+ {
+ /* Symbol fonts don't cover any language, even though they
+ * claim to support Latin1 range. */
+ ls = FcLangSetCreate ();
+ }
if (!FcPatternAddLangSet (pat, FC_LANG, ls))
{
@@ -2093,6 +2094,22 @@ FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4)
glyphindex = FT_Get_Char_Index (face, (FT_ULong) ucs4);
if (glyphindex)
return glyphindex;
+ if (ucs4 < 0x100 && face->charmap &&
+ face->charmap->encoding == FT_ENCODING_MS_SYMBOL)
+ {
+ /* For symbol-encoded OpenType fonts, we duplicate the
+ * U+F000..F0FF range at U+0000..U+00FF. That's what
+ * Windows seems to do, and that's hinted about at:
+ * http://www.microsoft.com/typography/otspec/recom.htm
+ * under "Non-Standard (Symbol) Fonts".
+ *
+ * See thread with subject "Webdings and other MS symbol
+ * fonts don't display" on mailing list from May 2015.
+ */
+ glyphindex = FT_Get_Char_Index (face, (FT_ULong) ucs4 + 0xF000);
+ if (glyphindex)
+ return glyphindex;
+ }
}
#if HAVE_FT_HAS_PS_GLYPH_NAMES
/*
@@ -2253,6 +2270,23 @@ FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing
}
ucs4 = FT_Get_Next_Char (face, ucs4, &glyph);
}
+ if (fcFontEncodings[o] == FT_ENCODING_MS_SYMBOL)
+ {
+ /* For symbol-encoded OpenType fonts, we duplicate the
+ * U+F000..F0FF range at U+0000..U+00FF. That's what
+ * Windows seems to do, and that's hinted about at:
+ * http://www.microsoft.com/typography/otspec/recom.htm
+ * under "Non-Standard (Symbol) Fonts".
+ *
+ * See thread with subject "Webdings and other MS symbol
+ * fonts don't display" on mailing list from May 2015.
+ */
+ for (ucs4 = 0xF000; ucs4 < 0xF100; ucs4++)
+ {
+ if (FcCharSetHasChar (fcs, ucs4))
+ FcCharSetAddChar (fcs, ucs4 - 0xF000);
+ }
+ }
#ifdef CHECK
for (ucs4 = 0; ucs4 < 0x10000; ucs4++)
{
@@ -2267,6 +2301,8 @@ FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing
}
#endif
}
+
+ break;
}
#if HAVE_FT_HAS_PS_GLYPH_NAMES
/*
diff --git a/fontconfig/src/fcinit.c b/fontconfig/src/fcinit.c
index 6134ed40d..5e7c2f156 100644
--- a/fontconfig/src/fcinit.c
+++ b/fontconfig/src/fcinit.c
@@ -91,12 +91,23 @@ FcInitLoadOwnConfig (FcConfig *config)
{
FcChar8 *prefix, *p;
size_t plen;
+ FcBool have_own = FcFalse;
+ char *env_file, *env_path;
- fprintf (stderr,
- "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
- fprintf (stderr,
- "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
- FC_CACHEDIR);
+ env_file = getenv ("FONTCONFIG_FILE");
+ env_path = getenv ("FONTCONFIG_PATH");
+ if ((env_file != NULL && env_file[0] != 0) ||
+ (env_path != NULL && env_path[0] != 0))
+ have_own = FcTrue;
+
+ if (!have_own)
+ {
+ fprintf (stderr,
+ "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
+ fprintf (stderr,
+ "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
+ FC_CACHEDIR);
+ }
prefix = FcConfigXdgCacheHome ();
if (!prefix)
goto bail;
@@ -107,8 +118,9 @@ FcInitLoadOwnConfig (FcConfig *config)
prefix = p;
memcpy (&prefix[plen], FC_DIR_SEPARATOR_S "fontconfig", 11);
prefix[plen + 11] = 0;
- fprintf (stderr,
- "Fontconfig warning: adding <cachedir prefix=\"xdg\">fontconfig</cachedir>\n");
+ if (!have_own)
+ fprintf (stderr,
+ "Fontconfig warning: adding <cachedir prefix=\"xdg\">fontconfig</cachedir>\n");
if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) ||
!FcConfigAddCacheDir (config, (FcChar8 *) prefix))
@@ -180,6 +192,8 @@ FcFini (void)
FcConfigFini ();
FcCacheFini ();
FcDefaultFini ();
+ FcObjectFini ();
+ FcConfigPathFini ();
}
/*
diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h
index 80205c950..15e22fdbc 100644
--- a/fontconfig/src/fcint.h
+++ b/fontconfig/src/fcint.h
@@ -87,6 +87,7 @@ extern pfnSHGetFolderPathA pSHGetFolderPathA;
#define FC_DBG_SCANV 256
#define FC_DBG_CONFIG 1024
#define FC_DBG_LANGSET 2048
+#define FC_DBG_MATCH2 4096
#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] FC_UNUSED
#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
@@ -96,11 +97,6 @@ extern pfnSHGetFolderPathA pSHGetFolderPathA;
#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
#define FC_ABS(a) ((a) < 0 ? -(a) : (a))
-#define FcDoubleIsZero(a) (fabs ((a)) <= DBL_EPSILON)
-#define FcDoubleCmpEQ(a,b) (fabs ((a) - (b)) <= DBL_EPSILON)
-#define FcDoubleCmpGE(a,b) (FcDoubleCmpEQ (a, b) || (a) > (b))
-#define FcDoubleCmpLE(a,b) (FcDoubleCmpEQ (a, b) || (a) < (b))
-
/* slim_internal.h */
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
#define FcPrivate __attribute__((__visibility__("hidden")))
@@ -252,21 +248,9 @@ typedef struct _FcExprName {
FcMatchKind kind;
} FcExprName;
-typedef struct _FcRangeInt {
- FcChar32 begin;
- FcChar32 end;
-} FcRangeInt;
-typedef struct _FcRangeDouble {
+struct _FcRange {
double begin;
double end;
-} FcRangeDouble;
-struct _FcRange {
- FcBool is_double;
- FcBool is_inclusive;
- union {
- FcRangeInt i;
- FcRangeDouble d;
- } u;
};
@@ -378,7 +362,7 @@ typedef struct _FcStrBuf {
struct _FcCache {
unsigned int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
- int version; /* FC_CACHE_CONTENT_VERSION */
+ int version; /* FC_CACHE_VERSION_NUMBER */
intptr_t size; /* size of file */
intptr_t dir; /* offset to dir name */
intptr_t dirs; /* offset to subdirs */
@@ -470,7 +454,6 @@ typedef struct _FcCaseFold {
#define FC_CACHE_MAGIC_MMAP 0xFC02FC04
#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05
-#define FC_CACHE_CONTENT_VERSION 5
struct _FcAtomic {
FcChar8 *file; /* original file name */
@@ -811,6 +794,9 @@ FcSubstPrint (const FcSubst *subst);
FcPrivate void
FcCharSetPrint (const FcCharSet *c);
+FcPrivate void
+FcPatternPrint2 (FcPattern *p1, FcPattern *p2, const FcObjectSet *os);
+
extern FcPrivate int FcDebugVal;
#define FcDebug() (FcDebugVal)
@@ -881,6 +867,9 @@ FcInitLoadOwnConfigAndFonts (FcConfig *config);
/* fcxml.c */
FcPrivate void
+FcConfigPathFini (void);
+
+FcPrivate void
FcTestDestroy (FcTest *test);
FcPrivate void
@@ -1054,6 +1043,9 @@ FcPatternObjectGetRange (const FcPattern *p, FcObject object, int id, FcRange **
FcPrivate FcBool
FcPatternAppend (FcPattern *p, FcPattern *s);
+FcPrivate int
+FcPatternPosition (const FcPattern *p, const char *object);
+
FcPrivate FcChar32
FcStringHash (const FcChar8 *s);
@@ -1080,16 +1072,10 @@ FcMatrixFree (FcMatrix *mat);
/* fcrange.c */
-FcPrivate FcRange
-FcRangeCanonicalize (const FcRange *range);
-
FcPrivate FcRange *
FcRangePromote (double v, FcValuePromotionBuffer *vbuf);
FcPrivate FcBool
-FcRangeIsZero (const FcRange *r);
-
-FcPrivate FcBool
FcRangeIsInRange (const FcRange *a, const FcRange *b);
FcPrivate FcBool
@@ -1192,6 +1178,9 @@ FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
/* fcobjs.c */
+FcPrivate void
+FcObjectFini (void);
+
FcPrivate FcObject
FcObjectLookupIdByName (const char *str);
diff --git a/fontconfig/src/fcmatch.c b/fontconfig/src/fcmatch.c
index 46d08bcc7..40efbd3f6 100644
--- a/fontconfig/src/fcmatch.c
+++ b/fontconfig/src/fcmatch.c
@@ -220,7 +220,7 @@ FcCompareSizeRange (FcValue *v1, FcValue *v2)
if (FcRangeIsInRange (r1, r2))
ret = 0.0;
else
- ret = FC_MIN (fabs (r1->u.d.end - r2->u.d.begin), fabs (r1->u.d.begin - r2->u.d.end));
+ ret = FC_MIN (fabs (r1->end - r2->begin), fabs (r1->begin - r2->end));
bail:
if (r1)
@@ -292,6 +292,7 @@ typedef enum _FcMatcherPriority {
PRI1(LANG),
PRI_FAMILY_WEAK,
PRI_POSTSCRIPT_NAME_WEAK,
+ PRI1(SYMBOL),
PRI1(SPACING),
PRI1(SIZE),
PRI1(PIXEL_SIZE),
@@ -688,6 +689,47 @@ FcFontSetMatchInternal (FcFontSet **sets,
printf ("\n");
FcPatternPrint (best);
}
+ if (FcDebug () & FC_DBG_MATCH2)
+ {
+ char *env = getenv ("FC_DBG_MATCH_FILTER");
+ FcObjectSet *os = NULL;
+
+ if (env)
+ {
+ char *ss, *s;
+ char *p;
+ FcBool f = FcTrue;
+
+ ss = s = strdup (env);
+ os = FcObjectSetCreate ();
+ while (f)
+ {
+ size_t len;
+ char *x;
+
+ if (!(p = strchr (s, ',')))
+ {
+ f = FcFalse;
+ len = strlen (s) + 1;
+ }
+ else
+ {
+ len = (p - s) + 1;
+ }
+ x = malloc (sizeof (char) * len);
+ strncpy (x, s, len - 1);
+ x[len - 1] = 0;
+ if (FcObjectFromName (x) > 0)
+ FcObjectSetAdd (os, x);
+ s = p + 1;
+ free (x);
+ }
+ free (ss);
+ }
+ FcPatternPrint2 (p, best, os);
+ if (os)
+ FcObjectSetDestroy (os);
+ }
/* assuming that 'result' is initialized with FcResultNoMatch
* outside this function */
if (best)
diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c
index 1d8fe757c..8be36c70c 100644
--- a/fontconfig/src/fcname.c
+++ b/fontconfig/src/fcname.c
@@ -88,7 +88,9 @@ FcObjectValidType (FcObject object, FcType type)
return FcTrue;
break;
case FcTypeRange:
- if (type == FcTypeRange || type == FcTypeDouble)
+ if (type == FcTypeRange ||
+ type == FcTypeDouble ||
+ type == FcTypeInteger)
return FcTrue;
break;
default:
@@ -316,7 +318,7 @@ FcNameConvert (FcType type, FcChar8 *string)
v.type = FcTypeVoid;
break;
case FcTypeRange:
- if (sscanf ((char *) string, "(%lg %lg)", &b, &e) != 2)
+ if (sscanf ((char *) string, "[%lg %lg)", &b, &e) != 2)
{
v.u.d = strtod ((char *) string, &p);
if (p != NULL && p[0] != 0)
@@ -498,7 +500,6 @@ FcNameUnparseValue (FcStrBuf *buf,
{
FcChar8 temp[1024];
FcValue v = FcValueCanonicalize(v0);
- FcRange r;
switch (v.type) {
case FcTypeUnknown:
@@ -525,17 +526,8 @@ FcNameUnparseValue (FcStrBuf *buf,
case FcTypeFTFace:
return FcTrue;
case FcTypeRange:
- r = FcRangeCanonicalize (v.u.r);
- if (!FcDoubleIsZero (r.u.d.begin) || !FcDoubleIsZero (r.u.d.end))
- {
- if (FcDoubleCmpEQ (r.u.d.begin, r.u.d.end))
- sprintf ((char *) temp, "%g", r.u.d.begin);
- else
- sprintf ((char *) temp, "(%g %g)", r.u.d.begin, r.u.d.end);
- return FcNameUnparseString (buf, temp, 0);
- }
- else
- return FcTrue;
+ sprintf ((char *) temp, "[%g %g)", v.u.r->begin, v.u.r->end);
+ return FcNameUnparseString (buf, temp, 0);
}
return FcFalse;
}
diff --git a/fontconfig/src/fcobjs.c b/fontconfig/src/fcobjs.c
index bad9824d4..16ff31c47 100644
--- a/fontconfig/src/fcobjs.c
+++ b/fontconfig/src/fcobjs.c
@@ -44,6 +44,28 @@ struct FcObjectOtherTypeInfo {
FcObject id;
} *other_types;
+void
+FcObjectFini (void)
+{
+ struct FcObjectOtherTypeInfo *ots, *ot;
+
+retry:
+ ots = fc_atomic_ptr_get (&other_types);
+ if (!ots)
+ return;
+ if (!fc_atomic_ptr_cmpexch (&other_types, ots, NULL))
+ goto retry;
+
+ while (ots)
+ {
+ ot = ots->next;
+ if (ots->object.object)
+ free (ots->object.object);
+ free (ots);
+ ots = ot;
+ }
+}
+
static FcObjectType *
_FcObjectLookupOtherTypeByName (const char *str, FcObject *id)
{
@@ -62,12 +84,19 @@ retry:
if (!ot)
return NULL;
- ot->object.object = (const char *) FcStrdup (str);
+ ot->object.object = (char *) FcStrdup (str);
ot->object.type = FcTypeUnknown;
ot->id = fc_atomic_int_add (next_id, +1);
+ if (ot->id < (FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX))
+ {
+ fprintf (stderr, "Fontconfig error: No object ID to assign\n");
+ abort ();
+ }
ot->next = ots;
if (!fc_atomic_ptr_cmpexch (&other_types, ots, ot)) {
+ if (ot->object.object)
+ free (ot->object.object);
free (ot);
goto retry;
}
diff --git a/fontconfig/src/fcobjs.h b/fontconfig/src/fcobjs.h
index 573fa610d..1fc4f656b 100644
--- a/fontconfig/src/fcobjs.h
+++ b/fontconfig/src/fcobjs.h
@@ -69,4 +69,5 @@ FC_OBJECT (PRGNAME, FcTypeString, NULL)
FC_OBJECT (HASH, FcTypeString, NULL) /* deprecated */
FC_OBJECT (POSTSCRIPT_NAME, FcTypeString, FcComparePostScript)
FC_OBJECT (COLOR, FcTypeBool, FcCompareBool)
+FC_OBJECT (SYMBOL, FcTypeBool, FcCompareBool)
/* ^-------------- Add new objects here. */
diff --git a/fontconfig/src/fcpat.c b/fontconfig/src/fcpat.c
index 7e7d54a4e..3ef1ed212 100644
--- a/fontconfig/src/fcpat.c
+++ b/fontconfig/src/fcpat.c
@@ -425,6 +425,12 @@ FcPatternObjectPosition (const FcPattern *p, FcObject object)
return -(mid + 1);
}
+int
+FcPatternPosition (const FcPattern *p, const char *object)
+{
+ return FcPatternObjectPosition (p, FcObjectFromName (object));
+}
+
FcPatternElt *
FcPatternObjectFindElt (const FcPattern *p, FcObject object)
{
diff --git a/fontconfig/src/fcrange.c b/fontconfig/src/fcrange.c
index 9b1b67b82..f70226c55 100644
--- a/fontconfig/src/fcrange.c
+++ b/fontconfig/src/fcrange.c
@@ -32,10 +32,8 @@ FcRangeCreateDouble (double begin, double end)
if (ret)
{
- ret->is_double = FcTrue;
- ret->is_inclusive = FcDoubleCmpEQ (begin, end);
- ret->u.d.begin = begin;
- ret->u.d.end = end;
+ ret->begin = begin;
+ ret->end = end;
}
return ret;
@@ -48,10 +46,8 @@ FcRangeCreateInteger (FcChar32 begin, FcChar32 end)
if (ret)
{
- ret->is_double = FcFalse;
- ret->is_inclusive = (begin == end);
- ret->u.i.begin = begin;
- ret->u.i.end = end;
+ ret->begin = begin;
+ ret->end = end;
}
return ret;
@@ -66,14 +62,7 @@ FcRangeDestroy (FcRange *range)
FcRange *
FcRangeCopy (const FcRange *range)
{
- FcRange *ret;
-
- if (range->is_double)
- ret = FcRangeCreateDouble (range->u.d.begin, range->u.d.end);
- else
- ret = FcRangeCreateInteger (range->u.i.begin, range->u.i.end);
-
- return ret;
+ return FcRangeCreateDouble (range->begin, range->end);
}
FcBool
@@ -81,41 +70,14 @@ FcRangeGetDouble(const FcRange *range, double *begin, double *end)
{
if (!range)
return FcFalse;
- if (range->is_double)
- {
- if (begin)
- *begin = range->u.d.begin;
- if (end)
- *end = range->u.d.end;
- }
- else
- {
- if (begin)
- *begin = (double)range->u.i.begin;
- if (end)
- *end = (double)range->u.i.end;
- }
+ if (begin)
+ *begin = range->begin;
+ if (end)
+ *end = range->end;
return FcTrue;
}
-FcRange
-FcRangeCanonicalize (const FcRange *range)
-{
- FcRange new;
-
- if (range->is_double)
- new = *range;
- else
- {
- new.is_double = FcTrue;
- new.is_inclusive = range->is_inclusive;
- new.u.d.begin = (double)range->u.i.begin;
- new.u.d.end = (double)range->u.i.end;
- }
- return new;
-}
-
FcRange *
FcRangePromote (double v, FcValuePromotionBuffer *vbuf)
{
@@ -125,50 +87,24 @@ FcRangePromote (double v, FcValuePromotionBuffer *vbuf)
FcRangePromotionBuffer *buf = (FcRangePromotionBuffer *) vbuf;
FC_ASSERT_STATIC (sizeof (FcRangePromotionBuffer) <= sizeof (FcValuePromotionBuffer));
- buf->r.is_double = FcTrue;
- buf->r.is_inclusive = FcTrue;
- buf->r.u.d.begin = v;
- buf->r.u.d.end = v;
+ buf->r.begin = v;
+ buf->r.end = v;
return &buf->r;
}
FcBool
-FcRangeIsZero (const FcRange *r)
-{
- FcRange c;
-
- if (!r)
- return FcFalse;
- c = FcRangeCanonicalize (r);
-
- return FcDoubleIsZero (c.u.d.begin) && FcDoubleIsZero (c.u.d.end);
-}
-
-FcBool
FcRangeIsInRange (const FcRange *a, const FcRange *b)
{
- FcRange ca, cb;
- FcBool f;
-
if (!a || !b)
return FcFalse;
- ca = FcRangeCanonicalize (a);
- cb = FcRangeCanonicalize (b);
- if (ca.is_inclusive & cb.is_inclusive)
- f = ca.u.d.end <= cb.u.d.end;
- else
- f = ca.u.d.end < cb.u.d.end;
-
- return FcDoubleCmpGE (ca.u.d.begin, cb.u.d.begin) && f;
+ return a->begin >= b->begin && a->end <= b->end;
}
FcBool
FcRangeCompare (FcOp op, const FcRange *a, const FcRange *b)
{
- FcRange ca, cb;
-
switch ((int) op) {
case FcOpEqual:
case FcOpContains:
@@ -178,21 +114,13 @@ FcRangeCompare (FcOp op, const FcRange *a, const FcRange *b)
case FcOpNotContains:
return !FcRangeIsInRange (a, b);
case FcOpLess:
- ca = FcRangeCanonicalize (a);
- cb = FcRangeCanonicalize (b);
- return ca.u.d.begin < cb.u.d.begin;
+ return a->begin < b->begin;
case FcOpLessEqual:
- ca = FcRangeCanonicalize (a);
- cb = FcRangeCanonicalize (b);
- return FcDoubleCmpLE (ca.u.d.begin, cb.u.d.begin);
+ return a->begin <= b->begin;
case FcOpMore:
- ca = FcRangeCanonicalize (a);
- cb = FcRangeCanonicalize (b);
- return ca.u.d.end > cb.u.d.end;
+ return a->end > b->end;
case FcOpMoreEqual:
- ca = FcRangeCanonicalize (a);
- cb = FcRangeCanonicalize (b);
- return FcDoubleCmpGE (ca.u.d.end, cb.u.d.end);
+ return a->end >= b->end;
default:
break;
}
@@ -202,9 +130,8 @@ FcRangeCompare (FcOp op, const FcRange *a, const FcRange *b)
FcChar32
FcRangeHash (const FcRange *r)
{
- FcRange c = FcRangeCanonicalize (r);
- int b = (int) (c.u.d.begin * 100);
- int e = FcDoubleCmpEQ (c.u.d.end, DBL_MAX) ? INT_MAX : (int) (c.u.d.end * 100);
+ int b = (int) (r->begin * 100);
+ int e = (int) (r->end * 100);
return b ^ (b << 1) ^ (e << 9);
}
diff --git a/fontconfig/src/fcxml.c b/fontconfig/src/fcxml.c
index a483797ac..4b19e0a30 100644
--- a/fontconfig/src/fcxml.c
+++ b/fontconfig/src/fcxml.c
@@ -57,6 +57,9 @@
extern FcChar8 fontconfig_instprefix[];
#endif
+static FcChar8 *__fc_userdir = NULL;
+static FcChar8 *__fc_userconf = NULL;
+
static void
FcExprDestroy (FcExpr *e);
@@ -79,6 +82,7 @@ FcRuleDestroy (FcRule *rule)
case FcRuleEdit:
FcEditDestroy (rule->u.edit);
break;
+ case FcRuleUnknown:
default:
break;
}
@@ -609,6 +613,7 @@ FcTypeName (FcType type)
return "langset";
case FcTypeRange:
return "range";
+ case FcTypeUnknown:
default:
return "unknown";
}
@@ -806,6 +811,7 @@ FcRuleCreate (FcRuleType type,
case FcRuleEdit:
r->u.edit = (FcEdit *) p;
break;
+ case FcRuleUnknown:
default:
free (r);
r = NULL;
@@ -1255,7 +1261,6 @@ FcParseBlank (FcConfigParse *parse)
{
int n = FcVStackElements (parse);
FcChar32 i, begin, end;
- FcRange r;
while (n-- > 0)
{
@@ -1272,9 +1277,8 @@ FcParseBlank (FcConfigParse *parse)
goto bail;
break;
case FcVStackRange:
- r = FcRangeCanonicalize (v->u.range);
- begin = (FcChar32)r.u.d.begin;
- end = (FcChar32)r.u.d.end;
+ begin = (FcChar32) v->u.range->begin;
+ end = (FcChar32) v->u.range->end;
if (begin <= end)
{
for (i = begin; i <= end; i++)
@@ -1587,7 +1591,6 @@ FcParseCharSet (FcConfigParse *parse)
FcVStack *vstack;
FcCharSet *charset = FcCharSetCreate ();
FcChar32 i, begin, end;
- FcRange r;
int n = 0;
while ((vstack = FcVStackPeek (parse)))
@@ -1602,9 +1605,8 @@ FcParseCharSet (FcConfigParse *parse)
n++;
break;
case FcVStackRange:
- r = FcRangeCanonicalize (vstack->u.range);
- begin = (FcChar32)r.u.d.begin;
- end = (FcChar32)r.u.d.end;
+ begin = (FcChar32) vstack->u.range->begin;
+ end = (FcChar32) vstack->u.range->end;
if (begin <= end)
{
@@ -2263,6 +2265,24 @@ FcParseCacheDir (FcConfigParse *parse)
FcStrFree (data);
}
+void
+FcConfigPathFini (void)
+{
+ FcChar8 *s;
+
+retry_dir:
+ s = fc_atomic_ptr_get (&__fc_userdir);
+ if (!fc_atomic_ptr_cmpexch (&__fc_userdir, s, NULL))
+ goto retry_dir;
+ free (s);
+
+retry_conf:
+ s = fc_atomic_ptr_get (&__fc_userconf);
+ if (!fc_atomic_ptr_cmpexch (&__fc_userconf, s, NULL))
+ goto retry_conf;
+ free (s);
+}
+
static void
FcParseInclude (FcConfigParse *parse)
{
@@ -2273,8 +2293,7 @@ FcParseInclude (FcConfigParse *parse)
FcBool deprecated = FcFalse;
#endif
FcChar8 *prefix = NULL, *p;
- static FcChar8 *userdir = NULL;
- static FcChar8 *userconf = NULL;
+ FcChar8 *userdir = NULL, *userconf = NULL;
s = FcStrBufDoneStatic (&parse->pstack->str);
if (!s)
@@ -2304,6 +2323,7 @@ FcParseInclude (FcConfigParse *parse)
{
size_t plen = strlen ((const char *)prefix);
size_t dlen = strlen ((const char *)s);
+ FcChar8 *u;
p = realloc (prefix, plen + 1 + dlen + 1);
if (!p)
@@ -2319,14 +2339,32 @@ FcParseInclude (FcConfigParse *parse)
if (FcFileIsDir (s))
{
userdir:
+ userdir = fc_atomic_ptr_get (&__fc_userdir);
if (!userdir)
- userdir = FcStrdup (s);
+ {
+ u = FcStrdup (s);
+ if (!fc_atomic_ptr_cmpexch (&__fc_userdir, userdir, u))
+ {
+ free (u);
+ goto userdir;
+ }
+ userdir = u;
+ }
}
else if (FcFileIsFile (s))
{
userconf:
+ userconf = fc_atomic_ptr_get (&__fc_userconf);
if (!userconf)
- userconf = FcStrdup (s);
+ {
+ u = FcStrdup (s);
+ if (!fc_atomic_ptr_cmpexch (&__fc_userconf, userconf, u))
+ {
+ free (u);
+ goto userconf;
+ }
+ userconf = u;
+ }
}
else
{
@@ -2350,6 +2388,7 @@ FcParseInclude (FcConfigParse *parse)
filename = FcConfigFilename(s);
if (deprecated == FcTrue &&
filename != NULL &&
+ userdir != NULL &&
!FcFileIsLink (filename))
{
if (FcFileIsDir (filename))
diff --git a/freetype/CMakeLists.txt b/freetype/CMakeLists.txt
index 8b859a57e..6631fdeb0 100644
--- a/freetype/CMakeLists.txt
+++ b/freetype/CMakeLists.txt
@@ -1,6 +1,6 @@
# CMakeLists.txt
#
-# Copyright 2013, 2014 by
+# Copyright 2013-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# Written by John Cary <cary@txcorp.com>
@@ -98,8 +98,8 @@ if (BUILD_FRAMEWORK)
endif ()
set(VERSION_MAJOR "2")
-set(VERSION_MINOR "5")
-set(VERSION_PATCH "5")
+set(VERSION_MINOR "6")
+set(VERSION_PATCH "0")
set(PROJECT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
# Compiler definitions for building the library
@@ -135,6 +135,7 @@ set(BASE_SRCS
src/base/ftcid.c
src/base/ftdbgmem.c
src/base/ftdebug.c
+ src/base/ftfntfmt.c
src/base/ftfstype.c
src/base/ftgasp.c
src/base/ftgloadr.c
@@ -158,7 +159,6 @@ set(BASE_SRCS
src/base/fttype1.c
src/base/ftutil.c
src/base/ftwinfnt.c
- src/base/ftxf86.c
src/bdf/bdf.c
src/bzip2/ftbzip2.c
src/cache/ftcache.c
diff --git a/freetype/ChangeLog b/freetype/ChangeLog
index 809b475f0..fea19b939 100644
--- a/freetype/ChangeLog
+++ b/freetype/ChangeLog
@@ -1,3 +1,1638 @@
+2015-06-07 Werner Lemberg <wl@gnu.org>
+
+ * Version 2.6 released.
+ =======================
+
+
+ Tag sources with `VER-2-6'.
+
+ * docs/VERSION.DLL: Update documentation and bump version number to
+ 2.6.
+
+ * README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2005/index.html,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/vc2008/index.html,
+ builds/windows/vc2010/freetype.vcxproj,
+ builds/windows/vc2010/index.html,
+ builds/windows/visualc/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualc/index.html,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualce/freetype.vcproj,
+ builds/windows/visualce/index.html,
+ builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2005-ce/index.html,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/index.html: s/2.5.5/2.6/, s/255/26/.
+
+ * include/freetype/freetype.h (FREETYPE_MINOR): Set to 6.
+ (FREETYPE_PATCH): Set to 0.
+
+ * builds/unix/configure.raw (version_info): Set to 18:0:12.
+ * CMakeLists.txt (VERSION_MINOR): Set to 0.
+ (VERSION_PATCH): Set to 6.
+
+ * src/autofit/afmodule.c [!FT_MAKE_OPTION_SINGLE_OBJECT]: Add
+ declarations for dumping functions.
+
+ * src/truetype/ttinterp.c (TT_New_Context): Pacify compiler.
+
+ * builds/toplevel.mk: Use `freetype.mk's code to compute the version
+ string.
+ Don't include a zero patch level in version string.
+ * builds/freetype.mk: Remove code for computing the version string.
+
+2015-06-06 Ashish Azad <ashish.azad@samsung.com>
+
+ Fix Savannah bug #45260.
+
+ * src/pfr/pfrdrivr.c (pfr_get_kerning): Fix typo.
+
+2015-06-03 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix memory leak.
+
+ Problem reported by Grissiom <chaos.proton@gmail.com>; in
+
+ http://lists.nongnu.org/archive/html/freetype/2015-05/msg00013.html
+
+ there is an example code to trigger the bug.
+
+ * src/truetype/ttobjs.c (tt_size_init_bytecode): Free old `size'
+ data before allocating again. Bug most probably introduced four
+ years ago in version 2.4.3.
+
+2015-06-02 Werner Lemberg <wl@gnu.org>
+
+ [raster] Add more tracing.
+
+ * src/raster/ftraster.c (FT_TRACE7) [_STANDALONE_]: Define.
+ (Vertical_Sweep_Span, Vertical_Sweep_Drop, Horizontal_Sweep_Span,
+ Horizontal_Sweep_Drop, Render_Glyph): Add tracing calls.
+
+2015-06-01 Werner Lemberg <wl@gnu.org>
+
+ [truetype] While tracing opcodes, show code position and stack.
+
+ * src/truetype/ttinterp.c: Change all existing TRACE7 calls to
+ TRACE6.
+ (opcode_name): Add string lengths.
+ (TT_RunIns): Implement display of code position and stack.
+
+2015-05-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] In GX, make private point numbers work correctly.
+
+ This is completely missing in Apple's documentation: If a `gvar'
+ tuple uses private point numbers (this is, deltas are specified for
+ some points only), the uncovered points must be interpolated for
+ this tuple similar to the IUP bytecode instruction. Examples that
+ need this functionality are glyphs `Oslash' and `Q' in Skia.ttf.
+
+ * src/truetype/ttgxvar.c (tt_delta_shift, tt_delta_interpolate,
+ tt_handle_deltas): New functions.
+ (TT_Vary_Get_Glyph_Deltas): Renamed to...
+ (TT_Vary_Apply_Glyph_Deltas): ... this; it directly processes the
+ points and does no longer return an array of deltas.
+ Add tracing information.
+ Call `tt_handle_deltas' to interpolate missing deltas.
+ Also fix a minor memory leak in case of error.
+
+ * src/truetype/ttgxvar.h: Updated.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Updated.
+
+2015-05-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] In GX, make intermediate tuplets work at extrema.
+
+ * src/truetype/ttgxvar.c (ft_var_apply_tuple): Fix range condition.
+
+2015-05-31 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Add tracing information to GX code.
+
+ * src/truetype/ttgxvar.c (ft_var_load_avar, ft_var_load_gvar,
+ ft_var_apply_tuple, TT_Get_MM_Var, TT_Set_MM_Blend,
+ TT_Set_Var_Design, tt_face_vary_cvt): Do it.
+
+2015-05-28 Werner Lemberg <wl@gnu.org>
+
+ * src/tools/apinames.c (names_dump): Fix invalid reference.
+
+ Problem reported by Guzman Mosqueda, Jose R
+ <jose.r.guzman.mosqueda@intel.com>.
+
+2015-05-24 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix commit from 2015-05-22.
+
+ * src/truetype/ttgload.c, src/truetype/ttinterp.c: Guard new code
+ with `TT_CONFIG_OPTION_SUBPIXEL_HINTING'.
+
+ Problem reported by Nikolaus Waxweiler <madigens@gmail.com>.
+
+2015-05-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix return values of GETINFO bytecode instruction.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): New fields
+ `vertical_lcd' and `gray_cleartype'.
+
+ * src/truetype/ttgload.c (tt_loader_init): Initialize new fields.
+ Change `symmetrical smoothing' to TRUE, since FreeType produces
+ exactly this.
+
+ * src/truetype/ttinterp.c (Ins_GETINFO): Fix selector/return bit
+ values for symmetrical smoothing, namely 11/18.
+ Handle bits for vertical LCD subpixels (8/15) and Gray ClearType
+ (12/19).
+
+2015-05-23 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Minor.
+
+ * src/truetype/ttinterp.h (TT_ExecContext):
+ s/subpixel/subpixel_hinting.
+
+ * src/truetype/ttgload.c, src/truetype/ttgload.h: Updated.
+
+2015-05-22 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Support selector index 3 of the INSTCTRL instruction.
+
+ This flag activates `native ClearType hinting', disabling backwards
+ compatibility mode as described in Greg Hitchcocks whitepaper. In
+ other words, it enables unrestricted functionality of all TrueType
+ instructions in ClearType.
+
+ * src/truetype/ttgload.c (tt_get_metrics): Call `sph_set_tweaks'
+ unconditionally.
+ (tt_loader_init): Unset `ignore_x_mode' flag if bit 2 of
+ `GS.instruct_control' is active.
+
+ * src/truetype/ttinterp.c (Ins_INSTCTRL): Handle selector index 3.
+ (Ins_GETINFO): Updated.
+
+ * docs/CHANGES: Document it.
+
+2015-05-20 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Minor.
+
+ * src/truetype/ttinterp.h (SetSuperRound): Fix type of `GridPeriod'
+ argument.
+
+2015-05-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Fix loading of composite glyphs.
+
+ * src/truetype/ttgload.c (TT_Load_Composite_Glyph): If the
+ ARGS_ARE_XY_VALUES flag is not set, handle argument values as
+ unsigned. I trust `ttx' (which has exactly such code) that it does
+ the right thing here...
+
+ The reason that noone has ever noticed this bug is probably the fact
+ that point-aligned subglyphs are rare, as are subglyphs with a
+ number of points in the range [128;255], which is quite large (or
+ even in the range [32768;65535], which is extremely unlikely).
+
+2015-05-12 Chris Liddell <chris.liddell@artifex.com>
+
+ [cff] Make the `*curveto' operators more tolerant.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString): The opcodes
+ `vvcurveto', `hhcurveto', `vhcurveto', and `hvcurveto' all iterate,
+ pulling values off the stack until the stack is exhausted.
+ Implicitly the stack must be a multiple (or for subtly different
+ behaviour) a multiple plus a specific number of extra values deep.
+ If that's not the case, enforce it (as the old code did).
+
+2015-05-12 Chris Liddell <chris.liddell@artifex.com>
+
+ [cff] fix incremental interface with new cff code.
+
+ * src/cff/cf2ft.c (cf2_getSeacComponent): When using the incremental
+ interface to retrieve glyph data for a SEAC, it be left to the
+ incremental interface callback to apply the encoding to raw
+ character index (as it was in the previous code).
+
+2015-04-29 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Speed up IUP.
+
+ * src/autofit/afhints.c (af_iup_interp): Separate trivial snapping to
+ the same position from true interpolation, use `scale' to reduce
+ divisions.
+
+2015-04-28 Werner Lemberg <wl@gnu.org>
+
+ [cff] Use `name' table for PS name if we have a SFNT-CFF.
+
+ This follows the OpenType 1.7 specification. See
+
+ http://tug.org/pipermail/tex-live/2015-April/036634.html
+
+ for a discussion.
+
+ * src/cff/cffdrivr.c (cff_get_ps_name): Use the `sfnt' service if we
+ have an SFNT.
+
+2015-04-27 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [truetype] Speed up IUP.
+
+ * src/truetype/ttinterp.c (_iup_worker_interpolate): Separate trivial
+ snapping to the same position from true interpolation.
+
+2015-04-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] By default, enable warping code but switch off warping.
+
+ Suggested by Behdad.
+
+ * include/config/ftoption.h: Define AF_CONFIG_OPTION_USE_WARPER.
+
+ * src/autofit/afmodule.c (af_autofitter_init): Initialize `warping'
+ with `false'.
+
+2015-04-21 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated.
+
+2015-04-21 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Introduce `warping' property.
+
+ This code replaces the debugging hook from the previous commit with
+ a better, more generic solution.
+
+ * include/ftautoh.h: Document it.
+
+ * src/autofit/afmodule.h (AF_ModuleRec)
+ [AF_CONFIG_OPTION_USE_WARPER]: Add `warping' field.
+
+ * src/autofit/afmodule.c (_af_debug_disable_warper): Remove.
+ (af_property_set, af_property_get, af_autofitter_init)
+ [AF_CONFIG_OPTION_USE_WARPER]: Handle `warping' option.
+
+ * src/autofit/afhints.h (AF_HINTS_DO_WARP): Remove use of the no
+ longer existing `_af_debug_disable_warper'.
+
+ * src/autofit/afcjk.c (af_cjk_hints_init), src/autofit/aflatin.c
+ (af_latin_hints_init), src/autofit/aflatin2.c (af_latin2_hints_init)
+ [AF_CONFIG_OPTION_USE_WARPER]: Add `AF_SCALER_FLAG_NO_WARPER' to the
+ scaler flags if warping is off.
+
+ * src/autofit/aftypes.h: Updated.
+
+2015-04-16 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add debugging hook to disable warper.
+
+ * src/autofit/afmodule.c (_af_debug_disable_warper)
+ [FT_DEBUG_AUTOFIT]: New global variable.
+
+ * src/autofit/aftypes.h: Updated.
+ (AF_SCALER_FLAG_NO_WARPER): New macro (not actively used yet).
+
+ * src/autofit/afhints.h (AF_HINTS_DO_WARP): New macro.
+
+ * src/autofi/aflatin.c (af_latin_hints_apply)
+ [AF_CONFIG_OPTION_USE_WARPER]: Use `AF_HINTS_DO_WARP' to control use
+ of warper.
+
+ * src/autofit/afcjk.c (af_cjk_hints_init, af_cjk_hints_apply)
+ [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
+
+ * src/autofit/aflatin2.c (af_latin2_hints_apply)
+ [AF_CONFIG_OPTION_USE_WARPER]: Synchronize with `aflatin.c'.
+
+2015-04-10 Werner Lemberg <wl@gnu.org>
+
+ [cff] Update advance width handling to OpenType 1.7.
+
+ Problem reported by Behdad.
+
+ * src/cff/cffdrivr.c (cff_get_advances): Handle SFNT case
+ separately.
+
+ * src/cff/cffgload.c (cff_slot_load): Use advance width and side
+ bearing values from `hmtx' table if present.
+
+2015-04-03 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Use do-while loop.
+
+2015-04-02 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/autofit/aflatin.c (af_latin_hint_edges): Reduce logic.
+
+2015-04-01 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [autofit] Finish the thought.
+
+ * src/autofit/afhints.c (af_direction_compute): make sure the long arm
+ is never negative so that its `FT_ABS' is not necessary.
+
+2015-04-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Call dumper functions for tracing.
+
+ * src/autofit/afcjk.c (af_cjk_hints_apply): Remove dead code.
+ * src/autofit/afhints.c (af_glyph_hints_dump_points): Minor
+ improvement.
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Implement it.
+
+2015-04-01 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Make debugging stuff work again.
+
+ The interface to ftgrid was broken in the series of commits starting
+ with
+
+ [autofit] Allocate AF_Loader on the stack instead of AF_Module.
+
+ from 2015-01-14.
+
+ * src/autofit/afmodule.c (_af_debug_hints_rec) [FT_DEBUG_AUTOFIT]:
+ Use a global AF_GlyphHintsRec object for debugging.
+ (af_autofitter_done, af_autofitter_load_glyph): Updated.
+
+ * src/autofit/afloader.c (af_loader_init, af_loader_done): Updated.
+
+2015-04-01 Werner Lemberg <wl@gnu.org>
+
+ * src/autofit/afhints.c (af_glyph_hints_done): Fix minor thinko.
+
+2015-03-29 Werner Lemberg <wl@gnu.org>
+
+ [cff] Fix Savannah bug #44629.
+
+ * src/cff/cf2font.h (CF2_MAX_SUBR), src/cff/cffgload.h
+ (CFF_MAX_SUBRS_CALLS): Set to 16.
+
+2015-03-29 Werner Lemberg <wl@gnu.org>
+
+ [type1, truetype] Make the MM API more flexible w.r.t. `num_coords'.
+
+ This commit allows `num_coords' to be larger or smaller than the
+ number of available axes while selecting a design instance, either
+ ignoring excess data or using defaults if data is missing.
+
+ * src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
+ Implement it.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design,
+ T1_Set_Var_Design): Ditto.
+
+2015-03-29 Werner Lemberg <wl@gnu.org>
+
+ [type1] Minor.
+
+ * src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Use
+ FT_THROW.
+ (T1_Set_Var_Design): Use T1_MAX_MM_AXIS and FT_THROW.
+
+2015-03-27 Werner Lemberg <wl@gnu.org>
+
+ [cff] Trace charstring nesting levels.
+
+ * src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdCALLGSUBR,
+ cf2_cmdCALLSUBR, cf2_cmdRETURN>: Implement it.
+
+ * src/cff/cffgload.c (cff_decoder_parse_charstrings)
+ <cff_op_callsubr, cff_op_callgsubr, cff_op_return>: Ditto.
+
+2015-03-21 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ [base] Optimize `FT_Angle_Diff'.
+
+ Under normal circumstances we are usually close to the desired range
+ of angle values, so that the remainder is not really necessary.
+
+ * src/base/fttrigon.c (FT_Angle_Diff): Use loops instead of remainder.
+
+ * src/autofit/aftypes.h (AF_ANGLE_DIFF): Ditto in the unused macro.
+
+2015-03-21 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Improve `gvar' handling.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Correctly handle
+ single-element runs. Cf. glyph `Q' in Skia.ttf with weights larger
+ than the default.
+
+2015-03-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/fttrigon.c (FT_Vector_Rotate): Minor refactoring.
+
+2015-03-17 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Fix Savannah bug #44412 (part 2).
+
+ * src/base/fttrigon.c (FT_Sin, FT_Cos, FT_Tan): Call `FT_Vector_Unit'.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Arabic script.
+
+ Thanks to Titus Nemeth <tn@tntypography.eu> for guidance!
+
+ * src/autofit/afblue.dat: Add blue zone data for Arabic.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Arabic standard characters.
+
+ * src/autofit/afranges.c: Add Arabic data.
+
+ * src/autofit/afstyles.h: Add Arabic data.
+
+ * docs/CHANGES: Document it.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ Rename `svxf86nm.h' to `svfntfmt.h'; update related symbols.
+
+ * include/internal/ftserv.h (FT_SERVICE_XFREE86_NAME_H): Renamed
+ to...
+ (FT_SERVICE_FONT_FORMAT_H): This.
+
+ * include/internal/services/svfntfmt.h (FT_XF86_FORMAT_*): Renamed
+ to ...
+ (FT_FONT_FORMAT_*): This.
+
+ src/base/ftfntfmt.c, src/bdf/bdfdrivr.c, src/cff/cffdrivr.c,
+ src/cid/cidriver.c, src/pcf/pcfdrivr.c, src/pfr/pfrdrivr.c,
+ src/truetype/ttdriver.c, src/type1/t1driver.c,
+ src/type42/t42drivr.c, src/winfonts/winfnt.c: Updated.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ [base] Rename `FT_XFREE86_H' to `FT_FONT_FORMATS_H'.
+
+ * include/config/ftheader.h: Implement it.
+ * src/base/ftfntfmt.c, docs/CHANGES: Updated.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ [base] Rename `FT_Get_X11_Font_Format' to `FT_Get_Font_Format'.
+
+ * include/ftfntfmt.h, src/base/ftfntfmt.c: Implement it.
+
+ * docs/CHANGES: Updated.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ Fix automatic copyright updating.
+
+ * src/tools/update-copyright: Make scanning of `no-copyright'
+ actually work.
+
+ * src/tools/no-copyright: Don't include README in general.
+
+2015-03-11 Werner Lemberg <wl@gnu.org>
+
+ Rename `ftxf86.[ch]' to `ftfntfmt.[ch]'.
+
+ CMakeLists.txt, builds/amiga/makefile, builds/amiga/makefile.os4,
+ builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
+ builds/mac/FreeType.m68k_far.make.txt,
+ builds/mac/FreeType.ppc_carbon.make.txt,
+ builds/mac/FreeType.ppc_classic.make.txt, builds/symbian/bld.inf,
+ builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
+ builds/wince/vc2008-ce/freetype.vcproj,
+ builds/windows/vc2005/freetype.vcproj,
+ builds/windows/vc2008/freetype.vcproj,
+ builds/windows/vc2010/freetype.vcxproj,
+ builds/windows/vc2010/freetype.vcxproj.filters,
+ builds/windows/visualc/freetype.dsp,
+ builds/windows/visualc/freetype.vcproj,
+ builds/windows/visualce/freetype.dsp,
+ builds/windows/visualce/freetype.vcproj, docs/INSTALL.ANY,
+ include/config/ftheader.h, include/ftfntfmt.h, modules.cfg,
+ src/base/ftfntfmt.c, vms_make.com: Updated.
+
+2015-03-10 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ Fix Savannah bug #44412 (part 1).
+
+ * src/base/ftstroke.c (ft_stroker_inside): Handle near U-turns.
+
+2015-03-10 Werner Lemberg <wl@gnu.org>
+
+ [base] Rename `FT_Bitmap_New' to `FT_Bitmap_Init'.
+
+ * include/ftbitmap.h, src/base/ftbitmap.c: Implement it.
+ Update all callers.
+
+ * docs/CHANGES: Updated.
+
+2015-03-06 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
+
+ Found by Alexei.
+
+2015-03-05 Alexei Podtelezhnikov <apodtele@gmail.com>
+
+ * src/base/ftstroke.c: Simplify.
+
+2015-03-04 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Some fixes and code refactoring in `ttgxvar.c'.
+
+ * src/truetype/ttgxvar.c (ft_var_readpackedpoints): Fix return value
+ of `point_cnt' if two bytes are read.
+ Use a more vertical coding style.
+ (ft_var_readpackeddeltas): Use FT_UInt for `delta_cnt' parameter.
+ Use a more vertical coding style.
+
+2015-03-03 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix Savannah bug #44241.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues): Reject glyphs
+ with less than 3 points.
+
+2015-03-02 Werner Lemberg <wl@gnu.org>
+
+ Simplify `TYPEOF' macro.
+
+ No need for two arguments.
+
+ * include/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h (TYPEOF): Updated.
+
+ * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
+ src/autofit/afwarp.h (AF_WARPER_FLOOR): Updated.
+
+2015-03-01 Werner Lemberg <wl@gnu.org>
+
+ Various compiler warning fixes for `make multi'.
+
+ * src/autofit/afcjk.c (af_cjk_hints_compute_blue_edges),
+ src/autofit/aflatin.c (af_latin_hint_compute_blue_edges,
+ af_latin_hint_edges), src/autofit/aflatin2.c
+ (af_latin2_hints_compute_blue_edges, af_latin2_hint_edges): Declare
+ as `static'.
+
+ * src/cache/ftccmap.c (FTC_CMAP_QUERY_HASH, FTC_CMAP_NODE_HASH):
+ Removed. Unused.
+ * src/cache/ftcimage.c: Include FT_INTERNAL_OBJECTS_H.
+ * src/cache/ftcmanag.c (FTC_LRU_GET_MANAGER): Removed. Unused.
+
+ * src/cff/cf2intrp.c: Include `cf2intrp.h'.
+ * src/cff/cffdrivr.c (PAIR_TAG): Removed. Unused.
+
+ * src/gzip/ftgzip.c (NO_DUMMY_DECL): Removed. Unused.
+
+ * src/psaux/afmparse.c (afm_parser_read_int): Declare as `static'.
+
+ * src/pshinter/pshalgo.c (STRONGER, PSH_ZONE_MIN, PSH_ZONE_MAX):
+ Removed. Unused.
+
+ * src/raster/ftraster.c (Render_Glyph): Declare as `static'.
+
+ * src/sfnt/ttpost.c (load_format_20): Fix signedness warning.
+
+ * src/truetype/ttdriver.c (PAIR_TAG): Removed. Unused.
+ * src/truetype/ttsubpix.c (is_member_of_family_class,
+ is_member_of_style_class): Declare as `static'.
+
+ * src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Declare
+ as `static'.
+ * src/type1/t1load.c (mm_axis_unmap, mm_weights_unmap): Declare as
+ `static'.
+ (T1_FIELD_COUNT): Removed. Unused.
+ * src/type1/t1parse.h (T1_Done_Table): Removed. Unused.
+
+ * src/type42/t42parse.c (T1_Done_Table): Removed. Unused.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [psaux] Signedness fixes.
+
+ * include/internal/psaux.h, src/psaux/afmparse.c,
+ src/psaux/afmparse.h, src/psaux/psconv.c, src/psaux/psobjs.c,
+ src/psaux/t1cmap.c, src/psaux/t1decode.c: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [otvalid] Signedness fixes.
+
+ * src/otvalid/otvcommn.c, src/otvalid/otvgdef.c,
+ src/otvalid/otvgpos.c, src/otvalid/otvgsub.c, src/otvalid/otvmath.c:
+ Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ * src/bzip2/ftbzip2.c (ft_bzip2_alloc): Signedness fix.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [lzw] Signedness fixes.
+
+ * src/lzw/ftzopen.c, src/lzw/ftzopen.h: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [gxvalid] Signedness fixes.
+
+ * src/gxvalid/gxvbsln.c, src/gxvalid/gxvcommn.c,
+ src/gxvalid/gxvcommn.h, src/gxvalid/gxvjust.c,
+ src/gxvalid/gxvkern.c, src/gxvalid/gxvlcar.c, src/gxvalid/gxvmort.c,
+ src/gxvalid/gxvmort1.c, src/gxvalid/gxvmort2.c,
+ src/gxvalid/gxvmorx.c, src/gxvalid/gxvmorx1.c,
+ src/gxvalid/gxvmorx2.c, src/gxvalid/gxvopbd.c,
+ src/gxvalid/gxvprop.c, src/gxvalid/gxvtrak.c: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [cache] Signedness fixes.
+
+ * src/cache/ftcbasic.c, src/cache/ftccmap.c, src/cache/ftcimage.c,
+ src/cache/ftcmanag.c, src/cache/ftcsbits.c: Apply.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ Change dimension fields in `FTC_ImageTypeRec' to unsigned type.
+
+ This doesn't break ABI.
+
+ * include/ftcache.h (FTC_ImageTypeRec): Use unsigned types for
+ `width' and `height'.
+
+ * docs/CHANGES: Document it.
+
+2015-02-25 Werner Lemberg <wl@gnu.org>
+
+ [cache] Don't use `labs'.
+
+ This is the only place in FreeType where this function was used.
+
+ * include/config/ftstdlib.h (ft_labs): Remove.
+
+ * src/cache/ftcimage.c (ftc_inode_weight): Replace `ft_labs' with
+ `FT_ABS'.
+
+2015-02-23 Werner Lemberg <wl@gnu.org>
+
+ [cache] Replace `FT_PtrDist' with `FT_Offset'.
+
+ * src/cache/ftccache.h (FTC_NodeRec): `FT_Offset' (a.k.a. `size_t')
+ is a better choice for `hash' to hold a pointer than `FT_PtrDist'
+ (a.k.a. `ptrdiff_t'), especially since the latter is signed,
+ causing zillions of signedness warnings. [Note that `hash' was of
+ type `FT_UInt32' before the change to `FT_PtrDist'.]
+ Update all users.
+
+ * src/cache/ftcbasic.c, src/cache/ftccache.c, src/cache/ftccmap.c,
+ src/cache/ftcglyph.c, src/cache/ftcglyph.h: Updated.
+
+2015-02-23 Werner Lemberg <wl@gnu.org>
+
+ [smooth, raster] Re-enable standalone compilation.
+
+ * src/raster/ftraster.c (FT_RENDER_POOL_SIZE, FT_MAX)
+ [_STANDALONE_]: Define macros.
+
+ * src/smooth/ftgrays.c (FT_RENDER_POOL_SIZE, FT_MAX, FT_ABS,
+ FT_HYPOT) [_STANDALONE_]: Define macros.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [smooth] Signedness fixes.
+
+ * src/smooth/ftgrays.c, src/smooth/ftsmooth.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/raster/ftraster.c: Use the file's typedefs everywhere.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/sfnt/ttpost.c (load_format_20): Fix error tracing message.
+
+ Bug introduced 6 commits earlier.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Fix thinko.
+
+ * src/pshinter/pshalgo.c (psh_glyph_find_strong_points): Correctly
+ check `count'.
+ Bug introduced two commits earlier.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [raster] Signedness fixes.
+
+ * src/raster/ftraster.c, src/raster/ftrend1.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Signedness fixes.
+
+ * src/pshinter/pshalgo.c, src/pshinter/pshglob.c,
+ src/pshinter/pshrec.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pshinter] Use macros for (unsigned) flags, not enumerations.
+
+ * src/pshinter/pshalgo.h (PSH_Hint_Flags): Replace with macros.
+ Updated.
+ * src/pshinter/pshrec.h (PS_Hint_Flags): Replace with macros.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/pshinter/pshrec.c: Simplify.
+ (ps_hints_open, ps_hints_stem): Remove switch statement.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Signedness fixes.
+
+ * src/sfnt/pngshim.c, src/sfnt/sfobjs.c, src/sfnt/ttcmap.c,
+ src/sfnt/ttkern.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
+ src/sfnt/ttsbit.c: Apply.
+ * src/sfnt/sfdriver.c: Apply.
+ (sfnt_get_ps_name): Simplify.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [bdf] Signedness fixes.
+
+ * src/bdf/bdf.h, src/bdf/bdfdrivr.c, src/bdf/bdfdrivr.h,
+ src/bdf/bdflib.c: Apply.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ * src/bdf/bdflib.c (_bdf_atous): New function.
+ (_bdf_parse_glyphs, _bdf_parse_start): Use it.
+
+2015-02-22 Werner Lemberg <wl@gnu.org>
+
+ [pcf] Signedness fixes.
+
+ * src/pcf/pcf.h, src/pcf/pcfdrivr.c: Apply.
+ * src/pcf/pcfread.c: Apply.
+ (pcf_get_encodings): Ignore invalid negative encoding offsets.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ * src/winfonts/winfnt.c: Signedness fixes.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ [type42] Signedness fixes.
+
+ * src/type42/t42parse.c, src/type42/t42parse.h,
+ src/type42/t42types.h: Apply.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ [pfr] Signedness fixes.
+
+ * src/pfr/pfrdrivr.c, src/pfr/pfrgload.c, src/pfr/pfrload.c,
+ src/pfr/pfrload.h, src/pfr/pfrobjs.c, src/pfr/pfrsbit.c,
+ src/pfr/pfrtypes.h: Apply.
+
+2015-02-21 Werner Lemberg <wl@gnu.org>
+
+ [cff] Minor signedness fixes related to last commit.
+
+ * src/cff/cf2ft.c, src/cff/cf2intrp.c, src/cff/cffgload.c: Apply.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Thinkos in bias handling.
+
+ Only the final result is always positive.
+
+ Bug introduced three commits earlier.
+
+ * src/cff/cffgload.c, src/cff/cffgload.h: Apply.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cid] Fix signedness issues and emit some better error codes.
+
+ * src/cid/cidgload.c, src/cid/cidload.h, src/cid/cidobjs.c,
+ src/cid/cidparse.h: Apply.
+ * src/cid/cidload.c: Apply.
+ (parse_fd_array): Reject negative values for number of dictionaries.
+ * src/cid/cidparse.c: Apply.
+ (cid_parser_new): Reject negative values for hex data length.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Signedness fixes for new engine.
+
+ * src/cff/cf2arrst.c, src/cff/cf2fixed.h, src/cff/cf2ft.c,
+ src/cff/cf2ft.h, src/cff/cf2hints.c, src/cff/cf2intrp.c: Apply.
+
+2015-02-20 Werner Lemberg <wl@gnu.org>
+
+ [cff] Signedness fixes for basic infrastructure and old engine.
+
+ * include/internal/pshints.h, src/cff/cffdrivr.c,
+ src/cff/cffgload.c, src/cff/cffgload.h, src/cff/cffload.c,
+ src/cff/cffobjs.c, src/cff/cffparse.c, src/pshinter/pshrec.c: Apply.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttgxvar.c (TT_Get_MM_Var): Ignore `countSizePairs'.
+
+ This is hard-coded to value 2 in `fvar' version 1.0 (and no newer
+ version exists), but some fonts set it incorrectly.
+
+ Problem reported by Adam Twardoch <adam@fontlab.com>.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ [cff] Emit better error code for invalid private dict size.
+
+ * src/cff/cffparse.c (cff_parse_private_dict): Reject negative
+ values for size and offset.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix signedness issues.
+
+ * src/autofit/afangles.c, src/autofit/afcjk.c,
+ src/autofit/afglobal.c, src/autofit/afhints.c,
+ src/autofit/aflatin.c, src/autofit/aflatin2.c, src/autofit/afwarp.c,
+ src/autofit/hbshim.c: Apply.
+
+2015-02-19 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Use macros for (unsigned) flags, not enumerations.
+
+ This harmonizes with other code in FreeType (and reduces the number
+ of necessary casts to avoid compiler warnings).
+
+ * src/autofit/afblue.hin: Make flag macros unsigned.
+ * src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afcjk.h: Replace flag enumeration with macros.
+ * src/autofit/afcjk.c: Updated.
+
+ * src/autofit/afhints.h (AF_Flags, AF_Edge_Flags): Replace with
+ macros.
+ * src/autofit/afhints.c: Updated.
+
+ * src/autofit/aflatin.h: Replace flag enumerations with macros.
+ * src/autofit/aflatin.c, src/autofit/aflatin2.c: Updated.
+
+ * src/autofit/aftypes.h (AF_ScalerFlags): Replace with macros.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ [type1] Fix signedness issues.
+
+ * include/internal/psaux.h, include/internal/t1types.h,
+ src/psaux/psobjs.c, src/psaux/psobjs.h, src/psaux/t1decode.c,
+ src/type1/t1gload.c, src/type1/t1load.c, src/type1/t1parse.c: Apply.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ [psaux, type1] Fix minor AFM issues.
+
+ * include/internal/t1types.h (AFM_KernPairRec): Make indices
+ unsigned.
+ Update users.
+ (AFM_FontInfoRec): Make element counters unsigned.
+ Update users.
+ * src/psaux/afmparse.h (AFM_ValueRec): Add union member for unsigned
+ int.
+
+ * src/psaux/afmparse.c (afm_parse_track_kern, afm_parse_kern_pairs):
+ Reject negative values for number of kerning elements.
+
+ * src/type1/t1afm.c, src/tools/test_afm.c: Updated.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ Don't use `FT_PtrDist' for lengths.
+
+ Use FT_UInt instead.
+
+ * include/internal/psaux.h (PS_Table_FuncsRec, PS_TableRec,
+ T1_DecoderRec): Do it.
+
+ * include/internal/t1types.h (T1_FontRec): Ditto.
+
+ * src/cid/cidload.c (cid_parse_dict): Updated.
+ * src/pfr/pfrload.c (pfr_extra_item_load_font_id): Ditto.
+ * src/psaux/psobjs.c (ps_table_add), src/psaux/psobjs.h: Ditto.
+ * src/type1/t1load.c (parse_blend_axis_types, parse_encoding,
+ parse_chharstrings, parse_dict): Ditto.
+ * src/type42/t42parse.c (t42_parse_encoding, t42_parse_charstrings,
+ t42_parse_dict): Ditto.
+
+2015-02-18 Werner Lemberg <wl@gnu.org>
+
+ * src/type1/t1driver.c (t1_ps_get_font_value): Clean up.
+ This handles negative values better, avoiding many casts.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [base] Fix Savannah bug #44284.
+
+ * src/base/ftcalc.c (FT_MulFix): Typos.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Finish compiler warning fixes for signedness issues.
+
+ * src/truetype/ttgxvar.c, src/truetype/ttsubpix.c,
+ src/truetype/ttsubpix.h: Apply.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttsubpix.c: Adding missing `static' keywords.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More signedness fixes.
+
+ * include/internal/tttypes.h, src/truetype/ttinterp.h,
+ src/truetype/ttobjs.h, src/truetype/ttinterp.c,
+ src/truetype/ttobjs.c: Apply.
+
+2015-02-17 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Various signedness fixes.
+
+ * include/internal/ftgloadr.h, src/truetype/ttpload.c: Apply.
+
+ * src/truetype/ttgload.c: Apply.
+ (TT_Get_VMetrics): Protect against invalid ascenders and descenders
+ while constructing advance height.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ [base] Finish compiler warning fixes for signedness issues.
+
+ * src/base/ftglyph.c, src/base/ftlcdfil.c, src/base/ftstroke.c:
+ Apply.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ * include/tttables.h (TT_OS2): `fsType' must be FT_UShort.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ More minor signedness warning fixes.
+
+ * src/base/ftbbox.c, src/base/ftbitmap.c, src/base/fttrigon.c,
+ src/base/ftutil.c: Apply.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ Next round of minor compiler warning fixes.
+
+ * include/internal/ftrfork.h (FT_RFork_Ref): Change `offset' member
+ type to `FT_Long'.
+ (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Add `static' keyword.
+
+ * include/internal/ftstream.h (FT_Stream_Pos): Return `FT_ULong'.
+
+ * src/base/ftoutln.c, src/base/ftrfork.c, src/base/ftstream.c:
+ Signedess fixes.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ Various minor signedness fixes.
+
+ * include/ftadvanc.h, include/internal/ftobjs.h,
+ src/base/ftgloadr.c, src/base/ftobjs.c: Apply.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ New `TYPEOF' macro.
+
+ This helps suppress signedness warnings, avoiding issues with
+ implicit conversion changes.
+
+ * include/config/ftconfig.h, builds/unix/ftconfig.in,
+ builds/vms/ftconfig.h (TYPEOF): Define.
+
+ * include/internal/ftobjs.h (FT_PAD_FLOOR, FT_PIX_FLOOR),
+ src/autofit/afwarp.h (AF_WARPER_FLOOR): Use it.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftsystem.c: Use casts in standard C function wrappers.
+ (ft_alloc, ft_realloc, ft_ansi_stream_io, FT_Stream_Open): Do it.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #44261.
+
+ * builds/unix/detect.mk (setup) [unix]: Set `CONFIG_SHELL' in the
+ environment also while calling the configure script.
+
+2015-02-16 Werner Lemberg <wl@gnu.org>
+
+ * include/internal/ftmemory.h: Add some `FT_Offset' casts.
+ (FT_MEM_SET, FT_MEM_COPY, FT_MEM_MOVE, FT_ARRAY_ZERO, FT_ARRAY_COPY,
+ FT_MEM_MOVE): Do it.
+
+2015-02-15 Werner Lemberg <wl@gnu.org>
+
+ [base] Clean up signedness issues in `ftdbgmem.c'.
+
+ Also fix other minor issues.
+
+ * src/base/ftdbgmem.c (FT_MemTableRec): Replace all FT_ULong types
+ with FT_Long for consistency.
+ (ft_mem_primes): Change type to `FT_Int'.
+ (ft_mem_closest_prime, ft_mem_table_set): Updated.
+
+ (ft_mem_debug_panic, ft_mem_debug_alloc, ft_mem_debug_free,
+ ft_mem_debug_realloc): Use `static' keyword and fix signedness
+ warnings where necessary.
+
+ (ft_mem_table_resize, ft_mem_table_new, ft_mem_table_destroy,
+ ft_mem_table_get_nodep, ft_mem_debug_init, FT_DumpMemory): Fix types
+ and add or remove casts to avoid signedness warnings.
+
+2015-02-15 Werner Lemberg <wl@gnu.org>
+
+ [base] Clean up signedness in arithmetic functions.
+
+ This makes the code more readable and reduces compiler warnings.
+
+ * src/base/ftcalc.c (FT_MulDiv, FT_MulDiv_No_Round, FT_MulFix,
+ FT_DivFix): Convert input parameters to unsigned, do the
+ computation, then convert the result back to signed.
+ (ft_corner_orientation): Fix casts.
+
+2015-02-07 Werner Lemberg <wl@gnu.org>
+
+ [sfnt] Fix Savannah bug #44184.
+
+ * src/sfnt/ttload.c (check_table_dir, tt_face_load_font_dir): No
+ longer reject `htmx' and `vmtx' tables with invalid length but
+ sanitize them.
+
+2015-02-06 Jon Anderson <jon@websupergoo.com>
+
+ [truetype] Fix regression in the incremental glyph loader.
+
+ * src/truetype/ttgload.c (load_truetype_glyph): For incremental
+ fonts, the glyph index may be greater than the number of glyphs
+ indicated, so guard the check with a preprocessor conditional.
+
+2015-02-06 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Fix potential memory leak.
+
+ While this doesn't show up with FreeType, exactly the same code
+ leaks with ttfautohint's modified auto-hinter code (which gets used
+ in a slightly different way).
+
+ It certainly doesn't harm since it is similar to already existing
+ checks in the code for embedded arrays.
+
+ * src/autofit/afhints.c (af_glyph_hints_reload): Set `max_contours'
+ and `max_points' for all cases.
+
+2015-01-31 Werner Lemberg <wl@gnu.org>
+
+ [autofit] Add support for Thai script.
+
+ Thanks to Ben Mitchell <ben@rosettatype.com> for guidance with blue
+ zone characters!
+
+ * src/autofit/afblue.dat: Add blue zone data for Thai.
+
+ * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+ * src/autofit/afscript.h: Add Thai standard characters.
+
+ * src/autofit/afranges.c: Add Thai data.
+
+ * src/autofit/afstyles.h: Add Thai data.
+
+2015-01-23 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Handle `FT_RASTER_FLAG_AA' correctly.
+
+ This fixes a breakage caused by the commit `[raster] Remove
+ 5-level gray AA mode from monochrome rasterizer.'.
+
+ Problem reported by Markus Trippelsdorf <markus@trippelsdorf.de>.
+
+ * src/raster/ftraster.c (ft_black_render): Handle
+ `FT_RASTER_FLAG_AA'.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Remove gray AA mode
+ remnants.
+
+2015-01-18 Werner Lemberg <wl@gnu.org>
+
+ * src/base/ftobjs.c (FT_New_Library): Fix compiler warning.
+
+2015-01-18 Chris Liddell <chris.liddell@artifex.com>
+
+ [raster] Fix Savannah bug #44022.
+
+ Add fallback for glyphs with degenerate bounding boxes.
+
+ If a glyph has only one very narrow feature, the bbox can end up
+ with either the width or height of the bbox being 0, in which case
+ no raster memory is allocated and no attempt is made to render the
+ glyph. This is less than ideal when the drop-out compensation in
+ the rendering code would actually result in the glyph being
+ rendered.
+
+ This problem can be observed with the `I' glyph (gid 47) in the
+ Autodesk RomanS TrueType font.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Add a fallback if either
+ dimension is zero to explicitly round up/down (instead of simply
+ round).
+
+2015-01-17 Werner Lemberg <wl@gnu.org>
+
+ Add some tools to handle yearly copyright notice updates.
+
+ We are now following the GNU guidelines: A new release automatically
+ means that the copyright year of all affected files gets updated; it
+ is no longer used to track years of modification changes.
+
+ * src/tools/update-copyright-year: New Perl script.
+ * src/tools/update-copyright: New shell script that calls
+ `update-copyright-year' on all files.
+ * src/tools/no-copyright: Exceptions that should not be handled by
+ `update-copyright'
+
+2015-01-14 Werner Lemberg <wl@gnu.org>
+
+ * docs/CHANGES: Updated, using a description from Behdad.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Add embedded array of segments and edges.
+
+ Avoids multiple mallocs per typical glyphs.
+
+ With this and recent changes to avoid mallocs, the thread-safe
+ stack-based loader is now as fast as the previous model that had one
+ cached singleton.
+
+ * src/autofit/afhints.h (AF_SEGMENTS_EMBEDDED, AF_EDGES_EMBEDDED):
+ New macros.
+ (AF_AxisHintsRec): Add two arrays for segments and edges.
+
+ * src/autofit/afhints.c (af_axis_hints_new_segment): Only allocate
+ data if number of segments exceeds given threshold value.
+ (af_axis_hints_new_edge): Only allocate data if number of edges
+ exceeds given threshold value.
+ (af_glyph_hints_done): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Add embedded arrays for points and contours.
+
+ This avoids at least two malloc calls for typical glyphs.
+
+ * src/autofit/afhints.h (AF_POINTS_EMBEDDED, AF_CONTOURS_EMBEDDED):
+ New macros.
+ (AF_GlyphHintsRec): Add two arrays for contours and points.
+
+ * src/autofit/afhints.c (af_glyph_hints_init, af_glyph_hints_done):
+ Updated.
+ (af_glyph_hints_reload): Only allocate data if number of contours or
+ points exceeds given threshold values.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Allocate hints object on the stack.
+
+ This avoids one malloc per load.
+
+ * src/autofit/afloader.h (AF_LoaderRec): Change type of `hints' to
+ `AF_GlyphHints'.
+ Update prototype.
+
+ * src/autofit/afloader.c (af_loader_init): Use `AF_GlyphHints'
+ parameter instead of `FT_Memory'.
+ (af_loader_done): Directly reset `load_hints'.
+ (af_loader_load_g): Updated.
+
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Use local
+ `hints' object.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Reuse slot glyph loader.
+
+ No need to create a new glyph loader; we can reuse the one from
+ `slot->internal->loader'. It's hard to tell why it was written that
+ way originally, but new code looks sound and correct to me, and
+ avoids lots of allocations.
+
+ * src/autofit/afloader.c (af_loader_init): Change return type to
+ `void'.
+ Don't call `FT_GlyphLoader_New'.
+ (af_loader_reset): Don't call `FT_GlyphLoader_Rewind'.
+ (af_loader_load_g): Update code to use `internal->loader', which
+ doesn't need copying of data.
+
+ * src/autofit/afloader.h (AF_LoaderRec): Remove `gloader' member.
+ Update prototype.
+
+ * src/autofit/afmodule.c (af_autofitter_load_glyph): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Remove (unused) support for composite glyphs.
+
+ We never have to deal with composite glyphs in the autohinter, as
+ those will be loaded into FORMAT_OUTLINE by the recursed
+ `FT_Load_Glyph' function.
+
+ In the rare cases that FT_LOAD_NO_RECURSE is set, it will imply
+ FT_LOAD_NO_SCALE as per `FT_Load_Glyph', which then implies
+ FT_LOAD_NO_HINTING:
+
+ /* resolve load flags dependencies */
+
+ if ( load_flags & FT_LOAD_NO_RECURSE )
+ load_flags |= FT_LOAD_NO_SCALE |
+ FT_LOAD_IGNORE_TRANSFORM;
+
+ if ( load_flags & FT_LOAD_NO_SCALE )
+ {
+ load_flags |= FT_LOAD_NO_HINTING |
+ FT_LOAD_NO_BITMAP;
+
+ load_flags &= ~FT_LOAD_RENDER;
+ }
+
+ and as such the auto-hinter is never called. Thus, the recursion in
+ `af_loader_load_g' never actually happens. So remove the depth
+ counter as well.
+
+ * src/autofit/afloader.c (af_loader_load_g): Remove `depth'
+ parameter.
+ <FT_GLYPH_FORMAT_COMPOSITE>: Remove associated code.
+ (af_loader_load_glyph): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Fix uninitialized memory access.
+
+ Apparently `ras.cProfile' might be uninitialized. This will be the
+ case if `ras.top == ras.cProfile->offset', as can be seen in
+ `End_Profile'. The overshoot code introduced in a change `Fix B/W
+ rasterization of subglyphs with different drop-out modes.' (from
+ 2009-06-18) violated this, accessing `ras.cProfile->flags'
+ unconditionally just before calling `End_Profile' (which then
+ detected that `cProfile' is uninitialized and didn't touch it).
+
+ This was harmless, and was not detected by valgrind before because
+ the objects were allocated on the `raster_pool', which was always
+ initialized. With recent change to allocate raster buffers on the
+ stack, valgrind now reported this invalid access.
+
+ * src/raster/ftraster.c (Convert_Glyph): Don't access an
+ uninitialized `cProfile'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [smooth] Fix uninitialized memory access.
+
+ Looks like `ras.span_y' could always be used without initialization.
+ This was never detected by valgrind before because the library-wide
+ `raster_pool' was used for the worker object and `raster_pool' was
+ originally zero'ed. But subsequent reuses of it were using `span_y'
+ uninitialized. With the recent change to not use `render_pool' and
+ allocate worker and buffer on the stack, valgrind now detects this
+ uninitialized access.
+
+ * src/smooth/ftgrays.c (gray_raster_render): Initialize
+ `ras.span_y'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [base] Don't initialize unused `driver->glyph_loader'.
+
+ * src/base/ftobjs.c (Destroy_Driver): Don't call
+ `FT_GlyphLoader_Done'.
+ (FT_Add_Module): Don't call `FT_GlyphLoader_New'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [base] Don't allocate `library->raster_pool' anymore.
+
+ It's unused after the following commits:
+
+ [raster] Allocate render pool for mono rasterizer on the stack.
+ [raster] Remove 5-level gray AA mode from monochrome rasterizer.
+
+ The value of FT_RENDER_POOL_SIZE still serves the purpose it used to
+ serve, which is, to adjust the pool size. But the pool is now
+ allocated on the stack on demand.
+
+ * src/base/ftobjs.c (FT_New_Library, FT_Done_Library): Implement.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [base] Do not reorder library->renderers upon use.
+
+ Instead of keeping `library->renderers' in a MRU order, just leave
+ it as-is. The MRU machinery wasn't thread-safe.
+
+ With this patch, rasterizing glyphs from different faces from
+ different threads doesn't fail choosing rasterizer
+ (FT_Err_Cannot_Render_Glyph).
+
+ Easiest to see that crash was to add a `printf' (or otherwise let
+ thread yield in FT_Throw with debugging enabled).
+
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c
+ (FT_Outline_Render): Don't call `FT_Set_Renderer'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Allocate render pool for mono rasterizer on the stack.
+
+ Instead of using the `render_pool' member of `FT_Library' that is
+ provided down to the rasterizer, completely ignore that and allocate
+ needed objects on the stack instead.
+
+ With this patch, rasterizing glyphs from different faces from
+ different threads doesn't crash in the monochrome rasterizer.
+
+ * src/raster/ftraster.c (black_TRaster): Remove `buffer',
+ `buffer_size', and `worker' members.
+
+ (ft_black_render): Create `buffer' locally.
+ (ft_black_reset): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [raster] Remove 5-level gray AA mode from monochrome rasterizer.
+
+ It was off by default and couldn't be turned on at runtime. And the
+ smooth rasterizer superceded it over ten years ago. No point in
+ keeping. Comments suggested that it was there for compatibility
+ with FreeType 1.
+
+ 550 lines down.
+
+ * src/raster/ftraster.c (FT_RASTER_OPTION_ANTI_ALIASING,
+ RASTER_GRAY_LINES): Remove macros and all associated code.
+
+ (black_TWorker): Remove `gray_min_x' and `gray_max_x'.
+ (black_TRaster): Remove `grays' and `gray_width'.
+
+ (Vertical_Sweep_Init, Vertical_Sweep_Span, Vertical_Sweep_Drop,
+ ft_black_render): Updated.
+
+ * src/raster/ftrend1.c (ft_raster1_render): Simplify code.
+ (ft_raster5_renderer_class): Removed.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [smooth] Allocate render pool for smooth rasterizer on the stack.
+
+ Instead of using the `render_pool' member of `FT_Library' that is
+ provided down to the rasterizer, completely ignore that and allocate
+ needed objects on the stack instead.
+
+ With this patch, rasterizing glyphs from different faces from
+ different threads doesn't crash in the smooth rasterizer.
+
+ Bugs:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=678397
+ https://bugzilla.redhat.com/show_bug.cgi?id=1004315
+ https://bugzilla.redhat.com/show_bug.cgi?id=1165471
+ https://bugs.freedesktop.org/show_bug.cgi?id=69034
+
+ * src/smooth/ftgrays.c (gray_TRaster): Remove `buffer',
+ `buffer_size', `band_size', and `worker' members.
+
+ (gray_raster_render): Create `buffer', `buffer_size', and
+ `band_size' locally.
+ (gray_raster_reset): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver.
+
+ Previously the code had stipulation for using a per-TT_Size exec
+ context if `size->debug' was true. But there was no way that
+ `size->debug' could *ever* be true. As such, the code was always
+ using the singleton `TT_ExecContext' that was stored in `TT_Driver'.
+ This was, clearly, not threadsafe.
+
+ With this patch, loading glyphs from different faces from different
+ threads doesn't crash in the bytecode loader code.
+
+ * src/truetype/ttobjs.h (TT_SizeRec): Remove `debug' member.
+ (TT_DriverRec): Remove `context' member.
+
+ * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Remove
+ `TT_ExecContext' code related to a global `TT_Driver' object.
+
+ (tt_driver_done): Don't remove `TT_ExecContext' object here but ...
+ (tt_size_done_bytecode): ... here.
+
+ (tt_driver_init): Don't create `TT_ExecContext' object here but ...
+ (tt_size_init_bytecode): ... here, only on demand.
+
+ * src/truetype/ttinterp.c (TT_Run_Context): Remove defunct debug
+ code.
+ (TT_New_Context): Remove `TT_ExecContext' code related to a global
+ `TT_Driver' object.
+
+ * src/truetype/ttinterp.h: Updated.
+
+ * src/truetype/ttgload.c (TT_Hint_Glyph, tt_loader_init): Updated.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ [autofit] Allocate AF_Loader on the stack instead of AF_Module.
+
+ Stop sharing a global `AF_Loader'. Allocate one on the stack during
+ glyph load.
+
+ Right now this results in about 25% slowdown, to be fixed in a
+ following commit.
+
+ With this patch loading glyphs from different faces from different
+ threads doesn't immediately crash in the autohinting loader code.
+
+ Bugs:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1164941
+
+ * src/autofit/afloader.c (af_loader_init): Pass
+ `AF_Loader' and `FT_Memory' instead of `AF_Module' as arguments.
+ (af_loader_reset, af_loader_load_glyph): Also pass `loader' as
+ argument.
+ (af_loader_done): Use `AF_Loader' instead of `AF_Module' as
+ argument.
+
+ * src/autofit/afmodule.c (af_autofitter_init): Don't call
+ `af_loader_init'.
+ (af_autofitter_done): Don't call `af_loader_done'.
+ (af_autofitter_load_glyph): Use a local `AF_Loader' object.
+
+ * src/autofit/afloader.h: Include `afmodule.h'.
+ Update prototypes.
+ Move typedef for `AF_Module' to...
+
+ * src/autofit/afmodule.h: ... this place.
+ No longer include `afloader.h'.
+
+2015-01-14 Behdad Esfahbod <behdad@behdad.org>
+
+ * src/type42/t42objs.h (T42_DriverRec): Remove unused member.
+
+2015-01-12 Werner Lemberg <wl@gnu.org>
+
+ Fix Savannah bug #43976.
+
+ Assure that FreeType's internal include directories are found before
+ `CPPFLAGS' (which might be set by the user in the environment), and
+ `CPPFLAGS' before `CFLAGS'.
+
+ * builds/freetype.mk (FT_CFLAGS): Don't add `INCLUDE_FLAGS'.
+ (FT_COMPILE): Make this a special variable for compiling only the
+ files handled in `freetype.mk'.
+ (.c.$O): Removed, unused.
+
+ * src/*/rules.mk (*_COMPILE): Fix order of include directories.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Prettyfing.
+
+ * src/truetype/ttinterp.c (project, dualproj, fast_project,
+ fast_dualproj): Rename to...
+ (PROJECT, DUALPROJ, FAST_PROJECT, FAST_DUALPROJ): ... this.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify.
+
+ Based on a patch from Behdad.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (Normalize): Remove unused argument.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by
+ expansion.
+
+2015-01-11 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion,
+ adjusting funtion calls where necessary.
+ (FT_UNUSED_ARG): Removed, no longer needed.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ Based on a patch from Behdad.
+
+ * src/truetype/ttinterp.c (DO_*): Expand macros into corresponding
+ `Ins_*' functions.
+ (TT_RunIns): Replace `DO_*' macros with `Ins_*' function calls.
+ (ARRAY_BOUND_ERROR): Remove second definition, which is no longer
+ needed.
+ (Ins_SVTCA, Ins_SPVTCA, Ins_SFVTCA): Replaced with...
+ (Ins_SxyTCA): New function.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH.
+
+ Behdad suggested this code simplification, and nobody objected...
+
+ * include/config/ftoption.h, devel/ftoption.h
+ (TT_CONFIG_OPTION_INTERPRETER_SWITCH): Remove.
+
+ * src/truetype/ttinterp.c [TT_CONFIG_OPTION_INTERPRETER_SWITCH]:
+ Remove related code.
+ (ARRAY_BOUND_ERROR): Use do-while loop.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_,
+ EXEC_ARG): Remove by replacing with expansion.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ Based on a patch from Behdad.
+
+ * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize,
+ SET_SuperRound, ROUND_None, INS_Goto_CodeRange, CUR_Func_move,
+ CUR_Func_move_orig, CUR_Func_round, CUR_Func_cur_ppem,
+ CUR_Func_read_cvt, CUR_Func_write_cvt, CUR_Func_move_cvt,
+ CURRENT_Ratio, INS_SxVTL, COMPUTE_Funcs, COMPUTE_Round,
+ COMPUTE_Point_Displacement, MOVE_Zp2_Point): Remove by replacing
+ with expansion.
+
+ (Cur_Func_project, CUR_Func_dualproj, CUR_fast_project,
+ CUR_fast_dualproj): Replace with macros `project', `dualproj',
+ `fast_project', `fast_dualproj'.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] More macro expansions.
+
+ * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing
+ with expansion.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ [truetype] Remove code for static TrueType interpreter.
+
+ This is a follow-up patch.
+
+ * src/truetype/ttinterp.c, src/truetype/ttinterp.h
+ [TT_CONFIG_OPTION_STATIC_INTERPRETER,
+ TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code.
+
+2015-01-10 Werner Lemberg <wl@gnu.org>
+
+ * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion.
+
+ This starts a series of patches that simplifies the code of the
+ bytecode interpreter.
+
2014-12-30 Werner Lemberg <wl@gnu.org>
* Version 2.5.5 released.
@@ -32,6 +1667,8 @@
* CMakeLists.txt (VERSION_PATCH): Set to 5.
* docs/CHANGES: Updated.
+ * builds/toplevel.mk (dist): Fix typos.
+
2014-12-24 Alexei Podtelezhnikov <apodtele@gmail.com>
[base] Formatting and nanooptimizations.
@@ -5143,7 +6780,7 @@
----------------------------------------------------------------------------
-Copyright 2013-2014 by
+Copyright 2013-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.20 b/freetype/ChangeLog.20
index 8fcc5e70a..6dae58ea7 100644
--- a/freetype/ChangeLog.20
+++ b/freetype/ChangeLog.20
@@ -2597,7 +2597,7 @@
----------------------------------------------------------------------------
-Copyright 2000, 2001, 2002, 2007 by
+Copyright 2000-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.21 b/freetype/ChangeLog.21
index 300a094f2..a6f8be754 100644
--- a/freetype/ChangeLog.21
+++ b/freetype/ChangeLog.21
@@ -9423,7 +9423,7 @@
----------------------------------------------------------------------------
-Copyright 2002, 2003, 2004, 2005, 2007, 2008 by
+Copyright 2002-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.22 b/freetype/ChangeLog.22
index 4144288a5..08c5877e5 100644
--- a/freetype/ChangeLog.22
+++ b/freetype/ChangeLog.22
@@ -2821,7 +2821,7 @@
----------------------------------------------------------------------------
-Copyright 2005, 2006, 2007, 2008 by
+Copyright 2005-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.23 b/freetype/ChangeLog.23
index 1a23848f8..93fd33ce8 100644
--- a/freetype/ChangeLog.23
+++ b/freetype/ChangeLog.23
@@ -7932,7 +7932,7 @@
----------------------------------------------------------------------------
-Copyright 2006, 2007, 2008, 2009, 2010 by
+Copyright 2006-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/ChangeLog.24 b/freetype/ChangeLog.24
index 01eb3b75f..df2119d8e 100644
--- a/freetype/ChangeLog.24
+++ b/freetype/ChangeLog.24
@@ -6344,7 +6344,7 @@
----------------------------------------------------------------------------
-Copyright 2010-2013 by
+Copyright 2010-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/Jamfile b/freetype/Jamfile
index 16e097ed9..61fa01838 100644
--- a/freetype/Jamfile
+++ b/freetype/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 top Jamfile.
#
-# Copyright 2001-2014 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -195,7 +195,7 @@ rule RefDoc
actions RefDoc
{
- python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.5.5 --output=$(DOC_DIR) $(FT2_INCLUDE)/*.h $(FT2_INCLUDE)/config/*.h
+ python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.6 --output=$(DOC_DIR) $(FT2_INCLUDE)/*.h $(FT2_INCLUDE)/config/*.h
}
RefDoc refdoc ;
diff --git a/freetype/Jamrules b/freetype/Jamrules
index d8d1c7e61..91d196645 100644
--- a/freetype/Jamrules
+++ b/freetype/Jamrules
@@ -1,6 +1,6 @@
# FreeType 2 JamRules.
#
-# Copyright 2001, 2002, 2003 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/Makefile b/freetype/Makefile
index c1fa16cee..c807b0bd2 100644
--- a/freetype/Makefile
+++ b/freetype/Makefile
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/README b/freetype/README
index f00a1ab79..ff2074514 100644
--- a/freetype/README
+++ b/freetype/README
@@ -1,5 +1,5 @@
- FreeType 2.5.5
- ==============
+ FreeType 2.6
+ ============
Homepage: http://www.freetype.org
@@ -24,9 +24,9 @@
and download one of the following files.
- freetype-doc-2.5.5.tar.bz2
- freetype-doc-2.5.5.tar.gz
- ftdoc255.zip
+ freetype-doc-2.6.tar.bz2
+ freetype-doc-2.6.tar.gz
+ ftdoc26.zip
To view the documentation online, go to
@@ -70,7 +70,7 @@
----------------------------------------------------------------------
-Copyright 2006-2014 by
+Copyright 2006-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/README.git b/freetype/README.git
index 021c12141..2350e78d6 100644
--- a/freetype/README.git
+++ b/freetype/README.git
@@ -37,7 +37,7 @@ repository.
----------------------------------------------------------------------
-Copyright 2005-2010, 2013 by
+Copyright 2005-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/autogen.sh b/freetype/autogen.sh
index cc0e661ce..9729af42d 100644
--- a/freetype/autogen.sh
+++ b/freetype/autogen.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2005-2010, 2013 by
+# Copyright 2005-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/amiga/README b/freetype/builds/amiga/README
index 85fcc4330..1a68b107c 100644
--- a/freetype/builds/amiga/README
+++ b/freetype/builds/amiga/README
@@ -1,7 +1,7 @@
README for the builds/amiga subdirectory.
-Copyright 2005, 2013 by
+Copyright 2005-2015 by
Werner Lemberg and Detlef Wrkner.
This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/amiga/include/config/ftconfig.h b/freetype/builds/amiga/include/config/ftconfig.h
index a73ace671..790eeec82 100644
--- a/freetype/builds/amiga/include/config/ftconfig.h
+++ b/freetype/builds/amiga/include/config/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific configuration file (specification only). */
/* */
-/* Copyright 2005-2007, 2013 by */
+/* Copyright 2005-2015 by */
/* Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/amiga/include/config/ftmodule.h b/freetype/builds/amiga/include/config/ftmodule.h
index 5873bab74..77a66db47 100644
--- a/freetype/builds/amiga/include/config/ftmodule.h
+++ b/freetype/builds/amiga/include/config/ftmodule.h
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific FreeType module selection. */
/* */
-/* Copyright 2005 by */
+/* Copyright 2005-2015 by */
/* Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/amiga/makefile b/freetype/builds/amiga/makefile
index 8a1e4c61b..bcb45b9ed 100644
--- a/freetype/builds/amiga/makefile
+++ b/freetype/builds/amiga/makefile
@@ -5,7 +5,7 @@
#
-# Copyright 2005-2007, 2009, 2013 by
+# Copyright 2005-2015 by
# Werner Lemberg and Detlef Wrkner.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -96,6 +96,9 @@ ftbitmap.ppc.o: $(FTSRC)/base/ftbitmap.c
ftcid.ppc.o: $(FTSRC)/base/ftcid.c
$(CC) -c $(CFLAGS) -o $@ $<
+ftfntfmt.ppc.o: $(FTSRC)/base/ftfntfmt.c
+ $(CC) -c $(CFLAGS) -o $@ $<
+
ftfstype.ppc.o: $(FTSRC)/base/ftfstype.c
$(CC) -c $(CFLAGS) -o $@ $<
@@ -135,9 +138,6 @@ fttype1.ppc.o: $(FTSRC)/base/fttype1.c
ftwinfnt.ppc.o: $(FTSRC)/base/ftwinfnt.c
$(CC) -c $(CFLAGS) -o $@ $<
-ftxf86.ppc.o: $(FTSRC)/base/ftxf86.c
- $(CC) -c $(CFLAGS) -o $@ $<
-
#
# FreeType2 library autofitting module
#
@@ -269,11 +269,11 @@ gxvalid.ppc.o: $(FTSRC)/gxvalid/gxvalid.c
otvalid.ppc.o: $(FTSRC)/otvalid/otvalid.c
$(CC) -c $(CFLAGS) -o $@ $<
-BASEPPC = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
- ftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o ftgxval.ppc.o \
- ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o ftpatent.ppc.o ftpfr.ppc.o \
- ftstroke.ppc.o ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o \
- ftxf86.ppc.o
+BASEPPC = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
+ ftfntfmt.ppc.oftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
+ ftgxval.ppc.o ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o \
+ ftpatent.ppc.o ftpfr.ppc.o ftstroke.ppc.o ftsynth.ppc.o \
+ fttype1.ppc.o ftwinfnt.ppc.o
DEBUGPPC = ftdebug.ppc.o ftdebugpure.ppc.o
diff --git a/freetype/builds/amiga/makefile.os4 b/freetype/builds/amiga/makefile.os4
index a2e6ffced..481fe5950 100644
--- a/freetype/builds/amiga/makefile.os4
+++ b/freetype/builds/amiga/makefile.os4
@@ -4,7 +4,7 @@
#
-# Copyright 2005-2007, 2009, 2013 by
+# Copyright 2005-2015 by
# Werner Lemberg and Detlef Wrkner.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -99,6 +99,9 @@ ftdebug.ppc.o: FT:src/base/ftdebug.c
ftdebugpure.ppc.o: src/base/ftdebug.c
$(CC) -c $(CFLAGS) -o $@ src/base/ftdebug.c
+ftfntfmt.ppc.o: FT:src/base/ftfntfmt.c
+ $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftfntfmt.c
+
ftfstype.ppc.o: FT:src/base/ftfstype.c
$(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftfstype.c
@@ -138,9 +141,6 @@ fttype1.ppc.o: FT:src/base/fttype1.c
ftwinfnt.ppc.o: FT:src/base/ftwinfnt.c
$(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftwinfnt.c
-ftxf86.ppc.o: FT:src/base/ftxf86.c
- $(CC) -c $(CFLAGS) -o $@ /FT/src/base/ftxf86.c
-
#
# FreeType2 library autofitting module
#
@@ -273,11 +273,11 @@ gxvalid.ppc.o: FT:src/gxvalid/gxvalid.c
otvalid.ppc.o: FT:src/otvalid/otvalid.c
$(CC) -c $(CFLAGS) -o $@ /FT/src/otvalid/otvalid.c
-BASE = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
- ftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o ftgxval.ppc.o \
- ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o ftpatent.ppc.o ftpfr.ppc.o \
- ftstroke.ppc.o ftsynth.ppc.o fttype1.ppc.o ftwinfnt.ppc.o \
- ftxf86.ppc.o
+BASE = ftbase.ppc.o ftbbox.ppc.o ftbdf.ppc.o ftbitmap.ppc.o ftcid.ppc.o \
+ ftfntfmt.ppc.o ftfstype.ppc.o ftgasp.ppc.o ftglyph.ppc.o \
+ ftgxval.ppc.o ftlcdfil.ppc.o ftmm.ppc.o ftotval.ppc.o \
+ ftpatent.ppc.o ftpfr.ppc.o ftstroke.ppc.o ftsynth.ppc.o \
+ fttype1.ppc.o ftwinfnt.ppc.o
DEBUG = ftdebug.ppc.o ftdebugpure.ppc.o
diff --git a/freetype/builds/amiga/smakefile b/freetype/builds/amiga/smakefile
index aee7fb9d4..156beb29f 100644
--- a/freetype/builds/amiga/smakefile
+++ b/freetype/builds/amiga/smakefile
@@ -3,7 +3,7 @@
#
-# Copyright 2005-2007, 2009, 2013 by
+# Copyright 2005-2015 by
# Werner Lemberg and Detlef Wrkner.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -42,9 +42,9 @@
# (and either ftdebug.o or ftdebugpure.o if you enabled FT_DEBUG_LEVEL_ERROR or
# FT_DEBUG_LEVEL_TRACE in include/config/ftoption.h).
-OBJBASE = ftbase.o ftbbox.o ftbdf.o ftbitmap.o ftcid.o ftfstype.o ftgasp.o \
- ftglyph.o ftgxval.o ftlcdfil.o ftmm.o ftotval.o ftpatent.o ftpfr.o \
- ftstroke.o ftsynth.o fttype1.o ftwinfnt.o ftxf86.o
+OBJBASE = ftbase.o ftbbox.o ftbdf.o ftbitmap.o ftcid.o ftfntfmt.o ftfstype.o \
+ ftgasp.o ftglyph.o ftgxval.o ftlcdfil.o ftmm.o ftotval.o \
+ ftpatent.o ftpfr.o ftstroke.o ftsynth.o fttype1.o ftwinfnt.o
OBJSYSTEM = ftsystem.o ftsystempure.o
@@ -133,6 +133,8 @@ ftbitmap.o: $(CORE)base/ftbitmap.c
sc $(SCFLAGS) objname=$@ $<
ftcid.o: $(CORE)base/ftcid.c
sc $(SCFLAGS) objname=$@ $<
+ftfntfmt.o: $(CORE)base/ftfntfmt.c
+ sc $(SCFLAGS) objname=$@ $<
ftfstype.o: $(CORE)base/ftfstype.c
sc $(SCFLAGS) objname=$@ $<
ftgasp.o: $(CORE)base/ftgasp.c
@@ -159,8 +161,6 @@ fttype1.o: $(CORE)base/fttype1.c
sc $(SCFLAGS) objname=$@ $<
ftwinfnt.o: $(CORE)base/ftwinfnt.c
sc $(SCFLAGS) objname=$@ $<
-ftxf86.o: $(CORE)base/ftxf86.c
- sc $(SCFLAGS) objname=$@ $<
#
# freetype library autofitter module
diff --git a/freetype/builds/amiga/src/base/ftdebug.c b/freetype/builds/amiga/src/base/ftdebug.c
index 36cf26800..67981d407 100644
--- a/freetype/builds/amiga/src/base/ftdebug.c
+++ b/freetype/builds/amiga/src/base/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component for amiga (body). */
/* */
-/* Copyright 1996-2002, 2004, 2005, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/amiga/src/base/ftsystem.c b/freetype/builds/amiga/src/base/ftsystem.c
index ac5004c6a..a2fb050c9 100644
--- a/freetype/builds/amiga/src/base/ftsystem.c
+++ b/freetype/builds/amiga/src/base/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Amiga-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2002, 2005-2007, 2010, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Wrkner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/ansi/ansi-def.mk b/freetype/builds/ansi/ansi-def.mk
index 2c5857295..35b9f32fe 100644
--- a/freetype/builds/ansi/ansi-def.mk
+++ b/freetype/builds/ansi/ansi-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/ansi/ansi.mk b/freetype/builds/ansi/ansi.mk
index 32b3bac3e..2816e14fe 100644
--- a/freetype/builds/ansi/ansi.mk
+++ b/freetype/builds/ansi/ansi.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/beos/beos-def.mk b/freetype/builds/beos/beos-def.mk
index 4371a30aa..5ddedc037 100644
--- a/freetype/builds/beos/beos-def.mk
+++ b/freetype/builds/beos/beos-def.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/beos/beos.mk b/freetype/builds/beos/beos.mk
index b5c8bdabe..6c7fca11c 100644
--- a/freetype/builds/beos/beos.mk
+++ b/freetype/builds/beos/beos.mk
@@ -2,7 +2,7 @@
# FreeType 2 configuration rules for a BeOS system
#
-# Copyright 1996-2000, 2002, 2005 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/beos/detect.mk b/freetype/builds/beos/detect.mk
index 24a087886..b23f94ee7 100644
--- a/freetype/builds/beos/detect.mk
+++ b/freetype/builds/beos/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/cmake/iOS.cmake b/freetype/builds/cmake/iOS.cmake
index a41a7acf2..7970f2b10 100755
--- a/freetype/builds/cmake/iOS.cmake
+++ b/freetype/builds/cmake/iOS.cmake
@@ -1,6 +1,6 @@
# iOS.cmake
#
-# Copyright 2014 by
+# Copyright 2014-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# Written by David Wimsey <david@wimsey.us>
diff --git a/freetype/builds/compiler/ansi-cc.mk b/freetype/builds/compiler/ansi-cc.mk
index 3b668e201..c9f66088e 100644
--- a/freetype/builds/compiler/ansi-cc.mk
+++ b/freetype/builds/compiler/ansi-cc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/bcc-dev.mk b/freetype/builds/compiler/bcc-dev.mk
index 42a99b0c0..8ab957e9c 100644
--- a/freetype/builds/compiler/bcc-dev.mk
+++ b/freetype/builds/compiler/bcc-dev.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/bcc.mk b/freetype/builds/compiler/bcc.mk
index 855edadf0..f38384064 100644
--- a/freetype/builds/compiler/bcc.mk
+++ b/freetype/builds/compiler/bcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/emx.mk b/freetype/builds/compiler/emx.mk
index c237005cb..62fe35df7 100644
--- a/freetype/builds/compiler/emx.mk
+++ b/freetype/builds/compiler/emx.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003, 2006 by
+# Copyright 2003-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/gcc-dev.mk b/freetype/builds/compiler/gcc-dev.mk
index c63e1262e..fd789af9e 100644
--- a/freetype/builds/compiler/gcc-dev.mk
+++ b/freetype/builds/compiler/gcc-dev.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2004, 2005, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/gcc.mk b/freetype/builds/compiler/gcc.mk
index f6b7101b3..0970d1c55 100644
--- a/freetype/builds/compiler/gcc.mk
+++ b/freetype/builds/compiler/gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2006, 2009 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/intelc.mk b/freetype/builds/compiler/intelc.mk
index 413ce5bac..19e5962ea 100644
--- a/freetype/builds/compiler/intelc.mk
+++ b/freetype/builds/compiler/intelc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/unix-lcc.mk b/freetype/builds/compiler/unix-lcc.mk
index d79f50846..ebe330654 100644
--- a/freetype/builds/compiler/unix-lcc.mk
+++ b/freetype/builds/compiler/unix-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/visualage.mk b/freetype/builds/compiler/visualage.mk
index c109659bf..db997faa3 100644
--- a/freetype/builds/compiler/visualage.mk
+++ b/freetype/builds/compiler/visualage.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/visualc.mk b/freetype/builds/compiler/visualc.mk
index 2e19ef86a..900c8bea2 100644
--- a/freetype/builds/compiler/visualc.mk
+++ b/freetype/builds/compiler/visualc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2006, 2008 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/watcom.mk b/freetype/builds/compiler/watcom.mk
index 4db1e7fec..f83425e2b 100644
--- a/freetype/builds/compiler/watcom.mk
+++ b/freetype/builds/compiler/watcom.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/compiler/win-lcc.mk b/freetype/builds/compiler/win-lcc.mk
index 5d02d8246..9e4f79df2 100644
--- a/freetype/builds/compiler/win-lcc.mk
+++ b/freetype/builds/compiler/win-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/detect.mk b/freetype/builds/detect.mk
index ff4045d5c..4b789d3ab 100644
--- a/freetype/builds/detect.mk
+++ b/freetype/builds/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2003, 2006, 2008, 2013, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/detect.mk b/freetype/builds/dos/detect.mk
index 3e5e967e4..e49ba98ca 100644
--- a/freetype/builds/dos/detect.mk
+++ b/freetype/builds/dos/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2004, 2006, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/dos-def.mk b/freetype/builds/dos/dos-def.mk
index 950f581a0..ac0be5ebb 100644
--- a/freetype/builds/dos/dos-def.mk
+++ b/freetype/builds/dos/dos-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/dos-emx.mk b/freetype/builds/dos/dos-emx.mk
index 6ea8f6d87..c421674fb 100644
--- a/freetype/builds/dos/dos-emx.mk
+++ b/freetype/builds/dos/dos-emx.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003 by
+# Copyright 2003-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/dos-gcc.mk b/freetype/builds/dos/dos-gcc.mk
index e14255c1f..991fb64ac 100644
--- a/freetype/builds/dos/dos-gcc.mk
+++ b/freetype/builds/dos/dos-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/dos/dos-wat.mk b/freetype/builds/dos/dos-wat.mk
index c763b163c..0c34a0d90 100644
--- a/freetype/builds/dos/dos-wat.mk
+++ b/freetype/builds/dos/dos-wat.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003 by
+# Copyright 2003-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/exports.mk b/freetype/builds/exports.mk
index 96b10db87..687ced7ba 100644
--- a/freetype/builds/exports.mk
+++ b/freetype/builds/exports.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2005, 2006 by
+# Copyright 2005-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/freetype.mk b/freetype/builds/freetype.mk
index 8b2e2eace..5ea13f058 100644
--- a/freetype/builds/freetype.mk
+++ b/freetype/builds/freetype.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2006, 2008, 2013, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -155,15 +155,13 @@ ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),)
FTOPTION_FLAG := $DFT_CONFIG_OPTIONS_H="<ftoption.h>"
endif
-# Note that a build with the `configure' script uses $(CFLAGS) only.
+# `CPPFLAGS' might be specified by the user in the environment.
#
FT_CFLAGS = $(CPPFLAGS) \
- $(INCLUDE_FLAGS) \
$(CFLAGS) \
$DFT2_BUILD_LIBRARY \
$DFT_CONFIG_MODULES_H="<ftmodule.h>" \
$(FTOPTION_FLAG)
-FT_COMPILE = $(CC) $(ANSIFLAGS) $(FT_CFLAGS)
# Include the `exports' rules file.
@@ -195,6 +193,8 @@ DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h)
FREETYPE_H := $(PUBLIC_H) $(INTERNAL_H) $(CONFIG_H) $(DEVEL_H)
+FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS)
+
# ftsystem component
#
FTSYS_SRC ?= $(BASE_DIR)/ftsystem.c
@@ -270,32 +270,6 @@ objects: $(OBJECTS_LIST)
library: $(PROJECT_LIBRARY)
-.c.$O:
- $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
-
-
-ifneq ($(findstring refdoc,$(MAKECMDGOALS)),)
- # poor man's `sed' emulation with make's built-in string functions
- work := $(strip $(shell $(CAT) $(PUBLIC_DIR)/freetype.h))
- work := $(subst |,x,$(work))
- work := $(subst $(space),|,$(work))
- work := $(subst \#define|FREETYPE_MAJOR|,$(space),$(work))
- work := $(word 2,$(work))
- major := $(subst |,$(space),$(work))
- major := $(firstword $(major))
-
- work := $(subst \#define|FREETYPE_MINOR|,$(space),$(work))
- work := $(word 2,$(work))
- minor := $(subst |,$(space),$(work))
- minor := $(firstword $(minor))
-
- work := $(subst \#define|FREETYPE_PATCH|,$(space),$(work))
- work := $(word 2,$(work))
- patch := $(subst |,$(space),$(work))
- patch := $(firstword $(patch))
-
- version := $(major).$(minor).$(patch)
-endif
# Option `-B' disables generation of .pyc files (available since python 2.6)
#
diff --git a/freetype/builds/link_dos.mk b/freetype/builds/link_dos.mk
index c37ac7e52..694845b9e 100644
--- a/freetype/builds/link_dos.mk
+++ b/freetype/builds/link_dos.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/link_std.mk b/freetype/builds/link_std.mk
index 0bd2163bb..886b2e6b3 100644
--- a/freetype/builds/link_std.mk
+++ b/freetype/builds/link_std.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/mac/FreeType.m68k_cfm.make.txt b/freetype/builds/mac/FreeType.m68k_cfm.make.txt
index 425f9f9ce..c0a55f510 100644
--- a/freetype/builds/mac/FreeType.m68k_cfm.make.txt
+++ b/freetype/builds/mac/FreeType.m68k_cfm.make.txt
@@ -38,6 +38,7 @@ SrcFiles = \xB6
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
+ :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -50,7 +51,6 @@ SrcFiles = \xB6
:src:base:ftsystem.c \xB6
:src:base:fttype1.c \xB6
:src:base:ftwinfnt.c \xB6
- :src:base:ftxf86.c \xB6
:src:cache:ftcache.c \xB6
:src:bdf:bdf.c \xB6
:src:cff:cff.c \xB6
@@ -83,6 +83,7 @@ ObjFiles-68K = \xB6
"{ObjDir}ftbdf.c.o" \xB6
"{ObjDir}ftbitmap.c.o" \xB6
"{ObjDir}ftdebug.c.o" \xB6
+ "{ObjDir}ftfntfmt.c.o" \xB6
"{ObjDir}ftfstype.c.o" \xB6
"{ObjDir}ftglyph.c.o" \xB6
"{ObjDir}ftgxval.c.o" \xB6
@@ -95,7 +96,6 @@ ObjFiles-68K = \xB6
"{ObjDir}ftsystem.c.o" \xB6
"{ObjDir}fttype1.c.o" \xB6
"{ObjDir}ftwinfnt.c.o" \xB6
- "{ObjDir}ftxf86.c.o" \xB6
"{ObjDir}ftcache.c.o" \xB6
"{ObjDir}bdf.c.o" \xB6
"{ObjDir}cff.c.o" \xB6
@@ -161,6 +161,7 @@ FreeType.m68k_cfm.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5
"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftfntfmt.c.o" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.o" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
@@ -173,7 +174,6 @@ FreeType.m68k_cfm.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5
"{ObjDir}ftsystem.c.o" \xC4 :src:base:ftsystem.c
"{ObjDir}fttype1.c.o" \xC4 :src:base:fttype1.c
"{ObjDir}ftwinfnt.c.o" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftxf86.c.o" \xC4 :src:base:ftxf86.c
"{ObjDir}ftcache.c.o" \xC4 :src:cache:ftcache.c
"{ObjDir}bdf.c.o" \xC4 :src:bdf:bdf.c
"{ObjDir}cff.c.o" \xC4 :src:cff:cff.c
diff --git a/freetype/builds/mac/FreeType.m68k_far.make.txt b/freetype/builds/mac/FreeType.m68k_far.make.txt
index ebf5a1b56..e9b7f6f5f 100644
--- a/freetype/builds/mac/FreeType.m68k_far.make.txt
+++ b/freetype/builds/mac/FreeType.m68k_far.make.txt
@@ -37,6 +37,7 @@ SrcFiles = \xB6
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
+ :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -49,7 +50,6 @@ SrcFiles = \xB6
:src:base:ftsystem.c \xB6
:src:base:fttype1.c \xB6
:src:base:ftwinfnt.c \xB6
- :src:base:ftxf86.c \xB6
:src:cache:ftcache.c \xB6
:src:bdf:bdf.c \xB6
:src:cff:cff.c \xB6
@@ -82,6 +82,7 @@ ObjFiles-68K = \xB6
"{ObjDir}ftbdf.c.o" \xB6
"{ObjDir}ftbitmap.c.o" \xB6
"{ObjDir}ftdebug.c.o" \xB6
+ "{ObjDir}ftfntfmt.c.o" \xB6
"{ObjDir}ftfstype.c.o" \xB6
"{ObjDir}ftglyph.c.o" \xB6
"{ObjDir}ftgxval.c.o" \xB6
@@ -94,7 +95,6 @@ ObjFiles-68K = \xB6
"{ObjDir}ftsystem.c.o" \xB6
"{ObjDir}fttype1.c.o" \xB6
"{ObjDir}ftwinfnt.c.o" \xB6
- "{ObjDir}ftxf86.c.o" \xB6
"{ObjDir}ftcache.c.o" \xB6
"{ObjDir}bdf.c.o" \xB6
"{ObjDir}cff.c.o" \xB6
@@ -160,6 +160,7 @@ FreeType.m68k_far.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5
"{ObjDir}ftbdf.c.o" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.o" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.o" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftfntfmt.c.o" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.o" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.o" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.o" \xC4 :src:base:ftgxval.c
@@ -172,7 +173,6 @@ FreeType.m68k_far.o \xC4\xC4 {ObjFiles-68K} {LibFiles-68K} {\xA5MondoBuild\xA5
"{ObjDir}ftsystem.c.o" \xC4 :src:base:ftsystem.c
"{ObjDir}fttype1.c.o" \xC4 :src:base:fttype1.c
"{ObjDir}ftwinfnt.c.o" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftxf86.c.o" \xC4 :src:base:ftxf86.c
"{ObjDir}ftcache.c.o" \xC4 :src:cache:ftcache.c
"{ObjDir}bdf.c.o" \xC4 :src:bdf:bdf.c
"{ObjDir}cff.c.o" \xC4 :src:cff:cff.c
diff --git a/freetype/builds/mac/FreeType.ppc_carbon.make.txt b/freetype/builds/mac/FreeType.ppc_carbon.make.txt
index 2926413f3..9eb1dac4e 100644
--- a/freetype/builds/mac/FreeType.ppc_carbon.make.txt
+++ b/freetype/builds/mac/FreeType.ppc_carbon.make.txt
@@ -38,6 +38,7 @@ SrcFiles = \xB6
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
+ :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -50,7 +51,6 @@ SrcFiles = \xB6
:src:base:ftsystem.c \xB6
:src:base:fttype1.c \xB6
:src:base:ftwinfnt.c \xB6
- :src:base:ftxf86.c \xB6
:src:cache:ftcache.c \xB6
:src:bdf:bdf.c \xB6
:src:cff:cff.c \xB6
@@ -83,6 +83,7 @@ ObjFiles-PPC = \xB6
"{ObjDir}ftbdf.c.x" \xB6
"{ObjDir}ftbitmap.c.x" \xB6
"{ObjDir}ftdebug.c.x" \xB6
+ "{ObjDir}ftfntfmt.c.x" \xB6
"{ObjDir}ftfstype.c.x" \xB6
"{ObjDir}ftglyph.c.x" \xB6
"{ObjDir}ftgxval.c.x" \xB6
@@ -95,7 +96,6 @@ ObjFiles-PPC = \xB6
"{ObjDir}ftsystem.c.x" \xB6
"{ObjDir}fttype1.c.x" \xB6
"{ObjDir}ftwinfnt.c.x" \xB6
- "{ObjDir}ftxf86.c.x" \xB6
"{ObjDir}ftcache.c.x" \xB6
"{ObjDir}bdf.c.x" \xB6
"{ObjDir}cff.c.x" \xB6
@@ -164,6 +164,7 @@ FreeType.ppc_carbon.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\x
"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftfntfmt.c.x" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.x" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
@@ -176,7 +177,6 @@ FreeType.ppc_carbon.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\x
"{ObjDir}ftsystem.c.x" \xC4 :src:base:ftsystem.c
"{ObjDir}fttype1.c.x" \xC4 :src:base:fttype1.c
"{ObjDir}ftwinfnt.c.x" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftxf86.c.x" \xC4 :src:base:ftxf86.c
"{ObjDir}ftcache.c.x" \xC4 :src:cache:ftcache.c
"{ObjDir}bdf.c.x" \xC4 :src:bdf:bdf.c
"{ObjDir}cff.c.x" \xC4 :src:cff:cff.c
diff --git a/freetype/builds/mac/FreeType.ppc_classic.make.txt b/freetype/builds/mac/FreeType.ppc_classic.make.txt
index 377de9ab9..0627eeaa9 100644
--- a/freetype/builds/mac/FreeType.ppc_classic.make.txt
+++ b/freetype/builds/mac/FreeType.ppc_classic.make.txt
@@ -38,6 +38,7 @@ SrcFiles = \xB6
:src:base:ftbdf.c \xB6
:src:base:ftbitmap.c \xB6
:src:base:ftdebug.c \xB6
+ :src:base:ftfntfmt.c \xB6
:src:base:ftfstype.c \xB6
:src:base:ftglyph.c \xB6
:src:base:ftgxval.c \xB6
@@ -50,7 +51,6 @@ SrcFiles = \xB6
:src:base:ftsystem.c \xB6
:src:base:fttype1.c \xB6
:src:base:ftwinfnt.c \xB6
- :src:base:ftxf86.c \xB6
:src:cache:ftcache.c \xB6
:src:bdf:bdf.c \xB6
:src:cff:cff.c \xB6
@@ -83,6 +83,7 @@ ObjFiles-PPC = \xB6
"{ObjDir}ftbdf.c.x" \xB6
"{ObjDir}ftbitmap.c.x" \xB6
"{ObjDir}ftdebug.c.x" \xB6
+ "{ObjDir}ftfntfmt.c.x" \xB6
"{ObjDir}ftfstype.c.x" \xB6
"{ObjDir}ftglyph.c.x" \xB6
"{ObjDir}ftgxval.c.x" \xB6
@@ -95,7 +96,6 @@ ObjFiles-PPC = \xB6
"{ObjDir}ftsystem.c.x" \xB6
"{ObjDir}fttype1.c.x" \xB6
"{ObjDir}ftwinfnt.c.x" \xB6
- "{ObjDir}ftxf86.c.x" \xB6
"{ObjDir}ftcache.c.x" \xB6
"{ObjDir}bdf.c.x" \xB6
"{ObjDir}cff.c.x" \xB6
@@ -164,6 +164,7 @@ FreeType.ppc_classic.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\
"{ObjDir}ftbdf.c.x" \xC4 :src:base:ftbdf.c
"{ObjDir}ftbitmap.c.x" \xC4 :src:base:ftbitmap.c
"{ObjDir}ftdebug.c.x" \xC4 :src:base:ftdebug.c
+"{ObjDir}ftfntfmt.c.x" \xC4 :src:base:ftfntfmt.c
"{ObjDir}ftfstype.c.x" \xC4 :src:base:ftfstype.c
"{ObjDir}ftglyph.c.x" \xC4 :src:base:ftglyph.c
"{ObjDir}ftgxval.c.x" \xC4 :src:base:ftgxval.c
@@ -176,7 +177,6 @@ FreeType.ppc_classic.o \xC4\xC4 {ObjFiles-PPC} {LibFiles-PPC} {\xA5MondoBuild\
"{ObjDir}ftsystem.c.x" \xC4 :src:base:ftsystem.c
"{ObjDir}fttype1.c.x" \xC4 :src:base:fttype1.c
"{ObjDir}ftwinfnt.c.x" \xC4 :src:base:ftwinfnt.c
-"{ObjDir}ftxf86.c.x" \xC4 :src:base:ftxf86.c
"{ObjDir}ftcache.c.x" \xC4 :src:cache:ftcache.c
"{ObjDir}bdf.c.x" \xC4 :src:bdf:bdf.c
"{ObjDir}cff.c.x" \xC4 :src:cff:cff.c
diff --git a/freetype/builds/mac/ftmac.c b/freetype/builds/mac/ftmac.c
index 8e88b9abe..59bcfeed1 100644
--- a/freetype/builds/mac/ftmac.c
+++ b/freetype/builds/mac/ftmac.c
@@ -5,7 +5,7 @@
/* Mac FOND support. Written by just@letterror.com. */
/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
/* */
-/* Copyright 1996-2008, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/modules.mk b/freetype/builds/modules.mk
index 3c1b083dd..0b8b0c1ff 100644
--- a/freetype/builds/modules.mk
+++ b/freetype/builds/modules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006, 2008, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/os2/detect.mk b/freetype/builds/os2/detect.mk
index 47a40a2f8..fde932743 100644
--- a/freetype/builds/os2/detect.mk
+++ b/freetype/builds/os2/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/os2/os2-def.mk b/freetype/builds/os2/os2-def.mk
index 01cda9285..691036f1d 100644
--- a/freetype/builds/os2/os2-def.mk
+++ b/freetype/builds/os2/os2-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/os2/os2-dev.mk b/freetype/builds/os2/os2-dev.mk
index 83da8dea3..eacf58f8a 100644
--- a/freetype/builds/os2/os2-dev.mk
+++ b/freetype/builds/os2/os2-dev.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/os2/os2-gcc.mk b/freetype/builds/os2/os2-gcc.mk
index 446073e4f..8390a36fe 100644
--- a/freetype/builds/os2/os2-gcc.mk
+++ b/freetype/builds/os2/os2-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/symbian/bld.inf b/freetype/builds/symbian/bld.inf
index bc8c1609c..d3637f238 100644
--- a/freetype/builds/symbian/bld.inf
+++ b/freetype/builds/symbian/bld.inf
@@ -2,7 +2,7 @@
// FreeType 2 project for the symbian platform
//
-// Copyright 2008, 2009, 2013 by
+// Copyright 2008-2015 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used, modified,
@@ -32,6 +32,7 @@ PRJ_EXPORTS
../../include/ftcid.h ftcid.h
../../include/fterrdef.h fterrdef.h
../../include/fterrors.h fterrors.h
+../../include/ftfntfmt.h ftfntfmt.h
../../include/ftgasp.h ftgasp.h
../../include/ftglyph.h ftglyph.h
../../include/ftgxval.h ftgxval.h
@@ -58,7 +59,6 @@ PRJ_EXPORTS
../../include/fttrigon.h fttrigon.h
../../include/fttypes.h fttypes.h
../../include/ftwinfnt.h ftwinfnt.h
-../../include/ftxf86.h ftxf86.h
../../include/t1tables.h t1tables.h
../../include/ttnameid.h ttnameid.h
../../include/tttables.h tttables.h
diff --git a/freetype/builds/symbian/freetype.mmp b/freetype/builds/symbian/freetype.mmp
index cb0008c44..b7691f07f 100644
--- a/freetype/builds/symbian/freetype.mmp
+++ b/freetype/builds/symbian/freetype.mmp
@@ -2,7 +2,7 @@
// FreeType 2 makefile for the symbian platform
//
-// Copyright 2008, 2009 by
+// Copyright 2008-2015 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used, modified,
@@ -28,6 +28,7 @@ source ftbbox.c
source ftbdf.c
source ftbitmap.c
source ftcid.c
+source ftfntfmt.c
source ftfstype.c
source ftgasp.c
source ftglyph.c
diff --git a/freetype/builds/toplevel.mk b/freetype/builds/toplevel.mk
index 16d4be837..9fe364db5 100644
--- a/freetype/builds/toplevel.mk
+++ b/freetype/builds/toplevel.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2001, 2003, 2006, 2008-2010, 2012-2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -169,23 +169,41 @@ modules:
include $(TOP_DIR)/builds/modules.mk
+# get FreeType version string, using a
+# poor man's `sed' emulation with make's built-in string functions
+#
+work := $(strip $(shell $(CAT) $(TOP_DIR)/include/freetype.h))
+work := $(subst |,x,$(work))
+work := $(subst $(space),|,$(work))
+work := $(subst \#define|FREETYPE_MAJOR|,$(space),$(work))
+work := $(word 2,$(work))
+major := $(subst |,$(space),$(work))
+major := $(firstword $(major))
+
+work := $(subst \#define|FREETYPE_MINOR|,$(space),$(work))
+work := $(word 2,$(work))
+minor := $(subst |,$(space),$(work))
+minor := $(firstword $(minor))
+
+work := $(subst \#define|FREETYPE_PATCH|,$(space),$(work))
+work := $(word 2,$(work))
+patch := $(subst |,$(space),$(work))
+patch := $(firstword $(patch))
+
+ifneq ($(findstring x0x,x$(patch)x),)
+ version := $(major).$(minor)
+ winversion := $(major)$(minor)
+else
+ version := $(major).$(minor).$(patch)
+ winversion := $(major)$(minor)$(patch)
+endif
+
+
# This target builds the tarballs.
#
# Not to be run by a normal user -- there are no attempts to make it
# generic.
-# we check for `dist', not `distclean'
-ifneq ($(findstring distx,$(MAKECMDGOALS)x),)
- FT_H := include/freetype.h
-
- major := $(shell sed -n 's/.*FREETYPE_MAJOR[^0-9]*\([0-9]\+\)/\1/p' < $(FT_H))
- minor := $(shell sed -n 's/.*FREETYPE_MINOR[^0-9]*\([0-9]\+\)/\1/p' < $(FT_H))
- patch := $(shell sed -n 's/.*FREETYPE_PATCH[^0-9]*\([0-9]\+\)/\1/p' < $(FT_H))
-
- version := $(major).$(minor).$(patch)
- winversion := $(major)$(minor)$(patch)
-endif
-
dist:
-rm -rf tmp
rm -f freetype-$(version).tar.gz
diff --git a/freetype/builds/unix/aclocal.m4 b/freetype/builds/unix/aclocal.m4
index 2c0316495..0a8c94d38 100644
--- a/freetype/builds/unix/aclocal.m4
+++ b/freetype/builds/unix/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -14,7 +14,7 @@
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
-# Copyright (C) 1996-2001, 2003-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
@@ -73,7 +73,7 @@ esac
# LT_INIT([OPTIONS])
# ------------------
AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
AC_BEFORE([$0], [LT_LANG])dnl
AC_BEFORE([$0], [LT_OUTPUT])dnl
@@ -117,19 +117,36 @@ dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in @S|@*""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
# _LT_CC_BASENAME(CC)
# -------------------
-# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
m4_defun([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
- case $cc_temp in
- compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
- distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
])
@@ -183,6 +200,7 @@ m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
_LT_CONFIG_LIBTOOL_INIT([
# See if we are running on zsh, and set the options that allow our
@@ -727,6 +745,9 @@ _LT_CONFIG_SAVE_COMMANDS([
_LT_COPYING
_LT_LIBTOOL_TAGS
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
# ### BEGIN LIBTOOL CONFIG
_LT_LIBTOOL_CONFIG_VARS
_LT_LIBTOOL_TAG_VARS
@@ -734,6 +755,17 @@ _LT_LIBTOOL_TAG_VARS
_LT_EOF
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
case $host_os in
aix3*)
cat <<\_LT_EOF >> "$cfgfile"
@@ -1048,7 +1080,7 @@ _LT_EOF
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]]*)
+ 10.[[012]][[,.]]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
10.*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
@@ -1845,7 +1877,7 @@ else
# endif
#endif
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
correspondingly for the symbols needed. */
#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
int fnord () __attribute__((visibility("default")));
@@ -2207,6 +2239,47 @@ _LT_DECL([], [striplib], [1])
])# _LT_CMD_STRIPLIB
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x@S|@2 in
+ x)
+ ;;
+ *:)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+ ;;
+ x:*)
+ eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+ ;;
+ *)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
# _LT_SYS_DYNAMIC_LINKER([TAG])
# -----------------------------
# PORTME Fill in your ld.so characteristics
@@ -2217,6 +2290,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_OBJDUMP])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
AC_MSG_CHECKING([dynamic linker characteristics])
m4_if([$1],
[], [
@@ -2311,6 +2385,9 @@ hardcode_into_libs=no
# flags to be left without arguments
need_version=unknown
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
case $host_os in
aix3*)
version_type=linux # correct to gnu/linux during the next big refactor
@@ -2347,20 +2424,70 @@ aix[[4-9]]*)
fi
;;
esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
# AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
# soname into executable. Probably we can add versioning support to
# collect2, so additional links can be useful in future.
- if test yes = "$aix_use_runtimelinking"; then
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
# If using run time linking (on AIX 4.2 or later) use lib<name>.so
# instead of lib<name>.a to let people know that these are not
# typical AIX shared libraries.
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- else
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a[(]lib.so.V[)]'
# We preserve .a as extension for shared libraries through AIX4.2
# and later when we are not doing run time linking.
library_names_spec='$libname$release.a $libname.a'
soname_spec='$libname$release$shared_ext$major'
- fi
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
shlibpath_var=LIBPATH
fi
;;
@@ -2548,7 +2675,8 @@ freebsd* | dragonfly*)
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
need_version=no
need_lib_prefix=no
;;
@@ -2608,10 +2736,11 @@ hpux9* | hpux10* | hpux11*)
soname_spec='$libname$release$shared_ext$major'
if test 32 = "$HPUX_IA64_MODE"; then
sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
else
sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
;;
hppa*64*)
shrext_cmds='.sl'
@@ -2744,7 +2873,12 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
# before this can be enabled.
hardcode_into_libs=yes
- # Append ld.so.conf contents to the search path
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
if test -f /etc/ld.so.conf; then
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -2813,11 +2947,32 @@ openbsd* | bitrig*)
os2*)
libname_spec='$name'
+ version_type=windows
shrext_cmds=.dll
+ need_version=no
need_lib_prefix=no
- library_names_spec='$libname$shared_ext $libname.a'
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
;;
osf3* | osf4* | osf5*)
@@ -2893,7 +3048,7 @@ sysv4*MP*)
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
+ version_type=sco
need_lib_prefix=no
need_version=no
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
@@ -2947,10 +3102,20 @@ fi
if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
fi
+
if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
fi
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
_LT_DECL([], [variables_saved_for_relink], [1],
[Variables whose values should be saved in libtool wrapper scripts and
restored at link time])
@@ -2983,8 +3148,10 @@ _LT_DECL([], [hardcode_into_libs], [0],
[Whether we should hardcode library paths into libraries])
_LT_DECL([], [sys_lib_search_path_spec], [2],
[Compile-time system search path for libraries])
-_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
- [Run-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+ [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+ [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
])# _LT_SYS_DYNAMIC_LINKER
@@ -3222,6 +3389,43 @@ _LT_TAGDECL([], [reload_cmds], [2])dnl
])# _LT_CMD_RELOAD
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+ [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
# _LT_CHECK_MAGIC_METHOD
# ----------------------
# how to check for library dependencies
@@ -3420,6 +3624,9 @@ sysv4 | sysv4.3*)
tpf*)
lt_cv_deplibs_check_method=pass_all
;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
])
@@ -3477,8 +3684,13 @@ else
# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
# Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
@@ -4023,6 +4235,11 @@ m4_if([$1], [CXX], [
# (--disable-auto-import) libraries
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
;;
darwin* | rhapsody*)
# PIC is the default on this platform
@@ -4342,6 +4559,11 @@ m4_if([$1], [CXX], [
# (--disable-auto-import) libraries
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
;;
darwin* | rhapsody*)
@@ -4439,6 +4661,11 @@ m4_if([$1], [CXX], [
# built for inclusion in a dll (and should export symbols for example).
m4_if([$1], [GCJ], [],
[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
;;
hpux9* | hpux10* | hpux11*)
@@ -4688,13 +4915,17 @@ m4_if([$1], [CXX], [
case $host_os in
aix[[4-9]]*)
# If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- # Also, AIX nm treats weak defined symbols like other global defined
- # symbols, whereas GNU nm marks them as "W".
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@@ -4905,6 +5136,34 @@ _LT_EOF
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
interix[[3-9]]*)
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4978,6 +5237,9 @@ _LT_EOF
fi
case $cc_basename in
+ tcc*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+ ;;
xlf* | bgf* | bgxlf* | mpixlf*)
# IBM XL Fortran 10.1 on PPC cannot create shared libs itself
_LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
@@ -5107,19 +5369,35 @@ _LT_EOF
no_entry_flag=
else
# If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- # Also, AIX nm treats weak defined symbols like other global
- # defined symbols, whereas GNU nm marks them as "W".
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
for ld_flag in $LDFLAGS; do
if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
@@ -5127,6 +5405,13 @@ _LT_EOF
break
fi
done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
;;
esac
@@ -5146,6 +5431,14 @@ _LT_EOF
_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
if test yes = "$GCC"; then
case $host_os in aix4.[[012]]|aix4.[[012]].*)
@@ -5173,6 +5466,11 @@ _LT_EOF
if test yes = "$aix_use_runtimelinking"; then
shared_flag="$shared_flag "'$wl-G'
fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
else
# not using gcc
if test ia64 = "$host_cpu"; then
@@ -5185,6 +5483,8 @@ _LT_EOF
else
shared_flag='$wl-bM:SRE'
fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
fi
fi
@@ -5192,7 +5492,7 @@ _LT_EOF
# It seems that -bexpall does not export symbols beginning with
# underscore (_), so it is better to generate a list of symbols to export.
_LT_TAGVAR(always_export_symbols, $1)=yes
- if test yes = "$aix_use_runtimelinking"; then
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
# Warning - without using the other runtime loading flags (-brtl),
# -berok will link without error, but may produce a broken library.
_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
@@ -5223,8 +5523,20 @@ _LT_EOF
_LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
fi
fi
;;
@@ -5478,6 +5790,16 @@ _LT_EOF
_LT_TAGVAR(link_all_deplibs, $1)=yes
;;
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
@@ -5523,8 +5845,28 @@ _LT_EOF
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
_LT_TAGVAR(hardcode_minus_L, $1)=yes
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
- _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
;;
osf3*)
@@ -5915,8 +6257,12 @@ if test -n "$compiler"; then
;;
aix[[4-9]]*)
- if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
- test yes = "$enable_shared" && enable_static=no
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
fi
;;
esac
@@ -6104,7 +6450,19 @@ if test yes != "$_lt_caught_CXX_error"; then
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
for ld_flag in $LDFLAGS; do
case $ld_flag in
@@ -6114,6 +6472,13 @@ if test yes != "$_lt_caught_CXX_error"; then
;;
esac
done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
;;
esac
@@ -6133,6 +6498,14 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
_LT_TAGVAR(link_all_deplibs, $1)=yes
_LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
if test yes = "$GXX"; then
case $host_os in aix4.[[012]]|aix4.[[012]].*)
@@ -6159,6 +6532,11 @@ if test yes != "$_lt_caught_CXX_error"; then
if test yes = "$aix_use_runtimelinking"; then
shared_flag=$shared_flag' $wl-G'
fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
else
# not using gcc
if test ia64 = "$host_cpu"; then
@@ -6171,6 +6549,8 @@ if test yes != "$_lt_caught_CXX_error"; then
else
shared_flag='$wl-bM:SRE'
fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
fi
fi
@@ -6179,10 +6559,11 @@ if test yes != "$_lt_caught_CXX_error"; then
# underscore (_), so it is better to generate a list of symbols to
# export.
_LT_TAGVAR(always_export_symbols, $1)=yes
- if test yes = "$aix_use_runtimelinking"; then
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
# Warning - without using the other runtime loading flags (-brtl),
# -berok will link without error, but may produce a broken library.
- _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # The "-G" linker flag allows undefined symbols.
+ _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
# Determine the default libpath from the value encoded in an empty
# executable.
_LT_SYS_MODULE_PATH_AIX([$1])
@@ -6211,9 +6592,21 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
fi
_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
- # This is similar to how AIX traditionally builds its shared
- # libraries.
- _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared
+ # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
fi
fi
;;
@@ -6313,6 +6706,34 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_DARWIN_LINKER_FEATURES($1)
;;
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
dgux*)
case $cc_basename in
ec++*)
@@ -7026,6 +7447,7 @@ func_stripname_cnf ()
} # func_stripname_cnf
])# _LT_FUNC_STRIPNAME_CNF
+
# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
# ---------------------------------
# Figure out "hidden" library dependencies from verbose
@@ -7204,51 +7626,6 @@ interix[[3-9]]*)
_LT_TAGVAR(postdep_objects,$1)=
_LT_TAGVAR(postdeps,$1)=
;;
-
-linux*)
- case `$CC -V 2>&1 | sed 5q` in
- *Sun\ C*)
- # Sun C++ 5.9
-
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- if test yes != "$solaris_use_stlport4"; then
- _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
-
-solaris*)
- case $cc_basename in
- CC* | sunCC*)
- # The more standards-conforming stlport4 library is
- # incompatible with the Cstd library. Avoid specifying
- # it if it's in CXXFLAGS. Ignore libCrun as
- # -library=stlport4 depends on it.
- case " $CXX $CXXFLAGS " in
- *" -library=stlport4 "*)
- solaris_use_stlport4=yes
- ;;
- esac
-
- # Adding this requires a known-good setup of shared libraries for
- # Sun compiler versions before 5.6, else PIC objects from an old
- # archive will be linked into the output, leading to subtle bugs.
- if test yes != "$solaris_use_stlport4"; then
- _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
- fi
- ;;
- esac
- ;;
esac
])
@@ -7366,8 +7743,12 @@ if test yes != "$_lt_disable_F77"; then
fi
;;
aix[[4-9]]*)
- if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
- test yes = "$enable_shared" && enable_static=no
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
fi
;;
esac
@@ -7500,8 +7881,12 @@ if test yes != "$_lt_disable_FC"; then
fi
;;
aix[[4-9]]*)
- if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
- test yes = "$enable_shared" && enable_static=no
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
fi
;;
esac
@@ -7977,7 +8362,7 @@ _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
# Helper functions for option handling. -*- Autoconf -*-
#
-# Copyright (C) 2004-2005, 2007-2009, 2011-2014 Free Software
+# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
# Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
@@ -8059,6 +8444,8 @@ m4_if([$1],[LT_INIT],[
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
[_LT_ENABLE_FAST_INSTALL])
+ _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+ [_LT_WITH_AIX_SONAME([aix])])
])
])# _LT_SET_OPTIONS
@@ -8293,6 +8680,59 @@ dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+ AC_MSG_CHECKING([which variant of shared library versioning to provide])
+ AC_ARG_WITH([aix-soname],
+ [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+ [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+ [case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname],
+ [AC_CACHE_VAL([lt_cv_with_aix_soname],
+ [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+ with_aix_soname=$lt_cv_with_aix_soname])
+ AC_MSG_RESULT([$with_aix_soname])
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+ [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
# _LT_WITH_PIC([MODE])
# --------------------
# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
@@ -8354,7 +8794,7 @@ LT_OPTION_DEFINE([LTDL_INIT], [convenience],
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007-2008, 2011-2014 Free Software
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
# Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
@@ -8479,7 +8919,7 @@ m4_define([lt_dict_filter],
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
-# Copyright (C) 2004, 2011-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
@@ -8488,22 +8928,22 @@ m4_define([lt_dict_filter],
# @configure_input@
-# serial 4092 ltversion.m4
+# serial 4179 ltversion.m4
# This file is part of GNU Libtool
-m4_define([LT_PACKAGE_VERSION], [2.4.2.444.28-053d])
-m4_define([LT_PACKAGE_REVISION], [2.4.2.444.28])
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.2.444.28-053d'
-macro_revision='2.4.2.444.28'
+[macro_version='2.4.6'
+macro_revision='2.4.6'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007, 2009, 2011-2014 Free Software
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
# Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
diff --git a/freetype/builds/unix/config.guess b/freetype/builds/unix/config.guess
index 6c32c8645..f7eb141e7 100644
--- a/freetype/builds/unix/config.guess
+++ b/freetype/builds/unix/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-11-04'
+timestamp='2015-03-04'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -213,7 +227,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -933,6 +947,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
diff --git a/freetype/builds/unix/config.sub b/freetype/builds/unix/config.sub
index 7ffe37378..8f1229c6f 100644
--- a/freetype/builds/unix/config.sub
+++ b/freetype/builds/unix/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2014 Free Software Foundation, Inc.
+# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2014-12-03'
+timestamp='2015-03-08'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -259,8 +259,8 @@ case $basic_machine in
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
- | fido | fr30 | frv \
+ | e2k | epiphany \
+ | fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia64 \
@@ -381,7 +381,7 @@ case $basic_machine in
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -518,6 +518,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -1373,7 +1376,7 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/freetype/builds/unix/configure b/freetype/builds/unix/configure
index 08357a9cb..919d38e65 100644
--- a/freetype/builds/unix/configure
+++ b/freetype/builds/unix/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for FreeType 2.5.5.
+# Generated by GNU Autoconf 2.69 for FreeType 2.6.
#
# Report bugs to <freetype@nongnu.org>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='FreeType'
PACKAGE_TARNAME='freetype'
-PACKAGE_VERSION='2.5.5'
-PACKAGE_STRING='FreeType 2.5.5'
+PACKAGE_VERSION='2.6'
+PACKAGE_STRING='FreeType 2.6'
PACKAGE_BUGREPORT='freetype@nongnu.org'
PACKAGE_URL=''
@@ -659,6 +659,7 @@ INSTALL_PROGRAM
RMDIR
EXEEXT_BUILD
CC_BUILD
+LT_SYS_LIBRARY_PATH
OTOOL64
OTOOL
LIPO
@@ -749,6 +750,7 @@ enable_shared
enable_static
with_pic
enable_fast_install
+with_aix_soname
with_gnu_ld
with_sysroot
enable_libtool_lock
@@ -777,6 +779,7 @@ CPP
PKG_CONFIG
PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
+LT_SYS_LIBRARY_PATH
ZLIB_CFLAGS
ZLIB_LIBS
BZIP2_CFLAGS
@@ -1325,7 +1328,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures FreeType 2.5.5 to adapt to many kinds of systems.
+\`configure' configures FreeType 2.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1390,7 +1393,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of FreeType 2.5.5:";;
+ short | recursive ) echo "Configuration of FreeType 2.6:";;
esac
cat <<\_ACEOF
@@ -1412,6 +1415,9 @@ Optional Packages:
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
both]
+ --with-aix-soname=aix|svr4|both
+ shared library versioning (aka "SONAME") variant to
+ provide on AIX, [default=aix].
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-sysroot[=DIR] Search for dependent libraries within DIR (or the
compiler's sysroot if not specified).
@@ -1452,6 +1458,8 @@ Some influential environment variables:
directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path
+ LT_SYS_LIBRARY_PATH
+ User-defined run-time library search path.
ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
ZLIB_LIBS linker flags for ZLIB, overriding pkg-config
BZIP2_CFLAGS
@@ -1531,7 +1539,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-FreeType configure 2.5.5
+FreeType configure 2.6
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2129,7 +2137,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by FreeType $as_me 2.5.5, which was
+It was created by FreeType $as_me 2.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2485,7 +2493,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Don't forget to update docs/VERSION.DLL!
-version_info='17:4:11'
+version_info='18:0:12'
ft_version=`echo $version_info | tr : .`
@@ -3654,8 +3662,8 @@ esac
-macro_version='2.4.2.444.28-053d'
-macro_revision='2.4.2.444.28'
+macro_version='2.4.6'
+macro_revision='2.4.6'
@@ -4174,8 +4182,13 @@ else
# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
# Tru64's nm complains that /dev/null is an invalid object file
- case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
- */dev/null* | *'Invalid file or object type'*)
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
@@ -4948,6 +4961,9 @@ sysv4 | sysv4.3*)
tpf*)
lt_cv_deplibs_check_method=pass_all
;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
fi
@@ -5970,6 +5986,86 @@ $as_echo "${lt_sysroot:-no}" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+ ac_path_lt_DD_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in dd; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+ $ac_path_lt_DD_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_lt_DD"; then
+ :
+ fi
+else
+ ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
# Check whether --enable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then :
enableval=$enable_libtool_lock;
@@ -6954,7 +7050,7 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
10.0,*86*-darwin8*|10.0,*-darwin[91]*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[012]*)
+ 10.[012][,.]*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
10.*)
_lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
@@ -6977,6 +7073,41 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
;;
esac
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
$as_echo_n "checking for ANSI C header files... " >&6; }
@@ -7554,6 +7685,58 @@ fi
+ shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+ withval=$with_aix_soname; case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname
+else
+ if ${lt_cv_with_aix_soname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ lt_cv_with_aix_soname=aix
+fi
+
+ with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+
+
+
+
+
+
@@ -7673,15 +7856,8 @@ test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$LD" && LD=ld
test -z "$ac_objext" && ac_objext=o
-for cc_temp in $compiler""; do
- case $cc_temp in
- compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
- distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
- \-*) ;;
- *) break;;
- esac
-done
-cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
# Only perform the check for file, if the check method requires it
@@ -7988,6 +8164,11 @@ lt_prog_compiler_static=
# Although the cygwin gcc ignores -fPIC, still need this for old-style
# (--disable-auto-import) libraries
lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
;;
darwin* | rhapsody*)
@@ -8084,6 +8265,11 @@ lt_prog_compiler_static=
# This hack is so that the source file can tell whether it is being
# built for inclusion in a dll (and should export symbols for example).
lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
;;
hpux9* | hpux10* | hpux11*)
@@ -8724,6 +8910,34 @@ _LT_EOF
link_all_deplibs=yes
;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
interix[3-9]*)
hardcode_direct=no
hardcode_shlibpath_var=no
@@ -8797,6 +9011,9 @@ _LT_EOF
fi
case $cc_basename in
+ tcc*)
+ export_dynamic_flag_spec='-rdynamic'
+ ;;
xlf* | bgf* | bgxlf* | mpixlf*)
# IBM XL Fortran 10.1 on PPC cannot create shared libs itself
whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
@@ -8926,19 +9143,35 @@ _LT_EOF
no_entry_flag=
else
# If we're using GNU nm, then we don't want the "-C" option.
- # -C means demangle to AIX nm, but means don't demangle with GNU nm
- # Also, AIX nm treats weak defined symbols like other global
- # defined symbols, whereas GNU nm marks them as "W".
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
- export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
for ld_flag in $LDFLAGS; do
if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
@@ -8946,6 +9179,13 @@ _LT_EOF
break
fi
done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
;;
esac
@@ -8965,6 +9205,14 @@ _LT_EOF
hardcode_libdir_separator=':'
link_all_deplibs=yes
file_list_spec='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ ;;
+ esac
if test yes = "$GCC"; then
case $host_os in aix4.[012]|aix4.[012].*)
@@ -8992,6 +9240,11 @@ _LT_EOF
if test yes = "$aix_use_runtimelinking"; then
shared_flag="$shared_flag "'$wl-G'
fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
else
# not using gcc
if test ia64 = "$host_cpu"; then
@@ -9004,6 +9257,8 @@ _LT_EOF
else
shared_flag='$wl-bM:SRE'
fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
fi
fi
@@ -9011,7 +9266,7 @@ _LT_EOF
# It seems that -bexpall does not export symbols beginning with
# underscore (_), so it is better to generate a list of symbols to export.
always_export_symbols=yes
- if test yes = "$aix_use_runtimelinking"; then
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
# Warning - without using the other runtime loading flags (-brtl),
# -berok will link without error, but may produce a broken library.
allow_undefined_flag='-berok'
@@ -9126,8 +9381,20 @@ fi
whole_archive_flag_spec='$convenience'
fi
archive_cmds_need_lc=yes
- # This is similar to how AIX traditionally builds its shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $wl-bnoentry $compiler_flags $wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
fi
fi
;;
@@ -9446,6 +9713,16 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
link_all_deplibs=yes
;;
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ ld_shlibs=yes
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
@@ -9491,8 +9768,28 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
allow_undefined_flag=unsupported
- archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
;;
osf3*)
@@ -10015,6 +10312,8 @@ hardcode_into_libs=no
# flags to be left without arguments
need_version=unknown
+
+
case $host_os in
aix3*)
version_type=linux # correct to gnu/linux during the next big refactor
@@ -10051,20 +10350,70 @@ aix[4-9]*)
fi
;;
esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
# AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
# soname into executable. Probably we can add versioning support to
# collect2, so additional links can be useful in future.
- if test yes = "$aix_use_runtimelinking"; then
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
# If using run time linking (on AIX 4.2 or later) use lib<name>.so
# instead of lib<name>.a to let people know that these are not
# typical AIX shared libraries.
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
- else
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a(lib.so.V)'
# We preserve .a as extension for shared libraries through AIX4.2
# and later when we are not doing run time linking.
library_names_spec='$libname$release.a $libname.a'
soname_spec='$libname$release$shared_ext$major'
- fi
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
shlibpath_var=LIBPATH
fi
;;
@@ -10252,7 +10601,8 @@ freebsd* | dragonfly*)
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
- library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
need_version=no
need_lib_prefix=no
;;
@@ -10312,10 +10662,11 @@ hpux9* | hpux10* | hpux11*)
soname_spec='$libname$release$shared_ext$major'
if test 32 = "$HPUX_IA64_MODE"; then
sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
else
sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
fi
- sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
;;
hppa*64*)
shrext_cmds='.sl'
@@ -10467,7 +10818,12 @@ fi
# before this can be enabled.
hardcode_into_libs=yes
- # Append ld.so.conf contents to the search path
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
if test -f /etc/ld.so.conf; then
lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -10536,11 +10892,32 @@ openbsd* | bitrig*)
os2*)
libname_spec='$name'
+ version_type=windows
shrext_cmds=.dll
+ need_version=no
need_lib_prefix=no
- library_names_spec='$libname$shared_ext $libname.a'
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
dynamic_linker='OS/2 ld.exe'
- shlibpath_var=LIBPATH
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
;;
osf3* | osf4* | osf5*)
@@ -10616,7 +10993,7 @@ sysv4*MP*)
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
- version_type=freebsd-elf
+ version_type=sco
need_lib_prefix=no
need_version=no
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
@@ -10671,10 +11048,25 @@ fi
if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
fi
+
if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
fi
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
@@ -11145,7 +11537,7 @@ else
# endif
#endif
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
correspondingly for the symbols needed. */
#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
int fnord () __attribute__((visibility("default")));
@@ -11251,7 +11643,7 @@ else
# endif
#endif
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
correspondingly for the symbols needed. */
#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
int fnord () __attribute__((visibility("default")));
@@ -11400,8 +11792,12 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
;;
aix[4-9]*)
- if test ia64 != "$host_cpu" && test no = "$aix_use_runtimelinking"; then
- test yes = "$enable_shared" && enable_static=no
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
fi
;;
esac
@@ -14288,7 +14684,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by FreeType $as_me 2.5.5, which was
+This file was extended by FreeType $as_me 2.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -14354,7 +14750,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-FreeType config.status 2.5.5
+FreeType config.status 2.6
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -14490,6 +14886,7 @@ enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
@@ -14543,6 +14940,7 @@ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_
lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
@@ -14607,7 +15005,8 @@ finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
@@ -14664,6 +15063,7 @@ lt_cv_sys_global_symbol_to_c_name_address \
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
lt_cv_nm_interface \
nm_file_list_spec \
+lt_cv_truncate_bin \
lt_prog_compiler_no_builtin_flag \
lt_prog_compiler_pic \
lt_prog_compiler_wl \
@@ -14725,7 +15125,8 @@ postinstall_cmds \
postuninstall_cmds \
finish_cmds \
sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec; do
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
*[\\\\\\\`\\"\\\$]*)
eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
@@ -15367,6 +15768,9 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
# The names of the tagged configurations supported by this script.
available_tags=''
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
# ### BEGIN LIBTOOL CONFIG
# Which release of libtool.m4 was used?
@@ -15394,6 +15798,9 @@ pic_mode=$pic_mode
# Whether or not to optimize for fast installation.
fast_install=$enable_fast_install
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
# Shell to use when invoking shell scripts.
SHELL=$lt_SHELL
@@ -15523,6 +15930,9 @@ nm_file_list_spec=$lt_nm_file_list_spec
# The root where to search for dependent libraries,and where our libraries should be installed.
lt_sysroot=$lt_sysroot
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
# The name of the directory that contains temporary libtool files.
objdir=$objdir
@@ -15613,8 +16023,11 @@ hardcode_into_libs=$hardcode_into_libs
# Compile-time system search path for libraries.
sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-# Run-time system search path for libraries.
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
# Whether dlopen is supported.
dlopen_support=$enable_dlopen
@@ -15765,6 +16178,65 @@ hardcode_action=$hardcode_action
_LT_EOF
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
case $host_os in
aix3*)
cat <<\_LT_EOF >> "$cfgfile"
diff --git a/freetype/builds/unix/configure.ac b/freetype/builds/unix/configure.ac
index f6f754699..d69a62655 100644
--- a/freetype/builds/unix/configure.ac
+++ b/freetype/builds/unix/configure.ac
@@ -2,7 +2,7 @@
#
# Process this file with autoconf to produce a configure script.
#
-# Copyright 2001-2014 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -11,13 +11,13 @@
# indicate that you have read the license and understand and accept it
# fully.
-AC_INIT([FreeType], [2.5.5], [freetype@nongnu.org], [freetype])
+AC_INIT([FreeType], [2.6], [freetype@nongnu.org], [freetype])
AC_CONFIG_SRCDIR([ftconfig.in])
# Don't forget to update docs/VERSION.DLL!
-version_info='17:4:11'
+version_info='18:0:12'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])
diff --git a/freetype/builds/unix/configure.raw b/freetype/builds/unix/configure.raw
index 72543cf88..b828bf095 100644
--- a/freetype/builds/unix/configure.raw
+++ b/freetype/builds/unix/configure.raw
@@ -2,7 +2,7 @@
#
# Process this file with autoconf to produce a configure script.
#
-# Copyright 2001-2014 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,7 +17,7 @@ AC_CONFIG_SRCDIR([ftconfig.in])
# Don't forget to update docs/VERSION.DLL!
-version_info='17:4:11'
+version_info='18:0:12'
AC_SUBST([version_info])
ft_version=`echo $version_info | tr : .`
AC_SUBST([ft_version])
diff --git a/freetype/builds/unix/detect.mk b/freetype/builds/unix/detect.mk
index 0506e7d04..ef007bf39 100644
--- a/freetype/builds/unix/detect.mk
+++ b/freetype/builds/unix/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002-2004, 2006, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -81,9 +81,12 @@ ifeq ($(PLATFORM),unix)
ifdef must_configure
ifneq ($(have_Makefile),)
# we are building FT2 not in the src tree
- $(CONFIG_SHELL) $(TOP_DIR)/builds/unix/configure $(value CFG)
+ CONFIG_SHELL="$(CONFIG_SHELL)" \
+ $(CONFIG_SHELL) $(TOP_DIR)/builds/unix/configure $(value CFG)
else
- cd builds/unix; $(CONFIG_SHELL) ./configure $(value CFG)
+ cd builds/unix; \
+ CONFIG_SHELL="$(CONFIG_SHELL)" \
+ $(CONFIG_SHELL) ./configure $(value CFG)
endif
endif
diff --git a/freetype/builds/unix/freetype-config.in b/freetype/builds/unix/freetype-config.in
index ebc311f07..269356c96 100644
--- a/freetype/builds/unix/freetype-config.in
+++ b/freetype/builds/unix/freetype-config.in
@@ -1,6 +1,6 @@
#! /bin/sh
#
-# Copyright 2000-2005, 2008, 2009, 2013, 2014 by
+# Copyright 2000-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/freetype2.m4 b/freetype/builds/unix/freetype2.m4
index 3a806d90f..3dc88076a 100644
--- a/freetype/builds/unix/freetype2.m4
+++ b/freetype/builds/unix/freetype2.m4
@@ -1,7 +1,7 @@
# Configure paths for FreeType2
# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
#
-# Copyright 2001, 2003, 2007, 2009, 2014 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/ft-munmap.m4 b/freetype/builds/unix/ft-munmap.m4
index 68b3361e2..72b08645d 100644
--- a/freetype/builds/unix/ft-munmap.m4
+++ b/freetype/builds/unix/ft-munmap.m4
@@ -1,6 +1,6 @@
## FreeType specific autoconf tests
#
-# Copyright 2002, 2003, 2004 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/ftconfig.in b/freetype/builds/unix/ftconfig.in
index e66f3eab3..f6d459f2e 100644
--- a/freetype/builds/unix/ftconfig.in
+++ b/freetype/builds/unix/ftconfig.in
@@ -4,7 +4,7 @@
/* */
/* UNIX-specific configuration file (specification only). */
/* */
-/* Copyright 1996-2004, 2006-2009, 2011, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -89,7 +89,7 @@ FT_BEGIN_HEADER
/* is copied from default include/config/ftconfig.h. */
/* If any improvement is required for this file, it should be */
/* applied to the original header file for the builders that */
- /* does not use configure script. */
+ /* do not use configure script. */
/* The size of an `int' type. */
#if FT_UINT_MAX == 0xFFFFUL
@@ -349,11 +349,28 @@ FT_BEGIN_HEADER
#endif
+ /*************************************************************************/
+ /* */
+ /* miscellaneous */
+ /* */
+ /*************************************************************************/
+
+
#define FT_BEGIN_STMNT do {
#define FT_END_STMNT } while ( 0 )
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+ /* typeof condition taken from gnulib's `intprops.h' header file */
+#if ( __GNUC__ >= 2 || \
+ defined( __IBM__TYPEOF__ ) || \
+ ( __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define TYPEOF( type ) (__typeof__ (type))
+#else
+#define TYPEOF( type ) /* empty */
+#endif
+
+
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
diff --git a/freetype/builds/unix/ftsystem.c b/freetype/builds/unix/ftsystem.c
index 2f5dc16b5..fca09b176 100644
--- a/freetype/builds/unix/ftsystem.c
+++ b/freetype/builds/unix/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* Unix-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2002, 2004-2008, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/unix/install-sh b/freetype/builds/unix/install-sh
index 043673775..0b0fdcbba 100644
--- a/freetype/builds/unix/install-sh
+++ b/freetype/builds/unix/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2013-10-30.23; # UTC
+scriptversion=2013-12-25.23; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -82,7 +82,7 @@ dir_arg=
dst_arg=
copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -139,14 +139,16 @@ while test $# -ne 0; do
-s) stripcmd=$stripprog;;
- -t) dst_arg=$2
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;;
- -T) no_target_directory=true;;
+ -T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
@@ -161,6 +163,16 @@ while test $# -ne 0; do
shift
done
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
@@ -192,6 +204,15 @@ if test $# -eq 0; then
fi
if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
@@ -253,7 +274,7 @@ do
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
- if test -n "$no_target_directory"; then
+ if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
diff --git a/freetype/builds/unix/install.mk b/freetype/builds/unix/install.mk
index 83525ee41..35cff2021 100644
--- a/freetype/builds/unix/install.mk
+++ b/freetype/builds/unix/install.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002, 2003, 2006, 2013, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/ltmain.sh b/freetype/builds/unix/ltmain.sh
index 08f3a26e3..0f0a2da3f 100644
--- a/freetype/builds/unix/ltmain.sh
+++ b/freetype/builds/unix/ltmain.sh
@@ -2,11 +2,11 @@
## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
## by inline-source v2014-01-03.01
-# libtool (GNU libtool) 2.4.2.444.28-053d
+# libtool (GNU libtool) 2.4.6
# Provide generalized library-building support services.
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -31,8 +31,8 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION=2.4.2.444.28-053d
-package_revision=2.4.2.444.28
+VERSION=2.4.6
+package_revision=2.4.6
## ------ ##
@@ -64,12 +64,12 @@ package_revision=2.4.2.444.28
# libraries, which are installed to $pkgauxdir.
# Set a version string for this script.
-scriptversion=2014-02-10.13; # UTC
+scriptversion=2015-01-20.17; # UTC
# General shell script boiler plate, and helper functions.
# Written by Gary V. Vaughan, 2004
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -192,7 +192,7 @@ func_path_progs ()
_G_path_prog_max=0
_G_path_prog_found=false
- _G_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
for _G_dir in $_G_PATH; do
IFS=$_G_save_IFS
test -z "$_G_dir" && _G_dir=.
@@ -1333,7 +1333,7 @@ func_warning ()
# -----------------------
# 'sort -V' is not generally available.
# Note this deviates from the version comparison in automake
-# in that it treats 1.5 < 1.5.0, and treats 1.4-p12a < 1.4-p3a
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
# but this should suffice as we won't be specifying old
# version formats or redundant trailing .0 in bootstrap.conf.
# If we did want full compatibility then we should probably
@@ -1375,7 +1375,7 @@ scriptversion=2014-01-07.03; # UTC
# A portable, pluggable option parser for Bourne shell.
# Written by Gary V. Vaughan, 2010
-# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions. There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -1977,7 +1977,7 @@ func_version ()
# End:
# Set a version string.
-scriptversion='(GNU libtool) 2.4.2.444.28-053d'
+scriptversion='(GNU libtool) 2.4.6'
# func_echo ARG...
@@ -2039,7 +2039,12 @@ usage_message="Options:
"
# Additional text appended to 'usage_message' in response to '--help'.
-long_help_message=$long_help_message"
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message
MODE must be one of the following:
@@ -2063,13 +2068,15 @@ include the following information:
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname (GNU libtool) 2.4.2.444.28-053d
+ version: $progname (GNU libtool) 2.4.6
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
Report bugs to <bug-libtool@gnu.org>.
-GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+GNU libtool home page: <http://www.gnu.org/software/libtool/>.
General help using GNU software: <http://www.gnu.org/gethelp/>."
+ exit 0
+}
# func_lo2o OBJECT-NAME
@@ -2411,7 +2418,7 @@ libtool_validate_options ()
case $host in
# Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
# see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
- *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2*)
+ *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
# don't eliminate duplications in $postdeps and $predeps
opt_duplicate_compiler_generated_deps=:
;;
@@ -2482,6 +2489,14 @@ $1
_LTECHO_EOF'
}
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+ $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
# func_lalib_p file
# True iff FILE is a libtool '.la' library or '.lo' object file.
# This function is only a basic sanity check; it will hardly flush out
@@ -2489,8 +2504,7 @@ _LTECHO_EOF'
func_lalib_p ()
{
test -f "$1" &&
- $SED -e 4q "$1" 2>/dev/null \
- | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+ $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
}
# func_lalib_unsafe_p file
@@ -2522,7 +2536,8 @@ func_lalib_unsafe_p ()
# determined imposters.
func_ltwrapper_script_p ()
{
- func_lalib_p "$1"
+ test -f "$1" &&
+ $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
}
# func_ltwrapper_executable_p file
@@ -3722,7 +3737,8 @@ The following components of LINK-COMMAND are treated specially:
-no-install link a not-installable executable
-no-undefined declare that a library does not refer to external symbols
-o OUTPUT-FILE create OUTPUT-FILE from the specified objects
- -objectlist FILE Use a list of object files found in FILE to specify objects
+ -objectlist FILE use a list of object files found in FILE to specify objects
+ -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
-precious-files-regex REGEX
don't remove output files matching REGEX
-release RELEASE specify package release information
@@ -4304,6 +4320,13 @@ func_mode_install ()
;;
esac
;;
+ os2*)
+ case $realname in
+ *_dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
esac
if test -n "$tstripme" && test -n "$striplib"; then
func_show_eval "$striplib $destdir/$realname" 'exit $?'
@@ -5145,7 +5168,7 @@ func_extract_archives ()
$RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
done # $darwin_arches
## Okay now we've a bunch of thin objects, gotta fatten them up :)
- darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
darwin_file=
darwin_files=
for darwin_file in $darwin_filelist; do
@@ -5418,7 +5441,7 @@ func_exec_program ()
if test -n \"\$relink_command\"; then
if relink_command_output=\`eval \$relink_command 2>&1\`; then :
else
- $ECHO \"\$relink_command_output\" >&2
+ \$ECHO \"\$relink_command_output\" >&2
$RM \"\$progdir/\$file\"
exit 1
fi
@@ -5650,7 +5673,12 @@ void lt_dump_script (FILE *f);
EOF
cat <<EOF
-volatile const char * MAGIC_EXE = "$magic_exe";
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
const char * LIB_PATH_VARNAME = "$shlibpath_var";
EOF
@@ -6440,6 +6468,24 @@ func_win32_import_lib_p ()
esac
}
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+ $debug_cmd
+
+ case " $compile_command " in
+ *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+ suncc_use_cstd_abi=no
+ ;;
+ *)
+ suncc_use_cstd_abi=yes
+ ;;
+ esac
+}
+
# func_mode_link arg...
func_mode_link ()
{
@@ -6498,6 +6544,7 @@ func_mode_link ()
module=no
no_install=no
objs=
+ os2dllname=
non_pic_objects=
precious_files_regex=
prefer_static_libs=no
@@ -6755,6 +6802,11 @@ func_mode_link ()
prev=
continue
;;
+ os2dllname)
+ os2dllname=$arg
+ prev=
+ continue
+ ;;
precious_regex)
precious_files_regex=$arg
prev=
@@ -7064,6 +7116,11 @@ func_mode_link ()
continue
;;
+ -os2dllname)
+ prev=os2dllname
+ continue
+ ;;
+
-o) prev=output ;;
-precious-files-regex)
@@ -7210,6 +7267,7 @@ func_mode_link ()
# -m*, -t[45]*, -txscale* architecture-specific flags for GCC
# -F/path path to uninstalled frameworks, gcc on darwin
# -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # -fstack-protector* stack protector flags for GCC
# @file GCC response files
# -tp=* Portland pgcc target processor selection
# --sysroot=* for sysroot support
@@ -7217,7 +7275,7 @@ func_mode_link ()
# -stdlib=* select c++ std lib with clang
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-stdlib=*)
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
func_quote_for_eval "$arg"
arg=$func_quote_for_eval_result
func_append compile_command " $arg"
@@ -7226,6 +7284,25 @@ func_mode_link ()
continue
;;
+ -Z*)
+ if test os2 = "`expr $host : '.*\(os2\)'`"; then
+ # OS/2 uses -Zxxx to specify OS/2-specific options
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case $arg in
+ -Zlinker | -Zstack)
+ prev=xcompiler
+ ;;
+ esac
+ continue
+ else
+ # Otherwise treat like 'Some other compiler flag' below
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ fi
+ ;;
+
# Some other compiler flag.
-* | +*)
func_quote_for_eval "$arg"
@@ -7385,6 +7462,9 @@ func_mode_link ()
eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+ # Definition is injected by LT_CONFIG during libtool generation.
+ func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
func_dirname "$output" "/" ""
output_objdir=$func_dirname_result$objdir
func_to_tool_file "$output_objdir/"
@@ -8052,7 +8132,7 @@ func_mode_link ()
if test -n "$library_names" &&
{ test no = "$use_static_libs" || test -z "$old_library"; }; then
case $host in
- *cygwin* | *mingw* | *cegcc*)
+ *cygwin* | *mingw* | *cegcc* | *os2*)
# No point in relinking DLLs because paths are not encoded
func_append notinst_deplibs " $lib"
need_relink=no
@@ -8122,7 +8202,7 @@ func_mode_link ()
elif test -n "$soname_spec"; then
# bleh windows
case $host in
- *cygwin* | mingw* | *cegcc*)
+ *cygwin* | mingw* | *cegcc* | *os2*)
func_arith $current - $age
major=$func_arith_result
versuffix=-$major
@@ -8547,6 +8627,37 @@ func_mode_link ()
eval $var=\"$tmp_libs\"
done # for var
fi
+
+ # Add Sun CC postdeps if required:
+ test CXX = "$tagname" && {
+ case $host_os in
+ linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C++ 5.9
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ func_cc_basename "$CC"
+ case $func_cc_basename_result in
+ CC* | sunCC*)
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ }
+
# Last step: remove runtime libs from dependency_libs
# (they stay in deplibs)
tmp_libs=
@@ -8694,13 +8805,13 @@ func_mode_link ()
#
case $version_type in
# correct linux to gnu/linux during the next big refactor
- darwin|linux|osf|windows|none)
+ darwin|freebsd-elf|linux|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
revision=$number_revision
;;
- freebsd-aout|freebsd-elf|qnx|sunos)
+ freebsd-aout|qnx|sunos)
current=$number_major
revision=$number_minor
age=0
@@ -8786,8 +8897,9 @@ func_mode_link ()
;;
freebsd-elf)
- major=.$current
- versuffix=.$current
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
;;
irix | nonstopux)
@@ -8850,6 +8962,11 @@ func_mode_link ()
versuffix=.$current
;;
+ sco)
+ major=.$current
+ versuffix=.$current
+ ;;
+
sunos)
major=.$current
versuffix=.$current.$revision
diff --git a/freetype/builds/unix/unix-cc.in b/freetype/builds/unix/unix-cc.in
index b84bc5d27..d53b25f6d 100644
--- a/freetype/builds/unix/unix-cc.in
+++ b/freetype/builds/unix/unix-cc.in
@@ -2,7 +2,7 @@
# FreeType 2 template for Unix-specific compiler definitions
#
-# Copyright 1996-2000, 2002, 2003, 2005, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix-def.in b/freetype/builds/unix/unix-def.in
index 4c06a05c7..ed9fd1ea8 100644
--- a/freetype/builds/unix/unix-def.in
+++ b/freetype/builds/unix/unix-def.in
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002, 2004, 2006, 2008, 2013, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix-dev.mk b/freetype/builds/unix/unix-dev.mk
index 76bae3862..62de3445f 100644
--- a/freetype/builds/unix/unix-dev.mk
+++ b/freetype/builds/unix/unix-dev.mk
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix-lcc.mk b/freetype/builds/unix/unix-lcc.mk
index 6038e5239..328cc80eb 100644
--- a/freetype/builds/unix/unix-lcc.mk
+++ b/freetype/builds/unix/unix-lcc.mk
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2000 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unix.mk b/freetype/builds/unix/unix.mk
index 7f9d9a34f..542aa7fe3 100644
--- a/freetype/builds/unix/unix.mk
+++ b/freetype/builds/unix/unix.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002, 2004, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/unix/unixddef.mk b/freetype/builds/unix/unixddef.mk
index 130d6b0f6..f3336408f 100644
--- a/freetype/builds/unix/unixddef.mk
+++ b/freetype/builds/unix/unixddef.mk
@@ -4,7 +4,7 @@
#
-# Copyright 1996-2000, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/vms/ftconfig.h b/freetype/builds/vms/ftconfig.h
index b3096512e..eff898f36 100644
--- a/freetype/builds/vms/ftconfig.h
+++ b/freetype/builds/vms/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* VMS-specific configuration file (specification only). */
/* */
-/* Copyright 1996-2004, 2006-2008, 2011, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -292,11 +292,28 @@ FT_BEGIN_HEADER
#endif
+ /*************************************************************************/
+ /* */
+ /* miscellaneous */
+ /* */
+ /*************************************************************************/
+
+
#define FT_BEGIN_STMNT do {
#define FT_END_STMNT } while ( 0 )
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+ /* typeof condition taken from gnulib's `intprops.h' header file */
+#if ( __GNUC__ >= 2 || \
+ defined( __IBM__TYPEOF__ ) || \
+ ( __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define TYPEOF( type ) (__typeof__ (type))
+#else
+#define TYPEOF( type ) /* empty */
+#endif
+
+
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
diff --git a/freetype/builds/vms/ftsystem.c b/freetype/builds/vms/ftsystem.c
index 78cd0e101..1f92a0cad 100644
--- a/freetype/builds/vms/ftsystem.c
+++ b/freetype/builds/vms/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* VMS-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2002, 2005, 2010, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/wince/ftdebug.c b/freetype/builds/wince/ftdebug.c
index 2229e67e1..50b5d6e00 100644
--- a/freetype/builds/wince/ftdebug.c
+++ b/freetype/builds/wince/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component for WinCE (body). */
/* */
-/* Copyright 1996-2002, 2005, 2008, 2009, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/wince/vc2005-ce/freetype.vcproj b/freetype/builds/wince/vc2005-ce/freetype.vcproj
index 5614235cb..a1993b4e6 100644
--- a/freetype/builds/wince/vc2005-ce/freetype.vcproj
+++ b/freetype/builds/wince/vc2005-ce/freetype.vcproj
@@ -21,7 +21,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -41,7 +41,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -61,7 +61,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -81,7 +81,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -121,7 +121,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -141,7 +141,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -161,7 +161,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -181,7 +181,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -201,7 +201,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -221,7 +221,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -241,7 +241,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -261,7 +261,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -281,7 +281,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -301,7 +301,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -321,7 +321,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -341,7 +341,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -361,7 +361,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -381,7 +381,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -401,7 +401,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -421,7 +421,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -441,7 +441,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -461,7 +461,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -481,7 +481,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -501,7 +501,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -521,7 +521,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -541,7 +541,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -561,7 +561,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -581,7 +581,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -601,7 +601,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -621,7 +621,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -641,7 +641,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -661,7 +661,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -681,7 +681,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -701,7 +701,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -721,7 +721,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -741,7 +741,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -758,7 +758,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -2135,6 +2135,8 @@
</File>
<File RelativePath="..\..\..\src\base\ftcid.c">
</File>
+ <File RelativePath="..\..\..\src\base\ftfntfmt.c">
+ </File>
<File RelativePath="..\..\..\src\base\ftgxval.c">
</File>
<File RelativePath="..\..\..\src\base\ftlcdfil.c">
@@ -2279,8 +2281,6 @@
</File>
<File RelativePath="..\..\..\src\base\ftwinfnt.c">
</File>
- <File RelativePath="..\..\..\src\base\ftxf86.c">
- </File>
<File RelativePath="..\..\..\src\pcf\pcf.c">
<FileConfiguration Name="Release|Pocket PC 2003 (ARMV4)">
<Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
diff --git a/freetype/builds/wince/vc2005-ce/index.html b/freetype/builds/wince/vc2005-ce/index.html
index e2160f687..a8e92d700 100644
--- a/freetype/builds/wince/vc2005-ce/index.html
+++ b/freetype/builds/wince/vc2005-ce/index.html
@@ -21,14 +21,14 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.5.5 sources:</p>
+It compiles the following libraries from the FreeType 2.6 sources:</p>
<ul>
<pre>
- freetype255.lib - release build; single threaded
- freetype255_D.lib - debug build; single threaded
- freetype255MT.lib - release build; multi-threaded
- freetype255MT_D.lib - debug build; multi-threaded</pre>
+ freetype26.lib - release build; single threaded
+ freetype26_D.lib - debug build; single threaded
+ freetype26MT.lib - release build; multi-threaded
+ freetype26MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
diff --git a/freetype/builds/wince/vc2008-ce/freetype.vcproj b/freetype/builds/wince/vc2008-ce/freetype.vcproj
index e36ccb059..4faf5b400 100644
--- a/freetype/builds/wince/vc2008-ce/freetype.vcproj
+++ b/freetype/builds/wince/vc2008-ce/freetype.vcproj
@@ -88,7 +88,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -177,7 +177,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -266,7 +266,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -355,7 +355,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -444,7 +444,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -533,7 +533,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -621,7 +621,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -709,7 +709,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -797,7 +797,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -885,7 +885,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -973,7 +973,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1061,7 +1061,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1149,7 +1149,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1236,7 +1236,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1323,7 +1323,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1410,7 +1410,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1497,7 +1497,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1584,7 +1584,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1668,7 +1668,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1753,7 +1753,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1838,7 +1838,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1923,7 +1923,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2008,7 +2008,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2093,7 +2093,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2178,7 +2178,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2263,7 +2263,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2348,7 +2348,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2433,7 +2433,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2518,7 +2518,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2603,7 +2603,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2689,7 +2689,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2775,7 +2775,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2861,7 +2861,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2947,7 +2947,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3033,7 +3033,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3119,7 +3119,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3205,7 +3205,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3279,7 +3279,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\wince\vc2008-ce\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\wince\vc2008-ce\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -7872,6 +7872,10 @@
>
</File>
<File
+ RelativePath="..\..\..\src\base\ftfntfmt.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\src\base\ftgxval.c"
>
</File>
@@ -8331,10 +8335,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftxf86.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\pcf\pcf.c"
>
<FileConfiguration
diff --git a/freetype/builds/wince/vc2008-ce/index.html b/freetype/builds/wince/vc2008-ce/index.html
index 469baefef..ebf13768b 100644
--- a/freetype/builds/wince/vc2008-ce/index.html
+++ b/freetype/builds/wince/vc2008-ce/index.html
@@ -21,14 +21,14 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.5.5 sources:</p>
+It compiles the following libraries from the FreeType 2.6 sources:</p>
<ul>
<pre>
- freetype255.lib - release build; single threaded
- freetype255_D.lib - debug build; single threaded
- freetype255MT.lib - release build; multi-threaded
- freetype255MT_D.lib - debug build; multi-threaded</pre>
+ freetype26.lib - release build; single threaded
+ freetype26_D.lib - debug build; single threaded
+ freetype26MT.lib - release build; multi-threaded
+ freetype26MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
diff --git a/freetype/builds/windows/detect.mk b/freetype/builds/windows/detect.mk
index 9dca26127..26297f20f 100644
--- a/freetype/builds/windows/detect.mk
+++ b/freetype/builds/windows/detect.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2004, 2006, 2007, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/ftdebug.c b/freetype/builds/windows/ftdebug.c
index 1fc83e335..443c7e014 100644
--- a/freetype/builds/windows/ftdebug.c
+++ b/freetype/builds/windows/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component for Win32 (body). */
/* */
-/* Copyright 1996-2002, 2005, 2008, 2009, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/builds/windows/vc2005/freetype.vcproj b/freetype/builds/windows/vc2005/freetype.vcproj
index 5880b7d27..eb52ab556 100644
--- a/freetype/builds/windows/vc2005/freetype.vcproj
+++ b/freetype/builds/windows/vc2005/freetype.vcproj
@@ -16,7 +16,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype255.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -33,7 +33,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype255MT.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26MT.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -50,7 +50,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype255ST.lib" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26ST.lib" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -67,7 +67,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype255_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -84,7 +84,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype255ST_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26ST_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -101,7 +101,7 @@
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />
<Tool Name="VCPreLinkEventTool" />
- <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype255MT_D.lib" SuppressStartupBanner="true" />
+ <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype26MT_D.lib" SuppressStartupBanner="true" />
<Tool Name="VCALinkTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
@@ -346,6 +346,8 @@
<Filter Name="FT_MODULES">
<File RelativePath="..\..\..\src\base\ftbbox.c">
</File>
+ <File RelativePath="..\..\..\src\base\ftfntfmt.c">
+ </File>
<File RelativePath="..\..\..\src\base\ftmm.c">
<FileConfiguration Name="Release|Win32">
<Tool Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" PreprocessorDefinitions="" />
@@ -374,8 +376,6 @@
</File>
<File RelativePath="..\..\..\src\base\ftwinfnt.c">
</File>
- <File RelativePath="..\..\..\src\base\ftxf86.c">
- </File>
<File RelativePath="..\..\..\src\base\ftlcdfil.c">
</File>
<File RelativePath="..\..\..\src\base\ftgxval.c">
diff --git a/freetype/builds/windows/vc2005/index.html b/freetype/builds/windows/vc2005/index.html
index 4929dcdd0..7d47e39a4 100644
--- a/freetype/builds/windows/vc2005/index.html
+++ b/freetype/builds/windows/vc2005/index.html
@@ -11,14 +11,14 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.5.5 sources:</p>
+compiles the following libraries from the FreeType 2.6 sources:</p>
<ul>
<pre>
- freetype255.lib - release build; single threaded
- freetype255_D.lib - debug build; single threaded
- freetype255MT.lib - release build; multi-threaded
- freetype255MT_D.lib - debug build; multi-threaded</pre>
+ freetype26.lib - release build; single threaded
+ freetype26_D.lib - debug build; single threaded
+ freetype26MT.lib - release build; multi-threaded
+ freetype26MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
diff --git a/freetype/builds/windows/vc2008/freetype.vcproj b/freetype/builds/windows/vc2008/freetype.vcproj
index 95d722b97..738fe7ccf 100644
--- a/freetype/builds/windows/vc2008/freetype.vcproj
+++ b/freetype/builds/windows/vc2008/freetype.vcproj
@@ -70,7 +70,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype255.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -145,7 +145,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype255MT.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -220,7 +220,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype255ST.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -292,7 +292,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype255_D.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -365,7 +365,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -439,7 +439,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\win32\vc2008\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\win32\vc2008\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1237,6 +1237,10 @@
>
</File>
<File
+ RelativePath="..\..\..\src\base\ftfntfmt.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\src\base\ftmm.c"
>
<FileConfiguration
@@ -1320,10 +1324,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftxf86.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftlcdfil.c"
>
</File>
diff --git a/freetype/builds/windows/vc2008/index.html b/freetype/builds/windows/vc2008/index.html
index 7e0d154c3..533337f00 100644
--- a/freetype/builds/windows/vc2008/index.html
+++ b/freetype/builds/windows/vc2008/index.html
@@ -11,14 +11,14 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.5.5 sources:</p>
+compiles the following libraries from the FreeType 2.6 sources:</p>
<ul>
<pre>
- freetype255.lib - release build; single threaded
- freetype255_D.lib - debug build; single threaded
- freetype255MT.lib - release build; multi-threaded
- freetype255MT_D.lib - debug build; multi-threaded</pre>
+ freetype26.lib - release build; single threaded
+ freetype26_D.lib - debug build; single threaded
+ freetype26MT.lib - release build; multi-threaded
+ freetype26MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
diff --git a/freetype/builds/windows/vc2010/freetype.vcxproj b/freetype/builds/windows/vc2010/freetype.vcxproj
index 7cafe4539..3fa8cd2d0 100644
--- a/freetype/builds/windows/vc2010/freetype.vcxproj
+++ b/freetype/builds/windows/vc2010/freetype.vcxproj
@@ -191,18 +191,18 @@
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'" />
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">freetype255d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">freetype255d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">freetype255MTd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">freetype255MTd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">freetype255STd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">freetype255STd</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">freetype255</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">freetype255</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">freetype255MT</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">freetype255MT</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">freetype255ST</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">freetype255ST</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">freetype26d</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">freetype26d</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">freetype26MTd</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">freetype26MTd</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|Win32'">freetype26STd</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Singlethreaded|x64'">freetype26STd</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">freetype26</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">freetype26</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|Win32'">freetype26MT</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Multithreaded|x64'">freetype26MT</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|Win32'">freetype26ST</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Singlethreaded|x64'">freetype26ST</TargetName>
</PropertyGroup>
<Import Project="$(SolutionDir)\freetype.user.props" Condition="exists('$(SolutionDir)\freetype.user.props')" Label="UserProperties" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -1122,6 +1122,7 @@
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="..\..\..\src\base\ftbbox.c" />
+ <ClCompile Include="..\..\..\src\base\ftfntfmt.c" />
<ClCompile Include="..\..\..\src\base\ftmm.c">
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|Win32'">Disabled</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Multithreaded|x64'">Disabled</Optimization>
@@ -1170,7 +1171,6 @@
<ClCompile Include="..\..\..\src\base\ftsynth.c" />
<ClCompile Include="..\..\..\src\base\fttype1.c" />
<ClCompile Include="..\..\..\src\base\ftwinfnt.c" />
- <ClCompile Include="..\..\..\src\base\ftxf86.c" />
<ClCompile Include="..\..\..\src\base\ftlcdfil.c" />
<ClCompile Include="..\..\..\src\base\ftgxval.c" />
<ClCompile Include="..\..\..\src\base\ftotval.c" />
diff --git a/freetype/builds/windows/vc2010/freetype.vcxproj.filters b/freetype/builds/windows/vc2010/freetype.vcxproj.filters
index 99fc43f22..f762b0b54 100644
--- a/freetype/builds/windows/vc2010/freetype.vcxproj.filters
+++ b/freetype/builds/windows/vc2010/freetype.vcxproj.filters
@@ -65,6 +65,9 @@
<ClCompile Include="..\..\..\src\base\ftbbox.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\src\base\ftfntfmt.c">
+ <Filter>Source Files\FT_MODULES</Filter>
+ </ClCompile>
<ClCompile Include="..\..\..\src\base\ftmm.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
@@ -80,9 +83,6 @@
<ClCompile Include="..\..\..\src\base\ftwinfnt.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftxf86.c">
- <Filter>Source Files\FT_MODULES</Filter>
- </ClCompile>
<ClCompile Include="..\..\..\src\base\ftlcdfil.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
diff --git a/freetype/builds/windows/vc2010/index.html b/freetype/builds/windows/vc2010/index.html
index cb205aa70..37e642d3f 100644
--- a/freetype/builds/windows/vc2010/index.html
+++ b/freetype/builds/windows/vc2010/index.html
@@ -12,16 +12,16 @@
<p>This directory contains a project file for Visual C++ (VS.NET&nbsp;2010
or newer), named <tt>freetype.vcxproj</tt>, and Visual Studio, called
<tt>freetype.sln</tt>. It compiles the following libraries from the
-FreeType 2.5.5 sources:</p>
+FreeType 2.6 sources:</p>
<ul>
<pre>
-freetype255.lib - release build
-freetype255d.lib - debug build
-freetype255ST.lib - release build; single threaded
-freetype255STd.lib - debug build; single threaded
-freetype255MT.lib - release build; multi-threaded
-freetype255MTd.lib - debug build; multi-threaded</pre>
+freetype26.lib - release build
+freetype26d.lib - debug build
+freetype26ST.lib - release build; single threaded
+freetype26STd.lib - debug build; single threaded
+freetype26MT.lib - release build; multi-threaded
+freetype26MTd.lib - debug build; multi-threaded</pre>
</ul>
<p>Both Win32 and x64 builds are supported.</p>
diff --git a/freetype/builds/windows/visualc/freetype.dsp b/freetype/builds/windows/visualc/freetype.dsp
index cf76f7c2d..6f0310538 100644
--- a/freetype/builds/windows/visualc/freetype.dsp
+++ b/freetype/builds/windows/visualc/freetype.dsp
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@@ -78,7 +78,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@@ -102,8 +102,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype255_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255MT_D.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype26_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@@ -126,8 +126,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype255.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255MT.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype26.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@@ -151,8 +151,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype255.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype255ST.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype26ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@@ -177,8 +177,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype255_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255ST_D.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26ST_D.lib"
!ENDIF
@@ -226,6 +226,10 @@ SOURCE=..\..\..\src\base\ftbitmap.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\src\base\ftfntfmt.c
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\src\base\ftfstype.c
# End Source File
# Begin Source File
@@ -301,10 +305,6 @@ SOURCE=..\..\..\src\base\ftwinfnt.c
# End Source File
# Begin Source File
-SOURCE=..\..\..\src\base\ftxf86.c
-# End Source File
-# Begin Source File
-
SOURCE=..\..\..\src\pcf\pcf.c
# SUBTRACT CPP /Fr
# End Source File
diff --git a/freetype/builds/windows/visualc/freetype.vcproj b/freetype/builds/windows/visualc/freetype.vcproj
index 13883e06d..b1c3ca7eb 100644
--- a/freetype/builds/windows/visualc/freetype.vcproj
+++ b/freetype/builds/windows/visualc/freetype.vcproj
@@ -70,7 +70,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -145,7 +145,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -220,7 +220,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -292,7 +292,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -365,7 +365,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -439,7 +439,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1237,6 +1237,10 @@
>
</File>
<File
+ RelativePath="..\..\..\src\base\ftfntfmt.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\src\base\ftmm.c"
>
<FileConfiguration
@@ -1320,10 +1324,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftxf86.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftlcdfil.c"
>
</File>
diff --git a/freetype/builds/windows/visualc/index.html b/freetype/builds/windows/visualc/index.html
index 751d7ad0b..2beb8a913 100644
--- a/freetype/builds/windows/visualc/index.html
+++ b/freetype/builds/windows/visualc/index.html
@@ -11,14 +11,14 @@
<p>This directory contains project files for Visual C++, named
<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt>. It
-compiles the following libraries from the FreeType 2.5.5 sources:</p>
+compiles the following libraries from the FreeType 2.6 sources:</p>
<ul>
<pre>
- freetype255.lib - release build; single threaded
- freetype255_D.lib - debug build; single threaded
- freetype255MT.lib - release build; multi-threaded
- freetype255MT_D.lib - debug build; multi-threaded</pre>
+ freetype26.lib - release build; single threaded
+ freetype26_D.lib - debug build; single threaded
+ freetype26MT.lib - release build; multi-threaded
+ freetype26MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
diff --git a/freetype/builds/windows/visualce/freetype.dsp b/freetype/builds/windows/visualce/freetype.dsp
index cf76f7c2d..6f0310538 100644
--- a/freetype/builds/windows/visualce/freetype.dsp
+++ b/freetype/builds/windows/visualce/freetype.dsp
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug"
@@ -78,7 +78,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Multithreaded"
@@ -102,8 +102,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype255_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255MT_D.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype26_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT_D.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Multithreaded"
@@ -126,8 +126,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"lib\freetype255.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255MT.lib"
+# ADD BASE LIB32 /nologo /out:"lib\freetype26.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26MT.lib"
!ELSEIF "$(CFG)" == "freetype - Win32 Release Singlethreaded"
@@ -151,8 +151,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype255.lib"
-# ADD LIB32 /out:"..\..\..\objs\freetype255ST.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26.lib"
+# ADD LIB32 /out:"..\..\..\objs\freetype26ST.lib"
# SUBTRACT LIB32 /nologo
!ELSEIF "$(CFG)" == "freetype - Win32 Debug Singlethreaded"
@@ -177,8 +177,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype255_D.lib"
-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype255ST_D.lib"
+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype26_D.lib"
+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype26ST_D.lib"
!ENDIF
@@ -226,6 +226,10 @@ SOURCE=..\..\..\src\base\ftbitmap.c
# End Source File
# Begin Source File
+SOURCE=..\..\..\src\base\ftfntfmt.c
+# End Source File
+# Begin Source File
+
SOURCE=..\..\..\src\base\ftfstype.c
# End Source File
# Begin Source File
@@ -301,10 +305,6 @@ SOURCE=..\..\..\src\base\ftwinfnt.c
# End Source File
# Begin Source File
-SOURCE=..\..\..\src\base\ftxf86.c
-# End Source File
-# Begin Source File
-
SOURCE=..\..\..\src\pcf\pcf.c
# SUBTRACT CPP /Fr
# End Source File
diff --git a/freetype/builds/windows/visualce/freetype.vcproj b/freetype/builds/windows/visualce/freetype.vcproj
index e4cddfb0d..69a9e97e8 100644
--- a/freetype/builds/windows/visualce/freetype.vcproj
+++ b/freetype/builds/windows/visualce/freetype.vcproj
@@ -87,7 +87,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -162,7 +162,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -237,7 +237,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -309,7 +309,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -382,7 +382,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -456,7 +456,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -534,7 +534,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -619,7 +619,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -704,7 +704,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -785,7 +785,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -867,7 +867,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -950,7 +950,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1036,7 +1036,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1121,7 +1121,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1206,7 +1206,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1287,7 +1287,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1369,7 +1369,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1452,7 +1452,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1538,7 +1538,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1623,7 +1623,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1708,7 +1708,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -1789,7 +1789,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1871,7 +1871,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -1954,7 +1954,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2040,7 +2040,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2125,7 +2125,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2210,7 +2210,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -2291,7 +2291,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2373,7 +2373,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2456,7 +2456,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2542,7 +2542,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2627,7 +2627,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2712,7 +2712,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -2793,7 +2793,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2875,7 +2875,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -2958,7 +2958,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3044,7 +3044,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255.lib"
+ OutputFile="..\..\..\objs\freetype26.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3129,7 +3129,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT.lib"
+ OutputFile="..\..\..\objs\freetype26MT.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3214,7 +3214,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST.lib"
+ OutputFile="..\..\..\objs\freetype26ST.lib"
/>
<Tool
Name="VCALinkTool"
@@ -3295,7 +3295,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255_D.lib"
+ OutputFile="..\..\..\objs\freetype26_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3377,7 +3377,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255ST_D.lib"
+ OutputFile="..\..\..\objs\freetype26ST_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -3460,7 +3460,7 @@
/>
<Tool
Name="VCLibrarianTool"
- OutputFile="..\..\..\objs\freetype255MT_D.lib"
+ OutputFile="..\..\..\objs\freetype26MT_D.lib"
SuppressStartupBanner="true"
/>
<Tool
@@ -8262,6 +8262,10 @@
>
</File>
<File
+ RelativePath="..\..\..\src\base\ftfntfmt.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\src\base\ftmm.c"
>
<FileConfiguration
@@ -8705,10 +8709,6 @@
>
</File>
<File
- RelativePath="..\..\..\src\base\ftxf86.c"
- >
- </File>
- <File
RelativePath="..\..\..\src\base\ftlcdfil.c"
>
</File>
diff --git a/freetype/builds/windows/visualce/index.html b/freetype/builds/windows/visualce/index.html
index 68d15fd25..90334f536 100644
--- a/freetype/builds/windows/visualce/index.html
+++ b/freetype/builds/windows/visualce/index.html
@@ -21,14 +21,14 @@ the following targets:
<li>PPC/SP WM6 (Windows Mobile 6)</li>
</ul>
-It compiles the following libraries from the FreeType 2.5.5 sources:</p>
+It compiles the following libraries from the FreeType 2.6 sources:</p>
<ul>
<pre>
- freetype255.lib - release build; single threaded
- freetype255_D.lib - debug build; single threaded
- freetype255MT.lib - release build; multi-threaded
- freetype255MT_D.lib - debug build; multi-threaded</pre>
+ freetype26.lib - release build; single threaded
+ freetype26_D.lib - debug build; single threaded
+ freetype26MT.lib - release build; multi-threaded
+ freetype26MT_D.lib - debug build; multi-threaded</pre>
</ul>
<p>Be sure to extract the files with the Windows (CR+LF) line endings. ZIP
diff --git a/freetype/builds/windows/w32-bcc.mk b/freetype/builds/windows/w32-bcc.mk
index 87d8ea3c2..d483df57a 100644
--- a/freetype/builds/windows/w32-bcc.mk
+++ b/freetype/builds/windows/w32-bcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-bccd.mk b/freetype/builds/windows/w32-bccd.mk
index dd21eddac..bd72ca117 100644
--- a/freetype/builds/windows/w32-bccd.mk
+++ b/freetype/builds/windows/w32-bccd.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2006, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-dev.mk b/freetype/builds/windows/w32-dev.mk
index 356122947..11d1afd3f 100644
--- a/freetype/builds/windows/w32-dev.mk
+++ b/freetype/builds/windows/w32-dev.mk
@@ -5,7 +5,7 @@
#
-# Copyright 1996-2000, 2003, 2006, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-gcc.mk b/freetype/builds/windows/w32-gcc.mk
index 3bbdd3cc4..1092fb785 100644
--- a/freetype/builds/windows/w32-gcc.mk
+++ b/freetype/builds/windows/w32-gcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-icc.mk b/freetype/builds/windows/w32-icc.mk
index 44d26bd6c..b2dcbe59d 100644
--- a/freetype/builds/windows/w32-icc.mk
+++ b/freetype/builds/windows/w32-icc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-intl.mk b/freetype/builds/windows/w32-intl.mk
index 0f3e22bc3..de9912fa3 100644
--- a/freetype/builds/windows/w32-intl.mk
+++ b/freetype/builds/windows/w32-intl.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-lcc.mk b/freetype/builds/windows/w32-lcc.mk
index 8bd5b5685..75979f38d 100644
--- a/freetype/builds/windows/w32-lcc.mk
+++ b/freetype/builds/windows/w32-lcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-mingw32.mk b/freetype/builds/windows/w32-mingw32.mk
index b35dbb0c0..1300a44ac 100644
--- a/freetype/builds/windows/w32-mingw32.mk
+++ b/freetype/builds/windows/w32-mingw32.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-vcc.mk b/freetype/builds/windows/w32-vcc.mk
index 95f76858f..fcf1aa004 100644
--- a/freetype/builds/windows/w32-vcc.mk
+++ b/freetype/builds/windows/w32-vcc.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/w32-wat.mk b/freetype/builds/windows/w32-wat.mk
index e1ddf66e3..cc5eaf0a2 100644
--- a/freetype/builds/windows/w32-wat.mk
+++ b/freetype/builds/windows/w32-wat.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/builds/windows/win32-def.mk b/freetype/builds/windows/win32-def.mk
index 61af5df0f..516c5cd95 100644
--- a/freetype/builds/windows/win32-def.mk
+++ b/freetype/builds/windows/win32-def.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2006, 2013, 2014 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/configure b/freetype/configure
index 4d8a945a5..fd525816c 100644
--- a/freetype/configure
+++ b/freetype/configure
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright 2002-2006, 2008-2010, 2013 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/devel/ft2build.h b/freetype/devel/ft2build.h
index 6cc34b77b..8e9653dbd 100644
--- a/freetype/devel/ft2build.h
+++ b/freetype/devel/ft2build.h
@@ -4,7 +4,7 @@
/* */
/* FreeType 2 build and setup macros (development version). */
/* */
-/* Copyright 1996-2001, 2003, 2006, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/devel/ftoption.h b/freetype/devel/ftoption.h
index 10027bb54..ed63aa0cf 100644
--- a/freetype/devel/ftoption.h
+++ b/freetype/devel/ftoption.h
@@ -4,7 +4,7 @@
/* */
/* User-selectable configuration macros (specification only). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -378,10 +378,6 @@ FT_BEGIN_HEADER
/* The size in bytes of the render pool used by the scan-line converter */
/* to do all of its work. */
/* */
- /* This must be greater than 4KByte if you use FreeType to rasterize */
- /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
- /* allocation of the render pool. */
- /* */
#define FT_RENDER_POOL_SIZE 16384L
@@ -435,6 +431,8 @@ FT_BEGIN_HEADER
/* af_glyph_hints_dump_points */
/* af_glyph_hints_dump_segments */
/* af_glyph_hints_dump_edges */
+ /* af_glyph_hints_get_num_segments */
+ /* af_glyph_hints_get_segment_offset */
/* */
/* As an argument, they use another global variable: */
/* */
@@ -659,19 +657,6 @@ FT_BEGIN_HEADER
/*************************************************************************/
/* */
- /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
- /* bytecode interpreter with a huge switch statement, rather than a call */
- /* table. This results in smaller and faster code for a number of */
- /* architectures. */
- /* */
- /* Note however that on some compiler/processor combinations, undefining */
- /* this macro will generate faster, though larger, code. */
- /* */
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
- /*************************************************************************/
- /* */
/* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
/* TrueType glyph loader to use Apple's definition of how to handle */
/* component offsets in composite glyphs. */
@@ -684,7 +669,7 @@ FT_BEGIN_HEADER
/* fonts will not have them. */
/* */
/* http://www.microsoft.com/typography/otspec/glyf.htm */
- /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
/* */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
@@ -835,8 +820,10 @@ FT_BEGIN_HEADER
/* grid. To find out the optimal scaling and shifting value, various */
/* parameter combinations are tried and scored. */
/* */
- /* This experimental option is only active if the render mode is */
- /* FT_RENDER_MODE_LIGHT. */
+ /* This experimental option is active only if the rendering mode is */
+ /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
+ /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
+ /* information; by default it is switched off). */
/* */
#define AF_CONFIG_OPTION_USE_WARPER
diff --git a/freetype/docs/CHANGES b/freetype/docs/CHANGES
index bbc31104a..bc177cff6 100644
--- a/freetype/docs/CHANGES
+++ b/freetype/docs/CHANGES
@@ -1,4 +1,110 @@
+CHANGES BETWEEN 2.5.5 and 2.6
+
+ I. IMPORTANT CHANGES
+
+ - Behdad Esfahbod contributed code for improved thread-safety,
+ which results in the following model.
+
+ * An `FT_Face' object can only be safely used from one thread at
+ a time.
+
+ * An `FT_Library' object can now be used without modification
+ from multiple threads at the same time.
+
+ * `FT_Face' creation and destruction with the same `FT_Library'
+ object can only be done from one thread at a time.
+
+ One can use a single `FT_Library' object across threads as long
+ as a mutex lock is used around `FT_New_Face' and `FT_Done_Face'.
+ Any calls to `FT_Load_Glyph' and similar API are safe and do not
+ need the lock to be held as long as the same `FT_Face' is not
+ used from multiple threads at the same time.
+
+ - Thai script support has been added to the auto-hinter.
+
+ - Arabic script support has been added to the auto-hinter.
+
+ - Following OpenType version 1.7, advance widths and side bearing
+ values in CFFs (wrapped in an SFNT structure) are now always
+ taken from the `hmtx' table.
+
+ - Following OpenType version 1.7, the PostScript font name of a
+ CFF font (wrapped in an SFNT structure) is now always taken from
+ the `name' table. This is also true for OpenType Collections
+ (i.e., TTCs using CFFs subfonts instead of TTFs), where it may
+ have a significant difference.
+
+ - Fonts natively hinted for ClearType are now supported, properly
+ handling selector index 3 of the INSTCTRL bytecode instruction.
+
+ - Major improvements to the GX TrueType variation font handling.
+
+
+ II. MISCELLANEOUS
+
+ - A new auto-hinter property `warping' can switch on and off the
+ warping code if this experimental feature is compiled in (by
+ defining the AF_CONFIG_OPTION_USE_WARPER configuration option;
+ by default this option is now enabled but warping is switched
+ off).
+
+ The AF_CONFIG_OPTION_USE_WARPER option itself is an old feature,
+ available since 2006. Warping only works in `light'
+ auto-hinting mode. The idea of the code is to slightly scale
+ and shift a glyph along the non-hinted dimension (which is
+ usually the horizontal axis) so that as much of its segments are
+ aligned (more or less) to the grid. To find out a glyph's
+ optimal scaling and shifting value, various parameter
+ combinations are tried and scored.
+
+ See file `ftautoh.h' for more; the demo programs `ftdiff',
+ `ftview', and `ftgrid' can toggle warping with key `w'.
+
+ - Some fields in the `FTC_ImageTypeRec' structure have been
+ changed from signed to unsigned type, which better reflects the
+ actual usage. It is also an additional means to protect against
+ malformed input.
+
+ This change doesn't break the ABI; however, it might cause
+ compiler warnings.
+
+ - Function `FT_Bitmap_New' has been renamed to `FT_Bitmap_Init',
+ since this name better reflects its function. For backwards
+ compatibility, the old function name is still available.
+
+ - Function `FT_Get_X11_Font_Format' has been renamed to
+ `FT_Get_Font_Format', since this name better reflects its
+ function. For backwards compatibility, the old function name is
+ still available.
+
+ Additionally, the header file macro for this function has been
+ renamed to `FT_FONT_FORMATS_H' (the old name `FT_XFREE86_H' is
+ retained for backwards compatibility).
+
+ - Various improvements to the `ftgrid' demo program.
+
+ . It can now display GX and MM fonts while interactively
+ manipulating the axes (with keys F2, F3, and F4).
+
+ . Anti-aliasing rendering modes can now be selected (with keys
+ F5 and F6).
+
+ . The display of point numbers can be toggled with key `D'.
+
+ - Various improvements to the `ftdump' demo program.
+
+ . It now displays information on MM and GX variation axes.
+
+ . New command line option `-u' makes it output data in utf-8
+ encoding.
+
+ - The `ftmulti' demo program can now handle up to six MM or GX
+ axes.
+
+
+======================================================================
+
CHANGES BETWEEN 2.5.4 and 2.5.5
I. IMPORTANT BUG FIXES
@@ -4159,7 +4265,7 @@ Extensions support:
------------------------------------------------------------------------
-Copyright 2000-2013 by
+Copyright 2000-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/CUSTOMIZE b/freetype/docs/CUSTOMIZE
index dfadb4658..831edf679 100644
--- a/freetype/docs/CUSTOMIZE
+++ b/freetype/docs/CUSTOMIZE
@@ -138,7 +138,7 @@ IV. Overriding default configuration and module headers
----------------------------------------------------------------------
-Copyright 2003, 2005, 2006, 2012, 2013 by
+Copyright 2003-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/DEBUG b/freetype/docs/DEBUG
index d8c79d187..ab2c769ac 100644
--- a/freetype/docs/DEBUG
+++ b/freetype/docs/DEBUG
@@ -191,7 +191,7 @@ behaviour of FreeType at runtime.
------------------------------------------------------------------------
-Copyright 2002-2005, 2009, 2013 by
+Copyright 2002-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL b/freetype/docs/INSTALL
index 456b76d2b..193c5300a 100644
--- a/freetype/docs/INSTALL
+++ b/freetype/docs/INSTALL
@@ -75,8 +75,8 @@ II. Custom builds of the library
----------------------------------------------------------------------
-Copyright 2000-2008, 2010-2011, 2013
-by David Turner, Robert Wilhelm, and Werner Lemberg.
+Copyright 2000-2015 by
+David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
modified, and distributed under the terms of the FreeType project
diff --git a/freetype/docs/INSTALL.ANY b/freetype/docs/INSTALL.ANY
index 8aa394f1f..e7d6ddd18 100644
--- a/freetype/docs/INSTALL.ANY
+++ b/freetype/docs/INSTALL.ANY
@@ -39,6 +39,7 @@ I. Standard procedure
src/base/ftbdf.c -- optional, see <ftbdf.h>
src/base/ftbitmap.c -- optional, see <ftbitmap.h>
src/base/ftcid.c -- optional, see <ftcid.h>
+ src/base/ftfntfmt.c -- optional, see <ftfntfmt.h>
src/base/ftfstype.c -- optional
src/base/ftgasp.c -- optional, see <ftgasp.h>
src/base/ftgxval.c -- optional, see <ftgxval.h>
@@ -51,7 +52,6 @@ I. Standard procedure
src/base/ftsynth.c -- optional, see <ftsynth.h>
src/base/fttype1.c -- optional, see <t1tables.h>
src/base/ftwinfnt.c -- optional, see <ftwinfnt.h>
- src/base/ftxf86.c -- optional, see <ftxf86.h>
src/base/ftmac.c -- only on the Macintosh
@@ -103,9 +103,9 @@ I. Standard procedure
`type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c'
`type42.c' needs `truetype.c'
- To use `ftbzip2.c', an application must be linked with a library
- which implements bzip2 support (and the bzip2 header files must
- be available also during compilation).
+ Please consult the central `include/config/ftoption.h'
+ configuration file for details on additional libraries necessary
+ for some optional features.
Read the file `CUSTOMIZE' in case you want to compile only a subset
@@ -143,7 +143,7 @@ II. Support for flat-directory compilation
----------------------------------------------------------------------
-Copyright 2003, 2005, 2006, 2009, 2010, 2013 by
+Copyright 2003-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.CROSS b/freetype/docs/INSTALL.CROSS
index d372adcfe..a83638d64 100644
--- a/freetype/docs/INSTALL.CROSS
+++ b/freetype/docs/INSTALL.CROSS
@@ -163,8 +163,8 @@ procedure.
----------------------------------------------------------------------
-Copyright 2006, 2008, 2012, 2014 by suzuki toshiya
-David Turner, Robert Wilhelm, and Werner Lemberg.
+Copyright 2006-2015 by
+suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.GNU b/freetype/docs/INSTALL.GNU
index 3b9e0a2df..1a7c09797 100644
--- a/freetype/docs/INSTALL.GNU
+++ b/freetype/docs/INSTALL.GNU
@@ -148,7 +148,7 @@ instructions in the file `INSTALL.UNIX' instead.
----------------------------------------------------------------------
-Copyright 2003-2006, 2008, 2013, 2014 by
+Copyright 2003-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.UNIX b/freetype/docs/INSTALL.UNIX
index 251c749a3..0dab2c60a 100644
--- a/freetype/docs/INSTALL.UNIX
+++ b/freetype/docs/INSTALL.UNIX
@@ -102,7 +102,7 @@ or MSys on Win32:
----------------------------------------------------------------------
-Copyright 2003-2007, 2013, 2014 by
+Copyright 2003-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/INSTALL.VMS b/freetype/docs/INSTALL.VMS
index 994e56688..48a323eae 100644
--- a/freetype/docs/INSTALL.VMS
+++ b/freetype/docs/INSTALL.VMS
@@ -49,7 +49,7 @@ V7.2-1.
------------------------------------------------------------------------
-Copyright 2000, 2004 by
+Copyright 2000-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/TODO b/freetype/docs/TODO
index be60d6f04..43eeae349 100644
--- a/freetype/docs/TODO
+++ b/freetype/docs/TODO
@@ -27,7 +27,7 @@ Other bugs have been registered at the savannah bugzilla of FreeType.
------------------------------------------------------------------------
-Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 by
+Copyright 2001-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/VERSION.DLL b/freetype/docs/VERSION.DLL
index dd4926195..f219c9ac9 100644
--- a/freetype/docs/VERSION.DLL
+++ b/freetype/docs/VERSION.DLL
@@ -52,6 +52,7 @@ on _most_ systems, but not all of them:
release libtool so
-------------------------------
+ 2.6.0 18.0.12 6.12.0
2.5.5 17.4.11 6.11.4
2.5.4 17.3.11 6.11.3
2.5.3 17.2.11 6.11.2
@@ -115,7 +116,7 @@ other release numbers.
------------------------------------------------------------------------
-Copyright 2002-2014 by
+Copyright 2002-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/formats.txt b/freetype/docs/formats.txt
index aed885c89..243919850 100644
--- a/freetype/docs/formats.txt
+++ b/freetype/docs/formats.txt
@@ -122,8 +122,8 @@ MAC --- PS TYPE_1 --- type1 T1_SPEC.pdf
probably never supported)
---- --- WINFNT --- --- winfonts MS Windows 3 Developer's Notes
---- --- WINFNT VECTOR --- --- MS Windows 3 Developer's Notes
+--- --- WINFNT --- --- winfonts Windows developer's notes [5]
+--- --- WINFNT VECTOR --- --- Windows developer's notes [5]
[1] Support should be rather simple since this is identical to `CFF' but
@@ -159,9 +159,13 @@ MAC --- PS TYPE_1 --- type1 T1_SPEC.pdf
http://fontforge.sourceforge.net/pcf-format.html
+[5] This is from MS Windows 3; see Microsoft's Knowledge Base article at
+
+ http://support.microsoft.com/kb/65123
+
------------------------------------------------------------------------
-Copyright 2004, 2005, 2008, 2009, 2010 by
+Copyright 2004-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/freetype-config.1 b/freetype/docs/freetype-config.1
index 7b4a118f3..cdab34b51 100644
--- a/freetype/docs/freetype-config.1
+++ b/freetype/docs/freetype-config.1
@@ -1,4 +1,4 @@
-.TH FREETYPE-CONFIG 1 "December 2014" "FreeType 2.5.5"
+.TH FREETYPE-CONFIG 1 "June 2015" "FreeType 2.6"
.
.
.SH NAME
diff --git a/freetype/docs/raster.txt b/freetype/docs/raster.txt
index 95d9e2401..dc55d64e5 100644
--- a/freetype/docs/raster.txt
+++ b/freetype/docs/raster.txt
@@ -618,7 +618,7 @@ II. Rendering Technology
------------------------------------------------------------------------
-Copyright 2003, 2007 by
+Copyright 2003-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/docs/reference/ft2-auto_hinter.html b/freetype/docs/reference/ft2-auto_hinter.html
index 71dede419..d03fb9fbe 100644
--- a/freetype/docs/reference/ft2-auto_hinter.html
+++ b/freetype/docs/reference/ft2-auto_hinter.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>The auto-hinter</h1>
<h2>Synopsis</h2>
@@ -108,7 +108,7 @@
<tr><td><a href="#glyph-to-script-map">glyph-to-script-map</a></td><td><a href="#default-script">default-script</a></td></tr>
<tr><td><a href="#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</a></td><td><a href="#increase-x-height">increase-x-height</a></td></tr>
<tr><td><a href="#FT_Prop_GlyphToScriptMap">FT_Prop_GlyphToScriptMap</a></td><td><a href="#FT_Prop_IncreaseXHeight">FT_Prop_IncreaseXHeight</a></td></tr>
-<tr><td><a href="#fallback-script">fallback-script</a></td><td></td></tr>
+<tr><td><a href="#fallback-script">fallback-script</a></td><td><a href="#warping">warping</a></td></tr>
</table>
@@ -301,7 +301,7 @@
<h3 id="default-script">default-script</h3>
<p><b>Experimental</b> <b>only</b></p>
-<p>If Freetype gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make the HarfBuzz library access OpenType features for getting better glyph coverages, this property sets the (auto-fitter) script to be used for the default (OpenType) script data of a font's GSUB table. Features for the default script are intended for all scripts not explicitly handled in GSUB; an example is a &lsquo;dlig&rsquo; feature, containing the combination of the characters &lsquo;T&rsquo;, &lsquo;E&rsquo;, and &lsquo;L&rsquo; to form a &lsquo;TEL&rsquo; ligature.</p>
+<p>If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make the HarfBuzz library access OpenType features for getting better glyph coverages, this property sets the (auto-fitter) script to be used for the default (OpenType) script data of a font's GSUB table. Features for the default script are intended for all scripts not explicitly handled in GSUB; an example is a &lsquo;dlig&rsquo; feature, containing the combination of the characters &lsquo;T&rsquo;, &lsquo;E&rsquo;, and &lsquo;L&rsquo; to form a &lsquo;TEL&rsquo; ligature.</p>
<p>By default, this is <a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_LATIN</a>. Using the &lsquo;default-script&rsquo; property, this default value can be changed.</p>
<pre class="colored">
FT_Library library;
@@ -366,5 +366,31 @@
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
+<div class="section">
+<h3 id="warping">warping</h3>
+
+<p><b>Experimental</b> <b>only</b></p>
+<p>If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to activate the warp hinting code in the auto-hinter, this property switches warping on and off.</p>
+<p>Warping only works in &lsquo;light&rsquo; auto-hinting mode. The idea of the code is to slightly scale and shift a glyph along the non-hinted dimension (which is usually the horizontal axis) so that as much of its segments are aligned (more or less) to the grid. To find out a glyph's optimal scaling and shifting value, various parameter combinations are tried and scored.</p>
+<p>By default, warping is off. The example below shows how to switch on warping (omitting the error handling).</p>
+<pre class="colored">
+ FT_Library library;
+ FT_Bool warping = 1;
+
+
+ FT_Init_FreeType( &amp;library );
+
+ FT_Property_Set( library, "autofitter",
+ "warping", &amp;warping );
+</pre>
+
+<h4>note</h4>
+<p>This property can be used with <a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a> also.</p>
+<p>The warping code can also change advance widths. Have a look at the &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo; fields in the <a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a> structure for details on improving inter-glyph distances while rendering.</p>
+<p>Since warping is a global property of the auto-hinter it is best to change its value before rendering any face. Otherwise, you should reload all faces that get auto-hinted in &lsquo;light&rsquo; hinting mode.</p>
+
+<hr>
+<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
+
</body>
</html>
diff --git a/freetype/docs/reference/ft2-base_interface.html b/freetype/docs/reference/ft2-base_interface.html
index 4547b6f1c..132cd353b 100644
--- a/freetype/docs/reference/ft2-base_interface.html
+++ b/freetype/docs/reference/ft2-base_interface.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Base Interface</h1>
<h2>Synopsis</h2>
@@ -166,7 +166,7 @@
<p>A handle to a FreeType library instance. Each &lsquo;library&rsquo; is completely independent from the others; it is the &lsquo;root&rsquo; of a set of objects like fonts, faces, sizes, etc.</p>
<p>It also embeds a memory manager (see <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a>), as well as a scan-line converter object (see <a href="ft2-raster.html#FT_Raster">FT_Raster</a>).</p>
-<p>In multi-threaded applications, make sure that the same FT_Library object or any of its children doesn't get accessed in parallel.</p>
+<p>In multi-threaded applications it is easiest to use one &lsquo;FT_Library&rsquo; object per thread. In case this is too cumbersome, a single &lsquo;FT_Library&rsquo; object across threads is possible also (since FreeType version 2.5.6), as long as a mutex lock is used around <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> and <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a>.</p>
<h4>note</h4>
<p>Library objects are normally created by <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a>, and destroyed with <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a>. If you need reference-counting (cf. <a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a>), use <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> and <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a>.</p>
@@ -187,6 +187,7 @@
<p>Each face object also owns a single <a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a> object, as well as one or more <a href="ft2-base_interface.html#FT_Size">FT_Size</a> objects.</p>
<p>Use <a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a> or <a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a> to create a new face object from a given filepathname or a custom input stream.</p>
<p>Use <a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a> to destroy it (along with its slot and sizes).</p>
+<p>An &lsquo;FT_Face&rsquo; object can only be safely used from one thread at a time. Similarly, creation and destruction of &lsquo;FT_Face&rsquo; with the same <a href="ft2-base_interface.html#FT_Library">FT_Library</a> object can only be done from one thread at a time. On the other hand, functions like <a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a> and its siblings are thread-safe and do not need the lock to be held as long as the same &lsquo;FT_Face&rsquo; object is not used from multiple threads at the same time.</p>
<h4>also</h4>
<p>See <a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a> for the publicly accessible fields of a given face object.</p>
@@ -322,7 +323,8 @@
<p>For example, if you want to access Unicode value U+1F028 (and the font contains it), use value 0x1F028 as the input value for <a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a>.</p>
</td></tr>
<tr><td class="val" id="FT_ENCODING_MS_SYMBOL">FT_ENCODING_MS_SYMBOL</td><td class="desc">
-<p>Corresponds to the Microsoft Symbol encoding, used to encode mathematical symbols in the 32..255 character code range. For more information, see &lsquo;<a href="http://www.kostis.net/charsets/symbol.htm">http://www.kostis.net/charsets/symbol.htm</a>&rsquo;.</p>
+<p>Corresponds to the Microsoft Symbol encoding, used to encode mathematical symbols and wingdings. For more information, see &lsquo;<a href="http://www.microsoft.com/typography/otspec/recom.htm">http://www.microsoft.com/typography/otspec/recom.htm</a>&rsquo;, &lsquo;<a href="http://www.kostis.net/charsets/symbol.htm">http://www.kostis.net/charsets/symbol.htm</a>&rsquo;, and &lsquo;<a href="http://www.kostis.net/charsets/wingding.htm">http://www.kostis.net/charsets/wingding.htm</a>&rsquo;.</p>
+<p>This encoding uses character codes from the PUA (Private Unicode Area) in the range U+F020-U+F0FF.</p>
</td></tr>
<tr><td class="val" id="FT_ENCODING_SJIS">FT_ENCODING_SJIS</td><td class="desc">
<p>Corresponds to Japanese SJIS encoding. More info at at &lsquo;<a href="http://en.wikipedia.org/wiki/Shift_JIS">http://en.wikipedia.org/wiki/Shift_JIS</a>&rsquo;. See note on multi-byte encodings below.</p>
@@ -334,7 +336,7 @@
<p>Corresponds to an encoding system for Traditional Chinese as used in Taiwan and Hong Kong.</p>
</td></tr>
<tr><td class="val" id="FT_ENCODING_WANSUNG">FT_ENCODING_WANSUNG</td><td class="desc">
-<p>Corresponds to the Korean encoding system known as Wansung. For more information see &lsquo;<a href="http://msdn.microsoft.com/en-US/goglobal/cc305154">http://msdn.microsoft.com/en-US/goglobal/cc305154</a>&rsquo;.</p>
+<p>Corresponds to the Korean encoding system known as Wansung. For more information see &lsquo;<a href="https://msdn.microsoft.com/en-US/goglobal/cc305154">https://msdn.microsoft.com/en-US/goglobal/cc305154</a>&rsquo;.</p>
</td></tr>
<tr><td class="val" id="FT_ENCODING_JOHAB">FT_ENCODING_JOHAB</td><td class="desc">
<p>The Korean standard character set (KS&nbsp;C 5601-1992), which corresponds to MS Windows code page 1361. This character set includes all possible Hangeul character combinations.</p>
@@ -497,6 +499,7 @@
</td></tr>
<tr><td class="val" id="family_name">family_name</td><td class="desc">
<p>The face's family name. This is an ASCII string, usually in English, that describes the typeface's family (like &lsquo;Times New Roman&rsquo;, &lsquo;Bodoni&rsquo;, &lsquo;Garamond&rsquo;, etc). This is a least common denominator used to list fonts. Some formats (TrueType &amp; OpenType) provide localized and Unicode versions of this string. Applications should use the format specific interface to access them. Can be NULL (e.g., in fonts embedded in a PDF file).</p>
+<p>In case the font doesn't provide a specific family name entry, FreeType tries to synthesize one, deriving it from other name entries.</p>
</td></tr>
<tr><td class="val" id="style_name">style_name</td><td class="desc">
<p>The face's style name. This is an ASCII string, usually in English, that describes the typeface's style (like &lsquo;Italic&rsquo;, &lsquo;Bold&rsquo;, &lsquo;Condensed&rsquo;, etc). Not all font formats provide a style name, so this field is optional, and can be set to NULL. As for &lsquo;family_name&rsquo;, some formats provide localized and Unicode versions of this string. Applications should use the format specific interface to access them.</p>
@@ -915,10 +918,10 @@
<p>Really wicked formats can use this pointer to present their own glyph image to client applications. Note that the application needs to know about the image format.</p>
</td></tr>
<tr><td class="val" id="lsb_delta">lsb_delta</td><td class="desc">
-<p>The difference between hinted and unhinted left side bearing while autohinting is active. Zero otherwise.</p>
+<p>The difference between hinted and unhinted left side bearing while auto-hinting is active. Zero otherwise.</p>
</td></tr>
<tr><td class="val" id="rsb_delta">rsb_delta</td><td class="desc">
-<p>The difference between hinted and unhinted right side bearing while autohinting is active. Zero otherwise.</p>
+<p>The difference between hinted and unhinted right side bearing while auto-hinting is active. Zero otherwise.</p>
</td></tr>
</table>
@@ -929,7 +932,7 @@
<p>Note that &lsquo;slot-&gt;bitmap_left&rsquo; and &lsquo;slot-&gt;bitmap_top&rsquo; are also used to specify the position of the bitmap relative to the current pen position (e.g., coordinates (0,0) on the baseline). Of course, &lsquo;slot-&gt;format&rsquo; is also changed to <a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a>.</p>
<h4>note</h4>
-<p>Here a small pseudo code fragment that shows how to use &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo;:</p>
+<p>Here is a small pseudo code fragment that shows how to use &lsquo;lsb_delta&rsquo; and &lsquo;rsb_delta&rsquo;:</p>
<pre class="colored">
FT_Pos origin_x = 0;
FT_Pos prev_rsb_delta = 0;
@@ -1097,7 +1100,7 @@
<h4>note</h4>
<p>In case you want to provide your own memory allocating routines, use <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> instead, followed by a call to <a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a> (or a series of calls to <a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a>).</p>
-<p>For multi-threading applications each thread should have its own FT_Library object.</p>
+<p>See the documentation of <a href="ft2-base_interface.html#FT_Library">FT_Library</a> and <a href="ft2-base_interface.html#FT_Face">FT_Face</a> for multi-threading issues.</p>
<p>If you need reference-counting (cf. <a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a>), use <a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a> and <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a>.</p>
<hr>
@@ -2604,7 +2607,7 @@
</td></tr>
<tr><td class="val" id="FT_FACE_FLAG_TRICKY">FT_FACE_FLAG_TRICKY</td><td class="desc">
<p>Set if the font is &lsquo;tricky&rsquo;, this is, it always needs the font format's native hinting engine to get a reasonable result. A typical example is the Chinese font &lsquo;mingli.ttf&rsquo; that uses TrueType bytecode instructions to move and scale all of its subglyphs.</p>
-<p>It is not possible to autohint such fonts using <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>; it will also ignore <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a>. You have to set both <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> and <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a> to really disable hinting; however, you probably never want this except for demonstration purposes.</p>
+<p>It is not possible to auto-hint such fonts using <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a>; it will also ignore <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a>. You have to set both <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a> and <a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a> to really disable hinting; however, you probably never want this except for demonstration purposes.</p>
<p>Currently, there are about a dozen TrueType fonts in the list of tricky fonts; they are hard-coded in file &lsquo;ttobjs.c&rsquo;.</p>
</td></tr>
<tr><td class="val" id="FT_FACE_FLAG_COLOR">FT_FACE_FLAG_COLOR</td><td class="desc">
@@ -2893,7 +2896,7 @@
</pre>
<p>A list of bit flags used in the &lsquo;fsType&rsquo; field of the OS/2 table in a TrueType or OpenType font and the &lsquo;FSType&rsquo; entry in a PostScript font. These bit flags are returned by <a href="ft2-base_interface.html#FT_Get_FSType_Flags">FT_Get_FSType_Flags</a>; they inform client applications of embedding and subsetting restrictions associated with a font.</p>
-<p>See <a href="http://www.adobe.com/devnet/acrobat/pdfs/FontPolicies.pdf">http://www.adobe.com/devnet/acrobat/pdfs/FontPolicies.pdf</a> for more details.</p>
+<p>See <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf">http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf</a> for more details.</p>
<h4>values</h4>
<table class="fields">
diff --git a/freetype/docs/reference/ft2-basic_types.html b/freetype/docs/reference/ft2-basic_types.html
index e39573d5b..7fc35ed74 100644
--- a/freetype/docs/reference/ft2-basic_types.html
+++ b/freetype/docs/reference/ft2-basic_types.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Basic Data Types</h1>
<h2>Synopsis</h2>
@@ -723,9 +723,6 @@
</td></tr>
</table>
-<h4>note</h4>
-<p>For now, the only pixel modes supported by FreeType are mono and grays. However, drivers might be added in the future to support more &lsquo;colorful&rsquo; options.</p>
-
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
diff --git a/freetype/docs/reference/ft2-bdf_fonts.html b/freetype/docs/reference/ft2-bdf_fonts.html
index daf2307c0..4d7bc65e0 100644
--- a/freetype/docs/reference/ft2-bdf_fonts.html
+++ b/freetype/docs/reference/ft2-bdf_fonts.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>BDF and PCF Files</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-bitmap_handling.html b/freetype/docs/reference/ft2-bitmap_handling.html
index a0eec744f..9265e1666 100644
--- a/freetype/docs/reference/ft2-bitmap_handling.html
+++ b/freetype/docs/reference/ft2-bitmap_handling.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,12 +100,12 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Bitmap Handling</h1>
<h2>Synopsis</h2>
<table class="synopsis">
-<tr><td><a href="#FT_Bitmap_New">FT_Bitmap_New</a></td><td><a href="#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</a></td></tr>
+<tr><td><a href="#FT_Bitmap_Init">FT_Bitmap_Init</a></td><td><a href="#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</a></td></tr>
<tr><td><a href="#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td><a href="#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td><a href="#FT_Bitmap_Done">FT_Bitmap_Done</a></td></tr>
</table>
@@ -113,11 +113,16 @@
<p>This section contains functions for handling <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> objects. Note that none of the functions changes the bitmap's &lsquo;flow&rsquo; (as indicated by the sign of the &lsquo;pitch&rsquo; field in &lsquo;FT_Bitmap&rsquo;).</p>
<div class="section">
-<h3 id="FT_Bitmap_New">FT_Bitmap_New</h3>
+<h3 id="FT_Bitmap_Init">FT_Bitmap_Init</h3>
<p>Defined in FT_BITMAP_H (ftbitmap.h).</p>
<pre>
FT_EXPORT( <span class="keyword">void</span> )
- <b>FT_Bitmap_New</b>( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
+ <b>FT_Bitmap_Init</b>( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
+
+
+ /* deprecated */
+ FT_EXPORT( <span class="keyword">void</span> )
+ FT_Bitmap_New( <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *abitmap );
</pre>
<p>Initialize a pointer to an <a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> structure.</p>
@@ -129,6 +134,9 @@
</td></tr>
</table>
+<h4>note</h4>
+<p>A deprecated name for the same function is &lsquo;FT_Bitmap_New&rsquo;.</p>
+
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
@@ -290,7 +298,7 @@
<a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a> *bitmap );
</pre>
-<p>Destroy a bitmap object created with <a href="ft2-bitmap_handling.html#FT_Bitmap_New">FT_Bitmap_New</a>.</p>
+<p>Destroy a bitmap object initialized with <a href="ft2-bitmap_handling.html#FT_Bitmap_Init">FT_Bitmap_Init</a>.</p>
<h4>input</h4>
<table class="fields">
diff --git a/freetype/docs/reference/ft2-bzip2.html b/freetype/docs/reference/ft2-bzip2.html
index dc33973b1..6f3c136b7 100644
--- a/freetype/docs/reference/ft2-bzip2.html
+++ b/freetype/docs/reference/ft2-bzip2.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>BZIP2 Streams</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-cache_subsystem.html b/freetype/docs/reference/ft2-cache_subsystem.html
index 18650de7e..925b0fece 100644
--- a/freetype/docs/reference/ft2-cache_subsystem.html
+++ b/freetype/docs/reference/ft2-cache_subsystem.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Cache Sub-System</h1>
<h2>Synopsis</h2>
@@ -799,8 +799,8 @@
<span class="keyword">typedef</span> <span class="keyword">struct</span> FTC_ImageTypeRec_
{
<a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a> face_id;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> width;
- <a href="ft2-basic_types.html#FT_Int">FT_Int</a> height;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> width;
+ <a href="ft2-basic_types.html#FT_UInt">FT_UInt</a> height;
<a href="ft2-basic_types.html#FT_Int32">FT_Int32</a> flags;
} <b>FTC_ImageTypeRec</b>;
diff --git a/freetype/docs/reference/ft2-cff_driver.html b/freetype/docs/reference/ft2-cff_driver.html
index f1de5661a..0baea1e87 100644
--- a/freetype/docs/reference/ft2-cff_driver.html
+++ b/freetype/docs/reference/ft2-cff_driver.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>The CFF driver</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-cid_fonts.html b/freetype/docs/reference/ft2-cid_fonts.html
index cb0b506fe..2969d2915 100644
--- a/freetype/docs/reference/ft2-cid_fonts.html
+++ b/freetype/docs/reference/ft2-cid_fonts.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>CID Fonts</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-computations.html b/freetype/docs/reference/ft2-computations.html
index a7771ef41..a834c7587 100644
--- a/freetype/docs/reference/ft2-computations.html
+++ b/freetype/docs/reference/ft2-computations.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Computations</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-font_formats.html b/freetype/docs/reference/ft2-font_formats.html
index 508cee2a5..a0e5e5ebf 100644
--- a/freetype/docs/reference/ft2-font_formats.html
+++ b/freetype/docs/reference/ft2-font_formats.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,27 +100,32 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Font Formats</h1>
<h2>Synopsis</h2>
<table class="synopsis">
-<tr><td><a href="#FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></td><td></td><td></td></tr>
+<tr><td><a href="#FT_Get_Font_Format">FT_Get_Font_Format</a></td><td></td><td></td></tr>
</table>
<p>The single function in this section can be used to get the font format. Note that this information is not needed normally; however, there are special cases (like in PDF devices) where it is important to differentiate, in spite of FreeType's uniform API.</p>
-<p>This function is in the X11/xf86 namespace for historical reasons and in no way depends on that windowing system.</p>
<div class="section">
-<h3 id="FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</h3>
-<p>Defined in FT_XFREE86_H (ftxf86.h).</p>
+<h3 id="FT_Get_Font_Format">FT_Get_Font_Format</h3>
+<p>Defined in FT_FONT_FORMATS_H (ftfntfmt.h).</p>
<pre>
FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
- <b>FT_Get_X11_Font_Format</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+ <b>FT_Get_Font_Format</b>( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
+
+
+ /* deprecated */
+ FT_EXPORT( <span class="keyword">const</span> <span class="keyword">char</span>* )
+ FT_Get_X11_Font_Format( <a href="ft2-base_interface.html#FT_Face">FT_Face</a> face );
</pre>
-<p>Return a string describing the format of a given face, using values that can be used as an X11 FONT_PROPERTY. Possible values are &lsquo;TrueType&rsquo;, &lsquo;Type&nbsp;1&rsquo;, &lsquo;BDF&rsquo;, &lsquo;PCF&rsquo;, &lsquo;Type&nbsp;42&rsquo;, &lsquo;CID&nbsp;Type&nbsp;1&rsquo;, &lsquo;CFF&rsquo;, &lsquo;PFR&rsquo;, and &lsquo;Windows&nbsp;FNT&rsquo;.</p>
+<p>Return a string describing the format of a given face. Possible values are &lsquo;TrueType&rsquo;, &lsquo;Type&nbsp;1&rsquo;, &lsquo;BDF&rsquo;, &lsquo;PCF&rsquo;, &lsquo;Type&nbsp;42&rsquo;, &lsquo;CID&nbsp;Type&nbsp;1&rsquo;, &lsquo;CFF&rsquo;, &lsquo;PFR&rsquo;, and &lsquo;Windows&nbsp;FNT&rsquo;.</p>
+<p>The return value is suitable to be used as an X11 FONT_PROPERTY.</p>
<h4>input</h4>
<table class="fields">
@@ -132,6 +137,9 @@
<h4>return</h4>
<p>Font format string. NULL in case of error.</p>
+<h4>note</h4>
+<p>A deprecated name for the same function is &lsquo;FT_Get_X11_Font_Format&rsquo;.</p>
+
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
diff --git a/freetype/docs/reference/ft2-gasp_table.html b/freetype/docs/reference/ft2-gasp_table.html
index 3b56119a1..57fc01bfd 100644
--- a/freetype/docs/reference/ft2-gasp_table.html
+++ b/freetype/docs/reference/ft2-gasp_table.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Gasp Table</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-glyph_management.html b/freetype/docs/reference/ft2-glyph_management.html
index 017db1f1c..e7479cdfa 100644
--- a/freetype/docs/reference/ft2-glyph_management.html
+++ b/freetype/docs/reference/ft2-glyph_management.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Glyph Management</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-glyph_stroker.html b/freetype/docs/reference/ft2-glyph_stroker.html
index d5daa46c3..cb425a925 100644
--- a/freetype/docs/reference/ft2-glyph_stroker.html
+++ b/freetype/docs/reference/ft2-glyph_stroker.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Glyph Stroker</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-glyph_variants.html b/freetype/docs/reference/ft2-glyph_variants.html
index a19db11ea..7cef7f905 100644
--- a/freetype/docs/reference/ft2-glyph_variants.html
+++ b/freetype/docs/reference/ft2-glyph_variants.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Glyph Variants</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-gx_validation.html b/freetype/docs/reference/ft2-gx_validation.html
index ff2eef6ac..d80b44231 100644
--- a/freetype/docs/reference/ft2-gx_validation.html
+++ b/freetype/docs/reference/ft2-gx_validation.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>TrueTypeGX/AAT Validation</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-gzip.html b/freetype/docs/reference/ft2-gzip.html
index c7e5a84f3..6f2388b10 100644
--- a/freetype/docs/reference/ft2-gzip.html
+++ b/freetype/docs/reference/ft2-gzip.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>GZIP Streams</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-header_file_macros.html b/freetype/docs/reference/ft2-header_file_macros.html
index 35954db9a..7bfae5a93 100644
--- a/freetype/docs/reference/ft2-header_file_macros.html
+++ b/freetype/docs/reference/ft2-header_file_macros.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Header File Macros</h1>
<h2>Synopsis</h2>
@@ -123,7 +123,7 @@
<tr><td><a href="#FT_AUTOHINTER_H">FT_AUTOHINTER_H</a></td><td><a href="#FT_PFR_H">FT_PFR_H</a></td></tr>
<tr><td><a href="#FT_CFF_DRIVER_H">FT_CFF_DRIVER_H</a></td><td><a href="#FT_STROKER_H">FT_STROKER_H</a></td></tr>
<tr><td><a href="#FT_TRUETYPE_DRIVER_H">FT_TRUETYPE_DRIVER_H</a></td><td><a href="#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
-<tr><td><a href="#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td><td><a href="#FT_XFREE86_H">FT_XFREE86_H</a></td></tr>
+<tr><td><a href="#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td><td><a href="#FT_FONT_FORMATS_H">FT_FONT_FORMATS_H</a></td></tr>
<tr><td><a href="#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td><td><a href="#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
<tr><td><a href="#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td><td><a href="#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td></tr>
<tr><td><a href="#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td><td><a href="#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
@@ -635,12 +635,15 @@
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
<div class="section">
-<h3 id="FT_XFREE86_H">FT_XFREE86_H</h3>
+<h3 id="FT_FONT_FORMATS_H">FT_FONT_FORMATS_H</h3>
<pre>
-#define <b>FT_XFREE86_H</b> &lt;ftxf86.h&gt;
+#define <b>FT_FONT_FORMATS_H</b> &lt;ftfntfmt.h&gt;
+
+ /* deprecated */
+#define FT_XFREE86_H <b>FT_FONT_FORMATS_H</b>
</pre>
-<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which provides functions specific to the XFree86 and X.Org X11 servers.</p>
+<p>A macro used in #include statements to name the file containing the FreeType&nbsp;2 API which provides functions specific to font formats.</p>
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
diff --git a/freetype/docs/reference/ft2-header_inclusion.html b/freetype/docs/reference/ft2-header_inclusion.html
index 4171decb0..1fe4b45cf 100644
--- a/freetype/docs/reference/ft2-header_inclusion.html
+++ b/freetype/docs/reference/ft2-header_inclusion.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>FreeType's header inclusion scheme</h1>
diff --git a/freetype/docs/reference/ft2-incremental.html b/freetype/docs/reference/ft2-incremental.html
index 26225c255..187c7c69c 100644
--- a/freetype/docs/reference/ft2-incremental.html
+++ b/freetype/docs/reference/ft2-incremental.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Incremental Loading</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-index.html b/freetype/docs/reference/ft2-index.html
index 2e16e94a0..84289ac2c 100644
--- a/freetype/docs/reference/ft2-index.html
+++ b/freetype/docs/reference/ft2-index.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,282 +100,282 @@
<body>
<table class="index-toc-link"><tr><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<table class="index">
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_ATOM</a></td><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</a></td><td><a href="ft2-header_file_macros.html#FT_SYSTEM_H">FT_SYSTEM_H</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a></td><td><a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a></td><td><a href="ft2-basic_types.html#FT_Tag">FT_Tag</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a></td><td><a href="ft2-list_processing.html#FT_List">FT_List</a></td><td><a href="ft2-computations.html#FT_Tan">FT_Tan</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_NONE</a></td><td><a href="ft2-list_processing.html#FT_List_Add">FT_List_Add</a></td><td><a href="ft2-header_file_macros.html#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_Property">BDF_Property</a></td><td><a href="ft2-list_processing.html#FT_List_Destructor">FT_List_Destructor</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_DRIVER_H">FT_TRUETYPE_DRIVER_H</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a></td><td><a href="ft2-list_processing.html#FT_List_Finalize">FT_List_Finalize</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PropertyType</a></td><td><a href="ft2-list_processing.html#FT_List_Find">FT_List_Find</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a></td><td><a href="ft2-list_processing.html#FT_List_Insert">FT_List_Insert</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a></td><td><a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceInfo">CID_FaceInfo</a></td><td><a href="ft2-list_processing.html#FT_List_Iterator">FT_List_Iterator</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td><a href="ft2-list_processing.html#FT_List_Remove">FT_List_Remove</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_FontDict">CID_FontDict</a></td><td><a href="ft2-list_processing.html#FT_List_Up">FT_List_Up</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#CID_Info">CID_Info</a></td><td><a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td></tr>
-<tr><td><a href="ft2-cff_driver.html#darkening-parameters">darkening-parameters</a></td><td><a href="ft2-list_processing.html#FT_ListNodeRec">FT_ListNodeRec</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td></tr>
-<tr><td><a href="ft2-auto_hinter.html#default-script">default-script</a></td><td><a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a></td><td><a href="ft2-header_file_macros.html#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_COLOR</a></td><td><a href="ft2-header_file_macros.html#FT_TYPES_H">FT_TYPES_H</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_CROP_BITMAP</a></td><td><a href="ft2-basic_types.html#FT_UFWord">FT_UFWord</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a></td><td><a href="ft2-basic_types.html#FT_UInt">FT_UInt</a></td></tr>
-<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_XXX</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a></td><td><a href="ft2-basic_types.html#FT_UInt16">FT_UInt16</a></td></tr>
-<tr><td><a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a></td><td><a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a></td></tr>
-<tr><td><a href="ft2-quick_advance.html#FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a></td><td><a href="ft2-basic_types.html#FT_UInt64">FT_UInt64</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_ADVANCES_H">FT_ADVANCES_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a></td><td><a href="ft2-basic_types.html#FT_ULong">FT_ULong</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a></td><td><a href="ft2-header_file_macros.html#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a></td><td><a href="ft2-basic_types.html#FT_UnitVector">FT_UnitVector</a></td></tr>
-<tr><td><a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a></td><td><a href="ft2-basic_types.html#FT_UShort">FT_UShort</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_PEDANTIC</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Angle">FT_Angle</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Angle_Diff">FT_Angle_Diff</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Atan2">FT_Atan2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD_V</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Attach_File">FT_Attach_File</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_AUTOHINTER_H">FT_AUTOHINTER_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GX</a></td></tr>
-<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_CJK</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td></tr>
-<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_INDIC</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td></tr>
-<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_LATIN</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a></td></tr>
-<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_NONE</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a></td></tr>
-<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</a></td><td><a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BBOX_H">FT_BBOX_H</a></td><td><a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_BBox">FT_BBox</a></td><td><a href="ft2-truetype_tables.html#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BDF_H">FT_BDF_H</a></td><td><a href="ft2-basic_types.html#FT_Long">FT_Long</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BITMAP_H">FT_BITMAP_H</a></td><td><a href="ft2-header_file_macros.html#FT_LZW_H">FT_LZW_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a></td><td><a href="ft2-header_file_macros.html#FT_MAC_H">FT_MAC_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td><a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OT</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td><a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a></td><td><a href="ft2-computations.html#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="ft2-computations.html#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_New">FT_Bitmap_New</a></td><td><a href="ft2-system_interface.html#FT_Memory">FT_Memory</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td><a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Named_Style">FT_Var_Named_Style</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a></td><td><a href="ft2-basic_types.html#FT_Vector">FT_Vector</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bool">FT_Bool</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td><a href="ft2-computations.html#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Byte">FT_Byte</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_H">FT_MODULE_H</a></td><td><a href="ft2-computations.html#FT_Vector_Length">FT_Vector_Length</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a></td><td><a href="ft2-module_management.html#FT_Module">FT_Module</a></td><td><a href="ft2-computations.html#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_BZIP2_H">FT_BZIP2_H</a></td><td><a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a></td><td><a href="ft2-computations.html#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></td><td><a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a></td><td><a href="ft2-computations.html#FT_Vector_Transform">FT_Vector_Transform</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a></td><td><a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a></td><td><a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></td><td><a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a></td><td><a href="ft2-header_file_macros.html#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></td><td><a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_Header">FT_WinFNT_Header</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_CeilFix">FT_CeilFix</a></td><td><a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CFF_DRIVER_H">FT_CFF_DRIVER_H</a></td><td><a href="ft2-computations.html#FT_MulFix">FT_MulFix</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1250</a></td></tr>
-<tr><td><a href="ft2-cff_driver.html#FT_CFF_HINTING_XXX">FT_CFF_HINTING_ADOBE</a></td><td><a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a></td></tr>
-<tr><td><a href="ft2-cff_driver.html#FT_CFF_HINTING_XXX">FT_CFF_HINTING_FREETYPE</a></td><td><a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1252</a></td></tr>
-<tr><td><a href="ft2-cff_driver.html#FT_CFF_HINTING_XXX">FT_CFF_HINTING_XXX</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1253</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Char">FT_Char</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1254</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1255</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a></td><td><a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1256</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</a></td><td><a href="ft2-base_interface.html#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1257</a></td></tr>
-<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td><td><a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1258</a></td></tr>
-<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td><a href="ft2-basic_types.html#FT_Offset">FT_Offset</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1361</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP874</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP932</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP936</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP949</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_Cos">FT_Cos</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP950</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Data">FT_Data</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_XXX</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_DEFAULT</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_DivFix">FT_DivFix</a></td><td><a href="ft2-header_file_macros.html#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_MAC</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a></td><td><a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_OEM</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a></td><td><a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_SYMBOL</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Free">FT_OpenType_Free</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td><a href="ft2-header_file_macros.html#FT_XFREE86_H">FT_XFREE86_H</a></td></tr>
-<tr><td><a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_LEFT</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Driver">FT_Driver</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_RIGHT</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a></td><td><a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a></td><td><a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_EVEN_ODD_FILL</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a></td><td><a href="ft2-header_file_macros.html#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_HIGH_PRECISION</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_New">FTC_ImageCache_New</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_INCLUDE_STUBS</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_OWNER</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Done">FTC_Manager_Done</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_REVERSE_FILL</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SINGLE_PASS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SMART_DROPOUTS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_XXX</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a></td><td><a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Reset">FTC_Manager_Reset</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Check">FT_Outline_Check</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Copy">FT_Outline_Copy</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Decompose">FT_Outline_Decompose</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_ERRORS_H">FT_ERRORS_H</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Done">FT_Outline_Done</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Error">FT_Error</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a></td><td><a href="ft2-outline_processing.html#FT_Outline_EmboldenXY">FT_Outline_EmboldenXY</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Funcs">FT_Outline_Funcs</a></td><td><a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td><a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_COLOR</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td><td><a href="ft2-auto_hinter.html#fallback-script">fallback-script</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_EXTERNAL_STREAM</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td><td><a href="ft2-auto_hinter.html#glyph-to-script-map">glyph-to-script-map</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FAST_GLYPHS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td><td><a href="ft2-cff_driver.html#hinting-engine">hinting-engine</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td><a href="ft2-auto_hinter.html#increase-x-height">increase-x-height</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td><a href="ft2-tt_driver.html#interpreter-version">interpreter-version</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a></td><td><a href="ft2-outline_processing.html#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td><td><a href="ft2-cff_driver.html#no-stem-darkening">no-stem-darkening</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a></td><td><a href="ft2-outline_processing.html#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_FUZZ</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a></td><td><a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_SCALE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_SHIFT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_VALUE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Transform">FT_Outline_Transform</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_CHAR_STRING</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_CHAR_STRING_KEY</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_TRICKY</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ENCODING_ENTRY</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ENCODING_TYPE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td><td><a href="ft2-sfnt_names.html#FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY">FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_BLUE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Face">FT_Face</a></td><td><a href="ft2-sfnt_names.html#FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY">FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_NAME</a></td></tr>
-<tr><td><a href="ft2-version.html#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td><td><a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_OTHER_BLUE</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td><td><a href="ft2-truetype_tables.html#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_BBOX</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td><a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_MATRIX</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td><a href="ft2-header_file_macros.html#FT_PFR_H">FT_PFR_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_NAME</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_BGRA</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_TYPE</a></td></tr>
-<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FORCE_BOLD</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FS_TYPE</a></td></tr>
-<tr><td><a href="ft2-version.html#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FULL_NAME</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_IS_FIXED_PITCH</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ITALIC_ANGLE</a></td></tr>
-<tr><td><a href="ft2-computations.html#FT_FloorFix">FT_FloorFix</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_LANGUAGE_GROUP</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_LEN_IV</a></td></tr>
-<tr><td><a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_MIN_FEATURE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</a></td><td><a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NOTICE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_EDITABLE_EMBEDDING</a></td><td><a href="ft2-basic_types.html#FT_Pos">FT_Pos</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_BLUE_VALUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_INSTALLABLE_EMBEDDING</a></td><td><a href="ft2-auto_hinter.html#FT_Prop_GlyphToScriptMap">FT_Prop_GlyphToScriptMap</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_CHAR_STRINGS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_NO_SUBSETTING</a></td><td><a href="ft2-auto_hinter.html#FT_Prop_IncreaseXHeight">FT_Prop_IncreaseXHeight</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_FAMILY_BLUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</a></td><td><a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_FAMILY_OTHER_BLUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</a></td><td><a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_OTHER_BLUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_XXX</a></td><td><a href="ft2-basic_types.html#FT_PtrDist">FT_PtrDist</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_STEM_SNAP_H</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_FWord">FT_FWord</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_STEM_SNAP_V</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_SUBRS</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_OTHER_BLUE</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GASP_H">FT_GASP_H</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_PAINT_TYPE</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_PASSWORD</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_GRIDFIT</a></td><td><a href="ft2-raster.html#FT_Raster">FT_Raster</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_RND_STEM_UP</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_SMOOTHING</a></td><td><a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STD_HW</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_XXX</a></td><td><a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STD_VW</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Generic">FT_Generic</a></td><td><a href="ft2-raster.html#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STEM_SNAP_H</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td><td><a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STEM_SNAP_V</a></td></tr>
-<tr><td><a href="ft2-quick_advance.html#FT_Get_Advance">FT_Get_Advance</a></td><td><a href="ft2-raster.html#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_SUBR</a></td></tr>
-<tr><td><a href="ft2-quick_advance.html#FT_Get_Advances">FT_Get_Advances</a></td><td><a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNDERLINE_POSITION</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td><a href="ft2-raster.html#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNDERLINE_THICKNESS</a></td></tr>
-<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td><td><a href="ft2-raster.html#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNIQUE_ID</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a></td><td><a href="ft2-raster.html#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_VERSION</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td><td><a href="ft2-header_file_macros.html#FT_RENDER_H">FT_RENDER_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_WEIGHT</a></td></tr>
-<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_From_Glyph_Index">FT_Get_CID_From_Glyph_Index</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_Dict_Keys</a></td></tr>
-<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Is_Internally_CID_Keyed">FT_Get_CID_Is_Internally_CID_Keyed</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a></td><td><a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</a></td></tr>
-<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a></td><td><a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a></td></tr>
-<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a></td><td><a href="ft2-type1_tables.html#PS_Private">PS_Private</a></td></tr>
-<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a></td><td><a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_First_Char">FT_Get_First_Char</a></td><td><a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_SCALE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_FSType_Flags">FT_Get_FSType_Flags</a></td><td><a href="ft2-base_interface.html#FT_Reference_Face">FT_Reference_Face</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_SHIFT</a></td></tr>
-<tr><td><a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a></td><td><a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_VALUES</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Get_Glyph">FT_Get_Glyph</a></td><td><a href="ft2-module_management.html#FT_Remove_Module">FT_Remove_Module</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FAMILY_BLUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td><td><a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FAMILY_OTHER_BLUES</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FORCE_BOLD</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_MM_Var">FT_Get_MM_Var</a></td><td><a href="ft2-module_management.html#FT_Renderer">FT_Renderer</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_ITALIC_ANGLE</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Get_Module">FT_Get_Module</a></td><td><a href="ft2-module_management.html#FT_Renderer_Class">FT_Renderer_Class</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_OTHER_BLUES</a></td></tr>
-<tr><td><a href="ft2-multiple_masters.html#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td><a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STANDARD_HEIGHT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Name_Index">FT_Get_Name_Index</a></td><td><a href="ft2-computations.html#FT_RoundFix">FT_RoundFix</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STANDARD_WIDTH</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a></td><td><a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STEM_SNAP_HEIGHTS</a></td></tr>
-<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td><td><a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STEM_SNAP_WIDTHS</a></td></tr>
-<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td><a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_UNDERLINE_POSITION</a></td></tr>
-<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_UNDERLINE_THICKNESS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td><td><a href="ft2-module_management.html#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_Blend_Flags</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_ARRAY</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_EXPERT</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Value">FT_Get_PS_Font_Value</a></td><td><a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_ISOLATIN1</a></td></tr>
-<tr><td><a href="ft2-module_management.html#FT_Get_Renderer">FT_Get_Renderer</a></td><td><a href="ft2-module_management.html#FT_Set_Renderer">FT_Set_Renderer</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_NONE</a></td></tr>
-<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td><td><a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_STANDARD</a></td></tr>
-<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_EncodingType</a></td></tr>
-<tr><td><a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_FontInfo">T1_FontInfo</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_HEAD</a></td><td><a href="ft2-type1_tables.html#T1_Private">T1_Private</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_HHEA</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_CUSTOM</a></td></tr>
-<tr><td><a href="ft2-truetype_engine.html#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_MAXP</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_EXPERT</a></td></tr>
-<tr><td><a href="ft2-winfnt_fonts.html#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td><a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a></td></tr>
-<tr><td><a href="ft2-font_formats.html#FT_Get_X11_Font_Format">FT_Get_X11_Font_Format</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_OS2</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a></td></tr>
-<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_PCLT</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_POST</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_DEFAULT</a></td></tr>
-<tr><td><a href="ft2-mac_specific.html#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_VHEA</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_ISO_10646</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a></td><td><a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_32</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a></td><td><a href="ft2-basic_types.html#FT_Short">FT_Short</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_CELL</a></td><td><a href="ft2-truetype_tables.html#TT_Header">TT_Header</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_NOMINAL</a></td><td><a href="ft2-truetype_tables.html#TT_HoriHeader">TT_HoriHeader</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a></td><td><a href="ft2-tt_driver.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_35</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_SCALES</a></td><td><a href="ft2-tt_driver.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_38</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a></td><td><a href="ft2-header_file_macros.html#FT_SIZES_H">FT_SIZES_H</a></td><td><a href="ft2-tt_driver.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_XXX</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GLYPH_H">FT_GLYPH_H</a></td><td><a href="ft2-computations.html#FT_Sin">FT_Sin</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_10646</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a></td><td><a href="ft2-base_interface.html#FT_Size">FT_Size</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_7BIT_ASCII</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td><a href="ft2-base_interface.html#FT_Size_Internal">FT_Size_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_8859_1</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td><a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a></td><td><a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARMENIAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BENGALI</a></td></tr>
-<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td><td><a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BURMESE</a></td></tr>
-<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td><td><a href="ft2-base_interface.html#FT_Slot_Internal">FT_Slot_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_DEVANAGARI</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td><td><a href="ft2-raster.html#FT_Span">FT_Span</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEEZ</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td><a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEORGIAN</a></td></tr>
-<tr><td><a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GREEK</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GUJARATI</a></td></tr>
-<tr><td><a href="ft2-bitmap_handling.html#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</a></td><td><a href="ft2-header_file_macros.html#FT_STROKER_H">FT_STROKER_H</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GURMUKHI</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_BUTT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_HEBREW</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_JAPANESE</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_GZIP_H">FT_GZIP_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_SQUARE</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KANNADA</a></td></tr>
-<tr><td><a href="ft2-gzip.html#FT_Gzip_Uncompress">FT_Gzip_Uncompress</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_BEVEL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KHMER</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_COLOR">FT_HAS_COLOR</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KOREAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER_FIXED</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_LAOTIAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER_VARIABLE</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALAYALAM</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALDIVIAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_BOLD</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MONGOLIAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_ITALIC</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ORIYA</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td><a href="ft2-system_interface.html#FT_Stream">FT_Stream</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RSYMBOL</a></td></tr>
-<tr><td><a href="ft2-type1_tables.html#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td><td><a href="ft2-system_interface.html#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RUSSIAN</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_IMAGE_H">FT_IMAGE_H</a></td><td><a href="ft2-system_interface.html#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SIMPLIFIED_CHINESE</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td><td><a href="ft2-bzip2.html#FT_Stream_OpenBzip2">FT_Stream_OpenBzip2</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINDHI</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td><td><a href="ft2-gzip.html#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINHALESE</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a></td><td><a href="ft2-lzw.html#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SLAVIC</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td><a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TAMIL</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td><td><a href="ft2-system_interface.html#FT_StreamRec">FT_StreamRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TELUGU</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td><a href="ft2-basic_types.html#FT_String">FT_String</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_THAI</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TIBETAN</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TRADITIONAL_CHINESE</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_UNINTERP</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_VIETNAMESE</a></td></tr>
-<tr><td><a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Done">FT_Stroker_Done</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MaxProfile">TT_MaxProfile</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int">FT_Int</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_BIG_5</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int16">FT_Int16</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_GB2312</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int32">FT_Int32</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_JOHAB</a></td></tr>
-<tr><td><a href="ft2-basic_types.html#FT_Int64">FT_Int64</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SJIS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UCS_4</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_SFNT">FT_IS_SFNT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_New">FT_Stroker_New</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_WANSUNG</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_IS_TRICKY">FT_IS_TRICKY</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td><a href="ft2-truetype_tables.html#TT_OS2">TT_OS2</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Set">FT_Stroker_Set</a></td><td><a href="ft2-truetype_tables.html#TT_PCLT">TT_PCLT</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a></td></tr>
-<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_Kerning_Mode</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_SCALE</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td><td><a href="ft2-truetype_tables.html#TT_Postscript">TT_Postscript</a></td></tr>
-<tr><td><a href="ft2-header_file_macros.html#FT_LIST_H">FT_LIST_H</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XY_SCALE</a></td><td><a href="ft2-truetype_tables.html#TT_VertHeader">TT_VertHeader</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_ATOM</a></td><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td><a href="ft2-header_file_macros.html#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_CARDINAL</a></td><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilterWeights">FT_Library_SetLcdFilterWeights</a></td><td><a href="ft2-header_file_macros.html#FT_SYSTEM_H">FT_SYSTEM_H</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_INTEGER</a></td><td><a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a></td><td><a href="ft2-basic_types.html#FT_Tag">FT_Tag</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PROPERTY_TYPE_NONE</a></td><td><a href="ft2-list_processing.html#FT_List">FT_List</a></td><td><a href="ft2-computations.html#FT_Tan">FT_Tan</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_Property">BDF_Property</a></td><td><a href="ft2-list_processing.html#FT_List_Add">FT_List_Add</a></td><td><a href="ft2-header_file_macros.html#FT_TRIGONOMETRY_H">FT_TRIGONOMETRY_H</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyRec">BDF_PropertyRec</a></td><td><a href="ft2-list_processing.html#FT_List_Destructor">FT_List_Destructor</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_DRIVER_H">FT_TRUETYPE_DRIVER_H</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#BDF_PropertyType">BDF_PropertyType</a></td><td><a href="ft2-list_processing.html#FT_List_Finalize">FT_List_Finalize</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_NONE</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceDict">CID_FaceDict</a></td><td><a href="ft2-list_processing.html#FT_List_Find">FT_List_Find</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_PATENTED</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceDictRec">CID_FaceDictRec</a></td><td><a href="ft2-list_processing.html#FT_List_Insert">FT_List_Insert</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TRUETYPE_ENGINE_TYPE_UNPATENTED</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceInfo">CID_FaceInfo</a></td><td><a href="ft2-list_processing.html#FT_List_Iterate">FT_List_Iterate</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_IDS_H">FT_TRUETYPE_IDS_H</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FaceInfoRec">CID_FaceInfoRec</a></td><td><a href="ft2-list_processing.html#FT_List_Iterator">FT_List_Iterator</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TABLES_H">FT_TRUETYPE_TABLES_H</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_FontDict">CID_FontDict</a></td><td><a href="ft2-list_processing.html#FT_List_Remove">FT_List_Remove</a></td><td><a href="ft2-header_file_macros.html#FT_TRUETYPE_TAGS_H">FT_TRUETYPE_TAGS_H</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#CID_Info">CID_Info</a></td><td><a href="ft2-list_processing.html#FT_List_Up">FT_List_Up</a></td><td><a href="ft2-truetype_engine.html#FT_TrueTypeEngineType">FT_TrueTypeEngineType</a></td></tr>
+<tr><td><a href="ft2-cff_driver.html#darkening-parameters">darkening-parameters</a></td><td><a href="ft2-list_processing.html#FT_ListNode">FT_ListNode</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Free">FT_TrueTypeGX_Free</a></td></tr>
+<tr><td><a href="ft2-auto_hinter.html#default-script">default-script</a></td><td><a href="ft2-list_processing.html#FT_ListNodeRec">FT_ListNodeRec</a></td><td><a href="ft2-gx_validation.html#FT_TrueTypeGX_Validate">FT_TrueTypeGX_Validate</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MAJOR</a></td><td><a href="ft2-list_processing.html#FT_ListRec">FT_ListRec</a></td><td><a href="ft2-header_file_macros.html#FT_TYPE1_TABLES_H">FT_TYPE1_TABLES_H</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_MINOR</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_COLOR</a></td><td><a href="ft2-header_file_macros.html#FT_TYPES_H">FT_TYPES_H</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_PATCH</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_CROP_BITMAP</a></td><td><a href="ft2-basic_types.html#FT_UFWord">FT_UFWord</a></td></tr>
+<tr><td><a href="ft2-version.html#FREETYPE_XXX">FREETYPE_XXX</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_DEFAULT</a></td><td><a href="ft2-basic_types.html#FT_UInt">FT_UInt</a></td></tr>
+<tr><td><a href="ft2-sizes_management.html#FT_Activate_Size">FT_Activate_Size</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_FORCE_AUTOHINT</a></td><td><a href="ft2-basic_types.html#FT_UInt16">FT_UInt16</a></td></tr>
+<tr><td><a href="ft2-quick_advance.html#FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH</a></td><td><a href="ft2-basic_types.html#FT_UInt32">FT_UInt32</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_ADVANCES_H">FT_ADVANCES_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_IGNORE_TRANSFORM</a></td><td><a href="ft2-basic_types.html#FT_UInt64">FT_UInt64</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_LINEAR_DESIGN</a></td><td><a href="ft2-basic_types.html#FT_ULong">FT_ULong</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_MONOCHROME</a></td><td><a href="ft2-header_file_macros.html#FT_UNPATENTED_HINTING_H">FT_UNPATENTED_HINTING_H</a></td></tr>
+<tr><td><a href="ft2-system_interface.html#FT_Alloc_Func">FT_Alloc_Func</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_AUTOHINT</a></td><td><a href="ft2-basic_types.html#FT_UnitVector">FT_UnitVector</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_2PI">FT_ANGLE_2PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_BITMAP</a></td><td><a href="ft2-basic_types.html#FT_UShort">FT_UShort</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_PI">FT_ANGLE_PI</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_HINTING</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_APPLE</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_PI2">FT_ANGLE_PI2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_RECURSE</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_BASE</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_ANGLE_PI4">FT_ANGLE_PI4</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_NO_SCALE</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_bsln</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Angle">FT_Angle</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_PEDANTIC</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERN</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Angle_Diff">FT_Angle_Diff</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_RENDER</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_CKERNXXX</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Atan2">FT_Atan2</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_feat</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Attach_File">FT_Attach_File</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LCD_V</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GDEF</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Attach_Stream">FT_Attach_Stream</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_LIGHT</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GPOS</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_AUTOHINTER_H">FT_AUTOHINTER_H</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_MODE">FT_LOAD_TARGET_MODE</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_GSUB</a></td></tr>
+<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_CJK</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_MONO</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GX</a></td></tr>
+<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_INDIC</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_NORMAL</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GX_LENGTH">FT_VALIDATE_GX_LENGTH</a></td></tr>
+<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_LATIN</a></td><td><a href="ft2-base_interface.html#FT_LOAD_TARGET_XXX">FT_LOAD_TARGET_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_GXXXX</a></td></tr>
+<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_NONE</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_VERTICAL_LAYOUT</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_JSTF</a></td></tr>
+<tr><td><a href="ft2-auto_hinter.html#FT_AUTOHINTER_SCRIPT_XXX">FT_AUTOHINTER_SCRIPT_XXX</a></td><td><a href="ft2-base_interface.html#FT_LOAD_XXX">FT_LOAD_XXX</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_just</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BBOX_H">FT_BBOX_H</a></td><td><a href="ft2-base_interface.html#FT_Load_Char">FT_Load_Char</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_kern</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_BBox">FT_BBox</a></td><td><a href="ft2-base_interface.html#FT_Load_Glyph">FT_Load_Glyph</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_lcar</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BDF_H">FT_BDF_H</a></td><td><a href="ft2-truetype_tables.html#FT_Load_Sfnt_Table">FT_Load_Sfnt_Table</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_MATH</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BITMAP_H">FT_BITMAP_H</a></td><td><a href="ft2-basic_types.html#FT_Long">FT_Long</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_CKERNXXX">FT_VALIDATE_MS</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Bitmap">FT_Bitmap</a></td><td><a href="ft2-header_file_macros.html#FT_LZW_H">FT_LZW_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_mort</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Convert">FT_Bitmap_Convert</a></td><td><a href="ft2-header_file_macros.html#FT_MAC_H">FT_MAC_H</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_morx</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Copy">FT_Bitmap_Copy</a></td><td><a href="ft2-basic_types.html#FT_MAKE_TAG">FT_MAKE_TAG</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OT</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Done">FT_Bitmap_Done</a></td><td><a href="ft2-basic_types.html#FT_Matrix">FT_Matrix</a></td><td><a href="ft2-ot_validation.html#FT_VALIDATE_OTXXX">FT_VALIDATE_OTXXX</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Embolden">FT_Bitmap_Embolden</a></td><td><a href="ft2-computations.html#FT_Matrix_Invert">FT_Matrix_Invert</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_opbd</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_Bitmap_Init">FT_Bitmap_Init</a></td><td><a href="ft2-computations.html#FT_Matrix_Multiply">FT_Matrix_Multiply</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_prop</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Bitmap_Size">FT_Bitmap_Size</a></td><td><a href="ft2-system_interface.html#FT_Memory">FT_Memory</a></td><td><a href="ft2-gx_validation.html#FT_VALIDATE_GXXXX">FT_VALIDATE_trak</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyph">FT_BitmapGlyph</a></td><td><a href="ft2-system_interface.html#FT_MemoryRec">FT_MemoryRec</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Axis">FT_Var_Axis</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_BitmapGlyphRec">FT_BitmapGlyphRec</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Axis">FT_MM_Axis</a></td><td><a href="ft2-multiple_masters.html#FT_Var_Named_Style">FT_Var_Named_Style</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Bool">FT_Bool</a></td><td><a href="ft2-multiple_masters.html#FT_MM_Var">FT_MM_Var</a></td><td><a href="ft2-basic_types.html#FT_Vector">FT_Vector</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Byte">FT_Byte</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_ERRORS_H">FT_MODULE_ERRORS_H</a></td><td><a href="ft2-computations.html#FT_Vector_From_Polar">FT_Vector_From_Polar</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Bytes">FT_Bytes</a></td><td><a href="ft2-header_file_macros.html#FT_MODULE_H">FT_MODULE_H</a></td><td><a href="ft2-computations.html#FT_Vector_Length">FT_Vector_Length</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_BZIP2_H">FT_BZIP2_H</a></td><td><a href="ft2-module_management.html#FT_Module">FT_Module</a></td><td><a href="ft2-computations.html#FT_Vector_Polarize">FT_Vector_Polarize</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_CHARMAP_H">FT_CACHE_CHARMAP_H</a></td><td><a href="ft2-module_management.html#FT_Module_Class">FT_Module_Class</a></td><td><a href="ft2-computations.html#FT_Vector_Rotate">FT_Vector_Rotate</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_H">FT_CACHE_H</a></td><td><a href="ft2-module_management.html#FT_Module_Constructor">FT_Module_Constructor</a></td><td><a href="ft2-computations.html#FT_Vector_Transform">FT_Vector_Transform</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_IMAGE_H">FT_CACHE_IMAGE_H</a></td><td><a href="ft2-module_management.html#FT_Module_Destructor">FT_Module_Destructor</a></td><td><a href="ft2-computations.html#FT_Vector_Unit">FT_Vector_Unit</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CACHE_SMALL_BITMAPS_H">FT_CACHE_SMALL_BITMAPS_H</a></td><td><a href="ft2-module_management.html#FT_Module_Requester">FT_Module_Requester</a></td><td><a href="ft2-header_file_macros.html#FT_WINFONTS_H">FT_WINFONTS_H</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_CeilFix">FT_CeilFix</a></td><td><a href="ft2-header_file_macros.html#FT_MULTIPLE_MASTERS_H">FT_MULTIPLE_MASTERS_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_Header">FT_WinFNT_Header</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CFF_DRIVER_H">FT_CFF_DRIVER_H</a></td><td><a href="ft2-computations.html#FT_MulDiv">FT_MulDiv</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a></td></tr>
+<tr><td><a href="ft2-cff_driver.html#FT_CFF_HINTING_XXX">FT_CFF_HINTING_ADOBE</a></td><td><a href="ft2-computations.html#FT_MulFix">FT_MulFix</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1250</a></td></tr>
+<tr><td><a href="ft2-cff_driver.html#FT_CFF_HINTING_XXX">FT_CFF_HINTING_FREETYPE</a></td><td><a href="ft2-multiple_masters.html#FT_Multi_Master">FT_Multi_Master</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1251</a></td></tr>
+<tr><td><a href="ft2-cff_driver.html#FT_CFF_HINTING_XXX">FT_CFF_HINTING_XXX</a></td><td><a href="ft2-base_interface.html#FT_New_Face">FT_New_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1252</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Char">FT_Char</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FOND">FT_New_Face_From_FOND</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1253</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_CharMap">FT_CharMap</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSRef">FT_New_Face_From_FSRef</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1254</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_CharMapRec">FT_CharMapRec</a></td><td><a href="ft2-mac_specific.html#FT_New_Face_From_FSSpec">FT_New_Face_From_FSSpec</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1255</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CID_H">FT_CID_H</a></td><td><a href="ft2-module_management.html#FT_New_Library">FT_New_Library</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1256</a></td></tr>
+<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Free">FT_ClassicKern_Free</a></td><td><a href="ft2-base_interface.html#FT_New_Memory_Face">FT_New_Memory_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1257</a></td></tr>
+<tr><td><a href="ft2-gx_validation.html#FT_ClassicKern_Validate">FT_ClassicKern_Validate</a></td><td><a href="ft2-sizes_management.html#FT_New_Size">FT_New_Size</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1258</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_CONFIG_H">FT_CONFIG_CONFIG_H</a></td><td><a href="ft2-basic_types.html#FT_Offset">FT_Offset</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP1361</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_MODULES_H">FT_CONFIG_MODULES_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_DRIVER</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP874</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_OPTIONS_H">FT_CONFIG_OPTIONS_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_MEMORY</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP932</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_CONFIG_STANDARD_LIBRARY_H">FT_CONFIG_STANDARD_LIBRARY_H</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PARAMS</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP936</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_Cos">FT_Cos</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_PATHNAME</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP949</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Data">FT_Data</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_STREAM</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_CP950</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_DivFix">FT_DivFix</a></td><td><a href="ft2-base_interface.html#FT_OPEN_XXX">FT_OPEN_XXX</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_DEFAULT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Done_Face">FT_Done_Face</a></td><td><a href="ft2-header_file_macros.html#FT_OPENTYPE_VALIDATE_H">FT_OPENTYPE_VALIDATE_H</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_MAC</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a></td><td><a href="ft2-base_interface.html#FT_Open_Args">FT_Open_Args</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_OEM</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Done_Glyph">FT_Done_Glyph</a></td><td><a href="ft2-base_interface.html#FT_Open_Face">FT_Open_Face</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_SYMBOL</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Free">FT_OpenType_Free</a></td><td><a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_XXX">FT_WinFNT_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-sizes_management.html#FT_Done_Size">FT_Done_Size</a></td><td><a href="ft2-ot_validation.html#FT_OpenType_Validate">FT_OpenType_Validate</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache">FTC_CMapCache</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Driver">FT_Driver</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_LEFT</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_Lookup">FTC_CMapCache_Lookup</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_ENC_TAG">FT_ENC_TAG</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_FILL_RIGHT</a></td><td><a href="ft2-cache_subsystem.html#FTC_CMapCache_New">FTC_CMapCache_New</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_CUSTOM</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_Face_Requester">FTC_Face_Requester</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_EXPERT</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_POSTSCRIPT</a></td><td><a href="ft2-cache_subsystem.html#FTC_FaceID">FTC_FaceID</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_LATIN_1</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_ORIENTATION_TRUETYPE</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache">FTC_ImageCache</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_ADOBE_STANDARD</a></td><td><a href="ft2-outline_processing.html#FT_Orientation">FT_Orientation</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_Lookup">FTC_ImageCache_Lookup</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_APPLE_ROMAN</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_EVEN_ODD_FILL</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_LookupScaler">FTC_ImageCache_LookupScaler</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_BIG5</a></td><td><a href="ft2-header_file_macros.html#FT_OUTLINE_H">FT_OUTLINE_H</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageCache_New">FTC_ImageCache_New</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_GB2312</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_HIGH_PRECISION</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageType">FTC_ImageType</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_IGNORE_DROPOUTS</a></td><td><a href="ft2-cache_subsystem.html#FTC_ImageTypeRec">FTC_ImageTypeRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_BIG5</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_INCLUDE_STUBS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager">FTC_Manager</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_GB2312</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_NONE</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Done">FTC_Manager_Done</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_JOHAB</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_OWNER</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupFace">FTC_Manager_LookupFace</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_REVERSE_FILL</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_LookupSize">FTC_Manager_LookupSize</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_SYMBOL</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SINGLE_PASS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_New">FTC_Manager_New</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_MS_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_SMART_DROPOUTS</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_RemoveFaceID">FTC_Manager_RemoveFaceID</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_NONE</a></td><td><a href="ft2-outline_processing.html#FT_OUTLINE_XXX">FT_OUTLINE_XXX</a></td><td><a href="ft2-cache_subsystem.html#FTC_Manager_Reset">FTC_Manager_Reset</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_OLD_LATIN_2</a></td><td><a href="ft2-outline_processing.html#FT_Outline">FT_Outline</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node">FTC_Node</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_SJIS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Check">FT_Outline_Check</a></td><td><a href="ft2-cache_subsystem.html#FTC_Node_Unref">FTC_Node_Unref</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_UNICODE</a></td><td><a href="ft2-outline_processing.html#FT_Outline_ConicToFunc">FT_Outline_ConicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBit">FTC_SBit</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_ENCODING_WANSUNG</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Copy">FT_Outline_Copy</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache">FTC_SBitCache</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Encoding">FT_Encoding</a></td><td><a href="ft2-outline_processing.html#FT_Outline_CubicToFunc">FT_Outline_CubicToFunc</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_Lookup">FTC_SBitCache_Lookup</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_ERRORS_H">FT_ERRORS_H</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Decompose">FT_Outline_Decompose</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_LookupScaler">FTC_SBitCache_LookupScaler</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Error">FT_Error</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Done">FT_Outline_Done</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitCache_New">FTC_SBitCache_New</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_F26Dot6">FT_F26Dot6</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Embolden">FT_Outline_Embolden</a></td><td><a href="ft2-cache_subsystem.html#FTC_SBitRec">FTC_SBitRec</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_F2Dot14">FT_F2Dot14</a></td><td><a href="ft2-outline_processing.html#FT_Outline_EmboldenXY">FT_Outline_EmboldenXY</a></td><td><a href="ft2-cache_subsystem.html#FTC_Scaler">FTC_Scaler</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_CID_KEYED</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Funcs">FT_Outline_Funcs</a></td><td><a href="ft2-cache_subsystem.html#FTC_ScalerRec">FTC_ScalerRec</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_COLOR</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_BBox">FT_Outline_Get_BBox</a></td><td><a href="ft2-auto_hinter.html#fallback-script">fallback-script</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_EXTERNAL_STREAM</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Bitmap">FT_Outline_Get_Bitmap</a></td><td><a href="ft2-auto_hinter.html#glyph-to-script-map">glyph-to-script-map</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FAST_GLYPHS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_CBox">FT_Outline_Get_CBox</a></td><td><a href="ft2-cff_driver.html#hinting-engine">hinting-engine</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_SIZES</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Get_Orientation">FT_Outline_Get_Orientation</a></td><td><a href="ft2-auto_hinter.html#increase-x-height">increase-x-height</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_FIXED_WIDTH</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetInsideBorder">FT_Outline_GetInsideBorder</a></td><td><a href="ft2-tt_driver.html#interpreter-version">interpreter-version</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_GLYPH_NAMES</a></td><td><a href="ft2-glyph_stroker.html#FT_Outline_GetOutsideBorder">FT_Outline_GetOutsideBorder</a></td><td><a href="ft2-cff_driver.html#no-stem-darkening">no-stem-darkening</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HINTER</a></td><td><a href="ft2-outline_processing.html#FT_Outline_LineToFunc">FT_Outline_LineToFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_FUZZ</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_HORIZONTAL</a></td><td><a href="ft2-outline_processing.html#FT_Outline_MoveToFunc">FT_Outline_MoveToFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_SCALE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_KERNING</a></td><td><a href="ft2-outline_processing.html#FT_Outline_New">FT_Outline_New</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_SHIFT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_MULTIPLE_MASTERS</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Render">FT_Outline_Render</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_BLUE_VALUE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SCALABLE</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Reverse">FT_Outline_Reverse</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_CHAR_STRING</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_SFNT</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Transform">FT_Outline_Transform</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_CHAR_STRING_KEY</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_TRICKY</a></td><td><a href="ft2-outline_processing.html#FT_Outline_Translate">FT_Outline_Translate</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ENCODING_ENTRY</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_VERTICAL</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyph">FT_OutlineGlyph</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ENCODING_TYPE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FACE_FLAG_XXX">FT_FACE_FLAG_XXX</a></td><td><a href="ft2-glyph_management.html#FT_OutlineGlyphRec">FT_OutlineGlyphRec</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_BLUE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Face">FT_Face</a></td><td><a href="ft2-sfnt_names.html#FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY">FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_NAME</a></td></tr>
+<tr><td><a href="ft2-version.html#FT_Face_CheckTrueTypePatents">FT_Face_CheckTrueTypePatents</a></td><td><a href="ft2-sfnt_names.html#FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY">FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FAMILY_OTHER_BLUE</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharsOfVariant">FT_Face_GetCharsOfVariant</a></td><td><a href="ft2-incremental.html#FT_PARAM_TAG_INCREMENTAL">FT_PARAM_TAG_INCREMENTAL</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_BBOX</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIndex">FT_Face_GetCharVariantIndex</a></td><td><a href="ft2-truetype_tables.html#FT_PARAM_TAG_UNPATENTED_HINTING">FT_PARAM_TAG_UNPATENTED_HINTING</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_MATRIX</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetCharVariantIsDefault">FT_Face_GetCharVariantIsDefault</a></td><td><a href="ft2-base_interface.html#FT_Parameter">FT_Parameter</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_NAME</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantSelectors">FT_Face_GetVariantSelectors</a></td><td><a href="ft2-header_file_macros.html#FT_PFR_H">FT_PFR_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FONT_TYPE</a></td></tr>
+<tr><td><a href="ft2-glyph_variants.html#FT_Face_GetVariantsOfChar">FT_Face_GetVariantsOfChar</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_BGRA</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FORCE_BOLD</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Face_Internal">FT_Face_Internal</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FS_TYPE</a></td></tr>
+<tr><td><a href="ft2-version.html#FT_Face_SetUnpatentedHinting">FT_Face_SetUnpatentedHinting</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY2</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_FULL_NAME</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FaceRec">FT_FaceRec</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_GRAY4</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_IS_FIXED_PITCH</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Fixed">FT_Fixed</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_ITALIC_ANGLE</a></td></tr>
+<tr><td><a href="ft2-computations.html#FT_FloorFix">FT_FloorFix</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_LCD_V</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_LANGUAGE_GROUP</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_FONT_FORMATS_H">FT_FONT_FORMATS_H</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_MONO</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_LEN_IV</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_FREETYPE_H">FT_FREETYPE_H</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_PIXEL_MODE_NONE</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_MIN_FEATURE</a></td></tr>
+<tr><td><a href="ft2-system_interface.html#FT_Free_Func">FT_Free_Func</a></td><td><a href="ft2-basic_types.html#FT_Pixel_Mode">FT_Pixel_Mode</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NOTICE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_BITMAP_EMBEDDING_ONLY</a></td><td><a href="ft2-basic_types.html#FT_Pointer">FT_Pointer</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_BLUE_VALUES</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_EDITABLE_EMBEDDING</a></td><td><a href="ft2-basic_types.html#FT_Pos">FT_Pos</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_CHAR_STRINGS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_INSTALLABLE_EMBEDDING</a></td><td><a href="ft2-auto_hinter.html#FT_Prop_GlyphToScriptMap">FT_Prop_GlyphToScriptMap</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_FAMILY_BLUES</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_NO_SUBSETTING</a></td><td><a href="ft2-auto_hinter.html#FT_Prop_IncreaseXHeight">FT_Prop_IncreaseXHeight</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_FAMILY_OTHER_BLUES</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING</a></td><td><a href="ft2-module_management.html#FT_Property_Get">FT_Property_Get</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_OTHER_BLUES</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING</a></td><td><a href="ft2-module_management.html#FT_Property_Set">FT_Property_Set</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_STEM_SNAP_H</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_FSTYPE_XXX">FT_FSTYPE_XXX</a></td><td><a href="ft2-basic_types.html#FT_PtrDist">FT_PtrDist</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_STEM_SNAP_V</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_FWord">FT_FWord</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_AA</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_NUM_SUBRS</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRAY</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_CLIP</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_OTHER_BLUE</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_DO_GRIDFIT</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DEFAULT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_PAINT_TYPE</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GASP_H">FT_GASP_H</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_DIRECT</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_PASSWORD</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_NO_TABLE</a></td><td><a href="ft2-raster.html#FT_RASTER_FLAG_XXX">FT_RASTER_FLAG_XXX</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_RND_STEM_UP</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_GRIDFIT</a></td><td><a href="ft2-raster.html#FT_Raster">FT_Raster</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STD_HW</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_SYMMETRIC_SMOOTHING</a></td><td><a href="ft2-raster.html#FT_Raster_BitSet_Func">FT_Raster_BitSet_Func</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STD_VW</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_GASP_XXX">FT_GASP_XXX</a></td><td><a href="ft2-raster.html#FT_Raster_BitTest_Func">FT_Raster_BitTest_Func</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STEM_SNAP_H</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Generic">FT_Generic</a></td><td><a href="ft2-raster.html#FT_Raster_DoneFunc">FT_Raster_DoneFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_STEM_SNAP_V</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Generic_Finalizer">FT_Generic_Finalizer</a></td><td><a href="ft2-raster.html#FT_Raster_Funcs">FT_Raster_Funcs</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_SUBR</a></td></tr>
+<tr><td><a href="ft2-quick_advance.html#FT_Get_Advance">FT_Get_Advance</a></td><td><a href="ft2-raster.html#FT_Raster_NewFunc">FT_Raster_NewFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNDERLINE_POSITION</a></td></tr>
+<tr><td><a href="ft2-quick_advance.html#FT_Get_Advances">FT_Get_Advances</a></td><td><a href="ft2-raster.html#FT_Raster_Params">FT_Raster_Params</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNDERLINE_THICKNESS</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Charset_ID">FT_Get_BDF_Charset_ID</a></td><td><a href="ft2-raster.html#FT_Raster_RenderFunc">FT_Raster_RenderFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_UNIQUE_ID</a></td></tr>
+<tr><td><a href="ft2-bdf_fonts.html#FT_Get_BDF_Property">FT_Get_BDF_Property</a></td><td><a href="ft2-raster.html#FT_Raster_ResetFunc">FT_Raster_ResetFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_VERSION</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Char_Index">FT_Get_Char_Index</a></td><td><a href="ft2-raster.html#FT_Raster_SetModeFunc">FT_Raster_SetModeFunc</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_DICT_WEIGHT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Charmap_Index">FT_Get_Charmap_Index</a></td><td><a href="ft2-header_file_macros.html#FT_RENDER_H">FT_RENDER_H</a></td><td><a href="ft2-type1_tables.html#PS_Dict_Keys">PS_Dict_Keys</a></td></tr>
+<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_From_Glyph_Index">FT_Get_CID_From_Glyph_Index</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD</a></td><td><a href="ft2-type1_tables.html#PS_FontInfo">PS_FontInfo</a></td></tr>
+<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Is_Internally_CID_Keyed">FT_Get_CID_Is_Internally_CID_Keyed</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LCD_V</a></td><td><a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a></td></tr>
+<tr><td><a href="ft2-cid_fonts.html#FT_Get_CID_Registry_Ordering_Supplement">FT_Get_CID_Registry_Ordering_Supplement</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_LIGHT</a></td><td><a href="ft2-type1_tables.html#PS_Private">PS_Private</a></td></tr>
+<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Format">FT_Get_CMap_Format</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_MONO</a></td><td><a href="ft2-type1_tables.html#PS_PrivateRec">PS_PrivateRec</a></td></tr>
+<tr><td><a href="ft2-truetype_tables.html#FT_Get_CMap_Language_ID">FT_Get_CMap_Language_ID</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_RENDER_MODE_NORMAL</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_SCALE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_First_Char">FT_Get_First_Char</a></td><td><a href="ft2-system_interface.html#FT_Realloc_Func">FT_Realloc_Func</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_SHIFT</a></td></tr>
+<tr><td><a href="ft2-font_formats.html#FT_Get_Font_Format">FT_Get_Font_Format</a></td><td><a href="ft2-base_interface.html#FT_Reference_Face">FT_Reference_Face</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_BLUE_VALUES</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_FSType_Flags">FT_Get_FSType_Flags</a></td><td><a href="ft2-module_management.html#FT_Reference_Library">FT_Reference_Library</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FAMILY_BLUES</a></td></tr>
+<tr><td><a href="ft2-gasp_table.html#FT_Get_Gasp">FT_Get_Gasp</a></td><td><a href="ft2-module_management.html#FT_Remove_Module">FT_Remove_Module</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FAMILY_OTHER_BLUES</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Get_Glyph">FT_Get_Glyph</a></td><td><a href="ft2-base_interface.html#FT_Render_Glyph">FT_Render_Glyph</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_FORCE_BOLD</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Glyph_Name">FT_Get_Glyph_Name</a></td><td><a href="ft2-base_interface.html#FT_Render_Mode">FT_Render_Mode</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_ITALIC_ANGLE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Kerning">FT_Get_Kerning</a></td><td><a href="ft2-module_management.html#FT_Renderer">FT_Renderer</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_OTHER_BLUES</a></td></tr>
+<tr><td><a href="ft2-multiple_masters.html#FT_Get_MM_Var">FT_Get_MM_Var</a></td><td><a href="ft2-module_management.html#FT_Renderer_Class">FT_Renderer_Class</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STANDARD_HEIGHT</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Get_Module">FT_Get_Module</a></td><td><a href="ft2-base_interface.html#FT_Request_Size">FT_Request_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STANDARD_WIDTH</a></td></tr>
+<tr><td><a href="ft2-multiple_masters.html#FT_Get_Multi_Master">FT_Get_Multi_Master</a></td><td><a href="ft2-computations.html#FT_RoundFix">FT_RoundFix</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STEM_SNAP_HEIGHTS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Name_Index">FT_Get_Name_Index</a></td><td><a href="ft2-base_interface.html#FT_Select_Charmap">FT_Select_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_STEM_SNAP_WIDTHS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Next_Char">FT_Get_Next_Char</a></td><td><a href="ft2-base_interface.html#FT_Select_Size">FT_Select_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_UNDERLINE_POSITION</a></td></tr>
+<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Advance">FT_Get_PFR_Advance</a></td><td><a href="ft2-base_interface.html#FT_Set_Char_Size">FT_Set_Char_Size</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_BLEND_UNDERLINE_THICKNESS</a></td></tr>
+<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Kerning">FT_Get_PFR_Kerning</a></td><td><a href="ft2-base_interface.html#FT_Set_Charmap">FT_Set_Charmap</a></td><td><a href="ft2-type1_tables.html#T1_Blend_Flags">T1_Blend_Flags</a></td></tr>
+<tr><td><a href="ft2-pfr_fonts.html#FT_Get_PFR_Metrics">FT_Get_PFR_Metrics</a></td><td><a href="ft2-module_management.html#FT_Set_Debug_Hook">FT_Set_Debug_Hook</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_ARRAY</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Postscript_Name">FT_Get_Postscript_Name</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Blend_Coordinates">FT_Set_MM_Blend_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_EXPERT</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Info">FT_Get_PS_Font_Info</a></td><td><a href="ft2-multiple_masters.html#FT_Set_MM_Design_Coordinates">FT_Set_MM_Design_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_ISOLATIN1</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Private">FT_Get_PS_Font_Private</a></td><td><a href="ft2-base_interface.html#FT_Set_Pixel_Sizes">FT_Set_Pixel_Sizes</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_NONE</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Get_PS_Font_Value">FT_Get_PS_Font_Value</a></td><td><a href="ft2-module_management.html#FT_Set_Renderer">FT_Set_Renderer</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_ENCODING_TYPE_STANDARD</a></td></tr>
+<tr><td><a href="ft2-module_management.html#FT_Get_Renderer">FT_Get_Renderer</a></td><td><a href="ft2-base_interface.html#FT_Set_Transform">FT_Set_Transform</a></td><td><a href="ft2-type1_tables.html#T1_EncodingType">T1_EncodingType</a></td></tr>
+<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name">FT_Get_Sfnt_Name</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Blend_Coordinates">FT_Set_Var_Blend_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_FontInfo">T1_FontInfo</a></td></tr>
+<tr><td><a href="ft2-sfnt_names.html#FT_Get_Sfnt_Name_Count">FT_Get_Sfnt_Name_Count</a></td><td><a href="ft2-multiple_masters.html#FT_Set_Var_Design_Coordinates">FT_Set_Var_Design_Coordinates</a></td><td><a href="ft2-type1_tables.html#T1_Private">T1_Private</a></td></tr>
+<tr><td><a href="ft2-truetype_tables.html#FT_Get_Sfnt_Table">FT_Get_Sfnt_Table</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_HEAD</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_CUSTOM</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_SubGlyph_Info">FT_Get_SubGlyph_Info</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_HHEA</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_EXPERT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Get_Track_Kerning">FT_Get_Track_Kerning</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_MAXP</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_LATIN_1</a></td></tr>
+<tr><td><a href="ft2-truetype_engine.html#FT_Get_TrueType_Engine_Type">FT_Get_TrueType_Engine_Type</a></td><td><a href="ft2-header_file_macros.html#FT_SFNT_NAMES_H">FT_SFNT_NAMES_H</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_STANDARD</a></td></tr>
+<tr><td><a href="ft2-winfnt_fonts.html#FT_Get_WinFNT_Header">FT_Get_WinFNT_Header</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_OS2</a></td><td><a href="ft2-truetype_tables.html#TT_ADOBE_ID_XXX">TT_ADOBE_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_ATS_Name">FT_GetFile_From_Mac_ATS_Name</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_PCLT</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_DEFAULT</a></td></tr>
+<tr><td><a href="ft2-mac_specific.html#FT_GetFile_From_Mac_Name">FT_GetFile_From_Mac_Name</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_POST</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_ISO_10646</a></td></tr>
+<tr><td><a href="ft2-mac_specific.html#FT_GetFilePath_From_Mac_ATS_Name">FT_GetFilePath_From_Mac_ATS_Name</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_SFNT_VHEA</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_1_1</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_GRIDFIT</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Table_Info">FT_Sfnt_Table_Info</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_2_0</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_PIXELS</a></td><td><a href="ft2-truetype_tables.html#FT_Sfnt_Tag">FT_Sfnt_Tag</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_UNICODE_32</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_SUBPIXELS</a></td><td><a href="ft2-sfnt_names.html#FT_SfntName">FT_SfntName</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_VARIANT_SELECTOR</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_TRUNCATE</a></td><td><a href="ft2-basic_types.html#FT_Short">FT_Short</a></td><td><a href="ft2-truetype_tables.html#TT_APPLE_ID_XXX">TT_APPLE_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_GLYPH_BBOX_UNSCALED</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_BBOX</a></td><td><a href="ft2-truetype_tables.html#TT_Header">TT_Header</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_BITMAP</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_CELL</a></td><td><a href="ft2-truetype_tables.html#TT_HoriHeader">TT_HoriHeader</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_COMPOSITE</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_NOMINAL</a></td><td><a href="ft2-tt_driver.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_35</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_NONE</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_REAL_DIM</a></td><td><a href="ft2-tt_driver.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_38</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_OUTLINE</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_SIZE_REQUEST_TYPE_SCALES</a></td><td><a href="ft2-tt_driver.html#TT_INTERPRETER_VERSION_XXX">TT_INTERPRETER_VERSION_XXX</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_GLYPH_FORMAT_PLOTTER</a></td><td><a href="ft2-header_file_macros.html#FT_SIZES_H">FT_SIZES_H</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_10646</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GLYPH_H">FT_GLYPH_H</a></td><td><a href="ft2-computations.html#FT_Sin">FT_Sin</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_7BIT_ASCII</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph">FT_Glyph</a></td><td><a href="ft2-base_interface.html#FT_Size">FT_Size</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_8859_1</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_BBox_Mode">FT_Glyph_BBox_Mode</a></td><td><a href="ft2-base_interface.html#FT_Size_Internal">FT_Size_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_ISO_ID_XXX">TT_ISO_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Copy">FT_Glyph_Copy</a></td><td><a href="ft2-base_interface.html#FT_Size_Metrics">FT_Size_Metrics</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARABIC</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Glyph_Format">FT_Glyph_Format</a></td><td><a href="ft2-base_interface.html#FT_Size_Request">FT_Size_Request</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ARMENIAN</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Get_CBox">FT_Glyph_Get_CBox</a></td><td><a href="ft2-base_interface.html#FT_Size_Request_Type">FT_Size_Request_Type</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BENGALI</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Glyph_Metrics">FT_Glyph_Metrics</a></td><td><a href="ft2-base_interface.html#FT_Size_RequestRec">FT_Size_RequestRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_BURMESE</a></td></tr>
+<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_Stroke">FT_Glyph_Stroke</a></td><td><a href="ft2-base_interface.html#FT_SizeRec">FT_SizeRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_DEVANAGARI</a></td></tr>
+<tr><td><a href="ft2-glyph_stroker.html#FT_Glyph_StrokeBorder">FT_Glyph_StrokeBorder</a></td><td><a href="ft2-base_interface.html#FT_Slot_Internal">FT_Slot_Internal</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEEZ</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_To_Bitmap">FT_Glyph_To_Bitmap</a></td><td><a href="ft2-raster.html#FT_Span">FT_Span</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GEORGIAN</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_Glyph_Transform">FT_Glyph_Transform</a></td><td><a href="ft2-raster.html#FT_SpanFunc">FT_SpanFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GREEK</a></td></tr>
+<tr><td><a href="ft2-glyph_management.html#FT_GlyphRec">FT_GlyphRec</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_LEFT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GUJARATI</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_GlyphSlot">FT_GlyphSlot</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_STROKER_BORDER_RIGHT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_GURMUKHI</a></td></tr>
+<tr><td><a href="ft2-bitmap_handling.html#FT_GlyphSlot_Own_Bitmap">FT_GlyphSlot_Own_Bitmap</a></td><td><a href="ft2-header_file_macros.html#FT_STROKER_H">FT_STROKER_H</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_HEBREW</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_GlyphSlotRec">FT_GlyphSlotRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_BUTT</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_JAPANESE</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GX_VALIDATE_H">FT_GX_VALIDATE_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KANNADA</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_GZIP_H">FT_GZIP_H</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_STROKER_LINECAP_SQUARE</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KHMER</a></td></tr>
+<tr><td><a href="ft2-gzip.html#FT_Gzip_Uncompress">FT_Gzip_Uncompress</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_BEVEL</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_KOREAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_COLOR">FT_HAS_COLOR</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_LAOTIAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_FAST_GLYPHS">FT_HAS_FAST_GLYPHS</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER_FIXED</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALAYALAM</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_FIXED_SIZES">FT_HAS_FIXED_SIZES</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_MITER_VARIABLE</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MALDIVIAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_GLYPH_NAMES">FT_HAS_GLYPH_NAMES</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_STROKER_LINEJOIN_ROUND</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_MONGOLIAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_HORIZONTAL">FT_HAS_HORIZONTAL</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_BOLD</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ORIYA</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_KERNING">FT_HAS_KERNING</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_ITALIC</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_ROMAN</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_MULTIPLE_MASTERS">FT_HAS_MULTIPLE_MASTERS</a></td><td><a href="ft2-base_interface.html#FT_STYLE_FLAG_XXX">FT_STYLE_FLAG_XXX</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RSYMBOL</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_HAS_VERTICAL">FT_HAS_VERTICAL</a></td><td><a href="ft2-system_interface.html#FT_Stream">FT_Stream</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_RUSSIAN</a></td></tr>
+<tr><td><a href="ft2-type1_tables.html#FT_Has_PS_Glyph_Names">FT_Has_PS_Glyph_Names</a></td><td><a href="ft2-system_interface.html#FT_Stream_CloseFunc">FT_Stream_CloseFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SIMPLIFIED_CHINESE</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_IMAGE_H">FT_IMAGE_H</a></td><td><a href="ft2-system_interface.html#FT_Stream_IoFunc">FT_Stream_IoFunc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINDHI</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_IMAGE_TAG">FT_IMAGE_TAG</a></td><td><a href="ft2-bzip2.html#FT_Stream_OpenBzip2">FT_Stream_OpenBzip2</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SINHALESE</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_INCREMENTAL_H">FT_INCREMENTAL_H</a></td><td><a href="ft2-gzip.html#FT_Stream_OpenGzip">FT_Stream_OpenGzip</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_SLAVIC</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental">FT_Incremental</a></td><td><a href="ft2-lzw.html#FT_Stream_OpenLZW">FT_Stream_OpenLZW</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TAMIL</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_FreeGlyphDataFunc">FT_Incremental_FreeGlyphDataFunc</a></td><td><a href="ft2-system_interface.html#FT_StreamDesc">FT_StreamDesc</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TELUGU</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_FuncsRec">FT_Incremental_FuncsRec</a></td><td><a href="ft2-system_interface.html#FT_StreamRec">FT_StreamRec</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_THAI</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphDataFunc">FT_Incremental_GetGlyphDataFunc</a></td><td><a href="ft2-basic_types.html#FT_String">FT_String</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TIBETAN</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_GetGlyphMetricsFunc">FT_Incremental_GetGlyphMetricsFunc</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker">FT_Stroker</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_TRADITIONAL_CHINESE</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_Interface">FT_Incremental_Interface</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_BeginSubPath">FT_Stroker_BeginSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_UNINTERP</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_InterfaceRec">FT_Incremental_InterfaceRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ConicTo">FT_Stroker_ConicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_VIETNAMESE</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_Metrics">FT_Incremental_Metrics</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_CubicTo">FT_Stroker_CubicTo</a></td><td><a href="ft2-truetype_tables.html#TT_MAC_ID_XXX">TT_MAC_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-incremental.html#FT_Incremental_MetricsRec">FT_Incremental_MetricsRec</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Done">FT_Stroker_Done</a></td><td><a href="ft2-truetype_tables.html#TT_MaxProfile">TT_MaxProfile</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_EndSubPath">FT_Stroker_EndSubPath</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_BIG_5</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int">FT_Int</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Export">FT_Stroker_Export</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_GB2312</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int16">FT_Int16</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ExportBorder">FT_Stroker_ExportBorder</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_JOHAB</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int32">FT_Int32</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetBorderCounts">FT_Stroker_GetBorderCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SJIS</a></td></tr>
+<tr><td><a href="ft2-basic_types.html#FT_Int64">FT_Int64</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_GetCounts">FT_Stroker_GetCounts</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_SYMBOL_CS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_CID_KEYED">FT_IS_CID_KEYED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineCap">FT_Stroker_LineCap</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UCS_4</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_FIXED_WIDTH">FT_IS_FIXED_WIDTH</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineJoin">FT_Stroker_LineJoin</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_UNICODE_CS</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_SCALABLE">FT_IS_SCALABLE</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_LineTo">FT_Stroker_LineTo</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_WANSUNG</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_SFNT">FT_IS_SFNT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_New">FT_Stroker_New</a></td><td><a href="ft2-truetype_tables.html#TT_MS_ID_XXX">TT_MS_ID_XXX</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_IS_TRICKY">FT_IS_TRICKY</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_ParseOutline">FT_Stroker_ParseOutline</a></td><td><a href="ft2-truetype_tables.html#TT_OS2">TT_OS2</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_DEFAULT</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Rewind">FT_Stroker_Rewind</a></td><td><a href="ft2-truetype_tables.html#TT_PCLT">TT_PCLT</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNFITTED</a></td><td><a href="ft2-glyph_stroker.html#FT_Stroker_Set">FT_Stroker_Set</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ADOBE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_KERNING_UNSCALED</a></td><td><a href="ft2-glyph_stroker.html#FT_StrokerBorder">FT_StrokerBorder</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_APPLE_UNICODE</a></td></tr>
+<tr><td><a href="ft2-base_interface.html#FT_Kerning_Mode">FT_Kerning_Mode</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_2X2</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_CUSTOM</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_DEFAULT</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_ISO</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_LCD_FILTER_H">FT_LCD_FILTER_H</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MACINTOSH</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LEGACY</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_MICROSOFT</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_LIGHT</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_SCALE</a></td><td><a href="ft2-truetype_tables.html#TT_PLATFORM_XXX">TT_PLATFORM_XXX</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LCD_FILTER_NONE</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_USE_MY_METRICS</a></td><td><a href="ft2-truetype_tables.html#TT_Postscript">TT_Postscript</a></td></tr>
+<tr><td><a href="ft2-lcd_filtering.html#FT_LcdFilter">FT_LcdFilter</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XXX</a></td><td><a href="ft2-truetype_tables.html#TT_VertHeader">TT_VertHeader</a></td></tr>
+<tr><td><a href="ft2-header_file_macros.html#FT_LIST_H">FT_LIST_H</a></td><td><a href="ft2-base_interface.html#FT_SUBGLYPH_FLAG_XXX">FT_SUBGLYPH_FLAG_XY_SCALE</a></td><td><a href="ft2-auto_hinter.html#warping">warping</a></td></tr>
<tr><td><a href="ft2-base_interface.html#FT_Library">FT_Library</a></td><td><a href="ft2-base_interface.html#FT_SubGlyph">FT_SubGlyph</a></td><td></td></tr>
-<tr><td><a href="ft2-lcd_filtering.html#FT_Library_SetLcdFilter">FT_Library_SetLcdFilter</a></td><td><a href="ft2-header_file_macros.html#FT_SYNTHESIS_H">FT_SYNTHESIS_H</a></td><td></td></tr>
</table>
<hr>
<table class="index-toc-link"><tr><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<div class="timestamp">generated on Tue Dec 30 21:42:54 2014</div></body>
+<div class="timestamp">generated on Sun Jun 7 16:13:05 2015</div></body>
</html>
diff --git a/freetype/docs/reference/ft2-lcd_filtering.html b/freetype/docs/reference/ft2-lcd_filtering.html
index 768fbf02c..3d332b213 100644
--- a/freetype/docs/reference/ft2-lcd_filtering.html
+++ b/freetype/docs/reference/ft2-lcd_filtering.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>LCD Filtering</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-list_processing.html b/freetype/docs/reference/ft2-list_processing.html
index 2617e504f..4c34139ed 100644
--- a/freetype/docs/reference/ft2-list_processing.html
+++ b/freetype/docs/reference/ft2-list_processing.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>List Processing</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-lzw.html b/freetype/docs/reference/ft2-lzw.html
index 5f500e643..285c288fd 100644
--- a/freetype/docs/reference/ft2-lzw.html
+++ b/freetype/docs/reference/ft2-lzw.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>LZW Streams</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-mac_specific.html b/freetype/docs/reference/ft2-mac_specific.html
index ca66af63b..91806f613 100644
--- a/freetype/docs/reference/ft2-mac_specific.html
+++ b/freetype/docs/reference/ft2-mac_specific.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Mac Specific Interface</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-module_management.html b/freetype/docs/reference/ft2-module_management.html
index a836715e2..12babd915 100644
--- a/freetype/docs/reference/ft2-module_management.html
+++ b/freetype/docs/reference/ft2-module_management.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Module Management</h1>
<h2>Synopsis</h2>
@@ -510,7 +510,7 @@
<a href="ft2-base_interface.html#FT_Library">FT_Library</a> *alibrary );
</pre>
-<p>This function is used to create a new FreeType library instance from a given memory object. It is thus possible to use libraries with distinct memory allocators within the same program.</p>
+<p>This function is used to create a new FreeType library instance from a given memory object. It is thus possible to use libraries with distinct memory allocators within the same program. Note, however, that the used <a href="ft2-system_interface.html#FT_Memory">FT_Memory</a> structure is expected to remain valid for the life of the <a href="ft2-base_interface.html#FT_Library">FT_Library</a> object.</p>
<p>Normally, you would call this function (followed by a call to <a href="ft2-module_management.html#FT_Add_Default_Modules">FT_Add_Default_Modules</a> or a series of calls to <a href="ft2-module_management.html#FT_Add_Module">FT_Add_Module</a>) instead of <a href="ft2-base_interface.html#FT_Init_FreeType">FT_Init_FreeType</a> to initialize the FreeType library.</p>
<p>Don't use <a href="ft2-base_interface.html#FT_Done_FreeType">FT_Done_FreeType</a> but <a href="ft2-module_management.html#FT_Done_Library">FT_Done_Library</a> to destroy a library instance.</p>
@@ -722,7 +722,7 @@
<h4>note</h4>
<p>In case of success, the renderer will be used to convert glyph images in the renderer's known format into bitmaps.</p>
<p>This doesn't change the current renderer for other formats.</p>
-<p>Currently, only the B/W renderer, if compiled with FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels anti-aliasing mode; this option must be set directly in &lsquo;ftraster.c&rsquo; and is undefined by default) accepts a single tag &lsquo;pal5&rsquo; to set its gray palette as a character string with 5&nbsp;elements. Consequently, the third and fourth argument are zero normally.</p>
+<p>Currently, no FreeType renderer module uses &lsquo;parameters&rsquo;; you should thus always pass NULL as the value.</p>
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
diff --git a/freetype/docs/reference/ft2-multiple_masters.html b/freetype/docs/reference/ft2-multiple_masters.html
index ba5115b81..75c047ecb 100644
--- a/freetype/docs/reference/ft2-multiple_masters.html
+++ b/freetype/docs/reference/ft2-multiple_masters.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Multiple Masters</h1>
<h2>Synopsis</h2>
@@ -284,10 +284,10 @@
<p>The number of named styles; only meaningful for GX that allows certain design coordinates to have a string ID (in the &lsquo;name&rsquo; table) associated with them. The font can tell the user that, for example, Weight=1.5 is &lsquo;Bold&rsquo;.</p>
</td></tr>
<tr><td class="val" id="axis">axis</td><td class="desc">
-<p>A table of axis descriptors. GX fonts contain slightly more data than MM.</p>
+<p>An axis descriptor table. GX fonts contain slightly more data than MM.</p>
</td></tr>
-<tr><td class="val" id="namedstyles">namedstyles</td><td class="desc">
-<p>A table of named styles. Only meaningful with GX.</p>
+<tr><td class="val" id="namedstyle">namedstyle</td><td class="desc">
+<p>A named style table. Only meaningful with GX.</p>
</td></tr>
</table>
@@ -380,7 +380,7 @@
<h4>input</h4>
<table class="fields">
<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
+<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
</td></tr>
<tr><td class="val" id="coords">coords</td><td class="desc">
<p>An array of design coordinates.</p>
@@ -415,7 +415,7 @@
<h4>input</h4>
<table class="fields">
<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
+<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
</td></tr>
<tr><td class="val" id="coords">coords</td><td class="desc">
<p>An array of design coordinates.</p>
@@ -450,7 +450,7 @@
<h4>input</h4>
<table class="fields">
<tr><td class="val" id="num_coords">num_coords</td><td class="desc">
-<p>The number of design coordinates (must be equal to the number of axes in the font).</p>
+<p>The number of available design coordinates. If it is larger than the number of axes, ignore the excess values. If it is smaller than the number of axes, use default values for the remaining axes.</p>
</td></tr>
<tr><td class="val" id="coords">coords</td><td class="desc">
<p>The design coordinates array (each element must be between 0 and 1.0).</p>
diff --git a/freetype/docs/reference/ft2-ot_validation.html b/freetype/docs/reference/ft2-ot_validation.html
index a4988e183..220b69a8c 100644
--- a/freetype/docs/reference/ft2-ot_validation.html
+++ b/freetype/docs/reference/ft2-ot_validation.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>OpenType Validation</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-outline_processing.html b/freetype/docs/reference/ft2-outline_processing.html
index 323efc916..bc119cee5 100644
--- a/freetype/docs/reference/ft2-outline_processing.html
+++ b/freetype/docs/reference/ft2-outline_processing.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Outline Processing</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-pfr_fonts.html b/freetype/docs/reference/ft2-pfr_fonts.html
index 8f3cb8ab1..54496ca0d 100644
--- a/freetype/docs/reference/ft2-pfr_fonts.html
+++ b/freetype/docs/reference/ft2-pfr_fonts.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>PFR Fonts</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-quick_advance.html b/freetype/docs/reference/ft2-quick_advance.html
index 4cffbf837..f48e042af 100644
--- a/freetype/docs/reference/ft2-quick_advance.html
+++ b/freetype/docs/reference/ft2-quick_advance.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Quick retrieval of advance values</h1>
<h2>Synopsis</h2>
@@ -209,7 +209,7 @@
<h3 id="FT_ADVANCE_FLAG_FAST_ONLY">FT_ADVANCE_FLAG_FAST_ONLY</h3>
<p>Defined in FT_ADVANCES_H (ftadvanc.h).</p>
<pre>
-#define <b>FT_ADVANCE_FLAG_FAST_ONLY</b> 0x20000000UL
+#define <b>FT_ADVANCE_FLAG_FAST_ONLY</b> 0x20000000L
</pre>
<p>A bit-flag to be OR-ed with the &lsquo;flags&rsquo; parameter of the <a href="ft2-quick_advance.html#FT_Get_Advance">FT_Get_Advance</a> and <a href="ft2-quick_advance.html#FT_Get_Advances">FT_Get_Advances</a> functions.</p>
diff --git a/freetype/docs/reference/ft2-raster.html b/freetype/docs/reference/ft2-raster.html
index 3d4062124..4cfa7b14f 100644
--- a/freetype/docs/reference/ft2-raster.html
+++ b/freetype/docs/reference/ft2-raster.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Scanline Converter</h1>
<h2>Synopsis</h2>
@@ -372,7 +372,7 @@
#define FT_Raster_Reset_Func <b>FT_Raster_ResetFunc</b>
</pre>
-<p>FreeType provides an area of memory called the &lsquo;render pool&rsquo;, available to all registered rasters. This pool can be freely used during a given scan-conversion but is shared by all rasters. Its content is thus transient.</p>
+<p>FreeType used to provide an area of memory called the &lsquo;render pool&rsquo; available to all registered rasters. This was not thread safe however and now FreeType never allocates this pool. NULL is always passed in as pool_base.</p>
<p>This function is called each time the render pool changes, or just after a new raster object is created.</p>
<h4>input</h4>
@@ -389,7 +389,7 @@
</table>
<h4>note</h4>
-<p>Rasters can ignore the render pool and rely on dynamic memory allocation if they want to (a handle to the memory allocator is passed to the raster constructor). However, this is not recommended for efficiency purposes.</p>
+<p>Rasters should ignore the render pool and rely on dynamic or stack allocation if they want to (a handle to the memory allocator is passed to the raster constructor).</p>
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
diff --git a/freetype/docs/reference/ft2-sfnt_names.html b/freetype/docs/reference/ft2-sfnt_names.html
index 3bd918d3e..1fc855772 100644
--- a/freetype/docs/reference/ft2-sfnt_names.html
+++ b/freetype/docs/reference/ft2-sfnt_names.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>SFNT Names</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-sizes_management.html b/freetype/docs/reference/ft2-sizes_management.html
index 50563eb5a..acf7455b5 100644
--- a/freetype/docs/reference/ft2-sizes_management.html
+++ b/freetype/docs/reference/ft2-sizes_management.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Size Management</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-system_interface.html b/freetype/docs/reference/ft2-system_interface.html
index 139cbc7f0..424c9c798 100644
--- a/freetype/docs/reference/ft2-system_interface.html
+++ b/freetype/docs/reference/ft2-system_interface.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>System Interface</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-toc.html b/freetype/docs/reference/ft2-toc.html
index 61098164d..5917f2b0a 100644
--- a/freetype/docs/reference/ft2-toc.html
+++ b/freetype/docs/reference/ft2-toc.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Table of Contents</h1>
<div class="section">
@@ -266,5 +266,5 @@
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td></tr></table>
-<div class="timestamp">generated on Tue Dec 30 21:42:54 2014</div></body>
+<div class="timestamp">generated on Sun Jun 7 16:13:05 2015</div></body>
</html>
diff --git a/freetype/docs/reference/ft2-truetype_engine.html b/freetype/docs/reference/ft2-truetype_engine.html
index d0c467bd4..8866d0edd 100644
--- a/freetype/docs/reference/ft2-truetype_engine.html
+++ b/freetype/docs/reference/ft2-truetype_engine.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>The TrueType Engine</h1>
<h2>Synopsis</h2>
diff --git a/freetype/docs/reference/ft2-truetype_tables.html b/freetype/docs/reference/ft2-truetype_tables.html
index 9c63d67da..30e2efba4 100644
--- a/freetype/docs/reference/ft2-truetype_tables.html
+++ b/freetype/docs/reference/ft2-truetype_tables.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>TrueType Tables</h1>
<h2>Synopsis</h2>
@@ -367,7 +367,7 @@
<a href="ft2-basic_types.html#FT_Short">FT_Short</a> xAvgCharWidth;
<a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWeightClass;
<a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> usWidthClass;
- <a href="ft2-basic_types.html#FT_Short">FT_Short</a> fsType;
+ <a href="ft2-basic_types.html#FT_UShort">FT_UShort</a> fsType;
<a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptXSize;
<a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptYSize;
<a href="ft2-basic_types.html#FT_Short">FT_Short</a> ySubscriptXOffset;
diff --git a/freetype/docs/reference/ft2-tt_driver.html b/freetype/docs/reference/ft2-tt_driver.html
index 5d71829e4..9264d7cf6 100644
--- a/freetype/docs/reference/ft2-tt_driver.html
+++ b/freetype/docs/reference/ft2-tt_driver.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>The TrueType driver</h1>
<h2>Synopsis</h2>
@@ -116,7 +116,7 @@
<h3 id="interpreter-version">interpreter-version</h3>
<p>Currently, two versions are available, representing the bytecode interpreter with and without subpixel hinting support, respectively. The default is subpixel support if TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support otherwise (since it isn't available then).</p>
-<p>If subpixel hinting is on, many TrueType bytecode instructions behave differently compared to B/W or grayscale rendering. The main idea is to render at a much increased horizontal resolution, then sampling down the created output to subpixel precision. However, many older fonts are not suited to this and must be specially taken care of by applying (hardcoded) font-specific tweaks.</p>
+<p>If subpixel hinting is on, many TrueType bytecode instructions behave differently compared to B/W or grayscale rendering (except if &lsquo;native ClearType&rsquo; is selected by the font). The main idea is to render at a much increased horizontal resolution, then sampling down the created output to subpixel precision. However, many older fonts are not suited to this and must be specially taken care of by applying (hardcoded) font-specific tweaks.</p>
<p>Details on subpixel hinting and some of the necessary tweaks can be found in Greg Hitchcock's whitepaper at &lsquo;<a href="http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx">http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx</a>&rsquo;.</p>
<p>The following example code demonstrates how to activate subpixel hinting (omitting the error handling).</p>
<pre class="colored">
@@ -162,19 +162,48 @@
<h4>note</h4>
<p>This property controls the behaviour of the bytecode interpreter and thus how outlines get hinted. It does <b>not</b> control how glyph get rasterized! In particular, it does not control subpixel color filtering.</p>
<p>If FreeType has not been compiled with configuration option FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version&nbsp;38 causes an &lsquo;FT_Err_Unimplemented_Feature&rsquo; error.</p>
-<p>Depending on the graphics framework, Microsoft uses different bytecode engines. As a consequence, the version numbers returned by a call to the &lsquo;GETINFO[1]&rsquo; bytecode instruction are more convoluted than desired.</p>
+<p>Depending on the graphics framework, Microsoft uses different bytecode and rendering engines. As a consequence, the version numbers returned by a call to the &lsquo;GETINFO&rsquo; bytecode instruction are more convoluted than desired.</p>
+<p>Here are two tables that try to shed some light on the possible values for the MS rasterizer engine, together with the additional features introduced by it.</p>
<pre class="colored">
- framework Windows version result of GETINFO[1]
- ----------------------------------------------------
- GDI before XP 35
- GDI XP and later 37
- GDI+ old before Vista 37
- GDI+ old Vista, 7 38
- GDI+ after 7 40
- DWrite before 8 39
- DWrite 8 and later 40
+ GETINFO framework version feature
+ -------------------------------------------------------------------
+ 3 GDI (Win 3.1), v1.0 16-bit, first version
+ TrueImage
+ 33 GDI (Win NT 3.1), v1.5 32-bit
+ HP Laserjet
+ 34 GDI (Win 95) v1.6 font smoothing,
+ new SCANTYPE opcode
+ 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
+ bits in composite glyphs
+ 36 MGDI (Win CE 2) v1.6+ classic ClearType
+ 37 GDI (XP and later), v1.8 ClearType
+ GDI+ old (before Vista)
+ 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
+ WPF Y-direction ClearType,
+ additional error checking
+ 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
+ in GETINFO opcode,
+ bug fixes
+ 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
+ DWrite (Win 8) in GETINFO opcode,
+ Gray ClearType
</pre>
-<p>Since FreeType doesn't provide all capabilities of DWrite ClearType, using version&nbsp;38 seems justified.</p>
+<p>The &lsquo;version&rsquo; field gives a rough orientation only, since some applications provided certain features much earlier (as an example, Microsoft Reader used subpixel and Y-direction ClearType already in Windows 2000). Similarly, updates to a given framework might include improved hinting support.</p>
+<pre class="colored">
+ version sampling rendering comment
+ x y x y
+ --------------------------------------------------------------
+ v1.0 normal normal B/W B/W bi-level
+ v1.6 high high gray gray grayscale
+ v1.8 high normal color-filter B/W (GDI) ClearType
+ v1.9 high high color-filter gray Color ClearType
+ v2.1 high normal gray B/W Gray ClearType
+ v2.1 high high gray gray Gray ClearType
+</pre>
+<p>Color and Gray ClearType are the two available variants of &lsquo;Y-direction ClearType&rsquo;, meaning grayscale rasterization along the Y-direction; the name used in the TrueType specification for this feature is &lsquo;symmetric smoothing&rsquo;. &lsquo;Classic ClearType&rsquo; is the original algorithm used before introducing a modified version in Win&nbsp;XP. Another name for v1.6's grayscale rendering is &lsquo;font smoothing&rsquo;, and &lsquo;Color ClearType&rsquo; is sometimes also called &lsquo;DWrite ClearType&rsquo;. To differentiate between today's Color ClearType and the earlier ClearType variant with B/W rendering along the vertical axis, the latter is sometimes called &lsquo;GDI ClearType&rsquo;.</p>
+<p>&lsquo;Normal&rsquo; and &lsquo;high&rsquo; sampling describe the (virtual) resolution to access the rasterized outline after the hinting process. &lsquo;Normal&rsquo; means 1 sample per grid line (i.e., B/W). In the current Microsoft implementation, &lsquo;high&rsquo; means an extra virtual resolution of 16x16 (or 16x1) grid lines per pixel for bytecode instructions like &lsquo;MIRP&rsquo;. After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid lines for color filtering if Color ClearType is activated.</p>
+<p>Note that &lsquo;Gray ClearType&rsquo; is essentially the same as v1.6's grayscale rendering. However, the GETINFO instruction handles it differently: v1.6 returns bit&nbsp;12 (hinting for grayscale), while v2.1 returns bits&nbsp;13 (hinting for ClearType), 18 (symmetrical smoothing), and&nbsp;19 (Gray ClearType). Also, this mode respects bits 2 and&nbsp;3 for the version&nbsp;1 gasp table exclusively (like Color ClearType), while v1.6 only respects the values of version&nbsp;0 (bits 0 and&nbsp;1).</p>
+<p>FreeType doesn't provide all capabilities of the most recent ClearType incarnation, thus we identify our subpixel support as version&nbsp;38.</p>
<hr>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="middle">[<a href="#">Top</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table></div>
diff --git a/freetype/docs/reference/ft2-type1_tables.html b/freetype/docs/reference/ft2-type1_tables.html
index 71355a9d8..c3001a05a 100644
--- a/freetype/docs/reference/ft2-type1_tables.html
+++ b/freetype/docs/reference/ft2-type1_tables.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Type 1 Tables</h1>
<h2>Synopsis</h2>
@@ -362,7 +362,7 @@
<p>FreeType error code. 0&nbsp;means success.</p>
<h4>note</h4>
-<p>The string pointers within the font info structure are owned by the face and don't need to be freed by the caller.</p>
+<p>String pointers within the <a href="ft2-type1_tables.html#PS_FontInfoRec">PS_FontInfoRec</a> structure are owned by the face and don't need to be freed by the caller. Missing entries in the font's FontInfo dictionary are represented by NULL pointers.</p>
<p>If the font's format is not PostScript-based, this function will return the &lsquo;FT_Err_Invalid_Argument&rsquo; error code.</p>
<hr>
diff --git a/freetype/docs/reference/ft2-user_allocation.html b/freetype/docs/reference/ft2-user_allocation.html
index 52bd6ec22..972fcf5f9 100644
--- a/freetype/docs/reference/ft2-user_allocation.html
+++ b/freetype/docs/reference/ft2-user_allocation.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>User allocation</h1>
diff --git a/freetype/docs/reference/ft2-version.html b/freetype/docs/reference/ft2-version.html
index 89e3dac90..0f714b37d 100644
--- a/freetype/docs/reference/ft2-version.html
+++ b/freetype/docs/reference/ft2-version.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>FreeType Version</h1>
<h2>Synopsis</h2>
@@ -223,8 +223,8 @@
<p>Defined in FT_FREETYPE_H (freetype.h).</p>
<pre>
#define <a href="ft2-version.html#FREETYPE_MAJOR">FREETYPE_MAJOR</a> 2
-#define <a href="ft2-version.html#FREETYPE_MINOR">FREETYPE_MINOR</a> 5
-#define <a href="ft2-version.html#FREETYPE_PATCH">FREETYPE_PATCH</a> 5
+#define <a href="ft2-version.html#FREETYPE_MINOR">FREETYPE_MINOR</a> 6
+#define <a href="ft2-version.html#FREETYPE_PATCH">FREETYPE_PATCH</a> 0
</pre>
<p>These three macros identify the FreeType source code version. Use <a href="ft2-version.html#FT_Library_Version">FT_Library_Version</a> to access them at runtime.</p>
diff --git a/freetype/docs/reference/ft2-winfnt_fonts.html b/freetype/docs/reference/ft2-winfnt_fonts.html
index a17e350d2..216dc6544 100644
--- a/freetype/docs/reference/ft2-winfnt_fonts.html
+++ b/freetype/docs/reference/ft2-winfnt_fonts.html
@@ -3,7 +3,7 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>FreeType-2.5.5 API Reference</title>
+<title>FreeType-2.6 API Reference</title>
<style type="text/css">
a:link { color: #0000EF; }
a:visited { color: #51188E; }
@@ -100,7 +100,7 @@
<body>
<table class="index-toc-link"><tr><td class="left">[<a href="ft2-index.html">Index</a>]</td><td class="right">[<a href="ft2-toc.html">TOC</a>]</td></tr></table>
-<h1>FreeType-2.5.5 API Reference</h1>
+<h1>FreeType-2.6 API Reference</h1>
<h1>Window FNT Files</h1>
<h2>Synopsis</h2>
@@ -137,7 +137,7 @@
#define <a href="ft2-winfnt_fonts.html#FT_WinFNT_ID_OEM">FT_WinFNT_ID_OEM</a> 255
</pre>
-<p>A list of valid values for the &lsquo;charset&rsquo; byte in <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a>. Exact mapping tables for the various cpXXXX encodings (except for cp1361) can be found at <a href="ftp://ftp.unicode.org/public">ftp://ftp.unicode.org/public</a> in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.</p>
+<p>A list of valid values for the &lsquo;charset&rsquo; byte in <a href="ft2-winfnt_fonts.html#FT_WinFNT_HeaderRec">FT_WinFNT_HeaderRec</a>. Exact mapping tables for the various cpXXXX encodings (except for cp1361) can be found at <a href="ftp://ftp.unicode.org/Public">ftp://ftp.unicode.org/Public</a> in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.</p>
<h4>values</h4>
<table class="fields">
@@ -156,7 +156,7 @@
<p>The &lsquo;CreateFont&rsquo; documentation says: The FT_WinFNT_ID_OEM value specifies a character set that is operating-system dependent.</p>
<p>The &lsquo;IFIMETRICS&rsquo; documentation from the &lsquo;Windows Driver Development Kit&rsquo; says: This font supports an OEM-specific character set. The OEM character set is system dependent.</p>
<p>In general OEM, as opposed to ANSI (i.e., cp1252), denotes the second default codepage that most international versions of Windows have. It is one of the OEM codepages from</p>
-<p><a href="http://www.microsoft.com/globaldev/reference/cphome.mspx">http://www.microsoft.com/globaldev/reference/cphome.mspx</a>,</p>
+<p><a href="https://msdn.microsoft.com/en-us/goglobal/bb964655">https://msdn.microsoft.com/en-us/goglobal/bb964655</a>,</p>
<p>and is used for the &lsquo;DOS boxes&rsquo;, to support legacy applications. A German Windows version for example usually uses ANSI codepage 1252 and OEM codepage 850.</p>
</td></tr>
<tr><td class="val" id="FT_WinFNT_ID_CP874">FT_WinFNT_ID_CP874</td><td class="desc">
diff --git a/freetype/docs/release b/freetype/docs/release
index 98f16cd35..bd92b23f9 100644
--- a/freetype/docs/release
+++ b/freetype/docs/release
@@ -189,7 +189,7 @@ How to prepare a new release
----------------------------------------------------------------------
-Copyright 2003, 2005-2007, 2009, 2011-2014 by
+Copyright 2003-2015 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
diff --git a/freetype/include/config/ftconfig.h b/freetype/include/config/ftconfig.h
index be2a7bde7..9686bb3a4 100644
--- a/freetype/include/config/ftconfig.h
+++ b/freetype/include/config/ftconfig.h
@@ -4,7 +4,7 @@
/* */
/* ANSI-specific configuration file (specification only). */
/* */
-/* Copyright 1996-2004, 2006-2008, 2010-2011, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -319,11 +319,28 @@ FT_BEGIN_HEADER
#endif
+ /*************************************************************************/
+ /* */
+ /* miscellaneous */
+ /* */
+ /*************************************************************************/
+
+
#define FT_BEGIN_STMNT do {
#define FT_END_STMNT } while ( 0 )
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+ /* typeof condition taken from gnulib's `intprops.h' header file */
+#if ( __GNUC__ >= 2 || \
+ defined( __IBM__TYPEOF__ ) || \
+ ( __SUNPRO_C >= 0x5110 && !__STDC__ ) )
+#define TYPEOF( type ) (__typeof__ (type))
+#else
+#define TYPEOF( type ) /* empty */
+#endif
+
+
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
#define FT_LOCAL( x ) static x
diff --git a/freetype/include/config/ftheader.h b/freetype/include/config/ftheader.h
index b62362992..4906bc1f2 100644
--- a/freetype/include/config/ftheader.h
+++ b/freetype/include/config/ftheader.h
@@ -4,7 +4,7 @@
/* */
/* Build macros of the FreeType 2 library. */
/* */
-/* Copyright 1996-2008, 2010, 2012, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -710,14 +710,16 @@
/*************************************************************************
*
* @macro:
- * FT_XFREE86_H
+ * FT_FONT_FORMATS_H
*
* @description:
* A macro used in #include statements to name the file containing the
- * FreeType~2 API which provides functions specific to the XFree86 and
- * X.Org X11 servers.
+ * FreeType~2 API which provides functions specific to font formats.
*/
-#define FT_XFREE86_H <ftxf86.h>
+#define FT_FONT_FORMATS_H <ftfntfmt.h>
+
+ /* deprecated */
+#define FT_XFREE86_H FT_FONT_FORMATS_H
/*************************************************************************
diff --git a/freetype/include/config/ftoption.h b/freetype/include/config/ftoption.h
index 2b0b67e7a..1536c7236 100644
--- a/freetype/include/config/ftoption.h
+++ b/freetype/include/config/ftoption.h
@@ -4,7 +4,7 @@
/* */
/* User-selectable configuration macros (specification only). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -378,10 +378,6 @@ FT_BEGIN_HEADER
/* The size in bytes of the render pool used by the scan-line converter */
/* to do all of its work. */
/* */
- /* This must be greater than 4KByte if you use FreeType to rasterize */
- /* glyphs; otherwise, you may set it to zero to avoid unnecessary */
- /* allocation of the render pool. */
- /* */
#define FT_RENDER_POOL_SIZE 16384L
@@ -435,6 +431,8 @@ FT_BEGIN_HEADER
/* af_glyph_hints_dump_points */
/* af_glyph_hints_dump_segments */
/* af_glyph_hints_dump_edges */
+ /* af_glyph_hints_get_num_segments */
+ /* af_glyph_hints_get_segment_offset */
/* */
/* As an argument, they use another global variable: */
/* */
@@ -659,19 +657,6 @@ FT_BEGIN_HEADER
/*************************************************************************/
/* */
- /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
- /* bytecode interpreter with a huge switch statement, rather than a call */
- /* table. This results in smaller and faster code for a number of */
- /* architectures. */
- /* */
- /* Note however that on some compiler/processor combinations, undefining */
- /* this macro will generate faster, though larger, code. */
- /* */
-#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
- /*************************************************************************/
- /* */
/* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
/* TrueType glyph loader to use Apple's definition of how to handle */
/* component offsets in composite glyphs. */
@@ -684,7 +669,7 @@ FT_BEGIN_HEADER
/* fonts will not have them. */
/* */
/* http://www.microsoft.com/typography/otspec/glyf.htm */
- /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html */
/* */
#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
@@ -835,10 +820,12 @@ FT_BEGIN_HEADER
/* grid. To find out the optimal scaling and shifting value, various */
/* parameter combinations are tried and scored. */
/* */
- /* This experimental option is only active if the render mode is */
- /* FT_RENDER_MODE_LIGHT. */
+ /* This experimental option is active only if the rendering mode is */
+ /* FT_RENDER_MODE_LIGHT; you can switch warping on and off with the */
+ /* `warping' property of the auto-hinter (see file `ftautoh.h' for more */
+ /* information; by default it is switched off). */
/* */
-/* #define AF_CONFIG_OPTION_USE_WARPER */
+#define AF_CONFIG_OPTION_USE_WARPER
/* */
diff --git a/freetype/include/config/ftstdlib.h b/freetype/include/config/ftstdlib.h
index b940efc42..8ef43c04b 100644
--- a/freetype/include/config/ftstdlib.h
+++ b/freetype/include/config/ftstdlib.h
@@ -5,7 +5,7 @@
/* ANSI-specific library and header configuration file (specification */
/* only). */
/* */
-/* Copyright 2002-2007, 2009, 2011-2012 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -141,8 +141,7 @@
/**********************************************************************/
-#define ft_atol atol
-#define ft_labs labs
+#define ft_atol atol
/**********************************************************************/
diff --git a/freetype/include/freetype.h b/freetype/include/freetype.h
index 27fd44bfc..bca93e5b8 100644
--- a/freetype/include/freetype.h
+++ b/freetype/include/freetype.h
@@ -4,7 +4,7 @@
/* */
/* FreeType high-level API and common types (specification only). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -394,8 +394,11 @@ FT_BEGIN_HEADER
/* It also embeds a memory manager (see @FT_Memory), as well as a */
/* scan-line converter object (see @FT_Raster). */
/* */
- /* In multi-threaded applications, make sure that the same FT_Library */
- /* object or any of its children doesn't get accessed in parallel. */
+ /* In multi-threaded applications it is easiest to use one */
+ /* `FT_Library' object per thread. In case this is too cumbersome, */
+ /* a single `FT_Library' object across threads is possible also */
+ /* (since FreeType version 2.5.6), as long as a mutex lock is used */
+ /* around @FT_New_Face and @FT_Done_Face. */
/* */
/* <Note> */
/* Library objects are normally created by @FT_Init_FreeType, and */
@@ -477,6 +480,14 @@ FT_BEGIN_HEADER
/* */
/* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
/* */
+ /* An `FT_Face' object can only be safely used from one thread at a */
+ /* time. Similarly, creation and destruction of `FT_Face' with the */
+ /* same @FT_Library object can only be done from one thread at a */
+ /* time. On the other hand, functions like @FT_Load_Glyph and its */
+ /* siblings are thread-safe and do not need the lock to be held as */
+ /* long as the same `FT_Face' object is not used from multiple */
+ /* threads at the same time. */
+ /* */
/* <Also> */
/* See @FT_FaceRec for the publicly accessible fields of a given face */
/* object. */
@@ -631,9 +642,13 @@ FT_BEGIN_HEADER
/* */
/* FT_ENCODING_MS_SYMBOL :: */
/* Corresponds to the Microsoft Symbol encoding, used to encode */
- /* mathematical symbols in the 32..255 character code range. For */
- /* more information, see */
- /* `http://www.kostis.net/charsets/symbol.htm'. */
+ /* mathematical symbols and wingdings. For more information, see */
+ /* `http://www.microsoft.com/typography/otspec/recom.htm', */
+ /* `http://www.kostis.net/charsets/symbol.htm', and */
+ /* `http://www.kostis.net/charsets/wingding.htm'. */
+ /* */
+ /* This encoding uses character codes from the PUA (Private Unicode */
+ /* Area) in the range U+F020-U+F0FF. */
/* */
/* FT_ENCODING_SJIS :: */
/* Corresponds to Japanese SJIS encoding. More info at */
@@ -651,7 +666,7 @@ FT_BEGIN_HEADER
/* FT_ENCODING_WANSUNG :: */
/* Corresponds to the Korean encoding system known as Wansung. */
/* For more information see */
- /* `http://msdn.microsoft.com/en-US/goglobal/cc305154'. */
+ /* `https://msdn.microsoft.com/en-US/goglobal/cc305154'. */
/* */
/* FT_ENCODING_JOHAB :: */
/* The Korean standard character set (KS~C 5601-1992), which */
@@ -893,6 +908,11 @@ FT_BEGIN_HEADER
/* Can be NULL (e.g., in fonts embedded in a */
/* PDF file). */
/* */
+ /* In case the font doesn't provide a specific */
+ /* family name entry, FreeType tries to */
+ /* synthesize one, deriving it from other name */
+ /* entries. */
+ /* */
/* style_name :: The face's style name. This is an ASCII */
/* string, usually in English, that describes */
/* the typeface's style (like `Italic', */
@@ -1140,7 +1160,7 @@ FT_BEGIN_HEADER
/* TrueType bytecode instructions to move and scale all of its */
/* subglyphs. */
/* */
- /* It is not possible to autohint such fonts using */
+ /* It is not possible to auto-hint such fonts using */
/* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */
/* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */
/* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */
@@ -1649,11 +1669,11 @@ FT_BEGIN_HEADER
/* needs to know about the image format. */
/* */
/* lsb_delta :: The difference between hinted and unhinted */
- /* left side bearing while autohinting is */
+ /* left side bearing while auto-hinting is */
/* active. Zero otherwise. */
/* */
/* rsb_delta :: The difference between hinted and unhinted */
- /* right side bearing while autohinting is */
+ /* right side bearing while auto-hinting is */
/* active. Zero otherwise. */
/* */
/* <Note> */
@@ -1676,7 +1696,7 @@ FT_BEGIN_HEADER
/* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */
/* */
/* <Note> */
- /* Here a small pseudo code fragment that shows how to use */
+ /* Here is a small pseudo code fragment that shows how to use */
/* `lsb_delta' and `rsb_delta': */
/* */
/* { */
@@ -1769,8 +1789,8 @@ FT_BEGIN_HEADER
/* use @FT_New_Library instead, followed by a call to */
/* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */
/* */
- /* For multi-threading applications each thread should have its own */
- /* FT_Library object. */
+ /* See the documentation of @FT_Library and @FT_Face for */
+ /* multi-threading issues. */
/* */
/* If you need reference-counting (cf. @FT_Reference_Library), use */
/* @FT_New_Library and @FT_Done_Library. */
@@ -3398,8 +3418,9 @@ FT_BEGIN_HEADER
/* @FT_Get_FSType_Flags; they inform client applications of embedding */
/* and subsetting restrictions associated with a font. */
/* */
- /* See http://www.adobe.com/devnet/acrobat/pdfs/FontPolicies.pdf for */
- /* more details. */
+ /* See */
+ /* http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf */
+ /* for more details. */
/* */
/* <Values> */
/* FT_FSTYPE_INSTALLABLE_EMBEDDING :: */
@@ -3936,8 +3957,8 @@ FT_BEGIN_HEADER
*
*/
#define FREETYPE_MAJOR 2
-#define FREETYPE_MINOR 5
-#define FREETYPE_PATCH 5
+#define FREETYPE_MINOR 6
+#define FREETYPE_PATCH 0
/*************************************************************************/
diff --git a/freetype/include/ft2build.h b/freetype/include/ft2build.h
index 6f8eb7f37..09c19d42a 100644
--- a/freetype/include/ft2build.h
+++ b/freetype/include/ft2build.h
@@ -4,7 +4,7 @@
/* */
/* FreeType 2 build and setup macros. */
/* */
-/* Copyright 1996-2001, 2006, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftadvanc.h b/freetype/include/ftadvanc.h
index dde707ede..1e73bf2eb 100644
--- a/freetype/include/ftadvanc.h
+++ b/freetype/include/ftadvanc.h
@@ -4,7 +4,7 @@
/* */
/* Quick computation of advance widths (specification only). */
/* */
-/* Copyright 2008, 2013, 2014 by */
+/* Copyright 2008-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -77,7 +77,7 @@ FT_BEGIN_HEADER
/* and hinting of the glyph outline, are extremely slow by */
/* comparison. */
/* */
-#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000UL
+#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L
/*************************************************************************/
diff --git a/freetype/include/ftautoh.h b/freetype/include/ftautoh.h
index 59191abbf..cf7b76f49 100644
--- a/freetype/include/ftautoh.h
+++ b/freetype/include/ftautoh.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for controlling the auto-hinter (specification only). */
/* */
-/* Copyright 2012, 2013 by */
+/* Copyright 2012-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -300,7 +300,7 @@ FT_BEGIN_HEADER
* @description:
* *Experimental* *only*
*
- * If Freetype gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
+ * If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
* the HarfBuzz library access OpenType features for getting better
* glyph coverages, this property sets the (auto-fitter) script to be
* used for the default (OpenType) script data of a font's GSUB table.
@@ -391,6 +391,54 @@ FT_BEGIN_HEADER
} FT_Prop_IncreaseXHeight;
+
+ /**************************************************************************
+ *
+ * @property:
+ * warping
+ *
+ * @description:
+ * *Experimental* *only*
+ *
+ * If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
+ * activate the warp hinting code in the auto-hinter, this property
+ * switches warping on and off.
+ *
+ * Warping only works in `light' auto-hinting mode. The idea of the
+ * code is to slightly scale and shift a glyph along the non-hinted
+ * dimension (which is usually the horizontal axis) so that as much of
+ * its segments are aligned (more or less) to the grid. To find out a
+ * glyph's optimal scaling and shifting value, various parameter
+ * combinations are tried and scored.
+ *
+ * By default, warping is off. The example below shows how to switch on
+ * warping (omitting the error handling).
+ *
+ * {
+ * FT_Library library;
+ * FT_Bool warping = 1;
+ *
+ *
+ * FT_Init_FreeType( &library );
+ *
+ * FT_Property_Set( library, "autofitter",
+ * "warping", &warping );
+ * }
+ *
+ * @note:
+ * This property can be used with @FT_Property_Get also.
+ *
+ * The warping code can also change advance widths. Have a look at the
+ * `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
+ * for details on improving inter-glyph distances while rendering.
+ *
+ * Since warping is a global property of the auto-hinter it is best to
+ * change its value before rendering any face. Otherwise, you should
+ * reload all faces that get auto-hinted in `light' hinting mode.
+ *
+ */
+
+
/* */
diff --git a/freetype/include/ftbbox.h b/freetype/include/ftbbox.h
index b6f9a0847..b0e31b15c 100644
--- a/freetype/include/ftbbox.h
+++ b/freetype/include/ftbbox.h
@@ -4,7 +4,7 @@
/* */
/* FreeType exact bbox computation (specification). */
/* */
-/* Copyright 1996-2001, 2003, 2007, 2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftbdf.h b/freetype/include/ftbdf.h
index 6bc01ba0d..d006bba64 100644
--- a/freetype/include/ftbdf.h
+++ b/freetype/include/ftbdf.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing BDF-specific strings (specification). */
/* */
-/* Copyright 2002-2004, 2006, 2009, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftbitmap.h b/freetype/include/ftbitmap.h
index 226c19827..9ad1c91fd 100644
--- a/freetype/include/ftbitmap.h
+++ b/freetype/include/ftbitmap.h
@@ -4,7 +4,7 @@
/* */
/* FreeType utility functions for bitmaps (specification). */
/* */
-/* Copyright 2004-2006, 2008, 2013, 2014 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -55,7 +55,7 @@ FT_BEGIN_HEADER
/*************************************************************************/
/* */
/* <Function> */
- /* FT_Bitmap_New */
+ /* FT_Bitmap_Init */
/* */
/* <Description> */
/* Initialize a pointer to an @FT_Bitmap structure. */
@@ -63,6 +63,14 @@ FT_BEGIN_HEADER
/* <InOut> */
/* abitmap :: A pointer to the bitmap structure. */
/* */
+ /* <Note> */
+ /* A deprecated name for the same function is `FT_Bitmap_New'. */
+ /* */
+ FT_EXPORT( void )
+ FT_Bitmap_Init( FT_Bitmap *abitmap );
+
+
+ /* deprecated */
FT_EXPORT( void )
FT_Bitmap_New( FT_Bitmap *abitmap );
@@ -202,7 +210,7 @@ FT_BEGIN_HEADER
/* FT_Bitmap_Done */
/* */
/* <Description> */
- /* Destroy a bitmap object created with @FT_Bitmap_New. */
+ /* Destroy a bitmap object initialized with @FT_Bitmap_Init. */
/* */
/* <Input> */
/* library :: A handle to a library object. */
diff --git a/freetype/include/ftbzip2.h b/freetype/include/ftbzip2.h
index 4dce161fd..c25f9469d 100644
--- a/freetype/include/ftbzip2.h
+++ b/freetype/include/ftbzip2.h
@@ -4,7 +4,7 @@
/* */
/* Bzip2-compressed stream support. */
/* */
-/* Copyright 2010 by */
+/* Copyright 2010-2015 by */
/* Joel Klinghed. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftcache.h b/freetype/include/ftcache.h
index a30e925cc..68525bb82 100644
--- a/freetype/include/ftcache.h
+++ b/freetype/include/ftcache.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Cache subsystem (specification). */
/* */
-/* Copyright 1996-2008, 2010, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -667,8 +667,8 @@ FT_BEGIN_HEADER
typedef struct FTC_ImageTypeRec_
{
FTC_FaceID face_id;
- FT_Int width;
- FT_Int height;
+ FT_UInt width;
+ FT_UInt height;
FT_Int32 flags;
} FTC_ImageTypeRec;
diff --git a/freetype/include/ftcffdrv.h b/freetype/include/ftcffdrv.h
index f7031bc88..6c8e416ce 100644
--- a/freetype/include/ftcffdrv.h
+++ b/freetype/include/ftcffdrv.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for controlling the CFF driver (specification only). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftcid.h b/freetype/include/ftcid.h
index a7c506dae..ea0895121 100644
--- a/freetype/include/ftcid.h
+++ b/freetype/include/ftcid.h
@@ -4,7 +4,8 @@
/* */
/* FreeType API for accessing CID font information (specification). */
/* */
-/* Copyright 2007, 2009 by Dereg Clegg, Michael Toftdal. */
+/* Copyright 2007-2015 by */
+/* Dereg Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/include/fterrdef.h b/freetype/include/fterrdef.h
index 99b2fadec..1bf0751b1 100644
--- a/freetype/include/fterrdef.h
+++ b/freetype/include/fterrdef.h
@@ -4,7 +4,7 @@
/* */
/* FreeType error codes (specification). */
/* */
-/* Copyright 2002, 2004, 2006, 2007, 2010-2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/fterrors.h b/freetype/include/fterrors.h
index e98e080cf..5c9a4651d 100644
--- a/freetype/include/fterrors.h
+++ b/freetype/include/fterrors.h
@@ -4,7 +4,7 @@
/* */
/* FreeType error code handling (specification). */
/* */
-/* Copyright 1996-2002, 2004, 2007, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftxf86.h b/freetype/include/ftfntfmt.h
index a81a7f356..0cc0fde93 100644..100755
--- a/freetype/include/ftxf86.h
+++ b/freetype/include/ftfntfmt.h
@@ -1,10 +1,10 @@
/***************************************************************************/
/* */
-/* ftxf86.h */
+/* ftfntfmt.h */
/* */
-/* Support functions for X11. */
+/* Support functions for font formats. */
/* */
-/* Copyright 2002-2004, 2006, 2007, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __FTXF86_H__
-#define __FTXF86_H__
+#ifndef __FTFNTFMT_H__
+#define __FTFNTFMT_H__
#include <ft2build.h>
#include <freetype.h>
@@ -49,22 +49,20 @@ FT_BEGIN_HEADER
/* however, there are special cases (like in PDF devices) where it is */
/* important to differentiate, in spite of FreeType's uniform API. */
/* */
- /* This function is in the X11/xf86 namespace for historical reasons */
- /* and in no way depends on that windowing system. */
- /* */
/*************************************************************************/
/*************************************************************************/
/* */
/* <Function> */
- /* FT_Get_X11_Font_Format */
+ /* FT_Get_Font_Format */
/* */
/* <Description> */
- /* Return a string describing the format of a given face, using values */
- /* that can be used as an X11 FONT_PROPERTY. Possible values are */
- /* `TrueType', `Type~1', `BDF', `PCF', `Type~42', `CID~Type~1', `CFF', */
- /* `PFR', and `Windows~FNT'. */
+ /* Return a string describing the format of a given face. Possible */
+ /* values are `TrueType', `Type~1', `BDF', `PCF', `Type~42', */
+ /* `CID~Type~1', `CFF', `PFR', and `Windows~FNT'. */
+ /* */
+ /* The return value is suitable to be used as an X11 FONT_PROPERTY. */
/* */
/* <Input> */
/* face :: */
@@ -73,12 +71,22 @@ FT_BEGIN_HEADER
/* <Return> */
/* Font format string. NULL in case of error. */
/* */
+ /* <Note> */
+ /* A deprecated name for the same function is */
+ /* `FT_Get_X11_Font_Format'. */
+ /* */
+ FT_EXPORT( const char* )
+ FT_Get_Font_Format( FT_Face face );
+
+
+ /* deprecated */
FT_EXPORT( const char* )
FT_Get_X11_Font_Format( FT_Face face );
+
/* */
FT_END_HEADER
-#endif /* __FTXF86_H__ */
+#endif /* __FTFNTFMT_H__ */
diff --git a/freetype/include/ftgasp.h b/freetype/include/ftgasp.h
index f3e5c16b4..f2f709fb3 100644
--- a/freetype/include/ftgasp.h
+++ b/freetype/include/ftgasp.h
@@ -4,7 +4,7 @@
/* */
/* Access of TrueType's `gasp' table (specification). */
/* */
-/* Copyright 2007, 2008, 2011 by */
+/* Copyright 2007-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftglyph.h b/freetype/include/ftglyph.h
index 2693cc22d..740d4fd95 100644
--- a/freetype/include/ftglyph.h
+++ b/freetype/include/ftglyph.h
@@ -4,7 +4,7 @@
/* */
/* FreeType convenience functions to handle glyphs (specification). */
/* */
-/* Copyright 1996-2003, 2006, 2008, 2009, 2011, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftgxval.h b/freetype/include/ftgxval.h
index fc7404648..1ff461452 100644
--- a/freetype/include/ftgxval.h
+++ b/freetype/include/ftgxval.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
/* */
-/* Copyright 2004-2006, 2013 by */
+/* Copyright 2004-2015 by */
/* Masatake YAMATO, Redhat K.K, */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/freetype/include/ftgzip.h b/freetype/include/ftgzip.h
index 6e28e010e..c0ac2c104 100644
--- a/freetype/include/ftgzip.h
+++ b/freetype/include/ftgzip.h
@@ -4,7 +4,7 @@
/* */
/* Gzip-compressed stream support. */
/* */
-/* Copyright 2002-2004, 2006, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftimage.h b/freetype/include/ftimage.h
index 2f7ca2aaf..82f284c4f 100644
--- a/freetype/include/ftimage.h
+++ b/freetype/include/ftimage.h
@@ -5,7 +5,7 @@
/* FreeType glyph image formats and default raster interface */
/* (specification). */
/* */
-/* Copyright 1996-2010, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -258,11 +258,6 @@ FT_BEGIN_HEADER
/* field is intended for paletted pixel modes. Not */
/* used currently. */
/* */
- /* <Note> */
- /* For now, the only pixel modes supported by FreeType are mono and */
- /* grays. However, drivers might be added in the future to support */
- /* more `colorful' options. */
- /* */
typedef struct FT_Bitmap_
{
unsigned int rows;
@@ -1078,10 +1073,10 @@ FT_BEGIN_HEADER
/* FT_Raster_ResetFunc */
/* */
/* <Description> */
- /* FreeType provides an area of memory called the `render pool', */
- /* available to all registered rasters. This pool can be freely used */
- /* during a given scan-conversion but is shared by all rasters. Its */
- /* content is thus transient. */
+ /* FreeType used to provide an area of memory called the `render */
+ /* pool' available to all registered rasters. This was not thread */
+ /* safe however and now FreeType never allocates this pool. NULL */
+ /* is always passed in as pool_base. */
/* */
/* This function is called each time the render pool changes, or just */
/* after a new raster object is created. */
@@ -1094,10 +1089,9 @@ FT_BEGIN_HEADER
/* pool_size :: The size in bytes of the render pool. */
/* */
/* <Note> */
- /* Rasters can ignore the render pool and rely on dynamic memory */
+ /* Rasters should ignore the render pool and rely on dynamic or stack */
/* allocation if they want to (a handle to the memory allocator is */
- /* passed to the raster constructor). However, this is not */
- /* recommended for efficiency purposes. */
+ /* passed to the raster constructor). */
/* */
typedef void
(*FT_Raster_ResetFunc)( FT_Raster raster,
diff --git a/freetype/include/ftincrem.h b/freetype/include/ftincrem.h
index a72ddef5c..3964d002e 100644
--- a/freetype/include/ftincrem.h
+++ b/freetype/include/ftincrem.h
@@ -4,7 +4,7 @@
/* */
/* FreeType incremental loading (specification). */
/* */
-/* Copyright 2002, 2003, 2006-2008, 2010, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftlcdfil.h b/freetype/include/ftlcdfil.h
index 439ddfd51..fd8d49616 100644
--- a/freetype/include/ftlcdfil.h
+++ b/freetype/include/ftlcdfil.h
@@ -5,7 +5,7 @@
/* FreeType API for color filtering of subpixel bitmap glyphs */
/* (specification). */
/* */
-/* Copyright 2006-2008, 2010, 2013, 2014 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftlist.h b/freetype/include/ftlist.h
index 210744127..d6f972596 100644
--- a/freetype/include/ftlist.h
+++ b/freetype/include/ftlist.h
@@ -4,7 +4,7 @@
/* */
/* Generic list support for FreeType (specification). */
/* */
-/* Copyright 1996-2001, 2003, 2007, 2010, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftlzw.h b/freetype/include/ftlzw.h
index e2606ad6b..4f75d160a 100644
--- a/freetype/include/ftlzw.h
+++ b/freetype/include/ftlzw.h
@@ -4,7 +4,7 @@
/* */
/* LZW-compressed stream support. */
/* */
-/* Copyright 2004, 2006 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftmac.h b/freetype/include/ftmac.h
index 42874fe6f..14c55cfe2 100644
--- a/freetype/include/ftmac.h
+++ b/freetype/include/ftmac.h
@@ -4,7 +4,7 @@
/* */
/* Additional Mac-specific API. */
/* */
-/* Copyright 1996-2001, 2004, 2006, 2007, 2013 by */
+/* Copyright 1996-2015 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftmm.h b/freetype/include/ftmm.h
index 2dcfd678d..6ef47987e 100644
--- a/freetype/include/ftmm.h
+++ b/freetype/include/ftmm.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Multiple Master font interface (specification). */
/* */
-/* Copyright 1996-2001, 2003, 2004, 2006, 2009, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -95,8 +95,8 @@ FT_BEGIN_HEADER
/* */
/* num_designs :: Number of designs; should be normally 2^num_axis */
/* even though the Type~1 specification strangely */
- /* allows for intermediate designs to be present. This */
- /* number cannot exceed~16. */
+ /* allows for intermediate designs to be present. */
+ /* This number cannot exceed~16. */
/* */
/* axis :: A table of axis descriptors. */
/* */
@@ -201,10 +201,10 @@ FT_BEGIN_HEADER
/* associated with them. The font can tell the */
/* user that, for example, Weight=1.5 is `Bold'. */
/* */
- /* axis :: A table of axis descriptors. */
+ /* axis :: An axis descriptor table. */
/* GX fonts contain slightly more data than MM. */
/* */
- /* namedstyles :: A table of named styles. */
+ /* namedstyle :: A named style table. */
/* Only meaningful with GX. */
/* */
typedef struct FT_MM_Var_
@@ -280,8 +280,10 @@ FT_BEGIN_HEADER
/* face :: A handle to the source face. */
/* */
/* <Input> */
- /* num_coords :: The number of design coordinates (must be equal to */
- /* the number of axes in the font). */
+ /* num_coords :: The number of available design coordinates. If it */
+ /* is larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use default values for the remaining axes. */
/* */
/* coords :: An array of design coordinates. */
/* */
@@ -307,8 +309,10 @@ FT_BEGIN_HEADER
/* face :: A handle to the source face. */
/* */
/* <Input> */
- /* num_coords :: The number of design coordinates (must be equal to */
- /* the number of axes in the font). */
+ /* num_coords :: The number of available design coordinates. If it */
+ /* is larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use default values for the remaining axes. */
/* */
/* coords :: An array of design coordinates. */
/* */
@@ -334,8 +338,10 @@ FT_BEGIN_HEADER
/* face :: A handle to the source face. */
/* */
/* <Input> */
- /* num_coords :: The number of design coordinates (must be equal to */
- /* the number of axes in the font). */
+ /* num_coords :: The number of available design coordinates. If it */
+ /* is larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use default values for the remaining axes. */
/* */
/* coords :: The design coordinates array (each element must be */
/* between 0 and 1.0). */
diff --git a/freetype/include/ftmodapi.h b/freetype/include/ftmodapi.h
index 962236798..901add145 100644
--- a/freetype/include/ftmodapi.h
+++ b/freetype/include/ftmodapi.h
@@ -4,7 +4,7 @@
/* */
/* FreeType modules public interface (specification). */
/* */
-/* Copyright 1996-2003, 2006, 2008-2010, 2012, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -469,7 +469,9 @@ FT_BEGIN_HEADER
/* <Description> */
/* This function is used to create a new FreeType library instance */
/* from a given memory object. It is thus possible to use libraries */
- /* with distinct memory allocators within the same program. */
+ /* with distinct memory allocators within the same program. Note, */
+ /* however, that the used @FT_Memory structure is expected to remain */
+ /* valid for the life of the @FT_Library object. */
/* */
/* Normally, you would call this function (followed by a call to */
/* @FT_Add_Default_Modules or a series of calls to @FT_Add_Module) */
diff --git a/freetype/include/ftmoderr.h b/freetype/include/ftmoderr.h
index 5a27db151..9d7f98140 100644
--- a/freetype/include/ftmoderr.h
+++ b/freetype/include/ftmoderr.h
@@ -4,7 +4,7 @@
/* */
/* FreeType module error offsets (specification). */
/* */
-/* Copyright 2001-2005, 2010, 2013 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftotval.h b/freetype/include/ftotval.h
index 73a7ae86d..fe2544c27 100644
--- a/freetype/include/ftotval.h
+++ b/freetype/include/ftotval.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating OpenType tables (specification). */
/* */
-/* Copyright 2004-2007, 2013, 2014 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftoutln.h b/freetype/include/ftoutln.h
index 68d8a6cca..22b8acc11 100644
--- a/freetype/include/ftoutln.h
+++ b/freetype/include/ftoutln.h
@@ -5,7 +5,7 @@
/* Support for the FT_Outline type used to store glyph shapes of */
/* most scalable font formats (specification). */
/* */
-/* Copyright 1996-2003, 2005-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftpfr.h b/freetype/include/ftpfr.h
index 7060dd987..1f3302d55 100644
--- a/freetype/include/ftpfr.h
+++ b/freetype/include/ftpfr.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing PFR-specific data (specification only). */
/* */
-/* Copyright 2002, 2003, 2004, 2006, 2008, 2009 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftrender.h b/freetype/include/ftrender.h
index e8d36363c..ec8da700b 100644
--- a/freetype/include/ftrender.h
+++ b/freetype/include/ftrender.h
@@ -4,7 +4,7 @@
/* */
/* FreeType renderer modules public interface (specification). */
/* */
-/* Copyright 1996-2001, 2005, 2006, 2010 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -212,13 +212,8 @@ FT_BEGIN_HEADER
/* */
/* This doesn't change the current renderer for other formats. */
/* */
- /* Currently, only the B/W renderer, if compiled with */
- /* FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels */
- /* anti-aliasing mode; this option must be set directly in */
- /* `ftraster.c' and is undefined by default) accepts a single tag */
- /* `pal5' to set its gray palette as a character string with */
- /* 5~elements. Consequently, the third and fourth argument are zero */
- /* normally. */
+ /* Currently, no FreeType renderer module uses `parameters'; you */
+ /* should thus always pass NULL as the value. */
/* */
FT_EXPORT( FT_Error )
FT_Set_Renderer( FT_Library library,
diff --git a/freetype/include/ftsizes.h b/freetype/include/ftsizes.h
index 46d1cdfd8..f343f9224 100644
--- a/freetype/include/ftsizes.h
+++ b/freetype/include/ftsizes.h
@@ -4,7 +4,7 @@
/* */
/* FreeType size objects management (specification). */
/* */
-/* Copyright 1996-2001, 2003, 2004, 2006, 2009, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftsnames.h b/freetype/include/ftsnames.h
index 9b9bdbf02..60ff3ac77 100644
--- a/freetype/include/ftsnames.h
+++ b/freetype/include/ftsnames.h
@@ -7,7 +7,7 @@
/* */
/* This is _not_ used to retrieve glyph names! */
/* */
-/* Copyright 1996-2003, 2006, 2009, 2010, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftstroke.h b/freetype/include/ftstroke.h
index bd311709f..7ebb1e740 100644
--- a/freetype/include/ftstroke.h
+++ b/freetype/include/ftstroke.h
@@ -4,7 +4,7 @@
/* */
/* FreeType path stroker (specification). */
/* */
-/* Copyright 2002-2006, 2008, 2009, 2011-2012, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftsynth.h b/freetype/include/ftsynth.h
index 869de765f..8955585e1 100644
--- a/freetype/include/ftsynth.h
+++ b/freetype/include/ftsynth.h
@@ -5,7 +5,7 @@
/* FreeType synthesizing code for emboldening and slanting */
/* (specification). */
/* */
-/* Copyright 2000-2001, 2003, 2006, 2008, 2012, 2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -62,8 +62,10 @@ FT_BEGIN_HEADER
/* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */
/* */
/* For emboldened outlines the height, width, and advance metrics are */
- /* increased by the strength of the emboldening. You can also call */
- /* @FT_Outline_Get_CBox to get precise values. */
+ /* increased by the strength of the emboldening -- this even affects */
+ /* mono-width fonts! */
+ /* */
+ /* You can also call @FT_Outline_Get_CBox to get precise values. */
FT_EXPORT( void )
FT_GlyphSlot_Embolden( FT_GlyphSlot slot );
diff --git a/freetype/include/ftsystem.h b/freetype/include/ftsystem.h
index 7436ed267..2bc999910 100644
--- a/freetype/include/ftsystem.h
+++ b/freetype/include/ftsystem.h
@@ -4,7 +4,7 @@
/* */
/* FreeType low-level system interface definition (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2005, 2010, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/fttrigon.h b/freetype/include/fttrigon.h
index 89c1eb409..899758326 100644
--- a/freetype/include/fttrigon.h
+++ b/freetype/include/fttrigon.h
@@ -4,7 +4,7 @@
/* */
/* FreeType trigonometric functions (specification). */
/* */
-/* Copyright 2001, 2003, 2005, 2007, 2013 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftttdrv.h b/freetype/include/ftttdrv.h
index 358841397..f56040b82 100644
--- a/freetype/include/ftttdrv.h
+++ b/freetype/include/ftttdrv.h
@@ -5,7 +5,7 @@
/* FreeType API for controlling the TrueType driver */
/* (specification only). */
/* */
-/* Copyright 2013 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -67,13 +67,13 @@ FT_BEGIN_HEADER
* TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel
* support otherwise (since it isn't available then).
*
- * If subpixel hinting is on, many TrueType bytecode instructions
- * behave differently compared to B/W or grayscale rendering. The
- * main idea is to render at a much increased horizontal resolution,
- * then sampling down the created output to subpixel precision.
- * However, many older fonts are not suited to this and must be
- * specially taken care of by applying (hardcoded) font-specific
- * tweaks.
+ * If subpixel hinting is on, many TrueType bytecode instructions behave
+ * differently compared to B/W or grayscale rendering (except if `native
+ * ClearType' is selected by the font). The main idea is to render at a
+ * much increased horizontal resolution, then sampling down the created
+ * output to subpixel precision. However, many older fonts are not
+ * suited to this and must be specially taken care of by applying
+ * (hardcoded) font-specific tweaks.
*
* Details on subpixel hinting and some of the necessary tweaks can be
* found in Greg Hitchcock's whitepaper at
@@ -135,24 +135,87 @@ FT_BEGIN_HEADER
* `FT_Err_Unimplemented_Feature' error.
*
* Depending on the graphics framework, Microsoft uses different
- * bytecode engines. As a consequence, the version numbers returned by
- * a call to the `GETINFO[1]' bytecode instruction are more convoluted
- * than desired.
+ * bytecode and rendering engines. As a consequence, the version
+ * numbers returned by a call to the `GETINFO' bytecode instruction are
+ * more convoluted than desired.
+ *
+ * Here are two tables that try to shed some light on the possible
+ * values for the MS rasterizer engine, together with the additional
+ * features introduced by it.
+ *
+ * {
+ * GETINFO framework version feature
+ * -------------------------------------------------------------------
+ * 3 GDI (Win 3.1), v1.0 16-bit, first version
+ * TrueImage
+ * 33 GDI (Win NT 3.1), v1.5 32-bit
+ * HP Laserjet
+ * 34 GDI (Win 95) v1.6 font smoothing,
+ * new SCANTYPE opcode
+ * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
+ * bits in composite glyphs
+ * 36 MGDI (Win CE 2) v1.6+ classic ClearType
+ * 37 GDI (XP and later), v1.8 ClearType
+ * GDI+ old (before Vista)
+ * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
+ * WPF Y-direction ClearType,
+ * additional error checking
+ * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
+ * in GETINFO opcode,
+ * bug fixes
+ * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
+ * DWrite (Win 8) in GETINFO opcode,
+ * Gray ClearType
+ * }
+ *
+ * The `version' field gives a rough orientation only, since some
+ * applications provided certain features much earlier (as an example,
+ * Microsoft Reader used subpixel and Y-direction ClearType already in
+ * Windows 2000). Similarly, updates to a given framework might include
+ * improved hinting support.
*
* {
- * framework Windows version result of GETINFO[1]
- * ----------------------------------------------------
- * GDI before XP 35
- * GDI XP and later 37
- * GDI+ old before Vista 37
- * GDI+ old Vista, 7 38
- * GDI+ after 7 40
- * DWrite before 8 39
- * DWrite 8 and later 40
+ * version sampling rendering comment
+ * x y x y
+ * --------------------------------------------------------------
+ * v1.0 normal normal B/W B/W bi-level
+ * v1.6 high high gray gray grayscale
+ * v1.8 high normal color-filter B/W (GDI) ClearType
+ * v1.9 high high color-filter gray Color ClearType
+ * v2.1 high normal gray B/W Gray ClearType
+ * v2.1 high high gray gray Gray ClearType
* }
*
- * Since FreeType doesn't provide all capabilities of DWrite ClearType,
- * using version~38 seems justified.
+ * Color and Gray ClearType are the two available variants of
+ * `Y-direction ClearType', meaning grayscale rasterization along the
+ * Y-direction; the name used in the TrueType specification for this
+ * feature is `symmetric smoothing'. `Classic ClearType' is the
+ * original algorithm used before introducing a modified version in
+ * Win~XP. Another name for v1.6's grayscale rendering is `font
+ * smoothing', and `Color ClearType' is sometimes also called `DWrite
+ * ClearType'. To differentiate between today's Color ClearType and the
+ * earlier ClearType variant with B/W rendering along the vertical axis,
+ * the latter is sometimes called `GDI ClearType'.
+ *
+ * `Normal' and `high' sampling describe the (virtual) resolution to
+ * access the rasterized outline after the hinting process. `Normal'
+ * means 1 sample per grid line (i.e., B/W). In the current Microsoft
+ * implementation, `high' means an extra virtual resolution of 16x16 (or
+ * 16x1) grid lines per pixel for bytecode instructions like `MIRP'.
+ * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
+ * lines for color filtering if Color ClearType is activated.
+ *
+ * Note that `Gray ClearType' is essentially the same as v1.6's
+ * grayscale rendering. However, the GETINFO instruction handles it
+ * differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
+ * returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
+ * and~19 (Gray ClearType). Also, this mode respects bits 2 and~3 for
+ * the version~1 gasp table exclusively (like Color ClearType), while
+ * v1.6 only respects the values of version~0 (bits 0 and~1).
+ *
+ * FreeType doesn't provide all capabilities of the most recent
+ * ClearType incarnation, thus we identify our subpixel support as
+ * version~38.
*
*/
#define TT_INTERPRETER_VERSION_35 35
diff --git a/freetype/include/fttypes.h b/freetype/include/fttypes.h
index cb8152513..e13b9ed45 100644
--- a/freetype/include/fttypes.h
+++ b/freetype/include/fttypes.h
@@ -4,7 +4,7 @@
/* */
/* FreeType simple types definitions (specification only). */
/* */
-/* Copyright 1996-2002, 2004, 2006-2009, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ftwinfnt.h b/freetype/include/ftwinfnt.h
index aa6a9da96..d5d5bad20 100644
--- a/freetype/include/ftwinfnt.h
+++ b/freetype/include/ftwinfnt.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing Windows fnt-specific data. */
/* */
-/* Copyright 2003, 2004, 2008 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -59,7 +59,7 @@ FT_BEGIN_HEADER
* A list of valid values for the `charset' byte in
* @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX
* encodings (except for cp1361) can be found at
- * ftp://ftp.unicode.org/public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
+ * ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
* subdirectory. cp1361 is roughly a superset of
* MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
*
@@ -95,7 +95,7 @@ FT_BEGIN_HEADER
* second default codepage that most international versions of
* Windows have. It is one of the OEM codepages from
*
- * http://www.microsoft.com/globaldev/reference/cphome.mspx,
+ * https://msdn.microsoft.com/en-us/goglobal/bb964655,
*
* and is used for the `DOS boxes', to support legacy applications.
* A German Windows version for example usually uses ANSI codepage
diff --git a/freetype/include/internal/autohint.h b/freetype/include/internal/autohint.h
index a393f18ac..77c4c67a2 100644
--- a/freetype/include/internal/autohint.h
+++ b/freetype/include/internal/autohint.h
@@ -4,7 +4,7 @@
/* */
/* High-level `autohint' module-specific interface (specification). */
/* */
-/* Copyright 1996-2002, 2007, 2009, 2012 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/ftcalc.h b/freetype/include/internal/ftcalc.h
index 6282ad2bb..64aac4379 100644
--- a/freetype/include/internal/ftcalc.h
+++ b/freetype/include/internal/ftcalc.h
@@ -4,7 +4,7 @@
/* */
/* Arithmetic computations (specification). */
/* */
-/* Copyright 1996-2006, 2008, 2009, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/ftdebug.h b/freetype/include/internal/ftdebug.h
index ca26ab63b..55e15a90d 100644
--- a/freetype/include/internal/ftdebug.h
+++ b/freetype/include/internal/ftdebug.h
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component (specification). */
/* */
-/* Copyright 1996-2002, 2004, 2006-2009, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -140,7 +140,7 @@ FT_BEGIN_HEADER
/* This function may be useful if you want to control FreeType 2's */
/* debug level in your application. */
/* */
- FT_BASE( const char * )
+ FT_BASE( const char* )
FT_Trace_Get_Name( FT_Int idx );
diff --git a/freetype/include/internal/ftdriver.h b/freetype/include/internal/ftdriver.h
index 940218e62..16856d3df 100644
--- a/freetype/include/internal/ftdriver.h
+++ b/freetype/include/internal/ftdriver.h
@@ -4,7 +4,7 @@
/* */
/* FreeType font driver interface (specification). */
/* */
-/* Copyright 1996-2003, 2006, 2008, 2011-2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/ftgloadr.h b/freetype/include/internal/ftgloadr.h
index 7e4c34315..5f3426234 100644
--- a/freetype/include/internal/ftgloadr.h
+++ b/freetype/include/internal/ftgloadr.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph loader (specification). */
/* */
-/* Copyright 2002, 2003, 2005, 2006 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -121,23 +121,25 @@ FT_BEGIN_HEADER
FT_UInt n_contours );
-#define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \
- ( (_count) == 0 || \
- ( (_loader)->base.outline.n_points + \
- (_loader)->current.outline.n_points + \
- (unsigned long)(_count) ) <= (_loader)->max_points )
-
-#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \
- ( (_count) == 0 || \
- ( (_loader)->base.outline.n_contours + \
- (_loader)->current.outline.n_contours + \
- (unsigned long)(_count)) <= (_loader)->max_contours )
-
-#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points, _contours ) \
- ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \
- FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \
- ? 0 \
- : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
+#define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \
+ ( (_count) == 0 || \
+ ( (FT_UInt)(_loader)->base.outline.n_points + \
+ (FT_UInt)(_loader)->current.outline.n_points + \
+ (FT_UInt)(_count) ) <= (_loader)->max_points )
+
+#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \
+ ( (_count) == 0 || \
+ ( (FT_UInt)(_loader)->base.outline.n_contours + \
+ (FT_UInt)(_loader)->current.outline.n_contours + \
+ (FT_UInt)(_count) ) <= (_loader)->max_contours )
+
+#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points, _contours ) \
+ ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \
+ FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \
+ ? 0 \
+ : FT_GlyphLoader_CheckPoints( (_loader), \
+ (FT_UInt)(_points), \
+ (FT_UInt)(_contours) ) )
/* check that there is enough space to add `n_subs' sub-glyphs to */
diff --git a/freetype/include/internal/ftmemory.h b/freetype/include/internal/ftmemory.h
index 3d51aeec6..c0c553b4f 100644
--- a/freetype/include/internal/ftmemory.h
+++ b/freetype/include/internal/ftmemory.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType memory management macros (specification). */
/* */
-/* Copyright 1996-2002, 2004-2007, 2010, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -215,11 +215,14 @@ FT_BEGIN_HEADER
#define FT_MEM_SET_ERROR( cond ) ( (cond), error != 0 )
-#define FT_MEM_SET( dest, byte, count ) ft_memset( dest, byte, count )
+#define FT_MEM_SET( dest, byte, count ) \
+ ft_memset( dest, byte, (FT_Offset)(count) )
-#define FT_MEM_COPY( dest, source, count ) ft_memcpy( dest, source, count )
+#define FT_MEM_COPY( dest, source, count ) \
+ ft_memcpy( dest, source, (FT_Offset)(count) )
-#define FT_MEM_MOVE( dest, source, count ) ft_memmove( dest, source, count )
+#define FT_MEM_MOVE( dest, source, count ) \
+ ft_memmove( dest, source, (FT_Offset)(count) )
#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
@@ -227,14 +230,19 @@ FT_BEGIN_HEADER
#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
-#define FT_ARRAY_ZERO( dest, count ) \
- FT_MEM_ZERO( dest, (count) * sizeof ( *(dest) ) )
+#define FT_ARRAY_ZERO( dest, count ) \
+ FT_MEM_ZERO( dest, \
+ (FT_Offset)(count) * sizeof ( *(dest) ) )
-#define FT_ARRAY_COPY( dest, source, count ) \
- FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
+#define FT_ARRAY_COPY( dest, source, count ) \
+ FT_MEM_COPY( dest, \
+ source, \
+ (FT_Offset)(count) * sizeof ( *(dest) ) )
-#define FT_ARRAY_MOVE( dest, source, count ) \
- FT_MEM_MOVE( dest, source, (count) * sizeof ( *(dest) ) )
+#define FT_ARRAY_MOVE( dest, source, count ) \
+ FT_MEM_MOVE( dest, \
+ source, \
+ (FT_Offset)(count) * sizeof ( *(dest) ) )
/*
diff --git a/freetype/include/internal/ftobjs.h b/freetype/include/internal/ftobjs.h
index af5faf4a3..b028b9fb9 100644
--- a/freetype/include/internal/ftobjs.h
+++ b/freetype/include/internal/ftobjs.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType private base classes (specification). */
/* */
-/* Copyright 1996-2006, 2008, 2010, 2012-2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -83,11 +83,12 @@ FT_BEGIN_HEADER
x > y ? x + ( 3 * y >> 3 ) \
: y + ( 3 * x >> 3 ) )
-#define FT_PAD_FLOOR( x, n ) ( (x) & ~((n)-1) )
+ /* we use the TYPEOF macro to suppress signedness compilation warnings */
+#define FT_PAD_FLOOR( x, n ) ( (x) & ~TYPEOF( x )( (n)-1 ) )
#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + ((n)/2), n )
#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + ((n)-1), n )
-#define FT_PIX_FLOOR( x ) ( (x) & ~63 )
+#define FT_PIX_FLOOR( x ) ( (x) & ~TYPEOF( x )63 )
#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 )
#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 )
@@ -404,7 +405,7 @@ FT_BEGIN_HEADER
/* glyph_hints :: Format-specific glyph hints management. */
/* */
-#define FT_GLYPH_OWN_BITMAP 0x1
+#define FT_GLYPH_OWN_BITMAP 0x1U
typedef struct FT_Slot_InternalRec_
{
@@ -613,12 +614,12 @@ FT_BEGIN_HEADER
#define FT_REQUEST_WIDTH( req ) \
( (req)->horiResolution \
- ? (FT_Pos)( (req)->width * (req)->horiResolution + 36 ) / 72 \
+ ? ( (req)->width * (FT_Pos)(req)->horiResolution + 36 ) / 72 \
: (req)->width )
#define FT_REQUEST_HEIGHT( req ) \
( (req)->vertResolution \
- ? (FT_Pos)( (req)->height * (req)->vertResolution + 36 ) / 72 \
+ ? ( (req)->height * (FT_Pos)(req)->vertResolution + 36 ) / 72 \
: (req)->height )
@@ -740,9 +741,8 @@ FT_BEGIN_HEADER
/* faces_list :: The list of faces currently opened by this */
/* driver. */
/* */
- /* glyph_loader :: The glyph loader for all faces managed by this */
- /* driver. This object isn't defined for unscalable */
- /* formats. */
+ /* glyph_loader :: Unused. Used to be glyph loader for all faces */
+ /* managed by this driver. */
/* */
typedef struct FT_DriverRec_
{
diff --git a/freetype/include/internal/ftpic.h b/freetype/include/internal/ftpic.h
index 485ce7a24..7f9154f41 100644
--- a/freetype/include/internal/ftpic.h
+++ b/freetype/include/internal/ftpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services (declaration). */
/* */
-/* Copyright 2009, 2012 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/ftrfork.h b/freetype/include/internal/ftrfork.h
index 1e3ca137e..a9af92f1b 100644
--- a/freetype/include/internal/ftrfork.h
+++ b/freetype/include/internal/ftrfork.h
@@ -4,7 +4,7 @@
/* */
/* Embedded resource forks accessor (specification). */
/* */
-/* Copyright 2004, 2006, 2007, 2012, 2013 by */
+/* Copyright 2004-2015 by */
/* Masatake YAMATO and Redhat K.K. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -44,7 +44,7 @@ FT_BEGIN_HEADER
typedef struct FT_RFork_Ref_
{
FT_UShort res_id;
- FT_ULong offset;
+ FT_Long offset;
} FT_RFork_Ref;
@@ -83,7 +83,7 @@ FT_BEGIN_HEADER
/* this array is a storage in non-PIC mode, so ; is needed in END */
#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type ) \
- const type name[] = {
+ static const type name[] = {
#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix ) \
{ raccess_guess_ ## func_suffix, \
FT_RFork_Rule_ ## type_suffix },
diff --git a/freetype/include/internal/ftserv.h b/freetype/include/internal/ftserv.h
index 1203ec812..8f837e475 100644
--- a/freetype/include/internal/ftserv.h
+++ b/freetype/include/internal/ftserv.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType services (specification only). */
/* */
-/* Copyright 2003-2007, 2009, 2012, 2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -750,7 +750,7 @@ FT_BEGIN_HEADER
#define FT_SERVICE_TRUETYPE_ENGINE_H <internal/services/svtteng.h>
#define FT_SERVICE_TT_CMAP_H <internal/services/svttcmap.h>
#define FT_SERVICE_WINFNT_H <internal/services/svwinfnt.h>
-#define FT_SERVICE_XFREE86_NAME_H <internal/services/svxf86nm.h>
+#define FT_SERVICE_FONT_FORMAT_H <internal/services/svfntfmt.h>
#define FT_SERVICE_TRUETYPE_GLYF_H <internal/services/svttglyf.h>
/* */
diff --git a/freetype/include/internal/ftstream.h b/freetype/include/internal/ftstream.h
index 7fe1758cc..9625d11f5 100644
--- a/freetype/include/internal/ftstream.h
+++ b/freetype/include/internal/ftstream.h
@@ -4,7 +4,7 @@
/* */
/* Stream handling (specification). */
/* */
-/* Copyright 1996-2002, 2004-2006, 2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -361,7 +361,7 @@ FT_BEGIN_HEADER
FT_Long distance );
/* return current stream position */
- FT_BASE( FT_Long )
+ FT_BASE( FT_ULong )
FT_Stream_Pos( FT_Stream stream );
/* read bytes from a stream into a user-allocated buffer, returns an */
diff --git a/freetype/include/internal/fttrace.h b/freetype/include/internal/fttrace.h
index d5253db78..9d28d214d 100644
--- a/freetype/include/internal/fttrace.h
+++ b/freetype/include/internal/fttrace.h
@@ -4,7 +4,7 @@
/* */
/* Tracing handling (specification only). */
/* */
-/* Copyright 2002, 2004-2007, 2009, 2011-2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/ftvalid.h b/freetype/include/internal/ftvalid.h
index c281b1424..9cda6eef5 100644
--- a/freetype/include/internal/ftvalid.h
+++ b/freetype/include/internal/ftvalid.h
@@ -4,7 +4,7 @@
/* */
/* FreeType validation support (specification). */
/* */
-/* Copyright 2004, 2013, 2014 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/internal.h b/freetype/include/internal/internal.h
index e0ddb06b7..1c1fd0ee1 100644
--- a/freetype/include/internal/internal.h
+++ b/freetype/include/internal/internal.h
@@ -4,7 +4,7 @@
/* */
/* Internal header files (specification only). */
/* */
-/* Copyright 1996-2004, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/psaux.h b/freetype/include/internal/psaux.h
index 7c38c3f84..c9edf4754 100644
--- a/freetype/include/internal/psaux.h
+++ b/freetype/include/internal/psaux.h
@@ -5,7 +5,7 @@
/* Auxiliary functions and data structures related to PostScript fonts */
/* (specification). */
/* */
-/* Copyright 1996-2004, 2006, 2008, 2009, 2012 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -71,10 +71,10 @@ FT_BEGIN_HEADER
(*done)( PS_Table table );
FT_Error
- (*add)( PS_Table table,
- FT_Int idx,
- void* object,
- FT_PtrDist length );
+ (*add)( PS_Table table,
+ FT_Int idx,
+ void* object,
+ FT_UInt length );
void
(*release)( PS_Table table );
@@ -122,12 +122,12 @@ FT_BEGIN_HEADER
FT_Byte* block; /* current memory block */
FT_Offset cursor; /* current cursor in memory block */
FT_Offset capacity; /* current size of memory block */
- FT_Long init;
+ FT_ULong init;
FT_Int max_elems;
FT_Int num_elems;
FT_Byte** elements; /* addresses of table elements */
- FT_PtrDist* lengths; /* lengths of table elements */
+ FT_UInt* lengths; /* lengths of table elements */
FT_Memory memory;
PS_Table_FuncsRec funcs;
@@ -365,7 +365,7 @@ FT_BEGIN_HEADER
(*to_bytes)( PS_Parser parser,
FT_Byte* bytes,
FT_Offset max_bytes,
- FT_Long* pnum_bytes,
+ FT_ULong* pnum_bytes,
FT_Bool delimiters );
FT_Int
@@ -675,9 +675,9 @@ FT_BEGIN_HEADER
FT_Byte** glyph_names;
FT_Int lenIV; /* internal for sub routine calls */
- FT_UInt num_subrs;
+ FT_Int num_subrs;
FT_Byte** subrs;
- FT_PtrDist* subrs_len; /* array of subrs length (optional) */
+ FT_UInt* subrs_len; /* array of subrs length (optional) */
FT_Matrix font_matrix;
FT_Vector font_offset;
diff --git a/freetype/include/internal/pshints.h b/freetype/include/internal/pshints.h
index f0e134f14..4882665d6 100644
--- a/freetype/include/internal/pshints.h
+++ b/freetype/include/internal/pshints.h
@@ -6,7 +6,7 @@
/* recorders (specification only). These are used to support native */
/* T1/T2 hints in the `type1', `cid', and `cff' font drivers. */
/* */
-/* Copyright 2001-2003, 2005-2007, 2009, 2012, 2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -465,7 +465,7 @@ FT_BEGIN_HEADER
typedef void
(*T2_Hints_StemsFunc)( T2_Hints hints,
FT_UInt dimension,
- FT_UInt count,
+ FT_Int count,
FT_Fixed* coordinates );
diff --git a/freetype/include/internal/services/svbdf.h b/freetype/include/internal/services/svbdf.h
index cacae4455..b664e6f19 100644
--- a/freetype/include/internal/services/svbdf.h
+++ b/freetype/include/internal/services/svbdf.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType BDF services (specification). */
/* */
-/* Copyright 2003, 2009, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svcid.h b/freetype/include/internal/services/svcid.h
index 2cfd50965..5fa094eed 100644
--- a/freetype/include/internal/services/svcid.h
+++ b/freetype/include/internal/services/svcid.h
@@ -4,7 +4,8 @@
/* */
/* The FreeType CID font services (specification). */
/* */
-/* Copyright 2007, 2009, 2012 by Derek Clegg, Michael Toftdal. */
+/* Copyright 2007-2015 by */
+/* Derek Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/include/internal/services/svxf86nm.h b/freetype/include/internal/services/svfntfmt.h
index d439d1022..ccee2625b 100644..100755
--- a/freetype/include/internal/services/svxf86nm.h
+++ b/freetype/include/internal/services/svfntfmt.h
@@ -1,10 +1,10 @@
/***************************************************************************/
/* */
-/* svxf86nm.h */
+/* svfntfmt.h */
/* */
-/* The FreeType XFree86 services (specification only). */
+/* The FreeType font format service (specification only). */
/* */
-/* Copyright 2003 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -16,8 +16,8 @@
/***************************************************************************/
-#ifndef __SVXF86NM_H__
-#define __SVXF86NM_H__
+#ifndef __SVFNTFMT_H__
+#define __SVFNTFMT_H__
#include <internal/ftserv.h>
@@ -31,17 +31,17 @@ FT_BEGIN_HEADER
* is a simple constant string pointer.
*/
-#define FT_SERVICE_ID_XF86_NAME "xf86-driver-name"
+#define FT_SERVICE_ID_FONT_FORMAT "font-format"
-#define FT_XF86_FORMAT_TRUETYPE "TrueType"
-#define FT_XF86_FORMAT_TYPE_1 "Type 1"
-#define FT_XF86_FORMAT_BDF "BDF"
-#define FT_XF86_FORMAT_PCF "PCF"
-#define FT_XF86_FORMAT_TYPE_42 "Type 42"
-#define FT_XF86_FORMAT_CID "CID Type 1"
-#define FT_XF86_FORMAT_CFF "CFF"
-#define FT_XF86_FORMAT_PFR "PFR"
-#define FT_XF86_FORMAT_WINFNT "Windows FNT"
+#define FT_FONT_FORMAT_TRUETYPE "TrueType"
+#define FT_FONT_FORMAT_TYPE_1 "Type 1"
+#define FT_FONT_FORMAT_BDF "BDF"
+#define FT_FONT_FORMAT_PCF "PCF"
+#define FT_FONT_FORMAT_TYPE_42 "Type 42"
+#define FT_FONT_FORMAT_CID "CID Type 1"
+#define FT_FONT_FORMAT_CFF "CFF"
+#define FT_FONT_FORMAT_PFR "PFR"
+#define FT_FONT_FORMAT_WINFNT "Windows FNT"
/* */
@@ -49,7 +49,7 @@ FT_BEGIN_HEADER
FT_END_HEADER
-#endif /* __SVXF86NM_H__ */
+#endif /* __SVFNTFMT_H__ */
/* END */
diff --git a/freetype/include/internal/services/svgldict.h b/freetype/include/internal/services/svgldict.h
index 2eff7902c..24e9acf99 100644
--- a/freetype/include/internal/services/svgldict.h
+++ b/freetype/include/internal/services/svgldict.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph dictionary services (specification). */
/* */
-/* Copyright 2003, 2009, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svgxval.h b/freetype/include/internal/services/svgxval.h
index 7707d0751..9b5685dbc 100644
--- a/freetype/include/internal/services/svgxval.h
+++ b/freetype/include/internal/services/svgxval.h
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating TrueTypeGX/AAT tables (specification). */
/* */
-/* Copyright 2004, 2005 by */
+/* Copyright 2004-2015 by */
/* Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/freetype/include/internal/services/svkern.h b/freetype/include/internal/services/svkern.h
index b7166a09f..b7561c51e 100644
--- a/freetype/include/internal/services/svkern.h
+++ b/freetype/include/internal/services/svkern.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType Kerning service (specification). */
/* */
-/* Copyright 2006 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svmm.h b/freetype/include/internal/services/svmm.h
index f6e2eb74c..0e05ea7ca 100644
--- a/freetype/include/internal/services/svmm.h
+++ b/freetype/include/internal/services/svmm.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType Multiple Masters and GX var services (specification). */
/* */
-/* Copyright 2003, 2004, 2009, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svotval.h b/freetype/include/internal/services/svotval.h
index 141cddb46..cff7cf70e 100644
--- a/freetype/include/internal/services/svotval.h
+++ b/freetype/include/internal/services/svotval.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType OpenType validation service (specification). */
/* */
-/* Copyright 2004, 2006 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svpfr.h b/freetype/include/internal/services/svpfr.h
index 01be58d01..aa94c0358 100644
--- a/freetype/include/internal/services/svpfr.h
+++ b/freetype/include/internal/services/svpfr.h
@@ -4,7 +4,7 @@
/* */
/* Internal PFR service functions (specification). */
/* */
-/* Copyright 2003, 2006 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svpostnm.h b/freetype/include/internal/services/svpostnm.h
index c20d811c9..aa424bf7a 100644
--- a/freetype/include/internal/services/svpostnm.h
+++ b/freetype/include/internal/services/svpostnm.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript name services (specification). */
/* */
-/* Copyright 2003, 2007, 2009, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svprop.h b/freetype/include/internal/services/svprop.h
index 22da0bbc6..c9f07ce33 100644
--- a/freetype/include/internal/services/svprop.h
+++ b/freetype/include/internal/services/svprop.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType property service (specification). */
/* */
-/* Copyright 2012 by */
+/* Copyright 2012-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svpscmap.h b/freetype/include/internal/services/svpscmap.h
index aa2804529..54cab1dc4 100644
--- a/freetype/include/internal/services/svpscmap.h
+++ b/freetype/include/internal/services/svpscmap.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript charmap service (specification). */
/* */
-/* Copyright 2003, 2006, 2009, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svpsinfo.h b/freetype/include/internal/services/svpsinfo.h
index 718ddeb4d..7a62afde7 100644
--- a/freetype/include/internal/services/svpsinfo.h
+++ b/freetype/include/internal/services/svpsinfo.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType PostScript info service (specification). */
/* */
-/* Copyright 2003, 2004, 2009, 2011, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svsfnt.h b/freetype/include/internal/services/svsfnt.h
index a6747ca4c..e628ac5f5 100644
--- a/freetype/include/internal/services/svsfnt.h
+++ b/freetype/include/internal/services/svsfnt.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType SFNT table loading service (specification). */
/* */
-/* Copyright 2003, 2004, 2009, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svttcmap.h b/freetype/include/internal/services/svttcmap.h
index cc3330d60..92e1c1742 100644
--- a/freetype/include/internal/services/svttcmap.h
+++ b/freetype/include/internal/services/svttcmap.h
@@ -4,10 +4,8 @@
/* */
/* The FreeType TrueType/sfnt cmap extra information service. */
/* */
-/* Copyright 2003 by */
-/* Masatake YAMATO, Redhat K.K. */
-/* */
-/* Copyright 2003, 2008, 2009, 2012, 2013 by */
+/* Copyright 2003-2015 by */
+/* Masatake YAMATO, Redhat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svtteng.h b/freetype/include/internal/services/svtteng.h
index e945f37d2..df295fa18 100644
--- a/freetype/include/internal/services/svtteng.h
+++ b/freetype/include/internal/services/svtteng.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType TrueType engine query service (specification). */
/* */
-/* Copyright 2006 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/services/svttglyf.h b/freetype/include/internal/services/svttglyf.h
index 4166c6abe..d841fdd05 100644
--- a/freetype/include/internal/services/svttglyf.h
+++ b/freetype/include/internal/services/svttglyf.h
@@ -4,7 +4,8 @@
/* */
/* The FreeType TrueType glyph service. */
/* */
-/* Copyright 2007, 2009, 2012 by David Turner. */
+/* Copyright 2007-2015 by */
+/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/include/internal/services/svwinfnt.h b/freetype/include/internal/services/svwinfnt.h
index 6663e0ae4..b33076521 100644
--- a/freetype/include/internal/services/svwinfnt.h
+++ b/freetype/include/internal/services/svwinfnt.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType Windows FNT/FONT service (specification). */
/* */
-/* Copyright 2003 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/sfnt.h b/freetype/include/internal/sfnt.h
index f17268b8a..007d2092b 100644
--- a/freetype/include/internal/sfnt.h
+++ b/freetype/include/internal/sfnt.h
@@ -4,7 +4,7 @@
/* */
/* High-level `sfnt' driver interface (specification). */
/* */
-/* Copyright 1996-2006, 2009, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/internal/t1types.h b/freetype/include/internal/t1types.h
index e3dacadfe..a681b0e6d 100644
--- a/freetype/include/internal/t1types.h
+++ b/freetype/include/internal/t1types.h
@@ -5,7 +5,7 @@
/* Basic Type1/Type2 type definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -106,12 +106,12 @@ FT_BEGIN_HEADER
FT_Int num_subrs;
FT_Byte** subrs;
- FT_PtrDist* subrs_len;
+ FT_UInt* subrs_len;
FT_Int num_glyphs;
FT_String** glyph_names; /* array of glyph names */
FT_Byte** charstrings; /* array of glyph charstrings */
- FT_PtrDist* charstrings_len;
+ FT_UInt* charstrings_len;
FT_Byte paint_type;
FT_Byte font_type;
@@ -127,7 +127,7 @@ FT_BEGIN_HEADER
typedef struct CID_SubrsRec_
{
- FT_UInt num_subrs;
+ FT_Int num_subrs;
FT_Byte** code;
} CID_SubrsRec, *CID_Subrs;
@@ -157,10 +157,10 @@ FT_BEGIN_HEADER
typedef struct AFM_KernPairRec_
{
- FT_Int index1;
- FT_Int index2;
- FT_Int x;
- FT_Int y;
+ FT_UInt index1;
+ FT_UInt index2;
+ FT_Int x;
+ FT_Int y;
} AFM_KernPairRec, *AFM_KernPair;
@@ -171,9 +171,9 @@ FT_BEGIN_HEADER
FT_Fixed Ascender;
FT_Fixed Descender;
AFM_TrackKern TrackKerns; /* free if non-NULL */
- FT_Int NumTrackKern;
+ FT_UInt NumTrackKern;
AFM_KernPair KernPairs; /* free if non-NULL */
- FT_Int NumKernPair;
+ FT_UInt NumKernPair;
} AFM_FontInfoRec, *AFM_FontInfo;
diff --git a/freetype/include/internal/tttypes.h b/freetype/include/internal/tttypes.h
index 01f0c1cfa..7d625bc41 100644
--- a/freetype/include/internal/tttypes.h
+++ b/freetype/include/internal/tttypes.h
@@ -5,7 +5,7 @@
/* Basic SFNT/TrueType type definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2002, 2004-2008, 2012-2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -614,8 +614,7 @@ FT_BEGIN_HEADER
/* in use by other platforms (e.g. Newton). */
/* For details, please see */
/* */
- /* http://fonts.apple.com/ */
- /* TTRefMan/RM06/Chap6bloc.html */
+ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
/* */
/* hori :: The line metrics for horizontal layouts. */
/* */
@@ -635,8 +634,7 @@ FT_BEGIN_HEADER
/* flags :: Is this a vertical or horizontal strike? For */
/* details, please see */
/* */
- /* http://fonts.apple.com/ */
- /* TTRefMan/RM06/Chap6bloc.html */
+ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html */
/* */
typedef struct TT_SBit_StrikeRec_
{
@@ -1113,7 +1111,7 @@ FT_BEGIN_HEADER
/* This field also contains the associated */
/* vertical metrics table (`vmtx'), if found. */
/* IMPORTANT: The contents of this field is */
- /* undefined if the `verticalInfo' field is */
+ /* undefined if the `vertical_info' field is */
/* unset. */
/* */
/* num_names :: The number of name records within this */
@@ -1440,7 +1438,7 @@ FT_BEGIN_HEADER
{
FT_Memory memory;
FT_UShort max_points;
- FT_UShort max_contours;
+ FT_Short max_contours;
FT_UShort n_points; /* number of points in zone */
FT_Short n_contours; /* number of contours */
diff --git a/freetype/include/t1tables.h b/freetype/include/t1tables.h
index b1e05f03e..9aa2795a5 100644
--- a/freetype/include/t1tables.h
+++ b/freetype/include/t1tables.h
@@ -5,7 +5,7 @@
/* Basic Type 1/Type 2 tables definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -492,8 +492,9 @@ FT_BEGIN_HEADER
* FreeType error code. 0~means success.
*
* @note:
- * The string pointers within the font info structure are owned by
- * the face and don't need to be freed by the caller.
+ * String pointers within the @PS_FontInfoRec structure are owned by
+ * the face and don't need to be freed by the caller. Missing entries
+ * in the font's FontInfo dictionary are represented by NULL pointers.
*
* If the font's format is not PostScript-based, this function will
* return the `FT_Err_Invalid_Argument' error code.
diff --git a/freetype/include/ttnameid.h b/freetype/include/ttnameid.h
index e65b55812..c9585f241 100644
--- a/freetype/include/ttnameid.h
+++ b/freetype/include/ttnameid.h
@@ -4,7 +4,7 @@
/* */
/* TrueType name ID definitions (specification only). */
/* */
-/* Copyright 1996-2004, 2006-2008, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -321,7 +321,7 @@ FT_BEGIN_HEADER
/* */
/* The canonical source for the Apple assigned Language ID's is at */
/* */
- /* https://developer.apple.com/fonts/TTRefMan/RM06/Chap6name.html */
+ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html */
/* */
#define TT_MAC_LANGID_ENGLISH 0
#define TT_MAC_LANGID_FRENCH 1
diff --git a/freetype/include/tttables.h b/freetype/include/tttables.h
index d0107cd31..319b836ba 100644
--- a/freetype/include/tttables.h
+++ b/freetype/include/tttables.h
@@ -5,7 +5,7 @@
/* Basic SFNT/TrueType tables definitions and interface */
/* (specification only). */
/* */
-/* Copyright 1996-2005, 2008-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -371,7 +371,7 @@ FT_BEGIN_HEADER
FT_Short xAvgCharWidth;
FT_UShort usWeightClass;
FT_UShort usWidthClass;
- FT_Short fsType;
+ FT_UShort fsType;
FT_Short ySubscriptXSize;
FT_Short ySubscriptYSize;
FT_Short ySubscriptXOffset;
diff --git a/freetype/include/tttags.h b/freetype/include/tttags.h
index 6734c3eb6..c4c893951 100644
--- a/freetype/include/tttags.h
+++ b/freetype/include/tttags.h
@@ -4,7 +4,7 @@
/* */
/* Tags for TrueType and OpenType tables (specification only). */
/* */
-/* Copyright 1996-2001, 2004, 2005, 2007, 2008, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/include/ttunpat.h b/freetype/include/ttunpat.h
index 43eddeffb..b9834a074 100644
--- a/freetype/include/ttunpat.h
+++ b/freetype/include/ttunpat.h
@@ -4,7 +4,7 @@
/* */
/* Definitions for the unpatented TrueType hinting system */
/* */
-/* Copyright 2003, 2006 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Written by Graham Asher <graham.asher@btinternet.com> */
diff --git a/freetype/modules.cfg b/freetype/modules.cfg
index 4e5259445..9ba66dfc8 100644
--- a/freetype/modules.cfg
+++ b/freetype/modules.cfg
@@ -1,6 +1,6 @@
# modules.cfg
#
-# Copyright 2005-2007, 2009-2011, 2013 by
+# Copyright 2005-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -168,6 +168,11 @@ BASE_EXTENSIONS += ftbitmap.c
# See include/ftcid.h for the API.
BASE_EXTENSIONS += ftcid.c
+# Support functions for font formats.
+#
+# See include/ftfntfmt.h for the API.
+BASE_EXTENSIONS += ftfntfmt.c
+
# Access FSType information. Needs fttype1.c.
#
# See include/freetype.h for the API.
@@ -235,11 +240,6 @@ BASE_EXTENSIONS += fttype1.c
# See include/ftwinfnt.h for the API.
BASE_EXTENSIONS += ftwinfnt.c
-# Support functions for X11.
-#
-# See include/ftxf86.h for the API.
-BASE_EXTENSIONS += ftxf86.c
-
####
#### The components `ftsystem.c' (for memory allocation and stream I/O
#### management) and `ftdebug.c' (for emitting debug messages to the user)
diff --git a/freetype/src/Jamfile b/freetype/src/Jamfile
index 1cc06858c..7a9ee96f2 100644
--- a/freetype/src/Jamfile
+++ b/freetype/src/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src Jamfile
#
-# Copyright 2001, 2002, 2013 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/autofit/Jamfile b/freetype/src/autofit/Jamfile
index 2714765b5..6600a3447 100644
--- a/freetype/src/autofit/Jamfile
+++ b/freetype/src/autofit/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/autofit Jamfile
#
-# Copyright 2003, 2004, 2005, 2006, 2007, 2009 by
+# Copyright 2003-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/autofit/afangles.c b/freetype/src/autofit/afangles.c
index f8b095bef..1b1eb31fe 100644
--- a/freetype/src/autofit/afangles.c
+++ b/freetype/src/autofit/afangles.c
@@ -5,7 +5,7 @@
/* Routines used to compute vector angles with limited accuracy */
/* and very high speed. It also contains sorting routines (body). */
/* */
-/* Copyright 2003-2006, 2011-2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -259,7 +259,7 @@
sum += table[j].org;
table[j].org = 0;
}
- table[cur_idx].org = sum / j;
+ table[cur_idx].org = sum / (FT_Pos)j;
if ( i < *count - 1 )
{
diff --git a/freetype/src/autofit/afblue.c b/freetype/src/autofit/afblue.c
index 811226eac..e2b24519a 100644
--- a/freetype/src/autofit/afblue.c
+++ b/freetype/src/autofit/afblue.c
@@ -7,7 +7,7 @@
/* */
/* Auto-fitter data for blue strings (body). */
/* */
-/* Copyright 2013 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,6 +26,10 @@
af_blue_strings[] =
{
/* */
+ '\xD8', '\xA7', '\xD8', '\xA5', '\xD9', '\x84', '\xD9', '\x83', '\xD8', '\xB7', '\xD8', '\xB8', /* ا إ ل ك ط ظ */
+ '\0',
+ '\xD8', '\xAA', '\xD8', '\xAB', '\xD8', '\xB7', '\xD8', '\xB8', '\xD9', '\x83', /* ت ث ط ظ ك */
+ '\0',
'\xD0', '\x91', '\xD0', '\x92', '\xD0', '\x95', '\xD0', '\x9F', '\xD0', '\x97', '\xD0', '\x9E', '\xD0', '\xA1', '\xD0', '\xAD', /* БВЕПЗОСЭ */
'\0',
'\xD0', '\x91', '\xD0', '\x92', '\xD0', '\x95', '\xD0', '\xA8', '\xD0', '\x97', '\xD0', '\x9E', '\xD0', '\xA1', '\xD0', '\xAD', /* БВЕШЗОСЭ */
@@ -71,6 +75,20 @@
'\xE0', '\xB0', '\x87', '\xE0', '\xB0', '\x8C', '\xE0', '\xB0', '\x99', '\xE0', '\xB0', '\x9E', '\xE0', '\xB0', '\xA3', '\xE0', '\xB0', '\xB1', '\xE0', '\xB1', '\xAF', /* ఇ ఌ ఙ ఞ ణ ఱ ౯ */
'\0',
'\xE0', '\xB0', '\x85', '\xE0', '\xB0', '\x95', '\xE0', '\xB0', '\x9A', '\xE0', '\xB0', '\xB0', '\xE0', '\xB0', '\xBD', '\xE0', '\xB1', '\xA8', '\xE0', '\xB1', '\xAC', /* అ క చ ర ఽ ౨ ౬ */
+ '\0',
+ '\xE0', '\xB8', '\x9A', '\xE0', '\xB9', '\x80', '\xE0', '\xB9', '\x81', '\xE0', '\xB8', '\xAD', '\xE0', '\xB8', '\x81', '\xE0', '\xB8', '\xB2', /* บ เ แ อ ก า */
+ '\0',
+ '\xE0', '\xB8', '\x9A', '\xE0', '\xB8', '\x9B', '\xE0', '\xB8', '\xA9', '\xE0', '\xB8', '\xAF', '\xE0', '\xB8', '\xAD', '\xE0', '\xB8', '\xA2', '\xE0', '\xB8', '\xAE', /* บ ป ษ ฯ อ ย ฮ */
+ '\0',
+ '\xE0', '\xB8', '\x9B', '\xE0', '\xB8', '\x9D', '\xE0', '\xB8', '\x9F', /* ป ฝ ฟ */
+ '\0',
+ '\xE0', '\xB9', '\x82', '\xE0', '\xB9', '\x83', '\xE0', '\xB9', '\x84', /* โ ใ ไ */
+ '\0',
+ '\xE0', '\xB8', '\x8E', '\xE0', '\xB8', '\x8F', '\xE0', '\xB8', '\xA4', '\xE0', '\xB8', '\xA6', /* ฎ ฏ ฤ ฦ */
+ '\0',
+ '\xE0', '\xB8', '\x8D', '\xE0', '\xB8', '\x90', /* ญ ฐ */
+ '\0',
+ '\xE0', '\xB9', '\x90', '\xE0', '\xB9', '\x91', '\xE0', '\xB9', '\x93', /* ๐ ๑ ๓ */
#ifdef AF_CONFIG_OPTION_CJK
'\0',
'\xE4', '\xBB', '\x96', '\xE4', '\xBB', '\xAC', '\xE4', '\xBD', '\xA0', '\xE4', '\xBE', '\x86', '\xE5', '\x80', '\x91', '\xE5', '\x88', '\xB0', '\xE5', '\x92', '\x8C', '\xE5', '\x9C', '\xB0', /* 他们你來們到和地 */
@@ -121,6 +139,9 @@
af_blue_stringsets[] =
{
/* */
+ { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_ARABIC_JOIN, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 },
{ AF_BLUE_STRING_CYRILLIC_SMALL, AF_BLUE_PROPERTY_LATIN_TOP |
@@ -160,6 +181,15 @@
{ AF_BLUE_STRING_TELUGU_TOP, AF_BLUE_PROPERTY_LATIN_TOP },
{ AF_BLUE_STRING_TELUGU_BOTTOM, 0 },
{ AF_BLUE_STRING_MAX, 0 },
+ { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT },
+ { AF_BLUE_STRING_THAI_BOTTOM, 0 },
+ { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP },
+ { AF_BLUE_STRING_THAI_DESCENDER, 0 },
+ { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 },
+ { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 },
+ { AF_BLUE_STRING_MAX, 0 },
#ifdef AF_CONFIG_OPTION_CJK
{ AF_BLUE_STRING_CJK_TOP, AF_BLUE_PROPERTY_CJK_TOP },
{ AF_BLUE_STRING_CJK_BOTTOM, 0 },
diff --git a/freetype/src/autofit/afblue.cin b/freetype/src/autofit/afblue.cin
index c6762bec3..b303a4b2b 100644
--- a/freetype/src/autofit/afblue.cin
+++ b/freetype/src/autofit/afblue.cin
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter data for blue strings (body). */
/* */
-/* Copyright 2013 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afblue.dat b/freetype/src/autofit/afblue.dat
index 3f98c13b2..fd5684e4a 100644
--- a/freetype/src/autofit/afblue.dat
+++ b/freetype/src/autofit/afblue.dat
@@ -2,7 +2,7 @@
//
// Auto-fitter data for blue strings.
//
-// Copyright 2013, 2014 by
+// Copyright 2013-2015 by
// David Turner, Robert Wilhelm, and Werner Lemberg.
//
// This file is part of the FreeType project, and may only be used,
@@ -67,6 +67,11 @@
AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
+ AF_BLUE_STRING_ARABIC_TOP
+ "ا إ ل ك ط ظ"
+ AF_BLUE_STRING_ARABIC_JOIN
+ "ت ث ط ظ ك"
+
AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
"БВЕПЗОСЭ"
AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
@@ -123,10 +128,25 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
// this is just for convenience to simplify reading
AF_BLUE_STRING_TELUGU_TOP
"ఇ ఌ ఙ ఞ ణ ఱ ౯"
-
AF_BLUE_STRING_TELUGU_BOTTOM
"అ క చ ర ఽ ౨ ౬"
+ AF_BLUE_STRING_THAI_TOP
+ "บ เ แ อ ก า"
+ AF_BLUE_STRING_THAI_BOTTOM
+ "บ ป ษ ฯ อ ย ฮ"
+ AF_BLUE_STRING_THAI_ASCENDER
+ "ป ฝ ฟ"
+ AF_BLUE_STRING_THAI_LARGE_ASCENDER
+ "โ ใ ไ"
+ AF_BLUE_STRING_THAI_DESCENDER
+ "ฎ ฏ ฤ ฦ"
+ AF_BLUE_STRING_THAI_LARGE_DESCENDER
+ "ญ ฐ"
+ AF_BLUE_STRING_THAI_DIGIT_TOP
+ "๐ ๑ ๓"
+
+
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRING_CJK_TOP
@@ -268,6 +288,11 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
+ AF_BLUE_STRINGSET_ARAB
+ { AF_BLUE_STRING_ARABIC_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_ARABIC_JOIN, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
AF_BLUE_STRINGSET_CYRL
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP, AF_BLUE_PROPERTY_LATIN_TOP }
{ AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0 }
@@ -319,6 +344,18 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
{ AF_BLUE_STRING_TELUGU_BOTTOM, 0 }
{ AF_BLUE_STRING_MAX, 0 }
+ AF_BLUE_STRINGSET_THAI
+ { AF_BLUE_STRING_THAI_TOP, AF_BLUE_PROPERTY_LATIN_TOP |
+ AF_BLUE_PROPERTY_LATIN_X_HEIGHT }
+ { AF_BLUE_STRING_THAI_BOTTOM, 0 }
+ { AF_BLUE_STRING_THAI_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_THAI_LARGE_ASCENDER, AF_BLUE_PROPERTY_LATIN_TOP }
+ { AF_BLUE_STRING_THAI_DESCENDER, 0 }
+ { AF_BLUE_STRING_THAI_LARGE_DESCENDER, 0 }
+ { AF_BLUE_STRING_THAI_DIGIT_TOP, 0 }
+ { AF_BLUE_STRING_MAX, 0 }
+
+
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRINGSET_HANI
diff --git a/freetype/src/autofit/afblue.h b/freetype/src/autofit/afblue.h
index a86184191..94e33a9a2 100644
--- a/freetype/src/autofit/afblue.h
+++ b/freetype/src/autofit/afblue.h
@@ -7,7 +7,7 @@
/* */
/* Auto-fitter data for blue strings (specification). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -74,30 +74,39 @@ FT_BEGIN_HEADER
typedef enum AF_Blue_String_
{
- AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 0,
- AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 17,
- AF_BLUE_STRING_CYRILLIC_SMALL = 34,
- AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 51,
- AF_BLUE_STRING_DEVANAGARI_BASE = 58,
- AF_BLUE_STRING_DEVANAGARI_TOP = 83,
- AF_BLUE_STRING_DEVANAGARI_HEAD = 108,
- AF_BLUE_STRING_DEVANAGARI_BOTTOM = 133,
- AF_BLUE_STRING_GREEK_CAPITAL_TOP = 140,
- AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 155,
- AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 168,
- AF_BLUE_STRING_GREEK_SMALL = 181,
- AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 198,
- AF_BLUE_STRING_HEBREW_TOP = 215,
- AF_BLUE_STRING_HEBREW_BOTTOM = 232,
- AF_BLUE_STRING_HEBREW_DESCENDER = 245,
- AF_BLUE_STRING_LATIN_CAPITAL_TOP = 256,
- AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 265,
- AF_BLUE_STRING_LATIN_SMALL_F_TOP = 274,
- AF_BLUE_STRING_LATIN_SMALL = 282,
- AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 290,
- AF_BLUE_STRING_TELUGU_TOP = 296,
- AF_BLUE_STRING_TELUGU_BOTTOM = 318,
- af_blue_1_1 = 339,
+ AF_BLUE_STRING_ARABIC_TOP = 0,
+ AF_BLUE_STRING_ARABIC_JOIN = 13,
+ AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 24,
+ AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 41,
+ AF_BLUE_STRING_CYRILLIC_SMALL = 58,
+ AF_BLUE_STRING_CYRILLIC_SMALL_DESCENDER = 75,
+ AF_BLUE_STRING_DEVANAGARI_BASE = 82,
+ AF_BLUE_STRING_DEVANAGARI_TOP = 107,
+ AF_BLUE_STRING_DEVANAGARI_HEAD = 132,
+ AF_BLUE_STRING_DEVANAGARI_BOTTOM = 157,
+ AF_BLUE_STRING_GREEK_CAPITAL_TOP = 164,
+ AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 179,
+ AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 192,
+ AF_BLUE_STRING_GREEK_SMALL = 205,
+ AF_BLUE_STRING_GREEK_SMALL_DESCENDER = 222,
+ AF_BLUE_STRING_HEBREW_TOP = 239,
+ AF_BLUE_STRING_HEBREW_BOTTOM = 256,
+ AF_BLUE_STRING_HEBREW_DESCENDER = 269,
+ AF_BLUE_STRING_LATIN_CAPITAL_TOP = 280,
+ AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 289,
+ AF_BLUE_STRING_LATIN_SMALL_F_TOP = 298,
+ AF_BLUE_STRING_LATIN_SMALL = 306,
+ AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 314,
+ AF_BLUE_STRING_TELUGU_TOP = 320,
+ AF_BLUE_STRING_TELUGU_BOTTOM = 342,
+ AF_BLUE_STRING_THAI_TOP = 364,
+ AF_BLUE_STRING_THAI_BOTTOM = 383,
+ AF_BLUE_STRING_THAI_ASCENDER = 405,
+ AF_BLUE_STRING_THAI_LARGE_ASCENDER = 415,
+ AF_BLUE_STRING_THAI_DESCENDER = 425,
+ AF_BLUE_STRING_THAI_LARGE_DESCENDER = 438,
+ AF_BLUE_STRING_THAI_DIGIT_TOP = 445,
+ af_blue_1_1 = 454,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 153,
@@ -138,30 +147,32 @@ FT_BEGIN_HEADER
/* Properties are specific to a writing system. We assume that a given */
/* blue string can't be used in more than a single writing system, which */
/* is a safe bet. */
-#define AF_BLUE_PROPERTY_LATIN_TOP ( 1 << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1 << 1 )
-#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1 << 2 )
-#define AF_BLUE_PROPERTY_LATIN_LONG ( 1 << 3 )
+#define AF_BLUE_PROPERTY_LATIN_TOP ( 1U << 0 ) /* must have value 1 */
+#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 1 )
+#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 2 )
+#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 3 )
-#define AF_BLUE_PROPERTY_CJK_TOP ( 1 << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1 << 1 ) /* must have value 2 */
+#define AF_BLUE_PROPERTY_CJK_TOP ( 1U << 0 ) /* must have value 1 */
+#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1U << 1 ) /* must have value 2 */
#define AF_BLUE_PROPERTY_CJK_RIGHT AF_BLUE_PROPERTY_CJK_TOP
-#define AF_BLUE_STRINGSET_MAX_LEN 7
+#define AF_BLUE_STRINGSET_MAX_LEN 8
/* The AF_Blue_Stringset enumeration values are offsets into the */
/* `af_blue_stringsets' array. */
typedef enum AF_Blue_Stringset_
{
- AF_BLUE_STRINGSET_CYRL = 0,
- AF_BLUE_STRINGSET_DEVA = 6,
- AF_BLUE_STRINGSET_GREK = 12,
- AF_BLUE_STRINGSET_HEBR = 19,
- AF_BLUE_STRINGSET_LATN = 23,
- AF_BLUE_STRINGSET_TELU = 30,
- af_blue_2_1 = 33,
+ AF_BLUE_STRINGSET_ARAB = 0,
+ AF_BLUE_STRINGSET_CYRL = 3,
+ AF_BLUE_STRINGSET_DEVA = 9,
+ AF_BLUE_STRINGSET_GREK = 15,
+ AF_BLUE_STRINGSET_HEBR = 22,
+ AF_BLUE_STRINGSET_LATN = 26,
+ AF_BLUE_STRINGSET_TELU = 33,
+ AF_BLUE_STRINGSET_THAI = 36,
+ af_blue_2_1 = 44,
#ifdef AF_CONFIG_OPTION_CJK
AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
af_blue_2_1_1 = af_blue_2_1 + 2,
diff --git a/freetype/src/autofit/afblue.hin b/freetype/src/autofit/afblue.hin
index 0b4b48d7f..ad43fe6ce 100644
--- a/freetype/src/autofit/afblue.hin
+++ b/freetype/src/autofit/afblue.hin
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter data for blue strings (specification). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -96,13 +96,13 @@ FT_BEGIN_HEADER
/* Properties are specific to a writing system. We assume that a given */
/* blue string can't be used in more than a single writing system, which */
/* is a safe bet. */
-#define AF_BLUE_PROPERTY_LATIN_TOP ( 1 << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1 << 1 )
-#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1 << 2 )
-#define AF_BLUE_PROPERTY_LATIN_LONG ( 1 << 3 )
+#define AF_BLUE_PROPERTY_LATIN_TOP ( 1U << 0 ) /* must have value 1 */
+#define AF_BLUE_PROPERTY_LATIN_NEUTRAL ( 1U << 1 )
+#define AF_BLUE_PROPERTY_LATIN_X_HEIGHT ( 1U << 2 )
+#define AF_BLUE_PROPERTY_LATIN_LONG ( 1U << 3 )
-#define AF_BLUE_PROPERTY_CJK_TOP ( 1 << 0 ) /* must have value 1 */
-#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1 << 1 ) /* must have value 2 */
+#define AF_BLUE_PROPERTY_CJK_TOP ( 1U << 0 ) /* must have value 1 */
+#define AF_BLUE_PROPERTY_CJK_HORIZ ( 1U << 1 ) /* must have value 2 */
#define AF_BLUE_PROPERTY_CJK_RIGHT AF_BLUE_PROPERTY_CJK_TOP
diff --git a/freetype/src/autofit/afcjk.c b/freetype/src/autofit/afcjk.c
index 8f2bd00ee..b06131664 100644
--- a/freetype/src/autofit/afcjk.c
+++ b/freetype/src/autofit/afcjk.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for CJK writing system (body). */
/* */
-/* Copyright 2006-2014 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -260,8 +260,8 @@
FT_Pos fills[AF_BLUE_STRING_MAX_LEN];
FT_Pos flats[AF_BLUE_STRING_MAX_LEN];
- FT_Int num_fills;
- FT_Int num_flats;
+ FT_UInt num_fills;
+ FT_UInt num_flats;
FT_Bool fill;
@@ -720,8 +720,8 @@
{
AF_Point pt = seg->first;
AF_Point last = seg->last;
- AF_Flags f0 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
- AF_Flags f1;
+ FT_UInt f0 = pt->flags & AF_FLAG_CONTROL;
+ FT_UInt f1;
seg->flags &= ~AF_EDGE_ROUND;
@@ -729,7 +729,7 @@
for ( ; pt != last; f0 = f1 )
{
pt = pt->next;
- f1 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
+ f1 = pt->flags & AF_FLAG_CONTROL;
if ( !f0 && !f1 )
break;
@@ -863,19 +863,19 @@
if ( link == seg2 )
{
- seg->link = 0;
+ seg->link = NULL;
seg->serif = link1;
}
else if ( link == link2 )
{
- seg->link = 0;
+ seg->link = NULL;
seg->serif = seg1;
}
}
}
else
{
- seg1->link = link1->link = 0;
+ seg1->link = link1->link = NULL;
break;
}
@@ -892,7 +892,7 @@
seg2->num_linked++;
if ( seg2->link != seg1 )
{
- seg1->link = 0;
+ seg1->link = NULL;
if ( seg2->score < dist_threshold || seg1->score < seg2->score * 4 )
seg1->serif = seg2->link;
@@ -1159,7 +1159,7 @@
/* Example: the `c' in cour.pfa at size 13 */
if ( edge->serif && edge->link )
- edge->serif = 0;
+ edge->serif = NULL;
}
}
@@ -1190,7 +1190,7 @@
/* Compute all edges which lie within blue zones. */
- FT_LOCAL_DEF( void )
+ static void
af_cjk_hints_compute_blue_edges( AF_GlyphHints hints,
AF_CJKMetrics metrics,
AF_Dimension dim )
@@ -1301,7 +1301,7 @@
/* compute flags depending on render mode, etc. */
mode = metrics->root.scaler.render_mode;
-#ifdef AF_CONFIG_OPTION_USE_WARPER
+#if 0 /* AF_CONFIG_OPTION_USE_WARPER */
if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
#endif
@@ -1334,6 +1334,12 @@
scaler_flags |= AF_SCALER_FLAG_NO_ADVANCE;
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ /* get (global) warper flag */
+ if ( !metrics->root.globals->module->warping )
+ scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
+#endif
+
hints->scaler_flags = scaler_flags;
hints->other_flags = other_flags;
@@ -1354,13 +1360,13 @@
static FT_Pos
af_cjk_snap_width( AF_Width widths,
- FT_Int count,
+ FT_UInt count,
FT_Pos width )
{
- int n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
+ FT_UInt n;
+ FT_Pos best = 64 + 32 + 2;
+ FT_Pos reference = width;
+ FT_Pos scaled;
for ( n = 0; n < count; n++ )
@@ -1405,8 +1411,8 @@
af_cjk_compute_stem_width( AF_GlyphHints hints,
AF_Dimension dim,
FT_Pos width,
- AF_Edge_Flags base_flags,
- AF_Edge_Flags stem_flags )
+ FT_UInt base_flags,
+ FT_UInt stem_flags )
{
AF_CJKMetrics metrics = (AF_CJKMetrics)hints->metrics;
AF_CJKAxis axis = &metrics->axis[dim];
@@ -1530,10 +1536,9 @@
{
FT_Pos dist = stem_edge->opos - base_edge->opos;
- FT_Pos fitted_width = af_cjk_compute_stem_width(
- hints, dim, dist,
- (AF_Edge_Flags)base_edge->flags,
- (AF_Edge_Flags)stem_edge->flags );
+ FT_Pos fitted_width = af_cjk_compute_stem_width( hints, dim, dist,
+ base_edge->flags,
+ stem_edge->flags );
stem_edge->pos = base_edge->pos + fitted_width;
@@ -1611,8 +1616,8 @@
org_len = edge2->opos - edge->opos;
cur_len = af_cjk_compute_stem_width( hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ edge->flags,
+ edge2->flags );
org_center = ( edge->opos + edge2->opos ) / 2 + anchor;
cur_pos1 = org_center - cur_len / 2;
@@ -1713,7 +1718,7 @@
AF_Edge edge_limit = edges + axis->num_edges;
FT_PtrDist n_edges;
AF_Edge edge;
- AF_Edge anchor = 0;
+ AF_Edge anchor = NULL;
FT_Pos delta = 0;
FT_Int skipped = 0;
FT_Bool has_last_stem = FALSE;
@@ -2191,7 +2196,13 @@
goto Exit;
/* analyze glyph outline */
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ AF_HINTS_DO_WARP( hints ) ) ||
+ AF_HINTS_DO_HORIZONTAL( hints ) )
+#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
+#endif
{
error = af_cjk_hints_detect_features( hints, AF_DIMENSION_HORZ );
if ( error )
@@ -2217,8 +2228,9 @@
{
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL )
+ if ( dim == AF_DIMENSION_HORZ &&
+ metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ AF_HINTS_DO_WARP( hints ) )
{
AF_WarperRec warper;
FT_Fixed scale;
@@ -2240,12 +2252,6 @@
}
}
-#if 0
- af_glyph_hints_dump_points( hints );
- af_glyph_hints_dump_segments( hints );
- af_glyph_hints_dump_edges( hints );
-#endif
-
af_glyph_hints_save( hints, outline );
Exit:
diff --git a/freetype/src/autofit/afcjk.h b/freetype/src/autofit/afcjk.h
index 4dd4f3917..bfd11f2d3 100644
--- a/freetype/src/autofit/afcjk.h
+++ b/freetype/src/autofit/afcjk.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for CJK writing system (specification). */
/* */
-/* Copyright 2006, 2007, 2011-2014 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -55,14 +55,10 @@ FT_BEGIN_HEADER
#define AF_CJK_MAX_WIDTHS 16
- enum
- {
- AF_CJK_BLUE_ACTIVE = 1 << 0, /* set if zone height is <= 3/4px */
- AF_CJK_BLUE_TOP = 1 << 1, /* result of AF_CJK_IS_TOP_BLUE */
- AF_CJK_BLUE_ADJUSTMENT = 1 << 2, /* used for scale adjustment */
- /* optimization */
- AF_CJK_BLUE_FLAG_MAX
- };
+#define AF_CJK_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
+#define AF_CJK_BLUE_TOP ( 1U << 1 ) /* result of AF_CJK_IS_TOP_BLUE */
+#define AF_CJK_BLUE_ADJUSTMENT ( 1U << 2 ) /* used for scale adjustment */
+ /* optimization */
typedef struct AF_CJKBlueRec_
diff --git a/freetype/src/autofit/afcover.h b/freetype/src/autofit/afcover.h
index d5ac96944..520e8a4ae 100644
--- a/freetype/src/autofit/afcover.h
+++ b/freetype/src/autofit/afcover.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter coverages (specification only). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afdummy.c b/freetype/src/autofit/afdummy.c
index f8702a109..03ca25f33 100644
--- a/freetype/src/autofit/afdummy.c
+++ b/freetype/src/autofit/afdummy.c
@@ -5,7 +5,7 @@
/* Auto-fitter dummy routines to be used if no hinting should be */
/* performed (body). */
/* */
-/* Copyright 2003-2005, 2011, 2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afdummy.h b/freetype/src/autofit/afdummy.h
index ad1b0d3ab..b4fdc78e3 100644
--- a/freetype/src/autofit/afdummy.h
+++ b/freetype/src/autofit/afdummy.h
@@ -5,7 +5,7 @@
/* Auto-fitter dummy routines to be used if no hinting should be */
/* performed (specification). */
/* */
-/* Copyright 2003-2005, 2011, 2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/aferrors.h b/freetype/src/autofit/aferrors.h
index b04ac2305..ff3f75120 100644
--- a/freetype/src/autofit/aferrors.h
+++ b/freetype/src/autofit/aferrors.h
@@ -4,7 +4,7 @@
/* */
/* Autofitter error codes (specification only). */
/* */
-/* Copyright 2005, 2012 by */
+/* Copyright 2005-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afglobal.c b/freetype/src/autofit/afglobal.c
index a54c20c02..64b929313 100644
--- a/freetype/src/autofit/afglobal.c
+++ b/freetype/src/autofit/afglobal.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter routines to compute global hinting values (body). */
/* */
-/* Copyright 2003-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -314,8 +314,9 @@
memory = face->memory;
- if ( FT_ALLOC( globals, sizeof ( *globals ) +
- face->num_glyphs * sizeof ( FT_Byte ) ) )
+ if ( FT_ALLOC( globals,
+ sizeof ( *globals ) +
+ (FT_ULong)face->num_glyphs * sizeof ( FT_Byte ) ) )
goto Exit;
globals->face = face;
diff --git a/freetype/src/autofit/afglobal.h b/freetype/src/autofit/afglobal.h
index 38d8d6952..9bbb687e2 100644
--- a/freetype/src/autofit/afglobal.h
+++ b/freetype/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
/* Auto-fitter routines to compute global hinting values */
/* (specification). */
/* */
-/* Copyright 2003-2005, 2007, 2009, 2011-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afhints.c b/freetype/src/autofit/afhints.c
index 4aa64bb4b..691f20644 100644
--- a/freetype/src/autofit/afhints.c
+++ b/freetype/src/autofit/afhints.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines (body). */
/* */
-/* Copyright 2003-2007, 2009-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -43,7 +43,15 @@
AF_Segment segment = NULL;
- if ( axis->num_segments >= axis->max_segments )
+ if ( axis->num_segments < AF_SEGMENTS_EMBEDDED )
+ {
+ if ( axis->segments == NULL )
+ {
+ axis->segments = axis->embedded.segments;
+ axis->max_segments = AF_SEGMENTS_EMBEDDED;
+ }
+ }
+ else if ( axis->num_segments >= axis->max_segments )
{
FT_Int old_max = axis->max_segments;
FT_Int new_max = old_max;
@@ -60,8 +68,18 @@
if ( new_max < old_max || new_max > big_max )
new_max = big_max;
- if ( FT_RENEW_ARRAY( axis->segments, old_max, new_max ) )
- goto Exit;
+ if ( axis->segments == axis->embedded.segments )
+ {
+ if ( FT_NEW_ARRAY( axis->segments, new_max ) )
+ goto Exit;
+ ft_memcpy( axis->segments, axis->embedded.segments,
+ sizeof ( axis->embedded.segments ) );
+ }
+ else
+ {
+ if ( FT_RENEW_ARRAY( axis->segments, old_max, new_max ) )
+ goto Exit;
+ }
axis->max_segments = new_max;
}
@@ -89,7 +107,15 @@
AF_Edge edges;
- if ( axis->num_edges >= axis->max_edges )
+ if ( axis->num_edges < AF_EDGES_EMBEDDED )
+ {
+ if ( axis->edges == NULL )
+ {
+ axis->edges = axis->embedded.edges;
+ axis->max_edges = AF_EDGES_EMBEDDED;
+ }
+ }
+ else if ( axis->num_edges >= axis->max_edges )
{
FT_Int old_max = axis->max_edges;
FT_Int new_max = old_max;
@@ -106,8 +132,18 @@
if ( new_max < old_max || new_max > big_max )
new_max = big_max;
- if ( FT_RENEW_ARRAY( axis->edges, old_max, new_max ) )
- goto Exit;
+ if ( axis->edges == axis->embedded.edges )
+ {
+ if ( FT_NEW_ARRAY( axis->edges, new_max ) )
+ goto Exit;
+ ft_memcpy( axis->edges, axis->embedded.edges,
+ sizeof ( axis->embedded.edges ) );
+ }
+ else
+ {
+ if ( FT_RENEW_ARRAY( axis->edges, old_max, new_max ) )
+ goto Exit;
+ }
axis->max_edges = new_max;
}
@@ -195,9 +231,13 @@
AF_Point point;
- AF_DUMP(( "Table of points:\n"
- " [ index | xorg | yorg | xscale | yscale"
- " | xfit | yfit | flags ]\n" ));
+ AF_DUMP(( "Table of points:\n" ));
+
+ if ( hints->num_points )
+ AF_DUMP(( " [ index | xorg | yorg | xscale | yscale"
+ " | xfit | yfit | flags ]\n" ));
+ else
+ AF_DUMP(( " (none)\n" ));
for ( point = points; point < limit; point++ )
AF_DUMP(( " [ %5d | %5d | %5d | %6.2f | %6.2f"
@@ -218,7 +258,7 @@
static const char*
- af_edge_flags_to_string( AF_Edge_Flags flags )
+ af_edge_flags_to_string( FT_UInt flags )
{
static char temp[32];
int pos = 0;
@@ -293,7 +333,7 @@
AF_INDEX_NUM( seg->edge, edges ),
seg->height,
seg->height - ( seg->max_coord - seg->min_coord ),
- af_edge_flags_to_string( (AF_Edge_Flags)seg->flags ) ));
+ af_edge_flags_to_string( seg->flags ) ));
AF_DUMP(( "\n" ));
}
}
@@ -420,7 +460,7 @@
edge->blue_edge ? 'y' : 'n',
edge->opos / 64.0,
edge->pos / 64.0,
- af_edge_flags_to_string( (AF_Edge_Flags)edge->flags ) ));
+ af_edge_flags_to_string( edge->flags ) ));
AF_DUMP(( "\n" ));
}
}
@@ -469,15 +509,15 @@
else
{
dir = AF_DIR_DOWN;
- ll = dy;
+ ll = -dy;
ss = dx;
}
}
- /* return no direction if arm lengths differ too much */
+ /* return no direction if arm lengths do not differ enough */
/* (value 14 is heuristic, corresponding to approx. 4.1 degrees) */
- ss *= 14;
- if ( FT_ABS( ll ) <= FT_ABS( ss ) )
+ /* the long arm is never negative */
+ if ( ll <= 14 * FT_ABS( ss ) )
dir = AF_DIR_NONE;
return dir;
@@ -488,7 +528,8 @@
af_glyph_hints_init( AF_GlyphHints hints,
FT_Memory memory )
{
- FT_ZERO( hints );
+ /* no need to initialize the embedded items */
+ FT_MEM_ZERO( hints, sizeof ( *hints ) - sizeof ( hints->embedded ) );
hints->memory = memory;
}
@@ -496,13 +537,15 @@
FT_LOCAL_DEF( void )
af_glyph_hints_done( AF_GlyphHints hints )
{
- FT_Memory memory = hints->memory;
+ FT_Memory memory;
int dim;
if ( !( hints && hints->memory ) )
return;
+ memory = hints->memory;
+
/*
* note that we don't need to free the segment and edge
* buffers since they are really within the hints->points array
@@ -514,20 +557,24 @@
axis->num_segments = 0;
axis->max_segments = 0;
- FT_FREE( axis->segments );
+ if ( axis->segments != axis->embedded.segments )
+ FT_FREE( axis->segments );
axis->num_edges = 0;
axis->max_edges = 0;
- FT_FREE( axis->edges );
+ if ( axis->edges != axis->embedded.edges )
+ FT_FREE( axis->edges );
}
- FT_FREE( hints->contours );
+ if ( hints->contours != hints->embedded.contours )
+ FT_FREE( hints->contours );
hints->max_contours = 0;
hints->num_contours = 0;
- FT_FREE( hints->points );
- hints->num_points = 0;
+ if ( hints->points != hints->embedded.points )
+ FT_FREE( hints->points );
hints->max_points = 0;
+ hints->num_points = 0;
hints->memory = NULL;
}
@@ -571,15 +618,27 @@
/* first of all, reallocate the contours array if necessary */
new_max = (FT_UInt)outline->n_contours;
- old_max = hints->max_contours;
- if ( new_max > old_max )
+ old_max = (FT_UInt)hints->max_contours;
+
+ if ( new_max <= AF_CONTOURS_EMBEDDED )
+ {
+ if ( hints->contours == NULL )
+ {
+ hints->contours = hints->embedded.contours;
+ hints->max_contours = AF_CONTOURS_EMBEDDED;
+ }
+ }
+ else if ( new_max > old_max )
{
- new_max = ( new_max + 3 ) & ~3; /* round up to a multiple of 4 */
+ if ( hints->contours == hints->embedded.contours )
+ hints->contours = NULL;
+
+ new_max = ( new_max + 3 ) & ~3U; /* round up to a multiple of 4 */
if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )
goto Exit;
- hints->max_contours = new_max;
+ hints->max_contours = (FT_Int)new_max;
}
/*
@@ -588,15 +647,27 @@
* hint metrics appropriately
*/
new_max = (FT_UInt)( outline->n_points + 2 );
- old_max = hints->max_points;
- if ( new_max > old_max )
+ old_max = (FT_UInt)hints->max_points;
+
+ if ( new_max <= AF_POINTS_EMBEDDED )
+ {
+ if ( hints->points == NULL )
+ {
+ hints->points = hints->embedded.points;
+ hints->max_points = AF_POINTS_EMBEDDED;
+ }
+ }
+ else if ( new_max > old_max )
{
- new_max = ( new_max + 2 + 7 ) & ~7; /* round up to a multiple of 8 */
+ if ( hints->points == hints->embedded.points )
+ hints->points = NULL;
+
+ new_max = ( new_max + 2 + 7 ) & ~7U; /* round up to a multiple of 8 */
if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) )
goto Exit;
- hints->max_points = new_max;
+ hints->max_points = (FT_Int)new_max;
}
hints->num_points = outline->n_points;
@@ -721,8 +792,6 @@
FT_Pos out_x, out_y;
- FT_Bool is_first;
-
/* since the first point of a contour could be part of a */
/* series of near points, go backwards to find the first */
@@ -773,17 +842,13 @@
out_x = 0;
out_y = 0;
- is_first = 1;
-
- for ( point = first;
- point != first || is_first;
- point = point->next )
+ next = first;
+ do
{
AF_Direction out_dir;
- is_first = 0;
-
+ point = next;
next = point->next;
out_x += next->fx - point->fx;
@@ -815,7 +880,8 @@
out_x = 0;
out_y = 0;
- }
+
+ } while ( next != first );
}
/*
@@ -1045,7 +1111,7 @@
AF_AxisHints axis = &hints->axis[dim];
AF_Edge edges = axis->edges;
AF_Edge edge_limit = edges + axis->num_edges;
- AF_Flags touch_flag;
+ FT_UInt touch_flag;
if ( dim == AF_DIMENSION_HORZ )
@@ -1226,33 +1292,27 @@
AF_Point ref2 )
{
AF_Point p;
- FT_Pos u;
- FT_Pos v1 = ref1->v;
- FT_Pos v2 = ref2->v;
- FT_Pos d1 = ref1->u - v1;
- FT_Pos d2 = ref2->u - v2;
+ FT_Pos u, v1, v2, u1, u2, d1, d2;
if ( p1 > p2 )
return;
- if ( v1 == v2 )
+ if ( ref1->v > ref2->v )
{
- for ( p = p1; p <= p2; p++ )
- {
- u = p->v;
-
- if ( u <= v1 )
- u += d1;
- else
- u += d2;
-
- p->u = u;
- }
- return;
+ p = ref1;
+ ref1 = ref2;
+ ref2 = p;
}
- if ( v1 < v2 )
+ v1 = ref1->v;
+ v2 = ref2->v;
+ u1 = ref1->u;
+ u2 = ref2->u;
+ d1 = u1 - v1;
+ d2 = u2 - v2;
+
+ if ( u1 == u2 || v1 == v2 )
{
for ( p = p1; p <= p2; p++ )
{
@@ -1263,23 +1323,26 @@
else if ( u >= v2 )
u += d2;
else
- u = ref1->u + FT_MulDiv( u - v1, ref2->u - ref1->u, v2 - v1 );
+ u = u1;
p->u = u;
}
}
else
{
+ FT_Fixed scale = FT_DivFix( u2 - u1, v2 - v1 );
+
+
for ( p = p1; p <= p2; p++ )
{
u = p->v;
- if ( u <= v2 )
- u += d2;
- else if ( u >= v1 )
+ if ( u <= v1 )
u += d1;
+ else if ( u >= v2 )
+ u += d2;
else
- u = ref1->u + FT_MulDiv( u - v1, ref2->u - ref1->u, v2 - v1 );
+ u = u1 + FT_MulFix( u - v1, scale );
p->u = u;
}
@@ -1298,7 +1361,7 @@
AF_Point point_limit = points + hints->num_points;
AF_Point* contour = hints->contours;
AF_Point* contour_limit = contour + hints->num_contours;
- AF_Flags touch_flag;
+ FT_UInt touch_flag;
AF_Point point;
AF_Point end_point;
AF_Point first_point;
diff --git a/freetype/src/autofit/afhints.h b/freetype/src/autofit/afhints.h
index 92101de7c..a64c7a4b1 100644
--- a/freetype/src/autofit/afhints.h
+++ b/freetype/src/autofit/afhints.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines (specification). */
/* */
-/* Copyright 2003-2008, 2010-2012, 2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -207,35 +207,27 @@ FT_BEGIN_HEADER
/* point hint flags */
- typedef enum AF_Flags_
- {
- AF_FLAG_NONE = 0,
-
- /* point type flags */
- AF_FLAG_CONIC = 1 << 0,
- AF_FLAG_CUBIC = 1 << 1,
- AF_FLAG_CONTROL = AF_FLAG_CONIC | AF_FLAG_CUBIC,
+#define AF_FLAG_NONE 0
- /* point touch flags */
- AF_FLAG_TOUCH_X = 1 << 2,
- AF_FLAG_TOUCH_Y = 1 << 3,
+ /* point type flags */
+#define AF_FLAG_CONIC ( 1U << 0 )
+#define AF_FLAG_CUBIC ( 1U << 1 )
+#define AF_FLAG_CONTROL ( AF_FLAG_CONIC | AF_FLAG_CUBIC )
- /* candidates for weak interpolation have this flag set */
- AF_FLAG_WEAK_INTERPOLATION = 1 << 4
+ /* point touch flags */
+#define AF_FLAG_TOUCH_X ( 1U << 2 )
+#define AF_FLAG_TOUCH_Y ( 1U << 3 )
- } AF_Flags;
+ /* candidates for weak interpolation have this flag set */
+#define AF_FLAG_WEAK_INTERPOLATION ( 1U << 4 )
/* edge hint flags */
- typedef enum AF_Edge_Flags_
- {
- AF_EDGE_NORMAL = 0,
- AF_EDGE_ROUND = 1 << 0,
- AF_EDGE_SERIF = 1 << 1,
- AF_EDGE_DONE = 1 << 2,
- AF_EDGE_NEUTRAL = 1 << 3 /* set if edge aligns to a neutral blue zone */
-
- } AF_Edge_Flags;
+#define AF_EDGE_NORMAL 0
+#define AF_EDGE_ROUND ( 1U << 0 )
+#define AF_EDGE_SERIF ( 1U << 1 )
+#define AF_EDGE_DONE ( 1U << 2 )
+#define AF_EDGE_NEUTRAL ( 1U << 3 ) /* edge aligns to a neutral blue zone */
typedef struct AF_PointRec_* AF_Point;
@@ -305,6 +297,8 @@ FT_BEGIN_HEADER
} AF_EdgeRec;
+#define AF_SEGMENTS_EMBEDDED 18 /* number of embedded segments */
+#define AF_EDGES_EMBEDDED 12 /* number of embedded edges */
typedef struct AF_AxisHintsRec_
{
@@ -321,9 +315,20 @@ FT_BEGIN_HEADER
AF_Direction major_dir; /* either vertical or horizontal */
+ /* two arrays to avoid allocation penalty */
+ struct
+ {
+ AF_SegmentRec segments[AF_SEGMENTS_EMBEDDED];
+ AF_EdgeRec edges[AF_EDGES_EMBEDDED];
+ } embedded;
+
+
} AF_AxisHintsRec, *AF_AxisHints;
+#define AF_POINTS_EMBEDDED 96 /* number of embedded points */
+#define AF_CONTOURS_EMBEDDED 8 /* number of embedded contours */
+
typedef struct AF_GlyphHintsRec_
{
FT_Memory memory;
@@ -352,6 +357,14 @@ FT_BEGIN_HEADER
FT_Pos xmin_delta; /* used for warping */
FT_Pos xmax_delta;
+ /* Two arrays to avoid allocation penalty. */
+ /* The `embedded' structure must be the last element! */
+ struct
+ {
+ AF_Point contours[AF_CONTOURS_EMBEDDED];
+ AF_PointRec points[AF_POINTS_EMBEDDED];
+ } embedded;
+
} AF_GlyphHintsRec;
@@ -369,9 +382,6 @@ FT_BEGIN_HEADER
( !_af_debug_disable_vert_hints && \
!AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_VERTICAL ) )
-#define AF_HINTS_DO_ADVANCE( h ) \
- !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_ADVANCE )
-
#define AF_HINTS_DO_BLUES( h ) ( !_af_debug_disable_blue_hints )
#else /* !FT_DEBUG_AUTOFIT */
@@ -382,12 +392,17 @@ FT_BEGIN_HEADER
#define AF_HINTS_DO_VERTICAL( h ) \
!AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_VERTICAL )
+#define AF_HINTS_DO_BLUES( h ) 1
+
+#endif /* !FT_DEBUG_AUTOFIT */
+
+
#define AF_HINTS_DO_ADVANCE( h ) \
!AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_ADVANCE )
-#define AF_HINTS_DO_BLUES( h ) 1
+#define AF_HINTS_DO_WARP( h ) \
+ !AF_HINTS_TEST_SCALER( h, AF_SCALER_FLAG_NO_WARPER )
-#endif /* !FT_DEBUG_AUTOFIT */
FT_LOCAL( AF_Direction )
diff --git a/freetype/src/autofit/afindic.c b/freetype/src/autofit/afindic.c
index 197881b61..7412cd1e3 100644
--- a/freetype/src/autofit/afindic.c
+++ b/freetype/src/autofit/afindic.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for Indic writing system (body). */
/* */
-/* Copyright 2007, 2011-2013 by */
+/* Copyright 2007-2015 by */
/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afindic.h b/freetype/src/autofit/afindic.h
index 9e13cf7e3..4c36908ad 100644
--- a/freetype/src/autofit/afindic.h
+++ b/freetype/src/autofit/afindic.h
@@ -5,7 +5,7 @@
/* Auto-fitter hinting routines for Indic writing system */
/* (specification). */
/* */
-/* Copyright 2007, 2012, 2013 by */
+/* Copyright 2007-2015 by */
/* Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/aflatin.c b/freetype/src/autofit/aflatin.c
index 40ec20faa..aa4cfcacc 100644
--- a/freetype/src/autofit/aflatin.c
+++ b/freetype/src/autofit/aflatin.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for latin writing system (body). */
/* */
-/* Copyright 2003-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -261,8 +261,8 @@
FT_Pos flats [AF_BLUE_STRING_MAX_LEN];
FT_Pos rounds[AF_BLUE_STRING_MAX_LEN];
- FT_Int num_flats;
- FT_Int num_rounds;
+ FT_UInt num_flats;
+ FT_UInt num_rounds;
AF_LatinBlue blue;
FT_Error error;
@@ -362,9 +362,10 @@
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
outline = face->glyph->outline;
- if ( error || outline.n_points <= 0 )
+ /* reject glyphs that don't produce any rendering */
+ if ( error || outline.n_points <= 2 )
{
- FT_TRACE5(( " U+%04lX contains no outlines\n", ch ));
+ FT_TRACE5(( " U+%04lX contains no (usable) outlines\n", ch ));
continue;
}
@@ -1791,7 +1792,7 @@
/* Example: the `c' in cour.pfa at size 13 */
if ( edge->serif && edge->link )
- edge->serif = 0;
+ edge->serif = NULL;
}
}
@@ -1825,7 +1826,7 @@
/* Compute all edges which lie within blue zones. */
- FT_LOCAL_DEF( void )
+ static void
af_latin_hints_compute_blue_edges( AF_GlyphHints hints,
AF_LatinMetrics metrics )
{
@@ -1995,11 +1996,20 @@
/*
* In `light' hinting mode we disable horizontal hinting completely.
* We also do it if the face is italic.
+ *
+ * However, if warping is enabled (which only works in `light' hinting
+ * mode), advance widths get adjusted, too.
*/
if ( mode == FT_RENDER_MODE_LIGHT ||
( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ /* get (global) warper flag */
+ if ( !metrics->root.globals->module->warping )
+ scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
+#endif
+
hints->scaler_flags = scaler_flags;
hints->other_flags = other_flags;
@@ -2020,13 +2030,13 @@
static FT_Pos
af_latin_snap_width( AF_Width widths,
- FT_Int count,
+ FT_UInt count,
FT_Pos width )
{
- int n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
+ FT_UInt n;
+ FT_Pos best = 64 + 32 + 2;
+ FT_Pos reference = width;
+ FT_Pos scaled;
for ( n = 0; n < count; n++ )
@@ -2071,8 +2081,8 @@
af_latin_compute_stem_width( AF_GlyphHints hints,
AF_Dimension dim,
FT_Pos width,
- AF_Edge_Flags base_flags,
- AF_Edge_Flags stem_flags )
+ FT_UInt base_flags,
+ FT_UInt stem_flags )
{
AF_LatinMetrics metrics = (AF_LatinMetrics)hints->metrics;
AF_LatinAxis axis = &metrics->axis[dim];
@@ -2239,10 +2249,9 @@
{
FT_Pos dist = stem_edge->opos - base_edge->opos;
- FT_Pos fitted_width = af_latin_compute_stem_width(
- hints, dim, dist,
- (AF_Edge_Flags)base_edge->flags,
- (AF_Edge_Flags)stem_edge->flags );
+ FT_Pos fitted_width = af_latin_compute_stem_width( hints, dim, dist,
+ base_edge->flags,
+ stem_edge->flags );
stem_edge->pos = base_edge->pos + fitted_width;
@@ -2281,7 +2290,7 @@
/* The main grid-fitting routine. */
- FT_LOCAL_DEF( void )
+ static void
af_latin_hint_edges( AF_GlyphHints hints,
AF_Dimension dim )
{
@@ -2334,7 +2343,7 @@
FT_Byte neutral2 = edge2->flags & AF_EDGE_NEUTRAL;
- if ( ( neutral && neutral2 ) || neutral2 )
+ if ( neutral2 )
{
edge2->blue_edge = NULL;
edge2->flags &= ~AF_EDGE_NEUTRAL;
@@ -2437,10 +2446,9 @@
org_len = edge2->opos - edge->opos;
- cur_len = af_latin_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ cur_len = af_latin_compute_stem_width( hints, dim, org_len,
+ edge->flags,
+ edge2->flags );
/* some voodoo to specially round edges for small stem widths; */
/* the idea is to align the center of a stem, then shifting */
@@ -2507,10 +2515,9 @@
org_len = edge2->opos - edge->opos;
org_center = org_pos + ( org_len >> 1 );
- cur_len = af_latin_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ cur_len = af_latin_compute_stem_width( hints, dim, org_len,
+ edge->flags,
+ edge2->flags );
if ( edge2->flags & AF_EDGE_DONE )
{
@@ -2568,10 +2575,9 @@
org_len = edge2->opos - edge->opos;
org_center = org_pos + ( org_len >> 1 );
- cur_len = af_latin_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ cur_len = af_latin_compute_stem_width( hints, dim, org_len,
+ edge->flags,
+ edge2->flags );
cur_pos1 = FT_PIX_ROUND( org_pos );
delta1 = cur_pos1 + ( cur_len >> 1 ) - org_center;
@@ -2815,8 +2821,9 @@
/* analyze glyph outline */
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
+ if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ AF_HINTS_DO_WARP( hints ) ) ||
+ AF_HINTS_DO_HORIZONTAL( hints ) )
#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
#endif
@@ -2848,7 +2855,8 @@
{
#ifdef AF_CONFIG_OPTION_USE_WARPER
if ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT )
+ metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ AF_HINTS_DO_WARP( hints ) )
{
AF_WarperRec warper;
FT_Fixed scale;
@@ -2861,7 +2869,7 @@
scale, delta );
continue;
}
-#endif
+#endif /* AF_CONFIG_OPTION_USE_WARPER */
if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
diff --git a/freetype/src/autofit/aflatin.h b/freetype/src/autofit/aflatin.h
index 2c0bfca18..6855492ca 100644
--- a/freetype/src/autofit/aflatin.h
+++ b/freetype/src/autofit/aflatin.h
@@ -5,7 +5,7 @@
/* Auto-fitter hinting routines for latin writing system */
/* (specification). */
/* */
-/* Copyright 2003-2007, 2009, 2011-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -63,15 +63,11 @@ FT_BEGIN_HEADER
#define AF_LATIN_MAX_WIDTHS 16
- enum
- {
- AF_LATIN_BLUE_ACTIVE = 1 << 0, /* set if zone height is <= 3/4px */
- AF_LATIN_BLUE_TOP = 1 << 1, /* set if we have a top blue zone */
- AF_LATIN_BLUE_NEUTRAL = 1 << 2, /* set if we have neutral blue zone */
- AF_LATIN_BLUE_ADJUSTMENT = 1 << 3, /* used for scale adjustment */
- /* optimization */
- AF_LATIN_BLUE_FLAG_MAX
- };
+#define AF_LATIN_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
+#define AF_LATIN_BLUE_TOP ( 1U << 1 ) /* we have a top blue zone */
+#define AF_LATIN_BLUE_NEUTRAL ( 1U << 2 ) /* we have neutral blue zone */
+#define AF_LATIN_BLUE_ADJUSTMENT ( 1U << 3 ) /* used for scale adjustment */
+ /* optimization */
typedef struct AF_LatinBlueRec_
@@ -138,15 +134,11 @@ FT_BEGIN_HEADER
/*************************************************************************/
/*************************************************************************/
- enum
- {
- AF_LATIN_HINTS_HORZ_SNAP = 1 << 0, /* enable stem width snapping */
- AF_LATIN_HINTS_VERT_SNAP = 1 << 1, /* enable stem height snapping */
- AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height */
- /* adjustment */
- AF_LATIN_HINTS_MONO = 1 << 3 /* indicate monochrome */
- /* rendering */
- };
+#define AF_LATIN_HINTS_HORZ_SNAP ( 1U << 0 ) /* stem width snapping */
+#define AF_LATIN_HINTS_VERT_SNAP ( 1U << 1 ) /* stem height snapping */
+#define AF_LATIN_HINTS_STEM_ADJUST ( 1U << 2 ) /* stem width/height */
+ /* adjustment */
+#define AF_LATIN_HINTS_MONO ( 1U << 3 ) /* monochrome rendering */
#define AF_LATIN_HINTS_DO_HORZ_SNAP( h ) \
diff --git a/freetype/src/autofit/aflatin2.c b/freetype/src/autofit/aflatin2.c
index 07590b380..ac9f93325 100644
--- a/freetype/src/autofit/aflatin2.c
+++ b/freetype/src/autofit/aflatin2.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter hinting routines for latin writing system (body). */
/* */
-/* Copyright 2003-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -835,8 +835,8 @@
{
AF_Point pt = first;
AF_Point last = point;
- AF_Flags f0 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
- AF_Flags f1;
+ FT_UInt f0 = pt->flags & AF_FLAG_CONTROL;
+ FT_UInt f1;
segment->flags &= ~AF_EDGE_ROUND;
@@ -844,7 +844,7 @@
for ( ; pt != last; f0 = f1 )
{
pt = pt->next;
- f1 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
+ f1 = pt->flags & AF_FLAG_CONTROL;
if ( !f0 && !f1 )
break;
@@ -1048,7 +1048,7 @@
{
if ( seg2->link != seg1 )
{
- seg1->link = 0;
+ seg1->link = NULL;
seg1->serif = seg2->link;
}
}
@@ -1128,7 +1128,7 @@
for ( seg = segments; seg < segment_limit; seg++ )
{
- AF_Edge found = 0;
+ AF_Edge found = NULL;
FT_Int ee;
@@ -1355,7 +1355,7 @@
/* Example: the `c' in cour.pfa at size 13 */
if ( edge->serif && edge->link )
- edge->serif = 0;
+ edge->serif = NULL;
}
}
@@ -1382,7 +1382,7 @@
}
- FT_LOCAL_DEF( void )
+ static void
af_latin2_hints_compute_blue_edges( AF_GlyphHints hints,
AF_LatinMetrics metrics )
{
@@ -1513,9 +1513,7 @@
#if 0 /* #ifdef AF_CONFIG_OPTION_USE_WARPER */
if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
- {
metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
- }
#endif
scaler_flags = hints->scaler_flags;
@@ -1552,6 +1550,12 @@
( face->style_flags & FT_STYLE_FLAG_ITALIC ) != 0 )
scaler_flags |= AF_SCALER_FLAG_NO_HORIZONTAL;
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ /* get (global) warper flag */
+ if ( !metrics->root.globals->module->warping )
+ scaler_flags |= AF_SCALER_FLAG_NO_WARPER;
+#endif
+
hints->scaler_flags = scaler_flags;
hints->other_flags = other_flags;
@@ -1572,13 +1576,13 @@
static FT_Pos
af_latin2_snap_width( AF_Width widths,
- FT_Int count,
+ FT_UInt count,
FT_Pos width )
{
- int n;
- FT_Pos best = 64 + 32 + 2;
- FT_Pos reference = width;
- FT_Pos scaled;
+ FT_UInt n;
+ FT_Pos best = 64 + 32 + 2;
+ FT_Pos reference = width;
+ FT_Pos scaled;
for ( n = 0; n < count; n++ )
@@ -1621,8 +1625,8 @@
af_latin2_compute_stem_width( AF_GlyphHints hints,
AF_Dimension dim,
FT_Pos width,
- AF_Edge_Flags base_flags,
- AF_Edge_Flags stem_flags )
+ FT_UInt base_flags,
+ FT_UInt stem_flags )
{
AF_LatinMetrics metrics = (AF_LatinMetrics) hints->metrics;
AF_LatinAxis axis = & metrics->axis[dim];
@@ -1793,10 +1797,9 @@
{
FT_Pos dist = stem_edge->opos - base_edge->opos;
- FT_Pos fitted_width = af_latin2_compute_stem_width(
- hints, dim, dist,
- (AF_Edge_Flags)base_edge->flags,
- (AF_Edge_Flags)stem_edge->flags );
+ FT_Pos fitted_width = af_latin2_compute_stem_width( hints, dim, dist,
+ base_edge->flags,
+ stem_edge->flags );
stem_edge->pos = base_edge->pos + fitted_width;
@@ -1830,7 +1833,7 @@
/*************************************************************************/
- FT_LOCAL_DEF( void )
+ static void
af_latin2_hint_edges( AF_GlyphHints hints,
AF_Dimension dim )
{
@@ -1838,7 +1841,7 @@
AF_Edge edges = axis->edges;
AF_Edge edge_limit = edges + axis->num_edges;
AF_Edge edge;
- AF_Edge anchor = 0;
+ AF_Edge anchor = NULL;
FT_Int has_serifs = 0;
FT_Pos anchor_drift = 0;
@@ -1942,10 +1945,9 @@
org_len = edge2->opos - edge->opos;
- cur_len = af_latin2_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ cur_len = af_latin2_compute_stem_width( hints, dim, org_len,
+ edge->flags,
+ edge2->flags );
if ( cur_len <= 64 )
u_off = d_off = 32;
else
@@ -2007,10 +2009,9 @@
org_len = edge2->opos - edge->opos;
org_center = org_pos + ( org_len >> 1 );
- cur_len = af_latin2_compute_stem_width(
- hints, dim, org_len,
- (AF_Edge_Flags)edge->flags,
- (AF_Edge_Flags)edge2->flags );
+ cur_len = af_latin2_compute_stem_width( hints, dim, org_len,
+ edge->flags,
+ edge2->flags );
org_left = org_pos + ( ( org_len - cur_len ) >> 1 );
org_right = org_pos + ( ( org_len + cur_len ) >> 1 );
@@ -2313,8 +2314,9 @@
/* analyze glyph outline */
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ||
- AF_HINTS_DO_HORIZONTAL( hints ) )
+ if ( ( metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ AF_HINTS_DO_WARP( hints ) ) ||
+ AF_HINTS_DO_HORIZONTAL( hints ) )
#else
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
#endif
@@ -2337,8 +2339,9 @@
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
{
#ifdef AF_CONFIG_OPTION_USE_WARPER
- if ( ( dim == AF_DIMENSION_HORZ &&
- metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT ) )
+ if ( dim == AF_DIMENSION_HORZ &&
+ metrics->root.scaler.render_mode == FT_RENDER_MODE_LIGHT &&
+ AF_HINTS_DO_WARP( hints ) )
{
AF_WarperRec warper;
FT_Fixed scale;
@@ -2349,7 +2352,7 @@
af_glyph_hints_scale_dim( hints, dim, scale, delta );
continue;
}
-#endif
+#endif /* AF_CONFIG_OPTION_USE_WARPER */
if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
diff --git a/freetype/src/autofit/aflatin2.h b/freetype/src/autofit/aflatin2.h
index b5d252a91..932675313 100644
--- a/freetype/src/autofit/aflatin2.h
+++ b/freetype/src/autofit/aflatin2.h
@@ -5,7 +5,7 @@
/* Auto-fitter hinting routines for latin writing system */
/* (specification). */
/* */
-/* Copyright 2003-2007, 2012, 2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afloader.c b/freetype/src/autofit/afloader.c
index fb15c87f0..7c2fa7cff 100644
--- a/freetype/src/autofit/afloader.c
+++ b/freetype/src/autofit/afloader.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter glyph loading routines (body). */
/* */
-/* Copyright 2003-2009, 2011-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,38 +26,29 @@
/* Initialize glyph loader. */
- FT_LOCAL_DEF( FT_Error )
- af_loader_init( AF_Module module )
+ FT_LOCAL_DEF( void )
+ af_loader_init( AF_Loader loader,
+ AF_GlyphHints hints )
{
- AF_Loader loader = module->loader;
- FT_Memory memory = module->root.library->memory;
-
-
FT_ZERO( loader );
- af_glyph_hints_init( &loader->hints, memory );
-#ifdef FT_DEBUG_AUTOFIT
- _af_debug_hints = &loader->hints;
-#endif
- return FT_GlyphLoader_New( memory, &loader->gloader );
+ loader->hints = hints;
}
/* Reset glyph loader and compute globals if necessary. */
FT_LOCAL_DEF( FT_Error )
- af_loader_reset( AF_Module module,
+ af_loader_reset( AF_Loader loader,
+ AF_Module module,
FT_Face face )
{
- FT_Error error = FT_Err_Ok;
- AF_Loader loader = module->loader;
+ FT_Error error = FT_Err_Ok;
loader->face = face;
loader->globals = (AF_FaceGlobals)face->autohint.data;
- FT_GlyphLoader_Rewind( loader->gloader );
-
if ( loader->globals == NULL )
{
error = af_face_globals_new( face, &loader->globals, module );
@@ -77,42 +68,33 @@
/* Finalize glyph loader. */
FT_LOCAL_DEF( void )
- af_loader_done( AF_Module module )
+ af_loader_done( AF_Loader loader )
{
- AF_Loader loader = module->loader;
-
-
- af_glyph_hints_done( &loader->hints );
-
loader->face = NULL;
loader->globals = NULL;
-
-#ifdef FT_DEBUG_AUTOFIT
- _af_debug_hints = NULL;
-#endif
- FT_GlyphLoader_Done( loader->gloader );
- loader->gloader = NULL;
+ loader->hints = NULL;
}
- /* Load a single glyph component. This routine calls itself */
- /* recursively, if necessary, and does the main work of */
- /* `af_loader_load_glyph.' */
+ /* Do the main work of `af_loader_load_glyph'. Note that we never */
+ /* have to deal with composite glyphs as those get loaded into */
+ /* FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function. */
+ /* In the rare cases where FT_LOAD_NO_RECURSE is set, it implies */
+ /* FT_LOAD_NO_SCALE and as such the auto-hinter is never called. */
static FT_Error
af_loader_load_g( AF_Loader loader,
AF_Scaler scaler,
FT_UInt glyph_index,
- FT_Int32 load_flags,
- FT_UInt depth )
+ FT_Int32 load_flags )
{
FT_Error error;
FT_Face face = loader->face;
- FT_GlyphLoader gloader = loader->gloader;
AF_StyleMetrics metrics = loader->metrics;
- AF_GlyphHints hints = &loader->hints;
+ AF_GlyphHints hints = loader->hints;
FT_GlyphSlot slot = face->glyph;
FT_Slot_Internal internal = slot->internal;
+ FT_GlyphLoader gloader = internal->loader;
FT_Int32 flags;
@@ -144,29 +126,6 @@
loader->trans_delta.x,
loader->trans_delta.y );
- /* copy the outline points in the loader's current */
- /* extra points which are used to keep original glyph coordinates */
- error = FT_GLYPHLOADER_CHECK_POINTS( gloader,
- slot->outline.n_points + 4,
- slot->outline.n_contours );
- if ( error )
- goto Exit;
-
- FT_ARRAY_COPY( gloader->current.outline.points,
- slot->outline.points,
- slot->outline.n_points );
-
- FT_ARRAY_COPY( gloader->current.outline.contours,
- slot->outline.contours,
- slot->outline.n_contours );
-
- FT_ARRAY_COPY( gloader->current.outline.tags,
- slot->outline.tags,
- slot->outline.n_points );
-
- gloader->current.outline.n_points = slot->outline.n_points;
- gloader->current.outline.n_contours = slot->outline.n_contours;
-
/* compute original horizontal phantom points (and ignore */
/* vertical ones) */
loader->pp1.x = hints->x_delta;
@@ -192,7 +151,7 @@
if ( writing_system_class->style_hints_apply )
writing_system_class->style_hints_apply( hints,
- &gloader->current.outline,
+ &gloader->base.outline,
metrics );
}
@@ -267,128 +226,6 @@
slot->rsb_delta = loader->pp2.x - pp2x;
}
- /* good, we simply add the glyph to our loader's base */
- FT_GlyphLoader_Add( gloader );
- break;
-
- case FT_GLYPH_FORMAT_COMPOSITE:
- {
- FT_UInt nn, num_subglyphs = slot->num_subglyphs;
- FT_UInt num_base_subgs, start_point;
- FT_SubGlyph subglyph;
-
-
- start_point = gloader->base.outline.n_points;
-
- /* first of all, copy the subglyph descriptors in the glyph loader */
- error = FT_GlyphLoader_CheckSubGlyphs( gloader, num_subglyphs );
- if ( error )
- goto Exit;
-
- FT_ARRAY_COPY( gloader->current.subglyphs,
- slot->subglyphs,
- num_subglyphs );
-
- gloader->current.num_subglyphs = num_subglyphs;
- num_base_subgs = gloader->base.num_subglyphs;
-
- /* now read each subglyph independently */
- for ( nn = 0; nn < num_subglyphs; nn++ )
- {
- FT_Vector pp1, pp2;
- FT_Pos x, y;
- FT_UInt num_points, num_new_points, num_base_points;
-
-
- /* gloader.current.subglyphs can change during glyph loading due */
- /* to re-allocation -- we must recompute the current subglyph on */
- /* each iteration */
- subglyph = gloader->base.subglyphs + num_base_subgs + nn;
-
- pp1 = loader->pp1;
- pp2 = loader->pp2;
-
- num_base_points = gloader->base.outline.n_points;
-
- error = af_loader_load_g( loader, scaler, subglyph->index,
- load_flags, depth + 1 );
- if ( error )
- goto Exit;
-
- /* recompute subglyph pointer */
- subglyph = gloader->base.subglyphs + num_base_subgs + nn;
-
- if ( !( subglyph->flags & FT_SUBGLYPH_FLAG_USE_MY_METRICS ) )
- {
- loader->pp1 = pp1;
- loader->pp2 = pp2;
- }
-
- num_points = gloader->base.outline.n_points;
- num_new_points = num_points - num_base_points;
-
- /* now perform the transformation required for this subglyph */
-
- if ( subglyph->flags & ( FT_SUBGLYPH_FLAG_SCALE |
- FT_SUBGLYPH_FLAG_XY_SCALE |
- FT_SUBGLYPH_FLAG_2X2 ) )
- {
- FT_Vector* cur = gloader->base.outline.points +
- num_base_points;
- FT_Vector* limit = cur + num_new_points;
-
-
- for ( ; cur < limit; cur++ )
- FT_Vector_Transform( cur, &subglyph->transform );
- }
-
- /* apply offset */
-
- if ( !( subglyph->flags & FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ) )
- {
- FT_Int k = subglyph->arg1;
- FT_UInt l = subglyph->arg2;
- FT_Vector* p1;
- FT_Vector* p2;
-
-
- if ( start_point + k >= num_base_points ||
- l >= (FT_UInt)num_new_points )
- {
- error = FT_THROW( Invalid_Composite );
- goto Exit;
- }
-
- l += num_base_points;
-
- /* for now, only use the current point coordinates; */
- /* we eventually may consider another approach */
- p1 = gloader->base.outline.points + start_point + k;
- p2 = gloader->base.outline.points + start_point + l;
-
- x = p1->x - p2->x;
- y = p1->y - p2->y;
- }
- else
- {
- x = FT_MulFix( subglyph->arg1, hints->x_scale ) + hints->x_delta;
- y = FT_MulFix( subglyph->arg2, hints->y_scale ) + hints->y_delta;
-
- x = FT_PIX_ROUND( x );
- y = FT_PIX_ROUND( y );
- }
-
- {
- FT_Outline dummy = gloader->base.outline;
-
-
- dummy.points += num_base_points;
- dummy.n_points = (short)num_new_points;
-
- FT_Outline_Translate( &dummy, x, y );
- }
- }
- }
break;
default:
@@ -397,7 +234,6 @@
}
Hint_Metrics:
- if ( depth == 0 )
{
FT_BBox bbox;
FT_Vector vvector;
@@ -472,18 +308,14 @@
slot->metrics.horiAdvance = FT_PIX_ROUND( slot->metrics.horiAdvance );
slot->metrics.vertAdvance = FT_PIX_ROUND( slot->metrics.vertAdvance );
- /* now copy outline into glyph slot */
- FT_GlyphLoader_Rewind( internal->loader );
- error = FT_GlyphLoader_CopyPoints( internal->loader, gloader );
- if ( error )
- goto Exit;
-
+#if 0
/* reassign all outline fields except flags to protect them */
slot->outline.n_contours = internal->loader->base.outline.n_contours;
slot->outline.n_points = internal->loader->base.outline.n_points;
slot->outline.points = internal->loader->base.outline.points;
slot->outline.tags = internal->loader->base.outline.tags;
slot->outline.contours = internal->loader->base.outline.contours;
+#endif
slot->format = FT_GLYPH_FORMAT_OUTLINE;
}
@@ -496,14 +328,14 @@
/* Load a glyph. */
FT_LOCAL_DEF( FT_Error )
- af_loader_load_glyph( AF_Module module,
+ af_loader_load_glyph( AF_Loader loader,
+ AF_Module module,
FT_Face face,
FT_UInt gindex,
FT_Int32 load_flags )
{
FT_Error error;
FT_Size size = face->size;
- AF_Loader loader = module->loader;
AF_ScalerRec scaler;
@@ -521,7 +353,7 @@
scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags );
scaler.flags = 0; /* XXX: fix this */
- error = af_loader_reset( module, face );
+ error = af_loader_reset( loader, module, face );
if ( !error )
{
AF_StyleMetrics metrics;
@@ -558,13 +390,13 @@
if ( writing_system_class->style_hints_init )
{
- error = writing_system_class->style_hints_init( &loader->hints,
+ error = writing_system_class->style_hints_init( loader->hints,
metrics );
if ( error )
goto Exit;
}
- error = af_loader_load_g( loader, &scaler, gindex, load_flags, 0 );
+ error = af_loader_load_g( loader, &scaler, gindex, load_flags );
}
}
Exit:
diff --git a/freetype/src/autofit/afloader.h b/freetype/src/autofit/afloader.h
index 9601e24fc..37cfd1423 100644
--- a/freetype/src/autofit/afloader.h
+++ b/freetype/src/autofit/afloader.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter glyph loading routines (specification). */
/* */
-/* Copyright 2003-2005, 2011-2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,13 +20,12 @@
#define __AFLOADER_H__
#include "afhints.h"
+#include "afmodule.h"
#include "afglobal.h"
FT_BEGIN_HEADER
- typedef struct AF_ModuleRec_* AF_Module;
-
/*
* The autofitter module's (global) data structure to communicate with
* actual fonts. If necessary, `local' data like the current face, the
@@ -42,8 +41,7 @@ FT_BEGIN_HEADER
AF_FaceGlobals globals;
/* current glyph data */
- FT_GlyphLoader gloader;
- AF_GlyphHintsRec hints;
+ AF_GlyphHints hints;
AF_StyleMetrics metrics;
FT_Bool transformed;
FT_Matrix trans_matrix;
@@ -55,21 +53,24 @@ FT_BEGIN_HEADER
} AF_LoaderRec, *AF_Loader;
- FT_LOCAL( FT_Error )
- af_loader_init( AF_Module module );
+ FT_LOCAL( void )
+ af_loader_init( AF_Loader loader,
+ AF_GlyphHints hints );
FT_LOCAL( FT_Error )
- af_loader_reset( AF_Module module,
+ af_loader_reset( AF_Loader loader,
+ AF_Module module,
FT_Face face );
FT_LOCAL( void )
- af_loader_done( AF_Module module );
+ af_loader_done( AF_Loader loader );
FT_LOCAL( FT_Error )
- af_loader_load_glyph( AF_Module module,
+ af_loader_load_glyph( AF_Loader loader,
+ AF_Module module,
FT_Face face,
FT_UInt gindex,
FT_Int32 load_flags );
diff --git a/freetype/src/autofit/afmodule.c b/freetype/src/autofit/afmodule.c
index d411f44e7..4f9325ae0 100644
--- a/freetype/src/autofit/afmodule.c
+++ b/freetype/src/autofit/afmodule.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module implementation (body). */
/* */
-/* Copyright 2003-2006, 2009, 2011-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,10 +23,27 @@
#include "afpic.h"
#ifdef FT_DEBUG_AUTOFIT
- int _af_debug_disable_horz_hints;
- int _af_debug_disable_vert_hints;
- int _af_debug_disable_blue_hints;
- void* _af_debug_hints;
+
+#ifndef FT_MAKE_OPTION_SINGLE_OBJECT
+ extern void
+ af_glyph_hints_dump_segments( AF_GlyphHints hints,
+ FT_Bool to_stdout );
+ extern void
+ af_glyph_hints_dump_points( AF_GlyphHints hints,
+ FT_Bool to_stdout );
+ extern void
+ af_glyph_hints_dump_edges( AF_GlyphHints hints,
+ FT_Bool to_stdout );
+#endif
+
+ int _af_debug_disable_horz_hints;
+ int _af_debug_disable_vert_hints;
+ int _af_debug_disable_blue_hints;
+
+ /* we use a global object instead of a local one for debugging */
+ AF_GlyphHintsRec _af_debug_hints_rec[1];
+
+ void* _af_debug_hints = _af_debug_hints_rec;
#endif
#include <internal/ftobjs.h>
@@ -141,6 +158,17 @@
return error;
}
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ else if ( !ft_strcmp( property_name, "warping" ) )
+ {
+ FT_Bool* warping = (FT_Bool*)value;
+
+
+ module->warping = *warping;
+
+ return error;
+ }
+#endif /* AF_CONFIG_OPTION_USE_WARPER */
FT_TRACE0(( "af_property_set: missing property `%s'\n",
property_name ));
@@ -157,6 +185,9 @@
AF_Module module = (AF_Module)ft_module;
FT_UInt fallback_style = module->fallback_style;
FT_UInt default_script = module->default_script;
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ FT_Bool warping = module->warping;
+#endif
if ( !ft_strcmp( property_name, "glyph-to-script-map" ) )
@@ -203,7 +234,17 @@
return error;
}
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ else if ( !ft_strcmp( property_name, "warping" ) )
+ {
+ FT_Bool* val = (FT_Bool*)value;
+
+
+ *val = warping;
+ return error;
+ }
+#endif /* AF_CONFIG_OPTION_USE_WARPER */
FT_TRACE0(( "af_property_get: missing property `%s'\n",
property_name ));
@@ -252,18 +293,23 @@
module->fallback_style = AF_STYLE_FALLBACK;
module->default_script = AF_SCRIPT_DEFAULT;
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ module->warping = 0;
+#endif
- return af_loader_init( module );
+ return FT_Err_Ok;
}
FT_CALLBACK_DEF( void )
af_autofitter_done( FT_Module ft_module ) /* AF_Module */
{
- AF_Module module = (AF_Module)ft_module;
-
+ FT_UNUSED( ft_module );
- af_loader_done( module );
+#ifdef FT_DEBUG_AUTOFIT
+ if ( _af_debug_hints_rec->memory )
+ af_glyph_hints_done( _af_debug_hints_rec );
+#endif
}
@@ -274,10 +320,56 @@
FT_UInt glyph_index,
FT_Int32 load_flags )
{
+ FT_Error error = FT_Err_Ok;
+ FT_Memory memory = module->root.library->memory;
+
+#ifdef FT_DEBUG_AUTOFIT
+
+ /* in debug mode, we use a global object that survives this routine */
+
+ AF_GlyphHints hints = _af_debug_hints_rec;
+ AF_LoaderRec loader[1];
+
FT_UNUSED( size );
- return af_loader_load_glyph( module, slot->face,
- glyph_index, load_flags );
+
+ if ( hints->memory )
+ af_glyph_hints_done( hints );
+
+ af_glyph_hints_init( hints, memory );
+ af_loader_init( loader, hints );
+
+ error = af_loader_load_glyph( loader, module, slot->face,
+ glyph_index, load_flags );
+
+ af_glyph_hints_dump_points( hints, 0 );
+ af_glyph_hints_dump_segments( hints, 0 );
+ af_glyph_hints_dump_edges( hints, 0 );
+
+ af_loader_done( loader );
+
+ return error;
+
+#else /* !FT_DEBUG_AUTOFIT */
+
+ AF_GlyphHintsRec hints[1];
+ AF_LoaderRec loader[1];
+
+ FT_UNUSED( size );
+
+
+ af_glyph_hints_init( hints, memory );
+ af_loader_init( loader, hints );
+
+ error = af_loader_load_glyph( loader, module, slot->face,
+ glyph_index, load_flags );
+
+ af_loader_done( loader );
+ af_glyph_hints_done( hints );
+
+ return error;
+
+#endif /* !FT_DEBUG_AUTOFIT */
}
diff --git a/freetype/src/autofit/afmodule.h b/freetype/src/autofit/afmodule.h
index 6c7a5d123..08233dd9b 100644
--- a/freetype/src/autofit/afmodule.h
+++ b/freetype/src/autofit/afmodule.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module implementation (specification). */
/* */
-/* Copyright 2003-2005, 2009, 2012, 2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -23,17 +23,13 @@
#include <internal/ftobjs.h>
#include FT_MODULE_H
-#include "afloader.h"
-
FT_BEGIN_HEADER
/*
- * This is the `extended' FT_Module structure which holds the
- * autofitter's global data. Right before hinting a glyph, the data
- * specific to the glyph's face (blue zones, stem widths, etc.) are
- * loaded into `loader' (see function `af_loader_reset').
+ * This is the `extended' FT_Module structure that holds the
+ * autofitter's global data.
*/
typedef struct AF_ModuleRec_
@@ -42,13 +38,14 @@ FT_BEGIN_HEADER
FT_UInt fallback_style;
FT_UInt default_script;
+#ifdef AF_CONFIG_OPTION_USE_WARPER
+ FT_Bool warping;
+#endif
- AF_LoaderRec loader[1];
-
- } AF_ModuleRec;
+ } AF_ModuleRec, *AF_Module;
-FT_DECLARE_MODULE(autofit_module_class)
+FT_DECLARE_MODULE( autofit_module_class )
FT_END_HEADER
diff --git a/freetype/src/autofit/afpic.c b/freetype/src/autofit/afpic.c
index 90f8beb52..2e2bee1e2 100644
--- a/freetype/src/autofit/afpic.c
+++ b/freetype/src/autofit/afpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for autofit module. */
/* */
-/* Copyright 2009-2014 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afpic.h b/freetype/src/autofit/afpic.h
index 3afd1fce1..88f3c69d9 100644
--- a/freetype/src/autofit/afpic.h
+++ b/freetype/src/autofit/afpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for autofit module. */
/* */
-/* Copyright 2009, 2011-2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afranges.c b/freetype/src/autofit/afranges.c
index b2c504d42..c1e0afb7e 100644
--- a/freetype/src/autofit/afranges.c
+++ b/freetype/src/autofit/afranges.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter Unicode script ranges (body). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -19,6 +19,17 @@
#include "afranges.h"
+ const AF_Script_UniRangeRec af_arab_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0600UL, 0x06FFUL ), /* Arabic */
+ AF_UNIRANGE_REC( 0x0750UL, 0x07FFUL ), /* Arabic Supplement */
+ AF_UNIRANGE_REC( 0x08A0UL, 0x08FFUL ), /* Arabic Extended-A */
+ AF_UNIRANGE_REC( 0xFB50UL, 0xFDFFUL ), /* Arabic Presentation Forms-A */
+ AF_UNIRANGE_REC( 0xFE70UL, 0xFEFFUL ), /* Arabic Presentation Forms-B */
+ AF_UNIRANGE_REC( 0x1EE00UL, 0x1EEFFUL ), /* Arabic Mathematical Alphabetic Symbols */
+ AF_UNIRANGE_REC( 0UL, 0UL )
+ };
+
const AF_Script_UniRangeRec af_cyrl_uniranges[] =
{
AF_UNIRANGE_REC( 0x0400UL, 0x04FFUL ), /* Cyrillic */
@@ -98,6 +109,12 @@
AF_UNIRANGE_REC( 0UL, 0UL )
};
+ const AF_Script_UniRangeRec af_thai_uniranges[] =
+ {
+ AF_UNIRANGE_REC( 0x0E00UL, 0x0E7FUL ), /* Thai */
+ AF_UNIRANGE_REC( 0UL, 0UL )
+ };
+
#ifdef AF_CONFIG_OPTION_INDIC
const AF_Script_UniRangeRec af_beng_uniranges[] =
diff --git a/freetype/src/autofit/afranges.h b/freetype/src/autofit/afranges.h
index fe5b2aa7c..7c78ab089 100644
--- a/freetype/src/autofit/afranges.h
+++ b/freetype/src/autofit/afranges.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter Unicode script ranges (specification). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/afscript.h b/freetype/src/autofit/afscript.h
index efe8754df..dfcc8302a 100644
--- a/freetype/src/autofit/afscript.h
+++ b/freetype/src/autofit/afscript.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter scripts (specification only). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,6 +26,11 @@
/* script name tag, followed by a string of standard characters (to */
/* derive the standard width and height of stems). */
+ SCRIPT( arab, ARAB,
+ "Arabic",
+ HB_SCRIPT_ARABIC,
+ 0x644, 0x62D, 0x640 ) /* ل ح ـ */
+
SCRIPT( cyrl, CYRL,
"Cyrillic",
HB_SCRIPT_CYRILLIC,
@@ -62,6 +67,11 @@
HB_SCRIPT_TELUGU,
0xC66, 0xC67, 0x0 ) /* ౦ ౧ */
+ SCRIPT( thai, THAI,
+ "Thai",
+ HB_SCRIPT_THAI,
+ 0xE32, 0xE45, 0xE50 ) /* า ๅ ๐ */
+
#ifdef AF_CONFIG_OPTION_INDIC
SCRIPT( beng, BENG,
diff --git a/freetype/src/autofit/afstyles.h b/freetype/src/autofit/afstyles.h
index f14d354cc..bfd5bb910 100644
--- a/freetype/src/autofit/afstyles.h
+++ b/freetype/src/autofit/afstyles.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter styles (specification only). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -80,6 +80,14 @@
"default", \
DEFAULT )
+
+ STYLE( arab_dflt, ARAB_DFLT,
+ "Arabic default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_ARAB,
+ AF_BLUE_STRINGSET_ARAB,
+ AF_COVERAGE_DEFAULT )
+
META_STYLE_LATIN( cyrl, CYRL, "Cyrillic" )
META_STYLE_LATIN( grek, GREK, "Greek" )
@@ -122,6 +130,13 @@
AF_BLUE_STRINGSET_TELU,
AF_COVERAGE_DEFAULT )
+ STYLE( thai_dflt, THAI_DFLT,
+ "Thai default style",
+ AF_WRITING_SYSTEM_LATIN,
+ AF_SCRIPT_THAI,
+ AF_BLUE_STRINGSET_THAI,
+ AF_COVERAGE_DEFAULT )
+
#ifdef AF_CONFIG_OPTION_INDIC
/* no blue stringset support for the Indic writing system yet */
diff --git a/freetype/src/autofit/aftypes.h b/freetype/src/autofit/aftypes.h
index b4cc0f8af..94cffb9a0 100644
--- a/freetype/src/autofit/aftypes.h
+++ b/freetype/src/autofit/aftypes.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter types (specification only). */
/* */
-/* Copyright 2003-2009, 2011-2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -138,11 +138,10 @@ extern void* _af_debug_hints;
AF_Angle _delta = (angle2) - (angle1); \
\
\
- _delta %= AF_ANGLE_2PI; \
- if ( _delta < 0 ) \
+ while ( _delta <= -AF_ANGLE_PI ) \
_delta += AF_ANGLE_2PI; \
\
- if ( _delta > AF_ANGLE_PI ) \
+ while ( _delta > AF_ANGLE_PI ) \
_delta -= AF_ANGLE_2PI; \
\
result = _delta; \
@@ -168,13 +167,10 @@ extern void* _af_debug_hints;
* auto-hinted glyph image.
*/
- typedef enum AF_ScalerFlags_
- {
- AF_SCALER_FLAG_NO_HORIZONTAL = 1, /* disable horizontal hinting */
- AF_SCALER_FLAG_NO_VERTICAL = 2, /* disable vertical hinting */
- AF_SCALER_FLAG_NO_ADVANCE = 4 /* disable advance hinting */
-
- } AF_ScalerFlags;
+#define AF_SCALER_FLAG_NO_HORIZONTAL 1U /* disable horizontal hinting */
+#define AF_SCALER_FLAG_NO_VERTICAL 2U /* disable vertical hinting */
+#define AF_SCALER_FLAG_NO_ADVANCE 4U /* disable advance hinting */
+#define AF_SCALER_FLAG_NO_WARPER 8U /* disable warper */
typedef struct AF_ScalerRec_
diff --git a/freetype/src/autofit/afwarp.c b/freetype/src/autofit/afwarp.c
index 34a97ffc5..59af4f02b 100644
--- a/freetype/src/autofit/afwarp.c
+++ b/freetype/src/autofit/afwarp.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter warping algorithm (body). */
/* */
-/* Copyright 2006, 2007, 2011 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -76,10 +76,10 @@
FT_Pos xx2,
AF_WarpScore base_distort,
AF_Segment segments,
- FT_UInt num_segments )
+ FT_Int num_segments )
{
FT_Int idx_min, idx_max, idx0;
- FT_UInt nn;
+ FT_Int nn;
AF_WarpScore scores[65];
@@ -171,7 +171,7 @@
FT_Fixed org_scale;
FT_Pos org_delta;
- FT_UInt nn, num_points, num_segments;
+ FT_Int nn, num_points, num_segments;
FT_Int X1, X2;
FT_Int w;
diff --git a/freetype/src/autofit/afwarp.h b/freetype/src/autofit/afwarp.h
index 7343fdd5e..5a6208a15 100644
--- a/freetype/src/autofit/afwarp.h
+++ b/freetype/src/autofit/afwarp.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter warping algorithm (specification). */
/* */
-/* Copyright 2006, 2007 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,7 +25,7 @@ FT_BEGIN_HEADER
#define AF_WARPER_SCALE
-#define AF_WARPER_FLOOR( x ) ( (x) & ~63 )
+#define AF_WARPER_FLOOR( x ) ( (x) & ~TYPEOF( x )63 )
#define AF_WARPER_CEIL( x ) AF_WARPER_FLOOR( (x) + 63 )
diff --git a/freetype/src/autofit/afwrtsys.h b/freetype/src/autofit/afwrtsys.h
index 8aa2ed9e6..4aa89d235 100644
--- a/freetype/src/autofit/afwrtsys.h
+++ b/freetype/src/autofit/afwrtsys.h
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter writing systems (specification only). */
/* */
-/* Copyright 2013 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/autofit.c b/freetype/src/autofit/autofit.c
index e2b9934e4..b6ed4a0ff 100644
--- a/freetype/src/autofit/autofit.c
+++ b/freetype/src/autofit/autofit.c
@@ -4,7 +4,7 @@
/* */
/* Auto-fitter module (body). */
/* */
-/* Copyright 2003-2007, 2011, 2013 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/hbshim.c b/freetype/src/autofit/hbshim.c
index a705cef00..c9c1db0be 100644
--- a/freetype/src/autofit/hbshim.c
+++ b/freetype/src/autofit/hbshim.c
@@ -4,7 +4,7 @@
/* */
/* HarfBuzz interface for accessing OpenType features (body). */
/* */
-/* Copyright 2013, 2014 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -187,7 +187,7 @@
count = 0;
#endif
- for ( idx = -1; hb_set_next( gsub_lookups, &idx ); )
+ for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups, &idx ); )
{
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE4(( " %d", idx ));
@@ -218,7 +218,7 @@
count = 0;
#endif
- for ( idx = -1; hb_set_next( gpos_lookups, &idx ); )
+ for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gpos_lookups, &idx ); )
{
#ifdef FT_DEBUG_LEVEL_TRACE
FT_TRACE4(( " %d", idx ));
@@ -267,7 +267,8 @@
GET_UTF8_CHAR( ch, p );
- for ( idx = -1; hb_set_next( gsub_lookups, &idx ); )
+ for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_lookups,
+ &idx ); )
{
hb_codepoint_t gidx = FT_Get_Char_Index( globals->face, ch );
@@ -344,7 +345,7 @@
count = 0;
#endif
- for ( idx = -1; hb_set_next( gsub_glyphs, &idx ); )
+ for ( idx = HB_SET_VALUE_INVALID; hb_set_next( gsub_glyphs, &idx ); )
{
#ifdef FT_DEBUG_LEVEL_TRACE
if ( !( count % 10 ) )
@@ -441,7 +442,7 @@
if ( feature )
{
- FT_UInt upem = metrics->globals->face->units_per_EM;
+ FT_Int upem = (FT_Int)metrics->globals->face->units_per_EM;
hb_font_t* font = metrics->globals->hb_font;
hb_buffer_t* buf = hb_buffer_create();
diff --git a/freetype/src/autofit/hbshim.h b/freetype/src/autofit/hbshim.h
index 02f1513f6..5636ca649 100644
--- a/freetype/src/autofit/hbshim.h
+++ b/freetype/src/autofit/hbshim.h
@@ -4,7 +4,7 @@
/* */
/* HarfBuzz interface for accessing OpenType features (specification). */
/* */
-/* Copyright 2013 by */
+/* Copyright 2013-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/autofit/module.mk b/freetype/src/autofit/module.mk
index 6ec60912a..33214387f 100644
--- a/freetype/src/autofit/module.mk
+++ b/freetype/src/autofit/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003, 2004, 2005, 2006 by
+# Copyright 2003-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/autofit/rules.mk b/freetype/src/autofit/rules.mk
index 658f04ea5..6ef959f1b 100644
--- a/freetype/src/autofit/rules.mk
+++ b/freetype/src/autofit/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2003-2007, 2011, 2013 by
+# Copyright 2003-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ AUTOF_DIR := $(SRC_DIR)/autofit
# compilation flags for the driver
#
-AUTOF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR))
+AUTOF_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# AUTOF driver sources (i.e., C files)
diff --git a/freetype/src/base/Jamfile b/freetype/src/base/Jamfile
index 832e8b842..ce8114d74 100644
--- a/freetype/src/base/Jamfile
+++ b/freetype/src/base/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/base Jamfile
#
-# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/base/basepic.c b/freetype/src/base/basepic.c
index 5d317ddb3..c290bcbdb 100644
--- a/freetype/src/base/basepic.c
+++ b/freetype/src/base/basepic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for base. */
/* */
-/* Copyright 2009, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/basepic.h b/freetype/src/base/basepic.h
index ec7507cec..4845a54ec 100644
--- a/freetype/src/base/basepic.h
+++ b/freetype/src/base/basepic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for base. */
/* */
-/* Copyright 2009 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftadvanc.c b/freetype/src/base/ftadvanc.c
index 797057b65..cf976f75a 100644
--- a/freetype/src/base/ftadvanc.c
+++ b/freetype/src/base/ftadvanc.c
@@ -4,7 +4,7 @@
/* */
/* Quick computation of advance widths (body). */
/* */
-/* Copyright 2008, 2009, 2011, 2013, 2014 by */
+/* Copyright 2008-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftapi.c b/freetype/src/base/ftapi.c
index d7d0657e5..dfd3b9378 100644
--- a/freetype/src/base/ftapi.c
+++ b/freetype/src/base/ftapi.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType compatibility functions (body). */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftbase.c b/freetype/src/base/ftbase.c
index 5e5d70ec4..253dfb723 100644
--- a/freetype/src/base/ftbase.c
+++ b/freetype/src/base/ftbase.c
@@ -4,7 +4,7 @@
/* */
/* Single object library component (body only). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftbase.h b/freetype/src/base/ftbase.h
index 0ab0590d9..4b1a9b845 100644
--- a/freetype/src/base/ftbase.h
+++ b/freetype/src/base/ftbase.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType private functions used in base module (specification). */
/* */
-/* Copyright 2008, 2010 by */
+/* Copyright 2008-2015 by */
/* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftbbox.c b/freetype/src/base/ftbbox.c
index c703e50cd..0b3ca4e83 100644
--- a/freetype/src/base/ftbbox.c
+++ b/freetype/src/base/ftbbox.c
@@ -4,7 +4,7 @@
/* */
/* FreeType bbox computation (body). */
/* */
-/* Copyright 1996-2002, 2004, 2006, 2010, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -255,6 +255,7 @@
FT_Pos peak = 0;
FT_Int shift;
+
/* This function finds a peak of a cubic segment if it is above 0 */
/* using iterative bisection of the segment, or returns 0. */
/* The fixed-point arithmetic of bisection is inherently stable */
@@ -264,8 +265,10 @@
/* It is called with either q2 or q3 positive, which is necessary */
/* for the peak to exist and avoids undefined FT_MSB. */
- shift = 27 -
- FT_MSB( FT_ABS( q1 ) | FT_ABS( q2 ) | FT_ABS( q3 ) | FT_ABS( q4 ) );
+ shift = 27 - FT_MSB( (FT_UInt32)( FT_ABS( q1 ) |
+ FT_ABS( q2 ) |
+ FT_ABS( q3 ) |
+ FT_ABS( q4 ) ) );
if ( shift > 0 )
{
diff --git a/freetype/src/base/ftbdf.c b/freetype/src/base/ftbdf.c
index 6babbd143..7932ab63f 100755
--- a/freetype/src/base/ftbdf.c
+++ b/freetype/src/base/ftbdf.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing BDF-specific strings (body). */
/* */
-/* Copyright 2002-2004, 2013, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftbitmap.c b/freetype/src/base/ftbitmap.c
index 2f26b2f28..23169d516 100644
--- a/freetype/src/base/ftbitmap.c
+++ b/freetype/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility functions for bitmaps (body). */
/* */
-/* Copyright 2004-2009, 2011, 2013, 2014 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -31,6 +31,16 @@
/* documentation is in ftbitmap.h */
FT_EXPORT_DEF( void )
+ FT_Bitmap_Init( FT_Bitmap *abitmap )
+ {
+ if ( abitmap )
+ *abitmap = null_bitmap;
+ }
+
+
+ /* deprecated function name; retained for ABI compatibility */
+
+ FT_EXPORT_DEF( void )
FT_Bitmap_New( FT_Bitmap *abitmap )
{
if ( abitmap )
@@ -117,7 +127,7 @@
FT_Byte* t = target->buffer;
- t += pitch * ( target->rows - 1 );
+ t += (FT_ULong)pitch * ( target->rows - 1 );
for ( i = target->rows; i > 0; i-- )
{
@@ -160,21 +170,21 @@
{
case FT_PIXEL_MODE_MONO:
bpp = 1;
- new_pitch = ( width + xpixels + 7 ) >> 3;
+ new_pitch = (int)( ( width + xpixels + 7 ) >> 3 );
break;
case FT_PIXEL_MODE_GRAY2:
bpp = 2;
- new_pitch = ( width + xpixels + 3 ) >> 2;
+ new_pitch = (int)( ( width + xpixels + 3 ) >> 2 );
break;
case FT_PIXEL_MODE_GRAY4:
bpp = 4;
- new_pitch = ( width + xpixels + 1 ) >> 1;
+ new_pitch = (int)( ( width + xpixels + 1 ) >> 1 );
break;
case FT_PIXEL_MODE_GRAY:
case FT_PIXEL_MODE_LCD:
case FT_PIXEL_MODE_LCD_V:
bpp = 8;
- new_pitch = ( width + xpixels );
+ new_pitch = (int)( width + xpixels );
break;
default:
return FT_THROW( Invalid_Glyph_Format );
@@ -184,7 +194,7 @@
if ( ypixels == 0 && new_pitch <= pitch )
{
/* zero the padding */
- FT_UInt bit_width = pitch * 8;
+ FT_UInt bit_width = (FT_UInt)pitch * 8;
FT_UInt bit_last = ( width + xpixels ) * bpp;
@@ -227,8 +237,9 @@
for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + new_pitch * ( ypixels + i ),
- bitmap->buffer + pitch * i, len );
+ FT_MEM_COPY( buffer + (FT_UInt)new_pitch * ( ypixels + i ),
+ bitmap->buffer + (FT_UInt)pitch * i,
+ len );
}
else
{
@@ -236,8 +247,9 @@
for ( i = 0; i < bitmap->rows; i++ )
- FT_MEM_COPY( buffer + new_pitch * i,
- bitmap->buffer + pitch * i, len );
+ FT_MEM_COPY( buffer + (FT_UInt)new_pitch * i,
+ bitmap->buffer + (FT_UInt)pitch * i,
+ len );
}
FT_FREE( bitmap->buffer );
@@ -295,7 +307,7 @@
/* convert to 8bpp */
- FT_Bitmap_New( &tmp );
+ FT_Bitmap_Init( &tmp );
error = FT_Bitmap_Convert( library, bitmap, &tmp, 1 );
if ( error )
return error;
@@ -323,7 +335,8 @@
return FT_Err_Ok;
}
- error = ft_bitmap_assure_buffer( library->memory, bitmap, xstr, ystr );
+ error = ft_bitmap_assure_buffer( library->memory, bitmap,
+ (FT_UInt)xstr, (FT_UInt)ystr );
if ( error )
return error;
@@ -334,7 +347,7 @@
else
{
pitch = -pitch;
- p = bitmap->buffer + pitch * ( bitmap->rows - 1 );
+ p = bitmap->buffer + (FT_UInt)pitch * ( bitmap->rows - 1 );
}
/* for each row */
@@ -407,8 +420,8 @@
p += bitmap->pitch;
}
- bitmap->width += xstr;
- bitmap->rows += ystr;
+ bitmap->width += (FT_UInt)xstr;
+ bitmap->rows += (FT_UInt)ystr;
return FT_Err_Ok;
}
@@ -501,7 +514,7 @@
if ( old_target_pitch < 0 )
old_target_pitch = -old_target_pitch;
- old_size = target->rows * old_target_pitch;
+ old_size = target->rows * (FT_UInt)old_target_pitch;
target->pixel_mode = FT_PIXEL_MODE_GRAY;
target->rows = source->rows;
@@ -510,20 +523,20 @@
pad = 0;
if ( alignment > 0 )
{
- pad = source->width % alignment;
+ pad = (FT_Int)source->width % alignment;
if ( pad != 0 )
pad = alignment - pad;
}
- target_pitch = source->width + pad;
+ target_pitch = (FT_Int)source->width + pad;
- if ( target_pitch > 0 &&
- (FT_ULong)target->rows > FT_ULONG_MAX / target_pitch )
+ if ( target_pitch > 0 &&
+ (FT_ULong)target->rows > FT_ULONG_MAX / (FT_ULong)target_pitch )
return FT_THROW( Invalid_Argument );
- if ( target->rows * target_pitch > old_size &&
+ if ( target->rows * (FT_ULong)target_pitch > old_size &&
FT_QREALLOC( target->buffer,
- old_size, target->rows * target_pitch ) )
+ old_size, target->rows * (FT_UInt)target_pitch ) )
return error;
target->pitch = target->pitch < 0 ? -target_pitch : target_pitch;
@@ -539,9 +552,9 @@
/* take care of bitmap flow */
if ( source->pitch < 0 )
- s -= source->pitch * ( source->rows - 1 );
+ s -= source->pitch * (FT_Int)( source->rows - 1 );
if ( target->pitch < 0 )
- t -= target->pitch * ( target->rows - 1 );
+ t -= target->pitch * (FT_Int)( target->rows - 1 );
switch ( source->pixel_mode )
{
@@ -604,7 +617,7 @@
case FT_PIXEL_MODE_LCD:
case FT_PIXEL_MODE_LCD_V:
{
- FT_Int width = source->width;
+ FT_UInt width = source->width;
FT_UInt i;
@@ -756,7 +769,7 @@
FT_Error error;
- FT_Bitmap_New( &bitmap );
+ FT_Bitmap_Init( &bitmap );
error = FT_Bitmap_Copy( slot->library, &slot->bitmap, &bitmap );
if ( error )
return error;
diff --git a/freetype/src/base/ftcalc.c b/freetype/src/base/ftcalc.c
index 7b6425056..c3ebe6cbf 100644
--- a/freetype/src/base/ftcalc.c
+++ b/freetype/src/base/ftcalc.c
@@ -4,7 +4,7 @@
/* */
/* Arithmetic computations (body). */
/* */
-/* Copyright 1996-2006, 2008, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -173,69 +173,89 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Long )
- FT_MulDiv( FT_Long a,
- FT_Long b,
- FT_Long c )
+ FT_MulDiv( FT_Long a_,
+ FT_Long b_,
+ FT_Long c_ )
{
- FT_Int s = 1;
- FT_Long d;
+ FT_Int s = 1;
+ FT_UInt64 a, b, c, d;
+ FT_Long d_;
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
- FT_MOVE_SIGN( c, s );
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
+ FT_MOVE_SIGN( c_, s );
- d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
- : 0x7FFFFFFFL );
+ a = (FT_UInt64)a_;
+ b = (FT_UInt64)b_;
+ c = (FT_UInt64)c_;
- return s < 0 ? -d : d;
+ d = c > 0 ? ( a * b + ( c >> 1 ) ) / c
+ : 0x7FFFFFFFUL;
+
+ d_ = (FT_Long)d;
+
+ return s < 0 ? -d_ : d_;
}
/* documentation is in ftcalc.h */
FT_BASE_DEF( FT_Long )
- FT_MulDiv_No_Round( FT_Long a,
- FT_Long b,
- FT_Long c )
+ FT_MulDiv_No_Round( FT_Long a_,
+ FT_Long b_,
+ FT_Long c_ )
{
- FT_Int s = 1;
- FT_Long d;
+ FT_Int s = 1;
+ FT_UInt64 a, b, c, d;
+ FT_Long d_;
+
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
+ FT_MOVE_SIGN( c_, s );
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
- FT_MOVE_SIGN( c, s );
+ a = (FT_UInt64)a_;
+ b = (FT_UInt64)b_;
+ c = (FT_UInt64)c_;
- d = (FT_Long)( c > 0 ? (FT_Int64)a * b / c
- : 0x7FFFFFFFL );
+ d = c > 0 ? a * b / c
+ : 0x7FFFFFFFUL;
- return s < 0 ? -d : d;
+ d_ = (FT_Long)d;
+
+ return s < 0 ? -d_ : d_;
}
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Long )
- FT_MulFix( FT_Long a,
- FT_Long b )
+ FT_MulFix( FT_Long a_,
+ FT_Long b_ )
{
#ifdef FT_MULFIX_ASSEMBLER
- return FT_MULFIX_ASSEMBLER( a, b );
+ return FT_MULFIX_ASSEMBLER( a_, b_ );
#else
- FT_Int s = 1;
- FT_Long c;
+ FT_Int s = 1;
+ FT_UInt64 a, b, c;
+ FT_Long c_;
+
+
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
+ a = (FT_UInt64)a_;
+ b = (FT_UInt64)b_;
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
+ c = ( a * b + 0x8000UL ) >> 16;
- c = (FT_Long)( ( (FT_Int64)a * b + 0x8000L ) >> 16 );
+ c_ = (FT_Long)c;
- return s < 0 ? -c : c;
+ return s < 0 ? -c_ : c_;
#endif /* FT_MULFIX_ASSEMBLER */
}
@@ -244,20 +264,26 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Long )
- FT_DivFix( FT_Long a,
- FT_Long b )
+ FT_DivFix( FT_Long a_,
+ FT_Long b_ )
{
- FT_Int s = 1;
- FT_Long q;
+ FT_Int s = 1;
+ FT_UInt64 a, b, q;
+ FT_Long q_;
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
- q = (FT_Long)( b > 0 ? ( ( (FT_UInt64)a << 16 ) + ( b >> 1 ) ) / b
- : 0x7FFFFFFFL );
+ a = (FT_UInt64)a_;
+ b = (FT_UInt64)b_;
- return s < 0 ? -q : q;
+ q = b > 0 ? ( ( a << 16 ) + ( b >> 1 ) ) / b
+ : 0x7FFFFFFFUL;
+
+ q_ = (FT_Long)q;
+
+ return s < 0 ? -q_ : q_;
}
@@ -401,26 +427,32 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Long )
- FT_MulDiv( FT_Long a,
- FT_Long b,
- FT_Long c )
+ FT_MulDiv( FT_Long a_,
+ FT_Long b_,
+ FT_Long c_ )
{
- FT_Int s = 1;
+ FT_Int s = 1;
+ FT_UInt32 a, b, c;
/* XXX: this function does not allow 64-bit arguments */
- if ( a == 0 || b == c )
- return a;
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
- FT_MOVE_SIGN( c, s );
+ if ( a_ == 0 || b_ == c_ )
+ return a_;
+
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
+ FT_MOVE_SIGN( c_, s );
+
+ a = (FT_UInt32)a_;
+ b = (FT_UInt32)b_;
+ c = (FT_UInt32)c_;
if ( c == 0 )
- a = 0x7FFFFFFFL;
+ a = 0x7FFFFFFFUL;
- else if ( (FT_ULong)a + b <= 129894UL - ( c >> 17 ) )
- a = ( (FT_ULong)a * b + ( c >> 1 ) ) / c;
+ else if ( a + b <= 129894UL - ( c >> 17 ) )
+ a = ( a * b + ( c >> 1 ) ) / c;
else
{
@@ -439,30 +471,39 @@
: ft_div64by32( temp.hi, temp.lo, c );
}
- return s < 0 ? -a : a;
+ a_ = (FT_Long)a;
+
+ return s < 0 ? -a_ : a_;
}
FT_BASE_DEF( FT_Long )
- FT_MulDiv_No_Round( FT_Long a,
- FT_Long b,
- FT_Long c )
+ FT_MulDiv_No_Round( FT_Long a_,
+ FT_Long b_,
+ FT_Long c_ )
{
- FT_Int s = 1;
+ FT_Int s = 1;
+ FT_UInt32 a, b, c;
- if ( a == 0 || b == c )
- return a;
+ /* XXX: this function does not allow 64-bit arguments */
+
+ if ( a_ == 0 || b_ == c_ )
+ return a_;
+
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
+ FT_MOVE_SIGN( c_, s );
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
- FT_MOVE_SIGN( c, s );
+ a = (FT_UInt32)a_;
+ b = (FT_UInt32)b_;
+ c = (FT_UInt32)c_;
if ( c == 0 )
- a = 0x7FFFFFFFL;
+ a = 0x7FFFFFFFUL;
- else if ( (FT_ULong)a + b <= 131071UL )
- a = (FT_ULong)a * b / c;
+ else if ( a + b <= 131071UL )
+ a = a * b / c;
else
{
@@ -476,19 +517,21 @@
: ft_div64by32( temp.hi, temp.lo, c );
}
- return s < 0 ? -a : a;
+ a_ = (FT_Long)a;
+
+ return s < 0 ? -a_ : a_;
}
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Long )
- FT_MulFix( FT_Long a,
- FT_Long b )
+ FT_MulFix( FT_Long a_,
+ FT_Long b_ )
{
#ifdef FT_MULFIX_ASSEMBLER
- return FT_MULFIX_ASSEMBLER( a, b );
+ return FT_MULFIX_ASSEMBLER( a_, b_ );
#elif 0
@@ -499,12 +542,12 @@
* the leftmost bits by copying the sign bit, it might be faster.
*/
- FT_Long sa, sb;
- FT_ULong ua, ub;
+ FT_Long sa, sb;
+ FT_UInt32 a, b;
- if ( a == 0 || b == 0x10000L )
- return a;
+ if ( a_ == 0 || b_ == 0x10000L )
+ return a_;
/*
* This is a clever way of converting a signed number `a' into its
@@ -524,57 +567,61 @@
* with the value 1 rather than -1. After that, everything else goes
* wrong.
*/
- sa = ( a >> ( sizeof ( a ) * 8 - 1 ) );
- a = ( a ^ sa ) - sa;
- sb = ( b >> ( sizeof ( b ) * 8 - 1 ) );
- b = ( b ^ sb ) - sb;
+ sa = ( a_ >> ( sizeof ( a_ ) * 8 - 1 ) );
+ a = ( a_ ^ sa ) - sa;
+ sb = ( b_ >> ( sizeof ( b_ ) * 8 - 1 ) );
+ b = ( b_ ^ sb ) - sb;
- ua = (FT_ULong)a;
- ub = (FT_ULong)b;
+ a = (FT_UInt32)a_;
+ b = (FT_UInt32)b_;
- if ( ua + ( ub >> 8 ) <= 8190UL )
- ua = ( ua * ub + 0x8000U ) >> 16;
+ if ( a + ( b >> 8 ) <= 8190UL )
+ a = ( a * b + 0x8000U ) >> 16;
else
{
- FT_ULong al = ua & 0xFFFFU;
+ FT_UInt32 al = a & 0xFFFFUL;
- ua = ( ua >> 16 ) * ub + al * ( ub >> 16 ) +
- ( ( al * ( ub & 0xFFFFU ) + 0x8000U ) >> 16 );
+ a = ( a >> 16 ) * b + al * ( b >> 16 ) +
+ ( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 );
}
- sa ^= sb,
- ua = (FT_ULong)(( ua ^ sa ) - sa);
+ sa ^= sb;
+ a = ( a ^ sa ) - sa;
- return (FT_Long)ua;
+ return (FT_Long)a;
#else /* 0 */
- FT_Int s = 1;
- FT_ULong ua, ub;
+ FT_Int s = 1;
+ FT_UInt32 a, b;
+
+ /* XXX: this function does not allow 64-bit arguments */
- if ( a == 0 || b == 0x10000L )
- return a;
+ if ( a_ == 0 || b_ == 0x10000L )
+ return a_;
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
- ua = (FT_ULong)a;
- ub = (FT_ULong)b;
+ a = (FT_UInt32)a_;
+ b = (FT_UInt32)b_;
- if ( ua + ( ub >> 8 ) <= 8190UL )
- ua = ( ua * ub + 0x8000UL ) >> 16;
+ if ( a + ( b >> 8 ) <= 8190UL )
+ a = ( a * b + 0x8000UL ) >> 16;
else
{
- FT_ULong al = ua & 0xFFFFUL;
+ FT_UInt32 al = a & 0xFFFFUL;
- ua = ( ua >> 16 ) * ub + al * ( ub >> 16 ) +
- ( ( al * ( ub & 0xFFFFUL ) + 0x8000UL ) >> 16 );
+ a = ( a >> 16 ) * b + al * ( b >> 16 ) +
+ ( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 );
}
- return s < 0 ? -(FT_Long)ua : (FT_Long)ua;
+ a_ = (FT_Long)a;
+
+ return s < 0 ? -a_ : a_;
#endif /* 0 */
@@ -584,27 +631,31 @@
/* documentation is in freetype.h */
FT_EXPORT_DEF( FT_Long )
- FT_DivFix( FT_Long a,
- FT_Long b )
+ FT_DivFix( FT_Long a_,
+ FT_Long b_ )
{
- FT_Int s = 1;
- FT_Long q;
+ FT_Int s = 1;
+ FT_UInt32 a, b, q;
+ FT_Long q_;
/* XXX: this function does not allow 64-bit arguments */
- FT_MOVE_SIGN( a, s );
- FT_MOVE_SIGN( b, s );
+ FT_MOVE_SIGN( a_, s );
+ FT_MOVE_SIGN( b_, s );
+
+ a = (FT_UInt32)a_;
+ b = (FT_UInt32)b_;
if ( b == 0 )
{
/* check for division by 0 */
- q = 0x7FFFFFFFL;
+ q = 0x7FFFFFFFUL;
}
- else if ( a <= 65535L - ( b >> 17 ) )
+ else if ( a <= 65535UL - ( b >> 17 ) )
{
/* compute result directly */
- q = (FT_Long)( ( ( (FT_ULong)a << 16 ) + ( b >> 1 ) ) / b );
+ q = ( ( a << 16 ) + ( b >> 1 ) ) / b;
}
else
{
@@ -618,14 +669,16 @@
temp2.lo = b >> 1;
FT_Add64( &temp, &temp2, &temp );
- q = (FT_Long)ft_div64by32( temp.hi, temp.lo, b );
+ q = ft_div64by32( temp.hi, temp.lo, b );
}
- return s < 0 ? -q : q;
+ q_ = (FT_Long)q;
+
+ return s < 0 ? -q_ : q_;
}
-#endif /* FT_LONG64 */
+#endif /* !FT_LONG64 */
/* documentation is in ftglyph.h */
@@ -748,7 +801,7 @@
if ( x > 0 )
{
rem_hi = 0;
- rem_lo = x;
+ rem_lo = (FT_UInt32)x;
count = 24;
do
{
@@ -829,8 +882,8 @@
/* XXX: this function does not allow 64-bit arguments */
- ft_multo64( (FT_Int32)in_x, (FT_Int32)out_y, &z1 );
- ft_multo64( (FT_Int32)in_y, (FT_Int32)out_x, &z2 );
+ ft_multo64( (FT_UInt32)in_x, (FT_UInt32)out_y, &z1 );
+ ft_multo64( (FT_UInt32)in_y, (FT_UInt32)out_x, &z2 );
if ( z1.hi > z2.hi )
result = +1;
diff --git a/freetype/src/base/ftcid.c b/freetype/src/base/ftcid.c
index 95fbe7453..8001b9180 100644
--- a/freetype/src/base/ftcid.c
+++ b/freetype/src/base/ftcid.c
@@ -4,7 +4,8 @@
/* */
/* FreeType API for accessing CID font information. */
/* */
-/* Copyright 2007, 2009, 2013 by Derek Clegg, Michael Toftdal. */
+/* Copyright 2007-2015 by */
+/* Derek Clegg and Michael Toftdal. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/src/base/ftdbgmem.c b/freetype/src/base/ftdbgmem.c
index eaf090d33..9eee65f26 100644
--- a/freetype/src/base/ftdbgmem.c
+++ b/freetype/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
/* */
/* Memory debugger (body). */
/* */
-/* Copyright 2001-2006, 2009, 2013 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -35,7 +35,7 @@
#include FT_CONFIG_STANDARD_LIBRARY_H
- FT_BASE_DEF( const char* ) _ft_debug_file = 0;
+ FT_BASE_DEF( const char* ) _ft_debug_file = NULL;
FT_BASE_DEF( long ) _ft_debug_lineno = 0;
extern void
@@ -47,7 +47,7 @@
typedef struct FT_MemTableRec_* FT_MemTable;
-#define FT_MEM_VAL( addr ) ((FT_PtrDist)(FT_Pointer)( addr ))
+#define FT_MEM_VAL( addr ) ( (FT_PtrDist)(FT_Pointer)( addr ) )
/*
* This structure holds statistics for a single allocation/release
@@ -76,7 +76,7 @@
/*
- * We don't need a resizable array for the memory sources, because
+ * We don't need a resizable array for the memory sources because
* their number is pretty limited within FreeType.
*/
#define FT_MEM_SOURCE_BUCKETS 128
@@ -85,8 +85,8 @@
* This structure holds information related to a single allocated
* memory block. If KEEPALIVE is defined, blocks that are freed by
* FreeType are never released to the system. Instead, their `size'
- * field is set to -size. This is mainly useful to detect double frees,
- * at the price of large memory footprint during execution.
+ * field is set to `-size'. This is mainly useful to detect double
+ * frees, at the price of a large memory footprint during execution.
*/
typedef struct FT_MemNodeRec_
{
@@ -111,20 +111,20 @@
*/
typedef struct FT_MemTableRec_
{
- FT_ULong size;
- FT_ULong nodes;
+ FT_Long size;
+ FT_Long nodes;
FT_MemNode* buckets;
- FT_ULong alloc_total;
- FT_ULong alloc_current;
- FT_ULong alloc_max;
- FT_ULong alloc_count;
+ FT_Long alloc_total;
+ FT_Long alloc_current;
+ FT_Long alloc_max;
+ FT_Long alloc_count;
FT_Bool bound_total;
- FT_ULong alloc_total_max;
+ FT_Long alloc_total_max;
FT_Bool bound_count;
- FT_ULong alloc_count_max;
+ FT_Long alloc_count_max;
FT_MemSource sources[FT_MEM_SOURCE_BUCKETS];
@@ -142,14 +142,14 @@
#define FT_MEM_SIZE_MIN 7
#define FT_MEM_SIZE_MAX 13845163
-#define FT_FILENAME( x ) ((x) ? (x) : "unknown file")
+#define FT_FILENAME( x ) ( (x) ? (x) : "unknown file" )
/*
* Prime numbers are ugly to handle. It would be better to implement
* L-Hashing, which is 10% faster and doesn't require divisions.
*/
- static const FT_UInt ft_mem_primes[] =
+ static const FT_Int ft_mem_primes[] =
{
7,
11,
@@ -189,10 +189,10 @@
};
- static FT_ULong
- ft_mem_closest_prime( FT_ULong num )
+ static FT_Long
+ ft_mem_closest_prime( FT_Long num )
{
- FT_UInt i;
+ size_t i;
for ( i = 0;
@@ -204,7 +204,7 @@
}
- extern void
+ static void
ft_mem_debug_panic( const char* fmt,
... )
{
@@ -254,19 +254,20 @@
static void
ft_mem_table_resize( FT_MemTable table )
{
- FT_ULong new_size;
+ FT_Long new_size;
new_size = ft_mem_closest_prime( table->nodes );
if ( new_size != table->size )
{
FT_MemNode* new_buckets;
- FT_ULong i;
+ FT_Long i;
new_buckets = (FT_MemNode *)
- ft_mem_table_alloc( table,
- new_size * sizeof ( FT_MemNode ) );
+ ft_mem_table_alloc(
+ table,
+ new_size * (FT_Long)sizeof ( FT_MemNode ) );
if ( new_buckets == NULL )
return;
@@ -282,7 +283,7 @@
while ( node )
{
next = node->link;
- hash = FT_MEM_VAL( node->address ) % new_size;
+ hash = FT_MEM_VAL( node->address ) % (FT_PtrDist)new_size;
pnode = new_buckets + hash;
node->link = pnode[0];
@@ -325,8 +326,9 @@
table->free = memory->free;
table->buckets = (FT_MemNode *)
- memory->alloc( memory,
- table->size * sizeof ( FT_MemNode ) );
+ memory->alloc(
+ memory,
+ table->size * (FT_Long)sizeof ( FT_MemNode ) );
if ( table->buckets )
FT_ARRAY_ZERO( table->buckets, table->size );
else
@@ -343,9 +345,9 @@
static void
ft_mem_table_destroy( FT_MemTable table )
{
- FT_ULong i;
- FT_Long leak_count = 0;
- FT_ULong leaks = 0;
+ FT_Long i;
+ FT_Long leak_count = 0;
+ FT_Long leaks = 0;
FT_DumpMemory( table->memory );
@@ -359,7 +361,7 @@
while ( node )
{
next = node->link;
- node->link = 0;
+ node->link = NULL;
if ( node->size > 0 )
{
@@ -381,7 +383,7 @@
ft_mem_table_free( table, node );
node = next;
}
- table->buckets[i] = 0;
+ table->buckets[i] = NULL;
}
ft_mem_table_free( table, table->buckets );
@@ -430,7 +432,7 @@
hash = FT_MEM_VAL( address );
- pnode = table->buckets + ( hash % table->size );
+ pnode = table->buckets + ( hash % (FT_PtrDist)table->size );
for (;;)
{
@@ -466,8 +468,8 @@
if ( node == NULL )
break;
- if ( node->file_name == _ft_debug_file &&
- node->line_no == _ft_debug_lineno )
+ if ( node->file_name == _ft_debug_file &&
+ node->line_no == _ft_debug_lineno )
goto Exit;
pnode = &node->link;
@@ -485,11 +487,11 @@
node->max_blocks = 0;
node->all_blocks = 0;
- node->cur_size = 0;
- node->max_size = 0;
- node->all_size = 0;
+ node->cur_size = 0;
+ node->max_size = 0;
+ node->all_size = 0;
- node->cur_max = 0;
+ node->cur_max = 0;
node->link = NULL;
node->hash = hash;
@@ -503,7 +505,7 @@
static void
ft_mem_table_set( FT_MemTable table,
FT_Byte* address,
- FT_ULong size,
+ FT_Long size,
FT_Long delta )
{
FT_MemNode *pnode, node;
@@ -558,7 +560,7 @@
source->max_blocks = source->cur_blocks;
}
- if ( size > (FT_ULong)source->cur_max )
+ if ( size > source->cur_max )
source->cur_max = size;
if ( delta != 0 )
@@ -671,7 +673,7 @@
}
- extern FT_Pointer
+ static FT_Pointer
ft_mem_debug_alloc( FT_Memory memory,
FT_Long size )
{
@@ -688,14 +690,14 @@
return NULL;
/* return NULL if this allocation would overflow the maximum heap size */
- if ( table->bound_total &&
- table->alloc_total_max - table->alloc_current > (FT_ULong)size )
+ if ( table->bound_total &&
+ table->alloc_total_max - table->alloc_current > size )
return NULL;
block = (FT_Byte *)ft_mem_table_alloc( table, size );
if ( block )
{
- ft_mem_table_set( table, block, (FT_ULong)size, 0 );
+ ft_mem_table_set( table, block, size, 0 );
table->alloc_count++;
}
@@ -707,7 +709,7 @@
}
- extern void
+ static void
ft_mem_debug_free( FT_Memory memory,
FT_Pointer block )
{
@@ -731,7 +733,7 @@
}
- extern FT_Pointer
+ static FT_Pointer
ft_mem_debug_realloc( FT_Memory memory,
FT_Long cur_size,
FT_Long new_size,
@@ -787,21 +789,22 @@
table->alloc_count >= table->alloc_count_max )
return NULL;
- delta = (FT_Long)( new_size - cur_size );
+ delta = new_size - cur_size;
/* return NULL if this allocation would overflow the maximum heap size */
- if ( delta > 0 &&
- table->bound_total &&
- table->alloc_current + (FT_ULong)delta > table->alloc_total_max )
+ if ( delta > 0 &&
+ table->bound_total &&
+ table->alloc_current + delta > table->alloc_total_max )
return NULL;
- new_block = (FT_Byte *)ft_mem_table_alloc( table, new_size );
+ new_block = (FT_Pointer)ft_mem_table_alloc( table, new_size );
if ( new_block == NULL )
return NULL;
ft_mem_table_set( table, (FT_Byte*)new_block, new_size, delta );
- ft_memcpy( new_block, block, cur_size < new_size ? cur_size : new_size );
+ ft_memcpy( new_block, block, cur_size < new_size ? (size_t)cur_size
+ : (size_t)new_size );
ft_mem_table_remove( table, (FT_Byte*)block, delta );
@@ -844,7 +847,7 @@
if ( total_max > 0 )
{
table->bound_total = 1;
- table->alloc_total_max = (FT_ULong)total_max;
+ table->alloc_total_max = total_max;
}
}
@@ -857,7 +860,7 @@
if ( total_count > 0 )
{
table->bound_count = 1;
- table->alloc_count_max = (FT_ULong)total_count;
+ table->alloc_count_max = total_count;
}
}
@@ -896,7 +899,6 @@
}
-
static int
ft_mem_source_compare( const void* p1,
const void* p2 )
@@ -925,7 +927,7 @@
FT_MemSource* bucket = table->sources;
FT_MemSource* limit = bucket + FT_MEM_SOURCE_BUCKETS;
FT_MemSource* sources;
- FT_UInt nn, count;
+ FT_Int nn, count;
const char* fmt;
@@ -939,8 +941,9 @@
count++;
}
- sources = (FT_MemSource*)ft_mem_table_alloc(
- table, sizeof ( *sources ) * count );
+ sources = (FT_MemSource*)
+ ft_mem_table_alloc(
+ table, count * (FT_Long)sizeof ( *sources ) );
count = 0;
for ( bucket = table->sources; bucket < limit; bucket++ )
@@ -952,7 +955,10 @@
sources[count++] = source;
}
- ft_qsort( sources, count, sizeof ( *sources ), ft_mem_source_compare );
+ ft_qsort( sources,
+ (size_t)count,
+ sizeof ( *sources ),
+ ft_mem_source_compare );
printf( "FreeType Memory Dump: "
"current=%ld max=%ld total=%ld count=%ld\n",
diff --git a/freetype/src/base/ftdebug.c b/freetype/src/base/ftdebug.c
index 2e4e0e538..7a5a33d74 100644
--- a/freetype/src/base/ftdebug.c
+++ b/freetype/src/base/ftdebug.c
@@ -4,7 +4,7 @@
/* */
/* Debugging and logging component (body). */
/* */
-/* Copyright 1996-2001, 2002, 2004, 2008, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftxf86.c b/freetype/src/base/ftfntfmt.c
index db6407b32..297de8df5 100644..100755
--- a/freetype/src/base/ftxf86.c
+++ b/freetype/src/base/ftfntfmt.c
@@ -1,10 +1,10 @@
/***************************************************************************/
/* */
-/* ftxf86.c */
+/* ftfntfmt.c */
/* */
-/* FreeType utility file for X11 support (body). */
+/* FreeType utility file for font formats (body). */
/* */
-/* Copyright 2002, 2003, 2004 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -17,12 +17,27 @@
#include <ft2build.h>
-#include FT_XFREE86_H
+#include FT_FONT_FORMATS_H
#include <internal/ftobjs.h>
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
- /* documentation is in ftxf86.h */
+ /* documentation is in ftfntfmt.h */
+
+ FT_EXPORT_DEF( const char* )
+ FT_Get_Font_Format( FT_Face face )
+ {
+ const char* result = NULL;
+
+
+ if ( face )
+ FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT );
+
+ return result;
+ }
+
+
+ /* deprecated function name; retained for ABI compatibility */
FT_EXPORT_DEF( const char* )
FT_Get_X11_Font_Format( FT_Face face )
@@ -31,7 +46,7 @@
if ( face )
- FT_FACE_FIND_SERVICE( face, result, XF86_NAME );
+ FT_FACE_FIND_SERVICE( face, result, FONT_FORMAT );
return result;
}
diff --git a/freetype/src/base/ftfstype.c b/freetype/src/base/ftfstype.c
index 6b49ef837..cd3458f73 100644
--- a/freetype/src/base/ftfstype.c
+++ b/freetype/src/base/ftfstype.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file to access FSType data (body). */
/* */
-/* Copyright 2008, 2009, 2014 by */
+/* Copyright 2008-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftgasp.c b/freetype/src/base/ftgasp.c
index 68f0c5c0a..fb8c2dbeb 100644
--- a/freetype/src/base/ftgasp.c
+++ b/freetype/src/base/ftgasp.c
@@ -4,7 +4,7 @@
/* */
/* Access of TrueType's `gasp' table (body). */
/* */
-/* Copyright 2007 by */
+/* Copyright 2007-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftgloadr.c b/freetype/src/base/ftgloadr.c
index 61ab21b9c..e51f08e0c 100644
--- a/freetype/src/base/ftgloadr.c
+++ b/freetype/src/base/ftgloadr.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph loader (body). */
/* */
-/* Copyright 2002-2006, 2010, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -212,7 +212,8 @@
/* check points & tags */
- new_max = base->n_points + current->n_points + n_points;
+ new_max = (FT_UInt)base->n_points + (FT_UInt)current->n_points +
+ n_points;
old_max = loader->max_points;
if ( new_max > old_max )
@@ -245,7 +246,7 @@
/* check contours */
old_max = loader->max_contours;
- new_max = base->n_contours + current->n_contours +
+ new_max = (FT_UInt)base->n_contours + (FT_UInt)current->n_contours +
n_contours;
if ( new_max > old_max )
{
@@ -329,9 +330,9 @@
FT_GlyphLoad base;
FT_GlyphLoad current;
- FT_UInt n_curr_contours;
- FT_UInt n_base_points;
- FT_UInt n;
+ FT_Int n_curr_contours;
+ FT_Int n_base_points;
+ FT_Int n;
if ( !loader )
@@ -365,8 +366,8 @@
FT_GlyphLoader source )
{
FT_Error error;
- FT_UInt num_points = source->base.outline.n_points;
- FT_UInt num_contours = source->base.outline.n_contours;
+ FT_UInt num_points = (FT_UInt)source->base.outline.n_points;
+ FT_UInt num_contours = (FT_UInt)source->base.outline.n_contours;
error = FT_GlyphLoader_CheckPoints( target, num_points, num_contours );
diff --git a/freetype/src/base/ftglyph.c b/freetype/src/base/ftglyph.c
index 194857ad9..2ab34e00e 100644
--- a/freetype/src/base/ftglyph.c
+++ b/freetype/src/base/ftglyph.c
@@ -4,7 +4,7 @@
/* */
/* FreeType convenience functions to handle glyphs (body). */
/* */
-/* Copyright 1996-2005, 2007, 2008, 2010, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -82,7 +82,7 @@
}
else
{
- FT_Bitmap_New( &glyph->bitmap );
+ FT_Bitmap_Init( &glyph->bitmap );
error = FT_Bitmap_Copy( library, &slot->bitmap, &glyph->bitmap );
}
@@ -126,9 +126,9 @@
cbox->xMin = glyph->left << 6;
- cbox->xMax = cbox->xMin + ( glyph->bitmap.width << 6 );
+ cbox->xMax = cbox->xMin + (FT_Pos)( glyph->bitmap.width << 6 );
cbox->yMax = glyph->top << 6;
- cbox->yMin = cbox->yMax - ( glyph->bitmap.rows << 6 );
+ cbox->yMin = cbox->yMax - (FT_Pos)( glyph->bitmap.rows << 6 );
}
@@ -173,7 +173,9 @@
}
/* allocate new outline */
- error = FT_Outline_New( library, source->n_points, source->n_contours,
+ error = FT_Outline_New( library,
+ (FT_UInt)source->n_points,
+ source->n_contours,
&glyph->outline );
if ( error )
goto Exit;
@@ -205,8 +207,10 @@
FT_Library library = FT_GLYPH( source )->library;
- error = FT_Outline_New( library, source->outline.n_points,
- source->outline.n_contours, &target->outline );
+ error = FT_Outline_New( library,
+ (FT_UInt)source->outline.n_points,
+ source->outline.n_contours,
+ &target->outline );
if ( !error )
FT_Outline_Copy( &source->outline, &target->outline );
@@ -287,7 +291,7 @@
FT_Glyph glyph = NULL;
- *aglyph = 0;
+ *aglyph = NULL;
if ( !FT_ALLOC( glyph, clazz->glyph_size ) )
{
diff --git a/freetype/src/base/ftgxval.c b/freetype/src/base/ftgxval.c
index d3b44029e..fe52d080f 100644
--- a/freetype/src/base/ftgxval.c
+++ b/freetype/src/base/ftgxval.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating TrueTyepGX/AAT tables (body). */
/* */
-/* Copyright 2004-2006, 2010, 2013, 2014 by */
+/* Copyright 2004-2015 by */
/* Masatake YAMATO, Redhat K.K, */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/freetype/src/base/ftinit.c b/freetype/src/base/ftinit.c
index b23f2394d..06bff8b81 100644
--- a/freetype/src/base/ftinit.c
+++ b/freetype/src/base/ftinit.c
@@ -4,7 +4,7 @@
/* */
/* FreeType initialization layer (body). */
/* */
-/* Copyright 1996-2002, 2005, 2007, 2009, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -138,7 +138,7 @@
#include FT_CONFIG_MODULES_H
FT_FREE( classes );
- pic_container->default_module_classes = 0;
+ pic_container->default_module_classes = NULL;
}
@@ -164,7 +164,7 @@
memory = library->memory;
- pic_container->default_module_classes = 0;
+ pic_container->default_module_classes = NULL;
if ( FT_ALLOC( classes, sizeof ( FT_Module_Class* ) *
( FT_NUM_MODULE_CLASSES + 1 ) ) )
@@ -172,8 +172,8 @@
/* initialize all pointers to 0, especially the last one */
for ( i = 0; i < FT_NUM_MODULE_CLASSES; i++ )
- classes[i] = 0;
- classes[FT_NUM_MODULE_CLASSES] = 0;
+ classes[i] = NULL;
+ classes[FT_NUM_MODULE_CLASSES] = NULL;
i = 0;
diff --git a/freetype/src/base/ftlcdfil.c b/freetype/src/base/ftlcdfil.c
index c1ec75239..800757e46 100644
--- a/freetype/src/base/ftlcdfil.c
+++ b/freetype/src/base/ftlcdfil.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for color filtering of subpixel bitmap glyphs (body). */
/* */
-/* Copyright 2006, 2008-2010, 2013, 2014 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -48,7 +48,7 @@
/* take care of bitmap flow */
if ( bitmap->pitch < 0 )
- line -= bitmap->pitch * ( bitmap->rows - 1 );
+ line -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
/* `fir' and `pix' must be at least 32 bit wide, since the sum of */
/* the values in `weights' can exceed 0xFF */
@@ -112,7 +112,7 @@
/* take care of bitmap flow */
if ( bitmap->pitch < 0 )
- column -= bitmap->pitch * ( bitmap->rows - 1 );
+ column -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
for ( ; width > 0; width--, column++ )
{
@@ -182,7 +182,7 @@
FT_UInt height = (FT_UInt)bitmap->rows;
FT_Int pitch = bitmap->pitch;
- static const int filters[3][3] =
+ static const unsigned int filters[3][3] =
{
{ 65538 * 9/13, 65538 * 1/6, 65538 * 1/13 },
{ 65538 * 3/13, 65538 * 4/6, 65538 * 3/13 },
@@ -200,7 +200,7 @@
/* take care of bitmap flow */
if ( bitmap->pitch < 0 )
- line -= bitmap->pitch * ( bitmap->rows - 1 );
+ line -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
for ( ; height > 0; height--, line += pitch )
{
@@ -243,12 +243,12 @@
/* take care of bitmap flow */
if ( bitmap->pitch < 0 )
- column -= bitmap->pitch * ( bitmap->rows - 1 );
+ column -= bitmap->pitch * (FT_Int)( bitmap->rows - 1 );
for ( ; width > 0; width--, column++ )
{
FT_Byte* col = column;
- FT_Byte* col_end = col + height * pitch;
+ FT_Byte* col_end = col + (FT_Int)height * pitch;
for ( ; col < col_end; col += 3 * pitch )
diff --git a/freetype/src/base/ftmac.c b/freetype/src/base/ftmac.c
index 459f004b5..3e465c5c3 100644
--- a/freetype/src/base/ftmac.c
+++ b/freetype/src/base/ftmac.c
@@ -8,7 +8,7 @@
/* This file is for Mac OS X only; see builds/mac/ftoldmac.c for */
/* classic platforms built by MPW. */
/* */
-/* Copyright 1996-2009, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftmm.c b/freetype/src/base/ftmm.c
index af7bd691d..f7e636d14 100644
--- a/freetype/src/base/ftmm.c
+++ b/freetype/src/base/ftmm.c
@@ -4,7 +4,7 @@
/* */
/* Multiple Master font support (body). */
/* */
-/* Copyright 1996-2001, 2003, 2004, 2009, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftobjs.c b/freetype/src/base/ftobjs.c
index 7ffb0c9e5..a527d0706 100644
--- a/freetype/src/base/ftobjs.c
+++ b/freetype/src/base/ftobjs.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType private base classes (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -158,7 +158,7 @@
FT_Stream stream = NULL;
- *astream = 0;
+ *astream = NULL;
if ( !library )
return FT_THROW( Invalid_Library_Handle );
@@ -178,7 +178,7 @@
/* create a memory-based stream */
FT_Stream_OpenMemory( stream,
(const FT_Byte*)args->memory_base,
- args->memory_size );
+ (FT_ULong)args->memory_size );
}
#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
@@ -353,10 +353,10 @@
slot->bitmap_left = 0;
slot->bitmap_top = 0;
slot->num_subglyphs = 0;
- slot->subglyphs = 0;
- slot->control_data = 0;
+ slot->subglyphs = NULL;
+ slot->control_data = NULL;
slot->control_len = 0;
- slot->other = 0;
+ slot->other = NULL;
slot->format = FT_GLYPH_FORMAT_NONE;
slot->linearHoriAdvance = 0;
@@ -387,7 +387,7 @@
if ( FT_DRIVER_USES_OUTLINES( driver ) )
{
FT_GlyphLoader_Done( slot->internal->loader );
- slot->internal->loader = 0;
+ slot->internal->loader = NULL;
}
FT_FREE( slot->internal );
@@ -438,7 +438,7 @@
*aslot = slot;
}
else if ( aslot )
- *aslot = 0;
+ *aslot = NULL;
Exit:
@@ -932,7 +932,7 @@
(FT_List_Destructor)destroy_size,
memory,
driver );
- face->size = 0;
+ face->size = NULL;
/* now discard client data */
if ( face->generic.finalizer )
@@ -950,7 +950,7 @@
face->stream,
( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
- face->stream = 0;
+ face->stream = NULL;
/* get rid of it */
if ( face->internal )
@@ -968,10 +968,6 @@
(FT_List_Destructor)destroy_face,
driver->root.memory,
driver );
-
- /* check whether we need to drop the driver's glyph loader */
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- FT_GlyphLoader_Done( driver->glyph_loader );
}
@@ -1157,7 +1153,7 @@
int i;
- face->internal->incremental_interface = 0;
+ face->internal->incremental_interface = NULL;
for ( i = 0; i < num_params && !face->internal->incremental_interface;
i++ )
if ( params[i].tag == FT_PARAM_TAG_INCREMENTAL )
@@ -1199,7 +1195,7 @@
clazz->done_face( face );
FT_FREE( internal );
FT_FREE( face );
- *aface = 0;
+ *aface = NULL;
}
return error;
@@ -1302,8 +1298,8 @@
FT_FREE( stream->base );
stream->size = 0;
- stream->base = 0;
- stream->close = 0;
+ stream->base = NULL;
+ stream->close = NULL;
}
@@ -1327,7 +1323,7 @@
if ( !base )
return FT_THROW( Invalid_Argument );
- *astream = 0;
+ *astream = NULL;
memory = library->memory;
if ( FT_NEW( stream ) )
goto Exit;
@@ -1491,7 +1487,7 @@
FT_Error error;
FT_Memory memory = library->memory;
FT_ULong offset, length;
- FT_Long pos;
+ FT_ULong pos;
FT_Bool is_sfnt_cid;
FT_Byte* sfnt_ps = NULL;
@@ -1499,7 +1495,7 @@
FT_UNUSED( params );
- pos = FT_Stream_Pos( stream );
+ pos = FT_STREAM_POS();
error = ft_lookup_PS_in_sfnt_stream( stream,
face_index,
@@ -1577,7 +1573,7 @@
pfb_len = 0;
for ( i = 0; i < resource_cnt; ++i )
{
- error = FT_Stream_Seek( stream, offsets[i] );
+ error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
if ( error )
goto Exit;
if ( FT_READ_ULONG( temp ) )
@@ -1624,7 +1620,7 @@
type = 1;
for ( i = 0; i < resource_cnt; ++i )
{
- error = FT_Stream_Seek( stream, offsets[i] );
+ error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
if ( error )
goto Exit2;
if ( FT_READ_ULONG( rlen ) )
@@ -1754,7 +1750,7 @@
FT_Memory memory = library->memory;
FT_Byte* sfnt_data = NULL;
FT_Error error;
- FT_Long flag_offset;
+ FT_ULong flag_offset;
FT_Long rlen;
int is_cff;
FT_Long face_index_in_resource = 0;
@@ -1765,7 +1761,7 @@
if ( face_index >= resource_cnt )
return FT_THROW( Cannot_Open_Resource );
- flag_offset = offsets[face_index];
+ flag_offset = (FT_ULong)offsets[face_index];
error = FT_Stream_Seek( stream, flag_offset );
if ( error )
goto Exit;
@@ -1787,16 +1783,16 @@
if ( FT_Stream_Seek( stream, flag_offset + 4 ) )
goto Exit;
- if ( FT_ALLOC( sfnt_data, (FT_Long)rlen ) )
+ if ( FT_ALLOC( sfnt_data, rlen ) )
return error;
- error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, rlen );
+ error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, (FT_ULong)rlen );
if ( error )
goto Exit;
is_cff = rlen > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
error = open_face_from_buffer( library,
sfnt_data,
- rlen,
+ (FT_ULong)rlen,
face_index_in_resource,
is_cff ? "cff" : "truetype",
aface );
@@ -1934,7 +1930,7 @@
FT_Memory memory = library->memory;
FT_Error error = FT_ERR( Unknown_File_Format );
- int i;
+ FT_UInt i;
char * file_names[FT_RACCESS_N_RULES];
FT_Long offsets[FT_RACCESS_N_RULES];
@@ -1942,7 +1938,7 @@
FT_Bool is_darwin_vfs, vfs_rfork_has_no_font = FALSE; /* not tested */
FT_Open_Args args2;
- FT_Stream stream2 = 0;
+ FT_Stream stream2 = NULL;
FT_Raccess_Guess( library, stream,
@@ -2103,7 +2099,7 @@
if ( FT_MODULE_IS_DRIVER( driver ) )
{
FT_Int num_params = 0;
- FT_Parameter* params = 0;
+ FT_Parameter* params = NULL;
if ( args->flags & FT_OPEN_PARAMS )
@@ -2137,7 +2133,7 @@
if ( FT_MODULE_IS_DRIVER( cur[0] ) )
{
FT_Int num_params = 0;
- FT_Parameter* params = 0;
+ FT_Parameter* params = NULL;
driver = FT_DRIVER( cur[0] );
@@ -2448,8 +2444,8 @@
FT_Driver driver;
FT_Driver_Class clazz;
- FT_Size size = 0;
- FT_ListNode node = 0;
+ FT_Size size = NULL;
+ FT_ListNode node = NULL;
if ( !face )
@@ -2461,7 +2457,7 @@
if ( !face->driver )
return FT_THROW( Invalid_Driver_Handle );
- *asize = 0;
+ *asize = NULL;
driver = face->driver;
clazz = driver->clazz;
@@ -2474,7 +2470,7 @@
size->face = face;
/* for now, do not use any internal fields in size objects */
- size->internal = 0;
+ size->internal = NULL;
if ( clazz->init_size )
error = clazz->init_size( size );
@@ -2532,7 +2528,7 @@
if ( face->size == size )
{
- face->size = 0;
+ face->size = NULL;
if ( face->sizes_list.head )
face->size = (FT_Size)(face->sizes_list.head->data);
}
@@ -3018,14 +3014,14 @@
pixel_height = 1;
/* use `>=' to avoid potential compiler warning on 16bit platforms */
- if ( pixel_width >= 0xFFFFU )
- pixel_width = 0xFFFFU;
+ if ( pixel_width >= 0xFFFFU )
+ pixel_width = 0xFFFFU;
if ( pixel_height >= 0xFFFFU )
pixel_height = 0xFFFFU;
req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
- req.width = pixel_width << 6;
- req.height = pixel_height << 6;
+ req.width = (FT_Long)( pixel_width << 6 );
+ req.height = (FT_Long)( pixel_height << 6 );
req.horiResolution = 0;
req.vertResolution = 0;
@@ -3852,7 +3848,7 @@
FT_ListNode* node )
{
FT_ListNode cur;
- FT_Renderer result = 0;
+ FT_Renderer result = NULL;
if ( !library )
@@ -3864,7 +3860,7 @@
{
if ( *node )
cur = (*node)->next;
- *node = 0;
+ *node = NULL;
}
while ( cur )
@@ -4084,8 +4080,7 @@
default:
{
- FT_ListNode node = 0;
- FT_Bool update = 0;
+ FT_ListNode node = NULL;
/* small shortcut for the very common case */
@@ -4112,16 +4107,6 @@
/* now, look for another renderer that supports the same */
/* format. */
renderer = FT_Lookup_Renderer( library, slot->format, &node );
- update = 1;
- }
-
- /* if we changed the current renderer for the glyph image format */
- /* we need to select it as the next current one */
- if ( !error && update && renderer )
- {
- error = FT_Set_Renderer( library, renderer, 0, 0 );
- if ( error )
- break;
}
}
}
@@ -4138,7 +4123,7 @@
FT_Error err;
- FT_Bitmap_New( &bitmap );
+ FT_Bitmap_Init( &bitmap );
/* this also converts the bitmap flow to `down' (i.e., pitch > 0) */
err = FT_Bitmap_Convert( library, &slot->bitmap, &bitmap, 1 );
@@ -4147,15 +4132,17 @@
MD5_CTX ctx;
unsigned char md5[16];
int i;
+ unsigned int rows = bitmap.rows;
+ unsigned int pitch = (unsigned int)bitmap.pitch;
- MD5_Init( &ctx);
- MD5_Update( &ctx, bitmap.buffer, bitmap.rows * bitmap.pitch );
+ MD5_Init( &ctx );
+ MD5_Update( &ctx, bitmap.buffer, rows * pitch );
MD5_Final( md5, &ctx );
FT_TRACE3(( "MD5 checksum for %dx%d bitmap:\n"
" ",
- bitmap.rows, bitmap.pitch ));
+ rows, pitch ));
for ( i = 0; i < 16; i++ )
FT_TRACE3(( "%02X", md5[i] ));
FT_TRACE3(( "\n" ));
@@ -4228,7 +4215,7 @@
if ( library && library->auto_hinter == module )
- library->auto_hinter = 0;
+ library->auto_hinter = NULL;
/* if the module is a renderer */
if ( FT_MODULE_IS_RENDERER( module ) )
@@ -4324,17 +4311,10 @@
/* if the module is a font driver */
if ( FT_MODULE_IS_DRIVER( module ) )
{
- /* allocate glyph loader if needed */
FT_Driver driver = FT_DRIVER( module );
driver->clazz = (FT_Driver_Class)module->clazz;
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- {
- error = FT_GlyphLoader_New( memory, &driver->glyph_loader );
- if ( error )
- goto Fail;
- }
}
if ( clazz->module_init )
@@ -4351,15 +4331,6 @@
return error;
Fail:
- if ( FT_MODULE_IS_DRIVER( module ) )
- {
- FT_Driver driver = FT_DRIVER( module );
-
-
- if ( FT_DRIVER_USES_OUTLINES( driver ) )
- FT_GlyphLoader_Done( driver->glyph_loader );
- }
-
if ( FT_MODULE_IS_RENDERER( module ) )
{
FT_Renderer renderer = FT_RENDERER( module );
@@ -4494,7 +4465,7 @@
cur[0] = cur[1];
cur++;
}
- limit[0] = 0;
+ limit[0] = NULL;
/* destroy the module */
Destroy_Module( module );
@@ -4677,12 +4648,9 @@
goto Fail;
#endif
- /* allocate the render pool */
- library->raster_pool_size = FT_RENDER_POOL_SIZE;
-#if FT_RENDER_POOL_SIZE > 0
- if ( FT_ALLOC( library->raster_pool, FT_RENDER_POOL_SIZE ) )
- goto Fail;
-#endif
+ /* we don't use raster_pool anymore. */
+ library->raster_pool_size = 0;
+ library->raster_pool = NULL;
library->version_major = FREETYPE_MAJOR;
library->version_minor = FREETYPE_MINOR;
@@ -4695,8 +4663,8 @@
return FT_Err_Ok;
- Fail:
#ifdef FT_CONFIG_OPTION_PIC
+ Fail:
ft_pic_container_destroy( library );
#endif
FT_FREE( library );
@@ -4825,16 +4793,12 @@
if ( module )
{
Destroy_Module( module );
- library->modules[n] = 0;
+ library->modules[n] = NULL;
}
}
}
#endif
- /* Destroy raster objects */
- FT_FREE( library->raster_pool );
- library->raster_pool_size = 0;
-
#ifdef FT_CONFIG_OPTION_PIC
/* Destroy pic container contents */
ft_pic_container_destroy( library );
diff --git a/freetype/src/base/ftotval.c b/freetype/src/base/ftotval.c
index 01fb4ea76..d32326ca0 100644
--- a/freetype/src/base/ftotval.c
+++ b/freetype/src/base/ftotval.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for validating OpenType tables (body). */
/* */
-/* Copyright 2004, 2006, 2008, 2010, 2013 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftoutln.c b/freetype/src/base/ftoutln.c
index b214f5446..004367367 100644
--- a/freetype/src/base/ftoutln.c
+++ b/freetype/src/base/ftoutln.c
@@ -4,7 +4,7 @@
/* */
/* FreeType outline management (body). */
/* */
-/* Copyright 1996-2008, 2010, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -279,7 +279,7 @@
if ( error )
goto Exit;
- first = last + 1;
+ first = (FT_UInt)last + 1;
}
FT_TRACE5(( "FT_Outline_Decompose: Done\n", n ));
@@ -320,7 +320,7 @@
FT_NEW_ARRAY( anoutline->contours, numContours ) )
goto Fail;
- anoutline->n_points = (FT_UShort)numPoints;
+ anoutline->n_points = (FT_Short)numPoints;
anoutline->n_contours = (FT_Short)numContours;
anoutline->flags |= FT_OUTLINE_OWNER;
@@ -612,7 +612,6 @@
FT_Raster_Params* params )
{
FT_Error error;
- FT_Bool update = FALSE;
FT_Renderer renderer;
FT_ListNode node;
@@ -646,14 +645,8 @@
/* format */
renderer = FT_Lookup_Renderer( library, FT_GLYPH_FORMAT_OUTLINE,
&node );
- update = TRUE;
}
- /* if we changed the current renderer for the glyph image format */
- /* we need to select it as the next current one */
- if ( !error && update && renderer )
- error = FT_Set_Renderer( library, renderer, 0, 0 );
-
return error;
}
@@ -1002,13 +995,13 @@
l = FT_MIN( l_in, l_out );
/* non-strict inequalities avoid divide-by-zero when q == l == 0 */
- if ( FT_MulFix( xstrength, q ) <= FT_MulFix( d, l ) )
+ if ( FT_MulFix( xstrength, q ) <= FT_MulFix( l, d ) )
shift.x = FT_MulDiv( shift.x, xstrength, d );
else
shift.x = FT_MulDiv( shift.x, l, q );
- if ( FT_MulFix( ystrength, q ) <= FT_MulFix( d, l ) )
+ if ( FT_MulFix( ystrength, q ) <= FT_MulFix( l, d ) )
shift.y = FT_MulDiv( shift.y, ystrength, d );
else
shift.y = FT_MulDiv( shift.y, l, q );
@@ -1050,7 +1043,7 @@
/* We use the nonzero winding rule to find the orientation. */
/* Since glyph outlines behave much more `regular' than arbitrary */
/* cubic or quadratic curves, this test deals with the polygon */
- /* only which is spanned up by the control points. */
+ /* only that is spanned up by the control points. */
FT_Outline_Get_CBox( outline, &cbox );
@@ -1058,10 +1051,11 @@
if ( cbox.xMin == cbox.xMax || cbox.yMin == cbox.yMax )
return FT_ORIENTATION_NONE;
- xshift = FT_MSB( FT_ABS( cbox.xMax ) | FT_ABS( cbox.xMin ) ) - 14;
+ xshift = FT_MSB( (FT_UInt32)( FT_ABS( cbox.xMax ) |
+ FT_ABS( cbox.xMin ) ) ) - 14;
xshift = FT_MAX( xshift, 0 );
- yshift = FT_MSB( cbox.yMax - cbox.yMin ) - 14;
+ yshift = FT_MSB( (FT_UInt32)( cbox.yMax - cbox.yMin ) ) - 14;
yshift = FT_MAX( yshift, 0 );
points = outline->points;
diff --git a/freetype/src/base/ftpatent.c b/freetype/src/base/ftpatent.c
index feae6660d..25f7de769 100644
--- a/freetype/src/base/ftpatent.c
+++ b/freetype/src/base/ftpatent.c
@@ -5,7 +5,8 @@
/* FreeType API for checking patented TrueType bytecode instructions */
/* (body). */
/* */
-/* Copyright 2007, 2008, 2010 by David Turner. */
+/* Copyright 2007-2015 by */
+/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/src/base/ftpfr.c b/freetype/src/base/ftpfr.c
index be5a4c0f5..0f92fe0e7 100644
--- a/freetype/src/base/ftpfr.c
+++ b/freetype/src/base/ftpfr.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing PFR-specific data (body). */
/* */
-/* Copyright 2002-2004, 2008, 2010, 2013, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftpic.c b/freetype/src/base/ftpic.c
index 0d008d55f..df94e05f1 100644
--- a/freetype/src/base/ftpic.c
+++ b/freetype/src/base/ftpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services (body). */
/* */
-/* Copyright 2009, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftrfork.c b/freetype/src/base/ftrfork.c
index 110b00f64..3b2f01e42 100644
--- a/freetype/src/base/ftrfork.c
+++ b/freetype/src/base/ftrfork.c
@@ -4,7 +4,7 @@
/* */
/* Embedded resource forks accessor (body). */
/* */
-/* Copyright 2004-2010, 2013, 2014 by */
+/* Copyright 2004-2015 by */
/* Masatake YAMATO and Redhat K.K. */
/* */
/* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */
@@ -63,7 +63,7 @@
FT_UNUSED( library );
- error = FT_Stream_Seek( stream, rfork_offset );
+ error = FT_Stream_Seek( stream, (FT_ULong)rfork_offset );
if ( error )
return error;
@@ -89,7 +89,7 @@
if ( *rdata_pos + rdata_len != map_pos || map_pos == rfork_offset )
return FT_THROW( Unknown_File_Format );
- error = FT_Stream_Seek( stream, map_pos );
+ error = FT_Stream_Seek( stream, (FT_ULong)map_pos );
if ( error )
return error;
@@ -124,7 +124,7 @@
if ( type_list == -1 )
return FT_THROW( Unknown_File_Format );
- error = FT_Stream_Seek( stream, map_pos + type_list );
+ error = FT_Stream_Seek( stream, (FT_ULong)( map_pos + type_list ) );
if ( error )
return error;
@@ -166,7 +166,7 @@
FT_TRACE3(( "\n" ));
- error = FT_Stream_Seek( stream, map_offset );
+ error = FT_Stream_Seek( stream, (FT_ULong)map_offset );
if ( error )
return error;
@@ -194,7 +194,7 @@
*count = subcnt + 1;
rpos += map_offset;
- error = FT_Stream_Seek( stream, rpos );
+ error = FT_Stream_Seek( stream, (FT_ULong)rpos );
if ( error )
return error;
@@ -220,7 +220,7 @@
if (sort_by_res_id)
{
- ft_qsort( ref, *count, sizeof ( FT_RFork_Ref ),
+ ft_qsort( ref, (size_t)*count, sizeof ( FT_RFork_Ref ),
( int(*)(const void*, const void*) )
ft_raccess_sort_ref_by_id );
@@ -713,9 +713,9 @@
FT_UShort n_of_entries;
int i;
- FT_UInt32 entry_id, entry_offset, entry_length = 0;
+ FT_Int32 entry_id, entry_offset, entry_length = 0;
- const FT_UInt32 resource_fork_entry_id = 0x2;
+ const FT_Int32 resource_fork_entry_id = 0x2;
FT_UNUSED( library );
FT_UNUSED( base_file_name );
@@ -813,7 +813,9 @@
tmp = ft_strrchr( original_name, '/' );
if ( tmp )
{
- ft_strncpy( new_name, original_name, tmp - original_name + 1 );
+ ft_strncpy( new_name,
+ original_name,
+ (size_t)( tmp - original_name + 1 ) );
new_name[tmp - original_name + 1] = '\0';
slash = tmp + 1;
}
diff --git a/freetype/src/base/ftsnames.c b/freetype/src/base/ftsnames.c
index 06551ea8c..e4377d806 100644
--- a/freetype/src/base/ftsnames.c
+++ b/freetype/src/base/ftsnames.c
@@ -7,7 +7,7 @@
/* */
/* This is _not_ used to retrieve glyph names! */
/* */
-/* Copyright 1996-2001, 2002, 2009 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftstream.c b/freetype/src/base/ftstream.c
index 1d5bd39c8..e10dd9c18 100644
--- a/freetype/src/base/ftstream.c
+++ b/freetype/src/base/ftstream.c
@@ -4,7 +4,7 @@
/* */
/* I/O stream support (body). */
/* */
-/* Copyright 2000-2002, 2004-2006, 2008-2011, 2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -39,9 +39,9 @@
stream->base = (FT_Byte*) base;
stream->size = size;
stream->pos = 0;
- stream->cursor = 0;
- stream->read = 0;
- stream->close = 0;
+ stream->cursor = NULL;
+ stream->read = NULL;
+ stream->close = NULL;
}
@@ -95,11 +95,11 @@
if ( distance < 0 )
return FT_THROW( Invalid_Stream_Operation );
- return FT_Stream_Seek( stream, (FT_ULong)( stream->pos + distance ) );
+ return FT_Stream_Seek( stream, stream->pos + (FT_ULong)distance );
}
- FT_BASE_DEF( FT_Long )
+ FT_BASE_DEF( FT_ULong )
FT_Stream_Pos( FT_Stream stream )
{
return stream->pos;
@@ -203,8 +203,8 @@
*pbytes = (FT_Byte*)stream->cursor;
/* equivalent to FT_Stream_ExitFrame(), with no memory block release */
- stream->cursor = 0;
- stream->limit = 0;
+ stream->cursor = NULL;
+ stream->limit = NULL;
}
return error;
@@ -226,7 +226,7 @@
FT_FREE( *pbytes );
#endif
}
- *pbytes = 0;
+ *pbytes = NULL;
}
@@ -260,7 +260,9 @@
#ifdef FT_DEBUG_MEMORY
/* assume _ft_debug_file and _ft_debug_lineno are already set */
- stream->base = (unsigned char*)ft_mem_qalloc( memory, count, &error );
+ stream->base = (unsigned char*)ft_mem_qalloc( memory,
+ (FT_Long)count,
+ &error );
if ( error )
goto Exit;
#else
@@ -333,8 +335,8 @@
FT_FREE( stream->base );
#endif
}
- stream->cursor = 0;
- stream->limit = 0;
+ stream->cursor = NULL;
+ stream->limit = NULL;
}
@@ -348,7 +350,7 @@
result = 0;
if ( stream->cursor < stream->limit )
- result = *stream->cursor++;
+ result = (FT_Char)*stream->cursor++;
return result;
}
@@ -357,8 +359,8 @@
FT_BASE_DEF( FT_UShort )
FT_Stream_GetUShort( FT_Stream stream )
{
- FT_Byte* p;
- FT_Short result;
+ FT_Byte* p;
+ FT_UShort result;
FT_ASSERT( stream && stream->cursor );
@@ -376,8 +378,8 @@
FT_BASE_DEF( FT_UShort )
FT_Stream_GetUShortLE( FT_Stream stream )
{
- FT_Byte* p;
- FT_Short result;
+ FT_Byte* p;
+ FT_UShort result;
FT_ASSERT( stream && stream->cursor );
@@ -396,7 +398,7 @@
FT_Stream_GetUOffset( FT_Stream stream )
{
FT_Byte* p;
- FT_Long result;
+ FT_ULong result;
FT_ASSERT( stream && stream->cursor );
@@ -414,7 +416,7 @@
FT_Stream_GetULong( FT_Stream stream )
{
FT_Byte* p;
- FT_Long result;
+ FT_ULong result;
FT_ASSERT( stream && stream->cursor );
@@ -432,7 +434,7 @@
FT_Stream_GetULongLE( FT_Stream stream )
{
FT_Byte* p;
- FT_Long result;
+ FT_ULong result;
FT_ASSERT( stream && stream->cursor );
@@ -471,7 +473,7 @@
}
stream->pos++;
- return result;
+ return (FT_Char)result;
Fail:
*error = FT_THROW( Invalid_Stream_Operation );
@@ -485,11 +487,11 @@
FT_BASE_DEF( FT_UShort )
FT_Stream_ReadUShort( FT_Stream stream,
- FT_Error* error )
+ FT_Error* error )
{
- FT_Byte reads[2];
- FT_Byte* p = 0;
- FT_Short result = 0;
+ FT_Byte reads[2];
+ FT_Byte* p = 0;
+ FT_UShort result = 0;
FT_ASSERT( stream );
@@ -506,9 +508,7 @@
p = reads;
}
else
- {
p = stream->base + stream->pos;
- }
if ( p )
result = FT_NEXT_USHORT( p );
@@ -532,11 +532,11 @@
FT_BASE_DEF( FT_UShort )
FT_Stream_ReadUShortLE( FT_Stream stream,
- FT_Error* error )
+ FT_Error* error )
{
- FT_Byte reads[2];
- FT_Byte* p = 0;
- FT_Short result = 0;
+ FT_Byte reads[2];
+ FT_Byte* p = 0;
+ FT_UShort result = 0;
FT_ASSERT( stream );
@@ -553,9 +553,7 @@
p = reads;
}
else
- {
p = stream->base + stream->pos;
- }
if ( p )
result = FT_NEXT_USHORT_LE( p );
@@ -579,11 +577,11 @@
FT_BASE_DEF( FT_ULong )
FT_Stream_ReadUOffset( FT_Stream stream,
- FT_Error* error )
+ FT_Error* error )
{
FT_Byte reads[3];
- FT_Byte* p = 0;
- FT_Long result = 0;
+ FT_Byte* p = 0;
+ FT_ULong result = 0;
FT_ASSERT( stream );
@@ -600,9 +598,7 @@
p = reads;
}
else
- {
p = stream->base + stream->pos;
- }
if ( p )
result = FT_NEXT_UOFF3( p );
@@ -626,11 +622,11 @@
FT_BASE_DEF( FT_ULong )
FT_Stream_ReadULong( FT_Stream stream,
- FT_Error* error )
+ FT_Error* error )
{
FT_Byte reads[4];
- FT_Byte* p = 0;
- FT_Long result = 0;
+ FT_Byte* p = 0;
+ FT_ULong result = 0;
FT_ASSERT( stream );
@@ -647,9 +643,7 @@
p = reads;
}
else
- {
p = stream->base + stream->pos;
- }
if ( p )
result = FT_NEXT_ULONG( p );
@@ -673,11 +667,11 @@
FT_BASE_DEF( FT_ULong )
FT_Stream_ReadULongLE( FT_Stream stream,
- FT_Error* error )
+ FT_Error* error )
{
FT_Byte reads[4];
- FT_Byte* p = 0;
- FT_Long result = 0;
+ FT_Byte* p = 0;
+ FT_ULong result = 0;
FT_ASSERT( stream );
@@ -694,9 +688,7 @@
p = reads;
}
else
- {
p = stream->base + stream->pos;
- }
if ( p )
result = FT_NEXT_ULONG_LE( p );
diff --git a/freetype/src/base/ftstroke.c b/freetype/src/base/ftstroke.c
index aa8da15b4..afa4b3f3a 100644
--- a/freetype/src/base/ftstroke.c
+++ b/freetype/src/base/ftstroke.c
@@ -4,7 +4,7 @@
/* */
/* FreeType path stroker (body). */
/* */
-/* Copyright 2002-2006, 2008-2011, 2013, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -347,7 +347,7 @@
ft_stroke_border_close( FT_StrokeBorder border,
FT_Bool reverse )
{
- FT_UInt start = border->start;
+ FT_UInt start = (FT_UInt)border->start;
FT_UInt count = border->num_points;
@@ -599,7 +599,7 @@
if ( border->start >= 0 )
ft_stroke_border_close( border, FALSE );
- border->start = border->num_points;
+ border->start = (FT_Int)border->num_points;
border->movable = FALSE;
return ft_stroke_border_lineto( border, to, FALSE );
@@ -742,7 +742,7 @@
}
}
- outline->n_points = (short)( outline->n_points + border->num_points );
+ outline->n_points += (short)border->num_points;
FT_ASSERT( FT_Outline_Check( outline ) == 0 );
}
@@ -999,7 +999,9 @@
/* Only intersect borders if between two lineto's and both */
/* lines are long enough (line_length is zero for curves). */
- if ( !border->movable || line_length == 0 )
+ /* Also avoid U-turns of nearly 180 degree. */
+ if ( !border->movable || line_length == 0 ||
+ theta > 0x59C000 || theta < -0x59C000 )
intersect = FALSE;
else
{
@@ -1220,11 +1222,8 @@
goto Exit;
/* when we turn to the right, the inside side is 0 */
- inside_side = 0;
-
/* otherwise, the inside side is 1 */
- if ( turn < 0 )
- inside_side = 1;
+ inside_side = ( turn < 0 );
/* process the inside side */
error = ft_stroker_inside( stroker, inside_side, line_length );
@@ -1232,7 +1231,7 @@
goto Exit;
/* process the outside side */
- error = ft_stroker_outside( stroker, 1 - inside_side, line_length );
+ error = ft_stroker_outside( stroker, !inside_side, line_length );
Exit:
return error;
@@ -1822,7 +1821,7 @@
FT_ASSERT( left->start >= 0 );
- new_points = left->num_points - left->start;
+ new_points = (FT_Int)left->num_points - left->start;
if ( new_points > 0 )
{
error = ft_stroke_border_grow( right, (FT_UInt)new_points );
@@ -1862,8 +1861,8 @@
}
}
- left->num_points = left->start;
- right->num_points += new_points;
+ left->num_points = (FT_UInt)left->start;
+ right->num_points += (FT_UInt)new_points;
right->movable = FALSE;
left->movable = FALSE;
@@ -1941,11 +1940,8 @@
if ( turn != 0 )
{
/* when we turn to the right, the inside side is 0 */
- inside_side = 0;
-
/* otherwise, the inside side is 1 */
- if ( turn < 0 )
- inside_side = 1;
+ inside_side = ( turn < 0 );
error = ft_stroker_inside( stroker,
inside_side,
@@ -1955,7 +1951,7 @@
/* process the outside side */
error = ft_stroker_outside( stroker,
- 1 - inside_side,
+ !inside_side,
stroker->subpath_line_length );
if ( error )
goto Exit;
@@ -2118,7 +2114,7 @@
FT_UInt last; /* index of last point in contour */
- last = outline->contours[n];
+ last = (FT_UInt)outline->contours[n];
limit = outline->points + last;
/* skip empty points; we don't stroke these */
@@ -2347,7 +2343,9 @@
FT_Outline_Done( glyph->library, outline );
error = FT_Outline_New( glyph->library,
- num_points, num_contours, outline );
+ num_points,
+ (FT_Int)num_contours,
+ outline );
if ( error )
goto Fail;
@@ -2437,7 +2435,7 @@
error = FT_Outline_New( glyph->library,
num_points,
- num_contours,
+ (FT_Int)num_contours,
outline );
if ( error )
goto Fail;
diff --git a/freetype/src/base/ftsynth.c b/freetype/src/base/ftsynth.c
index 2e6dce16e..02e919750 100644
--- a/freetype/src/base/ftsynth.c
+++ b/freetype/src/base/ftsynth.c
@@ -4,7 +4,7 @@
/* */
/* FreeType synthesizing code for emboldening and slanting (body). */
/* */
-/* Copyright 2000-2006, 2010, 2012-2014 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftsystem.c b/freetype/src/base/ftsystem.c
index 9af57c372..a233d0b81 100644
--- a/freetype/src/base/ftsystem.c
+++ b/freetype/src/base/ftsystem.c
@@ -4,7 +4,7 @@
/* */
/* ANSI-specific FreeType low-level system interface (body). */
/* */
-/* Copyright 1996-2002, 2006, 2008-2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -71,7 +71,7 @@
{
FT_UNUSED( memory );
- return ft_smalloc( size );
+ return ft_smalloc( (size_t)size );
}
@@ -104,7 +104,7 @@
FT_UNUSED( memory );
FT_UNUSED( cur_size );
- return ft_srealloc( block, new_size );
+ return ft_srealloc( block, (size_t)new_size );
}
@@ -171,7 +171,7 @@
stream->descriptor.pointer = NULL;
stream->size = 0;
- stream->base = 0;
+ stream->base = NULL;
}
@@ -212,7 +212,7 @@
file = STREAM_FILE( stream );
if ( stream->pos != offset )
- ft_fseek( file, offset, SEEK_SET );
+ ft_fseek( file, (long)offset, SEEK_SET );
return (unsigned long)ft_fread( buffer, 1, count, file );
}
@@ -232,7 +232,7 @@
stream->descriptor.pointer = NULL;
stream->pathname.pointer = (char*)filepathname;
- stream->base = 0;
+ stream->base = NULL;
stream->pos = 0;
stream->read = NULL;
stream->close = NULL;
@@ -247,7 +247,7 @@
}
ft_fseek( file, 0, SEEK_END );
- stream->size = ft_ftell( file );
+ stream->size = (unsigned long)ft_ftell( file );
if ( !stream->size )
{
FT_ERROR(( "FT_Stream_Open:" ));
@@ -292,7 +292,7 @@
memory = (FT_Memory)ft_smalloc( sizeof ( *memory ) );
if ( memory )
{
- memory->user = 0;
+ memory->user = NULL;
memory->alloc = ft_alloc;
memory->realloc = ft_realloc;
memory->free = ft_free;
diff --git a/freetype/src/base/fttrigon.c b/freetype/src/base/fttrigon.c
index aa191fd2f..4406f716e 100644
--- a/freetype/src/base/fttrigon.c
+++ b/freetype/src/base/fttrigon.c
@@ -4,7 +4,7 @@
/* */
/* FreeType trigonometric functions (body). */
/* */
-/* Copyright 2001-2005, 2012-2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -92,8 +92,8 @@
s = -1;
}
- lo1 = val & 0x0000FFFFU;
- hi1 = val >> 16;
+ lo1 = (FT_UInt32)val & 0x0000FFFFU;
+ hi1 = (FT_UInt32)val >> 16;
lo2 = FT_TRIG_SCALE & 0x0000FFFFU;
hi2 = FT_TRIG_SCALE >> 16;
@@ -120,7 +120,7 @@
lo += 0x40000000UL;
hi += ( lo < 0x40000000UL );
- val = (FT_Fixed)hi;
+ val = (FT_Fixed)hi;
return s < 0 ? -val : val;
}
@@ -139,7 +139,7 @@
x = vec->x;
y = vec->y;
- shift = FT_MSB( FT_ABS( x ) | FT_ABS( y ) );
+ shift = FT_MSB( (FT_UInt32)( FT_ABS( x ) | FT_ABS( y ) ) );
if ( shift <= FT_TRIG_SAFE_MSB )
{
@@ -299,11 +299,9 @@
FT_Vector v;
- v.x = FT_TRIG_SCALE >> 8;
- v.y = 0;
- ft_trig_pseudo_rotate( &v, angle );
+ FT_Vector_Unit( &v, angle );
- return ( v.x + 0x80L ) >> 8;
+ return v.x;
}
@@ -312,7 +310,12 @@
FT_EXPORT_DEF( FT_Fixed )
FT_Sin( FT_Angle angle )
{
- return FT_Cos( FT_ANGLE_PI2 - angle );
+ FT_Vector v;
+
+
+ FT_Vector_Unit( &v, angle );
+
+ return v.y;
}
@@ -324,9 +327,7 @@
FT_Vector v;
- v.x = FT_TRIG_SCALE >> 8;
- v.y = 0;
- ft_trig_pseudo_rotate( &v, angle );
+ FT_Vector_Unit( &v, angle );
return FT_DivFix( v.y, v.x );
}
@@ -388,33 +389,32 @@
FT_Vector v;
- if ( !vec )
+ if ( !vec || !angle )
return;
- v.x = vec->x;
- v.y = vec->y;
+ v = *vec;
- if ( angle && ( v.x != 0 || v.y != 0 ) )
- {
- shift = ft_trig_prenorm( &v );
- ft_trig_pseudo_rotate( &v, angle );
- v.x = ft_trig_downscale( v.x );
- v.y = ft_trig_downscale( v.y );
+ if ( v.x == 0 && v.y == 0 )
+ return;
- if ( shift > 0 )
- {
- FT_Int32 half = (FT_Int32)1L << ( shift - 1 );
+ shift = ft_trig_prenorm( &v );
+ ft_trig_pseudo_rotate( &v, angle );
+ v.x = ft_trig_downscale( v.x );
+ v.y = ft_trig_downscale( v.y );
+ if ( shift > 0 )
+ {
+ FT_Int32 half = (FT_Int32)1L << ( shift - 1 );
- vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
- vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
- }
- else
- {
- shift = -shift;
- vec->x = (FT_Pos)( (FT_ULong)v.x << shift );
- vec->y = (FT_Pos)( (FT_ULong)v.y << shift );
- }
+
+ vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
+ vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
+ }
+ else
+ {
+ shift = -shift;
+ vec->x = (FT_Pos)( (FT_ULong)v.x << shift );
+ vec->y = (FT_Pos)( (FT_ULong)v.y << shift );
}
}
@@ -450,7 +450,7 @@
v.x = ft_trig_downscale( v.x );
if ( shift > 0 )
- return ( v.x + ( 1 << ( shift - 1 ) ) ) >> shift;
+ return ( v.x + ( 1L << ( shift - 1 ) ) ) >> shift;
return (FT_Fixed)( (FT_UInt32)v.x << -shift );
}
@@ -512,11 +512,10 @@
FT_Angle delta = angle2 - angle1;
- delta %= FT_ANGLE_2PI;
- if ( delta < 0 )
+ while ( delta <= -FT_ANGLE_PI )
delta += FT_ANGLE_2PI;
- if ( delta > FT_ANGLE_PI )
+ while ( delta > FT_ANGLE_PI )
delta -= FT_ANGLE_2PI;
return delta;
diff --git a/freetype/src/base/fttype1.c b/freetype/src/base/fttype1.c
index a6ca3eb7a..d1c2f1041 100755
--- a/freetype/src/base/fttype1.c
+++ b/freetype/src/base/fttype1.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file for PS names support (body). */
/* */
-/* Copyright 2002-2004, 2011, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/ftutil.c b/freetype/src/base/ftutil.c
index e26aa87f5..853d49092 100644
--- a/freetype/src/base/ftutil.c
+++ b/freetype/src/base/ftutil.c
@@ -4,7 +4,7 @@
/* */
/* FreeType utility file for memory and list management (body). */
/* */
-/* Copyright 2002, 2004-2007, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -180,7 +180,7 @@
FT_Error *p_error )
{
FT_Error error;
- FT_Pointer p = ft_mem_qalloc( memory, size, &error );
+ FT_Pointer p = ft_mem_qalloc( memory, (FT_Long)size, &error );
if ( !error && address )
@@ -275,7 +275,7 @@
before = list->tail;
- node->next = 0;
+ node->next = NULL;
node->prev = before;
if ( before )
@@ -302,7 +302,7 @@
after = list->head;
node->next = after;
- node->prev = 0;
+ node->prev = NULL;
if ( !after )
list->tail = node;
@@ -366,7 +366,7 @@
else
list->tail = before;
- node->prev = 0;
+ node->prev = NULL;
node->next = list->head;
list->head->prev = node;
list->head = node;
@@ -433,8 +433,8 @@
cur = next;
}
- list->head = 0;
- list->tail = 0;
+ list->head = NULL;
+ list->tail = NULL;
}
diff --git a/freetype/src/base/ftwinfnt.c b/freetype/src/base/ftwinfnt.c
index cb3733523..49a422f5f 100644
--- a/freetype/src/base/ftwinfnt.c
+++ b/freetype/src/base/ftwinfnt.c
@@ -4,7 +4,7 @@
/* */
/* FreeType API for accessing Windows FNT specific info (body). */
/* */
-/* Copyright 2003, 2004, 2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/base/rules.mk b/freetype/src/base/rules.mk
index cbd810732..1852e0861 100644
--- a/freetype/src/base/rules.mk
+++ b/freetype/src/base/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002-2009, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -23,7 +23,10 @@
# layer proper.
-BASE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SRC_DIR)/base)
+BASE_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(BASE_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# Base layer sources
diff --git a/freetype/src/bdf/Jamfile b/freetype/src/bdf/Jamfile
index da23ccd0a..006843c11 100644
--- a/freetype/src/bdf/Jamfile
+++ b/freetype/src/bdf/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/bdf Jamfile
#
-# Copyright 2002 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/bdf/bdf.h b/freetype/src/bdf/bdf.h
index 0e516c383..612ea12c2 100644
--- a/freetype/src/bdf/bdf.h
+++ b/freetype/src/bdf/bdf.h
@@ -167,10 +167,10 @@ FT_BEGIN_HEADER
typedef struct hashtable_
{
- int limit;
- int size;
- int used;
- hashnode* table;
+ unsigned int limit;
+ unsigned int size;
+ unsigned int used;
+ hashnode* table;
} hashtable;
@@ -194,7 +194,7 @@ FT_BEGIN_HEADER
char* name; /* Name of the font. */
bdf_bbx_t bbx; /* Font bounding box. */
- long point_size; /* Point size of the font. */
+ unsigned long point_size; /* Point size of the font. */
unsigned long resolution_x; /* Font horizontal resolution. */
unsigned long resolution_y; /* Font vertical resolution. */
diff --git a/freetype/src/bdf/bdfdrivr.c b/freetype/src/bdf/bdfdrivr.c
index efd2a0420..ca5082e4c 100644
--- a/freetype/src/bdf/bdfdrivr.c
+++ b/freetype/src/bdf/bdfdrivr.c
@@ -33,7 +33,7 @@ THE SOFTWARE.
#include FT_TRUETYPE_IDS_H
#include FT_SERVICE_BDF_H
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#include "bdf.h"
#include "bdfdrivr.h"
@@ -106,7 +106,7 @@ THE SOFTWARE.
mid = ( min + max ) >> 1;
- code = encodings[mid].enc;
+ code = (FT_ULong)encodings[mid].enc;
if ( charcode == code )
{
@@ -146,7 +146,7 @@ THE SOFTWARE.
mid = ( min + max ) >> 1;
- code = encodings[mid].enc;
+ code = (FT_ULong)encodings[mid].enc;
if ( charcode == code )
{
@@ -165,7 +165,7 @@ THE SOFTWARE.
charcode = 0;
if ( min < cmap->num_encodings )
{
- charcode = encodings[min].enc;
+ charcode = (FT_ULong)encodings[min].enc;
result = encodings[min].glyph + 1;
}
@@ -420,14 +420,14 @@ THE SOFTWARE.
goto Exit;
}
else
- bdfface->family_name = 0;
+ bdfface->family_name = NULL;
if ( ( error = bdf_interpret_style( face ) ) != 0 )
goto Exit;
/* the number of glyphs (with one slot for the undefined glyph */
/* at position 0 and all unencoded glyphs) */
- bdfface->num_glyphs = font->glyphs_size + 1;
+ bdfface->num_glyphs = (FT_Long)( font->glyphs_size + 1 );
bdfface->num_fixed_sizes = 1;
if ( FT_NEW_ARRAY( bdfface->available_sizes, 1 ) )
@@ -494,7 +494,7 @@ THE SOFTWARE.
{
(face->en_table[n]).enc = cur[n].encoding;
FT_TRACE4(( " idx %d, val 0x%lX\n", n, cur[n].encoding ));
- (face->en_table[n]).glyph = (FT_Short)n;
+ (face->en_table[n]).glyph = (FT_UShort)n;
if ( cur[n].encoding == font->default_char )
{
@@ -509,7 +509,7 @@ THE SOFTWARE.
/* charmaps */
{
- bdf_property_t *charset_registry = 0, *charset_encoding = 0;
+ bdf_property_t *charset_registry, *charset_encoding;
FT_Bool unicode_charmap = 0;
@@ -734,11 +734,11 @@ THE SOFTWARE.
slot->bitmap_left = glyph.bbx.x_offset;
slot->bitmap_top = glyph.bbx.ascent;
- slot->metrics.horiAdvance = glyph.dwidth << 6;
- slot->metrics.horiBearingX = glyph.bbx.x_offset << 6;
- slot->metrics.horiBearingY = glyph.bbx.ascent << 6;
- slot->metrics.width = bitmap->width << 6;
- slot->metrics.height = bitmap->rows << 6;
+ slot->metrics.horiAdvance = (FT_Pos)( glyph.dwidth << 6 );
+ slot->metrics.horiBearingX = (FT_Pos)( glyph.bbx.x_offset << 6 );
+ slot->metrics.horiBearingY = (FT_Pos)( glyph.bbx.ascent << 6 );
+ slot->metrics.width = (FT_Pos)( bitmap->width << 6 );
+ slot->metrics.height = (FT_Pos)( bitmap->rows << 6 );
/*
* XXX DWIDTH1 and VVECTOR should be parsed and
@@ -836,8 +836,8 @@ THE SOFTWARE.
static const FT_ServiceDescRec bdf_services[] =
{
- { FT_SERVICE_ID_BDF, &bdf_service_bdf },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_BDF },
+ { FT_SERVICE_ID_BDF, &bdf_service_bdf },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_BDF },
{ NULL, NULL }
};
diff --git a/freetype/src/bdf/bdfdrivr.h b/freetype/src/bdf/bdfdrivr.h
index f053e947b..434628619 100644
--- a/freetype/src/bdf/bdfdrivr.h
+++ b/freetype/src/bdf/bdfdrivr.h
@@ -43,7 +43,7 @@ FT_BEGIN_HEADER
typedef struct BDF_encoding_el_
{
- FT_ULong enc;
+ FT_Long enc;
FT_UShort glyph;
} BDF_encoding_el;
diff --git a/freetype/src/bdf/bdflib.c b/freetype/src/bdf/bdflib.c
index 97ea96007..f93df7c01 100644
--- a/freetype/src/bdf/bdflib.c
+++ b/freetype/src/bdf/bdflib.c
@@ -243,7 +243,7 @@
/* Mocklisp hash function. */
while ( *kp )
- res = ( res << 5 ) - res + *kp++;
+ res = ( res << 5 ) - res + (unsigned long)*kp++;
ndp = bp + ( res % ht->size );
while ( *ndp )
@@ -264,9 +264,9 @@
hash_rehash( hashtable* ht,
FT_Memory memory )
{
- hashnode* obp = ht->table, *bp, *nbp;
- int i, sz = ht->size;
- FT_Error error = FT_Err_Ok;
+ hashnode* obp = ht->table, *bp, *nbp;
+ unsigned int i, sz = ht->size;
+ FT_Error error = FT_Err_Ok;
ht->size <<= 1;
@@ -294,8 +294,8 @@
hash_init( hashtable* ht,
FT_Memory memory )
{
- int sz = INITIAL_HT_SIZE;
- FT_Error error = FT_Err_Ok;
+ unsigned int sz = INITIAL_HT_SIZE;
+ FT_Error error = FT_Err_Ok;
ht->size = sz;
@@ -316,8 +316,8 @@
{
if ( ht != 0 )
{
- int i, sz = ht->size;
- hashnode* bp = ht->table;
+ unsigned int i, sz = ht->size;
+ hashnode* bp = ht->table;
for ( i = 0; i < sz; i++, bp++ )
@@ -570,10 +570,11 @@
char* line,
unsigned long linelen )
{
- int mult, final_empty;
- char *sp, *ep, *end;
- char seps[32];
- FT_Error error = FT_Err_Ok;
+ unsigned long final_empty;
+ int mult;
+ char *sp, *ep, *end;
+ char seps[32];
+ FT_Error error = FT_Err_Ok;
/* Initialize the list. */
@@ -682,7 +683,7 @@
unsigned long lineno, buf_size;
int refill, hold, to_skip;
ptrdiff_t bytes, start, end, cursor, avail;
- char* buf = 0;
+ char* buf = NULL;
FT_Memory memory = stream->memory;
FT_Error error = FT_Err_Ok;
@@ -715,7 +716,7 @@
{
bytes = (ptrdiff_t)FT_Stream_TryRead(
stream, (FT_Byte*)buf + cursor,
- (FT_ULong)( buf_size - cursor ) );
+ buf_size - (unsigned long)cursor );
avail = cursor + bytes;
cursor = 0;
refill = 0;
@@ -760,7 +761,7 @@
if ( FT_RENEW_ARRAY( buf, buf_size, new_size ) )
goto Exit;
- cursor = buf_size;
+ cursor = (ptrdiff_t)buf_size;
buf_size = new_size;
}
else
@@ -858,9 +859,9 @@
/* Routine to convert an ASCII string into an unsigned long integer. */
static unsigned long
- _bdf_atoul( char* s,
- char** end,
- int base )
+ _bdf_atoul( char* s,
+ char** end,
+ unsigned int base )
{
unsigned long v;
const unsigned char* dmap;
@@ -903,7 +904,7 @@
}
- /* Routine to convert an ASCII string into an signed long integer. */
+ /* Routine to convert an ASCII string into a signed long integer. */
static long
_bdf_atol( char* s,
char** end,
@@ -958,7 +959,54 @@
}
- /* Routine to convert an ASCII string into an signed short integer. */
+ /* Routine to convert an ASCII string into an unsigned short integer. */
+ static unsigned short
+ _bdf_atous( char* s,
+ char** end,
+ unsigned int base )
+ {
+ unsigned short v;
+ const unsigned char* dmap;
+
+
+ if ( s == 0 || *s == 0 )
+ return 0;
+
+ /* Make sure the radix is something recognizable. Default to 10. */
+ switch ( base )
+ {
+ case 8:
+ dmap = odigits;
+ break;
+ case 16:
+ dmap = hdigits;
+ break;
+ default:
+ base = 10;
+ dmap = ddigits;
+ break;
+ }
+
+ /* Check for the special hex prefix. */
+ if ( *s == '0' &&
+ ( *( s + 1 ) == 'x' || *( s + 1 ) == 'X' ) )
+ {
+ base = 16;
+ dmap = hdigits;
+ s += 2;
+ }
+
+ for ( v = 0; sbitset( dmap, *s ); s++ )
+ v = (unsigned short)( v * base + a2i[(int)*s] );
+
+ if ( end != 0 )
+ *end = s;
+
+ return v;
+ }
+
+
+ /* Routine to convert an ASCII string into a signed short integer. */
static short
_bdf_atos( char* s,
char** end,
@@ -1115,20 +1163,20 @@
/* Parse flags. */
-#define _BDF_START 0x0001
-#define _BDF_FONT_NAME 0x0002
-#define _BDF_SIZE 0x0004
-#define _BDF_FONT_BBX 0x0008
-#define _BDF_PROPS 0x0010
-#define _BDF_GLYPHS 0x0020
-#define _BDF_GLYPH 0x0040
-#define _BDF_ENCODING 0x0080
-#define _BDF_SWIDTH 0x0100
-#define _BDF_DWIDTH 0x0200
-#define _BDF_BBX 0x0400
-#define _BDF_BITMAP 0x0800
-
-#define _BDF_SWIDTH_ADJ 0x1000
+#define _BDF_START 0x0001U
+#define _BDF_FONT_NAME 0x0002U
+#define _BDF_SIZE 0x0004U
+#define _BDF_FONT_BBX 0x0008U
+#define _BDF_PROPS 0x0010U
+#define _BDF_GLYPHS 0x0020U
+#define _BDF_GLYPH 0x0040U
+#define _BDF_ENCODING 0x0080U
+#define _BDF_SWIDTH 0x0100U
+#define _BDF_DWIDTH 0x0200U
+#define _BDF_BBX 0x0400U
+#define _BDF_BITMAP 0x0800U
+
+#define _BDF_SWIDTH_ADJ 0x1000U
#define _BDF_GLYPH_BITS ( _BDF_GLYPH | \
_BDF_ENCODING | \
@@ -1703,7 +1751,7 @@
glyph->encoding = p->glyph_enc;
/* Reset the initial glyph info. */
- p->glyph_name = 0;
+ p->glyph_name = NULL;
}
else
{
@@ -1724,14 +1772,14 @@
glyph = font->unencoded + font->unencoded_used;
glyph->name = p->glyph_name;
- glyph->encoding = font->unencoded_used++;
+ glyph->encoding = (long)font->unencoded_used++;
}
else
/* Free up the glyph name if the unencoded shouldn't be */
/* kept. */
FT_FREE( p->glyph_name );
- p->glyph_name = 0;
+ p->glyph_name = NULL;
}
/* Clear the flags that might be added when width and height are */
@@ -1864,8 +1912,8 @@
if ( error )
goto Exit;
- glyph->bbx.width = _bdf_atos( p->list.field[1], 0, 10 );
- glyph->bbx.height = _bdf_atos( p->list.field[2], 0, 10 );
+ glyph->bbx.width = _bdf_atous( p->list.field[1], 0, 10 );
+ glyph->bbx.height = _bdf_atous( p->list.field[2], 0, 10 );
glyph->bbx.x_offset = _bdf_atos( p->list.field[3], 0, 10 );
glyph->bbx.y_offset = _bdf_atos( p->list.field[4], 0, 10 );
@@ -2225,8 +2273,8 @@
if ( error )
goto Exit;
- p->font->bbx.width = _bdf_atos( p->list.field[1], 0, 10 );
- p->font->bbx.height = _bdf_atos( p->list.field[2], 0, 10 );
+ p->font->bbx.width = _bdf_atous( p->list.field[1], 0, 10 );
+ p->font->bbx.height = _bdf_atous( p->list.field[2], 0, 10 );
p->font->bbx.x_offset = _bdf_atos( p->list.field[3], 0, 10 );
p->font->bbx.y_offset = _bdf_atos( p->list.field[4], 0, 10 );
@@ -2313,7 +2361,8 @@
shift >>= 1;
}
- shift = (short)( ( bitcount > 3 ) ? 8 : ( 1 << bitcount ) );
+ shift = (unsigned short)( ( bitcount > 3 ) ? 8
+ : ( 1U << bitcount ) );
if ( p->font->bpp > shift || p->font->bpp != shift )
{
diff --git a/freetype/src/bdf/rules.mk b/freetype/src/bdf/rules.mk
index 6ff1614dd..d1dd76b1c 100644
--- a/freetype/src/bdf/rules.mk
+++ b/freetype/src/bdf/rules.mk
@@ -32,7 +32,10 @@
BDF_DIR := $(SRC_DIR)/bdf
-BDF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(BDF_DIR))
+BDF_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(BDF_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# bdf driver sources (i.e., C files)
diff --git a/freetype/src/bzip2/Jamfile b/freetype/src/bzip2/Jamfile
index 3da986dce..53f850e6f 100644
--- a/freetype/src/bzip2/Jamfile
+++ b/freetype/src/bzip2/Jamfile
@@ -1,10 +1,9 @@
# FreeType 2 src/bzip2 Jamfile
#
-# Copyright 2010 by
+# Copyright 2010-2015 by
# Joel Klinghed
#
-# Based on src/lzw/Jamfile, Copyright 2004, 2006 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
+# based on `src/lzw/Jamfile'
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
diff --git a/freetype/src/bzip2/ftbzip2.c b/freetype/src/bzip2/ftbzip2.c
index 7e406b161..4dfc9c899 100644
--- a/freetype/src/bzip2/ftbzip2.c
+++ b/freetype/src/bzip2/ftbzip2.c
@@ -8,11 +8,10 @@
/* parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2010, 2012-2014 by */
+/* Copyright 2010-2015 by */
/* Joel Klinghed. */
/* */
-/* Based on src/gzip/ftgzip.c, Copyright 2002 - 2010 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* based on `src/gzip/ftgzip.c' */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -71,7 +70,7 @@
int items,
int size )
{
- FT_ULong sz = (FT_ULong)size * items;
+ FT_ULong sz = (FT_ULong)size * (FT_ULong)items;
FT_Error error;
FT_Pointer p = NULL;
diff --git a/freetype/src/bzip2/rules.mk b/freetype/src/bzip2/rules.mk
index 0ff2628b4..7040588c1 100644
--- a/freetype/src/bzip2/rules.mk
+++ b/freetype/src/bzip2/rules.mk
@@ -2,11 +2,10 @@
# FreeType 2 BZIP2 support configuration rules
#
-# Copyright 2010 by
+# Copyright 2010-2015 by
# Joel Klinghed.
#
-# Based on src/lzw/rules.mk, Copyright 2004-2006 by
-# Albert Chin-A-Young.
+# based on `src/lzw/rules.mk'
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
@@ -22,7 +21,9 @@ BZIP2_DIR := $(SRC_DIR)/bzip2
# compilation flags for the driver
#
-BZIP2_COMPILE := $(FT_COMPILE)
+BZIP2_COMPILE := $(CC) $(ANSIFLAGS) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# BZIP2 support sources (i.e., C files)
diff --git a/freetype/src/cache/Jamfile b/freetype/src/cache/Jamfile
index 656399137..75d899727 100644
--- a/freetype/src/cache/Jamfile
+++ b/freetype/src/cache/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cache Jamfile
#
-# Copyright 2001, 2003, 2004, 2013 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cache/ftcache.c b/freetype/src/cache/ftcache.c
index d41e91e5e..8de527aca 100644
--- a/freetype/src/cache/ftcache.c
+++ b/freetype/src/cache/ftcache.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType Caching sub-system (body only). */
/* */
-/* Copyright 2000-2001, 2003 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftcbasic.c b/freetype/src/cache/ftcbasic.c
index 90f7cf936..e6f3e5e4a 100644
--- a/freetype/src/cache/ftcbasic.c
+++ b/freetype/src/cache/ftcbasic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType basic cache interface (body). */
/* */
-/* Copyright 2003-2007, 2009-2011, 2013, 2014 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -45,8 +45,8 @@
FT_BOOL( FTC_SCALER_COMPARE( &(a)->scaler, &(b)->scaler ) && \
(a)->load_flags == (b)->load_flags )
-#define FTC_BASIC_ATTR_HASH( a ) \
- ( FTC_SCALER_HASH( &(a)->scaler ) + 31*(a)->load_flags )
+#define FTC_BASIC_ATTR_HASH( a ) \
+ ( FTC_SCALER_HASH( &(a)->scaler ) + 31 * (a)->load_flags )
typedef struct FTC_BasicQueryRec_
@@ -138,8 +138,10 @@
FT_Face face = size->face;
- error = FT_Load_Glyph( face, gindex,
- family->attrs.load_flags | FT_LOAD_RENDER );
+ error = FT_Load_Glyph(
+ face,
+ gindex,
+ (FT_Int)family->attrs.load_flags | FT_LOAD_RENDER );
if ( !error )
*aface = face;
}
@@ -169,7 +171,9 @@
{
face = size->face;
- error = FT_Load_Glyph( face, gindex, family->attrs.load_flags );
+ error = FT_Load_Glyph( face,
+ gindex,
+ (FT_Int)family->attrs.load_flags );
if ( !error )
{
if ( face->glyph->format == FT_GLYPH_FORMAT_BITMAP ||
@@ -283,7 +287,7 @@
FTC_BasicQueryRec query;
FTC_Node node = 0; /* make compiler happy */
FT_Error error;
- FT_PtrDist hash;
+ FT_Offset hash;
/* some argument checks are delayed to `FTC_Cache_Lookup' */
@@ -300,7 +304,7 @@
if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX )
FT_TRACE1(( "FTC_ImageCache_Lookup:"
" higher bits in load_flags 0x%x are dropped\n",
- type->flags & ~((FT_ULong)FT_UINT_MAX) ));
+ (FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
query.attrs.scaler.face_id = type->face_id;
query.attrs.scaler.width = type->width;
@@ -356,7 +360,7 @@
FTC_BasicQueryRec query;
FTC_Node node = 0; /* make compiler happy */
FT_Error error;
- FT_PtrDist hash;
+ FT_Offset hash;
/* some argument checks are delayed to `FTC_Cache_Lookup' */
@@ -466,7 +470,7 @@
FT_Error error;
FTC_BasicQueryRec query;
FTC_Node node = 0; /* make compiler happy */
- FT_PtrDist hash;
+ FT_Offset hash;
if ( anode )
@@ -481,7 +485,7 @@
if ( (FT_ULong)( type->flags - FT_INT_MIN ) > FT_UINT_MAX )
FT_TRACE1(( "FTC_ImageCache_Lookup:"
" higher bits in load_flags 0x%x are dropped\n",
- type->flags & ~((FT_ULong)FT_UINT_MAX) ));
+ (FT_ULong)type->flags & ~((FT_ULong)FT_UINT_MAX) ));
query.attrs.scaler.face_id = type->face_id;
query.attrs.scaler.width = type->width;
@@ -541,7 +545,7 @@
FT_Error error;
FTC_BasicQueryRec query;
FTC_Node node = 0; /* make compiler happy */
- FT_PtrDist hash;
+ FT_Offset hash;
if ( anode )
diff --git a/freetype/src/cache/ftccache.c b/freetype/src/cache/ftccache.c
index 7fa211522..4fb144b01 100644
--- a/freetype/src/cache/ftccache.c
+++ b/freetype/src/cache/ftccache.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType internal cache interface (body). */
/* */
-/* Copyright 2000-2007, 2009-2011, 2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -88,16 +88,16 @@
* body for FTC_NODE__TOP_FOR_HASH( cache, hash )
*/
FT_LOCAL_DEF( FTC_Node* )
- ftc_get_top_node_for_hash( FTC_Cache cache,
- FT_PtrDist hash )
+ ftc_get_top_node_for_hash( FTC_Cache cache,
+ FT_Offset hash )
{
FTC_Node* pnode;
- FT_UInt idx;
+ FT_Offset idx;
- idx = (FT_UInt)( hash & cache->mask );
+ idx = hash & cache->mask;
if ( idx < cache->p )
- idx = (FT_UInt)( hash & ( 2 * cache->mask + 1 ) );
+ idx = hash & ( 2 * cache->mask + 1 );
pnode = cache->buckets + idx;
return pnode;
}
@@ -414,7 +414,7 @@
static void
ftc_cache_add( FTC_Cache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FTC_Node node )
{
node->hash = hash;
@@ -442,7 +442,7 @@
FT_LOCAL_DEF( FT_Error )
FTC_Cache_NewNode( FTC_Cache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FT_Pointer query,
FTC_Node *anode )
{
@@ -481,7 +481,7 @@
FT_LOCAL_DEF( FT_Error )
FTC_Cache_Lookup( FTC_Cache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FT_Pointer query,
FTC_Node *anode )
{
diff --git a/freetype/src/cache/ftccache.h b/freetype/src/cache/ftccache.h
index 4155f320e..4e17c7afe 100644
--- a/freetype/src/cache/ftccache.h
+++ b/freetype/src/cache/ftccache.h
@@ -4,7 +4,7 @@
/* */
/* FreeType internal cache interface (specification). */
/* */
-/* Copyright 2000-2007, 2009-2011, 2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,8 +24,8 @@
FT_BEGIN_HEADER
-#define _FTC_FACE_ID_HASH( i ) \
- ((FT_PtrDist)(( (FT_PtrDist)(i) >> 3 ) ^ ( (FT_PtrDist)(i) << 7 )))
+#define _FTC_FACE_ID_HASH( i ) \
+ ( ( (FT_Offset)(i) >> 3 ) ^ ( (FT_Offset)(i) << 7 ) )
/* handle to cache object */
typedef struct FTC_CacheRec_* FTC_Cache;
@@ -59,7 +59,7 @@ FT_BEGIN_HEADER
{
FTC_MruNodeRec mru; /* circular mru list pointer */
FTC_Node link; /* used for hashing */
- FT_PtrDist hash; /* used for hashing too */
+ FT_Offset hash; /* used for hashing too */
FT_UShort cache_index; /* index of cache the node belongs to */
FT_Short ref_count; /* reference count for this node */
@@ -80,8 +80,8 @@ FT_BEGIN_HEADER
: ( ( hash ) & ( cache )->mask ) ) )
#else
FT_LOCAL( FTC_Node* )
- ftc_get_top_node_for_hash( FTC_Cache cache,
- FT_PtrDist hash );
+ ftc_get_top_node_for_hash( FTC_Cache cache,
+ FT_Offset hash );
#define FTC_NODE__TOP_FOR_HASH( cache, hash ) \
ftc_get_top_node_for_hash( ( cache ), ( hash ) )
#endif
@@ -179,14 +179,14 @@ FT_BEGIN_HEADER
#ifndef FTC_INLINE
FT_LOCAL( FT_Error )
FTC_Cache_Lookup( FTC_Cache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FT_Pointer query,
FTC_Node *anode );
#endif
FT_LOCAL( FT_Error )
FTC_Cache_NewNode( FTC_Cache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FT_Pointer query,
FTC_Node *anode );
@@ -211,7 +211,7 @@ FT_BEGIN_HEADER
FT_BEGIN_STMNT \
FTC_Node *_bucket, *_pnode, _node; \
FTC_Cache _cache = FTC_CACHE(cache); \
- FT_PtrDist _hash = (FT_PtrDist)(hash); \
+ FT_Offset _hash = (FT_Offset)(hash); \
FTC_Node_CompareFunc _nodcomp = (FTC_Node_CompareFunc)(nodecmp); \
FT_Bool _list_changed = FALSE; \
\
diff --git a/freetype/src/cache/ftccback.h b/freetype/src/cache/ftccback.h
index 952827927..b3237d5a3 100644
--- a/freetype/src/cache/ftccback.h
+++ b/freetype/src/cache/ftccback.h
@@ -4,7 +4,7 @@
/* */
/* Callback functions of the caching sub-system (specification only). */
/* */
-/* Copyright 2004-2006, 2011, 2013 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftccmap.c b/freetype/src/cache/ftccmap.c
index 9de2a64d0..bd8d68a53 100644
--- a/freetype/src/cache/ftccmap.c
+++ b/freetype/src/cache/ftccmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType CharMap cache (body) */
/* */
-/* Copyright 2000-2014 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -63,8 +63,6 @@
} FTC_CMapQueryRec, *FTC_CMapQuery;
#define FTC_CMAP_QUERY( x ) ((FTC_CMapQuery)(x))
-#define FTC_CMAP_QUERY_HASH( x ) \
- FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->char_code )
/* the cmap cache node */
typedef struct FTC_CMapNodeRec_
@@ -78,8 +76,6 @@
} FTC_CMapNodeRec, *FTC_CMapNode;
#define FTC_CMAP_NODE( x ) ( (FTC_CMapNode)( x ) )
-#define FTC_CMAP_NODE_HASH( x ) \
- FTC_CMAP_HASH( (x)->face_id, (x)->cmap_index, (x)->first )
/* if (indices[n] == FTC_CMAP_UNKNOWN), we assume that the corresponding */
/* glyph indices haven't been queried through FT_Get_Glyph_Index() yet */
@@ -242,7 +238,7 @@
FTC_Node node;
FT_Error error;
FT_UInt gindex = 0;
- FT_PtrDist hash;
+ FT_Offset hash;
FT_Int no_cmap_change = 0;
@@ -270,7 +266,7 @@
query.cmap_index = (FT_UInt)cmap_index;
query.char_code = char_code;
- hash = FTC_CMAP_HASH( face_id, cmap_index, char_code );
+ hash = FTC_CMAP_HASH( face_id, (FT_UInt)cmap_index, char_code );
#if 1
FTC_CACHE_LOOKUP_CMP( cache, ftc_cmap_node_compare, hash, &query,
diff --git a/freetype/src/cache/ftcerror.h b/freetype/src/cache/ftcerror.h
index 0e055709b..15adec58d 100644
--- a/freetype/src/cache/ftcerror.h
+++ b/freetype/src/cache/ftcerror.h
@@ -4,7 +4,7 @@
/* */
/* Caching sub-system error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftcglyph.c b/freetype/src/cache/ftcglyph.c
index 441e17723..343b8a779 100644
--- a/freetype/src/cache/ftcglyph.c
+++ b/freetype/src/cache/ftcglyph.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Glyph Image (FT_Glyph) cache (body). */
/* */
-/* Copyright 2000-2001, 2003, 2004, 2006, 2009, 2011 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -185,7 +185,7 @@
FT_LOCAL_DEF( FT_Error )
FTC_GCache_Lookup( FTC_GCache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FT_UInt gindex,
FTC_GQuery query,
FTC_Node *anode )
diff --git a/freetype/src/cache/ftcglyph.h b/freetype/src/cache/ftcglyph.h
index 5fed19cb8..6cadbe2c1 100644
--- a/freetype/src/cache/ftcglyph.h
+++ b/freetype/src/cache/ftcglyph.h
@@ -4,7 +4,7 @@
/* */
/* FreeType abstract glyph cache (specification). */
/* */
-/* Copyright 2000-2001, 2003, 2004, 2006, 2007, 2011 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -260,7 +260,7 @@ FT_BEGIN_HEADER
#ifndef FTC_INLINE
FT_LOCAL( FT_Error )
FTC_GCache_Lookup( FTC_GCache cache,
- FT_PtrDist hash,
+ FT_Offset hash,
FT_UInt gindex,
FTC_GQuery query,
FTC_Node *anode );
diff --git a/freetype/src/cache/ftcimage.c b/freetype/src/cache/ftcimage.c
index 26984fa7c..9255f6de3 100644..100755
--- a/freetype/src/cache/ftcimage.c
+++ b/freetype/src/cache/ftcimage.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Image cache (body). */
/* */
-/* Copyright 2000-2001, 2003, 2004, 2006, 2010 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,6 +20,7 @@
#include FT_CACHE_H
#include "ftcimage.h"
#include <freetype/internal/ftmemory.h>
+#include FT_INTERNAL_OBJECTS_H
#include "ftccback.h"
#include "ftcerror.h"
@@ -122,7 +123,7 @@
bitg = (FT_BitmapGlyph)glyph;
- size = bitg->bitmap.rows * ft_labs( bitg->bitmap.pitch ) +
+ size = bitg->bitmap.rows * (FT_Offset)FT_ABS( bitg->bitmap.pitch ) +
sizeof ( *bitg );
}
break;
@@ -133,9 +134,9 @@
outg = (FT_OutlineGlyph)glyph;
- size = outg->outline.n_points *
+ size = (FT_Offset)outg->outline.n_points *
( sizeof ( FT_Vector ) + sizeof ( FT_Byte ) ) +
- outg->outline.n_contours * sizeof ( FT_Short ) +
+ (FT_Offset)outg->outline.n_contours * sizeof ( FT_Short ) +
sizeof ( *outg );
}
break;
diff --git a/freetype/src/cache/ftcimage.h b/freetype/src/cache/ftcimage.h
index 20d5d3e07..b312eaa3d 100644
--- a/freetype/src/cache/ftcimage.h
+++ b/freetype/src/cache/ftcimage.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Generic Image cache (specification) */
/* */
-/* Copyright 2000-2001, 2002, 2003, 2006 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftcmanag.c b/freetype/src/cache/ftcmanag.c
index 41390ba95..f23358e27 100644
--- a/freetype/src/cache/ftcmanag.c
+++ b/freetype/src/cache/ftcmanag.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Cache Manager (body). */
/* */
-/* Copyright 2000-2006, 2008-2010, 2013, 2014 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -34,8 +34,6 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_cache
-#define FTC_LRU_GET_MANAGER( lru ) ( (FTC_Manager)(lru)->user_data )
-
static FT_Error
ftc_scaler_lookup_size( FTC_Manager manager,
@@ -60,8 +58,11 @@
if ( scaler->pixel )
error = FT_Set_Pixel_Sizes( face, scaler->width, scaler->height );
else
- error = FT_Set_Char_Size( face, scaler->width, scaler->height,
- scaler->x_res, scaler->y_res );
+ error = FT_Set_Char_Size( face,
+ (FT_F26Dot6)scaler->width,
+ (FT_F26Dot6)scaler->height,
+ scaler->x_res,
+ scaler->y_res );
if ( error )
{
FT_Done_Size( size );
diff --git a/freetype/src/cache/ftcmanag.h b/freetype/src/cache/ftcmanag.h
index 0aec33c58..c6787b72c 100644
--- a/freetype/src/cache/ftcmanag.h
+++ b/freetype/src/cache/ftcmanag.h
@@ -4,7 +4,7 @@
/* */
/* FreeType Cache Manager (specification). */
/* */
-/* Copyright 2000-2001, 2003, 2004, 2006, 2010, 2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftcmru.c b/freetype/src/cache/ftcmru.c
index 57783a618..fa0010e77 100644
--- a/freetype/src/cache/ftcmru.c
+++ b/freetype/src/cache/ftcmru.c
@@ -4,7 +4,7 @@
/* */
/* FreeType MRU support (body). */
/* */
-/* Copyright 2003, 2004, 2006, 2009 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftcmru.h b/freetype/src/cache/ftcmru.h
index 4af7c4d2d..52814355c 100644
--- a/freetype/src/cache/ftcmru.h
+++ b/freetype/src/cache/ftcmru.h
@@ -4,7 +4,7 @@
/* */
/* Simple MRU list-cache (specification). */
/* */
-/* Copyright 2000-2001, 2003-2006, 2010, 2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/ftcsbits.c b/freetype/src/cache/ftcsbits.c
index 91a9b4837..99844ae7a 100644
--- a/freetype/src/cache/ftcsbits.c
+++ b/freetype/src/cache/ftcsbits.c
@@ -4,7 +4,7 @@
/* */
/* FreeType sbits manager (body). */
/* */
-/* Copyright 2000-2006, 2009-2011, 2013, 2014 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -52,7 +52,7 @@
if ( pitch < 0 )
pitch = -pitch;
- size = (FT_ULong)( pitch * bitmap->rows );
+ size = (FT_ULong)pitch * bitmap->rows;
if ( !FT_ALLOC( sbit->buffer, size ) )
FT_MEM_COPY( sbit->buffer, bitmap->buffer, size );
@@ -181,7 +181,7 @@
/* now, compute size */
if ( asize )
- *asize = FT_ABS( sbit->pitch ) * sbit->height;
+ *asize = (FT_ULong)FT_ABS( sbit->pitch ) * sbit->height;
} /* glyph loading successful */
@@ -302,7 +302,7 @@
pitch = -pitch;
/* add the size of a given glyph image */
- size += pitch * sbit->height;
+ size += (FT_Offset)pitch * sbit->height;
}
}
diff --git a/freetype/src/cache/ftcsbits.h b/freetype/src/cache/ftcsbits.h
index df55dca80..5a2fa1ac8 100644
--- a/freetype/src/cache/ftcsbits.h
+++ b/freetype/src/cache/ftcsbits.h
@@ -4,7 +4,7 @@
/* */
/* A small-bitmap cache (specification). */
/* */
-/* Copyright 2000-2001, 2002, 2003, 2006, 2011 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cache/rules.mk b/freetype/src/cache/rules.mk
index ed75a6a91..6d5cf344b 100644
--- a/freetype/src/cache/rules.mk
+++ b/freetype/src/cache/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2000, 2001, 2003, 2004, 2006, 2008 by
+# Copyright 2000-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,9 +17,13 @@
#
CACHE_DIR := $(SRC_DIR)/cache
+
# compilation flags for the driver
#
-CACHE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR))
+CACHE_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# Cache driver sources (i.e., C files)
@@ -33,6 +37,7 @@ CACHE_DRV_SRC := $(CACHE_DIR)/ftcbasic.c \
$(CACHE_DIR)/ftcmru.c \
$(CACHE_DIR)/ftcsbits.c
+
# Cache driver headers
#
CACHE_DRV_H := $(CACHE_DIR)/ftccache.h \
diff --git a/freetype/src/cff/Jamfile b/freetype/src/cff/Jamfile
index 6705d3cfd..8ffb79cd9 100644
--- a/freetype/src/cff/Jamfile
+++ b/freetype/src/cff/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cff Jamfile
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cff/cf2arrst.c b/freetype/src/cff/cf2arrst.c
index c8d6f1309..528b1fa86 100644
--- a/freetype/src/cff/cf2arrst.c
+++ b/freetype/src/cff/cf2arrst.c
@@ -101,7 +101,7 @@
FT_Error error = FT_Err_Ok; /* for FT_REALLOC */
FT_Memory memory = arrstack->memory; /* for FT_REALLOC */
- FT_Long newSize = (FT_Long)( numElements * arrstack->sizeItem );
+ size_t newSize = numElements * arrstack->sizeItem;
if ( numElements > LONG_MAX / arrstack->sizeItem )
diff --git a/freetype/src/cff/cf2fixed.h b/freetype/src/cff/cf2fixed.h
index ed1452a7d..d6d9faf8e 100644
--- a/freetype/src/cff/cf2fixed.h
+++ b/freetype/src/cff/cf2fixed.h
@@ -57,22 +57,22 @@ FT_BEGIN_HEADER
/* in C 89, left and right shift of negative numbers is */
/* implementation specific behaviour in the general case */
-#define cf2_intToFixed( i ) \
+#define cf2_intToFixed( i ) \
( (CF2_Fixed)( (FT_UInt32)(i) << 16 ) )
-#define cf2_fixedToInt( x ) \
+#define cf2_fixedToInt( x ) \
( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
-#define cf2_fixedRound( x ) \
- ( (CF2_Fixed)( ( (x) + 0x8000 ) & 0xFFFF0000L ) )
-#define cf2_floatToFixed( f ) \
+#define cf2_fixedRound( x ) \
+ ( (CF2_Fixed)( ( (FT_UInt32)(x) + 0x8000U ) & 0xFFFF0000UL ) )
+#define cf2_floatToFixed( f ) \
( (CF2_Fixed)( (f) * 65536.0 + 0.5 ) )
-#define cf2_fixedAbs( x ) \
+#define cf2_fixedAbs( x ) \
( (x) < 0 ? -(x) : (x) )
-#define cf2_fixedFloor( x ) \
- ( (CF2_Fixed)( (x) & 0xFFFF0000L ) )
-#define cf2_fixedFraction( x ) \
+#define cf2_fixedFloor( x ) \
+ ( (CF2_Fixed)( (FT_UInt32)(x) & 0xFFFF0000UL ) )
+#define cf2_fixedFraction( x ) \
( (x) - cf2_fixedFloor( x ) )
-#define cf2_fracToFixed( x ) \
- ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 ) \
+#define cf2_fracToFixed( x ) \
+ ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 ) \
: ( ( (x) + 0x2000 ) >> 14 ) )
diff --git a/freetype/src/cff/cf2font.h b/freetype/src/cff/cf2font.h
index d8860ce8e..86cf02f49 100644
--- a/freetype/src/cff/cf2font.h
+++ b/freetype/src/cff/cf2font.h
@@ -48,7 +48,12 @@ FT_BEGIN_HEADER
#define CF2_OPERAND_STACK_SIZE 48
-#define CF2_MAX_SUBR 10 /* maximum subroutine nesting */
+#define CF2_MAX_SUBR 16 /* maximum subroutine nesting; */
+ /* only 10 are allowed but there exist */
+ /* fonts like `HiraKakuProN-W3.ttf' */
+ /* (Hiragino Kaku Gothic ProN W3; */
+ /* 8.2d6e1; 2014-12-19) that exceed */
+ /* this limit */
/* typedef is in `cf2glue.h' */
diff --git a/freetype/src/cff/cf2ft.c b/freetype/src/cff/cf2ft.c
index ebba4694c..d2544a234 100644
--- a/freetype/src/cff/cf2ft.c
+++ b/freetype/src/cff/cf2ft.c
@@ -551,7 +551,7 @@
FT_ZERO( buf );
- idx += decoder->globals_bias;
+ idx += (CF2_UInt)decoder->globals_bias;
if ( idx >= decoder->num_globals )
return TRUE; /* error */
@@ -569,7 +569,7 @@
/* used for seac component */
FT_LOCAL_DEF( FT_Error )
cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_UInt code,
+ CF2_Int code,
CF2_Buffer buf )
{
CF2_Int gid;
@@ -582,12 +582,21 @@
FT_ZERO( buf );
- gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code );
- if ( gid < 0 )
- return FT_THROW( Invalid_Glyph_Format );
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+ /* Incremental fonts don't necessarily have valid charsets. */
+ /* They use the character code, not the glyph index, in this case. */
+ if ( decoder->builder.face->root.internal->incremental_interface )
+ gid = code;
+ else
+#endif /* FT_CONFIG_OPTION_INCREMENTAL */
+ {
+ gid = cff_lookup_glyph_by_stdcharcode( decoder->cff, code );
+ if ( gid < 0 )
+ return FT_THROW( Invalid_Glyph_Format );
+ }
error = cff_get_glyph_data( decoder->builder.face,
- gid,
+ (CF2_UInt)gid,
&charstring,
&len );
/* TODO: for now, just pass the FreeType error through */
@@ -626,7 +635,7 @@
FT_ZERO( buf );
- idx += decoder->locals_bias;
+ idx += (CF2_UInt)decoder->locals_bias;
if ( idx >= decoder->num_locals )
return TRUE; /* error */
diff --git a/freetype/src/cff/cf2ft.h b/freetype/src/cff/cf2ft.h
index 731da3ca8..3073df382 100644
--- a/freetype/src/cff/cf2ft.h
+++ b/freetype/src/cff/cf2ft.h
@@ -103,7 +103,7 @@ FT_BEGIN_HEADER
CF2_Buffer buf );
FT_LOCAL( FT_Error )
cf2_getSeacComponent( CFF_Decoder* decoder,
- CF2_UInt code,
+ CF2_Int code,
CF2_Buffer buf );
FT_LOCAL( void )
cf2_freeSeacComponent( CFF_Decoder* decoder,
diff --git a/freetype/src/cff/cf2hints.c b/freetype/src/cff/cf2hints.c
index 040d193f3..0e2700021 100644
--- a/freetype/src/cff/cf2hints.c
+++ b/freetype/src/cff/cf2hints.c
@@ -697,10 +697,10 @@
/* make room to insert */
{
- CF2_Int iSrc = hintmap->count - 1;
- CF2_Int iDst = isPair ? hintmap->count + 1 : hintmap->count;
+ CF2_UInt iSrc = hintmap->count - 1;
+ CF2_UInt iDst = isPair ? hintmap->count + 1 : hintmap->count;
- CF2_Int count = hintmap->count - indexInsert;
+ CF2_UInt count = hintmap->count - indexInsert;
if ( iDst >= CF2_MAX_HINT_EDGES )
diff --git a/freetype/src/cff/cf2intrp.c b/freetype/src/cff/cf2intrp.c
index a26960669..537e0609d 100644
--- a/freetype/src/cff/cf2intrp.c
+++ b/freetype/src/cff/cf2intrp.c
@@ -43,6 +43,7 @@
#include "cf2font.h"
#include "cf2stack.h"
#include "cf2hints.h"
+#include "cf2intrp.h"
#include "cf2error.h"
@@ -760,16 +761,19 @@
/* push our current CFF charstring region on subrStack */
charstring = (CF2_Buffer)
- cf2_arrstack_getPointer( &subrStack,
- charstringIndex + 1 );
+ cf2_arrstack_getPointer(
+ &subrStack,
+ (size_t)charstringIndex + 1 );
/* set up the new CFF region and pointer */
- subrIndex = cf2_stack_popInt( opStack );
+ subrIndex = (CF2_UInt)cf2_stack_popInt( opStack );
switch ( op1 )
{
case cf2_cmdCALLGSUBR:
- FT_TRACE4(( "(%d)\n", subrIndex + decoder->globals_bias ));
+ FT_TRACE4(( " (idx %d, entering level %d)\n",
+ subrIndex + (CF2_UInt)decoder->globals_bias,
+ charstringIndex + 1 ));
if ( cf2_initGlobalRegionBuffer( decoder,
subrIndex,
@@ -782,7 +786,9 @@
default:
/* cf2_cmdCALLSUBR */
- FT_TRACE4(( "(%d)\n", subrIndex + decoder->locals_bias ));
+ FT_TRACE4(( " (idx %d, entering level %d)\n",
+ subrIndex + (CF2_UInt)decoder->locals_bias,
+ charstringIndex + 1 ));
if ( cf2_initLocalRegionBuffer( decoder,
subrIndex,
@@ -798,7 +804,7 @@
continue; /* do not clear the stack */
case cf2_cmdRETURN:
- FT_TRACE4(( " return\n" ));
+ FT_TRACE4(( " return (leaving level %d)\n", charstringIndex ));
if ( charstringIndex < 1 )
{
@@ -809,8 +815,9 @@
/* restore position in previous charstring */
charstring = (CF2_Buffer)
- cf2_arrstack_getPointer( &subrStack,
- --charstringIndex );
+ cf2_arrstack_getPointer(
+ &subrStack,
+ (CF2_UInt)--charstringIndex );
continue; /* do not clear the stack */
case cf2_cmdESC:
@@ -1088,8 +1095,8 @@
/* must be either 4 or 5 -- */
/* this is a (deprecated) implied `seac' operator */
- CF2_UInt achar;
- CF2_UInt bchar;
+ CF2_Int achar;
+ CF2_Int bchar;
CF2_BufferRec component;
CF2_Fixed dummyWidth; /* ignore component width */
FT_Error error2;
@@ -1291,10 +1298,16 @@
case cf2_cmdVVCURVETO:
{
- CF2_UInt count = cf2_stack_count( opStack );
+ CF2_UInt count, count1 = cf2_stack_count( opStack );
CF2_UInt index = 0;
+ /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
+ /* we enforce it by clearing the second bit */
+ /* (and sorting the stack indexing to suit) */
+ count = count1 & ~2;
+ index += count1 - count;
+
FT_TRACE4(( " vvcurveto\n" ));
while ( index < count )
@@ -1330,10 +1343,16 @@
case cf2_cmdHHCURVETO:
{
- CF2_UInt count = cf2_stack_count( opStack );
+ CF2_UInt count, count1 = cf2_stack_count( opStack );
CF2_UInt index = 0;
+ /* if `cf2_stack_count' isn't of the form 4n or 4n+1, */
+ /* we enforce it by clearing the second bit */
+ /* (and sorting the stack indexing to suit) */
+ count = count1 & ~2;
+ index += count1 - count;
+
FT_TRACE4(( " hhcurveto\n" ));
while ( index < count )
@@ -1370,12 +1389,19 @@
case cf2_cmdVHCURVETO:
case cf2_cmdHVCURVETO:
{
- CF2_UInt count = cf2_stack_count( opStack );
+ CF2_UInt count, count1 = cf2_stack_count( opStack );
CF2_UInt index = 0;
FT_Bool alternate = op1 == cf2_cmdHVCURVETO;
+ /* if `cf2_stack_count' isn't of the form 8n, 8n+1, */
+ /* 8n+4, or 8n+5, we enforce it by clearing the */
+ /* second bit */
+ /* (and sorting the stack indexing to suit) */
+ count = count1 & ~2;
+ index += count1 - count;
+
FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
while ( index < count )
diff --git a/freetype/src/cff/cff.c b/freetype/src/cff/cff.c
index c3840b583..bb2cfb525 100644
--- a/freetype/src/cff/cff.c
+++ b/freetype/src/cff/cff.c
@@ -4,7 +4,7 @@
/* */
/* FreeType OpenType driver component (body only). */
/* */
-/* Copyright 1996-2001, 2002, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffcmap.c b/freetype/src/cff/cffcmap.c
index 52248b2b9..e7538e984 100644
--- a/freetype/src/cff/cffcmap.c
+++ b/freetype/src/cff/cffcmap.c
@@ -4,7 +4,7 @@
/* */
/* CFF character mapping table (cmap) support (body). */
/* */
-/* Copyright 2002-2007, 2010, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffcmap.h b/freetype/src/cff/cffcmap.h
index 3f7f67bbe..6eaed636e 100644
--- a/freetype/src/cff/cffcmap.h
+++ b/freetype/src/cff/cffcmap.h
@@ -4,7 +4,7 @@
/* */
/* CFF character mapping table (cmap) support (specification). */
/* */
-/* Copyright 2002, 2003, 2006 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffdrivr.c b/freetype/src/cff/cffdrivr.c
index 8681d95ab..ea0100cd9 100644
--- a/freetype/src/cff/cffdrivr.c
+++ b/freetype/src/cff/cffdrivr.c
@@ -4,7 +4,7 @@
/* */
/* OpenType font driver implementation (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -35,7 +35,7 @@
#include "cfferrs.h"
#include "cffpic.h"
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#include FT_SERVICE_GLYPH_DICT_H
#include FT_SERVICE_PROPERTIES_H
#include FT_CFF_DRIVER_H
@@ -64,11 +64,6 @@
/*************************************************************************/
-#undef PAIR_TAG
-#define PAIR_TAG( left, right ) ( ( (FT_ULong)left << 16 ) | \
- (FT_ULong)right )
-
-
/*************************************************************************/
/* */
/* <Function> */
@@ -121,9 +116,6 @@
}
-#undef PAIR_TAG
-
-
/*************************************************************************/
/* */
/* <Function> */
@@ -203,6 +195,68 @@
FT_GlyphSlot slot = face->glyph;
+ if ( FT_IS_SFNT( face ) )
+ {
+ /* OpenType 1.7 mandates that the data from `hmtx' table be used; */
+ /* it is no longer necessary that those values are identical to */
+ /* the values in the `CFF' table */
+
+ TT_Face ttface = (TT_Face)face;
+ FT_Short dummy;
+
+
+ if ( flags & FT_LOAD_VERTICAL_LAYOUT )
+ {
+ /* check whether we have data from the `vmtx' table at all; */
+ /* otherwise we extract the info from the CFF glyphstrings */
+ /* (instead of synthesizing a global value using the `OS/2' */
+ /* table) */
+ if ( !ttface->vertical_info )
+ goto Missing_Table;
+
+ for ( nn = 0; nn < count; nn++ )
+ {
+ FT_UShort ah;
+
+
+ ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
+ 1,
+ start + nn,
+ &dummy,
+ &ah );
+
+ FT_TRACE5(( " idx %d: advance height %d font units\n",
+ start + nn, ah ));
+ advances[nn] = ah;
+ }
+ }
+ else
+ {
+ /* check whether we have data from the `hmtx' table at all */
+ if ( !ttface->horizontal.number_Of_HMetrics )
+ goto Missing_Table;
+
+ for ( nn = 0; nn < count; nn++ )
+ {
+ FT_UShort aw;
+
+
+ ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
+ 0,
+ start + nn,
+ &dummy,
+ &aw );
+
+ FT_TRACE5(( " idx %d: advance width %d font units\n",
+ start + nn, aw ));
+ advances[nn] = aw;
+ }
+ }
+
+ return error;
+ }
+
+ Missing_Table:
flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
for ( nn = 0; nn < count; nn++ )
@@ -352,7 +406,7 @@
font_info->italic_angle = dict->italic_angle;
font_info->is_fixed_pitch = dict->is_fixed_pitch;
font_info->underline_position = (FT_Short)dict->underline_position;
- font_info->underline_thickness = (FT_Short)dict->underline_thickness;
+ font_info->underline_thickness = (FT_UShort)dict->underline_thickness;
cff->font_info = font_info;
}
@@ -383,9 +437,27 @@
static const char*
cff_get_ps_name( CFF_Face face )
{
- CFF_Font cff = (CFF_Font)face->extra.data;
+ CFF_Font cff = (CFF_Font)face->extra.data;
+ SFNT_Service sfnt = (SFNT_Service)face->sfnt;
+ /* following the OpenType specification 1.7, we return the name stored */
+ /* in the `name' table for a CFF wrapped into an SFNT container */
+
+ if ( sfnt )
+ {
+ FT_Library library = FT_FACE_LIBRARY( face );
+ FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
+ FT_Service_PsFontName service =
+ (FT_Service_PsFontName)ft_module_get_service(
+ sfnt_module,
+ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME );
+
+
+ if ( service && service->get_ps_font_name )
+ return service->get_ps_font_name( FT_FACE( face ) );
+ }
+
return (const char*)cff->font_name;
}
@@ -723,7 +795,7 @@
#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
FT_DEFINE_SERVICEDESCREC7(
cff_services,
- FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CFF,
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
@@ -734,7 +806,7 @@
#else
FT_DEFINE_SERVICEDESCREC6(
cff_services,
- FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CFF,
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
diff --git a/freetype/src/cff/cffdrivr.h b/freetype/src/cff/cffdrivr.h
index 03e2e8b66..595ffca4c 100644
--- a/freetype/src/cff/cffdrivr.h
+++ b/freetype/src/cff/cffdrivr.h
@@ -4,7 +4,7 @@
/* */
/* High-level OpenType driver interface (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cfferrs.h b/freetype/src/cff/cfferrs.h
index 801d73ec6..543bdb07c 100644
--- a/freetype/src/cff/cfferrs.h
+++ b/freetype/src/cff/cfferrs.h
@@ -4,7 +4,7 @@
/* */
/* CFF error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffgload.c b/freetype/src/cff/cffgload.c
index 2426e889c..2756be1b6 100644
--- a/freetype/src/cff/cffgload.c
+++ b/freetype/src/cff/cffgload.c
@@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -273,8 +273,8 @@
builder->current = &loader->current.outline;
FT_GlyphLoader_Rewind( loader );
- builder->hints_globals = 0;
- builder->hints_funcs = 0;
+ builder->hints_globals = NULL;
+ builder->hints_funcs = NULL;
if ( hinting && size )
{
@@ -646,7 +646,7 @@
for ( n = 0; n < cff->num_glyphs; n++ )
{
if ( cff->charset.sids[n] == glyph_sid )
- return n;
+ return (FT_Int)n;
}
return -1;
@@ -672,7 +672,7 @@
*pointer = (FT_Byte*)data.pointer;
- *length = data.length;
+ *length = (FT_ULong)data.length;
return error;
}
@@ -707,7 +707,7 @@
data.pointer = *pointer;
- data.length = length;
+ data.length = (FT_Int)length;
face->root.internal->incremental_interface->funcs->free_glyph_data(
face->root.internal->incremental_interface->object, &data );
@@ -819,7 +819,7 @@
FT_GlyphLoader_Prepare( builder->loader );
/* First load `bchar' in builder */
- error = cff_get_glyph_data( face, bchar_index,
+ error = cff_get_glyph_data( face, (FT_UInt)bchar_index,
&charstring, &charstring_len );
if ( !error )
{
@@ -849,7 +849,7 @@
builder->pos_y = ady;
/* Now load `achar' on top of the base outline. */
- error = cff_get_glyph_data( face, achar_index,
+ error = cff_get_glyph_data( face, (FT_UInt)achar_index,
&charstring, &charstring_len );
if ( !error )
{
@@ -922,10 +922,10 @@
decoder->read_width = 1;
/* compute random seed from stack address of parameter */
- seed = (FT_Fixed)( ( (FT_PtrDist)(char*)&seed ^
- (FT_PtrDist)(char*)&decoder ^
- (FT_PtrDist)(char*)&charstring_base ) &
- FT_ULONG_MAX ) ;
+ seed = (FT_Fixed)( ( (FT_Offset)(char*)&seed ^
+ (FT_Offset)(char*)&decoder ^
+ (FT_Offset)(char*)&charstring_base ) &
+ FT_ULONG_MAX );
seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFFL;
if ( seed == 0 )
seed = 0x7384;
@@ -1373,12 +1373,12 @@
{
if ( op == cff_op_hintmask )
hinter->hintmask( hinter->hints,
- builder->current->n_points,
- decoder->num_hints,
+ (FT_UInt)builder->current->n_points,
+ (FT_UInt)decoder->num_hints,
ip );
else
hinter->counter( hinter->hints,
- decoder->num_hints,
+ (FT_UInt)decoder->num_hints,
ip );
}
@@ -1995,7 +1995,7 @@
if ( hinter )
{
if ( hinter->close( hinter->hints,
- builder->current->n_points ) )
+ (FT_UInt)builder->current->n_points ) )
goto Syntax_Error;
/* apply hints to the loaded glyph outline now */
@@ -2389,7 +2389,9 @@
decoder->locals_bias );
- FT_TRACE4(( " callsubr(%d)\n", idx ));
+ FT_TRACE4(( " callsubr (idx %d, entering level %d)\n",
+ idx,
+ zone - decoder->zones + 1 ));
if ( idx >= decoder->num_locals )
{
@@ -2431,7 +2433,9 @@
decoder->globals_bias );
- FT_TRACE4(( " callgsubr(%d)\n", idx ));
+ FT_TRACE4(( " callgsubr (idx %d, entering level %d)\n",
+ idx,
+ zone - decoder->zones + 1 ));
if ( idx >= decoder->num_globals )
{
@@ -2468,7 +2472,8 @@
break;
case cff_op_return:
- FT_TRACE4(( " return\n" ));
+ FT_TRACE4(( " return (leaving level %d)\n",
+ decoder->zone - decoder->zones ));
if ( decoder->zone <= decoder->zones )
{
@@ -2669,7 +2674,7 @@
error = sfnt->load_sbit_image( face,
size->strike_index,
glyph_index,
- (FT_Int)load_flags,
+ (FT_UInt)load_flags,
stream,
&glyph->root.bitmap,
&metrics );
@@ -2720,7 +2725,7 @@
face->vertical_info &&
face->vertical.number_Of_VMetrics > 0 );
- /* get the vertical metrics from the vtmx table if we have one */
+ /* get the vertical metrics from the vmtx table if we have one */
if ( has_vertical_info )
{
(void)( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
@@ -2757,16 +2762,16 @@
/* this scaling is only relevant if the PS hinter isn't active */
if ( cff->num_subfonts )
{
- FT_ULong top_upm, sub_upm;
- FT_Byte fd_index = cff_fd_select_get( &cff->fd_select,
- glyph_index );
+ FT_Long top_upm, sub_upm;
+ FT_Byte fd_index = cff_fd_select_get( &cff->fd_select,
+ glyph_index );
if ( fd_index >= cff->num_subfonts )
fd_index = (FT_Byte)( cff->num_subfonts - 1 );
- top_upm = cff->top_font.font_dict.units_per_em;
- sub_upm = cff->subfonts[fd_index]->font_dict.units_per_em;
+ top_upm = (FT_Long)cff->top_font.font_dict.units_per_em;
+ sub_upm = (FT_Long)cff->subfonts[fd_index]->font_dict.units_per_em;
font_matrix = cff->subfonts[fd_index]->font_dict.font_matrix;
@@ -2867,7 +2872,7 @@
/* fonts. */
if ( face->root.internal->incremental_interface )
{
- glyph->root.control_data = 0;
+ glyph->root.control_data = NULL;
glyph->root.control_len = 0;
}
else
@@ -2884,7 +2889,7 @@
{
glyph->root.control_data = csindex->bytes +
csindex->offsets[glyph_index] - 1;
- glyph->root.control_len = charstring_len;
+ glyph->root.control_len = (FT_Long)charstring_len;
}
}
@@ -2948,25 +2953,43 @@
FT_Bool has_vertical_info;
- /* copy the _unscaled_ advance width */
- metrics->horiAdvance = decoder.glyph_width;
- glyph->root.linearHoriAdvance = decoder.glyph_width;
+ if ( face->horizontal.number_Of_HMetrics )
+ {
+ FT_Short horiBearingX = 0;
+ FT_UShort horiAdvance = 0;
+
+
+ ( (SFNT_Service)face->sfnt )->get_metrics( face, 0,
+ glyph_index,
+ &horiBearingX,
+ &horiAdvance );
+ metrics->horiAdvance = horiAdvance;
+ metrics->horiBearingX = horiBearingX;
+ glyph->root.linearHoriAdvance = horiAdvance;
+ }
+ else
+ {
+ /* copy the _unscaled_ advance width */
+ metrics->horiAdvance = decoder.glyph_width;
+ glyph->root.linearHoriAdvance = decoder.glyph_width;
+ }
+
glyph->root.internal->glyph_transformed = 0;
has_vertical_info = FT_BOOL( face->vertical_info &&
face->vertical.number_Of_VMetrics > 0 );
- /* get the vertical metrics from the vtmx table if we have one */
+ /* get the vertical metrics from the vmtx table if we have one */
if ( has_vertical_info )
{
FT_Short vertBearingY = 0;
FT_UShort vertAdvance = 0;
- (void)( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
- glyph_index,
- &vertBearingY,
- &vertAdvance );
+ ( (SFNT_Service)face->sfnt )->get_metrics( face, 1,
+ glyph_index,
+ &vertBearingY,
+ &vertAdvance );
metrics->vertBearingY = vertBearingY;
metrics->vertAdvance = vertAdvance;
}
@@ -3041,7 +3064,9 @@
metrics->width = cbox.xMax - cbox.xMin;
metrics->height = cbox.yMax - cbox.yMin;
- metrics->horiBearingX = cbox.xMin;
+ if ( !face->horizontal.number_Of_HMetrics )
+ metrics->horiBearingX = cbox.xMin;
+
metrics->horiBearingY = cbox.yMax;
if ( has_vertical_info )
diff --git a/freetype/src/cff/cffgload.h b/freetype/src/cff/cffgload.h
index 83e4618e9..6ab7e4746 100644
--- a/freetype/src/cff/cffgload.h
+++ b/freetype/src/cff/cffgload.h
@@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (specification). */
/* */
-/* Copyright 1996-2004, 2006-2009, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -29,7 +29,12 @@ FT_BEGIN_HEADER
#define CFF_MAX_OPERANDS 48
-#define CFF_MAX_SUBRS_CALLS 32
+#define CFF_MAX_SUBRS_CALLS 16 /* maximum subroutine nesting; */
+ /* only 10 are allowed but there exist */
+ /* fonts like `HiraKakuProN-W3.ttf' */
+ /* (Hiragino Kaku Gothic ProN W3; */
+ /* 8.2d6e1; 2014-12-19) that exceed */
+ /* this limit */
#define CFF_MAX_TRANS_ELEMENTS 32
diff --git a/freetype/src/cff/cffload.c b/freetype/src/cff/cffload.c
index 0017f2efb..c7893bf24 100644
--- a/freetype/src/cff/cffload.c
+++ b/freetype/src/cff/cffload.c
@@ -4,7 +4,7 @@
/* */
/* OpenType and CFF data/program tables loader (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -357,7 +357,7 @@
case 3:
for ( ; p < p_end; p += 3, poff++ )
- poff[0] = FT_PEEK_OFF3( p );
+ poff[0] = FT_PEEK_UOFF3( p );
break;
default:
@@ -809,7 +809,7 @@
/* When multiple GIDs map to the same CID, we choose the lowest */
/* GID. This is not described in any spec, but it matches the */
/* behaviour of recent Acroread versions. */
- for ( j = num_glyphs - 1; j >= 0 ; j-- )
+ for ( j = (FT_Long)num_glyphs - 1; j >= 0 ; j-- )
charset->cids[charset->sids[j]] = (FT_UShort)j;
charset->max_cid = max_cid;
@@ -1447,7 +1447,7 @@
FT_ULong base_offset;
CFF_FontRecDict dict;
CFF_IndexRec string_index;
- FT_Int subfont_index;
+ FT_UInt subfont_index;
FT_ZERO( font );
@@ -1495,9 +1495,9 @@
if ( pure_cff )
{
/* well, we don't really forget the `disabled' fonts... */
- subfont_index = face_index;
+ subfont_index = (FT_UInt)face_index;
- if ( subfont_index >= (FT_Int)font->name_index.count )
+ if ( subfont_index >= font->name_index.count )
{
FT_ERROR(( "cff_font_load:"
" invalid subfont index for pure CFF font (%d)\n",
diff --git a/freetype/src/cff/cffload.h b/freetype/src/cff/cffload.h
index 804961964..459e7b044 100644
--- a/freetype/src/cff/cffload.h
+++ b/freetype/src/cff/cffload.h
@@ -4,7 +4,7 @@
/* */
/* OpenType & CFF data/program tables loader (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2007, 2008, 2010 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffobjs.c b/freetype/src/cff/cffobjs.c
index 383fc5ace..70a7c200f 100644
--- a/freetype/src/cff/cffobjs.c
+++ b/freetype/src/cff/cffobjs.c
@@ -4,7 +4,7 @@
/* */
/* OpenType objects manager (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -225,8 +225,8 @@
CFF_Font font = (CFF_Font)face->extra.data;
CFF_Internal internal = (CFF_Internal)size->internal;
- FT_ULong top_upm = font->top_font.font_dict.units_per_em;
- FT_UInt i;
+ FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em;
+ FT_UInt i;
funcs->set_scale( internal->topfont,
@@ -236,7 +236,7 @@
for ( i = font->num_subfonts; i > 0; i-- )
{
CFF_SubFont sub = font->subfonts[i - 1];
- FT_ULong sub_upm = sub->font_dict.units_per_em;
+ FT_Long sub_upm = (FT_Long)sub->font_dict.units_per_em;
FT_Pos x_scale, y_scale;
@@ -297,8 +297,8 @@
CFF_Font font = (CFF_Font)cffface->extra.data;
CFF_Internal internal = (CFF_Internal)size->internal;
- FT_ULong top_upm = font->top_font.font_dict.units_per_em;
- FT_UInt i;
+ FT_Long top_upm = (FT_Long)font->top_font.font_dict.units_per_em;
+ FT_UInt i;
funcs->set_scale( internal->topfont,
@@ -308,7 +308,7 @@
for ( i = font->num_subfonts; i > 0; i-- )
{
CFF_SubFont sub = font->subfonts[i - 1];
- FT_ULong sub_upm = sub->font_dict.units_per_em;
+ FT_Long sub_upm = (FT_Long)sub->font_dict.units_per_em;
FT_Pos x_scale, y_scale;
@@ -341,7 +341,7 @@
FT_LOCAL_DEF( void )
cff_slot_done( FT_GlyphSlot slot )
{
- slot->internal->glyph_hints = 0;
+ slot->internal->glyph_hints = NULL;
}
@@ -591,7 +591,7 @@
/* Note that this is only necessary for pure CFF and CEF fonts; */
/* SFNT based fonts use the `name' table instead. */
- cffface->num_glyphs = cff->num_glyphs;
+ cffface->num_glyphs = (FT_Long)cff->num_glyphs;
dict = &cff->top_font.font_dict;
@@ -645,7 +645,7 @@
if ( temp != 0x10000L )
{
- *upm = FT_DivFix( *upm, temp );
+ *upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp );
matrix->xx = FT_DivFix( matrix->xx, temp );
matrix->yx = FT_DivFix( matrix->yx, temp );
@@ -681,7 +681,8 @@
if ( top->has_font_matrix )
{
if ( top->units_per_em > 1 && sub->units_per_em > 1 )
- scaling = FT_MIN( top->units_per_em, sub->units_per_em );
+ scaling = (FT_Long)FT_MIN( top->units_per_em,
+ sub->units_per_em );
else
scaling = 1;
@@ -692,9 +693,10 @@
&top->font_matrix,
scaling );
- sub->units_per_em = FT_MulDiv( sub->units_per_em,
- top->units_per_em,
- scaling );
+ sub->units_per_em = (FT_ULong)
+ FT_MulDiv( (FT_Long)sub->units_per_em,
+ (FT_Long)top->units_per_em,
+ scaling );
}
}
else
@@ -712,7 +714,7 @@
if ( temp != 0x10000L )
{
- *upm = FT_DivFix( *upm, temp );
+ *upm = (FT_ULong)FT_DivFix( (FT_Long)*upm, temp );
matrix->xx = FT_DivFix( matrix->xx, temp );
matrix->yx = FT_DivFix( matrix->yx, temp );
@@ -732,13 +734,13 @@
/* set up num_faces */
- cffface->num_faces = cff->num_faces;
+ cffface->num_faces = (FT_Long)cff->num_faces;
/* compute number of glyphs */
if ( dict->cid_registry != 0xFFFFU )
- cffface->num_glyphs = cff->charset.max_cid + 1;
+ cffface->num_glyphs = (FT_Long)( cff->charset.max_cid + 1 );
else
- cffface->num_glyphs = cff->charstrings_index.count;
+ cffface->num_glyphs = (FT_Long)cff->charstrings_index.count;
/* set global bbox, as well as EM size */
cffface->bbox.xMin = dict->font_bbox.xMin >> 16;
@@ -762,7 +764,8 @@
(FT_Short)( dict->underline_thickness >> 16 );
/* retrieve font family & style name */
- cffface->family_name = cff_index_get_name( cff, face_index );
+ cffface->family_name = cff_index_get_name( cff,
+ (FT_UInt)face_index );
if ( cffface->family_name )
{
char* full = cff_index_get_sid_string( cff,
diff --git a/freetype/src/cff/cffobjs.h b/freetype/src/cff/cffobjs.h
index 12d94a063..a13ee0ec1 100644
--- a/freetype/src/cff/cffobjs.h
+++ b/freetype/src/cff/cffobjs.h
@@ -4,7 +4,7 @@
/* */
/* OpenType objects manager (specification). */
/* */
-/* Copyright 1996-2004, 2006-2008, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffparse.c b/freetype/src/cff/cffparse.c
index 82435a5ca..60639f0a6 100644
--- a/freetype/src/cff/cffparse.c
+++ b/freetype/src/cff/cffparse.c
@@ -4,7 +4,7 @@
/* */
/* CFF token stream parser (body) */
/* */
-/* Copyright 1996-2004, 2007-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -129,7 +129,7 @@
FT_Long* scaling )
{
FT_Byte* p = start;
- FT_UInt nib;
+ FT_Int nib;
FT_UInt phase;
FT_Long result, number, exponent;
@@ -166,7 +166,7 @@
}
/* Get the nibble. */
- nib = ( p[0] >> phase ) & 0xF;
+ nib = (FT_Int)( p[0] >> phase ) & 0xF;
phase = 4 - phase;
if ( nib == 0xE )
@@ -559,7 +559,7 @@
offset->x = cff_parse_fixed_scaled( data++, scaling );
offset->y = cff_parse_fixed_scaled( data, scaling );
- *upm = power_tens[scaling];
+ *upm = (FT_ULong)power_tens[scaling];
FT_TRACE4(( " [%f %f %f %f %f %f]\n",
(double)matrix->xx / *upm / 65536,
@@ -617,14 +617,34 @@
if ( parser->top >= parser->stack + 2 )
{
- dict->private_size = cff_parse_num( data++ );
- dict->private_offset = cff_parse_num( data );
+ FT_Long tmp;
+
+
+ tmp = cff_parse_num( data++ );
+ if ( tmp < 0 )
+ {
+ FT_ERROR(( "cff_parse_private_dict: Invalid dictionary size\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
+ dict->private_size = (FT_ULong)tmp;
+
+ tmp = cff_parse_num( data );
+ if ( tmp < 0 )
+ {
+ FT_ERROR(( "cff_parse_private_dict: Invalid dictionary offset\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
+ dict->private_offset = (FT_ULong)tmp;
+
FT_TRACE4(( " %lu %lu\n",
dict->private_size, dict->private_offset ));
error = FT_Err_Ok;
}
+ Fail:
return error;
}
diff --git a/freetype/src/cff/cffparse.h b/freetype/src/cff/cffparse.h
index 7d727510f..82e3ff757 100644
--- a/freetype/src/cff/cffparse.h
+++ b/freetype/src/cff/cffparse.h
@@ -4,7 +4,7 @@
/* */
/* CFF token stream parser (specification) */
/* */
-/* Copyright 1996-2003, 2011 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffpic.c b/freetype/src/cff/cffpic.c
index dacd22241..459cd6d41 100644
--- a/freetype/src/cff/cffpic.c
+++ b/freetype/src/cff/cffpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for cff module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cffpic.h b/freetype/src/cff/cffpic.h
index f64a21c43..e78cd1898 100644
--- a/freetype/src/cff/cffpic.h
+++ b/freetype/src/cff/cffpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for cff module. */
/* */
-/* Copyright 2009, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cfftoken.h b/freetype/src/cff/cfftoken.h
index bcb4276a7..5b32076ab 100644
--- a/freetype/src/cff/cfftoken.h
+++ b/freetype/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
/* */
/* CFF token definitions (specification only). */
/* */
-/* Copyright 1996-2003, 2011 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/cfftypes.h b/freetype/src/cff/cfftypes.h
index af33ba5e5..e9819d68d 100644
--- a/freetype/src/cff/cfftypes.h
+++ b/freetype/src/cff/cfftypes.h
@@ -5,7 +5,7 @@
/* Basic OpenType/CFF type definitions and interface (specification */
/* only). */
/* */
-/* Copyright 1996-2003, 2006-2008, 2010-2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cff/module.mk b/freetype/src/cff/module.mk
index ef1391c27..ba08ebcb7 100644
--- a/freetype/src/cff/module.mk
+++ b/freetype/src/cff/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cff/rules.mk b/freetype/src/cff/rules.mk
index 13115c255..7f6e857e2 100644
--- a/freetype/src/cff/rules.mk
+++ b/freetype/src/cff/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2001, 2003, 2011, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -18,7 +18,10 @@
CFF_DIR := $(SRC_DIR)/cff
-CFF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CFF_DIR))
+CFF_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(CFF_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# CFF driver sources (i.e., C files)
diff --git a/freetype/src/cid/Jamfile b/freetype/src/cid/Jamfile
index ebeaed54e..af00180b8 100644
--- a/freetype/src/cid/Jamfile
+++ b/freetype/src/cid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/cid Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cid/ciderrs.h b/freetype/src/cid/ciderrs.h
index ef1315550..5e0e776ee 100644
--- a/freetype/src/cid/ciderrs.h
+++ b/freetype/src/cid/ciderrs.h
@@ -4,7 +4,7 @@
/* */
/* CID error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cid/cidgload.c b/freetype/src/cid/cidgload.c
index c3db423fc..8531eb247 100644
--- a/freetype/src/cid/cidgload.c
+++ b/freetype/src/cid/cidgload.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 Glyph Loader (body). */
/* */
-/* Copyright 1996-2007, 2009, 2010, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -44,10 +44,10 @@
CID_Face face = (CID_Face)decoder->builder.face;
CID_FaceInfo cid = &face->cid;
FT_Byte* p;
- FT_UInt fd_select;
+ FT_ULong fd_select;
FT_Stream stream = face->cid_stream;
FT_Error error = FT_Err_Ok;
- FT_Byte* charstring = 0;
+ FT_Byte* charstring = NULL;
FT_Memory memory = face->root.memory;
FT_ULong glyph_length = 0;
PSAux_Service psaux = (PSAux_Service)face->psaux;
@@ -75,11 +75,11 @@
goto Exit;
p = (FT_Byte*)glyph_data.pointer;
- fd_select = (FT_UInt)cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
+ fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
if ( glyph_data.length != 0 )
{
- glyph_length = glyph_data.length - cid->fd_bytes;
+ glyph_length = (FT_ULong)( glyph_data.length - cid->fd_bytes );
(void)FT_ALLOC( charstring, glyph_length );
if ( !error )
ft_memcpy( charstring, glyph_data.pointer + cid->fd_bytes,
@@ -99,7 +99,7 @@
/* For ordinary fonts read the CID font dictionary index */
/* and charstring offset from the CIDMap. */
{
- FT_UInt entry_len = cid->fd_bytes + cid->gd_bytes;
+ FT_UInt entry_len = (FT_UInt)( cid->fd_bytes + cid->gd_bytes );
FT_ULong off1;
@@ -109,13 +109,13 @@
goto Exit;
p = (FT_Byte*)stream->cursor;
- fd_select = (FT_UInt) cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
- off1 = (FT_ULong)cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
+ fd_select = cid_get_offset( &p, (FT_Byte)cid->fd_bytes );
+ off1 = cid_get_offset( &p, (FT_Byte)cid->gd_bytes );
p += cid->fd_bytes;
glyph_length = cid_get_offset( &p, (FT_Byte)cid->gd_bytes ) - off1;
FT_FRAME_EXIT();
- if ( fd_select >= (FT_UInt)cid->num_dicts )
+ if ( fd_select >= (FT_ULong)cid->num_dicts )
{
error = FT_THROW( Invalid_Offset );
goto Exit;
@@ -133,7 +133,7 @@
{
CID_FaceDict dict;
CID_Subrs cid_subrs = face->subrs + fd_select;
- FT_Int cs_offset;
+ FT_UInt cs_offset;
/* Set up subrs */
@@ -151,7 +151,7 @@
/* Decode the charstring. */
/* Adjustment for seed bytes. */
- cs_offset = ( decoder->lenIV >= 0 ? decoder->lenIV : 0 );
+ cs_offset = decoder->lenIV >= 0 ? (FT_UInt)decoder->lenIV : 0;
/* Decrypt only if lenIV >= 0. */
if ( decoder->lenIV >= 0 )
@@ -159,7 +159,7 @@
error = decoder->funcs.parse_charstrings(
decoder, charstring + cs_offset,
- (FT_Int)glyph_length - cs_offset );
+ glyph_length - cs_offset );
}
FT_FREE( charstring );
diff --git a/freetype/src/cid/cidgload.h b/freetype/src/cid/cidgload.h
index a0a91bfea..4a10ce505 100644
--- a/freetype/src/cid/cidgload.h
+++ b/freetype/src/cid/cidgload.h
@@ -4,7 +4,7 @@
/* */
/* OpenType Glyph Loader (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2004 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cid/cidload.c b/freetype/src/cid/cidload.c
index c20ec6b42..fc688420c 100644
--- a/freetype/src/cid/cidload.c
+++ b/freetype/src/cid/cidload.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 font loader (body). */
/* */
-/* Copyright 1996-2006, 2009, 2011-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -38,7 +38,7 @@
/* read a single offset */
- FT_LOCAL_DEF( FT_Long )
+ FT_LOCAL_DEF( FT_ULong )
cid_get_offset( FT_Byte* *start,
FT_Byte offsize )
{
@@ -53,7 +53,7 @@
}
*start = p;
- return (FT_Long)result;
+ return result;
}
@@ -222,6 +222,12 @@
num_dicts = cid_parser_to_int( parser );
+ if ( num_dicts < 0 )
+ {
+ FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Exit;
+ }
if ( !cid->font_dicts )
{
@@ -231,7 +237,7 @@
if ( FT_NEW_ARRAY( cid->font_dicts, num_dicts ) )
goto Exit;
- cid->num_dicts = (FT_UInt)num_dicts;
+ cid->num_dicts = num_dicts;
/* don't forget to set a few defaults */
for ( n = 0; n < cid->num_dicts; n++ )
@@ -290,7 +296,7 @@
cid_parse_dict( CID_Face face,
CID_Loader* loader,
FT_Byte* base,
- FT_Long size )
+ FT_ULong size )
{
CID_Parser* parser = &loader->parser;
@@ -342,11 +348,11 @@
/* look for immediates */
if ( *cur == '/' && cur + 2 < limit )
{
- FT_PtrDist len;
+ FT_UInt len;
cur++;
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
if ( len > 0 && len < 22 )
{
@@ -363,10 +369,10 @@
if ( !name )
break;
- if ( cur[0] == name[0] &&
- len == (FT_PtrDist)ft_strlen( (const char*)name ) )
+ if ( cur[0] == name[0] &&
+ len == ft_strlen( (const char*)name ) )
{
- FT_PtrDist n;
+ FT_UInt n;
for ( n = 1; n < len; n++ )
@@ -407,7 +413,7 @@
FT_Int n;
CID_Subrs subr;
FT_UInt max_offsets = 0;
- FT_ULong* offsets = 0;
+ FT_ULong* offsets = NULL;
PSAux_Service psaux = (PSAux_Service)face->psaux;
@@ -450,8 +456,8 @@
}
/* read the subrmap's offsets */
- if ( FT_STREAM_SEEK( cid->data_offset + dict->subrmap_offset ) ||
- FT_FRAME_ENTER( ( num_subrs + 1 ) * dict->sd_bytes ) )
+ if ( FT_STREAM_SEEK( cid->data_offset + dict->subrmap_offset ) ||
+ FT_FRAME_ENTER( ( num_subrs + 1 ) * (FT_UInt)dict->sd_bytes ) )
goto Fail;
p = (FT_Byte*)stream->cursor;
@@ -500,7 +506,7 @@
}
}
- subr->num_subrs = num_subrs;
+ subr->num_subrs = (FT_Int)num_subrs;
}
Exit:
@@ -546,7 +552,7 @@
static FT_Error
cid_hex_to_binary( FT_Byte* data,
- FT_Long data_len,
+ FT_ULong data_len,
FT_ULong offset,
CID_Face face )
{
diff --git a/freetype/src/cid/cidload.h b/freetype/src/cid/cidload.h
index dba1602d8..f9c073cf3 100644
--- a/freetype/src/cid/cidload.h
+++ b/freetype/src/cid/cidload.h
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 font loader (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2004 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -36,7 +36,7 @@ FT_BEGIN_HEADER
} CID_Loader;
- FT_LOCAL( FT_Long )
+ FT_LOCAL( FT_ULong )
cid_get_offset( FT_Byte** start,
FT_Byte offsize );
diff --git a/freetype/src/cid/cidobjs.c b/freetype/src/cid/cidobjs.c
index afb8e10a2..862cde793 100644
--- a/freetype/src/cid/cidobjs.c
+++ b/freetype/src/cid/cidobjs.c
@@ -4,7 +4,7 @@
/* */
/* CID objects manager (body). */
/* */
-/* Copyright 1996-2006, 2008, 2010-2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -49,7 +49,7 @@
FT_LOCAL_DEF( void )
cid_slot_done( FT_GlyphSlot slot )
{
- slot->internal->glyph_hints = 0;
+ slot->internal->glyph_hints = NULL;
}
@@ -122,7 +122,7 @@
if ( funcs )
funcs->destroy( (PSH_Globals)cidsize->internal );
- cidsize->internal = 0;
+ cidsize->internal = NULL;
}
}
@@ -243,8 +243,8 @@
FT_FREE( cid->registry );
FT_FREE( cid->ordering );
- cidface->family_name = 0;
- cidface->style_name = 0;
+ cidface->family_name = NULL;
+ cidface->style_name = NULL;
FT_FREE( face->binary_data );
FT_FREE( face->cid_stream );
@@ -351,7 +351,7 @@
PS_FontInfo info = &cid->font_info;
- cidface->num_glyphs = cid->cid_count;
+ cidface->num_glyphs = (FT_Long)cid->cid_count;
cidface->num_charmaps = 0;
cidface->face_index = face_index;
@@ -421,7 +421,7 @@
/* no embedded bitmap support */
cidface->num_fixed_sizes = 0;
- cidface->available_sizes = 0;
+ cidface->available_sizes = NULL;
cidface->bbox.xMin = cid->font_bbox.xMin >> 16;
cidface->bbox.yMin = cid->font_bbox.yMin >> 16;
diff --git a/freetype/src/cid/cidobjs.h b/freetype/src/cid/cidobjs.h
index 0b779a35c..b7488968c 100644
--- a/freetype/src/cid/cidobjs.h
+++ b/freetype/src/cid/cidobjs.h
@@ -4,7 +4,7 @@
/* */
/* CID objects manager (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2004, 2006 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cid/cidparse.c b/freetype/src/cid/cidparse.c
index e86adf62b..90638e969 100644
--- a/freetype/src/cid/cidparse.c
+++ b/freetype/src/cid/cidparse.c
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 parser (body). */
/* */
-/* Copyright 1996-2007, 2009, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -86,13 +86,13 @@
/* `StartData' or `/sfnts' */
{
FT_Byte buffer[256 + 10];
- FT_Long read_len = 256 + 10; /* same as signed FT_Stream->size */
+ FT_ULong read_len = 256 + 10;
FT_Byte* p = buffer;
for ( offset = FT_STREAM_POS(); ; offset += 256 )
{
- FT_Long stream_len; /* same as signed FT_Stream->size */
+ FT_ULong stream_len;
stream_len = stream->size - FT_STREAM_POS();
@@ -176,7 +176,18 @@
if ( cur[0] == 'S' && ft_strncmp( (char*)cur, "StartData", 9 ) == 0 )
{
if ( ft_strncmp( (char*)arg1, "(Hex)", 5 ) == 0 )
- parser->binary_length = ft_atol( (const char *)arg2 );
+ {
+ FT_Long tmp = ft_atol( (const char *)arg2 );
+
+
+ if ( tmp < 0 )
+ {
+ FT_ERROR(( "cid_parser_new: invalid length of hex data\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ }
+ else
+ parser->binary_length = (FT_ULong)tmp;
+ }
goto Exit;
}
diff --git a/freetype/src/cid/cidparse.h b/freetype/src/cid/cidparse.h
index f0baff5c0..5344a440a 100644
--- a/freetype/src/cid/cidparse.h
+++ b/freetype/src/cid/cidparse.h
@@ -4,7 +4,7 @@
/* */
/* CID-keyed Type1 parser (specification). */
/* */
-/* Copyright 1996-2004, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -64,11 +64,11 @@ FT_BEGIN_HEADER
FT_Stream stream;
FT_Byte* postscript;
- FT_Long postscript_len;
+ FT_ULong postscript_len;
FT_ULong data_offset;
- FT_Long binary_length;
+ FT_ULong binary_length;
CID_FaceInfo cid;
FT_Int num_dict;
diff --git a/freetype/src/cid/cidriver.c b/freetype/src/cid/cidriver.c
index 217d06ee2..1d5c24ba5 100644..100755
--- a/freetype/src/cid/cidriver.c
+++ b/freetype/src/cid/cidriver.c
@@ -4,7 +4,7 @@
/* */
/* CID driver interface (body). */
/* */
-/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -24,7 +24,7 @@
#include "ciderrs.h"
#include FT_SERVICE_POSTSCRIPT_NAME_H
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#include <internal/services/svpsinfo.h>
#include FT_SERVICE_CID_H
@@ -168,7 +168,7 @@
static const FT_ServiceDescRec cid_services[] =
{
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CID },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CID },
{ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info },
{ FT_SERVICE_ID_CID, &cid_service_cid_info },
diff --git a/freetype/src/cid/cidriver.h b/freetype/src/cid/cidriver.h
index 049bfd658..08f4b1e0b 100644
--- a/freetype/src/cid/cidriver.h
+++ b/freetype/src/cid/cidriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level CID driver interface (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cid/cidtoken.h b/freetype/src/cid/cidtoken.h
index 904cb09cf..82eae0ca6 100644
--- a/freetype/src/cid/cidtoken.h
+++ b/freetype/src/cid/cidtoken.h
@@ -4,7 +4,7 @@
/* */
/* CID token definitions (specification only). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2006, 2008, 2009 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/cid/module.mk b/freetype/src/cid/module.mk
index ce30bfd7a..e312a3ca1 100644
--- a/freetype/src/cid/module.mk
+++ b/freetype/src/cid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/cid/rules.mk b/freetype/src/cid/rules.mk
index f36274461..282f2aad7 100644
--- a/freetype/src/cid/rules.mk
+++ b/freetype/src/cid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2001, 2003 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -18,7 +18,10 @@
CID_DIR := $(SRC_DIR)/cid
-CID_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CID_DIR))
+CID_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(CID_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# CID driver sources (i.e., C files)
diff --git a/freetype/src/cid/type1cid.c b/freetype/src/cid/type1cid.c
index 0b866e97c..0d54ca7f4 100644
--- a/freetype/src/cid/type1cid.c
+++ b/freetype/src/cid/type1cid.c
@@ -4,7 +4,7 @@
/* */
/* FreeType OpenType driver component (body only). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/Jamfile b/freetype/src/gxvalid/Jamfile
index 88049a625..9419067bd 100644
--- a/freetype/src/gxvalid/Jamfile
+++ b/freetype/src/gxvalid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/gxvalid Jamfile
#
-# Copyright 2005 by
+# Copyright 2005-2015 by
# suzuki toshiya, Masatake YAMATO and Red Hat K.K.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/gxvalid/README b/freetype/src/gxvalid/README
index 28e535b0b..60f2fc185 100644
--- a/freetype/src/gxvalid/README
+++ b/freetype/src/gxvalid/README
@@ -518,7 +518,7 @@ gxvalid: TrueType GX validator
------------------------------------------------------------------------
-Copyright 2004, 2005, 2007 by
+Copyright 2004-2015 by
suzuki toshiya, Masatake YAMATO, Red hat K.K.,
David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/freetype/src/gxvalid/gxvalid.c b/freetype/src/gxvalid/gxvalid.c
index bc36e675d..7b5b0914d 100644
--- a/freetype/src/gxvalid/gxvalid.c
+++ b/freetype/src/gxvalid/gxvalid.c
@@ -4,7 +4,8 @@
/* */
/* FreeType validator for TrueTypeGX/AAT tables (body only). */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvalid.h b/freetype/src/gxvalid/gxvalid.h
index fb7d10e9d..28059654e 100644
--- a/freetype/src/gxvalid/gxvalid.h
+++ b/freetype/src/gxvalid/gxvalid.h
@@ -4,7 +4,8 @@
/* */
/* TrueTyeeGX/AAT table validation (specification only). */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvbsln.c b/freetype/src/gxvalid/gxvbsln.c
index d16511876..1b17a5d03 100644
--- a/freetype/src/gxvalid/gxvbsln.c
+++ b/freetype/src/gxvalid/gxvbsln.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT bsln table validation (body). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -226,7 +227,7 @@
FT_INVALID_DATA;
}
else
- gxv_ctlPoint_validate( stdGlyph, (FT_Short)ctlPoint, gxvalid );
+ gxv_ctlPoint_validate( stdGlyph, ctlPoint, gxvalid );
}
GXV_EXIT;
diff --git a/freetype/src/gxvalid/gxvcommn.c b/freetype/src/gxvalid/gxvcommn.c
index 8e72a72f4..93f6ffbe2 100644
--- a/freetype/src/gxvalid/gxvcommn.c
+++ b/freetype/src/gxvalid/gxvcommn.c
@@ -4,8 +4,8 @@
/* */
/* TrueTypeGX/AAT common tables validation (body). */
/* */
-/* Copyright 2004, 2005, 2009, 2010, 2013 */
-/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -202,7 +202,7 @@
*max = (FT_Byte)FT_MAX( *max, val );
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -231,7 +231,7 @@
*max = (FT_Byte)FT_MAX( *max, val );
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -367,7 +367,7 @@
if ( *nUnits_p == 0 )
*nUnits_p = binSrchHeader.nUnits;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -449,7 +449,7 @@
gxvalid->lookupval_func( i, &value, gxvalid );
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -486,7 +486,7 @@
p += unitSize;
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -555,7 +555,7 @@
gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, gxvalid );
p += gxvalid->subtable_length;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -636,7 +636,7 @@
gxv_LookupTable_fmt2_skip_endmarkers( p, unitSize, gxvalid );
p += gxvalid->subtable_length;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -657,7 +657,7 @@
p += unitSize;
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -709,7 +709,7 @@
gxv_LookupTable_fmt6_skip_endmarkers( p, unitSize, gxvalid );
p += gxvalid->subtable_length;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -746,7 +746,7 @@
gxvalid->lookupval_func( (FT_UShort)( firstGlyph + i ), &value, gxvalid );
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -795,7 +795,7 @@
func( p, limit, gxvalid );
p += gxvalid->subtable_length;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -844,7 +844,7 @@
FT_LOCAL_DEF( void )
gxv_ctlPoint_validate( FT_UShort gid,
- FT_Short ctl_point,
+ FT_UShort ctl_point,
GXV_Validator gxvalid )
{
FT_Face face;
@@ -852,7 +852,7 @@
FT_GlyphSlot glyph;
FT_Outline outline;
- short n_points;
+ FT_UShort n_points;
face = gxvalid->face;
@@ -865,8 +865,7 @@
glyph = face->glyph;
outline = glyph->outline;
- n_points = outline.n_points;
-
+ n_points = (FT_UShort)outline.n_points;
if ( !( ctl_point < n_points ) )
FT_INVALID_DATA;
@@ -1449,7 +1448,7 @@
GXV_TRACE(( "parsed: maxState=%d, maxEntry=%d\n",
*maxState_p, *maxEntry_p ));
- *length_p = p - table;
+ *length_p = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -1550,7 +1549,7 @@
}
Exit:
- *length_p = p - table;
+ *length_p = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -1605,7 +1604,7 @@
else
setup_func = gxv_XStateTable_subtable_setup;
- setup_func( limit - table,
+ setup_func( (FT_ULong)( limit - table ),
classTable,
stateArray,
entryTable,
diff --git a/freetype/src/gxvalid/gxvcommn.h b/freetype/src/gxvalid/gxvcommn.h
index 17efb7516..c67672c35 100644
--- a/freetype/src/gxvalid/gxvcommn.h
+++ b/freetype/src/gxvalid/gxvcommn.h
@@ -4,8 +4,8 @@
/* */
/* TrueTypeGX/AAT common tables validation (specification). */
/* */
-/* Copyright 2004, 2005, 2012, 2014 */
-/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -404,7 +404,7 @@ FT_BEGIN_HEADER
FT_LOCAL( void )
gxv_ctlPoint_validate( FT_UShort gid,
- FT_Short ctl_point,
+ FT_UShort ctl_point,
GXV_Validator gxvalid );
diff --git a/freetype/src/gxvalid/gxverror.h b/freetype/src/gxvalid/gxverror.h
index c573b72de..6bbc23aa0 100644
--- a/freetype/src/gxvalid/gxverror.h
+++ b/freetype/src/gxvalid/gxverror.h
@@ -4,8 +4,8 @@
/* */
/* TrueTypeGX/AAT validation module error codes (specification only). */
/* */
-/* Copyright 2004, 2005, 2012-2013 */
-/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvfeat.c b/freetype/src/gxvalid/gxvfeat.c
index 69298b286..0da977764 100644
--- a/freetype/src/gxvalid/gxvfeat.c
+++ b/freetype/src/gxvalid/gxvfeat.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT feat table validation (body). */
/* */
-/* Copyright 2004, 2005, 2008, 2012 by */
+/* Copyright 2004-2015 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
diff --git a/freetype/src/gxvalid/gxvfeat.h b/freetype/src/gxvalid/gxvfeat.h
index 049d23a0b..b617df5d5 100644
--- a/freetype/src/gxvalid/gxvfeat.h
+++ b/freetype/src/gxvalid/gxvfeat.h
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT feat table validation (specification). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvfgen.c b/freetype/src/gxvalid/gxvfgen.c
index e48778a2a..75c5e20d2 100644
--- a/freetype/src/gxvalid/gxvfgen.c
+++ b/freetype/src/gxvalid/gxvfgen.c
@@ -5,7 +5,8 @@
/* Generate feature registry data for gxv `feat' validator. */
/* This program is derived from gxfeatreg.c in gxlayout. */
/* */
-/* Copyright 2004, 2005, 2006 by Masatake YAMATO and Redhat K.K. */
+/* Copyright 2004-2015 by */
+/* Masatake YAMATO and Redhat K.K. */
/* */
/* This file may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/src/gxvalid/gxvjust.c b/freetype/src/gxvalid/gxvjust.c
index 24c26a565..55b44bc2a 100644
--- a/freetype/src/gxvalid/gxvjust.c
+++ b/freetype/src/gxvalid/gxvjust.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT just table validation (body). */
/* */
-/* Copyright 2005, 2014 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -41,7 +42,7 @@
/*
* referred `just' table format specification:
- * http://developer.apple.com/fonts/TTRefMan/RM06/Chap6just.html
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6just.html
* last updated 2000.
* ----------------------------------------------
* [JUST HEADER]: GXV_JUST_HEADER_SIZE
@@ -120,7 +121,7 @@
GXV_SET_ERR_IF_PARANOID( FT_INVALID_DATA );
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -142,7 +143,7 @@
p += gxvalid->subtable_length;
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -167,7 +168,7 @@
p += gxvalid->subtable_length;
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -191,8 +192,8 @@
GXV_LIMIT_CHECK( 4 + 4 + 2 + 2 );
- lowerLimit = FT_NEXT_ULONG( p );
- upperLimit = FT_NEXT_ULONG( p );
+ lowerLimit = FT_NEXT_LONG( p );
+ upperLimit = FT_NEXT_LONG( p );
#ifdef GXV_LOAD_UNUSED_VARS
order = FT_NEXT_USHORT( p );
#else
@@ -217,7 +218,7 @@
gxv_just_check_max_gid( glyphs, "type0:glyphs", gxvalid );
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -235,7 +236,7 @@
gxv_just_check_max_gid( addGlyph, "type1:addGlyph", gxvalid );
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -266,7 +267,7 @@
gxv_just_check_max_gid( substGlyph, "type2:substGlyph", gxvalid );
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -284,11 +285,11 @@
GXV_LIMIT_CHECK( 4 + 4 + 4 + 4 );
variantsAxis = FT_NEXT_ULONG( p );
- minimumLimit = FT_NEXT_ULONG( p );
- noStretchValue = FT_NEXT_ULONG( p );
- maximumLimit = FT_NEXT_ULONG( p );
+ minimumLimit = FT_NEXT_LONG( p );
+ noStretchValue = FT_NEXT_LONG( p );
+ maximumLimit = FT_NEXT_LONG( p );
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
if ( variantsAxis != 0x64756374L ) /* 'duct' */
GXV_TRACE(( "variantsAxis 0x%08x is non default value",
@@ -326,7 +327,7 @@
flags ));
gxv_just_check_max_gid( glyph, "type5:glyph", gxvalid );
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
}
@@ -394,7 +395,7 @@
p += gxvalid->subtable_length;
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -453,7 +454,7 @@
gxv_just_pcActionRecord_validate( p, limit, gxvalid );
p += gxvalid->subtable_length;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -676,7 +677,8 @@
format = FT_NEXT_USHORT( p );
horizOffset = FT_NEXT_USHORT( p );
vertOffset = FT_NEXT_USHORT( p );
- gxv_odtect_add_range( table, p - table, "just header", odtect );
+ gxv_odtect_add_range( table, (FT_ULong)( p - table ),
+ "just header", odtect );
/* Version 1.0 (always:2000) */
diff --git a/freetype/src/gxvalid/gxvkern.c b/freetype/src/gxvalid/gxvkern.c
index 787e3db83..f257c0376 100644
--- a/freetype/src/gxvalid/gxvkern.c
+++ b/freetype/src/gxvalid/gxvkern.c
@@ -4,8 +4,8 @@
/* */
/* TrueTypeGX/AAT kern table validation (body). */
/* */
-/* Copyright 2004-2007, 2013 */
-/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -549,7 +549,7 @@
}
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -779,7 +779,7 @@
#ifdef GXV_LOAD_TRACE_VARS
version = 0;
#endif
- length = ( u16[0] << 16 ) + u16[1];
+ length = ( (FT_ULong)u16[0] << 16 ) + u16[1];
#ifdef GXV_LOAD_TRACE_VARS
tupleIndex = 0;
#endif
diff --git a/freetype/src/gxvalid/gxvlcar.c b/freetype/src/gxvalid/gxvlcar.c
index 48308b024..af589fdb6 100644
--- a/freetype/src/gxvalid/gxvlcar.c
+++ b/freetype/src/gxvalid/gxvlcar.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT lcar table validation (body). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -65,7 +66,7 @@
/*************************************************************************/
static void
- gxv_lcar_partial_validate( FT_UShort partial,
+ gxv_lcar_partial_validate( FT_Short partial,
FT_UShort glyph,
GXV_Validator gxvalid )
{
@@ -74,7 +75,7 @@
if ( GXV_LCAR_DATA( format ) != 1 )
goto Exit;
- gxv_ctlPoint_validate( glyph, partial, gxvalid );
+ gxv_ctlPoint_validate( glyph, (FT_UShort)partial, gxvalid );
Exit:
GXV_EXIT;
@@ -202,7 +203,7 @@
GXV_INIT;
GXV_LIMIT_CHECK( 4 + 2 );
- version = FT_NEXT_ULONG( p );
+ version = FT_NEXT_LONG( p );
GXV_LCAR_DATA( format ) = FT_NEXT_USHORT( p );
if ( version != 0x00010000UL)
diff --git a/freetype/src/gxvalid/gxvmod.c b/freetype/src/gxvalid/gxvmod.c
index 7d5cbae48..50f44dcf4 100644
--- a/freetype/src/gxvalid/gxvmod.c
+++ b/freetype/src/gxvalid/gxvmod.c
@@ -4,8 +4,8 @@
/* */
/* FreeType's TrueTypeGX/AAT validation module implementation (body). */
/* */
-/* Copyright 2004-2006, 2013 */
-/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmod.h b/freetype/src/gxvalid/gxvmod.h
index 22732ba99..1ff2cfc8b 100644
--- a/freetype/src/gxvalid/gxvmod.h
+++ b/freetype/src/gxvalid/gxvmod.h
@@ -5,7 +5,8 @@
/* FreeType's TrueTypeGX/AAT validation module implementation */
/* (specification). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmort.c b/freetype/src/gxvalid/gxvmort.c
index 55ff5a851..a9e7a58fe 100644
--- a/freetype/src/gxvalid/gxvmort.c
+++ b/freetype/src/gxvalid/gxvmort.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT mort table validation (body). */
/* */
-/* Copyright 2005, 2013 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -112,7 +113,7 @@
if ( !IS_GXV_MORT_FEATURE_OFF( f ) )
FT_INVALID_DATA;
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -213,7 +214,7 @@
/* TODO: validate subFeatureFlags */
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
diff --git a/freetype/src/gxvalid/gxvmort.h b/freetype/src/gxvalid/gxvmort.h
index 8e62e52db..c95391b61 100644
--- a/freetype/src/gxvalid/gxvmort.h
+++ b/freetype/src/gxvalid/gxvmort.h
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT common definition for mort table (specification). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmort0.c b/freetype/src/gxvalid/gxvmort0.c
index f19016efd..0cace35ae 100644
--- a/freetype/src/gxvalid/gxvmort0.c
+++ b/freetype/src/gxvalid/gxvmort0.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type0 (Indic Script Rearrangement) subtable. */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmort1.c b/freetype/src/gxvalid/gxvmort1.c
index 0189504ed..aa02df5a9 100644
--- a/freetype/src/gxvalid/gxvmort1.c
+++ b/freetype/src/gxvalid/gxvmort1.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type1 (Contextual Substitution) subtable. */
/* */
-/* Copyright 2005, 2007 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -155,7 +156,7 @@
setMark = (FT_UShort)( flags >> 15 );
dontAdvance = (FT_UShort)( ( flags >> 14 ) & 1 );
#endif
- reserved = (FT_Short)( flags & 0x3FFF );
+ reserved = (FT_UShort)( flags & 0x3FFF );
markOffset = (FT_Short)( glyphOffset_p->ul >> 16 );
currentOffset = (FT_Short)( glyphOffset_p->ul );
diff --git a/freetype/src/gxvalid/gxvmort2.c b/freetype/src/gxvalid/gxvmort2.c
index 099ffd48c..6f56c94ca 100644
--- a/freetype/src/gxvalid/gxvmort2.c
+++ b/freetype/src/gxvalid/gxvmort2.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type2 (Ligature Substitution) subtable. */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -302,7 +303,7 @@
p += gxvalid->subtable_length;
gxv_mort_subtable_type2_ligatureTable_validate( table, gxvalid );
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
diff --git a/freetype/src/gxvalid/gxvmort4.c b/freetype/src/gxvalid/gxvmort4.c
index 9e86af4dd..535f37716 100644
--- a/freetype/src/gxvalid/gxvmort4.c
+++ b/freetype/src/gxvalid/gxvmort4.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type4 (Non-Contextual Glyph Substitution) subtable. */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmort5.c b/freetype/src/gxvalid/gxvmort5.c
index 9498b1085..fb2f915fc 100644
--- a/freetype/src/gxvalid/gxvmort5.c
+++ b/freetype/src/gxvalid/gxvmort5.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT mort table validation */
/* body for type5 (Contextual Glyph Insertion) subtable. */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmorx.c b/freetype/src/gxvalid/gxvmorx.c
index 96dba631c..1c6b3f297 100644
--- a/freetype/src/gxvalid/gxvmorx.c
+++ b/freetype/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
/* */
/* TrueTypeGX/AAT morx table validation (body). */
/* */
-/* Copyright 2005, 2008, 2013 by */
+/* Copyright 2005-2015 by */
/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
@@ -107,7 +107,7 @@
p += rest;
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
diff --git a/freetype/src/gxvalid/gxvmorx.h b/freetype/src/gxvalid/gxvmorx.h
index 9ed907acd..60efdfd0c 100644
--- a/freetype/src/gxvalid/gxvmorx.h
+++ b/freetype/src/gxvalid/gxvmorx.h
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT common definition for morx table (specification). */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmorx0.c b/freetype/src/gxvalid/gxvmorx0.c
index db165f4e8..e340baa5e 100644
--- a/freetype/src/gxvalid/gxvmorx0.c
+++ b/freetype/src/gxvalid/gxvmorx0.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type0 (Indic Script Rearrangement) subtable. */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmorx1.c b/freetype/src/gxvalid/gxvmorx1.c
index 49f53d185..7ba290914 100644
--- a/freetype/src/gxvalid/gxvmorx1.c
+++ b/freetype/src/gxvalid/gxvmorx1.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type1 (Contextual Substitution) subtable. */
/* */
-/* Copyright 2005, 2007 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -148,11 +149,11 @@
if ( optdata->substitutionTable_num_lookupTables < markIndex + 1 )
optdata->substitutionTable_num_lookupTables =
- (FT_Short)( markIndex + 1 );
+ (FT_UShort)( markIndex + 1 );
if ( optdata->substitutionTable_num_lookupTables < currentIndex + 1 )
optdata->substitutionTable_num_lookupTables =
- (FT_Short)( currentIndex + 1 );
+ (FT_UShort)( currentIndex + 1 );
}
diff --git a/freetype/src/gxvalid/gxvmorx2.c b/freetype/src/gxvalid/gxvmorx2.c
index e44445d14..51e305580 100644
--- a/freetype/src/gxvalid/gxvmorx2.c
+++ b/freetype/src/gxvalid/gxvmorx2.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type2 (Ligature Substitution) subtable. */
/* */
-/* Copyright 2005, 2013 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -188,7 +189,8 @@
/* it is different from the location offset in mort */
if ( ( offset & 0x3FFF0000UL ) == 0x3FFF0000UL )
{ /* negative offset */
- gid_limit = gxvalid->face->num_glyphs - ( offset & 0x0000FFFFUL );
+ gid_limit = gxvalid->face->num_glyphs -
+ (FT_Long)( offset & 0x0000FFFFUL );
if ( gid_limit > 0 )
return;
diff --git a/freetype/src/gxvalid/gxvmorx4.c b/freetype/src/gxvalid/gxvmorx4.c
index 68ab67849..c42677d45 100644
--- a/freetype/src/gxvalid/gxvmorx4.c
+++ b/freetype/src/gxvalid/gxvmorx4.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT morx table validation */
/* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */
/* */
-/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvmorx5.c b/freetype/src/gxvalid/gxvmorx5.c
index 5e095dd38..7ac872f9d 100644
--- a/freetype/src/gxvalid/gxvmorx5.c
+++ b/freetype/src/gxvalid/gxvmorx5.c
@@ -5,7 +5,8 @@
/* TrueTypeGX/AAT morx table validation */
/* body for type5 (Contextual Glyph Insertion) subtable. */
/* */
-/* Copyright 2005, 2007 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2005-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/gxvalid/gxvopbd.c b/freetype/src/gxvalid/gxvopbd.c
index ab0cd72bf..7cd5163b1 100644
--- a/freetype/src/gxvalid/gxvopbd.c
+++ b/freetype/src/gxvalid/gxvopbd.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT opbd table validation (body). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -90,7 +91,7 @@
if ( delta_value == -1 )
continue;
- gxv_ctlPoint_validate( glyph, delta_value, gxvalid );
+ gxv_ctlPoint_validate( glyph, (FT_UShort)delta_value, gxvalid );
}
else /* format 0, value is distance */
continue;
diff --git a/freetype/src/gxvalid/gxvprop.c b/freetype/src/gxvalid/gxvprop.c
index aa5c8eed3..ecc3c94d2 100644
--- a/freetype/src/gxvalid/gxvprop.c
+++ b/freetype/src/gxvalid/gxvprop.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT prop table validation (body). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -278,7 +279,7 @@
GXV_INIT;
GXV_LIMIT_CHECK( 4 + 2 + 2 );
- version = FT_NEXT_ULONG( p );
+ version = FT_NEXT_LONG( p );
format = FT_NEXT_USHORT( p );
defaultProp = FT_NEXT_USHORT( p );
diff --git a/freetype/src/gxvalid/gxvtrak.c b/freetype/src/gxvalid/gxvtrak.c
index 3ec1a5673..c4d29e4df 100644
--- a/freetype/src/gxvalid/gxvtrak.c
+++ b/freetype/src/gxvalid/gxvtrak.c
@@ -4,7 +4,8 @@
/* */
/* TrueTypeGX/AAT trak table validation (body). */
/* */
-/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
+/* Copyright 2004-2015 by */
+/* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -48,7 +49,7 @@
/*
* referred track table format specification:
- * http://developer.apple.com/fonts/TTRefMan/RM06/Chap6trak.html
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6trak.html
* last update was 1996.
* ----------------------------------------------
* [MINIMUM HEADER]: GXV_TRAK_SIZE_MIN
@@ -134,7 +135,7 @@
}
}
- gxvalid->subtable_length = p - table;
+ gxvalid->subtable_length = (FT_ULong)( p - table );
GXV_EXIT;
}
@@ -161,7 +162,8 @@
nSizes = FT_NEXT_USHORT( p );
sizeTableOffset = FT_NEXT_ULONG( p );
- gxv_odtect_add_range( table, p - table, "trackData header", odtect );
+ gxv_odtect_add_range( table, (FT_ULong)( p - table ),
+ "trackData header", odtect );
/* validate trackTable */
gxv_trak_trackTable_validate( p, limit, nTracks, gxvalid );
diff --git a/freetype/src/gxvalid/module.mk b/freetype/src/gxvalid/module.mk
index 9fd098e2c..1d7649478 100644
--- a/freetype/src/gxvalid/module.mk
+++ b/freetype/src/gxvalid/module.mk
@@ -2,9 +2,9 @@
# FreeType 2 gxvalid module definition
#
-# Copyright 2004, 2005, 2006
-# by suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
-# David Turner, Robert Wilhelm, and Werner Lemberg.
+# Copyright 2004-2015 by
+# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
+# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
diff --git a/freetype/src/gxvalid/rules.mk b/freetype/src/gxvalid/rules.mk
index 57bc0823d..44a2d4325 100644
--- a/freetype/src/gxvalid/rules.mk
+++ b/freetype/src/gxvalid/rules.mk
@@ -3,7 +3,8 @@
#
-# Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
+# Copyright 2004-2015 by
+# suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +21,10 @@ GXV_DIR := $(SRC_DIR)/gxvalid
# compilation flags for the driver
#
-GXV_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GXV_DIR))
+GXV_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(GXV_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# GXV driver sources (i.e., C files)
diff --git a/freetype/src/gzip/Jamfile b/freetype/src/gzip/Jamfile
index a7aafa051..0944a5f2c 100644
--- a/freetype/src/gzip/Jamfile
+++ b/freetype/src/gzip/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/gzip Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/gzip/ftgzip.c b/freetype/src/gzip/ftgzip.c
index 8423516d3..05ceee4c3 100644
--- a/freetype/src/gzip/ftgzip.c
+++ b/freetype/src/gzip/ftgzip.c
@@ -8,7 +8,7 @@
/* parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2002-2006, 2009-2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -58,7 +58,6 @@
/* conflicts when a program is linked with both FreeType and the */
/* original ZLib. */
-#define NO_DUMMY_DECL
#ifndef USE_ZLIB_ZCALLOC
#define MY_ZCALLOC /* prevent all zcalloc() & zfree() in zutils.c */
#endif
diff --git a/freetype/src/gzip/rules.mk b/freetype/src/gzip/rules.mk
index 37cd99176..a8f74ec3c 100644
--- a/freetype/src/gzip/rules.mk
+++ b/freetype/src/gzip/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002, 2003, 2013 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -21,9 +21,14 @@ GZIP_DIR := $(SRC_DIR)/gzip
# compilation flags for the driver
#
ifeq ($(SYSTEM_ZLIB),)
- GZIP_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR))
+ GZIP_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
else
- GZIP_COMPILE := $(FT_COMPILE)
+ GZIP_COMPILE := $(CC) $(ANSIFLAGS) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
endif
diff --git a/freetype/src/lzw/Jamfile b/freetype/src/lzw/Jamfile
index 6f1f516e7..91effe20c 100644
--- a/freetype/src/lzw/Jamfile
+++ b/freetype/src/lzw/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/lzw Jamfile
#
-# Copyright 2004, 2006 by
+# Copyright 2004-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/lzw/ftlzw.c b/freetype/src/lzw/ftlzw.c
index 459fc81d7..f60d9baa3 100644
--- a/freetype/src/lzw/ftlzw.c
+++ b/freetype/src/lzw/ftlzw.c
@@ -8,11 +8,10 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2004-2006, 2009, 2010, 2012-2014 by */
+/* Copyright 2004-2015 by */
/* Albert Chin-A-Young. */
/* */
-/* Based on code in src/gzip/ftgzip.c, Copyright 2004 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* based on code in `src/gzip/ftgzip.c' */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/src/lzw/ftzopen.c b/freetype/src/lzw/ftzopen.c
index fa1073dfb..1acf3851e 100644
--- a/freetype/src/lzw/ftzopen.c
+++ b/freetype/src/lzw/ftzopen.c
@@ -8,7 +8,8 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2005-2007, 2009, 2011 by David Turner. */
+/* Copyright 2005-2015 by */
+/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -54,7 +55,7 @@
ft_lzwstate_get_code( FT_LzwState state )
{
FT_UInt num_bits = state->num_bits;
- FT_Int offset = state->buf_offset;
+ FT_UInt offset = state->buf_offset;
FT_Byte* p;
FT_Int result;
diff --git a/freetype/src/lzw/ftzopen.h b/freetype/src/lzw/ftzopen.h
index 6c917b561..70b5a7730 100644
--- a/freetype/src/lzw/ftzopen.h
+++ b/freetype/src/lzw/ftzopen.h
@@ -8,7 +8,8 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2005, 2006, 2007, 2008 by David Turner. */
+/* Copyright 2005-2015 by */
+/* David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -115,8 +116,8 @@
FT_Int in_eof;
FT_Byte buf_tab[16];
- FT_Int buf_offset;
- FT_Int buf_size;
+ FT_UInt buf_offset;
+ FT_UInt buf_size;
FT_Bool buf_clear;
FT_Offset buf_total;
diff --git a/freetype/src/lzw/rules.mk b/freetype/src/lzw/rules.mk
index 5550a48d6..ab1c02fb5 100644
--- a/freetype/src/lzw/rules.mk
+++ b/freetype/src/lzw/rules.mk
@@ -3,11 +3,10 @@
#
-# Copyright 2004, 2005, 2006 by
+# Copyright 2004-2015 by
# Albert Chin-A-Young.
#
-# Based on src/lzw/rules.mk, Copyright 2002 by
-# David Turner, Robert Wilhelm, and Werner Lemberg.
+# based on `src/lzw/rules.mk'
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
@@ -23,7 +22,10 @@ LZW_DIR := $(SRC_DIR)/lzw
# compilation flags for the driver
#
-LZW_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(LZW_DIR))
+LZW_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(LZW_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# LZW support sources (i.e., C files)
diff --git a/freetype/src/otvalid/Jamfile b/freetype/src/otvalid/Jamfile
index b457143de..dbc239513 100644
--- a/freetype/src/otvalid/Jamfile
+++ b/freetype/src/otvalid/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/otvalid Jamfile
#
-# Copyright 2004 by
+# Copyright 2004-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/otvalid/module.mk b/freetype/src/otvalid/module.mk
index 9cadde55e..3d8c0d9f2 100644
--- a/freetype/src/otvalid/module.mk
+++ b/freetype/src/otvalid/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004, 2006 by
+# Copyright 2004-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/otvalid/otvalid.c b/freetype/src/otvalid/otvalid.c
index d5c2b75ab..ca597d707 100644
--- a/freetype/src/otvalid/otvalid.c
+++ b/freetype/src/otvalid/otvalid.c
@@ -4,7 +4,7 @@
/* */
/* FreeType validator for OpenType tables (body only). */
/* */
-/* Copyright 2004, 2007 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvalid.h b/freetype/src/otvalid/otvalid.h
index c560034bf..3f653c5e1 100644
--- a/freetype/src/otvalid/otvalid.h
+++ b/freetype/src/otvalid/otvalid.h
@@ -4,7 +4,7 @@
/* */
/* OpenType table validation (specification only). */
/* */
-/* Copyright 2004, 2008 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvbase.c b/freetype/src/otvalid/otvbase.c
index 4f9d2fa25..24038c63b 100644
--- a/freetype/src/otvalid/otvbase.c
+++ b/freetype/src/otvalid/otvbase.c
@@ -4,7 +4,7 @@
/* */
/* OpenType BASE table validation (body). */
/* */
-/* Copyright 2004, 2007 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvcommn.c b/freetype/src/otvalid/otvcommn.c
index 3c3de63ca..103ffba3e 100644
--- a/freetype/src/otvalid/otvcommn.c
+++ b/freetype/src/otvalid/otvcommn.c
@@ -4,7 +4,7 @@
/* */
/* OpenType common tables validation (body). */
/* */
-/* Copyright 2004, 2005, 2006, 2007 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -687,7 +687,7 @@
OTV_TRACE(( " (Count = %d)\n", Count ));
- otv_Coverage_validate( table + Coverage, otvalid, Count );
+ otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)Count );
OTV_LIMIT_CHECK( Count * 2 );
diff --git a/freetype/src/otvalid/otvcommn.h b/freetype/src/otvalid/otvcommn.h
index 5f7287c89..2ba330c7a 100644
--- a/freetype/src/otvalid/otvcommn.h
+++ b/freetype/src/otvalid/otvcommn.h
@@ -4,7 +4,7 @@
/* */
/* OpenType common tables validation (specification). */
/* */
-/* Copyright 2004, 2005, 2007, 2009, 2014 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otverror.h b/freetype/src/otvalid/otverror.h
index b6f00c9db..214795e17 100644
--- a/freetype/src/otvalid/otverror.h
+++ b/freetype/src/otvalid/otverror.h
@@ -4,7 +4,7 @@
/* */
/* OpenType validation module error codes (specification only). */
/* */
-/* Copyright 2004, 2005, 2012, 2013 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvgdef.c b/freetype/src/otvalid/otvgdef.c
index e60ef363d..8269d2f5b 100644
--- a/freetype/src/otvalid/otvgdef.c
+++ b/freetype/src/otvalid/otvgdef.c
@@ -4,7 +4,7 @@
/* */
/* OpenType GDEF table validation (body). */
/* */
-/* Copyright 2004, 2005, 2007 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -61,7 +61,7 @@
OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
- otv_Coverage_validate( Coverage, otvalid, GlyphCount );
+ otv_Coverage_validate( Coverage, otvalid, (FT_Int)GlyphCount );
if ( GlyphCount != otv_Coverage_get_count( Coverage ) )
FT_INVALID_DATA;
diff --git a/freetype/src/otvalid/otvgpos.c b/freetype/src/otvalid/otvgpos.c
index 1a9dbaaa0..44c43c53a 100644
--- a/freetype/src/otvalid/otvgpos.c
+++ b/freetype/src/otvalid/otvgpos.c
@@ -4,7 +4,7 @@
/* */
/* OpenType GPOS table validation (body). */
/* */
-/* Copyright 2002, 2004, 2005, 2006, 2007, 2008 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -395,7 +395,9 @@
len_value = otv_value_length( ValueFormat );
- otv_Coverage_validate( table + Coverage, otvalid, ValueCount );
+ otv_Coverage_validate( table + Coverage,
+ otvalid,
+ (FT_Int)ValueCount );
OTV_LIMIT_CHECK( ValueCount * len_value );
@@ -605,7 +607,9 @@
OTV_TRACE(( " (EntryExitCount = %d)\n", EntryExitCount ));
- otv_Coverage_validate( table + Coverage, otvalid, EntryExitCount );
+ otv_Coverage_validate( table + Coverage,
+ otvalid,
+ (FT_Int)EntryExitCount );
OTV_LIMIT_CHECK( EntryExitCount * 4 );
diff --git a/freetype/src/otvalid/otvgpos.h b/freetype/src/otvalid/otvgpos.h
index 14ca40826..a792bd951 100644
--- a/freetype/src/otvalid/otvgpos.h
+++ b/freetype/src/otvalid/otvgpos.h
@@ -4,7 +4,7 @@
/* */
/* OpenType GPOS table validator (specification). */
/* */
-/* Copyright 2004 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvgsub.c b/freetype/src/otvalid/otvgsub.c
index 024b8ca68..0f8b02cd2 100644
--- a/freetype/src/otvalid/otvgsub.c
+++ b/freetype/src/otvalid/otvgsub.c
@@ -4,7 +4,7 @@
/* */
/* OpenType GSUB table validation (body). */
/* */
-/* Copyright 2004, 2005, 2007 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -70,11 +70,11 @@
otv_Coverage_validate( Coverage, otvalid, -1 );
- idx = otv_Coverage_get_first( Coverage ) + DeltaGlyphID;
+ idx = (FT_Long)otv_Coverage_get_first( Coverage ) + DeltaGlyphID;
if ( idx < 0 )
FT_INVALID_DATA;
- idx = otv_Coverage_get_last( Coverage ) + DeltaGlyphID;
+ idx = (FT_Long)otv_Coverage_get_last( Coverage ) + DeltaGlyphID;
if ( (FT_UInt)idx >= otvalid->glyph_count )
FT_INVALID_DATA;
}
@@ -91,7 +91,9 @@
OTV_TRACE(( " (GlyphCount = %d)\n", GlyphCount ));
- otv_Coverage_validate( table + Coverage, otvalid, GlyphCount );
+ otv_Coverage_validate( table + Coverage,
+ otvalid,
+ (FT_Int)GlyphCount );
OTV_LIMIT_CHECK( GlyphCount * 2 );
diff --git a/freetype/src/otvalid/otvjstf.c b/freetype/src/otvalid/otvjstf.c
index f273be8bb..fe68a60f6 100644
--- a/freetype/src/otvalid/otvjstf.c
+++ b/freetype/src/otvalid/otvjstf.c
@@ -4,7 +4,7 @@
/* */
/* OpenType JSTF table validation (body). */
/* */
-/* Copyright 2004, 2007 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvmath.c b/freetype/src/otvalid/otvmath.c
index d1791f8de..db3d5f8f5 100644
--- a/freetype/src/otvalid/otvmath.c
+++ b/freetype/src/otvalid/otvmath.c
@@ -4,7 +4,7 @@
/* */
/* OpenType MATH table validation (body). */
/* */
-/* Copyright 2007, 2008 by */
+/* Copyright 2007-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Written by George Williams. */
@@ -108,7 +108,7 @@
table_size = 4 + 4 * cnt;
OTV_SIZE_CHECK( Coverage );
- otv_Coverage_validate( table + Coverage, otvalid, cnt );
+ otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt );
for ( i = 0; i < cnt; ++i )
{
@@ -196,7 +196,7 @@
table_size = 4 + 8 * cnt;
OTV_SIZE_CHECK( Coverage );
- otv_Coverage_validate( table + Coverage, otvalid, cnt );
+ otv_Coverage_validate( table + Coverage, otvalid, (FT_Int)cnt );
for ( i = 0; i < cnt; ++i )
{
@@ -378,11 +378,11 @@
OTV_SIZE_CHECK( VCoverage );
if ( VCoverage )
- otv_Coverage_validate( table + VCoverage, otvalid, vcnt );
+ otv_Coverage_validate( table + VCoverage, otvalid, (FT_Int)vcnt );
OTV_SIZE_CHECK( HCoverage );
if ( HCoverage )
- otv_Coverage_validate( table + HCoverage, otvalid, hcnt );
+ otv_Coverage_validate( table + HCoverage, otvalid, (FT_Int)hcnt );
for ( i = 0; i < vcnt; ++i )
{
diff --git a/freetype/src/otvalid/otvmod.c b/freetype/src/otvalid/otvmod.c
index 933e5f54a..cee847cac 100644
--- a/freetype/src/otvalid/otvmod.c
+++ b/freetype/src/otvalid/otvmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType's OpenType validation module implementation (body). */
/* */
-/* Copyright 2004-2008, 2013 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/otvmod.h b/freetype/src/otvalid/otvmod.h
index f7e155078..c3a0234e9 100644
--- a/freetype/src/otvalid/otvmod.h
+++ b/freetype/src/otvalid/otvmod.h
@@ -5,7 +5,7 @@
/* FreeType's OpenType validation module implementation */
/* (specification). */
/* */
-/* Copyright 2004 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/otvalid/rules.mk b/freetype/src/otvalid/rules.mk
index 53bd41e5e..56d749cc9 100644
--- a/freetype/src/otvalid/rules.mk
+++ b/freetype/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2004, 2007 by
+# Copyright 2004-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ OTV_DIR := $(SRC_DIR)/otvalid
# compilation flags for the driver
#
-OTV_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(OTV_DIR))
+OTV_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(OTV_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# OTV driver sources (i.e., C files)
diff --git a/freetype/src/pcf/Jamfile b/freetype/src/pcf/Jamfile
index 752fcac2a..8cd90e4c3 100644
--- a/freetype/src/pcf/Jamfile
+++ b/freetype/src/pcf/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pcf Jamfile
#
-# Copyright 2001, 2003 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pcf/pcf.h b/freetype/src/pcf/pcf.h
index 7fcdf786a..40afdde05 100644
--- a/freetype/src/pcf/pcf.h
+++ b/freetype/src/pcf/pcf.h
@@ -148,9 +148,9 @@ FT_BEGIN_HEADER
int nprops;
PCF_Property properties;
- FT_Long nmetrics;
+ FT_ULong nmetrics;
PCF_Metric metrics;
- FT_Long nencodings;
+ FT_ULong nencodings;
PCF_Encoding encodings;
FT_Short defaultChar;
diff --git a/freetype/src/pcf/pcfdrivr.c b/freetype/src/pcf/pcfdrivr.c
index 389d521de..bffbbf587 100644
--- a/freetype/src/pcf/pcfdrivr.c
+++ b/freetype/src/pcf/pcfdrivr.c
@@ -48,7 +48,7 @@ THE SOFTWARE.
#define FT_COMPONENT trace_pcfread
#include FT_SERVICE_BDF_H
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
/*************************************************************************/
@@ -64,7 +64,7 @@ THE SOFTWARE.
typedef struct PCF_CMapRec_
{
FT_CMapRec root;
- FT_UInt num_encodings;
+ FT_ULong num_encodings;
PCF_Encoding encodings;
} PCF_CMapRec, *PCF_CMap;
@@ -80,7 +80,7 @@ THE SOFTWARE.
FT_UNUSED( init_data );
- cmap->num_encodings = (FT_UInt)face->nencodings;
+ cmap->num_encodings = face->nencodings;
cmap->encodings = face->encodings;
return FT_Err_Ok;
@@ -104,7 +104,7 @@ THE SOFTWARE.
{
PCF_CMap cmap = (PCF_CMap)pcfcmap;
PCF_Encoding encodings = cmap->encodings;
- FT_UInt min, max, mid;
+ FT_ULong min, max, mid;
FT_UInt result = 0;
@@ -117,7 +117,7 @@ THE SOFTWARE.
mid = ( min + max ) >> 1;
- code = encodings[mid].enc;
+ code = (FT_ULong)encodings[mid].enc;
if ( charcode == code )
{
@@ -141,7 +141,7 @@ THE SOFTWARE.
{
PCF_CMap cmap = (PCF_CMap)pcfcmap;
PCF_Encoding encodings = cmap->encodings;
- FT_UInt min, max, mid;
+ FT_ULong min, max, mid;
FT_ULong charcode = *acharcode + 1;
FT_UInt result = 0;
@@ -155,7 +155,7 @@ THE SOFTWARE.
mid = ( min + max ) >> 1;
- code = encodings[mid].enc;
+ code = (FT_ULong)encodings[mid].enc;
if ( charcode == code )
{
@@ -172,7 +172,7 @@ THE SOFTWARE.
charcode = 0;
if ( min < cmap->num_encodings )
{
- charcode = encodings[min].enc;
+ charcode = (FT_ULong)encodings[min].enc;
result = encodings[min].glyph + 1;
}
@@ -487,7 +487,7 @@ THE SOFTWARE.
FT_Error error = FT_Err_Ok;
FT_Bitmap* bitmap = &slot->bitmap;
PCF_Metric metric;
- FT_Offset bytes;
+ FT_ULong bytes;
FT_UNUSED( load_flags );
@@ -513,8 +513,10 @@ THE SOFTWARE.
metric = face->metrics + glyph_index;
- bitmap->rows = metric->ascent + metric->descent;
- bitmap->width = metric->rightSideBearing - metric->leftSideBearing;
+ bitmap->rows = (unsigned int)( metric->ascent +
+ metric->descent );
+ bitmap->width = (unsigned int)( metric->rightSideBearing -
+ metric->leftSideBearing );
bitmap->num_grays = 1;
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
@@ -526,19 +528,19 @@ THE SOFTWARE.
switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) )
{
case 1:
- bitmap->pitch = ( bitmap->width + 7 ) >> 3;
+ bitmap->pitch = (int)( ( bitmap->width + 7 ) >> 3 );
break;
case 2:
- bitmap->pitch = ( ( bitmap->width + 15 ) >> 4 ) << 1;
+ bitmap->pitch = (int)( ( ( bitmap->width + 15 ) >> 4 ) << 1 );
break;
case 4:
- bitmap->pitch = ( ( bitmap->width + 31 ) >> 5 ) << 2;
+ bitmap->pitch = (int)( ( ( bitmap->width + 31 ) >> 5 ) << 2 );
break;
case 8:
- bitmap->pitch = ( ( bitmap->width + 63 ) >> 6 ) << 3;
+ bitmap->pitch = (int)( ( ( bitmap->width + 63 ) >> 6 ) << 3 );
break;
default:
@@ -546,7 +548,7 @@ THE SOFTWARE.
}
/* XXX: to do: are there cases that need repadding the bitmap? */
- bytes = bitmap->pitch * bitmap->rows;
+ bytes = (FT_ULong)bitmap->pitch * bitmap->rows;
error = ft_glyphslot_alloc_bitmap( slot, (FT_ULong)bytes );
if ( error )
@@ -581,12 +583,12 @@ THE SOFTWARE.
slot->bitmap_left = metric->leftSideBearing;
slot->bitmap_top = metric->ascent;
- slot->metrics.horiAdvance = metric->characterWidth << 6;
- slot->metrics.horiBearingX = metric->leftSideBearing << 6;
- slot->metrics.horiBearingY = metric->ascent << 6;
- slot->metrics.width = ( metric->rightSideBearing -
- metric->leftSideBearing ) << 6;
- slot->metrics.height = bitmap->rows << 6;
+ slot->metrics.horiAdvance = (FT_Pos)( metric->characterWidth << 6 );
+ slot->metrics.horiBearingX = (FT_Pos)( metric->leftSideBearing << 6 );
+ slot->metrics.horiBearingY = (FT_Pos)( metric->ascent << 6 );
+ slot->metrics.width = (FT_Pos)( ( metric->rightSideBearing -
+ metric->leftSideBearing ) << 6 );
+ slot->metrics.height = (FT_Pos)( bitmap->rows << 6 );
ft_synthesize_vertical_metrics( &slot->metrics,
( face->accel.fontAscent +
@@ -667,8 +669,8 @@ THE SOFTWARE.
static const FT_ServiceDescRec pcf_services[] =
{
- { FT_SERVICE_ID_BDF, &pcf_service_bdf },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_PCF },
+ { FT_SERVICE_ID_BDF, &pcf_service_bdf },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PCF },
{ NULL, NULL }
};
diff --git a/freetype/src/pcf/pcfread.c b/freetype/src/pcf/pcfread.c
index 095115c4b..6cf1f6587 100644
--- a/freetype/src/pcf/pcfread.c
+++ b/freetype/src/pcf/pcfread.c
@@ -448,14 +448,14 @@ THE SOFTWARE.
pcf_get_properties( FT_Stream stream,
PCF_Face face )
{
- PCF_ParseProperty props = 0;
+ PCF_ParseProperty props = NULL;
PCF_Property properties = NULL;
FT_ULong nprops, i;
FT_ULong format, size;
FT_Error error;
FT_Memory memory = FT_FACE( face )->memory;
FT_ULong string_size;
- FT_String* strings = 0;
+ FT_String* strings = NULL;
error = pcf_seek_to_table_type( stream,
@@ -485,9 +485,9 @@ THE SOFTWARE.
goto Bail;
FT_TRACE4(( " nprop = %d (truncate %d props)\n",
- (int)nprops, nprops - (int)nprops ));
+ (int)nprops, nprops - (FT_ULong)(int)nprops ));
- nprops = (int)nprops;
+ nprops = (FT_ULong)(int)nprops;
/* rough estimate */
if ( nprops > size / PCF_PROPERTY_SIZE )
@@ -620,7 +620,7 @@ THE SOFTWARE.
FT_Error error;
FT_Memory memory = FT_FACE( face )->memory;
FT_ULong format, size;
- PCF_Metric metrics = 0;
+ PCF_Metric metrics = NULL;
FT_ULong nmetrics, i;
@@ -766,8 +766,7 @@ THE SOFTWARE.
FT_TRACE4(( " number of bitmaps: %d\n", nbitmaps ));
- /* XXX: PCF_Face->nmetrics is signed FT_Long, see pcf.h */
- if ( face->nmetrics < 0 || nbitmaps != (FT_ULong)face->nmetrics )
+ if ( nbitmaps != face->nmetrics )
return FT_THROW( Invalid_File_Format );
if ( FT_NEW_ARRAY( offsets, nbitmaps ) )
@@ -795,9 +794,10 @@ THE SOFTWARE.
if ( error )
goto Bail;
- sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
+ sizebitmaps = (FT_ULong)bitmapSizes[PCF_GLYPH_PAD_INDEX( format )];
- FT_TRACE4(( " padding %d implies a size of %ld\n", i, bitmapSizes[i] ));
+ FT_TRACE4(( " padding %d implies a size of %ld\n",
+ i, bitmapSizes[i] ));
}
FT_TRACE4(( " %d bitmaps, padding index %ld\n",
@@ -817,7 +817,7 @@ THE SOFTWARE.
" invalid offset to bitmap data of glyph %d\n", i ));
}
else
- face->metrics[i].bits = stream->pos + offsets[i];
+ face->metrics[i].bits = stream->pos + (FT_ULong)offsets[i];
}
face->bitmapsFormat = format;
@@ -837,8 +837,10 @@ THE SOFTWARE.
FT_ULong format, size;
int firstCol, lastCol;
int firstRow, lastRow;
- int nencoding, encodingOffset;
- int i, j, k;
+ FT_ULong nencoding;
+ int encodingOffset;
+ int i, j;
+ FT_ULong k;
PCF_Encoding encoding = NULL;
@@ -893,7 +895,8 @@ THE SOFTWARE.
FT_TRACE4(( " firstCol %d, lastCol %d, firstRow %d, lastRow %d\n",
firstCol, lastCol, firstRow, lastRow ));
- nencoding = ( lastCol - firstCol + 1 ) * ( lastRow - firstRow + 1 );
+ nencoding = (FT_ULong)( lastCol - firstCol + 1 ) *
+ (FT_ULong)( lastRow - firstRow + 1 );
if ( FT_NEW_ARRAY( encoding, nencoding ) )
return FT_THROW( Out_Of_Memory );
@@ -912,10 +915,10 @@ THE SOFTWARE.
else
encodingOffset = FT_GET_SHORT_LE();
- if ( encodingOffset != -1 )
+ if ( encodingOffset > -1 )
{
encoding[k].enc = i * 256 + j;
- encoding[k].glyph = (FT_Short)encodingOffset;
+ encoding[k].glyph = (FT_UShort)encodingOffset;
FT_TRACE5(( " code %d (0x%04X): idx %d\n",
encoding[k].enc, encoding[k].enc, encoding[k].glyph ));
@@ -1256,7 +1259,7 @@ THE SOFTWARE.
*
* This implies bumping the number of `available' glyphs by 1.
*/
- root->num_glyphs = face->nmetrics + 1;
+ root->num_glyphs = (FT_Long)( face->nmetrics + 1 );
root->num_fixed_sizes = 1;
if ( FT_NEW_ARRAY( root->available_sizes, 1 ) )
@@ -1313,7 +1316,7 @@ THE SOFTWARE.
/* set up charset */
{
- PCF_Property charset_registry = 0, charset_encoding = 0;
+ PCF_Property charset_registry, charset_encoding;
charset_registry = pcf_find_property( face, "CHARSET_REGISTRY" );
diff --git a/freetype/src/pcf/rules.mk b/freetype/src/pcf/rules.mk
index 78641528f..1b55daf4f 100644
--- a/freetype/src/pcf/rules.mk
+++ b/freetype/src/pcf/rules.mk
@@ -30,7 +30,10 @@
PCF_DIR := $(SRC_DIR)/pcf
-PCF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PCF_DIR))
+PCF_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(PCF_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# pcf driver sources (i.e., C files)
diff --git a/freetype/src/pfr/Jamfile b/freetype/src/pfr/Jamfile
index 9e2f2b8d0..2064bcd8d 100644
--- a/freetype/src/pfr/Jamfile
+++ b/freetype/src/pfr/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pfr Jamfile
#
-# Copyright 2002 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pfr/module.mk b/freetype/src/pfr/module.mk
index 8d1d28a9d..3f5a47e88 100644
--- a/freetype/src/pfr/module.mk
+++ b/freetype/src/pfr/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002, 2006 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pfr/pfr.c b/freetype/src/pfr/pfr.c
index eb2c4edb7..96e67300a 100644
--- a/freetype/src/pfr/pfr.c
+++ b/freetype/src/pfr/pfr.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR driver component. */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrcmap.c b/freetype/src/pfr/pfrcmap.c
index 90ba0105e..88ff55a80 100644
--- a/freetype/src/pfr/pfrcmap.c
+++ b/freetype/src/pfr/pfrcmap.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR cmap handling (body). */
/* */
-/* Copyright 2002, 2007, 2009, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrcmap.h b/freetype/src/pfr/pfrcmap.h
index 511cbcfcc..a89079f83 100644
--- a/freetype/src/pfr/pfrcmap.h
+++ b/freetype/src/pfr/pfrcmap.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR cmap handling (specification). */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrdrivr.c b/freetype/src/pfr/pfrdrivr.c
index b6873d5cd..8e2a05c8f 100644
--- a/freetype/src/pfr/pfrdrivr.c
+++ b/freetype/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR driver interface (body). */
/* */
-/* Copyright 2002-2004, 2006, 2008, 2010, 2011, 2013, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,7 +20,7 @@
#include <internal/ftdebug.h>
#include <internal/ftstream.h>
#include FT_SERVICE_PFR_H
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#include "pfrdrivr.h"
#include "pfrobjs.h"
@@ -43,12 +43,14 @@
if ( phys->outline_resolution != phys->metrics_resolution )
{
if ( avector->x != 0 )
- avector->x = FT_MulDiv( avector->x, phys->outline_resolution,
- phys->metrics_resolution );
+ avector->x = FT_MulDiv( avector->x,
+ (FT_Long)phys->outline_resolution,
+ (FT_Long)phys->metrics_resolution );
if ( avector->y != 0 )
- avector->y = FT_MulDiv( avector->x, phys->outline_resolution,
- phys->metrics_resolution );
+ avector->y = FT_MulDiv( avector->y,
+ (FT_Long)phys->outline_resolution,
+ (FT_Long)phys->metrics_resolution );
}
return FT_Err_Ok;
@@ -118,10 +120,10 @@
if ( size )
{
x_scale = FT_DivFix( size->metrics.x_ppem << 6,
- phys->metrics_resolution );
+ (FT_Long)phys->metrics_resolution );
y_scale = FT_DivFix( size->metrics.y_ppem << 6,
- phys->metrics_resolution );
+ (FT_Long)phys->metrics_resolution );
}
if ( ametrics_x_scale )
@@ -151,7 +153,7 @@
static const FT_ServiceDescRec pfr_services[] =
{
{ FT_SERVICE_ID_PFR_METRICS, &pfr_metrics_service_rec },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_PFR },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PFR },
{ NULL, NULL }
};
diff --git a/freetype/src/pfr/pfrdrivr.h b/freetype/src/pfr/pfrdrivr.h
index 62e9dac86..61b0325f7 100644
--- a/freetype/src/pfr/pfrdrivr.h
+++ b/freetype/src/pfr/pfrdrivr.h
@@ -4,7 +4,7 @@
/* */
/* High-level Type PFR driver interface (specification). */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrerror.h b/freetype/src/pfr/pfrerror.h
index 94dc8c5e1..978e7b2d3 100644
--- a/freetype/src/pfr/pfrerror.h
+++ b/freetype/src/pfr/pfrerror.h
@@ -4,7 +4,7 @@
/* */
/* PFR error codes (specification only). */
/* */
-/* Copyright 2002, 2012 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrgload.c b/freetype/src/pfr/pfrgload.c
index e254c23f0..b75f5914f 100644
--- a/freetype/src/pfr/pfrgload.c
+++ b/freetype/src/pfr/pfrgload.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR glyph loader (body). */
/* */
-/* Copyright 2002, 2003, 2005, 2007, 2010, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -143,7 +143,7 @@
error = FT_GLYPHLOADER_CHECK_POINTS( loader, 1, 0 );
if ( !error )
{
- FT_UInt n = outline->n_points;
+ FT_Int n = outline->n_points;
outline->points[n] = *to;
@@ -693,7 +693,7 @@
if ( format & PFR_SUBGLYPH_3BYTE_OFFSET )
{
PFR_CHECK( 3 );
- subglyph->gps_offset = PFR_NEXT_LONG( p );
+ subglyph->gps_offset = PFR_NEXT_ULONG( p );
}
else
{
@@ -736,7 +736,7 @@
if ( size > 0 && *p & PFR_GLYPH_IS_COMPOUND )
{
- FT_Int n, old_count, count;
+ FT_UInt n, old_count, count;
FT_GlyphLoader loader = glyph->loader;
FT_Outline* base = &loader->base.outline;
diff --git a/freetype/src/pfr/pfrgload.h b/freetype/src/pfr/pfrgload.h
index 7cc7a8702..c7c8da15a 100644
--- a/freetype/src/pfr/pfrgload.h
+++ b/freetype/src/pfr/pfrgload.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR glyph loader (specification). */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrload.c b/freetype/src/pfr/pfrload.c
index 3fedaba61..e8c0bbe5b 100644
--- a/freetype/src/pfr/pfrload.c
+++ b/freetype/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR loader (body). */
/* */
-/* Copyright 2002-2005, 2007, 2009, 2010, 2013, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -199,7 +199,7 @@
FT_LOCAL_DEF( FT_Error )
pfr_log_font_count( FT_Stream stream,
FT_UInt32 section_offset,
- FT_UInt *acount )
+ FT_Long *acount )
{
FT_Error error;
FT_UInt count;
@@ -212,7 +212,7 @@
result = count;
Exit:
- *acount = result;
+ *acount = (FT_Long)result;
return error;
}
@@ -449,9 +449,9 @@
FT_Byte* limit,
PFR_PhyFont phy_font )
{
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = phy_font->memory;
- FT_PtrDist len = limit - p;
+ FT_Error error = FT_Err_Ok;
+ FT_Memory memory = phy_font->memory;
+ FT_UInt len = (FT_UInt)( limit - p );
if ( phy_font->font_id != NULL )
@@ -535,7 +535,8 @@
item->pair_count = PFR_NEXT_BYTE( p );
item->base_adj = PFR_NEXT_SHORT( p );
item->flags = PFR_NEXT_BYTE( p );
- item->offset = phy_font->offset + ( p - phy_font->cursor );
+ item->offset = phy_font->offset +
+ (FT_Offset)( p - phy_font->cursor );
#ifndef PFR_CONFIG_NO_CHECKS
item->pair_size = 3;
@@ -864,7 +865,7 @@
phy_font->num_chars = count = PFR_NEXT_USHORT( p );
- phy_font->chars_offset = offset + ( p - stream->cursor );
+ phy_font->chars_offset = offset + (FT_Offset)( p - stream->cursor );
if ( FT_NEW_ARRAY( phy_font->chars, count ) )
goto Fail;
@@ -898,7 +899,7 @@
cur->advance = ( flags & PFR_PHY_PROPORTIONAL )
? PFR_NEXT_SHORT( p )
- : (FT_Int) phy_font->standard_advance;
+ : phy_font->standard_advance;
#if 0
cur->ascii = ( flags & PFR_PHY_ASCII_CODE )
diff --git a/freetype/src/pfr/pfrload.h b/freetype/src/pfr/pfrload.h
index 6a6bc182a..5396ae5c3 100644
--- a/freetype/src/pfr/pfrload.h
+++ b/freetype/src/pfr/pfrload.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR loader (specification). */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -85,7 +85,7 @@ FT_BEGIN_HEADER
FT_LOCAL( FT_Error )
pfr_log_font_count( FT_Stream stream,
FT_UInt32 log_section_offset,
- FT_UInt *acount );
+ FT_Long *acount );
/* load a pfr logical font entry */
FT_LOCAL( FT_Error )
diff --git a/freetype/src/pfr/pfrobjs.c b/freetype/src/pfr/pfrobjs.c
index 52aedc789..d53d57c75 100755
--- a/freetype/src/pfr/pfrobjs.c
+++ b/freetype/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR object methods (body). */
/* */
-/* Copyright 2002-2008, 2010-2011, 2013, 2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -94,7 +94,7 @@
/* check face index */
{
- FT_UInt num_faces;
+ FT_Long num_faces;
error = pfr_log_font_count( stream,
@@ -118,7 +118,7 @@
/* load the face */
error = pfr_log_font_load(
- &face->log_font, stream, face_index,
+ &face->log_font, stream, (FT_UInt)face_index,
face->header.log_dir_offset,
FT_BOOL( face->header.phy_font_max_size_high != 0 ) );
if ( error )
@@ -137,7 +137,7 @@
pfrface->face_index = face_index;
- pfrface->num_glyphs = phy_font->num_chars + 1;
+ pfrface->num_glyphs = (FT_Long)phy_font->num_chars + 1;
pfrface->face_flags |= FT_FACE_FLAG_SCALABLE;
@@ -192,7 +192,7 @@
pfrface->style_name = phy_font->style_name;
pfrface->num_fixed_sizes = 0;
- pfrface->available_sizes = 0;
+ pfrface->available_sizes = NULL;
pfrface->bbox = phy_font->bbox;
pfrface->units_per_EM = (FT_UShort)phy_font->outline_resolution;
@@ -218,13 +218,13 @@
strike = phy_font->strikes;
for ( n = 0; n < count; n++, size++, strike++ )
{
- size->height = (FT_UShort)strike->y_ppm;
- size->width = (FT_UShort)strike->x_ppm;
- size->size = strike->y_ppm << 6;
- size->x_ppem = strike->x_ppm << 6;
- size->y_ppem = strike->y_ppm << 6;
+ size->height = (FT_Short)strike->y_ppm;
+ size->width = (FT_Short)strike->x_ppm;
+ size->size = (FT_Pos)( strike->y_ppm << 6 );
+ size->x_ppem = (FT_Pos)( strike->x_ppm << 6 );
+ size->y_ppem = (FT_Pos)( strike->y_ppm << 6 );
}
- pfrface->num_fixed_sizes = count;
+ pfrface->num_fixed_sizes = (FT_Int)count;
}
/* now compute maximum advance width */
@@ -366,7 +366,7 @@
FT_BBox cbox;
FT_Glyph_Metrics* metrics = &pfrslot->metrics;
FT_Pos advance;
- FT_Int em_metrics, em_outline;
+ FT_UInt em_metrics, em_outline;
FT_Bool scaling;
@@ -390,7 +390,9 @@
em_outline = face->phy_font.outline_resolution;
if ( em_metrics != em_outline )
- advance = FT_MulDiv( advance, em_outline, em_metrics );
+ advance = FT_MulDiv( advance,
+ (FT_Long)em_outline,
+ (FT_Long)em_metrics );
if ( face->phy_font.flags & PFR_PHY_VERTICAL )
metrics->vertAdvance = advance;
diff --git a/freetype/src/pfr/pfrobjs.h b/freetype/src/pfr/pfrobjs.h
index f6aa8b44c..e990b45a0 100644
--- a/freetype/src/pfr/pfrobjs.h
+++ b/freetype/src/pfr/pfrobjs.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR object methods (specification). */
/* */
-/* Copyright 2002, 2003, 2004 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrsbit.c b/freetype/src/pfr/pfrsbit.c
index e04dcd169..0876b6b75 100644
--- a/freetype/src/pfr/pfrsbit.c
+++ b/freetype/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR bitmap loader (body). */
/* */
-/* Copyright 2002, 2003, 2006, 2009, 2010, 2013 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -39,9 +39,9 @@
{
FT_Byte* line; /* current line start */
FT_Int pitch; /* line size in bytes */
- FT_Int width; /* width in pixels/bits */
- FT_Int rows; /* number of remaining rows to scan */
- FT_Int total; /* total number of bits to draw */
+ FT_UInt width; /* width in pixels/bits */
+ FT_UInt rows; /* number of remaining rows to scan */
+ FT_UInt total; /* total number of bits to draw */
} PFR_BitWriterRec, *PFR_BitWriter;
@@ -59,7 +59,7 @@
if ( !decreasing )
{
- writer->line += writer->pitch * ( target->rows - 1 );
+ writer->line += writer->pitch * (FT_Int)( target->rows - 1 );
writer->pitch = -writer->pitch;
}
}
@@ -70,15 +70,15 @@
FT_Byte* p,
FT_Byte* limit )
{
- FT_Int n, reload;
- FT_Int left = writer->width;
+ FT_UInt n, reload;
+ FT_UInt left = writer->width;
FT_Byte* cur = writer->line;
FT_UInt mask = 0x80;
FT_UInt val = 0;
FT_UInt c = 0;
- n = (FT_Int)( limit - p ) * 8;
+ n = (FT_UInt)( limit - p ) * 8;
if ( n > writer->total )
n = writer->total;
@@ -110,7 +110,7 @@
cur[0] = (FT_Byte)c;
mask = 0x80;
c = 0;
- cur ++;
+ cur++;
}
}
@@ -124,8 +124,9 @@
FT_Byte* p,
FT_Byte* limit )
{
- FT_Int n, phase, count, counts[2], reload;
- FT_Int left = writer->width;
+ FT_Int phase, count, counts[2];
+ FT_UInt n, reload;
+ FT_UInt left = writer->width;
FT_Byte* cur = writer->line;
FT_UInt mask = 0x80;
FT_UInt c = 0;
@@ -175,7 +176,7 @@
if ( --left <= 0 )
{
- cur[0] = (FT_Byte) c;
+ cur[0] = (FT_Byte)c;
left = writer->width;
mask = 0x80;
@@ -188,7 +189,7 @@
cur[0] = (FT_Byte)c;
mask = 0x80;
c = 0;
- cur ++;
+ cur++;
}
reload = ( --count <= 0 );
@@ -204,8 +205,9 @@
FT_Byte* p,
FT_Byte* limit )
{
- FT_Int n, phase, count, reload;
- FT_Int left = writer->width;
+ FT_Int phase, count;
+ FT_UInt n, reload;
+ FT_UInt left = writer->width;
FT_Byte* cur = writer->line;
FT_UInt mask = 0x80;
FT_UInt c = 0;
@@ -239,7 +241,7 @@
if ( --left <= 0 )
{
- cur[0] = (FT_Byte) c;
+ cur[0] = (FT_Byte)c;
c = 0;
mask = 0x80;
left = writer->width;
@@ -252,7 +254,7 @@
cur[0] = (FT_Byte)c;
c = 0;
mask = 0x80;
- cur ++;
+ cur++;
}
reload = ( --count <= 0 );
@@ -355,7 +357,8 @@
{
FT_Error error = FT_Err_Ok;
FT_Byte flags;
- FT_Char b;
+ FT_Char c;
+ FT_Byte b;
FT_Byte* p = *pdata;
FT_Long xpos, ypos, advance;
FT_UInt xsize, ysize;
@@ -374,9 +377,9 @@
{
case 0:
PFR_CHECK( 1 );
- b = PFR_NEXT_INT8( p );
- xpos = b >> 4;
- ypos = ( (FT_Char)( b << 4 ) ) >> 4;
+ c = PFR_NEXT_INT8( p );
+ xpos = c >> 4;
+ ypos = ( (FT_Char)( c << 4 ) ) >> 4;
break;
case 1:
@@ -609,8 +612,8 @@
advance = character->advance;
if ( phys->metrics_resolution != phys->outline_resolution )
advance = FT_MulDiv( advance,
- phys->outline_resolution,
- phys->metrics_resolution );
+ (FT_Long)phys->outline_resolution,
+ (FT_Long)phys->metrics_resolution );
glyph->root.linearHoriAdvance = advance;
@@ -618,7 +621,7 @@
/* overridden in the bitmap header of certain glyphs. */
advance = FT_MulDiv( (FT_Fixed)size->root.metrics.x_ppem << 8,
character->advance,
- phys->metrics_resolution );
+ (FT_Long)phys->metrics_resolution );
if ( FT_STREAM_SEEK( face->header.gps_section_offset + gps_offset ) ||
FT_FRAME_ENTER( gps_size ) )
@@ -632,12 +635,14 @@
&advance, &format );
/*
- * XXX: on 16bit system, we return an error for huge bitmap
- * which causes a size truncation, because truncated
- * size properties makes bitmap glyph broken.
+ * XXX: on 16bit systems we return an error for huge bitmaps
+ * that cause size truncation, because truncated
+ * size properties make bitmap glyphs broken.
*/
- if ( xpos > FT_INT_MAX || xpos < FT_INT_MIN ||
- ysize > FT_INT_MAX || ypos + ysize > FT_INT_MAX ||
+ if ( xpos > FT_INT_MAX ||
+ xpos < FT_INT_MIN ||
+ ysize > FT_INT_MAX ||
+ ypos > FT_INT_MAX - (FT_Long)ysize ||
ypos + (FT_Long)ysize < FT_INT_MIN )
{
FT_TRACE1(( "pfr_slot_load_bitmap:" ));
@@ -653,8 +658,8 @@
/* Set up glyph bitmap and metrics */
/* XXX: needs casts to fit FT_Bitmap.{width|rows|pitch} */
- glyph->root.bitmap.width = (FT_Int)xsize;
- glyph->root.bitmap.rows = (FT_Int)ysize;
+ glyph->root.bitmap.width = xsize;
+ glyph->root.bitmap.rows = ysize;
glyph->root.bitmap.pitch = (FT_Int)( xsize + 7 ) >> 3;
glyph->root.bitmap.pixel_mode = FT_PIXEL_MODE_MONO;
@@ -670,11 +675,11 @@
/* XXX: needs casts fit FT_GlyphSlotRec.bitmap_{left|top} */
glyph->root.bitmap_left = (FT_Int)xpos;
- glyph->root.bitmap_top = (FT_Int)(ypos + ysize);
+ glyph->root.bitmap_top = (FT_Int)( ypos + (FT_Long)ysize );
/* Allocate and read bitmap data */
{
- FT_ULong len = glyph->root.bitmap.pitch * ysize;
+ FT_ULong len = (FT_ULong)glyph->root.bitmap.pitch * ysize;
error = ft_glyphslot_alloc_bitmap( &glyph->root, len );
diff --git a/freetype/src/pfr/pfrsbit.h b/freetype/src/pfr/pfrsbit.h
index 015e9e6da..0db2cd5eb 100644
--- a/freetype/src/pfr/pfrsbit.h
+++ b/freetype/src/pfr/pfrsbit.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR bitmap loader (specification). */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pfr/pfrtypes.h b/freetype/src/pfr/pfrtypes.h
index f2f1c3cc7..1d2f22ba4 100644
--- a/freetype/src/pfr/pfrtypes.h
+++ b/freetype/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
/* */
/* FreeType PFR data structures (specification only). */
/* */
-/* Copyright 2002, 2003, 2005, 2007 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -229,7 +229,7 @@ FT_BEGIN_HEADER
FT_UInt metrics_resolution;
FT_BBox bbox;
FT_UInt flags;
- FT_UInt standard_advance;
+ FT_Int standard_advance;
FT_Int ascent; /* optional, bbox.yMax if not present */
FT_Int descent; /* optional, bbox.yMin if not present */
@@ -260,7 +260,7 @@ FT_BEGIN_HEADER
PFR_KernItem* kern_items_tail;
/* not part of the spec, but used during load */
- FT_Long bct_offset;
+ FT_ULong bct_offset;
FT_Byte* cursor;
} PFR_PhyFontRec, *PFR_PhyFont;
diff --git a/freetype/src/pfr/rules.mk b/freetype/src/pfr/rules.mk
index 60b96c741..e66546010 100644
--- a/freetype/src/pfr/rules.mk
+++ b/freetype/src/pfr/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002, 2003 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ PFR_DIR := $(SRC_DIR)/pfr
# compilation flags for the driver
#
-PFR_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PFR_DIR))
+PFR_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(PFR_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# pfr driver sources (i.e., C files)
diff --git a/freetype/src/psaux/Jamfile b/freetype/src/psaux/Jamfile
index faeded904..d7c2e6ca5 100644
--- a/freetype/src/psaux/Jamfile
+++ b/freetype/src/psaux/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/psaux Jamfile
#
-# Copyright 2001, 2002 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psaux/afmparse.c b/freetype/src/psaux/afmparse.c
index f9e428e57..6f6bd361f 100644
--- a/freetype/src/psaux/afmparse.c
+++ b/freetype/src/psaux/afmparse.c
@@ -4,7 +4,7 @@
/* */
/* AFM parser (body). */
/* */
-/* Copyright 2006-2010, 2012, 2013 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -75,8 +75,8 @@
#define AFM_STREAM_KEY_BEGIN( stream ) \
(char*)( (stream)->cursor - 1 )
-#define AFM_STREAM_KEY_LEN( stream, key ) \
- ( (char*)(stream)->cursor - key - 1 )
+#define AFM_STREAM_KEY_LEN( stream, key ) \
+ (FT_Offset)( (char*)(stream)->cursor - key - 1 )
#define AFM_STATUS_EOC( stream ) \
( (stream)->status >= AFM_STREAM_STATUS_EOC )
@@ -369,11 +369,11 @@
FT_LOCAL_DEF( FT_Int )
afm_parser_read_vals( AFM_Parser parser,
AFM_Value vals,
- FT_UInt n )
+ FT_Int n )
{
AFM_Stream stream = parser->stream;
char* str;
- FT_UInt i;
+ FT_Int i;
if ( n > AFM_MAX_ARGUMENTS )
@@ -446,7 +446,7 @@
FT_Offset* len )
{
AFM_Stream stream = parser->stream;
- char* key = 0; /* make stupid compiler happy */
+ char* key = NULL; /* make stupid compiler happy */
if ( line )
@@ -562,7 +562,7 @@
}
- FT_LOCAL_DEF( FT_Error )
+ static FT_Error
afm_parser_read_int( AFM_Parser parser,
FT_Int* aint )
{
@@ -590,11 +590,17 @@
char* key;
FT_Offset len;
int n = -1;
+ FT_Int tmp;
- if ( afm_parser_read_int( parser, &fi->NumTrackKern ) )
+ if ( afm_parser_read_int( parser, &tmp ) )
goto Fail;
+ if ( tmp < 0 )
+ goto Fail;
+
+ fi->NumTrackKern = (FT_UInt)tmp;
+
if ( fi->NumTrackKern )
{
FT_Memory memory = parser->memory;
@@ -615,7 +621,7 @@
case AFM_TOKEN_TRACKKERN:
n++;
- if ( n >= fi->NumTrackKern )
+ if ( n >= (int)fi->NumTrackKern )
goto Fail;
tk = fi->TrackKerns + n;
@@ -639,7 +645,7 @@
case AFM_TOKEN_ENDTRACKKERN:
case AFM_TOKEN_ENDKERNDATA:
case AFM_TOKEN_ENDFONTMETRICS:
- fi->NumTrackKern = n + 1;
+ fi->NumTrackKern = (FT_UInt)( n + 1 );
return FT_Err_Ok;
case AFM_TOKEN_UNKNOWN:
@@ -688,11 +694,17 @@
char* key;
FT_Offset len;
int n = -1;
+ FT_Int tmp;
+
+ if ( afm_parser_read_int( parser, &tmp ) )
+ goto Fail;
- if ( afm_parser_read_int( parser, &fi->NumKernPair ) )
+ if ( tmp < 0 )
goto Fail;
+ fi->NumKernPair = (FT_UInt)tmp;
+
if ( fi->NumKernPair )
{
FT_Memory memory = parser->memory;
@@ -720,7 +732,7 @@
n++;
- if ( n >= fi->NumKernPair )
+ if ( n >= (int)fi->NumKernPair )
goto Fail;
kp = fi->KernPairs + n;
@@ -733,8 +745,9 @@
if ( r < 3 )
goto Fail;
- kp->index1 = shared_vals[0].u.i;
- kp->index2 = shared_vals[1].u.i;
+ /* index values can't be negative */
+ kp->index1 = shared_vals[0].u.u;
+ kp->index2 = shared_vals[1].u.u;
if ( token == AFM_TOKEN_KPY )
{
kp->x = 0;
@@ -752,7 +765,7 @@
case AFM_TOKEN_ENDKERNPAIRS:
case AFM_TOKEN_ENDKERNDATA:
case AFM_TOKEN_ENDFONTMETRICS:
- fi->NumKernPair = n + 1;
+ fi->NumKernPair = (FT_UInt)( n + 1 );
ft_qsort( fi->KernPairs, fi->NumKernPair,
sizeof ( AFM_KernPairRec ),
afm_compare_kern_pairs );
@@ -815,7 +828,7 @@
static FT_Error
afm_parser_skip_section( AFM_Parser parser,
- FT_UInt n,
+ FT_Int n,
AFM_Token end_section )
{
char* key;
diff --git a/freetype/src/psaux/afmparse.h b/freetype/src/psaux/afmparse.h
index e767538f4..547107918 100644
--- a/freetype/src/psaux/afmparse.h
+++ b/freetype/src/psaux/afmparse.h
@@ -4,7 +4,7 @@
/* */
/* AFM parser (specification). */
/* */
-/* Copyright 2006 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -61,6 +61,7 @@ FT_BEGIN_HEADER
char* s;
FT_Fixed f;
FT_Int i;
+ FT_UInt u;
FT_Bool b;
} u;
@@ -72,7 +73,7 @@ FT_BEGIN_HEADER
FT_LOCAL( FT_Int )
afm_parser_read_vals( AFM_Parser parser,
AFM_Value vals,
- FT_UInt n );
+ FT_Int n );
/* read the next key from the next line or column */
FT_LOCAL( char* )
diff --git a/freetype/src/psaux/module.mk b/freetype/src/psaux/module.mk
index 42bf6f519..1d90e14ce 100644
--- a/freetype/src/psaux/module.mk
+++ b/freetype/src/psaux/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psaux/psaux.c b/freetype/src/psaux/psaux.c
index a4b9c5c6e..7f1d9aa59 100644
--- a/freetype/src/psaux/psaux.c
+++ b/freetype/src/psaux/psaux.c
@@ -4,7 +4,7 @@
/* */
/* FreeType auxiliary PostScript driver component (body only). */
/* */
-/* Copyright 1996-2001, 2002, 2006 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psaux/psauxerr.h b/freetype/src/psaux/psauxerr.h
index d52375f8c..97712f079 100644
--- a/freetype/src/psaux/psauxerr.h
+++ b/freetype/src/psaux/psauxerr.h
@@ -4,7 +4,7 @@
/* */
/* PS auxiliary module error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psaux/psauxmod.c b/freetype/src/psaux/psauxmod.c
index 4b1249d49..06fcab0c4 100644
--- a/freetype/src/psaux/psauxmod.c
+++ b/freetype/src/psaux/psauxmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType auxiliary PostScript module implementation (body). */
/* */
-/* Copyright 2000-2001, 2002, 2003, 2006 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psaux/psauxmod.h b/freetype/src/psaux/psauxmod.h
index 121723692..ae6a8f938 100644
--- a/freetype/src/psaux/psauxmod.h
+++ b/freetype/src/psaux/psauxmod.h
@@ -4,7 +4,7 @@
/* */
/* FreeType auxiliary PostScript module implementation (specification). */
/* */
-/* Copyright 2000-2001 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psaux/psconv.c b/freetype/src/psaux/psconv.c
index 36517e7ae..97c50d31a 100644
--- a/freetype/src/psaux/psconv.c
+++ b/freetype/src/psaux/psconv.c
@@ -4,7 +4,7 @@
/* */
/* Some convenience conversions (body). */
/* */
-/* Copyright 2006, 2008, 2009, 2012-2013 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -489,8 +489,8 @@
if ( c OP 0x80 )
break;
- c = ft_char_table[c & 0x7F];
- if ( (unsigned)c >= 16 )
+ c = (FT_UInt)ft_char_table[c & 0x7F];
+ if ( c >= 16 )
break;
pad = ( pad << 4 ) | c;
diff --git a/freetype/src/psaux/psconv.h b/freetype/src/psaux/psconv.h
index e9ce7c329..b3d3047ef 100644
--- a/freetype/src/psaux/psconv.h
+++ b/freetype/src/psaux/psconv.h
@@ -4,7 +4,7 @@
/* */
/* Some convenience conversions (specification). */
/* */
-/* Copyright 2006, 2012 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psaux/psobjs.c b/freetype/src/psaux/psobjs.c
index 8031c0660..5aab935a1 100644
--- a/freetype/src/psaux/psobjs.c
+++ b/freetype/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
/* */
/* Auxiliary functions for PostScript fonts (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -81,7 +81,7 @@
table->max_elems = count;
table->init = 0xDEADBEEFUL;
table->num_elems = 0;
- table->block = 0;
+ table->block = NULL;
table->capacity = 0;
table->cursor = 0;
@@ -165,10 +165,10 @@
/* reallocation fails. */
/* */
FT_LOCAL_DEF( FT_Error )
- ps_table_add( PS_Table table,
- FT_Int idx,
- void* object,
- FT_PtrDist length )
+ ps_table_add( PS_Table table,
+ FT_Int idx,
+ void* object,
+ FT_UInt length )
{
if ( idx < 0 || idx >= table->max_elems )
{
@@ -176,12 +176,6 @@
return FT_THROW( Invalid_Argument );
}
- if ( length < 0 )
- {
- FT_ERROR(( "ps_table_add: invalid length\n" ));
- return FT_THROW( Invalid_Argument );
- }
-
/* grow the base block if needed */
if ( table->cursor + length > table->capacity )
{
@@ -625,8 +619,8 @@
token->type = T1_TOKEN_TYPE_NONE;
- token->start = 0;
- token->limit = 0;
+ token->start = NULL;
+ token->limit = NULL;
/* first of all, skip leading whitespace */
ps_parser_skip_spaces( parser );
@@ -707,7 +701,7 @@
if ( !token->limit )
{
- token->start = 0;
+ token->start = NULL;
token->type = T1_TOKEN_TYPE_NONE;
}
@@ -932,7 +926,7 @@
FT_Memory memory )
{
FT_Byte* cur = *cursor;
- FT_PtrDist len = 0;
+ FT_UInt len = 0;
FT_Int count;
FT_String* result;
FT_Error error;
@@ -972,7 +966,7 @@
}
}
- len = cur - *cursor;
+ len = (FT_UInt)( cur - *cursor );
if ( cur >= limit || FT_ALLOC( result, len + 1 ) )
return 0;
@@ -1230,7 +1224,7 @@
for ( i = 0; i < 4; i++ )
{
- result = ps_tofixedarray( &cur, limit, max_objects,
+ result = ps_tofixedarray( &cur, limit, (FT_Int)max_objects,
temp + i * max_objects, 0 );
if ( result < 0 || (FT_UInt)result < max_objects )
{
@@ -1321,7 +1315,7 @@
goto Exit;
}
if ( (FT_UInt)num_elements > field->array_max )
- num_elements = field->array_max;
+ num_elements = (FT_Int)field->array_max;
old_cursor = parser->cursor;
old_limit = parser->limit;
@@ -1379,7 +1373,7 @@
ps_parser_to_bytes( PS_Parser parser,
FT_Byte* bytes,
FT_Offset max_bytes,
- FT_Long* pnum_bytes,
+ FT_ULong* pnum_bytes,
FT_Bool delimiters )
{
FT_Error error = FT_Err_Ok;
@@ -1553,7 +1547,7 @@
FT_GlyphLoader_Rewind( loader );
builder->hints_globals = size->internal;
- builder->hints_funcs = 0;
+ builder->hints_funcs = NULL;
if ( hinting )
builder->hints_funcs = glyph->internal->glyph_hints;
diff --git a/freetype/src/psaux/psobjs.h b/freetype/src/psaux/psobjs.h
index 6b0ae0405..09bd1ce01 100644
--- a/freetype/src/psaux/psobjs.h
+++ b/freetype/src/psaux/psobjs.h
@@ -4,7 +4,7 @@
/* */
/* Auxiliary functions for PostScript fonts (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -52,10 +52,10 @@ FT_BEGIN_HEADER
FT_Memory memory );
FT_LOCAL( FT_Error )
- ps_table_add( PS_Table table,
- FT_Int idx,
- void* object,
- FT_PtrDist length );
+ ps_table_add( PS_Table table,
+ FT_Int idx,
+ void* object,
+ FT_UInt length );
FT_LOCAL( void )
ps_table_done( PS_Table table );
@@ -112,7 +112,7 @@ FT_BEGIN_HEADER
ps_parser_to_bytes( PS_Parser parser,
FT_Byte* bytes,
FT_Offset max_bytes,
- FT_Long* pnum_bytes,
+ FT_ULong* pnum_bytes,
FT_Bool delimiters );
diff --git a/freetype/src/psaux/rules.mk b/freetype/src/psaux/rules.mk
index 7a1be37b6..0d2118c01 100644
--- a/freetype/src/psaux/rules.mk
+++ b/freetype/src/psaux/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002, 2003, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ PSAUX_DIR := $(SRC_DIR)/psaux
# compilation flags for the driver
#
-PSAUX_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR))
+PSAUX_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# PSAUX driver sources (i.e., C files)
diff --git a/freetype/src/psaux/t1cmap.c b/freetype/src/psaux/t1cmap.c
index c92a280dc..92b2c39bb 100644
--- a/freetype/src/psaux/t1cmap.c
+++ b/freetype/src/psaux/t1cmap.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 character map support (body). */
/* */
-/* Copyright 2002, 2003, 2006, 2007, 2012 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -39,7 +39,7 @@
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames;
- cmap->num_glyphs = face->type1.num_glyphs;
+ cmap->num_glyphs = (FT_UInt)face->type1.num_glyphs;
cmap->glyph_names = (const char* const*)face->type1.glyph_names;
cmap->sid_to_string = psnames->adobe_std_strings;
cmap->code_to_sid = is_expert ? psnames->adobe_expert_encoding
@@ -189,8 +189,8 @@
FT_UNUSED( pointer );
- cmap->first = encoding->code_first;
- cmap->count = (FT_UInt)( encoding->code_last - cmap->first );
+ cmap->first = (FT_UInt)encoding->code_first;
+ cmap->count = (FT_UInt)encoding->code_last - cmap->first;
cmap->indices = encoding->char_index;
FT_ASSERT( cmap->indices != NULL );
@@ -295,7 +295,7 @@
return psnames->unicodes_init( memory,
unicodes,
- face->type1.num_glyphs,
+ (FT_UInt)face->type1.num_glyphs,
(PS_GetGlyphNameFunc)&psaux_get_glyph_name,
(PS_FreeGlyphNameFunc)NULL,
(FT_Pointer)face );
diff --git a/freetype/src/psaux/t1cmap.h b/freetype/src/psaux/t1cmap.h
index cc102ecba..56fca9e25 100644
--- a/freetype/src/psaux/t1cmap.h
+++ b/freetype/src/psaux/t1cmap.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 character map support (specification). */
/* */
-/* Copyright 2002, 2003, 2006 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psaux/t1decode.c b/freetype/src/psaux/t1decode.c
index d21565b9d..5d97f634e 100644
--- a/freetype/src/psaux/t1decode.c
+++ b/freetype/src/psaux/t1decode.c
@@ -4,7 +4,7 @@
/* */
/* PostScript Type 1 decoding routines (body). */
/* */
-/* Copyright 2000-2014 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -150,7 +150,7 @@
if ( name &&
name[0] == glyph_name[0] &&
ft_strcmp( name, glyph_name ) == 0 )
- return n;
+ return (FT_Int)n;
}
return -1;
@@ -298,7 +298,7 @@
/* the seac operator must not be nested */
decoder->seac = TRUE;
- error = t1_decoder_parse_glyph( decoder, bchar_index );
+ error = t1_decoder_parse_glyph( decoder, (FT_UInt)bchar_index );
decoder->seac = FALSE;
if ( error )
goto Exit;
@@ -320,7 +320,7 @@
/* the seac operator must not be nested */
decoder->seac = TRUE;
- error = t1_decoder_parse_glyph( decoder, achar_index );
+ error = t1_decoder_parse_glyph( decoder, (FT_UInt)achar_index );
decoder->seac = FALSE;
if ( error )
goto Exit;
@@ -381,10 +381,10 @@
/* compute random seed from stack address of parameter */
- seed = (FT_Fixed)( ( (FT_PtrDist)(char*)&seed ^
- (FT_PtrDist)(char*)&decoder ^
- (FT_PtrDist)(char*)&charstring_base ) &
- FT_ULONG_MAX ) ;
+ seed = (FT_Fixed)( ( (FT_Offset)(char*)&seed ^
+ (FT_Offset)(char*)&decoder ^
+ (FT_Offset)(char*)&charstring_base ) &
+ FT_ULONG_MAX );
seed = ( seed ^ ( seed >> 10 ) ^ ( seed >> 20 ) ) & 0xFFFFL;
if ( seed == 0 )
seed = 0x7384;
@@ -796,7 +796,8 @@
known_othersubr_result_cnt = 1;
if ( hinter )
- hinter->reset( hinter->hints, builder->current->n_points );
+ hinter->reset( hinter->hints,
+ (FT_UInt)builder->current->n_points );
break;
case 12:
@@ -861,7 +862,7 @@
*values++ = tmp;
}
- known_othersubr_result_cnt = num_points;
+ known_othersubr_result_cnt = (FT_Int)num_points;
break;
}
@@ -879,8 +880,8 @@
idx = Fix2Int( top[0] );
- if ( idx < 0 ||
- idx + blend->num_designs > decoder->len_buildchar )
+ if ( idx < 0 ||
+ (FT_UInt)idx + blend->num_designs > decoder->len_buildchar )
goto Unexpected_OtherSubr;
ft_memcpy( &decoder->buildchar[idx],
@@ -1094,7 +1095,8 @@
/* close hints recording session */
if ( hinter )
{
- if ( hinter->close( hinter->hints, builder->current->n_points ) )
+ if ( hinter->close( hinter->hints,
+ (FT_UInt)builder->current->n_points ) )
goto Syntax_Error;
/* apply hints to the loaded glyph outline now */
@@ -1346,7 +1348,7 @@
FT_TRACE4(( " callsubr" ));
idx = Fix2Int( top[0] );
- if ( idx < 0 || idx >= (FT_Int)decoder->num_subrs )
+ if ( idx < 0 || idx >= decoder->num_subrs )
{
FT_ERROR(( "t1_decoder_parse_charstrings:"
" invalid subrs index\n" ));
@@ -1579,7 +1581,7 @@
/* retrieve PSNames interface from list of current modules */
{
- FT_Service_PsCMaps psnames = 0;
+ FT_Service_PsCMaps psnames;
FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
diff --git a/freetype/src/psaux/t1decode.h b/freetype/src/psaux/t1decode.h
index c15ba3880..04fe33be2 100644
--- a/freetype/src/psaux/t1decode.h
+++ b/freetype/src/psaux/t1decode.h
@@ -4,7 +4,7 @@
/* */
/* PostScript Type 1 decoding routines (specification). */
/* */
-/* Copyright 2000-2001, 2002, 2003 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/Jamfile b/freetype/src/pshinter/Jamfile
index 779f1b0b8..e763c47ce 100644
--- a/freetype/src/pshinter/Jamfile
+++ b/freetype/src/pshinter/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/pshinter Jamfile
#
-# Copyright 2001, 2003 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pshinter/module.mk b/freetype/src/pshinter/module.mk
index ed24eb7fa..1fd8e55a3 100644
--- a/freetype/src/pshinter/module.mk
+++ b/freetype/src/pshinter/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2001, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/pshinter/pshalgo.c b/freetype/src/pshinter/pshalgo.c
index 3d65831b5..384123758 100644
--- a/freetype/src/pshinter/pshalgo.c
+++ b/freetype/src/pshinter/pshalgo.c
@@ -4,7 +4,7 @@
/* */
/* PostScript hinting algorithm (body). */
/* */
-/* Copyright 2001-2010, 2012-2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -30,16 +30,14 @@
#ifdef DEBUG_HINTER
- PSH_Hint_Table ps_debug_hint_table = 0;
- PSH_HintFunc ps_debug_hint_func = 0;
- PSH_Glyph ps_debug_glyph = 0;
+ PSH_Hint_Table ps_debug_hint_table = NULL;
+ PSH_HintFunc ps_debug_hint_func = NULL;
+ PSH_Glyph ps_debug_glyph = NULL;
#endif
#define COMPUTE_INFLEXS /* compute inflection points to optimize `S' */
/* and similar glyphs */
-#define STRONGER /* slightly increase the contrast of smooth */
- /* hinting */
/*************************************************************************/
@@ -67,13 +65,13 @@
{
FT_FREE( table->zones );
table->num_zones = 0;
- table->zone = 0;
+ table->zone = NULL;
FT_FREE( table->sort );
FT_FREE( table->hints );
table->num_hints = 0;
table->max_hints = 0;
- table->sort_global = 0;
+ table->sort_global = NULL;
}
@@ -121,7 +119,7 @@
PSH_Hint hint2;
- hint->parent = 0;
+ hint->parent = NULL;
for ( ; count > 0; count--, sorted++ )
{
hint2 = sorted[0];
@@ -194,7 +192,7 @@
table->sort_global = table->sort + count;
table->num_hints = 0;
table->num_zones = 0;
- table->zone = 0;
+ table->zone = NULL;
/* initialize the `table->hints' array */
{
@@ -890,9 +888,6 @@
/*************************************************************************/
/*************************************************************************/
-#define PSH_ZONE_MIN -3200000L
-#define PSH_ZONE_MAX +3200000L
-
#define xxDEBUG_ZONES
@@ -910,10 +905,6 @@
zone->max );
}
-#else
-
-#define psh_print_zone( x ) do { } while ( 0 )
-
#endif /* DEBUG_ZONES */
@@ -1149,7 +1140,7 @@
glyph->num_points = 0;
glyph->num_contours = 0;
- glyph->memory = 0;
+ glyph->memory = NULL;
}
@@ -1274,8 +1265,8 @@
FT_NEW_ARRAY( glyph->contours, outline->n_contours ) )
goto Exit;
- glyph->num_points = outline->n_points;
- glyph->num_contours = outline->n_contours;
+ glyph->num_points = (FT_UInt)outline->n_points;
+ glyph->num_contours = (FT_UInt)outline->n_contours;
{
FT_UInt first = 0, next, n;
@@ -1285,15 +1276,15 @@
for ( n = 0; n < glyph->num_contours; n++ )
{
- FT_Int count;
+ FT_UInt count;
PSH_Point point;
- next = outline->contours[n] + 1;
+ next = (FT_UInt)outline->contours[n] + 1;
count = next - first;
contour->start = points + first;
- contour->count = (FT_UInt)count;
+ contour->count = count;
if ( count > 0 )
{
@@ -1696,16 +1687,12 @@
mask++;
for ( ; num_masks > 1; num_masks--, mask++ )
{
- FT_UInt next;
- FT_Int count;
+ FT_UInt next = FT_MIN( mask->end_point, glyph->num_points );
- next = mask->end_point > glyph->num_points
- ? glyph->num_points
- : mask->end_point;
- count = next - first;
- if ( count > 0 )
+ if ( next > first )
{
+ FT_UInt count = next - first;
PSH_Point point = glyph->points + first;
@@ -2048,7 +2035,7 @@
/* count the number of strong points in this contour */
next = start + contour->count;
fit_count = 0;
- first = 0;
+ first = NULL;
for ( point = start; point < next; point++ )
if ( psh_point_is_fitted( point ) )
diff --git a/freetype/src/pshinter/pshalgo.h b/freetype/src/pshinter/pshalgo.h
index c70f31ea9..8373e5ec2 100644
--- a/freetype/src/pshinter/pshalgo.h
+++ b/freetype/src/pshinter/pshalgo.h
@@ -4,7 +4,7 @@
/* */
/* PostScript hinting algorithm (specification). */
/* */
-/* Copyright 2001-2003, 2008, 2013 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -30,15 +30,12 @@ FT_BEGIN_HEADER
/* handle to Hint structure */
typedef struct PSH_HintRec_* PSH_Hint;
- /* hint bit-flags */
- typedef enum PSH_Hint_Flags_
- {
- PSH_HINT_GHOST = PS_HINT_FLAG_GHOST,
- PSH_HINT_BOTTOM = PS_HINT_FLAG_BOTTOM,
- PSH_HINT_ACTIVE = 4,
- PSH_HINT_FITTED = 8
- } PSH_Hint_Flags;
+ /* hint bit-flags */
+#define PSH_HINT_GHOST PS_HINT_FLAG_GHOST
+#define PSH_HINT_BOTTOM PS_HINT_FLAG_BOTTOM
+#define PSH_HINT_ACTIVE 4U
+#define PSH_HINT_FITTED 8U
#define psh_hint_is_active( x ) ( ( (x)->flags & PSH_HINT_ACTIVE ) != 0 )
@@ -49,6 +46,7 @@ FT_BEGIN_HEADER
#define psh_hint_deactivate( x ) (x)->flags &= ~PSH_HINT_ACTIVE
#define psh_hint_set_fitted( x ) (x)->flags |= PSH_HINT_FITTED
+
/* hint structure */
typedef struct PSH_HintRec_
{
@@ -112,14 +110,12 @@ FT_BEGIN_HEADER
#define PSH_DIR_IS_VERTICAL( d ) PSH_DIR_COMPARE( d, PSH_DIR_VERTICAL )
- /* the following bit-flags are computed once by the glyph */
- /* analyzer, for both dimensions */
- enum
- {
- PSH_POINT_OFF = 1, /* point is off the curve */
- PSH_POINT_SMOOTH = 2, /* point is smooth */
- PSH_POINT_INFLEX = 4 /* point is inflection */
- };
+ /* the following bit-flags are computed once by the glyph */
+ /* analyzer, for both dimensions */
+#define PSH_POINT_OFF 1U /* point is off the curve */
+#define PSH_POINT_SMOOTH 2U /* point is smooth */
+#define PSH_POINT_INFLEX 4U /* point is inflection */
+
#define psh_point_is_smooth( p ) ( (p)->flags & PSH_POINT_SMOOTH )
#define psh_point_is_off( p ) ( (p)->flags & PSH_POINT_OFF )
@@ -129,17 +125,16 @@ FT_BEGIN_HEADER
#define psh_point_set_off( p ) (p)->flags |= PSH_POINT_OFF
#define psh_point_set_inflex( p ) (p)->flags |= PSH_POINT_INFLEX
+
/* the following bit-flags are re-computed for each dimension */
- enum
- {
- PSH_POINT_STRONG = 16, /* point is strong */
- PSH_POINT_FITTED = 32, /* point is already fitted */
- PSH_POINT_EXTREMUM = 64, /* point is local extremum */
- PSH_POINT_POSITIVE = 128, /* extremum has positive contour flow */
- PSH_POINT_NEGATIVE = 256, /* extremum has negative contour flow */
- PSH_POINT_EDGE_MIN = 512, /* point is aligned to left/bottom stem edge */
- PSH_POINT_EDGE_MAX = 1024 /* point is aligned to top/right stem edge */
- };
+#define PSH_POINT_STRONG 16U /* point is strong */
+#define PSH_POINT_FITTED 32U /* point is already fitted */
+#define PSH_POINT_EXTREMUM 64U /* point is local extremum */
+#define PSH_POINT_POSITIVE 128U /* extremum has positive contour flow */
+#define PSH_POINT_NEGATIVE 256U /* extremum has negative contour flow */
+#define PSH_POINT_EDGE_MIN 512U /* point is aligned to left/bottom stem edge */
+#define PSH_POINT_EDGE_MAX 1024U /* point is aligned to top/right stem edge */
+
#define psh_point_is_strong( p ) ( (p)->flags2 & PSH_POINT_STRONG )
#define psh_point_is_fitted( p ) ( (p)->flags2 & PSH_POINT_FITTED )
diff --git a/freetype/src/pshinter/pshglob.c b/freetype/src/pshinter/pshglob.c
index 3073784df..ba132b610 100644
--- a/freetype/src/pshinter/pshglob.c
+++ b/freetype/src/pshinter/pshglob.c
@@ -5,7 +5,7 @@
/* PostScript hinter global hinting management (body). */
/* Inspired by the new auto-hinter module. */
/* */
-/* Copyright 2001-2004, 2006, 2010, 2012-2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
@@ -23,7 +23,7 @@
#include "pshglob.h"
#ifdef DEBUG_HINTER
- PSH_Globals ps_debug_globals = 0;
+ PSH_Globals ps_debug_globals = NULL;
#endif
@@ -240,7 +240,7 @@
FT_Int family )
{
PSH_Blue_Table top_table, bot_table;
- FT_Int count_top, count_bot;
+ FT_UInt count_top, count_bot;
if ( family )
@@ -369,7 +369,7 @@
{
FT_UInt count;
FT_UInt num;
- PSH_Blue_Table table = 0;
+ PSH_Blue_Table table = NULL;
/* */
/* Determine whether we need to suppress overshoots or */
@@ -635,7 +635,7 @@
FT_FREE( globals );
#ifdef DEBUG_HINTER
- ps_debug_globals = 0;
+ ps_debug_globals = NULL;
#endif
}
}
diff --git a/freetype/src/pshinter/pshglob.h b/freetype/src/pshinter/pshglob.h
index 8b0cfddb1..f2f9cae14 100644
--- a/freetype/src/pshinter/pshglob.h
+++ b/freetype/src/pshinter/pshglob.h
@@ -4,7 +4,7 @@
/* */
/* PostScript hinter global hinting management. */
/* */
-/* Copyright 2001, 2002, 2003, 2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshinter.c b/freetype/src/pshinter/pshinter.c
index b35a2a91c..9e65fe2a4 100644
--- a/freetype/src/pshinter/pshinter.c
+++ b/freetype/src/pshinter/pshinter.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PostScript Hinting module */
/* */
-/* Copyright 2001, 2003 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshmod.c b/freetype/src/pshinter/pshmod.c
index 5415670d9..0a7c1496b 100644
--- a/freetype/src/pshinter/pshmod.c
+++ b/freetype/src/pshinter/pshmod.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PostScript hinter module implementation (body). */
/* */
-/* Copyright 2001, 2002, 2007, 2009, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshmod.h b/freetype/src/pshinter/pshmod.h
index 0ae7e96f5..a58d85653 100644
--- a/freetype/src/pshinter/pshmod.h
+++ b/freetype/src/pshinter/pshmod.h
@@ -4,7 +4,7 @@
/* */
/* PostScript hinter module interface (specification). */
/* */
-/* Copyright 2001 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshnterr.h b/freetype/src/pshinter/pshnterr.h
index 7cc180f0c..ce790a8ef 100644
--- a/freetype/src/pshinter/pshnterr.h
+++ b/freetype/src/pshinter/pshnterr.h
@@ -4,7 +4,7 @@
/* */
/* PS Hinter error codes (specification only). */
/* */
-/* Copyright 2003, 2012 by */
+/* Copyright 2003-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshpic.c b/freetype/src/pshinter/pshpic.c
index 765a5d3aa..ab446a2ea 100644
--- a/freetype/src/pshinter/pshpic.c
+++ b/freetype/src/pshinter/pshpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for pshinter module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshpic.h b/freetype/src/pshinter/pshpic.h
index 0be8841ee..d6d6d2e18 100644
--- a/freetype/src/pshinter/pshpic.h
+++ b/freetype/src/pshinter/pshpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for pshinter module. */
/* */
-/* Copyright 2009, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/pshinter/pshrec.c b/freetype/src/pshinter/pshrec.c
index 4804813a2..d496a0d0f 100644
--- a/freetype/src/pshinter/pshrec.c
+++ b/freetype/src/pshinter/pshrec.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PostScript hints recorder (body). */
/* */
-/* Copyright 2001-2004, 2007, 2009, 2013, 2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -31,7 +31,7 @@
#define FT_COMPONENT trace_pshrec
#ifdef DEBUG_HINTER
- PS_Hints ps_debug_hints = 0;
+ PS_Hints ps_debug_hints = NULL;
int ps_debug_no_horz_hints = 0;
int ps_debug_no_vert_hints = 0;
#endif
@@ -85,7 +85,7 @@
{
FT_Error error = FT_Err_Ok;
FT_UInt count;
- PS_Hint hint = 0;
+ PS_Hint hint = NULL;
count = table->num_hints;
@@ -167,12 +167,12 @@
/* clear a given bit */
static void
ps_mask_clear_bit( PS_Mask mask,
- FT_Int idx )
+ FT_UInt idx )
{
FT_Byte* p;
- if ( (FT_UInt)idx >= mask->num_bits )
+ if ( idx >= mask->num_bits )
return;
p = mask->bytes + ( idx >> 3 );
@@ -183,17 +183,14 @@
/* set a given bit, possibly grow the mask */
static FT_Error
ps_mask_set_bit( PS_Mask mask,
- FT_Int idx,
+ FT_UInt idx,
FT_Memory memory )
{
FT_Error error = FT_Err_Ok;
FT_Byte* p;
- if ( idx < 0 )
- goto Exit;
-
- if ( (FT_UInt)idx >= mask->num_bits )
+ if ( idx >= mask->num_bits )
{
error = ps_mask_ensure( mask, idx + 1, memory );
if ( error )
@@ -257,7 +254,7 @@
{
FT_UInt count;
FT_Error error = FT_Err_Ok;
- PS_Mask mask = 0;
+ PS_Mask mask = NULL;
count = table->num_masks;
@@ -372,8 +369,8 @@
/* test whether two masks in a table intersect */
static FT_Int
ps_mask_table_test_intersect( PS_Mask_Table table,
- FT_Int index1,
- FT_Int index2 )
+ FT_UInt index1,
+ FT_UInt index2 )
{
PS_Mask mask1 = table->masks + index1;
PS_Mask mask2 = table->masks + index2;
@@ -404,23 +401,25 @@
/* merge two masks, used by ps_mask_table_merge_all */
static FT_Error
ps_mask_table_merge( PS_Mask_Table table,
- FT_Int index1,
- FT_Int index2,
+ FT_UInt index1,
+ FT_UInt index2,
FT_Memory memory )
{
- FT_UInt temp;
FT_Error error = FT_Err_Ok;
/* swap index1 and index2 so that index1 < index2 */
if ( index1 > index2 )
{
+ FT_UInt temp;
+
+
temp = index1;
index1 = index2;
index2 = temp;
}
- if ( index1 < index2 && index1 >= 0 && index2 < (FT_Int)table->num_masks )
+ if ( index1 < index2 && index2 < table->num_masks )
{
/* we need to merge the bitsets of index1 and index2 with a */
/* simple union */
@@ -453,7 +452,7 @@
/* merge (unite) the bitsets */
read = mask2->bytes;
write = mask1->bytes;
- pos = (FT_UInt)( ( count2 + 7 ) >> 3 );
+ pos = ( count2 + 7 ) >> 3;
for ( ; pos > 0; pos-- )
{
@@ -468,14 +467,17 @@
mask2->num_bits = 0;
mask2->end_point = 0;
- delta = table->num_masks - 1 - index2; /* number of masks to move */
+ /* number of masks to move */
+ delta = (FT_Int)( table->num_masks - 1 - index2 );
if ( delta > 0 )
{
/* move to end of table for reuse */
PS_MaskRec dummy = *mask2;
- ft_memmove( mask2, mask2 + 1, delta * sizeof ( PS_MaskRec ) );
+ ft_memmove( mask2,
+ mask2 + 1,
+ (FT_UInt)delta * sizeof ( PS_MaskRec ) );
mask2[delta] = dummy;
}
@@ -502,13 +504,19 @@
FT_Error error = FT_Err_Ok;
- for ( index1 = table->num_masks - 1; index1 > 0; index1-- )
+ /* both loops go down to 0, thus FT_Int for index1 and index2 */
+ for ( index1 = (FT_Int)table->num_masks - 1; index1 > 0; index1-- )
{
for ( index2 = index1 - 1; index2 >= 0; index2-- )
{
- if ( ps_mask_table_test_intersect( table, index1, index2 ) )
+ if ( ps_mask_table_test_intersect( table,
+ (FT_UInt)index1,
+ (FT_UInt)index2 ) )
{
- error = ps_mask_table_merge( table, index2, index1, memory );
+ error = ps_mask_table_merge( table,
+ (FT_UInt)index2,
+ (FT_UInt)index1,
+ memory );
if ( error )
goto Exit;
@@ -670,8 +678,8 @@
{
PS_Mask mask;
FT_UInt idx;
- FT_UInt max = dim->hints.num_hints;
- PS_Hint hint = dim->hints.hints;
+ FT_UInt max = dim->hints.num_hints;
+ PS_Hint hint = dim->hints.hints;
for ( idx = 0; idx < max; idx++, hint++ )
@@ -742,17 +750,26 @@
}
/* now, set the bits for our hints in the counter mask */
- error = ps_mask_set_bit( counter, hint1, memory );
- if ( error )
- goto Exit;
+ if ( hint1 >= 0 )
+ {
+ error = ps_mask_set_bit( counter, (FT_UInt)hint1, memory );
+ if ( error )
+ goto Exit;
+ }
- error = ps_mask_set_bit( counter, hint2, memory );
- if ( error )
- goto Exit;
+ if ( hint2 >= 0 )
+ {
+ error = ps_mask_set_bit( counter, (FT_UInt)hint2, memory );
+ if ( error )
+ goto Exit;
+ }
- error = ps_mask_set_bit( counter, hint3, memory );
- if ( error )
- goto Exit;
+ if ( hint3 >= 0 )
+ {
+ error = ps_mask_set_bit( counter, (FT_UInt)hint3, memory );
+ if ( error )
+ goto Exit;
+ }
Exit:
return error;
@@ -793,7 +810,7 @@
ps_dimension_done( &hints->dimension[1], memory );
hints->error = FT_Err_Ok;
- hints->memory = 0;
+ hints->memory = NULL;
}
@@ -811,78 +828,57 @@
ps_hints_open( PS_Hints hints,
PS_Hint_Type hint_type )
{
- switch ( hint_type )
- {
- case PS_HINT_TYPE_1:
- case PS_HINT_TYPE_2:
- hints->error = FT_Err_Ok;
- hints->hint_type = hint_type;
+ hints->error = FT_Err_Ok;
+ hints->hint_type = hint_type;
- ps_dimension_init( &hints->dimension[0] );
- ps_dimension_init( &hints->dimension[1] );
- break;
-
- default:
- hints->error = FT_THROW( Invalid_Argument );
- hints->hint_type = hint_type;
-
- FT_TRACE0(( "ps_hints_open: invalid charstring type\n" ));
- break;
- }
+ ps_dimension_init( &hints->dimension[0] );
+ ps_dimension_init( &hints->dimension[1] );
}
/* add one or more stems to the current hints table */
static void
ps_hints_stem( PS_Hints hints,
- FT_Int dimension,
- FT_UInt count,
+ FT_UInt dimension,
+ FT_Int count,
FT_Long* stems )
{
- if ( !hints->error )
- {
- /* limit "dimension" to 0..1 */
- if ( dimension < 0 || dimension > 1 )
- {
- FT_TRACE0(( "ps_hints_stem: invalid dimension (%d) used\n",
- dimension ));
- dimension = ( dimension != 0 );
- }
+ PS_Dimension dim;
- /* record the stems in the current hints/masks table */
- switch ( hints->hint_type )
- {
- case PS_HINT_TYPE_1: /* Type 1 "hstem" or "vstem" operator */
- case PS_HINT_TYPE_2: /* Type 2 "hstem" or "vstem" operator */
- {
- PS_Dimension dim = &hints->dimension[dimension];
+ if ( hints->error )
+ return;
- for ( ; count > 0; count--, stems += 2 )
- {
- FT_Error error;
- FT_Memory memory = hints->memory;
+ /* limit "dimension" to 0..1 */
+ if ( dimension > 1 )
+ {
+ FT_TRACE0(( "ps_hints_stem: invalid dimension (%d) used\n",
+ dimension ));
+ dimension = ( dimension != 0 );
+ }
+ /* record the stems in the current hints/masks table */
+ /* (Type 1 & 2's `hstem' or `vstem' operators) */
+ dim = &hints->dimension[dimension];
- error = ps_dimension_add_t1stem(
- dim, (FT_Int)stems[0], (FT_Int)stems[1],
- memory, NULL );
- if ( error )
- {
- FT_ERROR(( "ps_hints_stem: could not add stem"
- " (%d,%d) to hints table\n", stems[0], stems[1] ));
+ for ( ; count > 0; count--, stems += 2 )
+ {
+ FT_Error error;
+ FT_Memory memory = hints->memory;
- hints->error = error;
- return;
- }
- }
- break;
- }
- default:
- FT_TRACE0(( "ps_hints_stem: called with invalid hint type (%d)\n",
- hints->hint_type ));
- break;
+ error = ps_dimension_add_t1stem( dim,
+ (FT_Int)stems[0],
+ (FT_Int)stems[1],
+ memory,
+ NULL );
+ if ( error )
+ {
+ FT_ERROR(( "ps_hints_stem: could not add stem"
+ " (%d,%d) to hints table\n", stems[0], stems[1] ));
+
+ hints->error = error;
+ return;
}
}
}
@@ -891,7 +887,7 @@
/* add one Type1 counter stem to the current hints table */
static void
ps_hints_t1stem3( PS_Hints hints,
- FT_Int dimension,
+ FT_UInt dimension,
FT_Fixed* stems )
{
FT_Error error = FT_Err_Ok;
@@ -906,7 +902,7 @@
/* limit "dimension" to 0..1 */
- if ( dimension < 0 || dimension > 1 )
+ if ( dimension > 1 )
{
FT_TRACE0(( "ps_hints_t1stem3: invalid dimension (%d) used\n",
dimension ));
@@ -1128,7 +1124,7 @@
static void
t1_hints_stem( T1_Hints hints,
- FT_Int dimension,
+ FT_UInt dimension,
FT_Fixed* coords )
{
FT_Pos stems[2];
@@ -1172,12 +1168,12 @@
static void
t2_hints_stems( T2_Hints hints,
- FT_Int dimension,
+ FT_UInt dimension,
FT_Int count,
FT_Fixed* coords )
{
- FT_Pos stems[32], y, n;
- FT_Int total = count;
+ FT_Pos stems[32], y;
+ FT_Int total = count, n;
y = 0;
diff --git a/freetype/src/pshinter/pshrec.h b/freetype/src/pshinter/pshrec.h
index 9952d13f8..bb94f391a 100644
--- a/freetype/src/pshinter/pshrec.h
+++ b/freetype/src/pshinter/pshrec.h
@@ -4,7 +4,7 @@
/* */
/* Postscript (Type1/Type2) hints recorder (specification). */
/* */
-/* Copyright 2001, 2002, 2003, 2006, 2008, 2014 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -61,12 +61,8 @@ FT_BEGIN_HEADER
/* hint flags */
- typedef enum PS_Hint_Flags_
- {
- PS_HINT_FLAG_GHOST = 1,
- PS_HINT_FLAG_BOTTOM = 2
-
- } PS_Hint_Flags;
+#define PS_HINT_FLAG_GHOST 1U
+#define PS_HINT_FLAG_BOTTOM 2U
/* hint descriptor */
diff --git a/freetype/src/pshinter/rules.mk b/freetype/src/pshinter/rules.mk
index 888ece105..7838e676e 100644
--- a/freetype/src/pshinter/rules.mk
+++ b/freetype/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2001, 2003, 2011 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ PSHINTER_DIR := $(SRC_DIR)/pshinter
# compilation flags for the driver
#
-PSHINTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR))
+PSHINTER_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# PSHINTER driver sources (i.e., C files)
diff --git a/freetype/src/psnames/Jamfile b/freetype/src/psnames/Jamfile
index 06c0dda66..b9fe23509 100644
--- a/freetype/src/psnames/Jamfile
+++ b/freetype/src/psnames/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/psnames Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psnames/module.mk b/freetype/src/psnames/module.mk
index a6e908257..3708f6036 100644
--- a/freetype/src/psnames/module.mk
+++ b/freetype/src/psnames/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/psnames/psmodule.c b/freetype/src/psnames/psmodule.c
index 4d172b9c8..1f9850140 100644
--- a/freetype/src/psnames/psmodule.c
+++ b/freetype/src/psnames/psmodule.c
@@ -4,7 +4,7 @@
/* */
/* PSNames module implementation (body). */
/* */
-/* Copyright 1996-2003, 2005-2008, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -312,7 +312,7 @@
/* we first allocate the table */
table->num_maps = 0;
- table->maps = 0;
+ table->maps = NULL;
if ( !FT_NEW_ARRAY( table->maps, num_glyphs + EXTRA_GLYPH_LIST_SIZE ) )
{
diff --git a/freetype/src/psnames/psmodule.h b/freetype/src/psnames/psmodule.h
index 28fa14807..f85f32219 100644
--- a/freetype/src/psnames/psmodule.h
+++ b/freetype/src/psnames/psmodule.h
@@ -4,7 +4,7 @@
/* */
/* High-level PSNames module interface (specification). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psnames/psnamerr.h b/freetype/src/psnames/psnamerr.h
index acda7f967..09cc247b7 100644
--- a/freetype/src/psnames/psnamerr.h
+++ b/freetype/src/psnames/psnamerr.h
@@ -4,7 +4,7 @@
/* */
/* PS names module error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psnames/psnames.c b/freetype/src/psnames/psnames.c
index 1ede225dc..a4385961e 100644
--- a/freetype/src/psnames/psnames.c
+++ b/freetype/src/psnames/psnames.c
@@ -4,7 +4,7 @@
/* */
/* FreeType PSNames module component (body only). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psnames/pspic.c b/freetype/src/psnames/pspic.c
index 2b3d381b0..660360a52 100644
--- a/freetype/src/psnames/pspic.c
+++ b/freetype/src/psnames/pspic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for psnames module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psnames/pspic.h b/freetype/src/psnames/pspic.h
index 578301f2a..a99a3d715 100644
--- a/freetype/src/psnames/pspic.h
+++ b/freetype/src/psnames/pspic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for psnames module. */
/* */
-/* Copyright 2009, 2012 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psnames/pstables.h b/freetype/src/psnames/pstables.h
index 0a6637f98..3f31c31b1 100644
--- a/freetype/src/psnames/pstables.h
+++ b/freetype/src/psnames/pstables.h
@@ -4,7 +4,7 @@
/* */
/* PostScript glyph names. */
/* */
-/* Copyright 2005, 2008, 2011 by */
+/* Copyright 2005-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/psnames/rules.mk b/freetype/src/psnames/rules.mk
index f321de2d6..3c774867f 100644
--- a/freetype/src/psnames/rules.mk
+++ b/freetype/src/psnames/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2001, 2003, 2011, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ PSNAMES_DIR := $(SRC_DIR)/psnames
# compilation flags for the driver
#
-PSNAMES_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR))
+PSNAMES_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# PSNames driver sources (i.e., C files)
diff --git a/freetype/src/raster/Jamfile b/freetype/src/raster/Jamfile
index 4f60e87c7..f03ed3231 100644
--- a/freetype/src/raster/Jamfile
+++ b/freetype/src/raster/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/raster Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/raster/ftmisc.h b/freetype/src/raster/ftmisc.h
index 703155a42..19be4cadc 100644
--- a/freetype/src/raster/ftmisc.h
+++ b/freetype/src/raster/ftmisc.h
@@ -5,7 +5,7 @@
/* Miscellaneous macros for stand-alone rasterizer (specification */
/* only). */
/* */
-/* Copyright 2005, 2009, 2010 by */
+/* Copyright 2005-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
diff --git a/freetype/src/raster/ftraster.c b/freetype/src/raster/ftraster.c
index 7fae8ef28..95c7c769c 100644
--- a/freetype/src/raster/ftraster.c
+++ b/freetype/src/raster/ftraster.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer (body). */
/* */
-/* Copyright 1996-2003, 2005, 2007-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -49,6 +49,10 @@
#ifdef _STANDALONE_
+ /* The size in bytes of the render pool used by the scan-line converter */
+ /* to do all of its work. */
+#define FT_RENDER_POOL_SIZE 16384L
+
#define FT_CONFIG_STANDARD_LIBRARY_H <stdlib.h>
#include <string.h> /* for memset */
@@ -150,14 +154,6 @@
/* define DEBUG_RASTER if you want to compile a debugging version */
/* #define DEBUG_RASTER */
- /* define FT_RASTER_OPTION_ANTI_ALIASING if you want to support */
- /* 5-levels anti-aliasing */
-/* #define FT_RASTER_OPTION_ANTI_ALIASING */
-
- /* The size of the two-lines intermediate bitmap used */
- /* for anti-aliasing, in bytes. */
-#define RASTER_GRAY_LINES 2048
-
/*************************************************************************/
/*************************************************************************/
@@ -183,6 +179,8 @@
#define FT_ERR_XCAT( x, y ) x ## y
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
+#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
+
/* This macro is used to indicate that a function parameter is unused. */
/* Its purpose is simply to reduce compiler warnings. Note also that */
/* simply defining it as `(void)x' doesn't avoid warnings with certain */
@@ -199,6 +197,7 @@
#define FT_TRACE( x ) do { } while ( 0 ) /* nothing */
#define FT_TRACE1( x ) do { } while ( 0 ) /* nothing */
#define FT_TRACE6( x ) do { } while ( 0 ) /* nothing */
+#define FT_TRACE7( x ) do { } while ( 0 ) /* nothing */
#endif
#ifndef FT_THROW
@@ -318,7 +317,7 @@
typedef union Alignment_
{
- long l;
+ Long l;
void* p;
void (*f)(void);
@@ -334,9 +333,9 @@
/* values for the `flags' bit field */
-#define Flow_Up 0x8
-#define Overshoot_Top 0x10
-#define Overshoot_Bottom 0x20
+#define Flow_Up 0x08U
+#define Overshoot_Top 0x10U
+#define Overshoot_Bottom 0x20U
/* States of each line, arc, and profile */
@@ -358,14 +357,14 @@
FT_F26Dot6 X; /* current coordinate during sweep */
PProfile link; /* link to next profile (various purposes) */
PLong offset; /* start of profile's data in render pool */
- unsigned flags; /* Bit 0-2: drop-out mode */
+ UShort flags; /* Bit 0-2: drop-out mode */
/* Bit 3: profile orientation (up/down) */
/* Bit 4: is top profile? */
/* Bit 5: is bottom profile? */
- long height; /* profile's height in scanlines */
- long start; /* profile's starting scanline */
+ Long height; /* profile's height in scanlines */
+ Long start; /* profile's starting scanline */
- unsigned countL; /* number of lines to step before this */
+ Int countL; /* number of lines to step before this */
/* profile becomes drawable */
PProfile next; /* next profile in same contour, used */
@@ -387,7 +386,7 @@
#define AlignProfileSize \
- ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( long ) )
+ ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( Long ) )
#undef RAS_ARG
@@ -451,7 +450,7 @@
#define CEILING( x ) ( ( (x) + ras.precision - 1 ) & -ras.precision )
#define TRUNC( x ) ( (Long)(x) >> ras.precision_bits )
#define FRAC( x ) ( (x) & ( ras.precision - 1 ) )
-#define SCALED( x ) ( ( (ULong)(x) << ras.scale_shift ) - ras.precision_half )
+#define SCALED( x ) ( ( (Long)(x) << ras.scale_shift ) - ras.precision_half )
#define IS_BOTTOM_OVERSHOOT( x ) \
(Bool)( CEILING( x ) - x >= ras.precision_half )
@@ -514,9 +513,6 @@
Short traceIncr; /* sweep's increment in target bitmap */
- Short gray_min_x; /* current min x during gray rendering */
- Short gray_max_x; /* current max x during gray rendering */
-
/* dispatch variables */
Function_Sweep_Init* Proc_Sweep_Init;
@@ -529,45 +525,19 @@
Bool second_pass; /* indicates whether a horizontal pass */
/* should be performed to control */
/* drop-out accurately when calling */
- /* Render_Glyph. Note that there is */
- /* no horizontal pass during gray */
- /* rendering. */
+ /* Render_Glyph. */
TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */
black_TBand band_stack[16]; /* band stack used for sub-banding */
Int band_top; /* band stack top */
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
- Byte* grays;
-
- Byte gray_lines[RASTER_GRAY_LINES];
- /* Intermediate table used to render the */
- /* graylevels pixmaps. */
- /* gray_lines is a buffer holding two */
- /* monochrome scanlines */
-
- Short gray_width; /* width in bytes of one monochrome */
- /* intermediate scanline of gray_lines. */
- /* Each gray pixel takes 2 bits long there */
-
- /* The gray_lines must hold 2 lines, thus with size */
- /* in bytes of at least `gray_width*2'. */
-
-#endif /* FT_RASTER_ANTI_ALIASING */
-
};
typedef struct black_TRaster_
{
- char* buffer;
- long buffer_size;
void* memory;
- black_PWorker worker;
- Byte grays[5];
- Short gray_width;
} black_TRaster, *black_PRaster;
@@ -583,70 +553,6 @@
#endif /* !FT_STATIC_RASTER */
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
- /* A lookup table used to quickly count set bits in four gray 2x2 */
- /* cells. The values of the table have been produced with the */
- /* following code: */
- /* */
- /* for ( i = 0; i < 256; i++ ) */
- /* { */
- /* l = 0; */
- /* j = i; */
- /* */
- /* for ( c = 0; c < 4; c++ ) */
- /* { */
- /* l <<= 4; */
- /* */
- /* if ( j & 0x80 ) l++; */
- /* if ( j & 0x40 ) l++; */
- /* */
- /* j = ( j << 2 ) & 0xFF; */
- /* } */
- /* printf( "0x%04X", l ); */
- /* } */
- /* */
-
- static const short count_table[256] =
- {
- 0x0000, 0x0001, 0x0001, 0x0002, 0x0010, 0x0011, 0x0011, 0x0012,
- 0x0010, 0x0011, 0x0011, 0x0012, 0x0020, 0x0021, 0x0021, 0x0022,
- 0x0100, 0x0101, 0x0101, 0x0102, 0x0110, 0x0111, 0x0111, 0x0112,
- 0x0110, 0x0111, 0x0111, 0x0112, 0x0120, 0x0121, 0x0121, 0x0122,
- 0x0100, 0x0101, 0x0101, 0x0102, 0x0110, 0x0111, 0x0111, 0x0112,
- 0x0110, 0x0111, 0x0111, 0x0112, 0x0120, 0x0121, 0x0121, 0x0122,
- 0x0200, 0x0201, 0x0201, 0x0202, 0x0210, 0x0211, 0x0211, 0x0212,
- 0x0210, 0x0211, 0x0211, 0x0212, 0x0220, 0x0221, 0x0221, 0x0222,
- 0x1000, 0x1001, 0x1001, 0x1002, 0x1010, 0x1011, 0x1011, 0x1012,
- 0x1010, 0x1011, 0x1011, 0x1012, 0x1020, 0x1021, 0x1021, 0x1022,
- 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112,
- 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122,
- 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112,
- 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122,
- 0x1200, 0x1201, 0x1201, 0x1202, 0x1210, 0x1211, 0x1211, 0x1212,
- 0x1210, 0x1211, 0x1211, 0x1212, 0x1220, 0x1221, 0x1221, 0x1222,
- 0x1000, 0x1001, 0x1001, 0x1002, 0x1010, 0x1011, 0x1011, 0x1012,
- 0x1010, 0x1011, 0x1011, 0x1012, 0x1020, 0x1021, 0x1021, 0x1022,
- 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112,
- 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122,
- 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112,
- 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122,
- 0x1200, 0x1201, 0x1201, 0x1202, 0x1210, 0x1211, 0x1211, 0x1212,
- 0x1210, 0x1211, 0x1211, 0x1212, 0x1220, 0x1221, 0x1221, 0x1222,
- 0x2000, 0x2001, 0x2001, 0x2002, 0x2010, 0x2011, 0x2011, 0x2012,
- 0x2010, 0x2011, 0x2011, 0x2012, 0x2020, 0x2021, 0x2021, 0x2022,
- 0x2100, 0x2101, 0x2101, 0x2102, 0x2110, 0x2111, 0x2111, 0x2112,
- 0x2110, 0x2111, 0x2111, 0x2112, 0x2120, 0x2121, 0x2121, 0x2122,
- 0x2100, 0x2101, 0x2101, 0x2102, 0x2110, 0x2111, 0x2111, 0x2112,
- 0x2110, 0x2111, 0x2111, 0x2112, 0x2120, 0x2121, 0x2121, 0x2122,
- 0x2200, 0x2201, 0x2201, 0x2202, 0x2210, 0x2211, 0x2211, 0x2212,
- 0x2210, 0x2211, 0x2211, 0x2212, 0x2220, 0x2221, 0x2221, 0x2222
- };
-
-#endif /* FT_RASTER_OPTION_ANTI_ALIASING */
-
-
-
/*************************************************************************/
/*************************************************************************/
/** **/
@@ -677,11 +583,11 @@
* approximating it as a straight segment. The default value of 32 (for
* low accuracy) corresponds to
*
- * 32 / 64 == 0.5 pixels ,
+ * 32 / 64 == 0.5 pixels,
*
* while for the high accuracy case we have
*
- * 256/ (1 << 12) = 0.0625 pixels .
+ * 256 / (1 << 12) = 0.0625 pixels.
*
* `precision_jitter' is an epsilon threshold used in
* `Vertical_Sweep_Span' to deal with small imperfections in the Bezier
@@ -764,13 +670,13 @@
if ( overshoot )
ras.cProfile->flags |= Overshoot_Bottom;
- FT_TRACE6(( "New ascending profile = %p\n", ras.cProfile ));
+ FT_TRACE6(( " new ascending profile = %p\n", ras.cProfile ));
break;
case Descending_State:
if ( overshoot )
ras.cProfile->flags |= Overshoot_Top;
- FT_TRACE6(( "New descending profile = %p\n", ras.cProfile ));
+ FT_TRACE6(( " new descending profile = %p\n", ras.cProfile ));
break;
default:
@@ -825,7 +731,7 @@
PProfile oldProfile;
- FT_TRACE6(( "Ending profile %p, start = %ld, height = %ld\n",
+ FT_TRACE6(( " ending profile %p, start = %ld, height = %ld\n",
ras.cProfile, ras.cProfile->start, h ));
ras.cProfile->height = h;
@@ -1813,7 +1719,7 @@
static Bool
Decompose_Curve( RAS_ARGS UShort first,
UShort last,
- int flipped )
+ Int flipped )
{
FT_Vector v_last;
FT_Vector v_control;
@@ -1824,7 +1730,7 @@
FT_Vector* limit;
char* tags;
- unsigned tag; /* current point's state */
+ UInt tag; /* current point's state */
points = ras.outline.points;
@@ -2035,10 +1941,10 @@
/* rendering. */
/* */
static Bool
- Convert_Glyph( RAS_ARGS int flipped )
+ Convert_Glyph( RAS_ARGS Int flipped )
{
- int i;
- unsigned start;
+ Int i;
+ UInt start;
ras.fProfile = NULL;
@@ -2064,12 +1970,12 @@
ras.state = Unknown_State;
ras.gProfile = NULL;
- if ( Decompose_Curve( RAS_VARS (unsigned short)start,
- ras.outline.contours[i],
+ if ( Decompose_Curve( RAS_VARS (UShort)start,
+ (UShort)ras.outline.contours[i],
flipped ) )
return FAILURE;
- start = ras.outline.contours[i] + 1;
+ start = (UShort)ras.outline.contours[i] + 1;
/* we must now check whether the extreme arcs join or not */
if ( FRAC( ras.lastY ) == 0 &&
@@ -2083,7 +1989,8 @@
/* to be drawn. */
lastProfile = ras.cProfile;
- if ( ras.cProfile->flags & Flow_Up )
+ if ( ras.top != ras.cProfile->offset &&
+ ( ras.cProfile->flags & Flow_Up ) )
o = IS_TOP_OVERSHOOT( ras.lastY );
else
o = IS_BOTTOM_OVERSHOOT( ras.lastY );
@@ -2267,10 +2174,7 @@
ras.traceIncr = (Short)-pitch;
ras.traceOfs = -*min * pitch;
if ( pitch > 0 )
- ras.traceOfs += ( ras.target.rows - 1 ) * pitch;
-
- ras.gray_min_x = 0;
- ras.gray_max_x = 0;
+ ras.traceOfs += (Long)( ras.target.rows - 1 ) * pitch;
}
@@ -2291,6 +2195,14 @@
FT_UNUSED( right );
+ /* in high-precision mode, we need 12 digits after the comma to */
+ /* represent multiples of 1/(1<<12) = 1/4096 */
+ FT_TRACE7(( " y=%d x=[%.12f;%.12f], drop-out=%d",
+ y,
+ x1 / (double)ras.precision,
+ x2 / (double)ras.precision,
+ dropOutControl ));
+
/* Drop-out control */
e1 = TRUNC( CEILING( x1 ) );
@@ -2303,7 +2215,7 @@
if ( e2 >= 0 && e1 < ras.bWidth )
{
- int c1, c2;
+ Int c1, c2;
Byte f1, f2;
@@ -2312,17 +2224,14 @@
if ( e2 >= ras.bWidth )
e2 = ras.bWidth - 1;
+ FT_TRACE7(( " -> x=[%d;%d]", e1, e2 ));
+
c1 = (Short)( e1 >> 3 );
c2 = (Short)( e2 >> 3 );
f1 = (Byte) ( 0xFF >> ( e1 & 7 ) );
f2 = (Byte) ~( 0x7F >> ( e2 & 7 ) );
- if ( ras.gray_min_x > c1 )
- ras.gray_min_x = (short)c1;
- if ( ras.gray_max_x < c2 )
- ras.gray_max_x = (short)c2;
-
target = ras.bTarget + ras.traceOfs + c1;
c2 -= c1;
@@ -2344,6 +2253,8 @@
else
*target |= ( f1 & f2 );
}
+
+ FT_TRACE7(( "\n" ));
}
@@ -2358,6 +2269,11 @@
Short c1, f1;
+ FT_TRACE7(( " y=%d x=[%.12f;%.12f]",
+ y,
+ x1 / (double)ras.precision,
+ x2 / (double)ras.precision ));
+
/* Drop-out control */
/* e2 x2 x1 e1 */
@@ -2390,6 +2306,8 @@
Int dropOutControl = left->flags & 7;
+ FT_TRACE7(( ", drop-out=%d", dropOutControl ));
+
if ( e1 == e2 + ras.precision )
{
switch ( dropOutControl )
@@ -2436,14 +2354,14 @@
left->height <= 0 &&
!( left->flags & Overshoot_Top &&
x2 - x1 >= ras.precision_half ) )
- return;
+ goto Exit;
/* lower stub test */
if ( right->next == left &&
left->start == y &&
!( left->flags & Overshoot_Bottom &&
x2 - x1 >= ras.precision_half ) )
- return;
+ goto Exit;
if ( dropOutControl == 1 )
pxl = e2;
@@ -2452,7 +2370,7 @@
break;
default: /* modes 2, 3, 6, 7 */
- return; /* no drop-out control */
+ goto Exit; /* no drop-out control */
}
/* undocumented but confirmed: If the drop-out would result in a */
@@ -2473,26 +2391,26 @@
if ( e1 >= 0 && e1 < ras.bWidth &&
ras.bTarget[ras.traceOfs + c1] & ( 0x80 >> f1 ) )
- return;
+ goto Exit;
}
else
- return;
+ goto Exit;
}
e1 = TRUNC( pxl );
if ( e1 >= 0 && e1 < ras.bWidth )
{
+ FT_TRACE7(( " -> x=%d (drop-out)", e1 ));
+
c1 = (Short)( e1 >> 3 );
f1 = (Short)( e1 & 7 );
- if ( ras.gray_min_x > c1 )
- ras.gray_min_x = c1;
- if ( ras.gray_max_x < c1 )
- ras.gray_max_x = c1;
-
ras.bTarget[ras.traceOfs + c1] |= (char)( 0x80 >> f1 );
}
+
+ Exit:
+ FT_TRACE7(( "\n" ));
}
@@ -2539,32 +2457,39 @@
Long e1, e2;
+ FT_TRACE7(( " x=%d y=[%.12f;%.12f]",
+ y,
+ x1 / (double)ras.precision,
+ x2 / (double)ras.precision ));
+
e1 = CEILING( x1 );
e2 = FLOOR ( x2 );
if ( e1 == e2 )
{
- Byte f1;
- PByte bits;
-
-
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
-
e1 = TRUNC( e1 );
if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
{
+ Byte f1;
+ PByte bits;
PByte p;
- p = bits - e1 * ras.target.pitch;
+ FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
+
+ bits = ras.bTarget + ( y >> 3 );
+ f1 = (Byte)( 0x80 >> ( y & 7 ) );
+ p = bits - e1 * ras.target.pitch;
+
if ( ras.target.pitch > 0 )
- p += ( ras.target.rows - 1 ) * ras.target.pitch;
+ p += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
p[0] |= f1;
}
}
+
+ FT_TRACE7(( "\n" ));
}
}
@@ -2581,6 +2506,11 @@
Byte f1;
+ FT_TRACE7(( " x=%d y=[%.12f;%.12f]",
+ y,
+ x1 / (double)ras.precision,
+ x2 / (double)ras.precision ));
+
/* During the horizontal sweep, we only take care of drop-outs */
/* e1 + <-- pixel center */
@@ -2602,6 +2532,8 @@
Int dropOutControl = left->flags & 7;
+ FT_TRACE7(( ", dropout=%d", dropOutControl ));
+
if ( e1 == e2 + ras.precision )
{
switch ( dropOutControl )
@@ -2623,14 +2555,14 @@
left->height <= 0 &&
!( left->flags & Overshoot_Top &&
x2 - x1 >= ras.precision_half ) )
- return;
+ goto Exit;
/* leftmost stub test */
if ( right->next == left &&
left->start == y &&
!( left->flags & Overshoot_Bottom &&
x2 - x1 >= ras.precision_half ) )
- return;
+ goto Exit;
if ( dropOutControl == 1 )
pxl = e2;
@@ -2639,7 +2571,7 @@
break;
default: /* modes 2, 3, 6, 7 */
- return; /* no drop-out control */
+ goto Exit; /* no drop-out control */
}
/* undocumented but confirmed: If the drop-out would result in a */
@@ -2660,30 +2592,35 @@
bits -= e1 * ras.target.pitch;
if ( ras.target.pitch > 0 )
- bits += ( ras.target.rows - 1 ) * ras.target.pitch;
+ bits += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
if ( e1 >= 0 &&
(ULong)e1 < ras.target.rows &&
*bits & f1 )
- return;
+ goto Exit;
}
else
- return;
+ goto Exit;
}
- bits = ras.bTarget + ( y >> 3 );
- f1 = (Byte)( 0x80 >> ( y & 7 ) );
-
e1 = TRUNC( pxl );
if ( e1 >= 0 && (ULong)e1 < ras.target.rows )
{
+ FT_TRACE7(( " -> y=%d (drop-out)", e1 ));
+
+ bits = ras.bTarget + ( y >> 3 );
+ f1 = (Byte)( 0x80 >> ( y & 7 ) );
bits -= e1 * ras.target.pitch;
+
if ( ras.target.pitch > 0 )
- bits += ( ras.target.rows - 1 ) * ras.target.pitch;
+ bits += (Long)( ras.target.rows - 1 ) * ras.target.pitch;
bits[0] |= f1;
}
+
+ Exit:
+ FT_TRACE7(( "\n" ));
}
@@ -2695,249 +2632,6 @@
}
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
-
- /*************************************************************************/
- /* */
- /* Vertical Gray Sweep Procedure Set */
- /* */
- /* These two routines are used during the vertical gray-levels sweep */
- /* phase by the generic Draw_Sweep() function. */
- /* */
- /* NOTES */
- /* */
- /* - The target pixmap's width *must* be a multiple of 4. */
- /* */
- /* - You have to use the function Vertical_Sweep_Span() for the gray */
- /* span call. */
- /* */
- /*************************************************************************/
-
- static void
- Vertical_Gray_Sweep_Init( RAS_ARGS Short* min,
- Short* max )
- {
- Long pitch, byte_len;
-
-
- *min = *min & -2;
- *max = ( *max + 3 ) & -2;
-
- ras.traceOfs = 0;
- pitch = ras.target.pitch;
- byte_len = -pitch;
- ras.traceIncr = (Short)byte_len;
- ras.traceG = ( *min / 2 ) * byte_len;
-
- if ( pitch > 0 )
- {
- ras.traceG += ( ras.target.rows - 1 ) * pitch;
- byte_len = -byte_len;
- }
-
- ras.gray_min_x = (Short)byte_len;
- ras.gray_max_x = -(Short)byte_len;
- }
-
-
- static void
- Vertical_Gray_Sweep_Step( RAS_ARG )
- {
- short* count = (short*)count_table;
- Byte* grays;
-
-
- ras.traceOfs += ras.gray_width;
-
- if ( ras.traceOfs > ras.gray_width )
- {
- PByte pix;
-
-
- pix = ras.gTarget + ras.traceG + ras.gray_min_x * 4;
- grays = ras.grays;
-
- if ( ras.gray_max_x >= 0 )
- {
- Long last_pixel = ras.target.width - 1;
- Int last_cell = last_pixel >> 2;
- Int last_bit = last_pixel & 3;
- Bool over = 0;
-
- Int c1, c2;
- PByte bit, bit2;
-
-
- if ( ras.gray_max_x >= last_cell && last_bit != 3 )
- {
- ras.gray_max_x = last_cell - 1;
- over = 1;
- }
-
- if ( ras.gray_min_x < 0 )
- ras.gray_min_x = 0;
-
- bit = ras.bTarget + ras.gray_min_x;
- bit2 = bit + ras.gray_width;
-
- c1 = ras.gray_max_x - ras.gray_min_x;
-
- while ( c1 >= 0 )
- {
- c2 = count[*bit] + count[*bit2];
-
- if ( c2 )
- {
- pix[0] = grays[(c2 >> 12) & 0x000F];
- pix[1] = grays[(c2 >> 8 ) & 0x000F];
- pix[2] = grays[(c2 >> 4 ) & 0x000F];
- pix[3] = grays[ c2 & 0x000F];
-
- *bit = 0;
- *bit2 = 0;
- }
-
- bit++;
- bit2++;
- pix += 4;
- c1--;
- }
-
- if ( over )
- {
- c2 = count[*bit] + count[*bit2];
- if ( c2 )
- {
- switch ( last_bit )
- {
- case 2:
- pix[2] = grays[(c2 >> 4 ) & 0x000F];
- case 1:
- pix[1] = grays[(c2 >> 8 ) & 0x000F];
- default:
- pix[0] = grays[(c2 >> 12) & 0x000F];
- }
-
- *bit = 0;
- *bit2 = 0;
- }
- }
- }
-
- ras.traceOfs = 0;
- ras.traceG += ras.traceIncr;
-
- ras.gray_min_x = 32000;
- ras.gray_max_x = -32000;
- }
- }
-
-
- static void
- Horizontal_Gray_Sweep_Span( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- /* nothing, really */
- FT_UNUSED_RASTER;
- FT_UNUSED( y );
- FT_UNUSED( x1 );
- FT_UNUSED( x2 );
- FT_UNUSED( left );
- FT_UNUSED( right );
- }
-
-
- static void
- Horizontal_Gray_Sweep_Drop( RAS_ARGS Short y,
- FT_F26Dot6 x1,
- FT_F26Dot6 x2,
- PProfile left,
- PProfile right )
- {
- Long e1, e2;
- PByte pixel;
-
-
- /* During the horizontal sweep, we only take care of drop-outs */
-
- e1 = CEILING( x1 );
- e2 = FLOOR ( x2 );
-
- if ( e1 > e2 )
- {
- Int dropOutControl = left->flags & 7;
-
-
- if ( e1 == e2 + ras.precision )
- {
- switch ( dropOutControl )
- {
- case 0: /* simple drop-outs including stubs */
- e1 = e2;
- break;
-
- case 4: /* smart drop-outs including stubs */
- e1 = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
- break;
-
- case 1: /* simple drop-outs excluding stubs */
- case 5: /* smart drop-outs excluding stubs */
- /* see Vertical_Sweep_Drop for details */
-
- /* rightmost stub test */
- if ( left->next == right && left->height <= 0 )
- return;
-
- /* leftmost stub test */
- if ( right->next == left && left->start == y )
- return;
-
- if ( dropOutControl == 1 )
- e1 = e2;
- else
- e1 = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half );
-
- break;
-
- default: /* modes 2, 3, 6, 7 */
- return; /* no drop-out control */
- }
- }
- else
- return;
- }
-
- if ( e1 >= 0 )
- {
- Byte color;
-
-
- if ( x2 - x1 >= ras.precision_half )
- color = ras.grays[2];
- else
- color = ras.grays[1];
-
- e1 = TRUNC( e1 ) / 2;
- if ( e1 < ras.target.rows )
- {
- pixel = ras.gTarget - e1 * ras.target.pitch + y / 2;
- if ( ras.target.pitch > 0 )
- pixel += ( ras.target.rows - 1 ) * ras.target.pitch;
-
- if ( pixel[0] == ras.grays[0] )
- pixel[0] = color;
- }
- }
- }
-
-
-#endif /* FT_RASTER_OPTION_ANTI_ALIASING */
-
-
/*************************************************************************/
/* */
/* Generic Sweep Drawing routine */
@@ -3007,7 +2701,7 @@
while ( P )
{
- P->countL = (UShort)( P->start - min_Y );
+ P->countL = P->start - min_Y;
P = P->link;
}
@@ -3270,7 +2964,7 @@
/* <Return> */
/* FreeType error code. 0 means success. */
/* */
- FT_LOCAL_DEF( FT_Error )
+ static FT_Error
Render_Glyph( RAS_ARG )
{
FT_Error error;
@@ -3293,10 +2987,12 @@
ras.dropOutControl += 1;
}
- ras.second_pass = (FT_Byte)( !( ras.outline.flags &
- FT_OUTLINE_SINGLE_PASS ) );
+ ras.second_pass = (Bool)( !( ras.outline.flags &
+ FT_OUTLINE_SINGLE_PASS ) );
/* Vertical Sweep */
+ FT_TRACE7(( "Vertical pass (ftraster)\n" ));
+
ras.Proc_Sweep_Init = Vertical_Sweep_Init;
ras.Proc_Sweep_Span = Vertical_Sweep_Span;
ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
@@ -3304,9 +3000,9 @@
ras.band_top = 0;
ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = (short)( ras.target.rows - 1 );
+ ras.band_stack[0].y_max = (Short)( ras.target.rows - 1 );
- ras.bWidth = (unsigned short)ras.target.width;
+ ras.bWidth = (UShort)ras.target.width;
ras.bTarget = (Byte*)ras.target.buffer;
if ( ( error = Render_Single_Pass( RAS_VARS 0 ) ) != 0 )
@@ -3315,6 +3011,8 @@
/* Horizontal Sweep */
if ( ras.second_pass && ras.dropOutControl != 2 )
{
+ FT_TRACE7(( "Horizontal pass (ftraster)\n" ));
+
ras.Proc_Sweep_Init = Horizontal_Sweep_Init;
ras.Proc_Sweep_Span = Horizontal_Sweep_Span;
ras.Proc_Sweep_Drop = Horizontal_Sweep_Drop;
@@ -3322,7 +3020,7 @@
ras.band_top = 0;
ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = (short)( ras.target.width - 1 );
+ ras.band_stack[0].y_max = (Short)( ras.target.width - 1 );
if ( ( error = Render_Single_Pass( RAS_VARS 1 ) ) != 0 )
return error;
@@ -3332,118 +3030,10 @@
}
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* Render_Gray_Glyph */
- /* */
- /* <Description> */
- /* Render a glyph with grayscaling. Sub-banding if needed. */
- /* */
- /* <Return> */
- /* FreeType error code. 0 means success. */
- /* */
- FT_LOCAL_DEF( FT_Error )
- Render_Gray_Glyph( RAS_ARG )
- {
- Long pixel_width;
- FT_Error error;
-
-
- Set_High_Precision( RAS_VARS ras.outline.flags &
- FT_OUTLINE_HIGH_PRECISION );
- ras.scale_shift = ras.precision_shift + 1;
-
- if ( ras.outline.flags & FT_OUTLINE_IGNORE_DROPOUTS )
- ras.dropOutControl = 2;
- else
- {
- if ( ras.outline.flags & FT_OUTLINE_SMART_DROPOUTS )
- ras.dropOutControl = 4;
- else
- ras.dropOutControl = 0;
-
- if ( !( ras.outline.flags & FT_OUTLINE_INCLUDE_STUBS ) )
- ras.dropOutControl += 1;
- }
-
- ras.second_pass = !( ras.outline.flags & FT_OUTLINE_SINGLE_PASS );
-
- /* Vertical Sweep */
-
- ras.band_top = 0;
- ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = 2 * ras.target.rows - 1;
-
- ras.bWidth = ras.gray_width;
- pixel_width = 2 * ( ( ras.target.width + 3 ) >> 2 );
-
- if ( ras.bWidth > pixel_width )
- ras.bWidth = pixel_width;
-
- ras.bWidth = ras.bWidth * 8;
- ras.bTarget = (Byte*)ras.gray_lines;
- ras.gTarget = (Byte*)ras.target.buffer;
-
- ras.Proc_Sweep_Init = Vertical_Gray_Sweep_Init;
- ras.Proc_Sweep_Span = Vertical_Sweep_Span;
- ras.Proc_Sweep_Drop = Vertical_Sweep_Drop;
- ras.Proc_Sweep_Step = Vertical_Gray_Sweep_Step;
-
- error = Render_Single_Pass( RAS_VARS 0 );
- if ( error )
- return error;
-
- /* Horizontal Sweep */
- if ( ras.second_pass && ras.dropOutControl != 2 )
- {
- ras.Proc_Sweep_Init = Horizontal_Sweep_Init;
- ras.Proc_Sweep_Span = Horizontal_Gray_Sweep_Span;
- ras.Proc_Sweep_Drop = Horizontal_Gray_Sweep_Drop;
- ras.Proc_Sweep_Step = Horizontal_Sweep_Step;
-
- ras.band_top = 0;
- ras.band_stack[0].y_min = 0;
- ras.band_stack[0].y_max = ras.target.width * 2 - 1;
-
- error = Render_Single_Pass( RAS_VARS 1 );
- if ( error )
- return error;
- }
-
- return Raster_Err_None;
- }
-
-#else /* !FT_RASTER_OPTION_ANTI_ALIASING */
-
- FT_LOCAL_DEF( FT_Error )
- Render_Gray_Glyph( RAS_ARG )
- {
- FT_UNUSED_RASTER;
-
- return FT_THROW( Unsupported );
- }
-
-#endif /* !FT_RASTER_OPTION_ANTI_ALIASING */
-
-
static void
ft_black_init( black_PRaster raster )
{
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
- FT_UInt n;
-
-
- /* set default 5-levels gray palette */
- for ( n = 0; n < 5; n++ )
- raster->grays[n] = n * 255 / 4;
-
- raster->gray_width = RASTER_GRAY_LINES / 2;
-#else
FT_UNUSED( raster );
-#endif
}
@@ -3518,55 +3108,23 @@
static void
ft_black_reset( black_PRaster raster,
char* pool_base,
- long pool_size )
+ Long pool_size )
{
- if ( raster )
- {
- if ( pool_base && pool_size >= (long)sizeof ( black_TWorker ) + 2048 )
- {
- black_PWorker worker = (black_PWorker)pool_base;
-
-
- raster->buffer = pool_base + ( ( sizeof ( *worker ) + 7 ) & ~7 );
- raster->buffer_size = (long)( pool_base + pool_size -
- (char*)raster->buffer );
- raster->worker = worker;
- }
- else
- {
- raster->buffer = NULL;
- raster->buffer_size = 0;
- raster->worker = NULL;
- }
- }
+ FT_UNUSED( raster );
+ FT_UNUSED( pool_base );
+ FT_UNUSED( pool_size );
}
static int
ft_black_set_mode( black_PRaster raster,
- unsigned long mode,
+ ULong mode,
const char* palette )
{
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
-
- if ( mode == FT_MAKE_TAG( 'p', 'a', 'l', '5' ) )
- {
- /* set 5-levels gray palette */
- raster->grays[0] = palette[0];
- raster->grays[1] = palette[1];
- raster->grays[2] = palette[2];
- raster->grays[3] = palette[3];
- raster->grays[4] = palette[4];
- }
-
-#else
-
FT_UNUSED( raster );
FT_UNUSED( mode );
FT_UNUSED( palette );
-#endif
-
return 0;
}
@@ -3577,10 +3135,13 @@
{
const FT_Outline* outline = (const FT_Outline*)params->source;
const FT_Bitmap* target_map = params->target;
- black_PWorker worker;
+ black_TWorker worker[1];
+
+ Long buffer[FT_MAX( FT_RENDER_POOL_SIZE, 2048 ) / sizeof ( Long )];
- if ( !raster || !raster->buffer || !raster->buffer_size )
+
+ if ( !raster )
return FT_THROW( Not_Ini );
if ( !outline )
@@ -3597,12 +3158,13 @@
outline->contours[outline->n_contours - 1] + 1 )
return FT_THROW( Invalid );
- worker = raster->worker;
-
/* this version of the raster does not support direct rendering, sorry */
if ( params->flags & FT_RASTER_FLAG_DIRECT )
return FT_THROW( Unsupported );
+ if ( params->flags & FT_RASTER_FLAG_AA )
+ return FT_THROW( Unsupported );
+
if ( !target_map )
return FT_THROW( Invalid );
@@ -3616,30 +3178,23 @@
ras.outline = *outline;
ras.target = *target_map;
- worker->buff = (PLong) raster->buffer;
- worker->sizeBuff = worker->buff +
- raster->buffer_size / sizeof ( Long );
-#ifdef FT_RASTER_OPTION_ANTI_ALIASING
- worker->grays = raster->grays;
- worker->gray_width = raster->gray_width;
+ worker->buff = buffer;
+ worker->sizeBuff = (&buffer)[1]; /* Points to right after buffer. */
- FT_MEM_ZERO( worker->gray_lines, worker->gray_width * 2 );
-#endif
-
- return ( params->flags & FT_RASTER_FLAG_AA )
- ? Render_Gray_Glyph( RAS_VAR )
- : Render_Glyph( RAS_VAR );
+ return Render_Glyph( RAS_VAR );
}
- FT_DEFINE_RASTER_FUNCS( ft_standard_raster,
+ FT_DEFINE_RASTER_FUNCS(
+ ft_standard_raster,
+
FT_GLYPH_FORMAT_OUTLINE,
+
(FT_Raster_New_Func) ft_black_new,
(FT_Raster_Reset_Func) ft_black_reset,
(FT_Raster_Set_Mode_Func)ft_black_set_mode,
(FT_Raster_Render_Func) ft_black_render,
- (FT_Raster_Done_Func) ft_black_done
- )
+ (FT_Raster_Done_Func) ft_black_done )
/* END */
diff --git a/freetype/src/raster/ftraster.h b/freetype/src/raster/ftraster.h
index 80fe46deb..a270d487b 100644
--- a/freetype/src/raster/ftraster.h
+++ b/freetype/src/raster/ftraster.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer (specification). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used */
diff --git a/freetype/src/raster/ftrend1.c b/freetype/src/raster/ftrend1.c
index 6eb7bbbe8..535fdf700 100644
--- a/freetype/src/raster/ftrend1.c
+++ b/freetype/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer interface (body). */
/* */
-/* Copyright 1996-2003, 2005, 2006, 2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -104,7 +104,7 @@
{
FT_Error error;
FT_Outline* outline;
- FT_BBox cbox;
+ FT_BBox cbox, cbox0;
FT_UInt width, height, pitch;
FT_Bitmap* bitmap;
FT_Memory memory;
@@ -120,38 +120,11 @@
}
/* check rendering mode */
-#ifndef FT_CONFIG_OPTION_PIC
if ( mode != FT_RENDER_MODE_MONO )
{
/* raster1 is only capable of producing monochrome bitmaps */
- if ( render->clazz == &ft_raster1_renderer_class )
- return FT_THROW( Cannot_Render_Glyph );
+ return FT_THROW( Cannot_Render_Glyph );
}
- else
- {
- /* raster5 is only capable of producing 5-gray-levels bitmaps */
- if ( render->clazz == &ft_raster5_renderer_class )
- return FT_THROW( Cannot_Render_Glyph );
- }
-#else /* FT_CONFIG_OPTION_PIC */
- /* When PIC is enabled, we cannot get to the class object */
- /* so instead we check the final character in the class name */
- /* ("raster5" or "raster1"). Yes this is a hack. */
- /* The "correct" thing to do is have different render function */
- /* for each of the classes. */
- if ( mode != FT_RENDER_MODE_MONO )
- {
- /* raster1 is only capable of producing monochrome bitmaps */
- if ( render->clazz->root.module_name[6] == '1' )
- return FT_THROW( Cannot_Render_Glyph );
- }
- else
- {
- /* raster5 is only capable of producing 5-gray-levels bitmaps */
- if ( render->clazz->root.module_name[6] == '5' )
- return FT_THROW( Cannot_Render_Glyph );
- }
-#endif /* FT_CONFIG_OPTION_PIC */
outline = &slot->outline;
@@ -160,14 +133,14 @@
FT_Outline_Translate( outline, origin->x, origin->y );
/* compute the control box, and grid fit it */
- FT_Outline_Get_CBox( outline, &cbox );
+ FT_Outline_Get_CBox( outline, &cbox0 );
/* undocumented but confirmed: bbox values get rounded */
#if 1
- cbox.xMin = FT_PIX_ROUND( cbox.xMin );
- cbox.yMin = FT_PIX_ROUND( cbox.yMin );
- cbox.xMax = FT_PIX_ROUND( cbox.xMax );
- cbox.yMax = FT_PIX_ROUND( cbox.yMax );
+ cbox.xMin = FT_PIX_ROUND( cbox0.xMin );
+ cbox.yMin = FT_PIX_ROUND( cbox0.yMin );
+ cbox.xMax = FT_PIX_ROUND( cbox0.xMax );
+ cbox.yMax = FT_PIX_ROUND( cbox0.yMax );
#else
cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
@@ -175,8 +148,28 @@
cbox.yMax = FT_PIX_CEIL( cbox.yMax );
#endif
+ /* If either `width' or `height' round to 0, try */
+ /* explicitly rounding up/down. In the case of */
+ /* glyphs containing only one very narrow feature, */
+ /* this gives the drop-out compensation in the scan */
+ /* conversion code a chance to do its stuff. */
width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
+ if ( width == 0 )
+ {
+ cbox.xMin = FT_PIX_FLOOR( cbox0.xMin );
+ cbox.xMax = FT_PIX_CEIL( cbox0.xMax );
+
+ width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 );
+ }
+
height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
+ if ( height == 0 )
+ {
+ cbox.yMin = FT_PIX_FLOOR( cbox0.yMin );
+ cbox.yMax = FT_PIX_CEIL( cbox0.yMax );
+
+ height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 );
+ }
if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX )
{
@@ -194,23 +187,12 @@
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
- /* allocate new one, depends on pixel format */
- if ( !( mode & FT_RENDER_MODE_MONO ) )
- {
- /* we pad to 32 bits, only for backwards compatibility with FT 1.x */
- pitch = FT_PAD_CEIL( width, 4 );
- bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
- bitmap->num_grays = 256;
- }
- else
- {
- pitch = ( ( width + 15 ) >> 4 ) << 1;
- bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
- }
+ pitch = ( ( width + 15 ) >> 4 ) << 1;
+ bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
bitmap->width = width;
bitmap->rows = height;
- bitmap->pitch = pitch;
+ bitmap->pitch = (int)pitch;
if ( FT_ALLOC_MULT( bitmap->buffer, pitch, height ) )
goto Exit;
@@ -225,9 +207,6 @@
params.source = outline;
params.flags = 0;
- if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY )
- params.flags |= FT_RASTER_FLAG_AA;
-
/* render outline into the bitmap */
error = render->raster_render( render->raster, &params );
@@ -272,35 +251,4 @@
)
- /* This renderer is _NOT_ part of the default modules; you will need */
- /* to register it by hand in your application. It should only be */
- /* used for backwards-compatibility with FT 1.x anyway. */
- /* */
- FT_DEFINE_RENDERER( ft_raster5_renderer_class,
-
- FT_MODULE_RENDERER,
- sizeof ( FT_RendererRec ),
-
- "raster5",
- 0x10000L,
- 0x20000L,
-
- 0, /* module specific interface */
-
- (FT_Module_Constructor)ft_raster1_init,
- (FT_Module_Destructor) 0,
- (FT_Module_Requester) 0
- ,
-
- FT_GLYPH_FORMAT_OUTLINE,
-
- (FT_Renderer_RenderFunc) ft_raster1_render,
- (FT_Renderer_TransformFunc)ft_raster1_transform,
- (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox,
- (FT_Renderer_SetModeFunc) ft_raster1_set_mode,
-
- (FT_Raster_Funcs*) &FT_STANDARD_RASTER_GET
- )
-
-
/* END */
diff --git a/freetype/src/raster/ftrend1.h b/freetype/src/raster/ftrend1.h
index c55d22a91..b94dfd648 100644
--- a/freetype/src/raster/ftrend1.h
+++ b/freetype/src/raster/ftrend1.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType glyph rasterizer interface (specification). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/raster/module.mk b/freetype/src/raster/module.mk
index cbff5df96..75ea10753 100644
--- a/freetype/src/raster/module.mk
+++ b/freetype/src/raster/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/raster/raster.c b/freetype/src/raster/raster.c
index 1202a116c..21bb16de1 100644
--- a/freetype/src/raster/raster.c
+++ b/freetype/src/raster/raster.c
@@ -4,7 +4,7 @@
/* */
/* FreeType monochrome rasterer module component (body only). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/raster/rasterrs.h b/freetype/src/raster/rasterrs.h
index ab85c002a..e7f00bcac 100644
--- a/freetype/src/raster/rasterrs.h
+++ b/freetype/src/raster/rasterrs.h
@@ -4,7 +4,7 @@
/* */
/* monochrome renderer error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/raster/rastpic.c b/freetype/src/raster/rastpic.c
index 17a1e2741..f6769a91b 100644
--- a/freetype/src/raster/rastpic.c
+++ b/freetype/src/raster/rastpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for raster module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/raster/rastpic.h b/freetype/src/raster/rastpic.h
index 592e0d3f1..7ecc338e6 100644
--- a/freetype/src/raster/rastpic.h
+++ b/freetype/src/raster/rastpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for raster module. */
/* */
-/* Copyright 2009 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/raster/rules.mk b/freetype/src/raster/rules.mk
index 0e0b5e4eb..c214b35d3 100644
--- a/freetype/src/raster/rules.mk
+++ b/freetype/src/raster/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2001, 2003, 2008, 2009, 2011 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -19,7 +19,10 @@ RASTER_DIR := $(SRC_DIR)/raster
# compilation flags for the driver
#
-RASTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR))
+RASTER_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# raster driver sources (i.e., C files)
diff --git a/freetype/src/sfnt/Jamfile b/freetype/src/sfnt/Jamfile
index cb20b1b04..73c6e152d 100644
--- a/freetype/src/sfnt/Jamfile
+++ b/freetype/src/sfnt/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/sfnt Jamfile
#
-# Copyright 2001, 2002, 2004, 2005 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/sfnt/module.mk b/freetype/src/sfnt/module.mk
index 95fd6a314..535fe22af 100644
--- a/freetype/src/sfnt/module.mk
+++ b/freetype/src/sfnt/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/sfnt/pngshim.c b/freetype/src/sfnt/pngshim.c
index 9bfcc2a77..ea6045263 100644
--- a/freetype/src/sfnt/pngshim.c
+++ b/freetype/src/sfnt/pngshim.c
@@ -4,7 +4,8 @@
/* */
/* PNG Bitmap glyph support. */
/* */
-/* Copyright 2013, 2014 by Google, Inc. */
+/* Copyright 2013-2015 by */
+/* Google, Inc. */
/* Written by Stuart Gill and Behdad Esfahbod. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -36,11 +37,11 @@
/* This code is freely based on cairo-png.c. There's so many ways */
/* to call libpng, and the way cairo does it is defacto standard. */
- static int
- multiply_alpha( int alpha,
- int color )
+ static unsigned int
+ multiply_alpha( unsigned int alpha,
+ unsigned int color )
{
- int temp = ( alpha * color ) + 0x80;
+ unsigned int temp = alpha * color + 0x80;
return ( temp + ( temp >> 8 ) ) >> 8;
@@ -81,10 +82,10 @@
blue = multiply_alpha( alpha, blue );
}
- base[0] = blue;
- base[1] = green;
- base[2] = red;
- base[3] = alpha;
+ base[0] = (unsigned char)blue;
+ base[1] = (unsigned char)green;
+ base[2] = (unsigned char)red;
+ base[3] = (unsigned char)alpha;
}
}
}
@@ -109,9 +110,9 @@
unsigned int blue = base[2];
- base[0] = blue;
- base[1] = green;
- base[2] = red;
+ base[0] = (unsigned char)blue;
+ base[1] = (unsigned char)green;
+ base[2] = (unsigned char)red;
base[3] = 0xFF;
}
}
@@ -257,16 +258,16 @@
if ( populate_map_and_metrics )
{
- FT_Long size;
+ FT_ULong size;
- metrics->width = (FT_Int)imgWidth;
- metrics->height = (FT_Int)imgHeight;
+ metrics->width = (FT_UShort)imgWidth;
+ metrics->height = (FT_UShort)imgHeight;
map->width = metrics->width;
map->rows = metrics->height;
map->pixel_mode = FT_PIXEL_MODE_BGRA;
- map->pitch = map->width * 4;
+ map->pitch = (int)( map->width * 4 );
map->num_grays = 256;
/* reject too large bitmaps similarly to the rasterizer */
@@ -277,7 +278,7 @@
}
/* this doesn't overflow: 0x7FFF * 0x7FFF * 4 < 2^32 */
- size = map->rows * map->pitch;
+ size = map->rows * (FT_ULong)map->pitch;
error = ft_glyphslot_alloc_bitmap( slot, size );
if ( error )
diff --git a/freetype/src/sfnt/pngshim.h b/freetype/src/sfnt/pngshim.h
index dc9ecaf91..4cc5c2b3a 100644
--- a/freetype/src/sfnt/pngshim.h
+++ b/freetype/src/sfnt/pngshim.h
@@ -4,7 +4,8 @@
/* */
/* PNG Bitmap glyph support. */
/* */
-/* Copyright 2013 by Google, Inc. */
+/* Copyright 2013-2015 by */
+/* Google, Inc. */
/* Written by Stuart Gill and Behdad Esfahbod. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/rules.mk b/freetype/src/sfnt/rules.mk
index a6c956ab6..3cc76b3f7 100644
--- a/freetype/src/sfnt/rules.mk
+++ b/freetype/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2002-2007, 2009, 2011, 2013 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ SFNT_DIR := $(SRC_DIR)/sfnt
# compilation flags for the driver
#
-SFNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR))
+SFNT_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# SFNT driver sources (i.e., C files)
diff --git a/freetype/src/sfnt/sfdriver.c b/freetype/src/sfnt/sfdriver.c
index 5475712e7..0d399ba0c 100644
--- a/freetype/src/sfnt/sfdriver.c
+++ b/freetype/src/sfnt/sfdriver.c
@@ -4,7 +4,7 @@
/* */
/* High-level SFNT driver interface (body). */
/* */
-/* Copyright 1996-2007, 2009-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -266,7 +266,7 @@
{
FT_Stream stream = face->name_table.stream;
FT_String* r = (FT_String*)result;
- FT_Byte* p;
+ FT_Char* p;
if ( FT_STREAM_SEEK( name->stringOffset ) ||
@@ -280,11 +280,11 @@
goto Exit;
}
- p = (FT_Byte*)stream->cursor;
+ p = (FT_Char*)stream->cursor;
for ( ; len > 0; len--, p += 2 )
{
- if ( p[0] == 0 && p[1] >= 32 && p[1] < 128 )
+ if ( p[0] == 0 && p[1] >= 32 )
*r++ = p[1];
}
*r = '\0';
diff --git a/freetype/src/sfnt/sfdriver.h b/freetype/src/sfnt/sfdriver.h
index 5de25d51c..944119cc2 100644
--- a/freetype/src/sfnt/sfdriver.h
+++ b/freetype/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level SFNT driver interface (specification). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/sferrors.h b/freetype/src/sfnt/sferrors.h
index e981e1d26..e3bef3f74 100644
--- a/freetype/src/sfnt/sferrors.h
+++ b/freetype/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
/* */
/* SFNT error codes (specification only). */
/* */
-/* Copyright 2001, 2004, 2012, 2013 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/sfnt.c b/freetype/src/sfnt/sfnt.c
index d62ed4e0b..0b8b5f457 100644
--- a/freetype/src/sfnt/sfnt.c
+++ b/freetype/src/sfnt/sfnt.c
@@ -4,7 +4,7 @@
/* */
/* Single object library component. */
/* */
-/* Copyright 1996-2006, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/sfntpic.c b/freetype/src/sfnt/sfntpic.c
index d62d5bef2..993432c39 100644
--- a/freetype/src/sfnt/sfntpic.c
+++ b/freetype/src/sfnt/sfntpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for sfnt module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/sfntpic.h b/freetype/src/sfnt/sfntpic.h
index bf50624c6..50a8ef006 100644
--- a/freetype/src/sfnt/sfntpic.h
+++ b/freetype/src/sfnt/sfntpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for sfnt module. */
/* */
-/* Copyright 2009, 2012 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/sfobjs.c b/freetype/src/sfnt/sfobjs.c
index 0f941467d..ce302c5d0 100644
--- a/freetype/src/sfnt/sfobjs.c
+++ b/freetype/src/sfnt/sfobjs.c
@@ -4,7 +4,7 @@
/* */
/* SFNT object management (base). */
/* */
-/* Copyright 1996-2008, 2010-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -376,8 +376,8 @@
FT_FREE( stream->base );
stream->size = 0;
- stream->base = 0;
- stream->close = 0;
+ stream->base = NULL;
+ stream->close = NULL;
}
@@ -580,8 +580,8 @@
table->OrigOffset = sfnt_offset;
/* The offsets must be multiples of 4. */
- woff_offset += ( table->CompLength + 3 ) & ~3;
- sfnt_offset += ( table->OrigLength + 3 ) & ~3;
+ woff_offset += ( table->CompLength + 3 ) & ~3U;
+ sfnt_offset += ( table->OrigLength + 3 ) & ~3U;
}
/*
@@ -609,7 +609,7 @@
if ( woff.privOffset )
{
/* ... if it isn't the last block. */
- woff_offset = ( woff_offset + 3 ) & ~3;
+ woff_offset = ( woff_offset + 3 ) & ~3U;
if ( woff.privOffset != woff_offset ||
woff.privOffset + woff.privLength > woff.length )
@@ -1431,8 +1431,8 @@
root->ascender = face->horizontal.Ascender;
root->descender = face->horizontal.Descender;
- root->height = (FT_Short)( root->ascender - root->descender +
- face->horizontal.Line_Gap );
+ root->height = root->ascender - root->descender +
+ face->horizontal.Line_Gap;
if ( !( root->ascender || root->descender ) )
{
@@ -1443,23 +1443,24 @@
root->ascender = face->os2.sTypoAscender;
root->descender = face->os2.sTypoDescender;
- root->height = (FT_Short)( root->ascender - root->descender +
- face->os2.sTypoLineGap );
+ root->height = root->ascender - root->descender +
+ face->os2.sTypoLineGap;
}
else
{
root->ascender = (FT_Short)face->os2.usWinAscent;
root->descender = -(FT_Short)face->os2.usWinDescent;
- root->height = (FT_UShort)( root->ascender - root->descender );
+ root->height = root->ascender - root->descender;
}
}
}
- root->max_advance_width = face->horizontal.advance_Width_Max;
- root->max_advance_height = (FT_Short)( face->vertical_info
- ? face->vertical.advance_Height_Max
- : root->height );
+ root->max_advance_width =
+ (FT_Short)face->horizontal.advance_Width_Max;
+ root->max_advance_height =
+ (FT_Short)( face->vertical_info ? face->vertical.advance_Height_Max
+ : root->height );
/* See http://www.microsoft.com/OpenType/OTSpec/post.htm -- */
/* Adjust underline position from top edge to centre of */
@@ -1569,7 +1570,7 @@
FT_FREE( face->postscript_name );
- face->sfnt = 0;
+ face->sfnt = NULL;
}
diff --git a/freetype/src/sfnt/sfobjs.h b/freetype/src/sfnt/sfobjs.h
index e5cf16061..2b8569674 100644
--- a/freetype/src/sfnt/sfobjs.h
+++ b/freetype/src/sfnt/sfobjs.h
@@ -4,7 +4,7 @@
/* */
/* SFNT object management (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttbdf.c b/freetype/src/sfnt/ttbdf.c
index 04f87a24e..f3381d5e4 100644
--- a/freetype/src/sfnt/ttbdf.c
+++ b/freetype/src/sfnt/ttbdf.c
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded BDF properties (body). */
/* */
-/* Copyright 2005, 2006, 2010, 2013 by */
+/* Copyright 2005-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttbdf.h b/freetype/src/sfnt/ttbdf.h
index 48a10d6e9..fe4ba489e 100644
--- a/freetype/src/sfnt/ttbdf.h
+++ b/freetype/src/sfnt/ttbdf.h
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded BDF properties (specification). */
/* */
-/* Copyright 2005 by */
+/* Copyright 2005-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttcmap.c b/freetype/src/sfnt/ttcmap.c
index 63b7a2e3a..8d1a926e3 100644
--- a/freetype/src/sfnt/ttcmap.c
+++ b/freetype/src/sfnt/ttcmap.c
@@ -4,7 +4,7 @@
/* */
/* TrueType character mapping table (cmap) support (body). */
/* */
-/* Copyright 2002-2010, 2012-2014 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -360,7 +360,7 @@
ids = p - 2 + offset;
- if ( ids < glyph_ids || ids + code_count*2 > table + length )
+ if ( ids < glyph_ids || ids + code_count * 2 > table + length )
FT_INVALID_OFFSET;
/* check glyph IDs */
@@ -375,7 +375,7 @@
idx = TT_NEXT_USHORT( p );
if ( idx != 0 )
{
- idx = ( idx + delta ) & 0xFFFFU;
+ idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
FT_INVALID_GLYPH_ID;
}
@@ -472,7 +472,7 @@
idx = TT_PEEK_USHORT( p );
if ( idx != 0 )
- result = (FT_UInt)( idx + delta ) & 0xFFFFU;
+ result = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
}
}
return result;
@@ -524,7 +524,7 @@
if ( idx != 0 )
{
- gindex = ( idx + delta ) & 0xFFFFU;
+ gindex = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
if ( gindex != 0 )
{
result = charcode;
@@ -786,7 +786,7 @@
if ( gindex != 0 )
{
- gindex = (FT_UInt)( ( gindex + delta ) & 0xFFFFU );
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
if ( gindex != 0 )
{
cmap->cur_charcode = charcode;
@@ -800,7 +800,7 @@
{
do
{
- FT_UInt gindex = (FT_UInt)( ( charcode + delta ) & 0xFFFFU );
+ FT_UInt gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
if ( gindex != 0 )
@@ -993,7 +993,7 @@
idx = FT_NEXT_USHORT( p );
if ( idx != 0 )
{
- idx = (FT_UInt)( idx + delta ) & 0xFFFFU;
+ idx = (FT_UInt)( (FT_Int)idx + delta ) & 0xFFFFU;
if ( idx >= TT_VALID_GLYPH_COUNT( valid ) )
FT_INVALID_GLYPH_ID;
@@ -1090,10 +1090,10 @@
p += offset + ( charcode - start ) * 2;
gindex = TT_PEEK_USHORT( p );
if ( gindex != 0 )
- gindex = (FT_UInt)( gindex + delta ) & 0xFFFFU;
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
}
else
- gindex = (FT_UInt)( charcode + delta ) & 0xFFFFU;
+ gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
break;
}
@@ -1294,10 +1294,10 @@
p += offset + ( charcode - start ) * 2;
gindex = TT_PEEK_USHORT( p );
if ( gindex != 0 )
- gindex = (FT_UInt)( gindex + delta ) & 0xFFFFU;
+ gindex = (FT_UInt)( (FT_Int)gindex + delta ) & 0xFFFFU;
}
else
- gindex = (FT_UInt)( charcode + delta ) & 0xFFFFU;
+ gindex = (FT_UInt)( (FT_Int)charcode + delta ) & 0xFFFFU;
break;
}
diff --git a/freetype/src/sfnt/ttcmap.h b/freetype/src/sfnt/ttcmap.h
index 352e58f6d..92ef846f6 100644
--- a/freetype/src/sfnt/ttcmap.h
+++ b/freetype/src/sfnt/ttcmap.h
@@ -4,7 +4,7 @@
/* */
/* TrueType character mapping table (cmap) support (specification). */
/* */
-/* Copyright 2002-2005, 2009, 2012 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttcmapc.h b/freetype/src/sfnt/ttcmapc.h
index 2ea204309..4a489402c 100644
--- a/freetype/src/sfnt/ttcmapc.h
+++ b/freetype/src/sfnt/ttcmapc.h
@@ -4,7 +4,7 @@
/* */
/* TT CMAP classes definitions (specification only). */
/* */
-/* Copyright 2009 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttkern.c b/freetype/src/sfnt/ttkern.c
index 98c091e91..a05c7b8d0 100644
--- a/freetype/src/sfnt/ttkern.c
+++ b/freetype/src/sfnt/ttkern.c
@@ -5,7 +5,7 @@
/* Load the basic TrueType kerning table. This doesn't handle */
/* kerning data within the GPOS table at the moment. */
/* */
-/* Copyright 1996-2007, 2009, 2010, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -108,8 +108,8 @@
p_next = p_limit;
/* only use horizontal kerning tables */
- if ( ( coverage & ~8 ) != 0x0001 ||
- p + 8 > p_limit )
+ if ( ( coverage & ~8U ) != 0x0001 ||
+ p + 8 > p_limit )
goto NextTable;
num_pairs = FT_NEXT_USHORT( p );
diff --git a/freetype/src/sfnt/ttkern.h b/freetype/src/sfnt/ttkern.h
index 7d21309b0..fa200d7aa 100644
--- a/freetype/src/sfnt/ttkern.h
+++ b/freetype/src/sfnt/ttkern.h
@@ -5,7 +5,7 @@
/* Load the basic TrueType kerning table. This doesn't handle */
/* kerning data within the GPOS table at the moment. */
/* */
-/* Copyright 1996-2001, 2002, 2005, 2007 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttload.c b/freetype/src/sfnt/ttload.c
index fe179360d..2a5ab6b31 100644
--- a/freetype/src/sfnt/ttload.c
+++ b/freetype/src/sfnt/ttload.c
@@ -5,7 +5,7 @@
/* Load the basic TrueType tables, i.e., tables that can be either in */
/* TTF or OTF fonts (body). */
/* */
-/* Copyright 1996-2010, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -208,12 +208,23 @@
/* we ignore invalid tables */
- /* table.Offset + table.Length > stream->size ? */
- if ( table.Length > stream->size ||
- table.Offset > stream->size - table.Length )
- {
- FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
+ if ( table.Offset > stream->size )
continue;
+ else if ( table.Length > stream->size - table.Offset )
+ {
+ /* Some tables have such a simple structure that clipping its */
+ /* contents is harmless. This also makes FreeType less sensitive */
+ /* to invalid table lengths (which programs like Acroread seem to */
+ /* ignore in general). */
+
+ if ( table.Tag == TTAG_hmtx ||
+ table.Tag == TTAG_vmtx )
+ valid_entries++;
+ else
+ {
+ FT_TRACE2(( "check_table_dir: table entry %d invalid\n", nn ));
+ continue;
+ }
}
else
valid_entries++;
@@ -397,12 +408,38 @@
entry->Offset = FT_GET_ULONG();
entry->Length = FT_GET_ULONG();
- /* ignore invalid tables */
+ /* ignore invalid tables that can't be sanitized */
- /* entry->Offset + entry->Length > stream->size ? */
- if ( entry->Length > stream->size ||
- entry->Offset > stream->size - entry->Length )
+ if ( entry->Offset > stream->size )
continue;
+ else if ( entry->Length > stream->size - entry->Offset )
+ {
+ if ( entry->Tag == TTAG_hmtx ||
+ entry->Tag == TTAG_vmtx )
+ {
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_ULong old_length = entry->Length;
+#endif
+
+
+ /* make metrics table length a multiple of 4 */
+ entry->Length = ( stream->size - entry->Offset ) & ~3U;
+
+ FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx"
+ " (sanitized; original length %08lx)\n",
+ (FT_Char)( entry->Tag >> 24 ),
+ (FT_Char)( entry->Tag >> 16 ),
+ (FT_Char)( entry->Tag >> 8 ),
+ (FT_Char)( entry->Tag ),
+ entry->Offset,
+ entry->Length,
+ entry->CheckSum,
+ old_length ));
+ entry++;
+ }
+ else
+ continue;
+ }
else
{
FT_TRACE2(( " %c%c%c%c %08lx %08lx %08lx\n",
diff --git a/freetype/src/sfnt/ttload.h b/freetype/src/sfnt/ttload.h
index 12c036b99..f44074ee1 100644
--- a/freetype/src/sfnt/ttload.h
+++ b/freetype/src/sfnt/ttload.h
@@ -5,7 +5,7 @@
/* Load the basic TrueType tables, i.e., tables that can be either in */
/* TTF or OTF fonts (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2005, 2006 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttmtx.c b/freetype/src/sfnt/ttmtx.c
index cd3a31aec..ba97a5d3e 100644
--- a/freetype/src/sfnt/ttmtx.c
+++ b/freetype/src/sfnt/ttmtx.c
@@ -4,7 +4,7 @@
/* */
/* Load the metrics tables common to TTF and OTF fonts (body). */
/* */
-/* Copyright 2006-2009, 2011-2014 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttmtx.h b/freetype/src/sfnt/ttmtx.h
index 0142626bb..f64f57872 100644
--- a/freetype/src/sfnt/ttmtx.h
+++ b/freetype/src/sfnt/ttmtx.h
@@ -4,7 +4,7 @@
/* */
/* Load the metrics tables common to TTF and OTF fonts (specification). */
/* */
-/* Copyright 2006, 2014 by */
+/* Copyright 2006-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttpost.c b/freetype/src/sfnt/ttpost.c
index b62bc5f97..1955e6886 100644
--- a/freetype/src/sfnt/ttpost.c
+++ b/freetype/src/sfnt/ttpost.c
@@ -5,7 +5,7 @@
/* Postcript name table processing for TrueType and OpenType fonts */
/* (body). */
/* */
-/* Copyright 1996-2003, 2006-2010, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -52,7 +52,7 @@
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
-#define MAC_NAME( x ) ( (FT_String*)psnames->macintosh_name( x ) )
+#define MAC_NAME( x ) (FT_String*)psnames->macintosh_name( (FT_UInt)(x) )
#else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
@@ -62,7 +62,7 @@
/* table of Mac names. Thus, it is possible to build a version of */
/* FreeType without the Type 1 driver & PSNames module. */
-#define MAC_NAME( x ) ( (FT_String*)tt_post_default_names[x] )
+#define MAC_NAME( x ) (FT_String*)tt_post_default_names[x]
/* the 258 default Mac PS glyph names; see file `tools/glnames.py' */
@@ -155,7 +155,7 @@
static FT_Error
load_format_20( TT_Face face,
FT_Stream stream,
- FT_Long post_limit )
+ FT_ULong post_limit )
{
FT_Memory memory = stream->memory;
FT_Error error;
@@ -163,8 +163,8 @@
FT_Int num_glyphs;
FT_UShort num_names;
- FT_UShort* glyph_indices = 0;
- FT_Char** name_strings = 0;
+ FT_UShort* glyph_indices = NULL;
+ FT_Char** name_strings = NULL;
if ( FT_READ_USHORT( num_glyphs ) )
@@ -243,14 +243,17 @@
goto Fail1;
}
- if ( (FT_Int)len > post_limit ||
- FT_STREAM_POS() > post_limit - (FT_Int)len )
+ if ( len > post_limit ||
+ FT_STREAM_POS() > post_limit - len )
{
+ FT_Int d = (FT_Int)post_limit - (FT_Int)FT_STREAM_POS();
+
+
FT_ERROR(( "load_format_20:"
" exceeding string length (%d),"
" truncating at end of post table (%d byte left)\n",
- len, post_limit - FT_STREAM_POS() ));
- len = FT_MAX( 0, post_limit - FT_STREAM_POS() );
+ len, d ));
+ len = (FT_UInt)FT_MAX( 0, d );
}
if ( FT_NEW_ARRAY( name_strings[n], len + 1 ) ||
@@ -307,13 +310,13 @@
static FT_Error
load_format_25( TT_Face face,
FT_Stream stream,
- FT_Long post_limit )
+ FT_ULong post_limit )
{
FT_Memory memory = stream->memory;
FT_Error error;
FT_Int num_glyphs;
- FT_Char* offset_table = 0;
+ FT_Char* offset_table = NULL;
FT_UNUSED( post_limit );
@@ -377,7 +380,7 @@
FT_Error error;
FT_Fixed format;
FT_ULong post_len;
- FT_Long post_limit;
+ FT_ULong post_limit;
/* get a stream for the face's resource */
@@ -547,10 +550,7 @@
}
if ( idx < (FT_UInt)table->num_glyphs ) /* paranoid checking */
- {
- idx += table->offsets[idx];
- *PSname = MAC_NAME( idx );
- }
+ *PSname = MAC_NAME( (FT_Int)idx + table->offsets[idx] );
}
/* nothing to do for format == 0x00030000L */
diff --git a/freetype/src/sfnt/ttpost.h b/freetype/src/sfnt/ttpost.h
index d552c3aa5..73407e0a1 100644
--- a/freetype/src/sfnt/ttpost.h
+++ b/freetype/src/sfnt/ttpost.h
@@ -5,7 +5,7 @@
/* Postcript name table processing for TrueType and OpenType fonts */
/* (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/sfnt/ttsbit.c b/freetype/src/sfnt/ttsbit.c
index 6bfb1869f..9ee8af3d6 100644
--- a/freetype/src/sfnt/ttsbit.c
+++ b/freetype/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded bitmap support (body). */
/* */
-/* Copyright 2005-2009, 2013, 2014 by */
+/* Copyright 2005-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* Copyright 2013 by Google, Inc. */
@@ -101,10 +101,10 @@
p = face->sbit_table;
- version = FT_NEXT_ULONG( p );
+ version = FT_NEXT_LONG( p );
num_strikes = FT_NEXT_ULONG( p );
- if ( ( version & 0xFFFF0000UL ) != 0x00020000UL )
+ if ( ( (FT_ULong)version & 0xFFFF0000UL ) != 0x00020000UL )
{
error = FT_THROW( Unknown_File_Format );
goto Exit;
@@ -273,6 +273,7 @@
FT_UShort ppem, resolution;
TT_HoriHeader *hori;
FT_ULong table_size;
+ FT_Pos ppem_, upem_; /* to reduce casts */
FT_Error error;
FT_Byte* p;
@@ -305,12 +306,15 @@
metrics->x_ppem = ppem;
metrics->y_ppem = ppem;
- metrics->ascender = ppem * hori->Ascender * 64 / upem;
- metrics->descender = ppem * hori->Descender * 64 / upem;
- metrics->height = ppem * ( hori->Ascender -
- hori->Descender +
- hori->Line_Gap ) * 64 / upem;
- metrics->max_advance = ppem * hori->advance_Width_Max * 64 / upem;
+ ppem_ = (FT_Pos)ppem;
+ upem_ = (FT_Pos)upem;
+
+ metrics->ascender = ppem_ * hori->Ascender * 64 / upem_;
+ metrics->descender = ppem_ * hori->Descender * 64 / upem_;
+ metrics->height = ppem_ * ( hori->Ascender -
+ hori->Descender +
+ hori->Line_Gap ) * 64 / upem_;
+ metrics->max_advance = ppem_ * hori->advance_Width_Max * 64 / upem_;
return error;
}
@@ -420,7 +424,7 @@
FT_Error error = FT_Err_Ok;
FT_UInt width, height;
FT_Bitmap* map = decoder->bitmap;
- FT_Long size;
+ FT_ULong size;
if ( !decoder->metrics_loaded )
@@ -432,38 +436,38 @@
width = decoder->metrics->width;
height = decoder->metrics->height;
- map->width = (int)width;
- map->rows = (int)height;
+ map->width = width;
+ map->rows = height;
switch ( decoder->bit_depth )
{
case 1:
map->pixel_mode = FT_PIXEL_MODE_MONO;
- map->pitch = ( map->width + 7 ) >> 3;
+ map->pitch = (int)( ( map->width + 7 ) >> 3 );
map->num_grays = 2;
break;
case 2:
map->pixel_mode = FT_PIXEL_MODE_GRAY2;
- map->pitch = ( map->width + 3 ) >> 2;
+ map->pitch = (int)( ( map->width + 3 ) >> 2 );
map->num_grays = 4;
break;
case 4:
map->pixel_mode = FT_PIXEL_MODE_GRAY4;
- map->pitch = ( map->width + 1 ) >> 1;
+ map->pitch = (int)( ( map->width + 1 ) >> 1 );
map->num_grays = 16;
break;
case 8:
map->pixel_mode = FT_PIXEL_MODE_GRAY;
- map->pitch = map->width;
+ map->pitch = (int)( map->width );
map->num_grays = 256;
break;
case 32:
map->pixel_mode = FT_PIXEL_MODE_BGRA;
- map->pitch = map->width * 4;
+ map->pitch = (int)( map->width * 4 );
map->num_grays = 256;
break;
@@ -472,7 +476,7 @@
goto Exit;
}
- size = map->rows * map->pitch;
+ size = map->rows * (FT_ULong)map->pitch;
/* check that there is no empty image */
if ( size == 0 )
@@ -561,7 +565,8 @@
{
FT_Error error = FT_Err_Ok;
FT_Byte* line;
- FT_Int bit_height, bit_width, pitch, width, height, line_bits, h;
+ FT_Int pitch, width, height, line_bits, h;
+ FT_UInt bit_height, bit_width;
FT_Bitmap* bitmap;
@@ -577,8 +582,8 @@
line_bits = width * decoder->bit_depth;
- if ( x_pos < 0 || x_pos + width > bit_width ||
- y_pos < 0 || y_pos + height > bit_height )
+ if ( x_pos < 0 || (FT_UInt)( x_pos + width ) > bit_width ||
+ y_pos < 0 || (FT_UInt)( y_pos + height ) > bit_height )
{
FT_TRACE1(( "tt_sbit_decoder_load_byte_aligned:"
" invalid bitmap dimensions\n" ));
@@ -699,7 +704,8 @@
{
FT_Error error = FT_Err_Ok;
FT_Byte* line;
- FT_Int bit_height, bit_width, pitch, width, height, line_bits, h, nbits;
+ FT_Int pitch, width, height, line_bits, h, nbits;
+ FT_UInt bit_height, bit_width;
FT_Bitmap* bitmap;
FT_UShort rval;
@@ -716,8 +722,8 @@
line_bits = width * decoder->bit_depth;
- if ( x_pos < 0 || x_pos + width > bit_width ||
- y_pos < 0 || y_pos + height > bit_height )
+ if ( x_pos < 0 || (FT_UInt)( x_pos + width ) > bit_width ||
+ y_pos < 0 || (FT_UInt)( y_pos + height ) > bit_height )
{
FT_TRACE1(( "tt_sbit_decoder_load_bit_aligned:"
" invalid bitmap dimensions\n" ));
@@ -1379,9 +1385,9 @@
metrics->horiBearingX = (FT_Short)originOffsetX;
metrics->horiBearingY = (FT_Short)( -originOffsetY + metrics->height );
- metrics->horiAdvance = (FT_Short)( aadvance *
- face->root.size->metrics.x_ppem /
- face->header.Units_Per_EM );
+ metrics->horiAdvance = (FT_UShort)( aadvance *
+ face->root.size->metrics.x_ppem /
+ face->header.Units_Per_EM );
}
return error;
@@ -1442,7 +1448,7 @@
FT_Library library = face->root.glyph->library;
- FT_Bitmap_New( &new_map );
+ FT_Bitmap_Init( &new_map );
/* Convert to 8bit grayscale. */
error = FT_Bitmap_Convert( library, map, &new_map, 1 );
diff --git a/freetype/src/sfnt/ttsbit.h b/freetype/src/sfnt/ttsbit.h
index 695d0d8d0..d4e13aefb 100644
--- a/freetype/src/sfnt/ttsbit.h
+++ b/freetype/src/sfnt/ttsbit.h
@@ -4,7 +4,7 @@
/* */
/* TrueType and OpenType embedded bitmap support (specification). */
/* */
-/* Copyright 1996-2008, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/smooth/Jamfile b/freetype/src/smooth/Jamfile
index a8496aa2c..73b29d6bc 100644
--- a/freetype/src/smooth/Jamfile
+++ b/freetype/src/smooth/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/smooth Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/smooth/ftgrays.c b/freetype/src/smooth/ftgrays.c
index ea7eaaad3..a8a8f685c 100644
--- a/freetype/src/smooth/ftgrays.c
+++ b/freetype/src/smooth/ftgrays.c
@@ -4,7 +4,7 @@
/* */
/* A new `perfect' anti-aliasing renderer (body). */
/* */
-/* Copyright 2000-2003, 2005-2014 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -94,6 +94,11 @@
#ifdef _STANDALONE_
+ /* The size in bytes of the render pool used by the scan-line converter */
+ /* to do all of its work. */
+#define FT_RENDER_POOL_SIZE 16384L
+
+
/* Auxiliary macros for token concatenation. */
#define FT_ERR_XCAT( x, y ) x ## y
#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y )
@@ -101,6 +106,21 @@
#define FT_BEGIN_STMNT do {
#define FT_END_STMNT } while ( 0 )
+#define FT_MAX( a, b ) ( (a) > (b) ? (a) : (b) )
+#define FT_ABS( a ) ( (a) < 0 ? -(a) : (a) )
+
+
+ /*
+ * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
+ * algorithm. We use alpha = 1, beta = 3/8, giving us results with a
+ * largest error less than 7% compared to the exact value.
+ */
+#define FT_HYPOT( x, y ) \
+ ( x = FT_ABS( x ), \
+ y = FT_ABS( y ), \
+ x > y ? x + ( 3 * y >> 3 ) \
+ : y + ( 3 * x >> 3 ) )
+
/* define this to dump debugging information */
/* #define FT_DEBUG_LEVEL_TRACE */
@@ -464,11 +484,7 @@ typedef ptrdiff_t FT_PtrDist;
typedef struct gray_TRaster_
{
- void* buffer;
- long buffer_size;
- int band_size;
void* memory;
- gray_PWorker worker;
} gray_TRaster, *gray_PRaster;
@@ -480,7 +496,7 @@ typedef ptrdiff_t FT_PtrDist;
/* */
static void
gray_init_cells( RAS_ARG_ void* buffer,
- long byte_size )
+ long byte_size )
{
ras.buffer = buffer;
ras.buffer_size = byte_size;
@@ -638,8 +654,8 @@ typedef ptrdiff_t FT_PtrDist;
ras.ey = ey;
}
- ras.invalid = ( (unsigned)ey >= (unsigned)ras.count_ey ||
- ex >= ras.count_ex );
+ ras.invalid = ( (unsigned int)ey >= (unsigned int)ras.count_ey ||
+ ex >= ras.count_ex );
}
@@ -1212,7 +1228,7 @@ typedef ptrdiff_t FT_PtrDist;
/* first of all, compute the scanline offset */
p = (unsigned char*)map->buffer - y * map->pitch;
if ( map->pitch >= 0 )
- p += (unsigned)( ( map->rows - 1 ) * map->pitch );
+ p += ( map->rows - 1 ) * (unsigned int)map->pitch;
for ( ; count > 0; count--, spans++ )
{
@@ -1744,14 +1760,17 @@ typedef ptrdiff_t FT_PtrDist;
} gray_TBand;
- FT_DEFINE_OUTLINE_FUNCS(func_interface,
- (FT_Outline_MoveTo_Func) gray_move_to,
- (FT_Outline_LineTo_Func) gray_line_to,
- (FT_Outline_ConicTo_Func)gray_conic_to,
- (FT_Outline_CubicTo_Func)gray_cubic_to,
- 0,
- 0
- )
+
+ FT_DEFINE_OUTLINE_FUNCS(
+ func_interface,
+
+ (FT_Outline_MoveTo_Func) gray_move_to,
+ (FT_Outline_LineTo_Func) gray_line_to,
+ (FT_Outline_ConicTo_Func)gray_conic_to,
+ (FT_Outline_CubicTo_Func)gray_cubic_to,
+ 0,
+ 0 )
+
static int
gray_convert_glyph_inner( RAS_ARG )
@@ -1842,13 +1861,13 @@ typedef ptrdiff_t FT_PtrDist;
ras.ycells = (PCell*)ras.buffer;
ras.ycount = band->max - band->min;
- cell_start = sizeof ( PCell ) * ras.ycount;
- cell_mod = cell_start % sizeof ( TCell );
+ cell_start = (long)sizeof ( PCell ) * ras.ycount;
+ cell_mod = cell_start % (long)sizeof ( TCell );
if ( cell_mod > 0 )
- cell_start += sizeof ( TCell ) - cell_mod;
+ cell_start += (long)sizeof ( TCell ) - cell_mod;
cell_end = ras.buffer_size;
- cell_end -= cell_end % sizeof ( TCell );
+ cell_end -= cell_end % (long)sizeof ( TCell );
cells_max = (PCell)( (char*)ras.buffer + cell_end );
ras.cells = (PCell)( (char*)ras.buffer + cell_start );
@@ -1918,12 +1937,18 @@ typedef ptrdiff_t FT_PtrDist;
gray_raster_render( gray_PRaster raster,
const FT_Raster_Params* params )
{
- const FT_Outline* outline = (const FT_Outline*)params->source;
- const FT_Bitmap* target_map = params->target;
- gray_PWorker worker;
+ const FT_Outline* outline = (const FT_Outline*)params->source;
+ const FT_Bitmap* target_map = params->target;
+
+ gray_TWorker worker[1];
+ TCell buffer[FT_MAX( FT_RENDER_POOL_SIZE, 2048 ) / sizeof ( TCell )];
+ long buffer_size = sizeof ( buffer );
+ int band_size = (int)( buffer_size /
+ (long)( sizeof ( TCell ) * 8 ) );
- if ( !raster || !raster->buffer || !raster->buffer_size )
+
+ if ( !raster )
return FT_THROW( Invalid_Argument );
if ( !outline )
@@ -1940,8 +1965,6 @@ typedef ptrdiff_t FT_PtrDist;
outline->contours[outline->n_contours - 1] + 1 )
return FT_THROW( Invalid_Outline );
- worker = raster->worker;
-
/* if direct mode is not set, we must have a target bitmap */
if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) )
{
@@ -1966,8 +1989,8 @@ typedef ptrdiff_t FT_PtrDist;
/* compute clip box from target pixmap */
ras.clip_box.xMin = 0;
ras.clip_box.yMin = 0;
- ras.clip_box.xMax = target_map->width;
- ras.clip_box.yMax = target_map->rows;
+ ras.clip_box.xMax = (FT_Pos)target_map->width;
+ ras.clip_box.yMax = (FT_Pos)target_map->rows;
}
else if ( params->flags & FT_RASTER_FLAG_CLIP )
ras.clip_box = params->clip_box;
@@ -1979,13 +2002,14 @@ typedef ptrdiff_t FT_PtrDist;
ras.clip_box.yMax = 32767L;
}
- gray_init_cells( RAS_VAR_ raster->buffer, raster->buffer_size );
+ gray_init_cells( RAS_VAR_ buffer, buffer_size );
ras.outline = *outline;
ras.num_cells = 0;
ras.invalid = 1;
- ras.band_size = raster->band_size;
+ ras.band_size = band_size;
ras.num_gray_spans = 0;
+ ras.span_y = 0;
if ( params->flags & FT_RASTER_FLAG_DIRECT )
{
@@ -2069,34 +2093,9 @@ typedef ptrdiff_t FT_PtrDist;
char* pool_base,
long pool_size )
{
- gray_PRaster rast = (gray_PRaster)raster;
-
-
- if ( raster )
- {
- if ( pool_base && pool_size >= (long)sizeof ( gray_TWorker ) + 2048 )
- {
- gray_PWorker worker = (gray_PWorker)pool_base;
-
-
- rast->worker = worker;
- rast->buffer = pool_base +
- ( ( sizeof ( gray_TWorker ) +
- sizeof ( TCell ) - 1 ) &
- ~( sizeof ( TCell ) - 1 ) );
- rast->buffer_size = (long)( ( pool_base + pool_size ) -
- (char*)rast->buffer ) &
- ~( sizeof ( TCell ) - 1 );
- rast->band_size = (int)( rast->buffer_size /
- ( sizeof ( TCell ) * 8 ) );
- }
- else
- {
- rast->buffer = NULL;
- rast->buffer_size = 0;
- rast->worker = NULL;
- }
- }
+ FT_UNUSED( raster );
+ FT_UNUSED( pool_base );
+ FT_UNUSED( pool_size );
}
@@ -2114,15 +2113,16 @@ typedef ptrdiff_t FT_PtrDist;
}
- FT_DEFINE_RASTER_FUNCS(ft_grays_raster,
+ FT_DEFINE_RASTER_FUNCS(
+ ft_grays_raster,
+
FT_GLYPH_FORMAT_OUTLINE,
(FT_Raster_New_Func) gray_raster_new,
(FT_Raster_Reset_Func) gray_raster_reset,
(FT_Raster_Set_Mode_Func)gray_raster_set_mode,
(FT_Raster_Render_Func) gray_raster_render,
- (FT_Raster_Done_Func) gray_raster_done
- )
+ (FT_Raster_Done_Func) gray_raster_done )
/* END */
diff --git a/freetype/src/smooth/ftgrays.h b/freetype/src/smooth/ftgrays.h
index f20f55f14..1b5760330 100644
--- a/freetype/src/smooth/ftgrays.h
+++ b/freetype/src/smooth/ftgrays.h
@@ -4,7 +4,7 @@
/* */
/* FreeType smooth renderer declaration */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/smooth/ftsmerrs.h b/freetype/src/smooth/ftsmerrs.h
index 413d2f1f7..cc38aa199 100644
--- a/freetype/src/smooth/ftsmerrs.h
+++ b/freetype/src/smooth/ftsmerrs.h
@@ -4,7 +4,7 @@
/* */
/* smooth renderer error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/smooth/ftsmooth.c b/freetype/src/smooth/ftsmooth.c
index 4dff563fc..00673f417 100644
--- a/freetype/src/smooth/ftsmooth.c
+++ b/freetype/src/smooth/ftsmooth.c
@@ -4,7 +4,7 @@
/* */
/* Anti-aliasing renderer interface (body). */
/* */
-/* Copyright 2000-2006, 2009-2013 by */
+/* Copyright 2000-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -229,7 +229,7 @@
}
/* allocate new one */
- if ( FT_ALLOC( bitmap->buffer, (FT_ULong)pitch * height ) )
+ if ( FT_ALLOC( bitmap->buffer, (FT_ULong)( pitch * height ) ) )
goto Exit;
else
have_buffer = TRUE;
@@ -242,8 +242,8 @@
bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
bitmap->num_grays = 256;
- bitmap->width = width;
- bitmap->rows = height;
+ bitmap->width = (unsigned int)width;
+ bitmap->rows = (unsigned int)height;
bitmap->pitch = pitch;
/* translate outline to render it into the bitmap */
diff --git a/freetype/src/smooth/ftsmooth.h b/freetype/src/smooth/ftsmooth.h
index 248d08e9a..d384e36d5 100644
--- a/freetype/src/smooth/ftsmooth.h
+++ b/freetype/src/smooth/ftsmooth.h
@@ -4,7 +4,7 @@
/* */
/* Anti-aliasing renderer interface (specification). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/smooth/ftspic.c b/freetype/src/smooth/ftspic.c
index bd9f0320d..20f05c528 100644
--- a/freetype/src/smooth/ftspic.c
+++ b/freetype/src/smooth/ftspic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for smooth module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/smooth/ftspic.h b/freetype/src/smooth/ftspic.h
index e5cba1e8c..e6dc481c8 100644
--- a/freetype/src/smooth/ftspic.h
+++ b/freetype/src/smooth/ftspic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for smooth module. */
/* */
-/* Copyright 2009 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/smooth/module.mk b/freetype/src/smooth/module.mk
index 47f6c0407..740936f5b 100644
--- a/freetype/src/smooth/module.mk
+++ b/freetype/src/smooth/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/smooth/rules.mk b/freetype/src/smooth/rules.mk
index 88d0aa53a..f00ebd5f1 100644
--- a/freetype/src/smooth/rules.mk
+++ b/freetype/src/smooth/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2001, 2003, 2011 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -17,9 +17,13 @@
#
SMOOTH_DIR := $(SRC_DIR)/smooth
+
# compilation flags for the driver
#
-SMOOTH_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR))
+SMOOTH_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# smooth driver sources (i.e., C files)
diff --git a/freetype/src/smooth/smooth.c b/freetype/src/smooth/smooth.c
index a8ac51f9f..4ca4344c8 100644
--- a/freetype/src/smooth/smooth.c
+++ b/freetype/src/smooth/smooth.c
@@ -4,7 +4,7 @@
/* */
/* FreeType anti-aliasing rasterer module component (body only). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/tools/afblue.pl b/freetype/src/tools/afblue.pl
index 60fe6966a..56b645234 100644
--- a/freetype/src/tools/afblue.pl
+++ b/freetype/src/tools/afblue.pl
@@ -5,7 +5,7 @@
#
# Process a blue zone character data file.
#
-# Copyright 2013, 2014 by
+# Copyright 2013-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/apinames.c b/freetype/src/tools/apinames.c
index c85df721a..9f81b1a6c 100644
--- a/freetype/src/tools/apinames.c
+++ b/freetype/src/tools/apinames.c
@@ -10,7 +10,7 @@
* accepted if you are using GCC for compilation (and probably by
* other compilers too).
*
- * Author: David Turner, 2005, 2006, 2008-2013
+ * Author: David Turner, 2005, 2006, 2008-2013, 2015
*
* This code is explicitly placed into the public domain.
*
@@ -156,6 +156,7 @@ names_dump( FILE* out,
case OUTPUT_WATCOM_LBC:
{
const char* dot;
+ char temp[512];
if ( dll_name == NULL )
@@ -169,8 +170,7 @@ names_dump( FILE* out,
dot = strchr( dll_name, '.' );
if ( dot != NULL )
{
- char temp[512];
- int len = dot - dll_name;
+ int len = dot - dll_name;
if ( len > (int)( sizeof ( temp ) - 1 ) )
diff --git a/freetype/src/tools/docmaker/content.py b/freetype/src/tools/docmaker/content.py
index adea6f1d7..6887f0b84 100644
--- a/freetype/src/tools/docmaker/content.py
+++ b/freetype/src/tools/docmaker/content.py
@@ -3,7 +3,7 @@
#
# Parse comment blocks to build content blocks (library file).
#
-# Copyright 2002, 2004, 2006-2009, 2012-2014 by
+# Copyright 2002-2015 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/docmaker/docmaker.py b/freetype/src/tools/docmaker/docmaker.py
index 4fb1abf23..de82d930f 100644
--- a/freetype/src/tools/docmaker/docmaker.py
+++ b/freetype/src/tools/docmaker/docmaker.py
@@ -4,7 +4,7 @@
#
# Convert source code markup to HTML documentation.
#
-# Copyright 2002, 2004, 2008, 2013, 2014 by
+# Copyright 2002-2015 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/docmaker/formatter.py b/freetype/src/tools/docmaker/formatter.py
index 7152c019d..f0a8808c4 100644
--- a/freetype/src/tools/docmaker/formatter.py
+++ b/freetype/src/tools/docmaker/formatter.py
@@ -3,7 +3,7 @@
#
# Convert parsed content blocks to a structured document (library file).
#
-# Copyright 2002, 2004, 2007, 2008, 2014 by
+# Copyright 2002-2015 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/docmaker/sources.py b/freetype/src/tools/docmaker/sources.py
index 61ecc22c4..0cf21ce03 100644
--- a/freetype/src/tools/docmaker/sources.py
+++ b/freetype/src/tools/docmaker/sources.py
@@ -3,7 +3,7 @@
#
# Convert source code comments to multi-line blocks (library file).
#
-# Copyright 2002-2004, 2006-2009, 2012-2014 by
+# Copyright 2002-2015 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/docmaker/tohtml.py b/freetype/src/tools/docmaker/tohtml.py
index 05fc08a92..bc6bcf051 100644
--- a/freetype/src/tools/docmaker/tohtml.py
+++ b/freetype/src/tools/docmaker/tohtml.py
@@ -3,7 +3,7 @@
#
# A sub-class container of the `Formatter' class to produce HTML.
#
-# Copyright 2002, 2003, 2005-2008, 2013, 2014 by
+# Copyright 2002-2015 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/docmaker/utils.py b/freetype/src/tools/docmaker/utils.py
index b35823ab7..52af17a3a 100644
--- a/freetype/src/tools/docmaker/utils.py
+++ b/freetype/src/tools/docmaker/utils.py
@@ -3,7 +3,7 @@
#
# Auxiliary functions for the `docmaker' tool (library file).
#
-# Copyright 2002, 2004, 2007, 2008, 2014 by
+# Copyright 2002-2015 by
# David Turner.
#
# This file is part of the FreeType project, and may only be used,
diff --git a/freetype/src/tools/glnames.py b/freetype/src/tools/glnames.py
index 8810bf57f..0ad554c72 100644
--- a/freetype/src/tools/glnames.py
+++ b/freetype/src/tools/glnames.py
@@ -6,7 +6,7 @@
#
-# Copyright 1996-2000, 2003, 2005, 2007, 2008, 2011 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -35,7 +35,7 @@ import sys, string, struct, re, os.path
#
# See
#
-# http://fonts.apple.com/TTRefMan/RM06/Chap6post.html
+# https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html
#
# for the official list.
#
@@ -5267,7 +5267,7 @@ def main():
write( "/* */\n" )
write( "/* PostScript glyph names. */\n" )
write( "/* */\n" )
- write( "/* Copyright 2005, 2008, 2011 by */\n" )
+ write( "/* Copyright 2005-2015 by */\n" )
write( "/* David Turner, Robert Wilhelm, and Werner Lemberg. */\n" )
write( "/* */\n" )
write( "/* This file is part of the FreeType project, and may only be used, */\n" )
diff --git a/freetype/src/tools/no-copyright b/freetype/src/tools/no-copyright
new file mode 100755
index 000000000..5011e3fb6
--- /dev/null
+++ b/freetype/src/tools/no-copyright
@@ -0,0 +1,61 @@
+# Files that don't get a copyright, or which are taken from elsewhere.
+#
+# All lines in this file are patterns, including the comment lines; this
+# means that e.g. `FTL.TXT' matches all files that have this string in
+# the file name (including the path relative to the current directory,
+# always starting with `./').
+#
+# Don't put empty lines into this file!
+#
+.gitignore
+#
+builds/unix/pkg.m4
+#
+docs/FTL.TXT
+docs/GPLv2.TXT
+#
+src/base/md5.c
+src/base/md5.h
+#
+src/bdf/bdf.c
+src/bdf/bdf.h
+src/bdf/bdfdrivr.c
+src/bdf/bdfdrivr.h
+src/bdf/bdferror.h
+src/bdf/bdflib.c
+src/bdf/module.mk
+src/bdf/README
+src/bdf/rules.mk
+#
+src/pcf/module.mk
+src/pcf/pcf.c
+src/pcf/pcf.h
+src/pcf/pcfdrivr.c
+src/pcf/pcfdrivr.h
+src/pcf/pcferror.h
+src/pcf/pcfread.c
+src/pcf/pcfread.h
+src/pcf/pcfutil.c
+src/pcf/pcfutil.h
+src/pcf/README
+src/pcf/rules.mk
+#
+src/gzip/adler32.c
+src/gzip/infblock.c
+src/gzip/infblock.h
+src/gzip/infcodes.c
+src/gzip/infcodes.h
+src/gzip/inffixed.h
+src/gzip/inflate.c
+src/gzip/inftrees.c
+src/gzip/inftrees.h
+src/gzip/infutil.c
+src/gzip/infutil.h
+src/gzip/zconf.h
+src/gzip/zlib.h
+src/gzip/zutil.c
+src/gzip/zutil.h
+#
+src/tools/ftrandom/ftrandom.c
+#
+# EOF
diff --git a/freetype/src/tools/test_afm.c b/freetype/src/tools/test_afm.c
index ead5e90c4..69bc191d3 100644
--- a/freetype/src/tools/test_afm.c
+++ b/freetype/src/tools/test_afm.c
@@ -9,7 +9,7 @@
void dump_fontinfo( AFM_FontInfo fi )
{
- FT_Int i;
+ FT_UInt i;
printf( "This AFM is for %sCID font.\n\n",
diff --git a/freetype/src/tools/update-copyright b/freetype/src/tools/update-copyright
new file mode 100755
index 000000000..4a8bf9b0e
--- /dev/null
+++ b/freetype/src/tools/update-copyright
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Run the `update-copyright-year' script on all files in the git repository,
+# taking care of exceptions stored in file `no-copyright'.
+
+topdir=`git rev-parse --show-toplevel`
+toolsdir=$topdir/src/tools
+
+git ls-files --full-name $topdir \
+| sed 's|^|../../|' \
+| grep -vFf $toolsdir/no-copyright \
+| xargs $toolsdir/update-copyright-year
+
+# EOF
diff --git a/freetype/src/tools/update-copyright-year b/freetype/src/tools/update-copyright-year
new file mode 100755
index 000000000..107754183
--- /dev/null
+++ b/freetype/src/tools/update-copyright-year
@@ -0,0 +1,135 @@
+eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}'
+ & eval 'exec perl -wS -i "$0" $argv:q'
+ if 0;
+
+# Copyright 2015 by
+# Werner Lemberg.
+#
+# This file is part of the FreeType project, and may only be used, modified,
+# and distributed under the terms of the FreeType project license,
+# LICENSE.TXT. By continuing to use, modify, or distribute this file you
+# indicate that you have read the license and understand and accept it
+# fully.
+
+# [Note: This script is expected to be called by the shell, which in turn
+# calls perl automatically. The nifty start-up code above is based on
+# gnulib's `update-copyright' script; it is a more portable replacement for
+# the shebang, using the first `perl' program in the shell's path instead.]
+
+# Usage:
+#
+# update-copyright-year file1 [file2 ...]
+
+
+# This script handles copyright entries like
+#
+# Copyright 2000 by
+# foobar
+#
+# or
+#
+# /* Copyright 2000, 2001, 2004-2007 by */
+# /* foobar */
+#
+# and replaces them uniformly with
+#
+# Copyright 2000-2015
+# foobar
+#
+# and
+#
+# /* Copyright 2000-2015 by */
+# /* foobar */
+#
+# (assuming that the current year is 2015). As can be seen, the line length
+# is retained if there is non-whitespace after the word `by' on the same
+# line.
+
+use strict;
+
+
+my (undef, undef, undef,
+ undef, undef, $year,
+ undef, undef, undef) = localtime(time);
+$year += 1900;
+
+my $replaced = 0;
+
+
+# Loop over all input files; option `-i' (issued at the very beginning of
+# this script) makes perl edit them in-place.
+while (<>)
+{
+ # Only handle the first copyright notice in a file.
+ if (!$replaced)
+ {
+ # First try: Search multiple copyright years.
+ s {
+ (?<begin>.*)
+ Copyright
+ (?<space1>\ +)
+ (?<first>[12][0-9][0-9][0-9])
+ (?<middle>.+)
+ (?<last>[12][0-9][0-9][0-9])
+ (?<space2>\ +)
+ by
+ (?<space3>\ *)
+ (?<end>.*)
+ }
+ {
+ # Fill line to the same length (if appropriate); we skip the middle
+ # part but insert two spaces and `-'.
+ my $space = length($+{space1}) - 1
+ + length($+{middle}) - 1
+ + length($+{space2}) - 1
+ + length($+{space3});
+
+ print "$+{begin}";
+ print "Copyright\ $+{first}-$year\ by";
+ print ' ' x $space if length($+{end});
+ print "$+{end}\n";
+ $replaced = 1;
+ }ex
+ ||
+ # Second try: Search a single copyright year.
+ s {
+ (?<begin>.*)
+ Copyright
+ (?<space1>\ +)
+ (?<first>[12][0-9][0-9][0-9])
+ (?<space2>\ +)
+ by
+ (?<space3>\ *)
+ (?<end>.*)
+ }
+ {
+ # Fill line to the same length (if appropriate); we insert two
+ # spaces, a `-', and the current year.
+ my $space = length($+{space1}) - 1
+ + length($+{space2}) - 1
+ + length($+{space3})
+ - (length($year) + 1);
+
+ print "$+{begin}";
+ print "Copyright $+{first}-$year by";
+ # If $space is negative this inserts nothing.
+ print ' ' x $space if length($+{end});
+ print "$+{end}\n";
+ $replaced = 1;
+ }ex
+ ||
+ # Otherwise print line unaltered.
+ print;
+ }
+ else
+ {
+ print;
+ }
+}
+continue
+{
+ # Reset $replaced before processing the next file.
+ $replaced = 0 if eof;
+}
+
+# EOF
diff --git a/freetype/src/truetype/Jamfile b/freetype/src/truetype/Jamfile
index a8cccfe13..55a60afaa 100644
--- a/freetype/src/truetype/Jamfile
+++ b/freetype/src/truetype/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/truetype Jamfile
#
-# Copyright 2001, 2004 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/truetype/module.mk b/freetype/src/truetype/module.mk
index baee81a77..c6dc6fa6e 100644
--- a/freetype/src/truetype/module.mk
+++ b/freetype/src/truetype/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/truetype/rules.mk b/freetype/src/truetype/rules.mk
index d4b69f578..1db16ba35 100644
--- a/freetype/src/truetype/rules.mk
+++ b/freetype/src/truetype/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2001, 2003-2004, 2011-2012 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ TT_DIR := $(SRC_DIR)/truetype
# compilation flags for the driver
#
-TT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(TT_DIR))
+TT_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(TT_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# TrueType driver sources (i.e., C files)
diff --git a/freetype/src/truetype/truetype.c b/freetype/src/truetype/truetype.c
index 576912b21..f929437dc 100644
--- a/freetype/src/truetype/truetype.c
+++ b/freetype/src/truetype/truetype.c
@@ -4,7 +4,7 @@
/* */
/* FreeType TrueType driver component (body only). */
/* */
-/* Copyright 1996-2001, 2004, 2006, 2012 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/ttdriver.c b/freetype/src/truetype/ttdriver.c
index b2925f7d6..96cfbafb2 100644..100755
--- a/freetype/src/truetype/ttdriver.c
+++ b/freetype/src/truetype/ttdriver.c
@@ -4,7 +4,7 @@
/* */
/* TrueType font driver implementation (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,7 +20,7 @@
#include <internal/ftdebug.h>
#include <internal/ftstream.h>
#include <internal/sfnt.h>
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
#include FT_MULTIPLE_MASTERS_H
@@ -134,11 +134,6 @@
/*************************************************************************/
-#undef PAIR_TAG
-#define PAIR_TAG( left, right ) ( ( (FT_ULong)left << 16 ) | \
- (FT_ULong)right )
-
-
/*************************************************************************/
/* */
/* <Function> */
@@ -191,9 +186,6 @@
}
-#undef PAIR_TAG
-
-
static FT_Error
tt_get_advances( FT_Face ttface,
FT_UInt start,
@@ -456,7 +448,7 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
FT_DEFINE_SERVICEDESCREC5(
tt_services,
- FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE,
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
FT_SERVICE_ID_MULTI_MASTERS, &TT_SERVICE_GX_MULTI_MASTERS_GET,
FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
@@ -464,7 +456,7 @@
#else
FT_DEFINE_SERVICEDESCREC4(
tt_services,
- FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TRUETYPE,
+ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TRUETYPE,
FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine,
FT_SERVICE_ID_TT_GLYF, &TT_SERVICE_TRUETYPE_GLYF_GET,
FT_SERVICE_ID_PROPERTIES, &TT_SERVICE_PROPERTIES_GET )
diff --git a/freetype/src/truetype/ttdriver.h b/freetype/src/truetype/ttdriver.h
index 0f64f0652..e0f108f03 100644
--- a/freetype/src/truetype/ttdriver.h
+++ b/freetype/src/truetype/ttdriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level TrueType driver interface (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/tterrors.h b/freetype/src/truetype/tterrors.h
index 78d138fab..ba32cf744 100644
--- a/freetype/src/truetype/tterrors.h
+++ b/freetype/src/truetype/tterrors.h
@@ -4,7 +4,7 @@
/* */
/* TrueType error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/ttgload.c b/freetype/src/truetype/ttgload.c
index 8e8f48587..f732a8fb9 100644
--- a/freetype/src/truetype/ttgload.c
+++ b/freetype/src/truetype/ttgload.c
@@ -4,7 +4,7 @@
/* */
/* TrueType Glyph Loader (body). */
/* */
-/* Copyright 1996-2014 */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -100,13 +100,15 @@
else if ( face->os2.version != 0xFFFFU )
{
*tsb = (FT_Short)( face->os2.sTypoAscender - yMax );
- *ah = face->os2.sTypoAscender - face->os2.sTypoDescender;
+ *ah = (FT_UShort)FT_ABS( face->os2.sTypoAscender -
+ face->os2.sTypoDescender );
}
else
{
*tsb = (FT_Short)( face->horizontal.Ascender - yMax );
- *ah = face->horizontal.Ascender - face->horizontal.Descender;
+ *ah = (FT_UShort)FT_ABS( face->horizontal.Ascender -
+ face->horizontal.Descender );
}
FT_TRACE5(( " advance height (font units): %d\n", *ah ));
@@ -151,14 +153,16 @@
loader->vadvance = advance_height;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
+ if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 &&
+ loader->exec )
{
- if ( loader->exec )
- loader->exec->sph_tweak_flags = 0;
+ loader->exec->sph_tweak_flags = 0;
- /* this may not be the right place for this, but it works */
- if ( loader->exec && loader->exec->ignore_x_mode )
- sph_set_tweaks( loader, glyph_index );
+ /* This may not be the right place for this, but it works... */
+ /* Note that we have to unconditionally load the tweaks since */
+ /* it is possible that glyphs individually switch ClearType's */
+ /* backwards compatibility mode on and off. */
+ sph_set_tweaks( loader, glyph_index );
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
@@ -407,7 +411,7 @@
/* reading the bytecode instructions */
load->glyph->control_len = 0;
- load->glyph->control_data = 0;
+ load->glyph->control_data = NULL;
if ( p + 2 > limit )
goto Invalid_Outline;
@@ -555,8 +559,8 @@
*flag = (FT_Byte)( f & FT_CURVE_TAG_ON );
}
- outline->n_points = (FT_UShort)n_points;
- outline->n_contours = (FT_Short) n_contours;
+ outline->n_points = (FT_Short)n_points;
+ outline->n_contours = (FT_Short)n_contours;
load->cursor = p;
@@ -619,15 +623,31 @@
goto Invalid_Composite;
/* read arguments */
- if ( subglyph->flags & ARGS_ARE_WORDS )
+ if ( subglyph->flags & ARGS_ARE_XY_VALUES )
{
- subglyph->arg1 = FT_NEXT_SHORT( p );
- subglyph->arg2 = FT_NEXT_SHORT( p );
+ if ( subglyph->flags & ARGS_ARE_WORDS )
+ {
+ subglyph->arg1 = FT_NEXT_SHORT( p );
+ subglyph->arg2 = FT_NEXT_SHORT( p );
+ }
+ else
+ {
+ subglyph->arg1 = FT_NEXT_CHAR( p );
+ subglyph->arg2 = FT_NEXT_CHAR( p );
+ }
}
else
{
- subglyph->arg1 = FT_NEXT_CHAR( p );
- subglyph->arg2 = FT_NEXT_CHAR( p );
+ if ( subglyph->flags & ARGS_ARE_WORDS )
+ {
+ subglyph->arg1 = (FT_Int)FT_NEXT_USHORT( p );
+ subglyph->arg2 = (FT_Int)FT_NEXT_USHORT( p );
+ }
+ else
+ {
+ subglyph->arg1 = (FT_Int)FT_NEXT_BYTE( p );
+ subglyph->arg2 = (FT_Int)FT_NEXT_BYTE( p );
+ }
}
/* read transform */
@@ -707,9 +727,10 @@
FT_UInt start_point,
FT_UInt start_contour )
{
- zone->n_points = (FT_UShort)( load->outline.n_points - start_point );
- zone->n_contours = (FT_Short) ( load->outline.n_contours -
- start_contour );
+ zone->n_points = (FT_UShort)load->outline.n_points -
+ (FT_UShort)start_point;
+ zone->n_contours = load->outline.n_contours -
+ (FT_Short)start_contour;
zone->org = load->extra_points + start_point;
zone->cur = load->outline.points + start_point;
zone->orus = load->extra_points2 + start_point;
@@ -740,7 +761,7 @@
TT_GlyphZone zone = &loader->zone;
#ifdef TT_USE_BYTECODE_INTERPRETER
- FT_UInt n_ins;
+ FT_Long n_ins;
#else
FT_UNUSED( is_composite );
#endif
@@ -753,7 +774,7 @@
FT_TRACE1(( " (0x%lx byte) is truncated\n",
loader->glyph->control_len ));
}
- n_ins = (FT_UInt)( loader->glyph->control_len );
+ n_ins = loader->glyph->control_len;
/* save original point position in org */
if ( n_ins > 0 )
@@ -794,7 +815,6 @@
if ( n_ins > 0 )
{
- FT_Bool debug;
FT_Error error;
FT_GlyphLoader gloader = loader->gloader;
@@ -807,10 +827,7 @@
loader->exec->is_composite = is_composite;
loader->exec->pts = *zone;
- debug = FT_BOOL( !( loader->load_flags & FT_LOAD_NO_SCALE ) &&
- ((TT_Size)loader->size)->debug );
-
- error = TT_Run_Context( loader->exec, debug );
+ error = TT_Run_Context( loader->exec );
if ( error && loader->exec->pedantic_hinting )
return error;
@@ -883,25 +900,12 @@
if ( ((TT_Face)loader->face)->doblend )
{
/* Deltas apply to the unscaled data. */
- FT_Vector* deltas;
- FT_Memory memory = loader->face->memory;
- FT_Int i;
-
-
- error = TT_Vary_Get_Glyph_Deltas( (TT_Face)(loader->face),
- loader->glyph_index,
- &deltas,
- n_points );
+ error = TT_Vary_Apply_Glyph_Deltas( (TT_Face)(loader->face),
+ loader->glyph_index,
+ outline,
+ (FT_UInt)n_points );
if ( error )
return error;
-
- for ( i = 0; i < n_points; ++i )
- {
- outline->points[i].x += deltas[i].x;
- outline->points[i].y += deltas[i].y;
- }
-
- FT_FREE( deltas );
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -920,9 +924,9 @@
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
FT_String* family = face->root.family_name;
- FT_Int ppem = loader->size->metrics.x_ppem;
+ FT_UInt ppem = loader->size->metrics.x_ppem;
FT_String* style = face->root.style_name;
- FT_Int x_scale_factor = 1000;
+ FT_UInt x_scale_factor = 1000;
#endif
FT_Vector* vec = outline->points;
@@ -950,7 +954,7 @@
x_scale_factor != 1000 )
{
x_scale = FT_MulDiv( ((TT_Size)loader->size)->metrics.x_scale,
- x_scale_factor, 1000 );
+ (FT_Long)x_scale_factor, 1000 );
y_scale = ((TT_Size)loader->size)->metrics.y_scale;
/* compensate for any scaling by de/emboldening; */
@@ -1021,7 +1025,7 @@
{
FT_GlyphLoader gloader = loader->gloader;
FT_Vector* base_vec = gloader->base.outline.points;
- FT_UInt num_points = gloader->base.outline.n_points;
+ FT_UInt num_points = (FT_UInt)gloader->base.outline.n_points;
FT_Bool have_scale;
FT_Pos x, y;
@@ -1043,8 +1047,8 @@
/* get offset */
if ( !( subglyph->flags & ARGS_ARE_XY_VALUES ) )
{
- FT_UInt k = subglyph->arg1;
- FT_UInt l = subglyph->arg2;
+ FT_UInt k = (FT_UInt)subglyph->arg1;
+ FT_UInt l = (FT_UInt)subglyph->arg2;
FT_Vector* p1;
FT_Vector* p2;
@@ -1350,11 +1354,14 @@
#define TT_LOADER_SET_PP( loader ) \
do \
{ \
- FT_Bool subpixel_ = loader->exec ? loader->exec->subpixel \
- : 0; \
- FT_Bool grayscale_ = loader->exec ? loader->exec->grayscale \
- : 0; \
- FT_Bool use_aw_2_ = (FT_Bool)( subpixel_ && grayscale_ ); \
+ FT_Bool subpixel_hinting_ = loader->exec \
+ ? loader->exec->subpixel_hinting \
+ : 0; \
+ FT_Bool grayscale_ = loader->exec \
+ ? loader->exec->grayscale \
+ : 0; \
+ FT_Bool use_aw_2_ = (FT_Bool)( subpixel_hinting_ && \
+ grayscale_ ); \
\
\
(loader)->pp1.x = (loader)->bbox.xMin - (loader)->left_bearing; \
@@ -1409,10 +1416,6 @@
FT_GlyphLoader gloader = loader->gloader;
FT_Bool opened_frame = 0;
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
- FT_Vector* deltas = NULL;
-#endif
-
#ifdef FT_CONFIG_OPTION_INCREMENTAL
FT_StreamRec inc_stream;
FT_Data glyph_data;
@@ -1429,12 +1432,14 @@
goto Exit;
}
+#ifndef FT_CONFIG_OPTION_INCREMENTAL
/* check glyph index */
if ( glyph_index >= (FT_UInt)face->root.num_glyphs )
{
error = FT_THROW( Invalid_Glyph_Index );
goto Exit;
}
+#endif
loader->glyph_index = glyph_index;
@@ -1472,7 +1477,8 @@
FT_MEM_ZERO( &inc_stream, sizeof ( inc_stream ) );
FT_Stream_OpenMemory( &inc_stream,
- glyph_data.pointer, glyph_data.length );
+ glyph_data.pointer,
+ (FT_ULong)glyph_data.length );
loader->stream = &inc_stream;
}
@@ -1500,7 +1506,7 @@
error = face->access_glyph_frame( loader, glyph_index,
loader->glyf_offset + offset,
- loader->byte_len );
+ (FT_UInt)loader->byte_len );
if ( error )
goto Exit;
@@ -1548,26 +1554,47 @@
if ( ((TT_Face)(loader->face))->doblend )
{
- /* this must be done before scaling */
- FT_Memory memory = loader->face->memory;
+ /* a small outline structure with four elements for */
+ /* communication with `TT_Vary_Apply_Glyph_Deltas' */
+ FT_Vector points[4];
+ char tags[4] = { 1, 1, 1, 1 };
+ short contours[4] = { 0, 1, 2, 3 };
+ FT_Outline outline;
+
+
+ points[0].x = loader->pp1.x;
+ points[0].y = loader->pp1.y;
+ points[1].x = loader->pp2.x;
+ points[1].y = loader->pp2.y;
+
+ points[2].x = loader->pp3.x;
+ points[2].y = loader->pp3.y;
+ points[3].x = loader->pp4.x;
+ points[3].y = loader->pp4.y;
+
+ outline.n_points = 4;
+ outline.n_contours = 4;
+ outline.points = points;
+ outline.tags = tags;
+ outline.contours = contours;
-
- error = TT_Vary_Get_Glyph_Deltas( (TT_Face)(loader->face),
- glyph_index, &deltas, 4 );
+ /* this must be done before scaling */
+ error = TT_Vary_Apply_Glyph_Deltas( (TT_Face)(loader->face),
+ glyph_index,
+ &outline,
+ outline.n_points );
if ( error )
goto Exit;
- loader->pp1.x += deltas[0].x;
- loader->pp1.y += deltas[0].y;
- loader->pp2.x += deltas[1].x;
- loader->pp2.y += deltas[1].y;
-
- loader->pp3.x += deltas[2].x;
- loader->pp3.y += deltas[2].y;
- loader->pp4.x += deltas[3].x;
- loader->pp4.y += deltas[3].y;
+ loader->pp1.x = points[0].x;
+ loader->pp1.y = points[0].y;
+ loader->pp2.x = points[1].x;
+ loader->pp2.y = points[1].y;
- FT_FREE( deltas );
+ loader->pp3.x = points[2].x;
+ loader->pp3.y = points[2].y;
+ loader->pp4.x = points[3].x;
+ loader->pp4.y = points[3].y;
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1633,8 +1660,8 @@
FT_ULong ins_pos; /* position of composite instructions, if any */
- start_point = gloader->base.outline.n_points;
- start_contour = gloader->base.outline.n_contours;
+ start_point = (FT_UInt)gloader->base.outline.n_points;
+ start_contour = (FT_UInt)gloader->base.outline.n_contours;
/* for each subglyph, read composite header */
error = face->read_composite_glyph( loader );
@@ -1652,47 +1679,106 @@
if ( face->doblend )
{
- FT_Int i, limit;
+ FT_UInt i, limit;
FT_SubGlyph subglyph;
- FT_Memory memory = face->root.memory;
+ FT_Outline outline;
+ FT_Vector* points = NULL;
+ char* tags = NULL;
+ short* contours = NULL;
+
+ FT_Memory memory = face->root.memory;
+
+
+ limit = gloader->current.num_subglyphs;
- /* this provides additional offsets */
- /* for each component's translation */
+ /* construct an outline structure for */
+ /* communication with `TT_Vary_Apply_Glyph_Deltas' */
+ outline.n_points = gloader->current.num_subglyphs + 4;
+ outline.n_contours = outline.n_points;
+
+ if ( FT_NEW_ARRAY( points, outline.n_points ) ||
+ FT_NEW_ARRAY( tags, outline.n_points ) ||
+ FT_NEW_ARRAY( contours, outline.n_points ) )
+ goto Exit1;
+
+ subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
+
+ for ( i = 0; i < limit; i++, subglyph++ )
+ {
+ /* applying deltas for anchor points doesn't make sense, */
+ /* but we don't have to specially check this since */
+ /* unused delta values are zero anyways */
+ points[i].x = subglyph->arg1;
+ points[i].y = subglyph->arg2;
+ tags[i] = 1;
+ contours[i] = i;
+ }
- if ( ( error = TT_Vary_Get_Glyph_Deltas(
+ points[i].x = loader->pp1.x;
+ points[i].y = loader->pp1.y;
+ tags[i] = 1;
+ contours[i] = i;
+
+ i++;
+ points[i].x = loader->pp2.x;
+ points[i].y = loader->pp2.y;
+ tags[i] = 1;
+ contours[i] = i;
+
+ i++;
+ points[i].x = loader->pp3.x;
+ points[i].y = loader->pp3.y;
+ tags[i] = 1;
+ contours[i] = i;
+
+ i++;
+ points[i].x = loader->pp4.x;
+ points[i].y = loader->pp4.y;
+ tags[i] = 1;
+ contours[i] = i;
+
+ outline.points = points;
+ outline.tags = tags;
+ outline.contours = contours;
+
+ /* this call provides additional offsets */
+ /* for each component's translation */
+ if ( ( error = TT_Vary_Apply_Glyph_Deltas(
face,
glyph_index,
- &deltas,
- gloader->current.num_subglyphs + 4 ) ) != 0 )
- goto Exit;
+ &outline,
+ outline.n_points ) ) != 0 )
+ goto Exit1;
subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
- limit = gloader->current.num_subglyphs;
- for ( i = 0; i < limit; ++i, ++subglyph )
+ for ( i = 0; i < limit; i++, subglyph++ )
{
- if ( subglyph->flags & ARGS_ARE_XY_VALUES )
- {
- /* XXX: overflow check for subglyph->{arg1,arg2}. */
- /* deltas[i].{x,y} must be within signed 16-bit, */
- /* but the restriction of summed delta is not clear */
- subglyph->arg1 += (FT_Int16)deltas[i].x;
- subglyph->arg2 += (FT_Int16)deltas[i].y;
- }
+ /* XXX: overflow check for subglyph->{arg1,arg2}. */
+ /* Deltas must be within signed 16-bit, */
+ /* but the restriction of summed deltas is not clear */
+ subglyph->arg1 = (FT_Int16)points[i].x;
+ subglyph->arg2 = (FT_Int16)points[i].y;
}
- loader->pp1.x += deltas[i + 0].x;
- loader->pp1.y += deltas[i + 0].y;
- loader->pp2.x += deltas[i + 1].x;
- loader->pp2.y += deltas[i + 1].y;
+ loader->pp1.x = points[i + 0].x;
+ loader->pp1.y = points[i + 0].y;
+ loader->pp2.x = points[i + 1].x;
+ loader->pp2.y = points[i + 1].y;
- loader->pp3.x += deltas[i + 2].x;
- loader->pp3.y += deltas[i + 2].y;
- loader->pp4.x += deltas[i + 3].x;
- loader->pp4.y += deltas[i + 3].y;
+ loader->pp3.x = points[i + 2].x;
+ loader->pp3.y = points[i + 2].y;
+ loader->pp4.x = points[i + 3].x;
+ loader->pp4.y = points[i + 3].y;
- FT_FREE( deltas );
+ Exit1:
+ FT_FREE( outline.points );
+ FT_FREE( outline.tags );
+ FT_FREE( outline.contours );
+
+ if ( error )
+ goto Exit;
}
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1728,7 +1814,7 @@
{
FT_UInt n, num_base_points;
- FT_SubGlyph subglyph = 0;
+ FT_SubGlyph subglyph = NULL;
FT_UInt num_points = start_point;
FT_UInt num_subglyphs = gloader->current.num_subglyphs;
@@ -1757,10 +1843,12 @@
pp[2] = loader->pp3;
pp[3] = loader->pp4;
- num_base_points = gloader->base.outline.n_points;
+ num_base_points = (FT_UInt)gloader->base.outline.n_points;
- error = load_truetype_glyph( loader, subglyph->index,
- recurse_count + 1, FALSE );
+ error = load_truetype_glyph( loader,
+ (FT_UInt)subglyph->index,
+ recurse_count + 1,
+ FALSE );
if ( error )
goto Exit;
@@ -1776,7 +1864,7 @@
loader->pp4 = pp[3];
}
- num_points = gloader->base.outline.n_points;
+ num_points = (FT_UInt)gloader->base.outline.n_points;
if ( num_points == num_base_points )
continue;
@@ -2039,7 +2127,7 @@
error = sfnt->load_sbit_image( face,
size->strike_index,
glyph_index,
- (FT_Int)load_flags,
+ (FT_UInt)load_flags,
stream,
&glyph->bitmap,
&metrics );
@@ -2111,14 +2199,16 @@
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
TT_Driver driver = (TT_Driver)FT_FACE_DRIVER( face );
- FT_Bool subpixel = FALSE;
+ FT_Bool subpixel_hinting = FALSE;
#if 0
/* not used yet */
FT_Bool compatible_widths;
FT_Bool symmetrical_smoothing;
FT_Bool bgr;
+ FT_Bool vertical_lcd;
FT_Bool subpixel_positioned;
+ FT_Bool gray_cleartype;
#endif
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
@@ -2137,8 +2227,7 @@
return size->cvt_ready;
/* query new execution context */
- exec = size->debug ? size->context
- : ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
+ exec = size->context;
if ( !exec )
return FT_THROW( Could_Not_Find_Context );
@@ -2146,33 +2235,35 @@
if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
{
- subpixel = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags ) !=
- FT_RENDER_MODE_MONO ) &&
- SPH_OPTION_SET_SUBPIXEL );
+ subpixel_hinting = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags ) !=
+ FT_RENDER_MODE_MONO ) &&
+ SPH_OPTION_SET_SUBPIXEL );
- if ( subpixel )
+ if ( subpixel_hinting )
grayscale = FALSE;
else if ( SPH_OPTION_SET_GRAYSCALE )
{
- grayscale = TRUE;
- subpixel = FALSE;
+ grayscale = TRUE;
+ subpixel_hinting = FALSE;
}
else
grayscale = FALSE;
if ( FT_IS_TRICKY( glyph->face ) )
- subpixel = FALSE;
+ subpixel_hinting = FALSE;
- exec->ignore_x_mode = subpixel || grayscale;
+ exec->ignore_x_mode = subpixel_hinting || grayscale;
exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
exec->rasterizer_version = TT_INTERPRETER_VERSION_35;
#if 1
exec->compatible_widths = SPH_OPTION_SET_COMPATIBLE_WIDTHS;
- exec->symmetrical_smoothing = FALSE;
+ exec->symmetrical_smoothing = TRUE;
exec->bgr = FALSE;
+ exec->vertical_lcd = FALSE;
exec->subpixel_positioned = TRUE;
+ exec->gray_cleartype = FALSE;
#else /* 0 */
exec->compatible_widths =
FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
@@ -2183,9 +2274,15 @@
exec->bgr =
FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
TT_LOAD_BGR );
+ exec->vertical_lcd =
+ FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
+ TT_LOAD_VERTICAL_LCD );
exec->subpixel_positioned =
FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
TT_LOAD_SUBPIXEL_POSITIONED );
+ exec->gray_cleartype =
+ FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) !=
+ TT_LOAD_GRAY_CLEARTYPE );
#endif /* 0 */
}
@@ -2208,13 +2305,13 @@
{
/* a change from mono to subpixel rendering (and vice versa) */
/* requires a re-execution of the CVT program */
- if ( subpixel != exec->subpixel )
+ if ( subpixel_hinting != exec->subpixel_hinting )
{
FT_TRACE4(( "tt_loader_init: subpixel hinting change,"
" re-executing `prep' table\n" ));
- exec->subpixel = subpixel;
- reexecute = TRUE;
+ exec->subpixel_hinting = subpixel_hinting;
+ reexecute = TRUE;
}
/* a change from mono to grayscale rendering (and vice versa) */
@@ -2237,7 +2334,7 @@
/* requires a re-execution of the CVT program */
if ( grayscale != exec->grayscale )
{
- FT_TRACE4(( "tt_loader_init: grayscale change,"
+ FT_TRACE4(( "tt_loader_init: grayscale hinting change,"
" re-executing `prep' table\n" ));
exec->grayscale = grayscale;
@@ -2257,7 +2354,7 @@
return error;
}
- /* see whether the cvt program has disabled hinting */
+ /* check whether the cvt program has disabled hinting */
if ( exec->GS.instruct_control & 1 )
load_flags |= FT_LOAD_NO_HINTING;
@@ -2265,6 +2362,13 @@
if ( exec->GS.instruct_control & 2 )
exec->GS = tt_default_graphics_state;
+#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ /* check whether we have a font hinted for ClearType -- */
+ /* note that this flag can also be modified in a glyph's bytecode */
+ if ( exec->GS.instruct_control & 4 )
+ exec->ignore_x_mode = 0;
+#endif
+
exec->pedantic_hinting = FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
loader->exec = exec;
loader->instructions = exec->glyphIns;
@@ -2308,7 +2412,7 @@
loader->gloader = gloader;
}
- loader->load_flags = load_flags;
+ loader->load_flags = (FT_ULong)load_flags;
loader->face = (FT_Face)face;
loader->size = (FT_Size)size;
diff --git a/freetype/src/truetype/ttgload.h b/freetype/src/truetype/ttgload.h
index 3f1699e68..8e3255e10 100644
--- a/freetype/src/truetype/ttgload.h
+++ b/freetype/src/truetype/ttgload.h
@@ -4,7 +4,7 @@
/* */
/* TrueType Glyph Loader (specification). */
/* */
-/* Copyright 1996-2006, 2008, 2011 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/ttgxvar.c b/freetype/src/truetype/ttgxvar.c
index ea654b878..ed6bb8dd6 100644
--- a/freetype/src/truetype/ttgxvar.c
+++ b/freetype/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
/* */
/* TrueType GX Font Variation loader */
/* */
-/* Copyright 2004-2014 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -20,7 +20,7 @@
/* */
/* Apple documents the `fvar', `gvar', `cvar', and `avar' tables at */
/* */
- /* http://developer.apple.com/fonts/TTRefMan/RM06/Chap6[fgca]var.html */
+ /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6[fgca]var.html */
/* */
/* The documentation for `fvar' is inconsistent. At one point it says */
/* that `countSizePairs' should be 3, at another point 2. It should */
@@ -60,9 +60,9 @@
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#define FT_Stream_FTell( stream ) \
+#define FT_Stream_FTell( stream ) \
(FT_ULong)( (stream)->cursor - (stream)->base )
-#define FT_Stream_SeekSet( stream, off ) \
+#define FT_Stream_SeekSet( stream, off ) \
( (stream)->cursor = (stream)->base + (off) )
@@ -96,8 +96,8 @@
#define ALL_POINTS (FT_UShort*)~(FT_PtrDist)0
-#define GX_PT_POINTS_ARE_WORDS 0x80
-#define GX_PT_POINT_RUN_COUNT_MASK 0x7F
+#define GX_PT_POINTS_ARE_WORDS 0x80U
+#define GX_PT_POINT_RUN_COUNT_MASK 0x7FU
/*************************************************************************/
@@ -126,52 +126,67 @@
FT_UInt *point_cnt )
{
FT_UShort *points = NULL;
- FT_Int n;
- FT_Int runcnt;
- FT_Int i;
- FT_Int j;
- FT_Int first;
+ FT_UInt n;
+ FT_UInt runcnt;
+ FT_UInt i, j;
+ FT_UShort first;
FT_Memory memory = stream->memory;
FT_Error error = FT_Err_Ok;
FT_UNUSED( error );
- *point_cnt = n = FT_GET_BYTE();
+ *point_cnt = 0;
+
+ n = FT_GET_BYTE();
if ( n == 0 )
return ALL_POINTS;
if ( n & GX_PT_POINTS_ARE_WORDS )
- n = FT_GET_BYTE() | ( ( n & GX_PT_POINT_RUN_COUNT_MASK ) << 8 );
+ {
+ n &= GX_PT_POINT_RUN_COUNT_MASK;
+ n <<= 8;
+ n |= FT_GET_BYTE();
+ }
if ( FT_NEW_ARRAY( points, n ) )
return NULL;
+ *point_cnt = n;
+
i = 0;
while ( i < n )
{
runcnt = FT_GET_BYTE();
if ( runcnt & GX_PT_POINTS_ARE_WORDS )
{
- runcnt = runcnt & GX_PT_POINT_RUN_COUNT_MASK;
- first = points[i++] = FT_GET_USHORT();
+ runcnt &= GX_PT_POINT_RUN_COUNT_MASK;
+ first = FT_GET_USHORT();
+ points[i++] = first;
- if ( runcnt < 1 || i + runcnt >= n )
+ if ( runcnt < 1 || i + runcnt > n )
goto Exit;
- /* first point not included in runcount */
- for ( j = 0; j < runcnt; ++j )
- points[i++] = (FT_UShort)( first += FT_GET_USHORT() );
+ /* first point not included in run count */
+ for ( j = 0; j < runcnt; j++ )
+ {
+ first += FT_GET_USHORT();
+ points[i++] = first;
+ }
}
else
{
- first = points[i++] = FT_GET_BYTE();
+ first = FT_GET_BYTE();
+ points[i++] = first;
- if ( runcnt < 1 || i + runcnt >= n )
+ if ( runcnt < 1 || i + runcnt > n )
goto Exit;
- for ( j = 0; j < runcnt; ++j )
- points[i++] = (FT_UShort)( first += FT_GET_BYTE() );
+ for ( j = 0; j < runcnt; j++ )
+ {
+ first += FT_GET_BYTE();
+ points[i++] = first;
+ }
}
}
@@ -180,12 +195,9 @@
}
- enum
- {
- GX_DT_DELTAS_ARE_ZERO = 0x80,
- GX_DT_DELTAS_ARE_WORDS = 0x40,
- GX_DT_DELTA_RUN_COUNT_MASK = 0x3F
- };
+#define GX_DT_DELTAS_ARE_ZERO 0x80U
+#define GX_DT_DELTAS_ARE_WORDS 0x40U
+#define GX_DT_DELTA_RUN_COUNT_MASK 0x3FU
/*************************************************************************/
@@ -200,7 +212,7 @@
/* <Input> */
/* stream :: The data stream. */
/* */
- /* delta_cnt :: The number of to be read. */
+ /* delta_cnt :: The number of deltas to be read. */
/* */
/* <Return> */
/* An array of FT_Short containing the deltas for the affected */
@@ -210,12 +222,11 @@
/* */
static FT_Short*
ft_var_readpackeddeltas( FT_Stream stream,
- FT_Offset delta_cnt )
+ FT_UInt delta_cnt )
{
FT_Short *deltas = NULL;
- FT_UInt runcnt;
- FT_Offset i;
- FT_UInt j;
+ FT_UInt runcnt, cnt;
+ FT_UInt i, j;
FT_Memory memory = stream->memory;
FT_Error error = FT_Err_Ok;
@@ -229,34 +240,30 @@
while ( i < delta_cnt )
{
runcnt = FT_GET_BYTE();
+ cnt = runcnt & GX_DT_DELTA_RUN_COUNT_MASK;
+
if ( runcnt & GX_DT_DELTAS_ARE_ZERO )
{
- /* runcnt zeroes get added */
- for ( j = 0;
- j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) && i < delta_cnt;
- ++j )
+ /* `runcnt' zeroes get added */
+ for ( j = 0; j <= cnt && i < delta_cnt; j++ )
deltas[i++] = 0;
}
else if ( runcnt & GX_DT_DELTAS_ARE_WORDS )
{
- /* runcnt shorts from the stack */
- for ( j = 0;
- j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) && i < delta_cnt;
- ++j )
+ /* `runcnt' shorts from the stack */
+ for ( j = 0; j <= cnt && i < delta_cnt; j++ )
deltas[i++] = FT_GET_SHORT();
}
else
{
- /* runcnt signed bytes from the stack */
- for ( j = 0;
- j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) && i < delta_cnt;
- ++j )
+ /* `runcnt' signed bytes from the stack */
+ for ( j = 0; j <= cnt && i < delta_cnt; j++ )
deltas[i++] = FT_GET_CHAR();
}
- if ( j <= ( runcnt & GX_DT_DELTA_RUN_COUNT_MASK ) )
+ if ( j <= cnt )
{
- /* Bad format */
+ /* bad format */
FT_FREE( deltas );
return NULL;
}
@@ -281,12 +288,12 @@
static void
ft_var_load_avar( TT_Face face )
{
- FT_Stream stream = FT_FACE_STREAM(face);
+ FT_Stream stream = FT_FACE_STREAM( face );
FT_Memory memory = stream->memory;
GX_Blend blend = face->blend;
GX_AVarSegment segment;
FT_Error error = FT_Err_Ok;
- FT_ULong version;
+ FT_Long version;
FT_Long axisCount;
FT_Int i, j;
FT_ULong table_len;
@@ -294,9 +301,15 @@
FT_UNUSED( error );
+ FT_TRACE2(( "AVAR " ));
+
blend->avar_checked = TRUE;
- if ( (error = face->goto_table( face, TTAG_avar, stream, &table_len )) != 0 )
+ error = face->goto_table( face, TTAG_avar, stream, &table_len );
+ if ( error )
+ {
+ FT_TRACE2(( "is missing\n" ));
return;
+ }
if ( FT_FRAME_ENTER( table_len ) )
return;
@@ -304,23 +317,36 @@
version = FT_GET_LONG();
axisCount = FT_GET_LONG();
- if ( version != 0x00010000L ||
- axisCount != (FT_Long)blend->mmvar->num_axis )
+ if ( version != 0x00010000L )
+ {
+ FT_TRACE2(( "bad table version\n" ));
+ goto Exit;
+ }
+
+ FT_TRACE2(( "loaded\n" ));
+
+ if ( axisCount != (FT_Long)blend->mmvar->num_axis )
+ {
+ FT_TRACE2(( "ft_var_load_avar: number of axes in `avar' and `cvar'\n"
+ " table are different\n" ));
goto Exit;
+ }
if ( FT_NEW_ARRAY( blend->avar_segment, axisCount ) )
goto Exit;
segment = &blend->avar_segment[0];
- for ( i = 0; i < axisCount; ++i, ++segment )
+ for ( i = 0; i < axisCount; i++, segment++ )
{
+ FT_TRACE5(( " axis %d:\n", i ));
+
segment->pairCount = FT_GET_USHORT();
if ( FT_NEW_ARRAY( segment->correspondence, segment->pairCount ) )
{
/* Failure. Free everything we have done so far. We must do */
/* it right now since loading the `avar' table is optional. */
- for ( j = i - 1; j >= 0; --j )
+ for ( j = i - 1; j >= 0; j-- )
FT_FREE( blend->avar_segment[j].correspondence );
FT_FREE( blend->avar_segment );
@@ -328,13 +354,18 @@
goto Exit;
}
- for ( j = 0; j < segment->pairCount; ++j )
+ for ( j = 0; j < segment->pairCount; j++ )
{
- segment->correspondence[j].fromCoord =
- FT_GET_SHORT() << 2; /* convert to Fixed */
- segment->correspondence[j].toCoord =
- FT_GET_SHORT()<<2; /* convert to Fixed */
+ /* convert to Fixed */
+ segment->correspondence[j].fromCoord = FT_GET_SHORT() << 2;
+ segment->correspondence[j].toCoord = FT_GET_SHORT() << 2;
+
+ FT_TRACE5(( " mapping %.4f to %.4f\n",
+ segment->correspondence[j].fromCoord / 65536.0,
+ segment->correspondence[j].toCoord / 65536.0 ));
}
+
+ FT_TRACE5(( "\n" ));
}
Exit:
@@ -361,8 +392,8 @@
/* ft_var_load_gvar */
/* */
/* <Description> */
- /* Parses the `gvar' table if present. If `fvar' is there, `gvar' */
- /* had better be there too. */
+ /* Parse the `gvar' table if present. If `fvar' is there, `gvar' had */
+ /* better be there too. */
/* */
/* <InOut> */
/* face :: The font face. */
@@ -373,7 +404,7 @@
static FT_Error
ft_var_load_gvar( TT_Face face )
{
- FT_Stream stream = FT_FACE_STREAM(face);
+ FT_Stream stream = FT_FACE_STREAM( face );
FT_Memory memory = stream->memory;
GX_Blend blend = face->blend;
FT_Error error;
@@ -400,8 +431,17 @@
FT_FRAME_END
};
- if ( (error = face->goto_table( face, TTAG_gvar, stream, &table_len )) != 0 )
+
+ FT_TRACE2(( "GVAR " ));
+
+ if ( ( error = face->goto_table( face,
+ TTAG_gvar,
+ stream,
+ &table_len ) ) != 0 )
+ {
+ FT_TRACE2(( "is missing\n" ));
goto Exit;
+ }
gvar_start = FT_STREAM_POS( );
if ( FT_STREAM_READ_FIELDS( gvar_fields, &gvar_head ) )
@@ -411,13 +451,26 @@
blend->gv_glyphcnt = gvar_head.glyphCount;
offsetToData = gvar_start + gvar_head.offsetToData;
- if ( gvar_head.version != (FT_Long)0x00010000L ||
- gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
+ if ( gvar_head.version != 0x00010000L )
+ {
+ FT_TRACE1(( "bad table version\n" ));
+ error = FT_THROW( Invalid_Table );
+ goto Exit;
+ }
+
+ FT_TRACE2(( "loaded\n" ));
+
+ if ( gvar_head.axisCount != (FT_UShort)blend->mmvar->num_axis )
{
+ FT_TRACE1(( "ft_var_load_gvar: number of axes in `gvar' and `cvar'\n"
+ " table are different\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
+ FT_TRACE5(( "gvar: there are %d shared coordinates:\n",
+ blend->tuplecount ));
+
if ( FT_NEW_ARRAY( blend->glyphoffsets, blend->gv_glyphcnt + 1 ) )
goto Exit;
@@ -427,8 +480,8 @@
if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 4L ) )
goto Exit;
- for ( i = 0; i <= blend->gv_glyphcnt; ++i )
- blend->glyphoffsets[i] = offsetToData + FT_GET_LONG();
+ for ( i = 0; i <= blend->gv_glyphcnt; i++ )
+ blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG();
FT_FRAME_EXIT();
}
@@ -438,9 +491,9 @@
if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 2L ) )
goto Exit;
- for ( i = 0; i <= blend->gv_glyphcnt; ++i )
+ for ( i = 0; i <= blend->gv_glyphcnt; i++ )
blend->glyphoffsets[i] = offsetToData + FT_GET_USHORT() * 2;
- /* XXX: Undocumented: `*2'! */
+ /* XXX: Undocumented: `*2'! */
FT_FRAME_EXIT();
}
@@ -451,14 +504,24 @@
gvar_head.axisCount * blend->tuplecount ) )
goto Exit;
- if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) ||
- FT_FRAME_ENTER( blend->tuplecount * gvar_head.axisCount * 2L ) )
+ if ( FT_STREAM_SEEK( gvar_start + gvar_head.offsetToCoord ) ||
+ FT_FRAME_ENTER( blend->tuplecount * gvar_head.axisCount * 2L ) )
goto Exit;
- for ( i = 0; i < blend->tuplecount; ++i )
- for ( j = 0 ; j < (FT_UInt)gvar_head.axisCount; ++j )
+ for ( i = 0; i < blend->tuplecount; i++ )
+ {
+ FT_TRACE5(( " [ " ));
+ for ( j = 0 ; j < (FT_UInt)gvar_head.axisCount; j++ )
+ {
blend->tuplecoords[i * gvar_head.axisCount + j] =
FT_GET_SHORT() << 2; /* convert to FT_Fixed */
+ FT_TRACE5(( "%.4f ",
+ blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 ));
+ }
+ FT_TRACE5(( "]\n" ));
+ }
+
+ FT_TRACE5(( "\n" ));
FT_FRAME_EXIT();
}
@@ -506,48 +569,83 @@
FT_Fixed apply = 0x10000L;
- for ( i = 0; i < blend->num_axis; ++i )
+ for ( i = 0; i < blend->num_axis; i++ )
{
+ FT_TRACE6(( " axis coordinate %d (%.4f):\n",
+ i, blend->normalizedcoords[i] / 65536.0 ));
+
+ /* It's not clear why (for intermediate tuples) we don't need */
+ /* to check against start/end -- the documentation says we don't. */
+ /* Similarly, it's unclear why we don't need to scale along the */
+ /* axis. */
+
if ( tuple_coords[i] == 0 )
- /* It's not clear why (for intermediate tuples) we don't need */
- /* to check against start/end -- the documentation says we don't. */
- /* Similarly, it's unclear why we don't need to scale along the */
- /* axis. */
+ {
+ FT_TRACE6(( " tuple coordinate is zero, ignored\n", i ));
continue;
+ }
+
+ else if ( blend->normalizedcoords[i] == 0 )
+ {
+ FT_TRACE6(( " axis coordinate is zero, stop\n" ));
+ apply = 0;
+ break;
+ }
- else if ( blend->normalizedcoords[i] == 0 ||
- ( blend->normalizedcoords[i] < 0 && tuple_coords[i] > 0 ) ||
+ else if ( ( blend->normalizedcoords[i] < 0 && tuple_coords[i] > 0 ) ||
( blend->normalizedcoords[i] > 0 && tuple_coords[i] < 0 ) )
{
+ FT_TRACE6(( " tuple coordinate value %.4f is exceeded, stop\n",
+ tuple_coords[i] / 65536.0 ));
apply = 0;
break;
}
else if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
+ {
+ FT_TRACE6(( " tuple coordinate value %.4f fits\n",
+ tuple_coords[i] / 65536.0 ));
/* not an intermediate tuple */
apply = FT_MulFix( apply,
blend->normalizedcoords[i] > 0
? blend->normalizedcoords[i]
: -blend->normalizedcoords[i] );
+ }
- else if ( blend->normalizedcoords[i] <= im_start_coords[i] ||
- blend->normalizedcoords[i] >= im_end_coords[i] )
+ else if ( blend->normalizedcoords[i] < im_start_coords[i] ||
+ blend->normalizedcoords[i] > im_end_coords[i] )
{
+ FT_TRACE6(( " intermediate tuple range [%.4f;%.4f] is exceeded,"
+ " stop\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
apply = 0;
break;
}
else if ( blend->normalizedcoords[i] < tuple_coords[i] )
+ {
+ FT_TRACE6(( " intermediate tuple range [%.4f;%.4f] fits\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
apply = FT_MulDiv( apply,
blend->normalizedcoords[i] - im_start_coords[i],
tuple_coords[i] - im_start_coords[i] );
+ }
else
+ {
+ FT_TRACE6(( " intermediate tuple range [%.4f;%.4f] fits\n",
+ im_start_coords[i] / 65536.0,
+ im_end_coords[i] / 65536.0 ));
apply = FT_MulDiv( apply,
im_end_coords[i] - blend->normalizedcoords[i],
im_end_coords[i] - tuple_coords[i] );
+ }
}
+ FT_TRACE6(( " apply factor is %.4f\n", apply / 65536.0 ));
+
return apply;
}
@@ -577,9 +675,9 @@
typedef struct fvar_axis_
{
FT_ULong axisTag;
- FT_ULong minValue;
- FT_ULong defaultValue;
- FT_ULong maxValue;
+ FT_Fixed minValue;
+ FT_Fixed defaultValue;
+ FT_Fixed maxValue;
FT_UShort flags;
FT_UShort nameID;
@@ -647,25 +745,37 @@
FT_FRAME_START( 20 ),
FT_FRAME_ULONG ( axisTag ),
- FT_FRAME_ULONG ( minValue ),
- FT_FRAME_ULONG ( defaultValue ),
- FT_FRAME_ULONG ( maxValue ),
+ FT_FRAME_LONG ( minValue ),
+ FT_FRAME_LONG ( defaultValue ),
+ FT_FRAME_LONG ( maxValue ),
FT_FRAME_USHORT( flags ),
FT_FRAME_USHORT( nameID ),
FT_FRAME_END
};
+ /* read the font data and set up the internal representation */
+ /* if not already done */
+
if ( face->blend == NULL )
{
+ FT_TRACE2(( "FVAR " ));
+
/* both `fvar' and `gvar' must be present */
- if ( (error = face->goto_table( face, TTAG_gvar,
- stream, &table_len )) != 0 )
+ if ( ( error = face->goto_table( face, TTAG_gvar,
+ stream, &table_len ) ) != 0 )
+ {
+ FT_TRACE1(( "\n"
+ "TT_Get_MM_Var: `gvar' table is missing\n" ));
goto Exit;
+ }
- if ( (error = face->goto_table( face, TTAG_fvar,
- stream, &table_len )) != 0 )
+ if ( ( error = face->goto_table( face, TTAG_fvar,
+ stream, &table_len ) ) != 0 )
+ {
+ FT_TRACE1(( "is missing\n" ));
goto Exit;
+ }
fvar_start = FT_STREAM_POS( );
@@ -673,7 +783,12 @@
goto Exit;
if ( fvar_head.version != (FT_Long)0x00010000L ||
+#if 0
+ /* fonts like `JamRegular.ttf' have an incorrect value for */
+ /* `countSizePairs'; since value 2 is hard-coded in `fvar' */
+ /* version 1.0, we simply ignore it */
fvar_head.countSizePairs != 2 ||
+#endif
fvar_head.axisSize != 20 ||
/* axisCount limit implied by 16-bit instanceSize */
fvar_head.axisCount > 0x3FFE ||
@@ -683,10 +798,16 @@
fvar_head.offsetToData + fvar_head.axisCount * 20U +
fvar_head.instanceCount * fvar_head.instanceSize > table_len )
{
+ FT_TRACE1(( "\n"
+ "TT_Get_MM_Var: invalid `fvar' header\n" ));
error = FT_THROW( Invalid_Table );
goto Exit;
}
+ FT_TRACE2(( "loaded\n" ));
+
+ FT_TRACE5(( "number of GX style axes: %d\n", fvar_head.axisCount ));
+
if ( FT_NEW( face->blend ) )
goto Exit;
@@ -702,6 +823,9 @@
goto Exit;
face->blend->mmvar = mmvar;
+ /* set up pointers and offsets into the `mmvar' array; */
+ /* the data gets filled in later on */
+
mmvar->num_axis =
fvar_head.axisCount;
mmvar->num_designs =
@@ -711,30 +835,32 @@
mmvar->num_namedstyles =
fvar_head.instanceCount;
mmvar->axis =
- (FT_Var_Axis*)&(mmvar[1]);
+ (FT_Var_Axis*)&( mmvar[1] );
mmvar->namedstyle =
- (FT_Var_Named_Style*)&(mmvar->axis[fvar_head.axisCount]);
+ (FT_Var_Named_Style*)&( mmvar->axis[fvar_head.axisCount] );
next_coords =
- (FT_Fixed*)&(mmvar->namedstyle[fvar_head.instanceCount]);
- for ( i = 0; i < fvar_head.instanceCount; ++i )
+ (FT_Fixed*)&( mmvar->namedstyle[fvar_head.instanceCount] );
+ for ( i = 0; i < fvar_head.instanceCount; i++ )
{
mmvar->namedstyle[i].coords = next_coords;
next_coords += fvar_head.axisCount;
}
next_name = (FT_String*)next_coords;
- for ( i = 0; i < fvar_head.axisCount; ++i )
+ for ( i = 0; i < fvar_head.axisCount; i++ )
{
mmvar->axis[i].name = next_name;
next_name += 5;
}
+ /* now fill in the data */
+
if ( FT_STREAM_SEEK( fvar_start + fvar_head.offsetToData ) )
goto Exit;
a = mmvar->axis;
- for ( i = 0; i < fvar_head.axisCount; ++i )
+ for ( i = 0; i < fvar_head.axisCount; i++ )
{
GX_FVar_Axis axis_rec;
@@ -742,22 +868,30 @@
if ( FT_STREAM_READ_FIELDS( fvaraxis_fields, &axis_rec ) )
goto Exit;
a->tag = axis_rec.axisTag;
- a->minimum = axis_rec.minValue; /* A Fixed */
- a->def = axis_rec.defaultValue; /* A Fixed */
- a->maximum = axis_rec.maxValue; /* A Fixed */
+ a->minimum = axis_rec.minValue;
+ a->def = axis_rec.defaultValue;
+ a->maximum = axis_rec.maxValue;
a->strid = axis_rec.nameID;
a->name[0] = (FT_String)( a->tag >> 24 );
a->name[1] = (FT_String)( ( a->tag >> 16 ) & 0xFF );
a->name[2] = (FT_String)( ( a->tag >> 8 ) & 0xFF );
a->name[3] = (FT_String)( ( a->tag ) & 0xFF );
- a->name[4] = 0;
+ a->name[4] = '\0';
- ++a;
+ FT_TRACE5(( " \"%s\": minimum=%.4f, default=%.4f, maximum=%.4f\n",
+ a->name,
+ a->minimum / 65536.0,
+ a->def / 65536.0,
+ a->maximum / 65536.0 ));
+
+ a++;
}
+ FT_TRACE5(( "\n" ));
+
ns = mmvar->namedstyle;
- for ( i = 0; i < fvar_head.instanceCount; ++i, ++ns )
+ for ( i = 0; i < fvar_head.instanceCount; i++, ns++ )
{
if ( FT_FRAME_ENTER( 4L + 4L * fvar_head.axisCount ) )
goto Exit;
@@ -765,13 +899,15 @@
ns->strid = FT_GET_USHORT();
(void) /* flags = */ FT_GET_USHORT();
- for ( j = 0; j < fvar_head.axisCount; ++j )
- ns->coords[j] = FT_GET_ULONG(); /* A Fixed */
+ for ( j = 0; j < fvar_head.axisCount; j++ )
+ ns->coords[j] = FT_GET_LONG();
FT_FRAME_EXIT();
}
}
+ /* fill the output array if requested */
+
if ( master != NULL )
{
FT_UInt n;
@@ -782,36 +918,36 @@
FT_MEM_COPY( mmvar, face->blend->mmvar, face->blend->mmvar_len );
mmvar->axis =
- (FT_Var_Axis*)&(mmvar[1]);
+ (FT_Var_Axis*)&( mmvar[1] );
mmvar->namedstyle =
- (FT_Var_Named_Style*)&(mmvar->axis[mmvar->num_axis]);
+ (FT_Var_Named_Style*)&( mmvar->axis[mmvar->num_axis] );
next_coords =
- (FT_Fixed*)&(mmvar->namedstyle[mmvar->num_namedstyles]);
+ (FT_Fixed*)&( mmvar->namedstyle[mmvar->num_namedstyles] );
- for ( n = 0; n < mmvar->num_namedstyles; ++n )
+ for ( n = 0; n < mmvar->num_namedstyles; n++ )
{
mmvar->namedstyle[n].coords = next_coords;
next_coords += mmvar->num_axis;
}
- a = mmvar->axis;
+ a = mmvar->axis;
next_name = (FT_String*)next_coords;
- for ( n = 0; n < mmvar->num_axis; ++n )
+ for ( n = 0; n < mmvar->num_axis; n++ )
{
a->name = next_name;
/* standard PostScript names for some standard apple tags */
if ( a->tag == TTAG_wght )
- a->name = (char *)"Weight";
+ a->name = (char*)"Weight";
else if ( a->tag == TTAG_wdth )
- a->name = (char *)"Width";
+ a->name = (char*)"Width";
else if ( a->tag == TTAG_opsz )
- a->name = (char *)"OpticalSize";
+ a->name = (char*)"OpticalSize";
else if ( a->tag == TTAG_slnt )
- a->name = (char *)"Slant";
+ a->name = (char*)"Slant";
next_name += 5;
- ++a;
+ a++;
}
*master = mmvar;
@@ -837,9 +973,12 @@
/* Initialize the blend structure with `gvar' data. */
/* */
/* <Input> */
- /* num_coords :: Must be the axis count of the font. */
+ /* num_coords :: The number of available coordinates. If it is */
+ /* larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use the default value (0) for the remaining axes. */
/* */
- /* coords :: An array of num_coords, each between [-1,1]. */
+ /* coords :: An array of `num_coords', each between [-1,1]. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
@@ -868,33 +1007,44 @@
if ( face->blend == NULL )
{
- if ( (error = TT_Get_MM_Var( face, NULL)) != 0 )
+ if ( ( error = TT_Get_MM_Var( face, NULL ) ) != 0 )
goto Exit;
}
blend = face->blend;
mmvar = blend->mmvar;
- if ( num_coords != mmvar->num_axis )
+ if ( num_coords > mmvar->num_axis )
{
- error = FT_THROW( Invalid_Argument );
- goto Exit;
+ FT_TRACE2(( "TT_Set_MM_Blend: only using first %d of %d coordinates\n",
+ mmvar->num_axis, num_coords ));
+ num_coords = mmvar->num_axis;
}
- for ( i = 0; i < num_coords; ++i )
+ FT_TRACE5(( "normalized design coordinates:\n" ));
+
+ for ( i = 0; i < num_coords; i++ )
+ {
+ FT_TRACE5(( " %.4f\n", coords[i] / 65536.0 ));
if ( coords[i] < -0x00010000L || coords[i] > 0x00010000L )
{
+ FT_TRACE1(( "TT_Set_MM_Blend: normalized design coordinate %.4f\n"
+ " is out of range [-1;1]\n",
+ coords[i] / 65536.0 ));
error = FT_THROW( Invalid_Argument );
goto Exit;
}
+ }
+
+ FT_TRACE5(( "\n" ));
if ( blend->glyphoffsets == NULL )
- if ( (error = ft_var_load_gvar( face )) != 0 )
+ if ( ( error = ft_var_load_gvar( face ) ) != 0 )
goto Exit;
if ( blend->normalizedcoords == NULL )
{
- if ( FT_NEW_ARRAY( blend->normalizedcoords, num_coords ) )
+ if ( FT_NEW_ARRAY( blend->normalizedcoords, mmvar->num_axis ) )
goto Exit;
manageCvt = mcvt_modify;
@@ -906,7 +1056,8 @@
else
{
manageCvt = mcvt_retain;
- for ( i = 0; i < num_coords; ++i )
+
+ for ( i = 0; i < num_coords; i++ )
{
if ( blend->normalizedcoords[i] != coords[i] )
{
@@ -915,13 +1066,22 @@
}
}
+ for ( ; i < mmvar->num_axis; i++ )
+ {
+ if ( blend->normalizedcoords[i] != 0 )
+ {
+ manageCvt = mcvt_load;
+ break;
+ }
+ }
+
/* If we don't change the blend coords then we don't need to do */
/* anything to the cvt table. It will be correct. Otherwise we */
/* no longer have the original cvt (it was modified when we set */
/* the blend last time), so we must reload and then modify it. */
}
- blend->num_axis = num_coords;
+ blend->num_axis = mmvar->num_axis;
FT_MEM_COPY( blend->normalizedcoords,
coords,
num_coords * sizeof ( FT_Fixed ) );
@@ -973,7 +1133,10 @@
/* Initialize the blend struct with `gvar' data. */
/* */
/* <Input> */
- /* num_coords :: This must be the axis count of the font. */
+ /* num_coords :: The number of available coordinates. If it is */
+ /* larger than the number of axes, ignore the excess */
+ /* values. If it is smaller than the number of axes, */
+ /* use the default values for the remaining axes. */
/* */
/* coords :: A coordinate array with `num_coords' elements. */
/* */
@@ -997,17 +1160,19 @@
if ( face->blend == NULL )
{
- if ( (error = TT_Get_MM_Var( face, NULL )) != 0 )
+ if ( ( error = TT_Get_MM_Var( face, NULL ) ) != 0 )
goto Exit;
}
blend = face->blend;
mmvar = blend->mmvar;
- if ( num_coords != mmvar->num_axis )
+ if ( num_coords > mmvar->num_axis )
{
- error = FT_THROW( Invalid_Argument );
- goto Exit;
+ FT_TRACE2(( "TT_Set_Var_Design:"
+ " only using first %d of %d coordinates\n",
+ mmvar->num_axis, num_coords ));
+ num_coords = mmvar->num_axis;
}
/* Axis normalization is a two stage process. First we normalize */
@@ -1017,32 +1182,52 @@
if ( FT_NEW_ARRAY( normalized, mmvar->num_axis ) )
goto Exit;
+ FT_TRACE5(( "design coordinates:\n" ));
+
a = mmvar->axis;
- for ( i = 0; i < mmvar->num_axis; ++i, ++a )
+ for ( i = 0; i < num_coords; i++, a++ )
{
+ FT_TRACE5(( " %.4f\n", coords[i] / 65536.0 ));
if ( coords[i] > a->maximum || coords[i] < a->minimum )
{
+ FT_TRACE1(( "TT_Set_Var_Design: normalized design coordinate %.4f\n"
+ " is out of range [%.4f;%.4f]\n",
+ coords[i] / 65536.0,
+ a->minimum / 65536.0,
+ a->maximum / 65536.0 ));
error = FT_THROW( Invalid_Argument );
goto Exit;
}
if ( coords[i] < a->def )
- normalized[i] = -FT_DivFix( coords[i] - a->def, a->minimum - a->def );
+ normalized[i] = -FT_DivFix( coords[i] - a->def,
+ a->minimum - a->def );
else if ( a->maximum == a->def )
normalized[i] = 0;
else
- normalized[i] = FT_DivFix( coords[i] - a->def, a->maximum - a->def );
+ normalized[i] = FT_DivFix( coords[i] - a->def,
+ a->maximum - a->def );
}
+ FT_TRACE5(( "\n" ));
+
+ for ( ; i < mmvar->num_axis; i++ )
+ normalized[i] = 0;
+
if ( !blend->avar_checked )
ft_var_load_avar( face );
if ( blend->avar_segment != NULL )
{
+ FT_TRACE5(( "normalized design coordinates"
+ " before applying `avar' data:\n" ));
+
av = blend->avar_segment;
- for ( i = 0; i < mmvar->num_axis; ++i, ++av )
+ for ( i = 0; i < mmvar->num_axis; i++, av++ )
{
- for ( j = 1; j < (FT_UInt)av->pairCount; ++j )
+ for ( j = 1; j < (FT_UInt)av->pairCount; j++ )
+ {
+ FT_TRACE5(( " %.4f\n", normalized[i] / 65536.0 ));
if ( normalized[i] < av->correspondence[j].fromCoord )
{
normalized[i] =
@@ -1054,10 +1239,11 @@
av->correspondence[j - 1].toCoord;
break;
}
+ }
}
}
- error = TT_Set_MM_Blend( face, num_coords, normalized );
+ error = TT_Set_MM_Blend( face, mmvar->num_axis, normalized );
Exit:
FT_FREE( normalized );
@@ -1120,16 +1306,16 @@
if ( blend == NULL )
{
- FT_TRACE2(( "tt_face_vary_cvt: no blend specified\n" ));
-
+ FT_TRACE2(( "\n"
+ "tt_face_vary_cvt: no blend specified\n" ));
error = FT_Err_Ok;
goto Exit;
}
if ( face->cvt == NULL )
{
- FT_TRACE2(( "tt_face_vary_cvt: no `cvt ' table\n" ));
-
+ FT_TRACE2(( "\n"
+ "tt_face_vary_cvt: no `cvt ' table\n" ));
error = FT_Err_Ok;
goto Exit;
}
@@ -1158,6 +1344,8 @@
goto FExit;
}
+ FT_TRACE2(( "loaded\n" ));
+
if ( FT_NEW_ARRAY( tuple_coords, blend->num_axis ) ||
FT_NEW_ARRAY( im_start_coords, blend->num_axis ) ||
FT_NEW_ARRAY( im_end_coords, blend->num_axis ) )
@@ -1170,13 +1358,17 @@
/* tuplecount, but John Jenkins says that shared points don't apply */
/* to `cvar', and no other flags are defined. */
- for ( i = 0; i < ( tupleCount & 0xFFF ); ++i )
+ FT_TRACE5(( "cvar: there are %d tuples:\n", tupleCount ));
+
+ for ( i = 0; i < ( tupleCount & 0xFFF ); i++ )
{
FT_UInt tupleDataSize;
FT_UInt tupleIndex;
FT_Fixed apply;
+ FT_TRACE6(( " tuple %d:\n", i ));
+
tupleDataSize = FT_GET_USHORT();
tupleIndex = FT_GET_USHORT();
@@ -1185,7 +1377,7 @@
if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
{
- for ( j = 0; j < blend->num_axis; ++j )
+ for ( j = 0; j < blend->num_axis; j++ )
tuple_coords[j] = FT_GET_SHORT() << 2; /* convert from */
/* short frac to fixed */
}
@@ -1194,7 +1386,7 @@
/* skip this tuple; it makes no sense */
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
- for ( j = 0; j < 2 * blend->num_axis; ++j )
+ for ( j = 0; j < 2 * blend->num_axis; j++ )
(void)FT_GET_SHORT();
offsetToData += tupleDataSize;
@@ -1203,9 +1395,9 @@
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
{
- for ( j = 0; j < blend->num_axis; ++j )
+ for ( j = 0; j < blend->num_axis; j++ )
im_start_coords[j] = FT_GET_SHORT() << 2;
- for ( j = 0; j < blend->num_axis; ++j )
+ for ( j = 0; j < blend->num_axis; j++ )
im_end_coords[j] = FT_GET_SHORT() << 2;
}
@@ -1233,25 +1425,74 @@
point_count == 0 ? face->cvt_size
: point_count );
if ( localpoints == NULL || deltas == NULL )
- /* failure, ignore it */;
+ ; /* failure, ignore it */
else if ( localpoints == ALL_POINTS )
{
+#ifdef FT_DEBUG_LEVEL_TRACE
+ int count = 0;
+#endif
+
+
+ FT_TRACE7(( " CVT deltas:\n" ));
+
/* this means that there are deltas for every entry in cvt */
- for ( j = 0; j < face->cvt_size; ++j )
- face->cvt[j] = (FT_Short)( face->cvt[j] +
+ for ( j = 0; j < face->cvt_size; j++ )
+ {
+ FT_Long orig_cvt = face->cvt[j];
+
+
+ face->cvt[j] = (FT_Short)( orig_cvt +
FT_MulFix( deltas[j], apply ) );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( orig_cvt != face->cvt[j] )
+ {
+ FT_TRACE7(( " %d: %d -> %d\n",
+ j, orig_cvt, face->cvt[j] ));
+ count++;
+ }
+#endif
+ }
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( !count )
+ FT_TRACE7(( " none\n" ));
+#endif
}
else
{
- for ( j = 0; j < point_count; ++j )
+#ifdef FT_DEBUG_LEVEL_TRACE
+ int count = 0;
+#endif
+
+
+ FT_TRACE7(( " CVT deltas:\n" ));
+
+ for ( j = 0; j < point_count; j++ )
{
- int pindex = localpoints[j];
+ int pindex = localpoints[j];
+ FT_Long orig_cvt = face->cvt[pindex];
+
- face->cvt[pindex] = (FT_Short)( face->cvt[pindex] +
+ face->cvt[pindex] = (FT_Short)( orig_cvt +
FT_MulFix( deltas[j], apply ) );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( orig_cvt != face->cvt[pindex] )
+ {
+ FT_TRACE7(( " %d: %d -> %d\n",
+ pindex, orig_cvt, face->cvt[pindex] ));
+ count++;
+ }
+#endif
}
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( !count )
+ FT_TRACE7(( " none\n" ));
+#endif
}
if ( localpoints != ALL_POINTS )
@@ -1263,6 +1504,8 @@
FT_Stream_SeekSet( stream, here );
}
+ FT_TRACE5(( "\n" ));
+
FExit:
FT_FRAME_EXIT();
@@ -1275,13 +1518,230 @@
}
+ /* Shift the original coordinates of all points between indices `p1' */
+ /* and `p2', using the same difference as given by index `ref'. */
+
+ /* modeled after `af_iup_shift' */
+
+ static void
+ tt_delta_shift( int p1,
+ int p2,
+ int ref,
+ FT_Vector* in_points,
+ FT_Vector* out_points )
+ {
+ int p;
+ FT_Vector delta;
+
+
+ delta.x = out_points[ref].x - in_points[ref].x;
+ delta.y = out_points[ref].y - in_points[ref].y;
+
+ if ( delta.x == 0 && delta.y == 0 )
+ return;
+
+ for ( p = p1; p < ref; p++ )
+ {
+ out_points[p].x += delta.x;
+ out_points[p].y += delta.y;
+ }
+
+ for ( p = ref + 1; p <= p2; p++ )
+ {
+ out_points[p].x += delta.x;
+ out_points[p].y += delta.y;
+ }
+ }
+
+
+ /* Interpolate the original coordinates of all points with indices */
+ /* between `p1' and `p2', using `ref1' and `ref2' as the reference */
+ /* point indices. */
+
+ /* modeled after `af_iup_interp', `_iup_worker_interpolate', and */
+ /* `Ins_IUP' */
+
+ static void
+ tt_delta_interpolate( int p1,
+ int p2,
+ int ref1,
+ int ref2,
+ FT_Vector* in_points,
+ FT_Vector* out_points )
+ {
+ int p, i;
+
+ FT_Pos out, in1, in2, out1, out2, d1, d2;
+
+
+ if ( p1 > p2 )
+ return;
+
+ /* handle both horizontal and vertical coordinates */
+ for ( i = 0; i <= 1; i++ )
+ {
+ /* shift array pointers so that we can access `foo.y' as `foo.x' */
+ in_points = (FT_Vector*)( (FT_Pos*)in_points + i );
+ out_points = (FT_Vector*)( (FT_Pos*)out_points + i );
+
+ if ( in_points[ref1].x > in_points[ref2].x )
+ {
+ p = ref1;
+ ref1 = ref2;
+ ref2 = p;
+ }
+
+ in1 = in_points[ref1].x;
+ in2 = in_points[ref2].x;
+ out1 = out_points[ref1].x;
+ out2 = out_points[ref2].x;
+ d1 = out1 - in1;
+ d2 = out2 - in2;
+
+ if ( out1 == out2 || in1 == in2 )
+ {
+ for ( p = p1; p <= p2; p++ )
+ {
+ out = in_points[p].x;
+
+ if ( out <= in1 )
+ out += d1;
+ else if ( out >= in2 )
+ out += d2;
+ else
+ out = out1;
+
+ out_points[p].x = out;
+ }
+ }
+ else
+ {
+ FT_Fixed scale = FT_DivFix( out2 - out1, in2 - in1 );
+
+
+ for ( p = p1; p <= p2; p++ )
+ {
+ out = in_points[p].x;
+
+ if ( out <= in1 )
+ out += d1;
+ else if ( out >= in2 )
+ out += d2;
+ else
+ out = out1 + FT_MulFix( out - in1, scale );
+
+ out_points[p].x = out;
+ }
+ }
+ }
+ }
+
+
+ /* Interpolate points without delta values, similar to */
+ /* the `IUP' hinting instruction. */
+
+ /* modeled after `Ins_IUP */
+
+ static void
+ tt_handle_deltas( FT_Outline* outline,
+ FT_Vector* in_points,
+ FT_Bool* has_delta )
+ {
+ FT_Vector* out_points;
+
+ FT_UInt first_point;
+ FT_UInt end_point;
+
+ FT_UInt first_delta;
+ FT_UInt cur_delta;
+
+ FT_UInt point;
+ FT_Short contour;
+
+
+ /* ignore empty outlines */
+ if ( !outline->n_contours )
+ return;
+
+ out_points = outline->points;
+
+ contour = 0;
+ point = 0;
+
+ do
+ {
+ end_point = outline->contours[contour];
+ first_point = point;
+
+ /* search first point that has a delta */
+ while ( point <= end_point && !has_delta[point] )
+ point++;
+
+ if ( point <= end_point )
+ {
+ first_delta = point;
+ cur_delta = point;
+
+ point++;
+
+ while ( point <= end_point )
+ {
+ /* search next point that has a delta */
+ /* and interpolate intermediate points */
+ if ( has_delta[point] )
+ {
+ tt_delta_interpolate( cur_delta + 1,
+ point - 1,
+ cur_delta,
+ point,
+ in_points,
+ out_points );
+ cur_delta = point;
+ }
+
+ point++;
+ }
+
+ /* shift contour if we only have a single delta */
+ if ( cur_delta == first_delta )
+ tt_delta_shift( first_point,
+ end_point,
+ cur_delta,
+ in_points,
+ out_points );
+ else
+ {
+ /* otherwise handle remaining points */
+ /* at the end and beginning of the contour */
+ tt_delta_interpolate( cur_delta + 1,
+ end_point,
+ cur_delta,
+ first_delta,
+ in_points,
+ out_points );
+
+ if ( first_delta > 0 )
+ tt_delta_interpolate( first_point,
+ first_delta - 1,
+ cur_delta,
+ first_delta,
+ in_points,
+ out_points );
+ }
+ }
+ contour++;
+
+ } while ( contour < outline->n_contours );
+ }
+
+
/*************************************************************************/
/* */
/* <Function> */
- /* TT_Vary_Get_Glyph_Deltas */
+ /* TT_Vary_Apply_Glyph_Deltas */
/* */
/* <Description> */
- /* Load the appropriate deltas for the current glyph. */
+ /* Apply the appropriate deltas to the current glyph. */
/* */
/* <Input> */
/* face :: A handle to the target face object. */
@@ -1291,22 +1751,24 @@
/* n_points :: The number of the points in the glyph, including */
/* phantom points. */
/* */
- /* <Output> */
- /* deltas :: The array of points to change. */
+ /* <InOut> */
+ /* outline :: The outline to change. */
/* */
/* <Return> */
/* FreeType error code. 0 means success. */
/* */
FT_LOCAL_DEF( FT_Error )
- TT_Vary_Get_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
- FT_Vector* *deltas,
- FT_UInt n_points )
+ TT_Vary_Apply_Glyph_Deltas( TT_Face face,
+ FT_UInt glyph_index,
+ FT_Outline* outline,
+ FT_UInt n_points )
{
FT_Stream stream = face->root.stream;
FT_Memory memory = stream->memory;
GX_Blend blend = face->blend;
- FT_Vector* delta_xy = NULL;
+
+ FT_Vector* points_org = NULL;
+ FT_Bool* has_delta = NULL;
FT_Error error;
FT_ULong glyph_start;
@@ -1327,15 +1789,18 @@
if ( !face->doblend || blend == NULL )
return FT_THROW( Invalid_Argument );
- /* to be freed by the caller */
- if ( FT_NEW_ARRAY( delta_xy, n_points ) )
- goto Exit;
- *deltas = delta_xy;
-
if ( glyph_index >= blend->gv_glyphcnt ||
blend->glyphoffsets[glyph_index] ==
blend->glyphoffsets[glyph_index + 1] )
- return FT_Err_Ok; /* no variation data for this glyph */
+ {
+ FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
+ " no variation data for this glyph\n" ));
+ return FT_Err_Ok;
+ }
+
+ if ( FT_NEW_ARRAY( points_org, n_points ) ||
+ FT_NEW_ARRAY( has_delta, n_points ) )
+ goto Fail1;
if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) ||
FT_FRAME_ENTER( blend->glyphoffsets[glyph_index + 1] -
@@ -1367,40 +1832,42 @@
FT_Stream_SeekSet( stream, here );
}
- for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); ++i )
+ FT_TRACE5(( "gvar: there are %d tuples:\n", tupleCount ));
+
+ for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ )
{
FT_UInt tupleDataSize;
FT_UInt tupleIndex;
FT_Fixed apply;
+ FT_TRACE6(( " tuple %d:\n", i ));
+
tupleDataSize = FT_GET_USHORT();
tupleIndex = FT_GET_USHORT();
if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
{
- for ( j = 0; j < blend->num_axis; ++j )
+ for ( j = 0; j < blend->num_axis; j++ )
tuple_coords[j] = FT_GET_SHORT() << 2; /* convert from */
/* short frac to fixed */
}
else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
{
error = FT_THROW( Invalid_Table );
- goto Fail3;
+ goto Fail2;
}
else
- {
FT_MEM_COPY(
tuple_coords,
- &blend->tuplecoords[(tupleIndex & 0xFFF) * blend->num_axis],
+ &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
blend->num_axis * sizeof ( FT_Fixed ) );
- }
if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
{
- for ( j = 0; j < blend->num_axis; ++j )
+ for ( j = 0; j < blend->num_axis; j++ )
im_start_coords[j] = FT_GET_SHORT() << 2;
- for ( j = 0; j < blend->num_axis; ++j )
+ for ( j = 0; j < blend->num_axis; j++ )
im_end_coords[j] = FT_GET_SHORT() << 2;
}
@@ -1443,24 +1910,101 @@
else if ( points == ALL_POINTS )
{
+#ifdef FT_DEBUG_LEVEL_TRACE
+ int count = 0;
+#endif
+
+
+ FT_TRACE7(( " point deltas:\n" ));
+
/* this means that there are deltas for every point in the glyph */
- for ( j = 0; j < n_points; ++j )
+ for ( j = 0; j < n_points; j++ )
{
- delta_xy[j].x += FT_MulFix( deltas_x[j], apply );
- delta_xy[j].y += FT_MulFix( deltas_y[j], apply );
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_Vector point_org = outline->points[j];
+#endif
+
+
+ outline->points[j].x += FT_MulFix( deltas_x[j], apply );
+ outline->points[j].y += FT_MulFix( deltas_y[j], apply );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( ( point_org.x != outline->points[j].x ) ||
+ ( point_org.y != outline->points[j].y ) )
+ {
+ FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
+ j,
+ point_org.x,
+ point_org.y,
+ outline->points[j].x,
+ outline->points[j].y ));
+ count++;
+ }
+#endif
}
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ if ( !count )
+ FT_TRACE7(( " none\n" ));
+#endif
}
else
{
- for ( j = 0; j < point_count; ++j )
+#ifdef FT_DEBUG_LEVEL_TRACE
+ int count = 0;
+#endif
+
+
+ /* we have to interpolate the missing deltas similar to the */
+ /* IUP bytecode instruction */
+ for ( j = 0; j < n_points; j++ )
+ {
+ points_org[j] = outline->points[j];
+ has_delta[j] = FALSE;
+ }
+
+ for ( j = 0; j < point_count; j++ )
{
- if ( localpoints[j] >= n_points )
+ FT_UShort idx = localpoints[j];
+
+
+ if ( idx >= n_points )
continue;
- delta_xy[localpoints[j]].x += FT_MulFix( deltas_x[j], apply );
- delta_xy[localpoints[j]].y += FT_MulFix( deltas_y[j], apply );
+ has_delta[idx] = TRUE;
+
+ outline->points[idx].x += FT_MulFix( deltas_x[j], apply );
+ outline->points[idx].y += FT_MulFix( deltas_y[j], apply );
}
+
+ /* no need to handle phantom points here, */
+ /* since solitary points can't be interpolated */
+ tt_handle_deltas( outline,
+ points_org,
+ has_delta );
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+ FT_TRACE7(( " point deltas:\n" ));
+
+ for ( j = 0; j < n_points; j++)
+ {
+ if ( ( points_org[j].x != outline->points[j].x ) ||
+ ( points_org[j].y != outline->points[j].y ) )
+ {
+ FT_TRACE7(( " %d: (%d, %d) -> (%d, %d)\n",
+ j,
+ points_org[j].x,
+ points_org[j].y,
+ outline->points[j].x,
+ outline->points[j].y ));
+ count++;
+ }
+ }
+
+ if ( !count )
+ FT_TRACE7(( " none\n" ));
+#endif
}
if ( localpoints != ALL_POINTS )
@@ -1473,22 +2017,19 @@
FT_Stream_SeekSet( stream, here );
}
- Fail3:
+ FT_TRACE5(( "\n" ));
+
+ Fail2:
FT_FREE( tuple_coords );
FT_FREE( im_start_coords );
FT_FREE( im_end_coords );
- Fail2:
FT_FRAME_EXIT();
Fail1:
- if ( error )
- {
- FT_FREE( delta_xy );
- *deltas = NULL;
- }
+ FT_FREE( points_org );
+ FT_FREE( has_delta );
- Exit:
return error;
}
@@ -1499,7 +2040,7 @@
/* tt_done_blend */
/* */
/* <Description> */
- /* Frees the blend internal data structure. */
+ /* Free the blend internal data structure. */
/* */
FT_LOCAL_DEF( void )
tt_done_blend( FT_Memory memory,
@@ -1515,7 +2056,7 @@
if ( blend->avar_segment != NULL )
{
- for ( i = 0; i < blend->num_axis; ++i )
+ for ( i = 0; i < blend->num_axis; i++ )
FT_FREE( blend->avar_segment[i].correspondence );
FT_FREE( blend->avar_segment );
}
diff --git a/freetype/src/truetype/ttgxvar.h b/freetype/src/truetype/ttgxvar.h
index 82dfc4431..060d4d60e 100644
--- a/freetype/src/truetype/ttgxvar.h
+++ b/freetype/src/truetype/ttgxvar.h
@@ -4,7 +4,7 @@
/* */
/* TrueType GX Font Variation loader (specification) */
/* */
-/* Copyright 2004 by */
+/* Copyright 2004-2015 by */
/* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -162,10 +162,10 @@ FT_BEGIN_HEADER
FT_LOCAL( FT_Error )
- TT_Vary_Get_Glyph_Deltas( TT_Face face,
- FT_UInt glyph_index,
- FT_Vector* *deltas,
- FT_UInt n_points );
+ TT_Vary_Apply_Glyph_Deltas( TT_Face face,
+ FT_UInt glyph_index,
+ FT_Outline* outline,
+ FT_UInt n_points );
FT_LOCAL( void )
diff --git a/freetype/src/truetype/ttinterp.c b/freetype/src/truetype/ttinterp.c
index 24457f4da..cd0ec6483 100644
--- a/freetype/src/truetype/ttinterp.c
+++ b/freetype/src/truetype/ttinterp.c
@@ -4,8 +4,8 @@
/* */
/* TrueType bytecode interpreter (body). */
/* */
-/* Copyright 1996-2014 */
-/* by David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* Copyright 1996-2015 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -44,6 +44,7 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_ttinterp
+
/*************************************************************************/
/* */
/* In order to detect infinite loops in the code, we set up a counter */
@@ -53,174 +54,30 @@
#define MAX_RUNNABLE_OPCODES 1000000L
- /*************************************************************************/
- /* */
- /* There are two kinds of implementations: */
- /* */
- /* a. static implementation */
- /* */
- /* The current execution context is a static variable, which fields */
- /* are accessed directly by the interpreter during execution. The */
- /* context is named `cur'. */
- /* */
- /* This version is non-reentrant, of course. */
- /* */
- /* b. indirect implementation */
- /* */
- /* The current execution context is passed to _each_ function as its */
- /* first argument, and each field is thus accessed indirectly. */
- /* */
- /* This version is fully re-entrant. */
- /* */
- /* The idea is that an indirect implementation may be slower to execute */
- /* on low-end processors that are used in some systems (like 386s or */
- /* even 486s). */
- /* */
- /* As a consequence, the indirect implementation is now the default, as */
- /* its performance costs can be considered negligible in our context. */
- /* Note, however, that we kept the same source with macros because: */
- /* */
- /* - The code is kept very close in design to the Pascal code used for */
- /* development. */
- /* */
- /* - It's much more readable that way! */
- /* */
- /* - It's still open to experimentation and tuning. */
- /* */
- /*************************************************************************/
-
-
-#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
-
-#define CUR (*exc) /* see ttobjs.h */
-
- /*************************************************************************/
- /* */
- /* This macro is used whenever `exec' is unused in a function, to avoid */
- /* stupid warnings from pedantic compilers. */
- /* */
-#define FT_UNUSED_EXEC FT_UNUSED( exc )
-
-#else /* static implementation */
-
-#define CUR cur
-
-#define FT_UNUSED_EXEC int __dummy = __dummy
-
- static
- TT_ExecContextRec cur; /* static exec. context variable */
-
- /* apparently, we have a _lot_ of direct indexing when accessing */
- /* the static `cur', which makes the code bigger (due to all the */
- /* four bytes addresses). */
-
-#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
-
-
- /*************************************************************************/
- /* */
- /* The instruction argument stack. */
- /* */
-#define INS_ARG EXEC_OP_ FT_Long* args /* see ttobjs.h for EXEC_OP_ */
-
-
- /*************************************************************************/
- /* */
- /* This macro is used whenever `args' is unused in a function, to avoid */
- /* stupid warnings from pedantic compilers. */
- /* */
-#define FT_UNUSED_ARG FT_UNUSED_EXEC; FT_UNUSED( args )
-
-
-#define SUBPIXEL_HINTING \
- ( ((TT_Driver)FT_FACE_DRIVER( CUR.face ))->interpreter_version == \
+#define SUBPIXEL_HINTING \
+ ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
TT_INTERPRETER_VERSION_38 )
- /*************************************************************************/
- /* */
- /* The following macros hide the use of EXEC_ARG and EXEC_ARG_ to */
- /* increase readability of the code. */
- /* */
- /*************************************************************************/
-
-
-#define SKIP_Code() \
- SkipCode( EXEC_ARG )
-
-#define GET_ShortIns() \
- GetShortIns( EXEC_ARG )
-
-#define NORMalize( x, y, v ) \
- Normalize( EXEC_ARG_ x, y, v )
-
-#define SET_SuperRound( scale, flags ) \
- SetSuperRound( EXEC_ARG_ scale, flags )
-
-#define ROUND_None( d, c ) \
- Round_None( EXEC_ARG_ d, c )
-
-#define INS_Goto_CodeRange( range, ip ) \
- Ins_Goto_CodeRange( EXEC_ARG_ range, ip )
-
-#define CUR_Func_move( z, p, d ) \
- CUR.func_move( EXEC_ARG_ z, p, d )
-
-#define CUR_Func_move_orig( z, p, d ) \
- CUR.func_move_orig( EXEC_ARG_ z, p, d )
-
-#define CUR_Func_round( d, c ) \
- CUR.func_round( EXEC_ARG_ d, c )
-
-#define CUR_Func_cur_ppem() \
- CUR.func_cur_ppem( EXEC_ARG )
-
-#define CUR_Func_read_cvt( index ) \
- CUR.func_read_cvt( EXEC_ARG_ index )
-
-#define CUR_Func_write_cvt( index, val ) \
- CUR.func_write_cvt( EXEC_ARG_ index, val )
-
-#define CUR_Func_move_cvt( index, val ) \
- CUR.func_move_cvt( EXEC_ARG_ index, val )
-
-#define CURRENT_Ratio() \
- Current_Ratio( EXEC_ARG )
-
-#define INS_SxVTL( a, b, c, d ) \
- Ins_SxVTL( EXEC_ARG_ a, b, c, d )
+#define PROJECT( v1, v2 ) \
+ exc->func_project( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y )
-#define COMPUTE_Funcs() \
- Compute_Funcs( EXEC_ARG )
+#define DUALPROJ( v1, v2 ) \
+ exc->func_dualproj( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y )
-#define COMPUTE_Round( a ) \
- Compute_Round( EXEC_ARG_ a )
+#define FAST_PROJECT( v ) \
+ exc->func_project( exc, (v)->x, (v)->y )
-#define COMPUTE_Point_Displacement( a, b, c, d ) \
- Compute_Point_Displacement( EXEC_ARG_ a, b, c, d )
-
-#define MOVE_Zp2_Point( a, b, c, t ) \
- Move_Zp2_Point( EXEC_ARG_ a, b, c, t )
-
-
-#define CUR_Func_project( v1, v2 ) \
- CUR.func_project( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y )
-
-#define CUR_Func_dualproj( v1, v2 ) \
- CUR.func_dualproj( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y )
-
-#define CUR_fast_project( v ) \
- CUR.func_project( EXEC_ARG_ (v)->x, (v)->y )
-
-#define CUR_fast_dualproj( v ) \
- CUR.func_dualproj( EXEC_ARG_ (v)->x, (v)->y )
+#define FAST_DUALPROJ( v ) \
+ exc->func_dualproj( exc, (v)->x, (v)->y )
/*************************************************************************/
/* */
/* Instruction dispatch function, as used by the interpreter. */
/* */
- typedef void (*TInstruction_Function)( INS_ARG );
+ typedef void (*TInstruction_Function)( TT_ExecContext exc,
+ FT_Long* args );
/*************************************************************************/
@@ -230,12 +87,12 @@
#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
+
/*************************************************************************/
/* */
/* This macro computes (a*2^14)/b and complements TT_MulFix14. */
/* */
-#define TT_DivFix14( a, b ) \
- FT_DivFix( a, (b) << 2 )
+#define TT_DivFix14( a, b ) FT_DivFix( a, (b) << 2 )
#undef SUCCESS
@@ -245,16 +102,20 @@
#define FAILURE 1
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define GUESS_VECTOR( V ) \
- if ( CUR.face->unpatented_hinting ) \
- { \
- CUR.GS.V.x = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0x4000 : 0 ); \
- CUR.GS.V.y = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0 : 0x4000 ); \
- }
+#define GUESS_VECTOR( V ) \
+ do \
+ { \
+ if ( exc->face->unpatented_hinting ) \
+ { \
+ exc->GS.V.x = (FT_F2Dot14)( exc->GS.both_x_axis ? 0x4000 : 0 ); \
+ exc->GS.V.y = (FT_F2Dot14)( exc->GS.both_x_axis ? 0 : 0x4000 ); \
+ } \
+ } while (0)
#else
-#define GUESS_VECTOR( V )
+#define GUESS_VECTOR( V ) do { } while (0)
#endif
+
/*************************************************************************/
/* */
/* CODERANGE FUNCTIONS */
@@ -297,7 +158,7 @@
/* which will return to the first byte *after* the code */
/* range, we test for IP <= Size instead of IP < Size. */
/* */
- FT_ASSERT( (FT_ULong)IP <= coderange->size );
+ FT_ASSERT( IP <= coderange->size );
exec->code = coderange->base;
exec->codeSize = coderange->size;
@@ -498,7 +359,7 @@
FT_LOCAL_DEF( FT_Error )
Update_Max( FT_Memory memory,
FT_ULong* size,
- FT_Long multiplier,
+ FT_ULong multiplier,
void* _pbuff,
FT_ULong new_max )
{
@@ -591,13 +452,13 @@
/* XXX: We reserve a little more elements on the stack to deal safely */
/* with broken fonts like arialbs, courbs, timesbs, etc. */
- tmp = exec->stackSize;
+ tmp = (FT_ULong)exec->stackSize;
error = Update_Max( exec->memory,
&tmp,
sizeof ( FT_F26Dot6 ),
(void*)&exec->stack,
maxp->maxStackElements + 32 );
- exec->stackSize = (FT_UInt)tmp;
+ exec->stackSize = (FT_Long)tmp;
if ( error )
return error;
@@ -683,12 +544,8 @@
/* <Return> */
/* TrueType error code. 0 means success. */
/* */
- /* <Note> */
- /* Only the glyph loader and debugger should call this function. */
- /* */
FT_LOCAL_DEF( FT_Error )
- TT_Run_Context( TT_ExecContext exec,
- FT_Bool debug )
+ TT_Run_Context( TT_ExecContext exec )
{
TT_Goto_CodeRange( exec, tt_coderange_glyph, 0 );
@@ -718,16 +575,7 @@
exec->top = 0;
exec->callTop = 0;
-#if 1
- FT_UNUSED( debug );
-
return exec->face->interpreter( exec );
-#else
- if ( !debug )
- return TT_RunIns( exec );
- else
- return FT_Err_Ok;
-#endif
}
@@ -761,6 +609,9 @@
TT_New_Context( TT_Driver driver )
{
FT_Memory memory;
+ FT_Error error;
+
+ TT_ExecContext exec = NULL;
if ( !driver )
@@ -768,26 +619,16 @@
memory = driver->root.root.memory;
- if ( !driver->context )
- {
- FT_Error error;
- TT_ExecContext exec;
-
-
- /* allocate object */
- if ( FT_NEW( exec ) )
- goto Fail;
-
- /* initialize it; in case of error this deallocates `exec' too */
- error = Init_Context( exec, memory );
- if ( error )
- goto Fail;
+ /* allocate object */
+ if ( FT_NEW( exec ) )
+ goto Fail;
- /* store it into the driver */
- driver->context = exec;
- }
+ /* initialize it; in case of error this deallocates `exec' too */
+ error = Init_Context( exec, memory );
+ if ( error )
+ goto Fail;
- return driver->context;
+ return exec;
Fail:
return NULL;
@@ -834,8 +675,8 @@
/* SFvTL + */ PACK( 2, 0 ),
/* SPvFS */ PACK( 2, 0 ),
/* SFvFS */ PACK( 2, 0 ),
- /* GPV */ PACK( 0, 2 ),
- /* GFV */ PACK( 0, 2 ),
+ /* GPv */ PACK( 0, 2 ),
+ /* GFv */ PACK( 0, 2 ),
/* SFvTPv */ PACK( 0, 0 ),
/* ISECT */ PACK( 5, 0 ),
@@ -964,8 +805,8 @@
/* INS_$83 */ PACK( 0, 0 ),
/* INS_$84 */ PACK( 0, 0 ),
/* ScanCTRL */ PACK( 1, 0 ),
- /* SDPVTL[0] */ PACK( 2, 0 ),
- /* SDPVTL[1] */ PACK( 2, 0 ),
+ /* SDPvTL[0] */ PACK( 2, 0 ),
+ /* SDPvTL[1] */ PACK( 2, 0 ),
/* GetINFO */ PACK( 1, 1 ),
/* IDEF */ PACK( 1, 0 ),
/* ROLL */ PACK( 3, 3 ),
@@ -1098,280 +939,284 @@
#ifdef FT_DEBUG_LEVEL_TRACE
+ /* the first hex digit gives the length of the opcode name; the space */
+ /* after the digit is here just to increase readability of the source */
+ /* code */
+
static
const char* const opcode_name[256] =
{
- "SVTCA y",
- "SVTCA x",
- "SPvTCA y",
- "SPvTCA x",
- "SFvTCA y",
- "SFvTCA x",
- "SPvTL ||",
- "SPvTL +",
- "SFvTL ||",
- "SFvTL +",
- "SPvFS",
- "SFvFS",
- "GPV",
- "GFV",
- "SFvTPv",
- "ISECT",
-
- "SRP0",
- "SRP1",
- "SRP2",
- "SZP0",
- "SZP1",
- "SZP2",
- "SZPS",
- "SLOOP",
- "RTG",
- "RTHG",
- "SMD",
- "ELSE",
- "JMPR",
- "SCvTCi",
- "SSwCi",
- "SSW",
-
- "DUP",
- "POP",
- "CLEAR",
- "SWAP",
- "DEPTH",
- "CINDEX",
- "MINDEX",
- "AlignPTS",
- "INS_$28",
- "UTP",
- "LOOPCALL",
- "CALL",
- "FDEF",
- "ENDF",
- "MDAP[0]",
- "MDAP[1]",
-
- "IUP[0]",
- "IUP[1]",
- "SHP[0]",
- "SHP[1]",
- "SHC[0]",
- "SHC[1]",
- "SHZ[0]",
- "SHZ[1]",
- "SHPIX",
- "IP",
- "MSIRP[0]",
- "MSIRP[1]",
- "AlignRP",
- "RTDG",
- "MIAP[0]",
- "MIAP[1]",
-
- "NPushB",
- "NPushW",
- "WS",
- "RS",
- "WCvtP",
- "RCvt",
- "GC[0]",
- "GC[1]",
- "SCFS",
- "MD[0]",
- "MD[1]",
- "MPPEM",
- "MPS",
- "FlipON",
- "FlipOFF",
- "DEBUG",
-
- "LT",
- "LTEQ",
- "GT",
- "GTEQ",
- "EQ",
- "NEQ",
- "ODD",
- "EVEN",
- "IF",
- "EIF",
- "AND",
- "OR",
- "NOT",
- "DeltaP1",
- "SDB",
- "SDS",
-
- "ADD",
- "SUB",
- "DIV",
- "MUL",
- "ABS",
- "NEG",
- "FLOOR",
- "CEILING",
- "ROUND[0]",
- "ROUND[1]",
- "ROUND[2]",
- "ROUND[3]",
- "NROUND[0]",
- "NROUND[1]",
- "NROUND[2]",
- "NROUND[3]",
-
- "WCvtF",
- "DeltaP2",
- "DeltaP3",
- "DeltaCn[0]",
- "DeltaCn[1]",
- "DeltaCn[2]",
- "SROUND",
- "S45Round",
- "JROT",
- "JROF",
- "ROFF",
- "INS_$7B",
- "RUTG",
- "RDTG",
- "SANGW",
- "AA",
-
- "FlipPT",
- "FlipRgON",
- "FlipRgOFF",
- "INS_$83",
- "INS_$84",
- "ScanCTRL",
- "SDVPTL[0]",
- "SDVPTL[1]",
- "GetINFO",
- "IDEF",
- "ROLL",
- "MAX",
- "MIN",
- "ScanTYPE",
- "InstCTRL",
- "INS_$8F",
-
- "INS_$90",
- "INS_$91",
- "INS_$92",
- "INS_$93",
- "INS_$94",
- "INS_$95",
- "INS_$96",
- "INS_$97",
- "INS_$98",
- "INS_$99",
- "INS_$9A",
- "INS_$9B",
- "INS_$9C",
- "INS_$9D",
- "INS_$9E",
- "INS_$9F",
-
- "INS_$A0",
- "INS_$A1",
- "INS_$A2",
- "INS_$A3",
- "INS_$A4",
- "INS_$A5",
- "INS_$A6",
- "INS_$A7",
- "INS_$A8",
- "INS_$A9",
- "INS_$AA",
- "INS_$AB",
- "INS_$AC",
- "INS_$AD",
- "INS_$AE",
- "INS_$AF",
-
- "PushB[0]",
- "PushB[1]",
- "PushB[2]",
- "PushB[3]",
- "PushB[4]",
- "PushB[5]",
- "PushB[6]",
- "PushB[7]",
- "PushW[0]",
- "PushW[1]",
- "PushW[2]",
- "PushW[3]",
- "PushW[4]",
- "PushW[5]",
- "PushW[6]",
- "PushW[7]",
-
- "MDRP[00]",
- "MDRP[01]",
- "MDRP[02]",
- "MDRP[03]",
- "MDRP[04]",
- "MDRP[05]",
- "MDRP[06]",
- "MDRP[07]",
- "MDRP[08]",
- "MDRP[09]",
- "MDRP[10]",
- "MDRP[11]",
- "MDRP[12]",
- "MDRP[13]",
- "MDRP[14]",
- "MDRP[15]",
-
- "MDRP[16]",
- "MDRP[17]",
- "MDRP[18]",
- "MDRP[19]",
- "MDRP[20]",
- "MDRP[21]",
- "MDRP[22]",
- "MDRP[23]",
- "MDRP[24]",
- "MDRP[25]",
- "MDRP[26]",
- "MDRP[27]",
- "MDRP[28]",
- "MDRP[29]",
- "MDRP[30]",
- "MDRP[31]",
-
- "MIRP[00]",
- "MIRP[01]",
- "MIRP[02]",
- "MIRP[03]",
- "MIRP[04]",
- "MIRP[05]",
- "MIRP[06]",
- "MIRP[07]",
- "MIRP[08]",
- "MIRP[09]",
- "MIRP[10]",
- "MIRP[11]",
- "MIRP[12]",
- "MIRP[13]",
- "MIRP[14]",
- "MIRP[15]",
-
- "MIRP[16]",
- "MIRP[17]",
- "MIRP[18]",
- "MIRP[19]",
- "MIRP[20]",
- "MIRP[21]",
- "MIRP[22]",
- "MIRP[23]",
- "MIRP[24]",
- "MIRP[25]",
- "MIRP[26]",
- "MIRP[27]",
- "MIRP[28]",
- "MIRP[29]",
- "MIRP[30]",
- "MIRP[31]"
+ "7 SVTCA y",
+ "7 SVTCA x",
+ "8 SPvTCA y",
+ "8 SPvTCA x",
+ "8 SFvTCA y",
+ "8 SFvTCA x",
+ "8 SPvTL ||",
+ "7 SPvTL +",
+ "8 SFvTL ||",
+ "7 SFvTL +",
+ "5 SPvFS",
+ "5 SFvFS",
+ "3 GPv",
+ "3 GFv",
+ "6 SFvTPv",
+ "5 ISECT",
+
+ "4 SRP0",
+ "4 SRP1",
+ "4 SRP2",
+ "4 SZP0",
+ "4 SZP1",
+ "4 SZP2",
+ "4 SZPS",
+ "5 SLOOP",
+ "3 RTG",
+ "4 RTHG",
+ "3 SMD",
+ "4 ELSE",
+ "4 JMPR",
+ "6 SCvTCi",
+ "5 SSwCi",
+ "3 SSW",
+
+ "3 DUP",
+ "3 POP",
+ "5 CLEAR",
+ "4 SWAP",
+ "5 DEPTH",
+ "6 CINDEX",
+ "6 MINDEX",
+ "8 AlignPTS",
+ "7 INS_$28",
+ "3 UTP",
+ "8 LOOPCALL",
+ "4 CALL",
+ "4 FDEF",
+ "4 ENDF",
+ "7 MDAP[0]",
+ "7 MDAP[1]",
+
+ "6 IUP[0]",
+ "6 IUP[1]",
+ "6 SHP[0]",
+ "6 SHP[1]",
+ "6 SHC[0]",
+ "6 SHC[1]",
+ "6 SHZ[0]",
+ "6 SHZ[1]",
+ "5 SHPIX",
+ "2 IP",
+ "8 MSIRP[0]",
+ "8 MSIRP[1]",
+ "7 AlignRP",
+ "4 RTDG",
+ "7 MIAP[0]",
+ "7 MIAP[1]",
+
+ "6 NPushB",
+ "6 NPushW",
+ "2 WS",
+ "2 RS",
+ "5 WCvtP",
+ "4 RCvt",
+ "5 GC[0]",
+ "5 GC[1]",
+ "4 SCFS",
+ "5 MD[0]",
+ "5 MD[1]",
+ "5 MPPEM",
+ "3 MPS",
+ "6 FlipON",
+ "7 FlipOFF",
+ "5 DEBUG",
+
+ "2 LT",
+ "4 LTEQ",
+ "2 GT",
+ "4 GTEQ",
+ "2 EQ",
+ "3 NEQ",
+ "3 ODD",
+ "4 EVEN",
+ "2 IF",
+ "3 EIF",
+ "3 AND",
+ "2 OR",
+ "3 NOT",
+ "7 DeltaP1",
+ "3 SDB",
+ "3 SDS",
+
+ "3 ADD",
+ "3 SUB",
+ "3 DIV",
+ "3 MUL",
+ "3 ABS",
+ "3 NEG",
+ "5 FLOOR",
+ "7 CEILING",
+ "8 ROUND[0]",
+ "8 ROUND[1]",
+ "8 ROUND[2]",
+ "8 ROUND[3]",
+ "9 NROUND[0]",
+ "9 NROUND[1]",
+ "9 NROUND[2]",
+ "9 NROUND[3]",
+
+ "5 WCvtF",
+ "7 DeltaP2",
+ "7 DeltaP3",
+ "A DeltaCn[0]",
+ "A DeltaCn[1]",
+ "A DeltaCn[2]",
+ "6 SROUND",
+ "8 S45Round",
+ "4 JROT",
+ "4 JROF",
+ "4 ROFF",
+ "7 INS_$7B",
+ "4 RUTG",
+ "4 RDTG",
+ "5 SANGW",
+ "2 AA",
+
+ "6 FlipPT",
+ "8 FlipRgON",
+ "9 FlipRgOFF",
+ "7 INS_$83",
+ "7 INS_$84",
+ "8 ScanCTRL",
+ "9 SDPvTL[0]",
+ "9 SDPvTL[1]",
+ "7 GetINFO",
+ "4 IDEF",
+ "4 ROLL",
+ "3 MAX",
+ "3 MIN",
+ "8 ScanTYPE",
+ "8 InstCTRL",
+ "7 INS_$8F",
+
+ "7 INS_$90",
+ "7 INS_$91",
+ "7 INS_$92",
+ "7 INS_$93",
+ "7 INS_$94",
+ "7 INS_$95",
+ "7 INS_$96",
+ "7 INS_$97",
+ "7 INS_$98",
+ "7 INS_$99",
+ "7 INS_$9A",
+ "7 INS_$9B",
+ "7 INS_$9C",
+ "7 INS_$9D",
+ "7 INS_$9E",
+ "7 INS_$9F",
+
+ "7 INS_$A0",
+ "7 INS_$A1",
+ "7 INS_$A2",
+ "7 INS_$A3",
+ "7 INS_$A4",
+ "7 INS_$A5",
+ "7 INS_$A6",
+ "7 INS_$A7",
+ "7 INS_$A8",
+ "7 INS_$A9",
+ "7 INS_$AA",
+ "7 INS_$AB",
+ "7 INS_$AC",
+ "7 INS_$AD",
+ "7 INS_$AE",
+ "7 INS_$AF",
+
+ "8 PushB[0]",
+ "8 PushB[1]",
+ "8 PushB[2]",
+ "8 PushB[3]",
+ "8 PushB[4]",
+ "8 PushB[5]",
+ "8 PushB[6]",
+ "8 PushB[7]",
+ "8 PushW[0]",
+ "8 PushW[1]",
+ "8 PushW[2]",
+ "8 PushW[3]",
+ "8 PushW[4]",
+ "8 PushW[5]",
+ "8 PushW[6]",
+ "8 PushW[7]",
+
+ "8 MDRP[00]",
+ "8 MDRP[01]",
+ "8 MDRP[02]",
+ "8 MDRP[03]",
+ "8 MDRP[04]",
+ "8 MDRP[05]",
+ "8 MDRP[06]",
+ "8 MDRP[07]",
+ "8 MDRP[08]",
+ "8 MDRP[09]",
+ "8 MDRP[10]",
+ "8 MDRP[11]",
+ "8 MDRP[12]",
+ "8 MDRP[13]",
+ "8 MDRP[14]",
+ "8 MDRP[15]",
+
+ "8 MDRP[16]",
+ "8 MDRP[17]",
+ "8 MDRP[18]",
+ "8 MDRP[19]",
+ "8 MDRP[20]",
+ "8 MDRP[21]",
+ "8 MDRP[22]",
+ "8 MDRP[23]",
+ "8 MDRP[24]",
+ "8 MDRP[25]",
+ "8 MDRP[26]",
+ "8 MDRP[27]",
+ "8 MDRP[28]",
+ "8 MDRP[29]",
+ "8 MDRP[30]",
+ "8 MDRP[31]",
+
+ "8 MIRP[00]",
+ "8 MIRP[01]",
+ "8 MIRP[02]",
+ "8 MIRP[03]",
+ "8 MIRP[04]",
+ "8 MIRP[05]",
+ "8 MIRP[06]",
+ "8 MIRP[07]",
+ "8 MIRP[08]",
+ "8 MIRP[09]",
+ "8 MIRP[10]",
+ "8 MIRP[11]",
+ "8 MIRP[12]",
+ "8 MIRP[13]",
+ "8 MIRP[14]",
+ "8 MIRP[15]",
+
+ "8 MIRP[16]",
+ "8 MIRP[17]",
+ "8 MIRP[18]",
+ "8 MIRP[19]",
+ "8 MIRP[20]",
+ "8 MIRP[21]",
+ "8 MIRP[22]",
+ "8 MIRP[23]",
+ "8 MIRP[24]",
+ "8 MIRP[25]",
+ "8 MIRP[26]",
+ "8 MIRP[27]",
+ "8 MIRP[28]",
+ "8 MIRP[29]",
+ "8 MIRP[30]",
+ "8 MIRP[31]"
};
#endif /* FT_DEBUG_LEVEL_TRACE */
@@ -1637,55 +1482,55 @@
/* The aspect ratio in 16.16 format, always <= 1.0 . */
/* */
static FT_Long
- Current_Ratio( EXEC_OP )
+ Current_Ratio( TT_ExecContext exc )
{
- if ( !CUR.tt_metrics.ratio )
+ if ( !exc->tt_metrics.ratio )
{
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
- if ( CUR.GS.both_x_axis )
- CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;
+ if ( exc->GS.both_x_axis )
+ exc->tt_metrics.ratio = exc->tt_metrics.x_ratio;
else
- CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio;
+ exc->tt_metrics.ratio = exc->tt_metrics.y_ratio;
}
else
#endif
{
- if ( CUR.GS.projVector.y == 0 )
- CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio;
+ if ( exc->GS.projVector.y == 0 )
+ exc->tt_metrics.ratio = exc->tt_metrics.x_ratio;
- else if ( CUR.GS.projVector.x == 0 )
- CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio;
+ else if ( exc->GS.projVector.x == 0 )
+ exc->tt_metrics.ratio = exc->tt_metrics.y_ratio;
else
{
FT_F26Dot6 x, y;
- x = TT_MulFix14( CUR.tt_metrics.x_ratio,
- CUR.GS.projVector.x );
- y = TT_MulFix14( CUR.tt_metrics.y_ratio,
- CUR.GS.projVector.y );
- CUR.tt_metrics.ratio = FT_Hypot( x, y );
+ x = TT_MulFix14( exc->tt_metrics.x_ratio,
+ exc->GS.projVector.x );
+ y = TT_MulFix14( exc->tt_metrics.y_ratio,
+ exc->GS.projVector.y );
+ exc->tt_metrics.ratio = FT_Hypot( x, y );
}
}
}
- return CUR.tt_metrics.ratio;
+ return exc->tt_metrics.ratio;
}
FT_CALLBACK_DEF( FT_Long )
- Current_Ppem( EXEC_OP )
+ Current_Ppem( TT_ExecContext exc )
{
- return CUR.tt_metrics.ppem;
+ return exc->tt_metrics.ppem;
}
FT_CALLBACK_DEF( FT_Long )
- Current_Ppem_Stretched( EXEC_OP )
+ Current_Ppem_Stretched( TT_ExecContext exc )
{
- return FT_MulFix( CUR.tt_metrics.ppem, CURRENT_Ratio() );
+ return FT_MulFix( exc->tt_metrics.ppem, Current_Ratio( exc ) );
}
@@ -1697,48 +1542,54 @@
FT_CALLBACK_DEF( FT_F26Dot6 )
- Read_CVT( EXEC_OP_ FT_ULong idx )
+ Read_CVT( TT_ExecContext exc,
+ FT_ULong idx )
{
- return CUR.cvt[idx];
+ return exc->cvt[idx];
}
FT_CALLBACK_DEF( FT_F26Dot6 )
- Read_CVT_Stretched( EXEC_OP_ FT_ULong idx )
+ Read_CVT_Stretched( TT_ExecContext exc,
+ FT_ULong idx )
{
- return FT_MulFix( CUR.cvt[idx], CURRENT_Ratio() );
+ return FT_MulFix( exc->cvt[idx], Current_Ratio( exc ) );
}
FT_CALLBACK_DEF( void )
- Write_CVT( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
+ Write_CVT( TT_ExecContext exc,
+ FT_ULong idx,
+ FT_F26Dot6 value )
{
- CUR.cvt[idx] = value;
+ exc->cvt[idx] = value;
}
FT_CALLBACK_DEF( void )
- Write_CVT_Stretched( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
+ Write_CVT_Stretched( TT_ExecContext exc,
+ FT_ULong idx,
+ FT_F26Dot6 value )
{
- CUR.cvt[idx] = FT_DivFix( value, CURRENT_Ratio() );
+ exc->cvt[idx] = FT_DivFix( value, Current_Ratio( exc ) );
}
FT_CALLBACK_DEF( void )
- Move_CVT( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
+ Move_CVT( TT_ExecContext exc,
+ FT_ULong idx,
+ FT_F26Dot6 value )
{
- CUR.cvt[idx] += value;
+ exc->cvt[idx] += value;
}
FT_CALLBACK_DEF( void )
- Move_CVT_Stretched( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value )
+ Move_CVT_Stretched( TT_ExecContext exc,
+ FT_ULong idx,
+ FT_F26Dot6 value )
{
- CUR.cvt[idx] += FT_DivFix( value, CURRENT_Ratio() );
+ exc->cvt[idx] += FT_DivFix( value, Current_Ratio( exc ) );
}
@@ -1758,12 +1609,12 @@
/* This one could become a macro. */
/* */
static FT_Short
- GetShortIns( EXEC_OP )
+ GetShortIns( TT_ExecContext exc )
{
/* Reading a byte stream so there is no endianess (DaveP) */
- CUR.IP += 2;
- return (FT_Short)( ( CUR.code[CUR.IP - 2] << 8 ) +
- CUR.code[CUR.IP - 1] );
+ exc->IP += 2;
+ return (FT_Short)( ( exc->code[exc->IP - 2] << 8 ) +
+ exc->code[exc->IP - 1] );
}
@@ -1784,23 +1635,24 @@
/* SUCCESS or FAILURE. */
/* */
static FT_Bool
- Ins_Goto_CodeRange( EXEC_OP_ FT_Int aRange,
- FT_ULong aIP )
+ Ins_Goto_CodeRange( TT_ExecContext exc,
+ FT_Int aRange,
+ FT_Long aIP )
{
TT_CodeRange* range;
if ( aRange < 1 || aRange > 3 )
{
- CUR.error = FT_THROW( Bad_Argument );
+ exc->error = FT_THROW( Bad_Argument );
return FAILURE;
}
- range = &CUR.codeRangeTable[aRange - 1];
+ range = &exc->codeRangeTable[aRange - 1];
if ( range->base == NULL ) /* invalid coderange */
{
- CUR.error = FT_THROW( Invalid_CodeRange );
+ exc->error = FT_THROW( Invalid_CodeRange );
return FAILURE;
}
@@ -1810,14 +1662,14 @@
if ( aIP > range->size )
{
- CUR.error = FT_THROW( Code_Overflow );
+ exc->error = FT_THROW( Code_Overflow );
return FAILURE;
}
- CUR.code = range->base;
- CUR.codeSize = range->size;
- CUR.IP = aIP;
- CUR.curRange = aRange;
+ exc->code = range->base;
+ exc->codeSize = range->size;
+ exc->IP = aIP;
+ exc->curRange = aRange;
return SUCCESS;
}
@@ -1841,36 +1693,37 @@
/* zone :: The affected glyph zone. */
/* */
static void
- Direct_Move( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
+ Direct_Move( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance )
{
FT_F26Dot6 v;
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !CUR.face->unpatented_hinting );
+ FT_ASSERT( !exc->face->unpatented_hinting );
#endif
- v = CUR.GS.freeVector.x;
+ v = exc->GS.freeVector.x;
if ( v != 0 )
{
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( !SUBPIXEL_HINTING ||
- ( !CUR.ignore_x_mode ||
- ( CUR.sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) )
+ if ( !SUBPIXEL_HINTING ||
+ ( !exc->ignore_x_mode ||
+ ( exc->sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) )
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- zone->cur[point].x += FT_MulDiv( distance, v, CUR.F_dot_P );
+ zone->cur[point].x += FT_MulDiv( distance, v, exc->F_dot_P );
zone->tags[point] |= FT_CURVE_TAG_TOUCH_X;
}
- v = CUR.GS.freeVector.y;
+ v = exc->GS.freeVector.y;
if ( v != 0 )
{
- zone->cur[point].y += FT_MulDiv( distance, v, CUR.F_dot_P );
+ zone->cur[point].y += FT_MulDiv( distance, v, exc->F_dot_P );
zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
@@ -1895,26 +1748,27 @@
/* zone :: The affected glyph zone. */
/* */
static void
- Direct_Move_Orig( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
+ Direct_Move_Orig( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance )
{
FT_F26Dot6 v;
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !CUR.face->unpatented_hinting );
+ FT_ASSERT( !exc->face->unpatented_hinting );
#endif
- v = CUR.GS.freeVector.x;
+ v = exc->GS.freeVector.x;
if ( v != 0 )
- zone->org[point].x += FT_MulDiv( distance, v, CUR.F_dot_P );
+ zone->org[point].x += FT_MulDiv( distance, v, exc->F_dot_P );
- v = CUR.GS.freeVector.y;
+ v = exc->GS.freeVector.y;
if ( v != 0 )
- zone->org[point].y += FT_MulDiv( distance, v, CUR.F_dot_P );
+ zone->org[point].y += FT_MulDiv( distance, v, exc->F_dot_P );
}
@@ -1929,15 +1783,16 @@
static void
- Direct_Move_X( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
+ Direct_Move_X( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance )
{
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( !SUBPIXEL_HINTING ||
- !CUR.ignore_x_mode )
+ if ( !SUBPIXEL_HINTING ||
+ !exc->ignore_x_mode )
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
zone->cur[point].x += distance;
@@ -1946,11 +1801,12 @@
static void
- Direct_Move_Y( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
+ Direct_Move_Y( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance )
{
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
zone->cur[point].y += distance;
zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y;
@@ -1968,22 +1824,24 @@
static void
- Direct_Move_Orig_X( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
+ Direct_Move_Orig_X( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance )
{
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
zone->org[point].x += distance;
}
static void
- Direct_Move_Orig_Y( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance )
+ Direct_Move_Orig_Y( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance )
{
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
zone->org[point].y += distance;
}
@@ -2012,12 +1870,13 @@
/* before rounding. */
/* */
static FT_F26Dot6
- Round_None( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_None( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
if ( distance >= 0 )
@@ -2053,12 +1912,13 @@
/* Rounded distance. */
/* */
static FT_F26Dot6
- Round_To_Grid( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_To_Grid( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
if ( distance >= 0 )
@@ -2074,7 +1934,7 @@
val = 0;
}
- return val;
+ return val;
}
@@ -2095,12 +1955,13 @@
/* Rounded distance. */
/* */
static FT_F26Dot6
- Round_To_Half_Grid( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_To_Half_Grid( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
if ( distance >= 0 )
@@ -2137,12 +1998,13 @@
/* Rounded distance. */
/* */
static FT_F26Dot6
- Round_Down_To_Grid( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_Down_To_Grid( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
if ( distance >= 0 )
@@ -2179,12 +2041,13 @@
/* Rounded distance. */
/* */
static FT_F26Dot6
- Round_Up_To_Grid( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_Up_To_Grid( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
if ( distance >= 0 )
@@ -2221,12 +2084,13 @@
/* Rounded distance. */
/* */
static FT_F26Dot6
- Round_To_Double_Grid( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_To_Double_Grid( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
if ( distance >= 0 )
@@ -2269,27 +2133,28 @@
/* before rounding. */
/* */
static FT_F26Dot6
- Round_Super( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_Super( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
if ( distance >= 0 )
{
- val = ( distance - CUR.phase + CUR.threshold + compensation ) &
- -CUR.period;
- val += CUR.phase;
+ val = ( distance - exc->phase + exc->threshold + compensation ) &
+ -exc->period;
+ val += exc->phase;
if ( val < 0 )
- val = CUR.phase;
+ val = exc->phase;
}
else
{
- val = -( ( CUR.threshold - CUR.phase - distance + compensation ) &
- -CUR.period );
- val -= CUR.phase;
+ val = -( ( exc->threshold - exc->phase - distance + compensation ) &
+ -exc->period );
+ val -= exc->phase;
if ( val > 0 )
- val = -CUR.phase;
+ val = -exc->phase;
}
return val;
@@ -2317,27 +2182,28 @@
/* greater precision. */
/* */
static FT_F26Dot6
- Round_Super_45( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation )
+ Round_Super_45( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation )
{
FT_F26Dot6 val;
if ( distance >= 0 )
{
- val = ( ( distance - CUR.phase + CUR.threshold + compensation ) /
- CUR.period ) * CUR.period;
- val += CUR.phase;
+ val = ( ( distance - exc->phase + exc->threshold + compensation ) /
+ exc->period ) * exc->period;
+ val += exc->phase;
if ( val < 0 )
- val = CUR.phase;
+ val = exc->phase;
}
else
{
- val = -( ( ( CUR.threshold - CUR.phase - distance + compensation ) /
- CUR.period ) * CUR.period );
- val -= CUR.phase;
+ val = -( ( ( exc->threshold - exc->phase - distance + compensation ) /
+ exc->period ) * exc->period );
+ val -= exc->phase;
if ( val > 0 )
- val = -CUR.phase;
+ val = -exc->phase;
}
return val;
@@ -2356,40 +2222,41 @@
/* round_mode :: The rounding mode to be used. */
/* */
static void
- Compute_Round( EXEC_OP_ FT_Byte round_mode )
+ Compute_Round( TT_ExecContext exc,
+ FT_Byte round_mode )
{
switch ( round_mode )
{
case TT_Round_Off:
- CUR.func_round = (TT_Round_Func)Round_None;
+ exc->func_round = (TT_Round_Func)Round_None;
break;
case TT_Round_To_Grid:
- CUR.func_round = (TT_Round_Func)Round_To_Grid;
+ exc->func_round = (TT_Round_Func)Round_To_Grid;
break;
case TT_Round_Up_To_Grid:
- CUR.func_round = (TT_Round_Func)Round_Up_To_Grid;
+ exc->func_round = (TT_Round_Func)Round_Up_To_Grid;
break;
case TT_Round_Down_To_Grid:
- CUR.func_round = (TT_Round_Func)Round_Down_To_Grid;
+ exc->func_round = (TT_Round_Func)Round_Down_To_Grid;
break;
case TT_Round_To_Half_Grid:
- CUR.func_round = (TT_Round_Func)Round_To_Half_Grid;
+ exc->func_round = (TT_Round_Func)Round_To_Half_Grid;
break;
case TT_Round_To_Double_Grid:
- CUR.func_round = (TT_Round_Func)Round_To_Double_Grid;
+ exc->func_round = (TT_Round_Func)Round_To_Double_Grid;
break;
case TT_Round_Super:
- CUR.func_round = (TT_Round_Func)Round_Super;
+ exc->func_round = (TT_Round_Func)Round_Super;
break;
case TT_Round_Super_45:
- CUR.func_round = (TT_Round_Func)Round_Super_45;
+ exc->func_round = (TT_Round_Func)Round_Super_45;
break;
}
}
@@ -2409,57 +2276,58 @@
/* selector :: The SROUND opcode. */
/* */
static void
- SetSuperRound( EXEC_OP_ FT_F26Dot6 GridPeriod,
- FT_Long selector )
+ SetSuperRound( TT_ExecContext exc,
+ FT_F2Dot14 GridPeriod,
+ FT_Long selector )
{
switch ( (FT_Int)( selector & 0xC0 ) )
{
case 0:
- CUR.period = GridPeriod / 2;
+ exc->period = GridPeriod / 2;
break;
case 0x40:
- CUR.period = GridPeriod;
+ exc->period = GridPeriod;
break;
case 0x80:
- CUR.period = GridPeriod * 2;
+ exc->period = GridPeriod * 2;
break;
/* This opcode is reserved, but... */
-
case 0xC0:
- CUR.period = GridPeriod;
+ exc->period = GridPeriod;
break;
}
switch ( (FT_Int)( selector & 0x30 ) )
{
case 0:
- CUR.phase = 0;
+ exc->phase = 0;
break;
case 0x10:
- CUR.phase = CUR.period / 4;
+ exc->phase = exc->period / 4;
break;
case 0x20:
- CUR.phase = CUR.period / 2;
+ exc->phase = exc->period / 2;
break;
case 0x30:
- CUR.phase = CUR.period * 3 / 4;
+ exc->phase = exc->period * 3 / 4;
break;
}
if ( ( selector & 0x0F ) == 0 )
- CUR.threshold = CUR.period - 1;
+ exc->threshold = exc->period - 1;
else
- CUR.threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * CUR.period / 8;
+ exc->threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * exc->period / 8;
- CUR.period /= 256;
- CUR.phase /= 256;
- CUR.threshold /= 256;
+ /* convert to F26Dot6 format */
+ exc->period >>= 8;
+ exc->phase >>= 8;
+ exc->threshold >>= 8;
}
@@ -2480,16 +2348,17 @@
/* The distance in F26dot6 format. */
/* */
static FT_F26Dot6
- Project( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
+ Project( TT_ExecContext exc,
+ FT_Pos dx,
+ FT_Pos dy )
{
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- FT_ASSERT( !CUR.face->unpatented_hinting );
+ FT_ASSERT( !exc->face->unpatented_hinting );
#endif
- return TT_DotFix14( (FT_UInt32)dx, (FT_UInt32)dy,
- CUR.GS.projVector.x,
- CUR.GS.projVector.y );
+ return TT_DotFix14( dx, dy,
+ exc->GS.projVector.x,
+ exc->GS.projVector.y );
}
@@ -2510,12 +2379,13 @@
/* The distance in F26dot6 format. */
/* */
static FT_F26Dot6
- Dual_Project( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
+ Dual_Project( TT_ExecContext exc,
+ FT_Pos dx,
+ FT_Pos dy )
{
- return TT_DotFix14( (FT_UInt32)dx, (FT_UInt32)dy,
- CUR.GS.dualVector.x,
- CUR.GS.dualVector.y );
+ return TT_DotFix14( dx, dy,
+ exc->GS.dualVector.x,
+ exc->GS.dualVector.y );
}
@@ -2536,10 +2406,11 @@
/* The distance in F26dot6 format. */
/* */
static FT_F26Dot6
- Project_x( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
+ Project_x( TT_ExecContext exc,
+ FT_Pos dx,
+ FT_Pos dy )
{
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
FT_UNUSED( dy );
return dx;
@@ -2563,10 +2434,11 @@
/* The distance in F26dot6 format. */
/* */
static FT_F26Dot6
- Project_y( EXEC_OP_ FT_Pos dx,
- FT_Pos dy )
+ Project_y( TT_ExecContext exc,
+ FT_Pos dx,
+ FT_Pos dy )
{
- FT_UNUSED_EXEC;
+ FT_UNUSED( exc );
FT_UNUSED( dx );
return dy;
@@ -2583,101 +2455,101 @@
/* to the current graphics state. */
/* */
static void
- Compute_Funcs( EXEC_OP )
+ Compute_Funcs( TT_ExecContext exc )
{
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
- /* If both vectors point rightwards along the x axis, set */
- /* `both-x-axis' true, otherwise set it false. The x values only */
- /* need be tested because the vector has been normalised to a unit */
- /* vector of length 0x4000 = unity. */
- CUR.GS.both_x_axis = (FT_Bool)( CUR.GS.projVector.x == 0x4000 &&
- CUR.GS.freeVector.x == 0x4000 );
+ /* If both vectors point rightwards along the x axis, set */
+ /* `both-x-axis' true, otherwise set it false. The x values only */
+ /* need be tested because the vector has been normalised to a unit */
+ /* vector of length 0x4000 = unity. */
+ exc->GS.both_x_axis = (FT_Bool)( exc->GS.projVector.x == 0x4000 &&
+ exc->GS.freeVector.x == 0x4000 );
/* Throw away projection and freedom vector information */
/* because the patents don't allow them to be stored. */
/* The relevant US Patents are 5155805 and 5325479. */
- CUR.GS.projVector.x = 0;
- CUR.GS.projVector.y = 0;
- CUR.GS.freeVector.x = 0;
- CUR.GS.freeVector.y = 0;
+ exc->GS.projVector.x = 0;
+ exc->GS.projVector.y = 0;
+ exc->GS.freeVector.x = 0;
+ exc->GS.freeVector.y = 0;
- if ( CUR.GS.both_x_axis )
+ if ( exc->GS.both_x_axis )
{
- CUR.func_project = Project_x;
- CUR.func_move = Direct_Move_X;
- CUR.func_move_orig = Direct_Move_Orig_X;
+ exc->func_project = Project_x;
+ exc->func_move = Direct_Move_X;
+ exc->func_move_orig = Direct_Move_Orig_X;
}
else
{
- CUR.func_project = Project_y;
- CUR.func_move = Direct_Move_Y;
- CUR.func_move_orig = Direct_Move_Orig_Y;
+ exc->func_project = Project_y;
+ exc->func_move = Direct_Move_Y;
+ exc->func_move_orig = Direct_Move_Orig_Y;
}
- if ( CUR.GS.dualVector.x == 0x4000 )
- CUR.func_dualproj = Project_x;
- else if ( CUR.GS.dualVector.y == 0x4000 )
- CUR.func_dualproj = Project_y;
+ if ( exc->GS.dualVector.x == 0x4000 )
+ exc->func_dualproj = Project_x;
+ else if ( exc->GS.dualVector.y == 0x4000 )
+ exc->func_dualproj = Project_y;
else
- CUR.func_dualproj = Dual_Project;
+ exc->func_dualproj = Dual_Project;
/* Force recalculation of cached aspect ratio */
- CUR.tt_metrics.ratio = 0;
+ exc->tt_metrics.ratio = 0;
return;
}
#endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING */
- if ( CUR.GS.freeVector.x == 0x4000 )
- CUR.F_dot_P = CUR.GS.projVector.x;
- else if ( CUR.GS.freeVector.y == 0x4000 )
- CUR.F_dot_P = CUR.GS.projVector.y;
+ if ( exc->GS.freeVector.x == 0x4000 )
+ exc->F_dot_P = exc->GS.projVector.x;
+ else if ( exc->GS.freeVector.y == 0x4000 )
+ exc->F_dot_P = exc->GS.projVector.y;
else
- CUR.F_dot_P = ( (FT_Long)CUR.GS.projVector.x * CUR.GS.freeVector.x +
- (FT_Long)CUR.GS.projVector.y * CUR.GS.freeVector.y ) >>
- 14;
-
- if ( CUR.GS.projVector.x == 0x4000 )
- CUR.func_project = (TT_Project_Func)Project_x;
- else if ( CUR.GS.projVector.y == 0x4000 )
- CUR.func_project = (TT_Project_Func)Project_y;
+ exc->F_dot_P =
+ ( (FT_Long)exc->GS.projVector.x * exc->GS.freeVector.x +
+ (FT_Long)exc->GS.projVector.y * exc->GS.freeVector.y ) >> 14;
+
+ if ( exc->GS.projVector.x == 0x4000 )
+ exc->func_project = (TT_Project_Func)Project_x;
+ else if ( exc->GS.projVector.y == 0x4000 )
+ exc->func_project = (TT_Project_Func)Project_y;
else
- CUR.func_project = (TT_Project_Func)Project;
+ exc->func_project = (TT_Project_Func)Project;
- if ( CUR.GS.dualVector.x == 0x4000 )
- CUR.func_dualproj = (TT_Project_Func)Project_x;
- else if ( CUR.GS.dualVector.y == 0x4000 )
- CUR.func_dualproj = (TT_Project_Func)Project_y;
+ if ( exc->GS.dualVector.x == 0x4000 )
+ exc->func_dualproj = (TT_Project_Func)Project_x;
+ else if ( exc->GS.dualVector.y == 0x4000 )
+ exc->func_dualproj = (TT_Project_Func)Project_y;
else
- CUR.func_dualproj = (TT_Project_Func)Dual_Project;
+ exc->func_dualproj = (TT_Project_Func)Dual_Project;
- CUR.func_move = (TT_Move_Func)Direct_Move;
- CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig;
+ exc->func_move = (TT_Move_Func)Direct_Move;
+ exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig;
- if ( CUR.F_dot_P == 0x4000L )
+ if ( exc->F_dot_P == 0x4000L )
{
- if ( CUR.GS.freeVector.x == 0x4000 )
+ if ( exc->GS.freeVector.x == 0x4000 )
{
- CUR.func_move = (TT_Move_Func)Direct_Move_X;
- CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig_X;
+ exc->func_move = (TT_Move_Func)Direct_Move_X;
+ exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_X;
}
- else if ( CUR.GS.freeVector.y == 0x4000 )
+ else if ( exc->GS.freeVector.y == 0x4000 )
{
- CUR.func_move = (TT_Move_Func)Direct_Move_Y;
- CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig_Y;
+ exc->func_move = (TT_Move_Func)Direct_Move_Y;
+ exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_Y;
}
}
/* at small sizes, F_dot_P can become too small, resulting */
/* in overflows and `spikes' in a number of glyphs like `w'. */
- if ( FT_ABS( CUR.F_dot_P ) < 0x400L )
- CUR.F_dot_P = 0x4000L;
+ if ( FT_ABS( exc->F_dot_P ) < 0x400L )
+ exc->F_dot_P = 0x4000L;
/* Disable cached aspect ratio */
- CUR.tt_metrics.ratio = 0;
+ exc->tt_metrics.ratio = 0;
}
@@ -2700,18 +2572,16 @@
/* Returns FAILURE if a vector parameter is zero. */
/* */
/* <Note> */
- /* In case Vx and Vy are both zero, Normalize() returns SUCCESS, and */
+ /* In case Vx and Vy are both zero, `Normalize' returns SUCCESS, and */
/* R is undefined. */
/* */
static FT_Bool
- Normalize( EXEC_OP_ FT_F26Dot6 Vx,
- FT_F26Dot6 Vy,
- FT_UnitVector* R )
+ Normalize( FT_F26Dot6 Vx,
+ FT_F26Dot6 Vy,
+ FT_UnitVector* R )
{
FT_F26Dot6 W;
- FT_UNUSED_EXEC;
-
if ( FT_ABS( Vx ) < 0x4000L && FT_ABS( Vy ) < 0x4000L )
{
@@ -2742,1065 +2612,12 @@
/*************************************************************************/
- static FT_Bool
- Ins_SxVTL( EXEC_OP_ FT_UShort aIdx1,
- FT_UShort aIdx2,
- FT_Int aOpc,
- FT_UnitVector* Vec )
- {
- FT_Long A, B, C;
- FT_Vector* p1;
- FT_Vector* p2;
-
-
- if ( BOUNDS( aIdx1, CUR.zp2.n_points ) ||
- BOUNDS( aIdx2, CUR.zp1.n_points ) )
- {
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
- return FAILURE;
- }
-
- p1 = CUR.zp1.cur + aIdx2;
- p2 = CUR.zp2.cur + aIdx1;
-
- A = p1->x - p2->x;
- B = p1->y - p2->y;
-
- /* If p1 == p2, SPVTL and SFVTL behave the same as */
- /* SPVTCA[X] and SFVTCA[X], respectively. */
- /* */
- /* Confirmed by Greg Hitchcock. */
-
- if ( A == 0 && B == 0 )
- {
- A = 0x4000;
- aOpc = 0;
- }
-
- if ( ( aOpc & 1 ) != 0 )
- {
- C = B; /* counter clockwise rotation */
- B = A;
- A = -C;
- }
-
- NORMalize( A, B, Vec );
-
- return SUCCESS;
- }
-
-
- /* When not using the big switch statements, the interpreter uses a */
- /* call table defined later below in this source. Each opcode must */
- /* thus have a corresponding function, even trivial ones. */
- /* */
- /* They are all defined there. */
-
-#define DO_SVTCA \
- { \
- FT_Short A, B; \
- \
- \
- A = (FT_Short)( CUR.opcode & 1 ) << 14; \
- B = A ^ (FT_Short)0x4000; \
- \
- CUR.GS.freeVector.x = A; \
- CUR.GS.projVector.x = A; \
- CUR.GS.dualVector.x = A; \
- \
- CUR.GS.freeVector.y = B; \
- CUR.GS.projVector.y = B; \
- CUR.GS.dualVector.y = B; \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SPVTCA \
- { \
- FT_Short A, B; \
- \
- \
- A = (FT_Short)( CUR.opcode & 1 ) << 14; \
- B = A ^ (FT_Short)0x4000; \
- \
- CUR.GS.projVector.x = A; \
- CUR.GS.dualVector.x = A; \
- \
- CUR.GS.projVector.y = B; \
- CUR.GS.dualVector.y = B; \
- \
- GUESS_VECTOR( freeVector ); \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTCA \
- { \
- FT_Short A, B; \
- \
- \
- A = (FT_Short)( CUR.opcode & 1 ) << 14; \
- B = A ^ (FT_Short)0x4000; \
- \
- CUR.GS.freeVector.x = A; \
- CUR.GS.freeVector.y = B; \
- \
- GUESS_VECTOR( projVector ); \
- \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SPVTL \
- if ( INS_SxVTL( (FT_UShort)args[1], \
- (FT_UShort)args[0], \
- CUR.opcode, \
- &CUR.GS.projVector ) == SUCCESS ) \
- { \
- CUR.GS.dualVector = CUR.GS.projVector; \
- GUESS_VECTOR( freeVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTL \
- if ( INS_SxVTL( (FT_UShort)args[1], \
- (FT_UShort)args[0], \
- CUR.opcode, \
- &CUR.GS.freeVector ) == SUCCESS ) \
- { \
- GUESS_VECTOR( projVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVTPV \
- GUESS_VECTOR( projVector ); \
- CUR.GS.freeVector = CUR.GS.projVector; \
- COMPUTE_Funcs();
-
-
-#define DO_SPVFS \
- { \
- FT_Short S; \
- FT_Long X, Y; \
- \
- \
- /* Only use low 16bits, then sign extend */ \
- S = (FT_Short)args[1]; \
- Y = (FT_Long)S; \
- S = (FT_Short)args[0]; \
- X = (FT_Long)S; \
- \
- NORMalize( X, Y, &CUR.GS.projVector ); \
- \
- CUR.GS.dualVector = CUR.GS.projVector; \
- GUESS_VECTOR( freeVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#define DO_SFVFS \
- { \
- FT_Short S; \
- FT_Long X, Y; \
- \
- \
- /* Only use low 16bits, then sign extend */ \
- S = (FT_Short)args[1]; \
- Y = (FT_Long)S; \
- S = (FT_Short)args[0]; \
- X = S; \
- \
- NORMalize( X, Y, &CUR.GS.freeVector ); \
- GUESS_VECTOR( projVector ); \
- COMPUTE_Funcs(); \
- }
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define DO_GPV \
- if ( CUR.face->unpatented_hinting ) \
- { \
- args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \
- args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \
- } \
- else \
- { \
- args[0] = CUR.GS.projVector.x; \
- args[1] = CUR.GS.projVector.y; \
- }
-#else
-#define DO_GPV \
- args[0] = CUR.GS.projVector.x; \
- args[1] = CUR.GS.projVector.y;
-#endif
-
-
-#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
-#define DO_GFV \
- if ( CUR.face->unpatented_hinting ) \
- { \
- args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \
- args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \
- } \
- else \
- { \
- args[0] = CUR.GS.freeVector.x; \
- args[1] = CUR.GS.freeVector.y; \
- }
-#else
-#define DO_GFV \
- args[0] = CUR.GS.freeVector.x; \
- args[1] = CUR.GS.freeVector.y;
-#endif
-
-
-#define DO_SRP0 \
- CUR.GS.rp0 = (FT_UShort)args[0];
-
-
-#define DO_SRP1 \
- CUR.GS.rp1 = (FT_UShort)args[0];
-
-
-#define DO_SRP2 \
- CUR.GS.rp2 = (FT_UShort)args[0];
-
-
-#define DO_RTHG \
- CUR.GS.round_state = TT_Round_To_Half_Grid; \
- CUR.func_round = (TT_Round_Func)Round_To_Half_Grid;
-
-
-#define DO_RTG \
- CUR.GS.round_state = TT_Round_To_Grid; \
- CUR.func_round = (TT_Round_Func)Round_To_Grid;
-
-
-#define DO_RTDG \
- CUR.GS.round_state = TT_Round_To_Double_Grid; \
- CUR.func_round = (TT_Round_Func)Round_To_Double_Grid;
-
-
-#define DO_RUTG \
- CUR.GS.round_state = TT_Round_Up_To_Grid; \
- CUR.func_round = (TT_Round_Func)Round_Up_To_Grid;
-
-
-#define DO_RDTG \
- CUR.GS.round_state = TT_Round_Down_To_Grid; \
- CUR.func_round = (TT_Round_Func)Round_Down_To_Grid;
-
-
-#define DO_ROFF \
- CUR.GS.round_state = TT_Round_Off; \
- CUR.func_round = (TT_Round_Func)Round_None;
-
-
-#define DO_SROUND \
- SET_SuperRound( 0x4000, args[0] ); \
- CUR.GS.round_state = TT_Round_Super; \
- CUR.func_round = (TT_Round_Func)Round_Super;
-
-
-#define DO_S45ROUND \
- SET_SuperRound( 0x2D41, args[0] ); \
- CUR.GS.round_state = TT_Round_Super_45; \
- CUR.func_round = (TT_Round_Func)Round_Super_45;
-
-
-#define DO_SLOOP \
- if ( args[0] < 0 ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- else \
- CUR.GS.loop = args[0];
-
-
-#define DO_SMD \
- CUR.GS.minimum_distance = args[0];
-
-
-#define DO_SCVTCI \
- CUR.GS.control_value_cutin = (FT_F26Dot6)args[0];
-
-
-#define DO_SSWCI \
- CUR.GS.single_width_cutin = (FT_F26Dot6)args[0];
-
-
-#define DO_SSW \
- CUR.GS.single_width_value = FT_MulFix( args[0], \
- CUR.tt_metrics.scale );
-
-
-#define DO_FLIPON \
- CUR.GS.auto_flip = TRUE;
-
-
-#define DO_FLIPOFF \
- CUR.GS.auto_flip = FALSE;
-
-
-#define DO_SDB \
- CUR.GS.delta_base = (FT_UShort)args[0];
-
-
-#define DO_SDS \
- if ( (FT_ULong)args[0] > 6UL ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- else \
- CUR.GS.delta_shift = (FT_UShort)args[0];
-
-
-#define DO_MD /* nothing */
-
-
-#define DO_MPPEM \
- args[0] = CUR_Func_cur_ppem();
-
-
- /* Note: The pointSize should be irrelevant in a given font program; */
- /* we thus decide to return only the ppem. */
-#if 0
-
-#define DO_MPS \
- args[0] = CUR.metrics.pointSize;
-
-#else
-
-#define DO_MPS \
- args[0] = CUR_Func_cur_ppem();
-
-#endif /* 0 */
-
-
-#define DO_DUP \
- args[1] = args[0];
-
-
-#define DO_CLEAR \
- CUR.new_top = 0;
-
-
-#define DO_SWAP \
- { \
- FT_Long L; \
- \
- \
- L = args[0]; \
- args[0] = args[1]; \
- args[1] = L; \
- }
-
-
-#define DO_DEPTH \
- args[0] = CUR.top;
-
-
-#define DO_CINDEX \
- { \
- FT_Long L; \
- \
- \
- L = args[0]; \
- \
- if ( L <= 0 || L > CUR.args ) \
- { \
- if ( CUR.pedantic_hinting ) \
- CUR.error = FT_THROW( Invalid_Reference ); \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR.stack[CUR.args - L]; \
- }
-
-
-#define DO_JROT \
- if ( args[1] != 0 ) \
- { \
- if ( args[0] == 0 && CUR.args == 0 ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- CUR.IP += args[0]; \
- if ( CUR.IP < 0 || \
- ( CUR.callTop > 0 && \
- CUR.IP > CUR.callStack[CUR.callTop - 1].Def->end ) ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- CUR.step_ins = FALSE; \
- }
-
-
-#define DO_JMPR \
- if ( args[0] == 0 && CUR.args == 0 ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- CUR.IP += args[0]; \
- if ( CUR.IP < 0 || \
- ( CUR.callTop > 0 && \
- CUR.IP > CUR.callStack[CUR.callTop - 1].Def->end ) ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- CUR.step_ins = FALSE;
-
-
-#define DO_JROF \
- if ( args[1] == 0 ) \
- { \
- if ( args[0] == 0 && CUR.args == 0 ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- CUR.IP += args[0]; \
- if ( CUR.IP < 0 || \
- ( CUR.callTop > 0 && \
- CUR.IP > CUR.callStack[CUR.callTop - 1].Def->end ) ) \
- CUR.error = FT_THROW( Bad_Argument ); \
- CUR.step_ins = FALSE; \
- }
-
-
-#define DO_LT \
- args[0] = ( args[0] < args[1] );
-
-
-#define DO_LTEQ \
- args[0] = ( args[0] <= args[1] );
-
-
-#define DO_GT \
- args[0] = ( args[0] > args[1] );
-
-
-#define DO_GTEQ \
- args[0] = ( args[0] >= args[1] );
-
-
-#define DO_EQ \
- args[0] = ( args[0] == args[1] );
-
-
-#define DO_NEQ \
- args[0] = ( args[0] != args[1] );
-
-
-#define DO_ODD \
- args[0] = ( ( CUR_Func_round( args[0], 0 ) & 127 ) == 64 );
-
-
-#define DO_EVEN \
- args[0] = ( ( CUR_Func_round( args[0], 0 ) & 127 ) == 0 );
-
-
-#define DO_AND \
- args[0] = ( args[0] && args[1] );
-
-
-#define DO_OR \
- args[0] = ( args[0] || args[1] );
-
-
-#define DO_NOT \
- args[0] = !args[0];
-
-
-#define DO_ADD \
- args[0] += args[1];
-
-
-#define DO_SUB \
- args[0] -= args[1];
-
-
-#define DO_DIV \
- if ( args[1] == 0 ) \
- CUR.error = FT_THROW( Divide_By_Zero ); \
- else \
- args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] );
-
-
-#define DO_MUL \
- args[0] = FT_MulDiv( args[0], args[1], 64L );
-
-
-#define DO_ABS \
- args[0] = FT_ABS( args[0] );
-
-
-#define DO_NEG \
- args[0] = -args[0];
-
-
-#define DO_FLOOR \
- args[0] = FT_PIX_FLOOR( args[0] );
-
-
-#define DO_CEILING \
- args[0] = FT_PIX_CEIL( args[0] );
-
-#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-
-#define DO_RS \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDSL( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- ARRAY_BOUND_ERROR; \
- else \
- args[0] = 0; \
- } \
- else \
- { \
- /* subpixel hinting - avoid Typeman Dstroke and */ \
- /* IStroke and Vacuform rounds */ \
- \
- if ( SUBPIXEL_HINTING && \
- CUR.ignore_x_mode && \
- ( ( I == 24 && \
- ( CUR.face->sph_found_func_flags & \
- ( SPH_FDEF_SPACING_1 | \
- SPH_FDEF_SPACING_2 ) ) ) || \
- ( I == 22 && \
- ( CUR.sph_in_func_flags & \
- SPH_FDEF_TYPEMAN_STROKES ) ) || \
- ( I == 8 && \
- ( CUR.face->sph_found_func_flags & \
- SPH_FDEF_VACUFORM_ROUND_1 ) && \
- CUR.iup_called ) ) ) \
- args[0] = 0; \
- else \
- args[0] = CUR.storage[I]; \
- } \
- }
-
-#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
-#define DO_RS \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDSL( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- else \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR.storage[I]; \
- }
-
-#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-
-
-#define DO_WS \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDSL( I, CUR.storeSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR.storage[I] = args[1]; \
- }
-
-
-#define DO_RCVT \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDSL( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- else \
- args[0] = 0; \
- } \
- else \
- args[0] = CUR_Func_read_cvt( I ); \
- }
-
-
-#define DO_WCVTP \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDSL( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR_Func_write_cvt( I, args[1] ); \
- }
-
-
-#define DO_WCVTF \
- { \
- FT_ULong I = (FT_ULong)args[0]; \
- \
- \
- if ( BOUNDSL( I, CUR.cvtSize ) ) \
- { \
- if ( CUR.pedantic_hinting ) \
- { \
- ARRAY_BOUND_ERROR; \
- } \
- } \
- else \
- CUR.cvt[I] = FT_MulFix( args[1], CUR.tt_metrics.scale ); \
- }
-
-
-#define DO_DEBUG \
- CUR.error = FT_THROW( Debug_OpCode );
-
-
-#define DO_ROUND \
- args[0] = CUR_Func_round( \
- args[0], \
- CUR.tt_metrics.compensations[CUR.opcode - 0x68] );
-
-
-#define DO_NROUND \
- args[0] = ROUND_None( args[0], \
- CUR.tt_metrics.compensations[CUR.opcode - 0x6C] );
-
-
-#define DO_MAX \
- if ( args[1] > args[0] ) \
- args[0] = args[1];
-
-
-#define DO_MIN \
- if ( args[1] < args[0] ) \
- args[0] = args[1];
-
-
-#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
-#undef ARRAY_BOUND_ERROR
-#define ARRAY_BOUND_ERROR \
- { \
- CUR.error = FT_THROW( Invalid_Reference ); \
- return; \
- }
-
-
- /*************************************************************************/
- /* */
- /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */
- /* Opcode range: 0x00-0x01 */
- /* Stack: --> */
- /* */
- static void
- Ins_SVTCA( INS_ARG )
- {
- DO_SVTCA
- }
-
-
- /*************************************************************************/
- /* */
- /* SPVTCA[a]: Set PVector to Coordinate Axis */
- /* Opcode range: 0x02-0x03 */
- /* Stack: --> */
- /* */
- static void
- Ins_SPVTCA( INS_ARG )
- {
- DO_SPVTCA
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVTCA[a]: Set FVector to Coordinate Axis */
- /* Opcode range: 0x04-0x05 */
- /* Stack: --> */
- /* */
- static void
- Ins_SFVTCA( INS_ARG )
- {
- DO_SFVTCA
- }
-
-
- /*************************************************************************/
- /* */
- /* SPVTL[a]: Set PVector To Line */
- /* Opcode range: 0x06-0x07 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SPVTL( INS_ARG )
- {
- DO_SPVTL
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVTL[a]: Set FVector To Line */
- /* Opcode range: 0x08-0x09 */
- /* Stack: uint32 uint32 --> */
- /* */
- static void
- Ins_SFVTL( INS_ARG )
- {
- DO_SFVTL
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVTPV[]: Set FVector To PVector */
- /* Opcode range: 0x0E */
- /* Stack: --> */
- /* */
- static void
- Ins_SFVTPV( INS_ARG )
- {
- DO_SFVTPV
- }
-
-
- /*************************************************************************/
- /* */
- /* SPVFS[]: Set PVector From Stack */
- /* Opcode range: 0x0A */
- /* Stack: f2.14 f2.14 --> */
- /* */
- static void
- Ins_SPVFS( INS_ARG )
- {
- DO_SPVFS
- }
-
-
- /*************************************************************************/
- /* */
- /* SFVFS[]: Set FVector From Stack */
- /* Opcode range: 0x0B */
- /* Stack: f2.14 f2.14 --> */
- /* */
- static void
- Ins_SFVFS( INS_ARG )
- {
- DO_SFVFS
- }
-
-
- /*************************************************************************/
- /* */
- /* GPV[]: Get Projection Vector */
- /* Opcode range: 0x0C */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
- static void
- Ins_GPV( INS_ARG )
- {
- DO_GPV
- }
-
-
- /*************************************************************************/
- /* GFV[]: Get Freedom Vector */
- /* Opcode range: 0x0D */
- /* Stack: ef2.14 --> ef2.14 */
- /* */
- static void
- Ins_GFV( INS_ARG )
- {
- DO_GFV
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP0[]: Set Reference Point 0 */
- /* Opcode range: 0x10 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP0( INS_ARG )
- {
- DO_SRP0
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP1[]: Set Reference Point 1 */
- /* Opcode range: 0x11 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP1( INS_ARG )
- {
- DO_SRP1
- }
-
-
- /*************************************************************************/
- /* */
- /* SRP2[]: Set Reference Point 2 */
- /* Opcode range: 0x12 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SRP2( INS_ARG )
- {
- DO_SRP2
- }
-
-
- /*************************************************************************/
- /* */
- /* RTHG[]: Round To Half Grid */
- /* Opcode range: 0x19 */
- /* Stack: --> */
- /* */
- static void
- Ins_RTHG( INS_ARG )
- {
- DO_RTHG
- }
-
-
- /*************************************************************************/
- /* */
- /* RTG[]: Round To Grid */
- /* Opcode range: 0x18 */
- /* Stack: --> */
- /* */
- static void
- Ins_RTG( INS_ARG )
- {
- DO_RTG
- }
-
-
- /*************************************************************************/
- /* RTDG[]: Round To Double Grid */
- /* Opcode range: 0x3D */
- /* Stack: --> */
- /* */
- static void
- Ins_RTDG( INS_ARG )
- {
- DO_RTDG
- }
-
-
- /*************************************************************************/
- /* RUTG[]: Round Up To Grid */
- /* Opcode range: 0x7C */
- /* Stack: --> */
- /* */
- static void
- Ins_RUTG( INS_ARG )
- {
- DO_RUTG
- }
-
-
- /*************************************************************************/
- /* */
- /* RDTG[]: Round Down To Grid */
- /* Opcode range: 0x7D */
- /* Stack: --> */
- /* */
- static void
- Ins_RDTG( INS_ARG )
- {
- DO_RDTG
- }
-
-
- /*************************************************************************/
- /* */
- /* ROFF[]: Round OFF */
- /* Opcode range: 0x7A */
- /* Stack: --> */
- /* */
- static void
- Ins_ROFF( INS_ARG )
- {
- DO_ROFF
- }
-
-
- /*************************************************************************/
- /* */
- /* SROUND[]: Super ROUND */
- /* Opcode range: 0x76 */
- /* Stack: Eint8 --> */
- /* */
- static void
- Ins_SROUND( INS_ARG )
- {
- DO_SROUND
- }
-
-
- /*************************************************************************/
- /* */
- /* S45ROUND[]: Super ROUND 45 degrees */
- /* Opcode range: 0x77 */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_S45ROUND( INS_ARG )
- {
- DO_S45ROUND
- }
-
-
- /*************************************************************************/
- /* */
- /* SLOOP[]: Set LOOP variable */
- /* Opcode range: 0x17 */
- /* Stack: int32? --> */
- /* */
- static void
- Ins_SLOOP( INS_ARG )
- {
- DO_SLOOP
- }
-
-
- /*************************************************************************/
- /* */
- /* SMD[]: Set Minimum Distance */
- /* Opcode range: 0x1A */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SMD( INS_ARG )
- {
- DO_SMD
- }
-
-
- /*************************************************************************/
- /* */
- /* SCVTCI[]: Set Control Value Table Cut In */
- /* Opcode range: 0x1D */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SCVTCI( INS_ARG )
- {
- DO_SCVTCI
- }
-
-
- /*************************************************************************/
- /* */
- /* SSWCI[]: Set Single Width Cut In */
- /* Opcode range: 0x1E */
- /* Stack: f26.6 --> */
- /* */
- static void
- Ins_SSWCI( INS_ARG )
- {
- DO_SSWCI
- }
-
-
- /*************************************************************************/
- /* */
- /* SSW[]: Set Single Width */
- /* Opcode range: 0x1F */
- /* Stack: int32? --> */
- /* */
- static void
- Ins_SSW( INS_ARG )
- {
- DO_SSW
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPON[]: Set auto-FLIP to ON */
- /* Opcode range: 0x4D */
- /* Stack: --> */
- /* */
- static void
- Ins_FLIPON( INS_ARG )
- {
- DO_FLIPON
- }
-
-
- /*************************************************************************/
- /* */
- /* FLIPOFF[]: Set auto-FLIP to OFF */
- /* Opcode range: 0x4E */
- /* Stack: --> */
- /* */
- static void
- Ins_FLIPOFF( INS_ARG )
- {
- DO_FLIPOFF
- }
-
-
- /*************************************************************************/
- /* */
- /* SANGW[]: Set ANGle Weight */
- /* Opcode range: 0x7E */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SANGW( INS_ARG )
- {
- /* instruction not supported anymore */
- }
-
-
- /*************************************************************************/
- /* */
- /* SDB[]: Set Delta Base */
- /* Opcode range: 0x5E */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SDB( INS_ARG )
- {
- DO_SDB
- }
-
-
- /*************************************************************************/
- /* */
- /* SDS[]: Set Delta Shift */
- /* Opcode range: 0x5F */
- /* Stack: uint32 --> */
- /* */
- static void
- Ins_SDS( INS_ARG )
- {
- DO_SDS
- }
+#define ARRAY_BOUND_ERROR \
+ do \
+ { \
+ exc->error = FT_THROW( Invalid_Reference ); \
+ return; \
+ } while (0)
/*************************************************************************/
@@ -3810,9 +2627,10 @@
/* Stack: --> Euint16 */
/* */
static void
- Ins_MPPEM( INS_ARG )
+ Ins_MPPEM( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_MPPEM
+ args[0] = exc->func_cur_ppem( exc );
}
@@ -3823,22 +2641,29 @@
/* Stack: --> Euint16 */
/* */
static void
- Ins_MPS( INS_ARG )
+ Ins_MPS( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_MPS
+ /* Note: The point size should be irrelevant in a given font program; */
+ /* we thus decide to return only the PPEM value. */
+#if 0
+ args[0] = exc->metrics.pointSize;
+#else
+ args[0] = exc->func_cur_ppem( exc );
+#endif
}
/*************************************************************************/
/* */
- /* DUP[]: DUPlicate the top stack's element */
+ /* DUP[]: DUPlicate the stack's top element */
/* Opcode range: 0x20 */
/* Stack: StkElt --> StkElt StkElt */
/* */
static void
- Ins_DUP( INS_ARG )
+ Ins_DUP( FT_Long* args )
{
- DO_DUP
+ args[1] = args[0];
}
@@ -3849,7 +2674,7 @@
/* Stack: StkElt --> */
/* */
static void
- Ins_POP( INS_ARG )
+ Ins_POP( void )
{
/* nothing to do */
}
@@ -3862,9 +2687,9 @@
/* Stack: StkElt... --> */
/* */
static void
- Ins_CLEAR( INS_ARG )
+ Ins_CLEAR( TT_ExecContext exc )
{
- DO_CLEAR
+ exc->new_top = 0;
}
@@ -3875,9 +2700,14 @@
/* Stack: 2 * StkElt --> 2 * StkElt */
/* */
static void
- Ins_SWAP( INS_ARG )
+ Ins_SWAP( FT_Long* args )
{
- DO_SWAP
+ FT_Long L;
+
+
+ L = args[0];
+ args[0] = args[1];
+ args[1] = L;
}
@@ -3888,74 +2718,10 @@
/* Stack: --> uint32 */
/* */
static void
- Ins_DEPTH( INS_ARG )
- {
- DO_DEPTH
- }
-
-
- /*************************************************************************/
- /* */
- /* CINDEX[]: Copy INDEXed element */
- /* Opcode range: 0x25 */
- /* Stack: int32 --> StkElt */
- /* */
- static void
- Ins_CINDEX( INS_ARG )
- {
- DO_CINDEX
- }
-
-
- /*************************************************************************/
- /* */
- /* EIF[]: End IF */
- /* Opcode range: 0x59 */
- /* Stack: --> */
- /* */
- static void
- Ins_EIF( INS_ARG )
- {
- /* nothing to do */
- }
-
-
- /*************************************************************************/
- /* */
- /* JROT[]: Jump Relative On True */
- /* Opcode range: 0x78 */
- /* Stack: StkElt int32 --> */
- /* */
- static void
- Ins_JROT( INS_ARG )
+ Ins_DEPTH( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_JROT
- }
-
-
- /*************************************************************************/
- /* */
- /* JMPR[]: JuMP Relative */
- /* Opcode range: 0x1C */
- /* Stack: int32 --> */
- /* */
- static void
- Ins_JMPR( INS_ARG )
- {
- DO_JMPR
- }
-
-
- /*************************************************************************/
- /* */
- /* JROF[]: Jump Relative On False */
- /* Opcode range: 0x79 */
- /* Stack: StkElt int32 --> */
- /* */
- static void
- Ins_JROF( INS_ARG )
- {
- DO_JROF
+ args[0] = exc->top;
}
@@ -3966,9 +2732,9 @@
/* Stack: int32? int32? --> bool */
/* */
static void
- Ins_LT( INS_ARG )
+ Ins_LT( FT_Long* args )
{
- DO_LT
+ args[0] = ( args[0] < args[1] );
}
@@ -3979,9 +2745,9 @@
/* Stack: int32? int32? --> bool */
/* */
static void
- Ins_LTEQ( INS_ARG )
+ Ins_LTEQ( FT_Long* args )
{
- DO_LTEQ
+ args[0] = ( args[0] <= args[1] );
}
@@ -3992,9 +2758,9 @@
/* Stack: int32? int32? --> bool */
/* */
static void
- Ins_GT( INS_ARG )
+ Ins_GT( FT_Long* args )
{
- DO_GT
+ args[0] = ( args[0] > args[1] );
}
@@ -4005,9 +2771,9 @@
/* Stack: int32? int32? --> bool */
/* */
static void
- Ins_GTEQ( INS_ARG )
+ Ins_GTEQ( FT_Long* args )
{
- DO_GTEQ
+ args[0] = ( args[0] >= args[1] );
}
@@ -4018,9 +2784,9 @@
/* Stack: StkElt StkElt --> bool */
/* */
static void
- Ins_EQ( INS_ARG )
+ Ins_EQ( FT_Long* args )
{
- DO_EQ
+ args[0] = ( args[0] == args[1] );
}
@@ -4031,9 +2797,9 @@
/* Stack: StkElt StkElt --> bool */
/* */
static void
- Ins_NEQ( INS_ARG )
+ Ins_NEQ( FT_Long* args )
{
- DO_NEQ
+ args[0] = ( args[0] != args[1] );
}
@@ -4044,9 +2810,10 @@
/* Stack: f26.6 --> bool */
/* */
static void
- Ins_ODD( INS_ARG )
+ Ins_ODD( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_ODD
+ args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 );
}
@@ -4057,9 +2824,10 @@
/* Stack: f26.6 --> bool */
/* */
static void
- Ins_EVEN( INS_ARG )
+ Ins_EVEN( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_EVEN
+ args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 );
}
@@ -4070,9 +2838,9 @@
/* Stack: uint32 uint32 --> uint32 */
/* */
static void
- Ins_AND( INS_ARG )
+ Ins_AND( FT_Long* args )
{
- DO_AND
+ args[0] = ( args[0] && args[1] );
}
@@ -4083,9 +2851,9 @@
/* Stack: uint32 uint32 --> uint32 */
/* */
static void
- Ins_OR( INS_ARG )
+ Ins_OR( FT_Long* args )
{
- DO_OR
+ args[0] = ( args[0] || args[1] );
}
@@ -4096,9 +2864,9 @@
/* Stack: StkElt --> uint32 */
/* */
static void
- Ins_NOT( INS_ARG )
+ Ins_NOT( FT_Long* args )
{
- DO_NOT
+ args[0] = !args[0];
}
@@ -4109,9 +2877,9 @@
/* Stack: f26.6 f26.6 --> f26.6 */
/* */
static void
- Ins_ADD( INS_ARG )
+ Ins_ADD( FT_Long* args )
{
- DO_ADD
+ args[0] += args[1];
}
@@ -4122,9 +2890,9 @@
/* Stack: f26.6 f26.6 --> f26.6 */
/* */
static void
- Ins_SUB( INS_ARG )
+ Ins_SUB( FT_Long* args )
{
- DO_SUB
+ args[0] -= args[1];
}
@@ -4135,9 +2903,13 @@
/* Stack: f26.6 f26.6 --> f26.6 */
/* */
static void
- Ins_DIV( INS_ARG )
+ Ins_DIV( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_DIV
+ if ( args[1] == 0 )
+ exc->error = FT_THROW( Divide_By_Zero );
+ else
+ args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] );
}
@@ -4148,9 +2920,9 @@
/* Stack: f26.6 f26.6 --> f26.6 */
/* */
static void
- Ins_MUL( INS_ARG )
+ Ins_MUL( FT_Long* args )
{
- DO_MUL
+ args[0] = FT_MulDiv( args[0], args[1], 64L );
}
@@ -4161,9 +2933,9 @@
/* Stack: f26.6 --> f26.6 */
/* */
static void
- Ins_ABS( INS_ARG )
+ Ins_ABS( FT_Long* args )
{
- DO_ABS
+ args[0] = FT_ABS( args[0] );
}
@@ -4174,9 +2946,9 @@
/* Stack: f26.6 --> f26.6 */
/* */
static void
- Ins_NEG( INS_ARG )
+ Ins_NEG( FT_Long* args )
{
- DO_NEG
+ args[0] = -args[0];
}
@@ -4187,9 +2959,9 @@
/* Stack: f26.6 --> f26.6 */
/* */
static void
- Ins_FLOOR( INS_ARG )
+ Ins_FLOOR( FT_Long* args )
{
- DO_FLOOR
+ args[0] = FT_PIX_FLOOR( args[0] );
}
@@ -4200,9 +2972,9 @@
/* Stack: f26.6 --> f26.6 */
/* */
static void
- Ins_CEILING( INS_ARG )
+ Ins_CEILING( FT_Long* args )
{
- DO_CEILING
+ args[0] = FT_PIX_CEIL( args[0] );
}
@@ -4213,9 +2985,59 @@
/* Stack: uint32 --> uint32 */
/* */
static void
- Ins_RS( INS_ARG )
+ Ins_RS( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_RS
+#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+
+ FT_ULong I = (FT_ULong)args[0];
+
+
+ if ( BOUNDSL( I, exc->storeSize ) )
+ {
+ if ( exc->pedantic_hinting )
+ ARRAY_BOUND_ERROR;
+ else
+ args[0] = 0;
+ }
+ else
+ {
+ /* subpixel hinting - avoid Typeman Dstroke and */
+ /* IStroke and Vacuform rounds */
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ ( ( I == 24 &&
+ ( exc->face->sph_found_func_flags &
+ ( SPH_FDEF_SPACING_1 |
+ SPH_FDEF_SPACING_2 ) ) ) ||
+ ( I == 22 &&
+ ( exc->sph_in_func_flags &
+ SPH_FDEF_TYPEMAN_STROKES ) ) ||
+ ( I == 8 &&
+ ( exc->face->sph_found_func_flags &
+ SPH_FDEF_VACUFORM_ROUND_1 ) &&
+ exc->iup_called ) ) )
+ args[0] = 0;
+ else
+ args[0] = exc->storage[I];
+ }
+
+#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+
+ FT_ULong I = (FT_ULong)args[0];
+
+
+ if ( BOUNDSL( I, exc->storeSize ) )
+ {
+ if ( exc->pedantic_hinting )
+ ARRAY_BOUND_ERROR;
+ else
+ args[0] = 0;
+ }
+ else
+ args[0] = exc->storage[I];
+
+#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
}
@@ -4226,9 +3048,19 @@
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_WS( INS_ARG )
+ Ins_WS( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_WS
+ FT_ULong I = (FT_ULong)args[0];
+
+
+ if ( BOUNDSL( I, exc->storeSize ) )
+ {
+ if ( exc->pedantic_hinting )
+ ARRAY_BOUND_ERROR;
+ }
+ else
+ exc->storage[I] = args[1];
}
@@ -4239,9 +3071,19 @@
/* Stack: f26.6 uint32 --> */
/* */
static void
- Ins_WCVTP( INS_ARG )
+ Ins_WCVTP( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_WCVTP
+ FT_ULong I = (FT_ULong)args[0];
+
+
+ if ( BOUNDSL( I, exc->cvtSize ) )
+ {
+ if ( exc->pedantic_hinting )
+ ARRAY_BOUND_ERROR;
+ }
+ else
+ exc->func_write_cvt( exc, I, args[1] );
}
@@ -4252,9 +3094,19 @@
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_WCVTF( INS_ARG )
+ Ins_WCVTF( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_WCVTF
+ FT_ULong I = (FT_ULong)args[0];
+
+
+ if ( BOUNDSL( I, exc->cvtSize ) )
+ {
+ if ( exc->pedantic_hinting )
+ ARRAY_BOUND_ERROR;
+ }
+ else
+ exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale );
}
@@ -4265,9 +3117,21 @@
/* Stack: uint32 --> f26.6 */
/* */
static void
- Ins_RCVT( INS_ARG )
+ Ins_RCVT( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_RCVT
+ FT_ULong I = (FT_ULong)args[0];
+
+
+ if ( BOUNDSL( I, exc->cvtSize ) )
+ {
+ if ( exc->pedantic_hinting )
+ ARRAY_BOUND_ERROR;
+ else
+ args[0] = 0;
+ }
+ else
+ args[0] = exc->func_read_cvt( exc, I );
}
@@ -4278,7 +3142,7 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_AA( INS_ARG )
+ Ins_AA( void )
{
/* intentionally no longer supported */
}
@@ -4293,9 +3157,9 @@
/* Note: The original instruction pops a value from the stack. */
/* */
static void
- Ins_DEBUG( INS_ARG )
+ Ins_DEBUG( TT_ExecContext exc )
{
- DO_DEBUG
+ exc->error = FT_THROW( Debug_OpCode );
}
@@ -4306,9 +3170,13 @@
/* Stack: f26.6 --> f26.6 */
/* */
static void
- Ins_ROUND( INS_ARG )
+ Ins_ROUND( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_ROUND
+ args[0] = exc->func_round(
+ exc,
+ args[0],
+ exc->tt_metrics.compensations[exc->opcode - 0x68] );
}
@@ -4319,9 +3187,13 @@
/* Stack: f26.6 --> f26.6 */
/* */
static void
- Ins_NROUND( INS_ARG )
+ Ins_NROUND( TT_ExecContext exc,
+ FT_Long* args )
{
- DO_NROUND
+ args[0] = Round_None(
+ exc,
+ args[0],
+ exc->tt_metrics.compensations[exc->opcode - 0x6C] );
}
@@ -4332,9 +3204,10 @@
/* Stack: int32? int32? --> int32 */
/* */
static void
- Ins_MAX( INS_ARG )
+ Ins_MAX( FT_Long* args )
{
- DO_MAX
+ if ( args[1] > args[0] )
+ args[0] = args[1];
}
@@ -4345,22 +3218,13 @@
/* Stack: int32? int32? --> int32 */
/* */
static void
- Ins_MIN( INS_ARG )
+ Ins_MIN( FT_Long* args )
{
- DO_MIN
+ if ( args[1] < args[0] )
+ args[0] = args[1];
}
-#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
-
- /*************************************************************************/
- /* */
- /* The following functions are called as is within the switch statement. */
- /* */
- /*************************************************************************/
-
-
/*************************************************************************/
/* */
/* MINDEX[]: Move INDEXed element */
@@ -4368,44 +3232,69 @@
/* Stack: int32? --> StkElt */
/* */
static void
- Ins_MINDEX( INS_ARG )
+ Ins_MINDEX( TT_ExecContext exc,
+ FT_Long* args )
{
FT_Long L, K;
L = args[0];
- if ( L <= 0 || L > CUR.args )
+ if ( L <= 0 || L > exc->args )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
}
else
{
- K = CUR.stack[CUR.args - L];
+ K = exc->stack[exc->args - L];
- FT_ARRAY_MOVE( &CUR.stack[CUR.args - L ],
- &CUR.stack[CUR.args - L + 1],
+ FT_ARRAY_MOVE( &exc->stack[exc->args - L ],
+ &exc->stack[exc->args - L + 1],
( L - 1 ) );
- CUR.stack[CUR.args - 1] = K;
+ exc->stack[exc->args - 1] = K;
}
}
/*************************************************************************/
/* */
+ /* CINDEX[]: Copy INDEXed element */
+ /* Opcode range: 0x25 */
+ /* Stack: int32 --> StkElt */
+ /* */
+ static void
+ Ins_CINDEX( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ FT_Long L;
+
+
+ L = args[0];
+
+ if ( L <= 0 || L > exc->args )
+ {
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
+ args[0] = 0;
+ }
+ else
+ args[0] = exc->stack[exc->args - L];
+ }
+
+
+ /*************************************************************************/
+ /* */
/* ROLL[]: ROLL top three elements */
/* Opcode range: 0x8A */
/* Stack: 3 * StkElt --> 3 * StkElt */
/* */
static void
- Ins_ROLL( INS_ARG )
+ Ins_ROLL( FT_Long* args )
{
FT_Long A, B, C;
- FT_UNUSED_EXEC;
-
A = args[2];
B = args[1];
@@ -4421,34 +3310,49 @@
/* */
/* MANAGING THE FLOW OF CONTROL */
/* */
- /* Instructions appear in the specification's order. */
- /* */
/*************************************************************************/
+ /*************************************************************************/
+ /* */
+ /* SLOOP[]: Set LOOP variable */
+ /* Opcode range: 0x17 */
+ /* Stack: int32? --> */
+ /* */
+ static void
+ Ins_SLOOP( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( args[0] < 0 )
+ exc->error = FT_THROW( Bad_Argument );
+ else
+ exc->GS.loop = args[0];
+ }
+
+
static FT_Bool
- SkipCode( EXEC_OP )
+ SkipCode( TT_ExecContext exc )
{
- CUR.IP += CUR.length;
+ exc->IP += exc->length;
- if ( CUR.IP < CUR.codeSize )
+ if ( exc->IP < exc->codeSize )
{
- CUR.opcode = CUR.code[CUR.IP];
+ exc->opcode = exc->code[exc->IP];
- CUR.length = opcode_length[CUR.opcode];
- if ( CUR.length < 0 )
+ exc->length = opcode_length[exc->opcode];
+ if ( exc->length < 0 )
{
- if ( CUR.IP + 1 >= CUR.codeSize )
+ if ( exc->IP + 1 >= exc->codeSize )
goto Fail_Overflow;
- CUR.length = 2 - CUR.length * CUR.code[CUR.IP + 1];
+ exc->length = 2 - exc->length * exc->code[exc->IP + 1];
}
- if ( CUR.IP + CUR.length <= CUR.codeSize )
+ if ( exc->IP + exc->length <= exc->codeSize )
return SUCCESS;
}
Fail_Overflow:
- CUR.error = FT_THROW( Code_Overflow );
+ exc->error = FT_THROW( Code_Overflow );
return FAILURE;
}
@@ -4460,7 +3364,8 @@
/* Stack: StkElt --> */
/* */
static void
- Ins_IF( INS_ARG )
+ Ins_IF( TT_ExecContext exc,
+ FT_Long* args )
{
FT_Int nIfs;
FT_Bool Out;
@@ -4474,10 +3379,10 @@
do
{
- if ( SKIP_Code() == FAILURE )
+ if ( SkipCode( exc ) == FAILURE )
return;
- switch ( CUR.opcode )
+ switch ( exc->opcode )
{
case 0x58: /* IF */
nIfs++;
@@ -4503,21 +3408,19 @@
/* Stack: --> */
/* */
static void
- Ins_ELSE( INS_ARG )
+ Ins_ELSE( TT_ExecContext exc )
{
FT_Int nIfs;
- FT_UNUSED_ARG;
-
nIfs = 1;
do
{
- if ( SKIP_Code() == FAILURE )
+ if ( SkipCode( exc ) == FAILURE )
return;
- switch ( CUR.opcode )
+ switch ( exc->opcode )
{
case 0x58: /* IF */
nIfs++;
@@ -4533,9 +3436,71 @@
/*************************************************************************/
/* */
- /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */
+ /* EIF[]: End IF */
+ /* Opcode range: 0x59 */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_EIF( void )
+ {
+ /* nothing to do */
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* JMPR[]: JuMP Relative */
+ /* Opcode range: 0x1C */
+ /* Stack: int32 --> */
+ /* */
+ static void
+ Ins_JMPR( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( args[0] == 0 && exc->args == 0 )
+ exc->error = FT_THROW( Bad_Argument );
+ exc->IP += args[0];
+ if ( exc->IP < 0 ||
+ ( exc->callTop > 0 &&
+ exc->IP > exc->callStack[exc->callTop - 1].Def->end ) )
+ exc->error = FT_THROW( Bad_Argument );
+ exc->step_ins = FALSE;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* JROT[]: Jump Relative On True */
+ /* Opcode range: 0x78 */
+ /* Stack: StkElt int32 --> */
+ /* */
+ static void
+ Ins_JROT( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( args[1] != 0 )
+ Ins_JMPR( exc, args );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* JROF[]: Jump Relative On False */
+ /* Opcode range: 0x79 */
+ /* Stack: StkElt int32 --> */
/* */
- /* Instructions appear in the specification's order. */
+ static void
+ Ins_JROF( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( args[1] == 0 )
+ Ins_JMPR( exc, args );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */
/* */
/*************************************************************************/
@@ -4547,7 +3512,8 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_FDEF( INS_ARG )
+ Ins_FDEF( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong n;
TT_DefRecord* rec;
@@ -4657,9 +3623,9 @@
/* some font programs are broken enough to redefine functions! */
/* We will then parse the current table. */
- rec = CUR.FDefs;
- limit = rec + CUR.numFDefs;
- n = args[0];
+ rec = exc->FDefs;
+ limit = rec + exc->numFDefs;
+ n = (FT_ULong)args[0];
for ( ; rec < limit; rec++ )
{
@@ -4670,31 +3636,31 @@
if ( rec == limit )
{
/* check that there is enough room for new functions */
- if ( CUR.numFDefs >= CUR.maxFDefs )
+ if ( exc->numFDefs >= exc->maxFDefs )
{
- CUR.error = FT_THROW( Too_Many_Function_Defs );
+ exc->error = FT_THROW( Too_Many_Function_Defs );
return;
}
- CUR.numFDefs++;
+ exc->numFDefs++;
}
/* Although FDEF takes unsigned 32-bit integer, */
/* func # must be within unsigned 16-bit integer */
if ( n > 0xFFFFU )
{
- CUR.error = FT_THROW( Too_Many_Function_Defs );
+ exc->error = FT_THROW( Too_Many_Function_Defs );
return;
}
- rec->range = CUR.curRange;
+ rec->range = exc->curRange;
rec->opc = (FT_UInt16)n;
- rec->start = CUR.IP + 1;
+ rec->start = exc->IP + 1;
rec->active = TRUE;
rec->inline_delta = FALSE;
rec->sph_fdef_flags = 0x0000;
- if ( n > CUR.maxFunc )
- CUR.maxFunc = (FT_UInt16)n;
+ if ( n > exc->maxFunc )
+ exc->maxFunc = (FT_UInt16)n;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
/* We don't know for sure these are typeman functions, */
@@ -4706,7 +3672,7 @@
/* Now skip the whole function definition. */
/* We don't allow nested IDEFS & FDEFs. */
- while ( SKIP_Code() == SUCCESS )
+ while ( SkipCode( exc ) == SUCCESS )
{
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
@@ -4715,28 +3681,28 @@
{
for ( i = 0; i < opcode_patterns; i++ )
{
- if ( opcode_pointer[i] < opcode_size[i] &&
- CUR.opcode == opcode_pattern[i][opcode_pointer[i]] )
+ if ( opcode_pointer[i] < opcode_size[i] &&
+ exc->opcode == opcode_pattern[i][opcode_pointer[i]] )
{
opcode_pointer[i] += 1;
if ( opcode_pointer[i] == opcode_size[i] )
{
- FT_TRACE7(( "sph: Function %d, opcode ptrn: %d, %s %s\n",
+ FT_TRACE6(( "sph: Function %d, opcode ptrn: %d, %s %s\n",
i, n,
- CUR.face->root.family_name,
- CUR.face->root.style_name ));
+ exc->face->root.family_name,
+ exc->face->root.style_name ));
switch ( i )
{
case 0:
- rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1;
- CUR.face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1;
+ rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1;
+ exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1;
break;
case 1:
- rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2;
- CUR.face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2;
+ rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2;
+ exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2;
break;
case 2:
@@ -4744,8 +3710,8 @@
{
/* needs to be implemented still */
case 58:
- rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE;
- CUR.face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE;
+ rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE;
+ exc->face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE;
}
break;
@@ -4753,15 +3719,15 @@
switch ( n )
{
case 0:
- rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1;
- CUR.face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1;
+ rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1;
+ exc->face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1;
}
break;
case 4:
/* probably not necessary to detect anymore */
- rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1;
- CUR.face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1;
+ rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1;
+ exc->face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1;
break;
case 5:
@@ -4773,8 +3739,8 @@
case 4:
case 7:
case 8:
- rec->sph_fdef_flags |= SPH_FDEF_SPACING_1;
- CUR.face->sph_found_func_flags |= SPH_FDEF_SPACING_1;
+ rec->sph_fdef_flags |= SPH_FDEF_SPACING_1;
+ exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_1;
}
break;
@@ -4787,20 +3753,20 @@
case 4:
case 7:
case 8:
- rec->sph_fdef_flags |= SPH_FDEF_SPACING_2;
- CUR.face->sph_found_func_flags |= SPH_FDEF_SPACING_2;
+ rec->sph_fdef_flags |= SPH_FDEF_SPACING_2;
+ exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_2;
}
break;
case 7:
- rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
- CUR.face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
+ rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
+ exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
break;
case 8:
#if 0
- rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
- CUR.face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
+ rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
+ exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
#endif
break;
}
@@ -4813,22 +3779,22 @@
}
/* Set sph_compatibility_mode only when deltas are detected */
- CUR.face->sph_compatibility_mode =
- ( ( CUR.face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) |
- ( CUR.face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) );
+ exc->face->sph_compatibility_mode =
+ ( ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) |
+ ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) );
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- switch ( CUR.opcode )
+ switch ( exc->opcode )
{
case 0x89: /* IDEF */
case 0x2C: /* FDEF */
- CUR.error = FT_THROW( Nested_DEFS );
+ exc->error = FT_THROW( Nested_DEFS );
return;
case 0x2D: /* ENDF */
- rec->end = CUR.IP;
+ rec->end = exc->IP;
return;
}
}
@@ -4842,40 +3808,37 @@
/* Stack: --> */
/* */
static void
- Ins_ENDF( INS_ARG )
+ Ins_ENDF( TT_ExecContext exc )
{
TT_CallRec* pRec;
- FT_UNUSED_ARG;
-
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- CUR.sph_in_func_flags = 0x0000;
+ exc->sph_in_func_flags = 0x0000;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- if ( CUR.callTop <= 0 ) /* We encountered an ENDF without a call */
+ if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */
{
- CUR.error = FT_THROW( ENDF_In_Exec_Stream );
+ exc->error = FT_THROW( ENDF_In_Exec_Stream );
return;
}
- CUR.callTop--;
+ exc->callTop--;
- pRec = &CUR.callStack[CUR.callTop];
+ pRec = &exc->callStack[exc->callTop];
pRec->Cur_Count--;
- CUR.step_ins = FALSE;
+ exc->step_ins = FALSE;
if ( pRec->Cur_Count > 0 )
{
- CUR.callTop++;
- CUR.IP = pRec->Def->start;
+ exc->callTop++;
+ exc->IP = pRec->Def->start;
}
else
/* Loop through the current function */
- INS_Goto_CodeRange( pRec->Caller_Range,
- pRec->Caller_IP );
+ Ins_Goto_CodeRange( exc, pRec->Caller_Range, pRec->Caller_IP );
/* Exit the current call frame. */
@@ -4894,7 +3857,8 @@
/* Stack: uint32? --> */
/* */
static void
- Ins_CALL( INS_ARG )
+ Ins_CALL( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong F;
TT_CallRec* pCrec;
@@ -4903,28 +3867,28 @@
/* first of all, check the index */
- F = args[0];
- if ( BOUNDSL( F, CUR.maxFunc + 1 ) )
+ F = (FT_ULong)args[0];
+ if ( BOUNDSL( F, exc->maxFunc + 1 ) )
goto Fail;
/* Except for some old Apple fonts, all functions in a TrueType */
/* font are defined in increasing order, starting from 0. This */
/* means that we normally have */
/* */
- /* CUR.maxFunc+1 == CUR.numFDefs */
- /* CUR.FDefs[n].opc == n for n in 0..CUR.maxFunc */
+ /* exc->maxFunc+1 == exc->numFDefs */
+ /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */
/* */
/* If this isn't true, we need to look up the function table. */
- def = CUR.FDefs + F;
- if ( CUR.maxFunc + 1 != CUR.numFDefs || def->opc != F )
+ def = exc->FDefs + F;
+ if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F )
{
/* look up the FDefs table */
TT_DefRecord* limit;
- def = CUR.FDefs;
- limit = def + CUR.numFDefs;
+ def = exc->FDefs;
+ limit = def + exc->numFDefs;
while ( def < limit && def->opc != F )
def++;
@@ -4938,41 +3902,40 @@
goto Fail;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- ( ( CUR.iup_called &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) ||
- ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ ( ( exc->iup_called &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) ||
+ ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) )
goto Fail;
else
- CUR.sph_in_func_flags = def->sph_fdef_flags;
+ exc->sph_in_func_flags = def->sph_fdef_flags;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
/* check the call stack */
- if ( CUR.callTop >= CUR.callSize )
+ if ( exc->callTop >= exc->callSize )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
- pCrec = CUR.callStack + CUR.callTop;
+ pCrec = exc->callStack + exc->callTop;
- pCrec->Caller_Range = CUR.curRange;
- pCrec->Caller_IP = CUR.IP + 1;
+ pCrec->Caller_Range = exc->curRange;
+ pCrec->Caller_IP = exc->IP + 1;
pCrec->Cur_Count = 1;
pCrec->Def = def;
- CUR.callTop++;
+ exc->callTop++;
- INS_Goto_CodeRange( def->range,
- def->start );
+ Ins_Goto_CodeRange( exc, def->range, def->start );
- CUR.step_ins = FALSE;
+ exc->step_ins = FALSE;
return;
Fail:
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
}
@@ -4983,7 +3946,8 @@
/* Stack: uint32? Eint16? --> */
/* */
static void
- Ins_LOOPCALL( INS_ARG )
+ Ins_LOOPCALL( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong F;
TT_CallRec* pCrec;
@@ -4991,28 +3955,28 @@
/* first of all, check the index */
- F = args[1];
- if ( BOUNDSL( F, CUR.maxFunc + 1 ) )
+ F = (FT_ULong)args[1];
+ if ( BOUNDSL( F, exc->maxFunc + 1 ) )
goto Fail;
/* Except for some old Apple fonts, all functions in a TrueType */
/* font are defined in increasing order, starting from 0. This */
/* means that we normally have */
/* */
- /* CUR.maxFunc+1 == CUR.numFDefs */
- /* CUR.FDefs[n].opc == n for n in 0..CUR.maxFunc */
+ /* exc->maxFunc+1 == exc->numFDefs */
+ /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */
/* */
/* If this isn't true, we need to look up the function table. */
- def = CUR.FDefs + F;
- if ( CUR.maxFunc + 1 != CUR.numFDefs || def->opc != F )
+ def = exc->FDefs + F;
+ if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F )
{
/* look up the FDefs table */
TT_DefRecord* limit;
- def = CUR.FDefs;
- limit = def + CUR.numFDefs;
+ def = exc->FDefs;
+ limit = def + exc->numFDefs;
while ( def < limit && def->opc != F )
def++;
@@ -5027,40 +3991,40 @@
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
+ exc->ignore_x_mode &&
( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) )
goto Fail;
else
- CUR.sph_in_func_flags = def->sph_fdef_flags;
+ exc->sph_in_func_flags = def->sph_fdef_flags;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
/* check stack */
- if ( CUR.callTop >= CUR.callSize )
+ if ( exc->callTop >= exc->callSize )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
if ( args[0] > 0 )
{
- pCrec = CUR.callStack + CUR.callTop;
+ pCrec = exc->callStack + exc->callTop;
- pCrec->Caller_Range = CUR.curRange;
- pCrec->Caller_IP = CUR.IP + 1;
+ pCrec->Caller_Range = exc->curRange;
+ pCrec->Caller_IP = exc->IP + 1;
pCrec->Cur_Count = (FT_Int)args[0];
pCrec->Def = def;
- CUR.callTop++;
+ exc->callTop++;
- INS_Goto_CodeRange( def->range, def->start );
+ Ins_Goto_CodeRange( exc, def->range, def->start );
- CUR.step_ins = FALSE;
+ exc->step_ins = FALSE;
}
return;
Fail:
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
}
@@ -5071,7 +4035,8 @@
/* Stack: Eint8 --> */
/* */
static void
- Ins_IDEF( INS_ARG )
+ Ins_IDEF( TT_ExecContext exc,
+ FT_Long* args )
{
TT_DefRecord* def;
TT_DefRecord* limit;
@@ -5079,8 +4044,8 @@
/* First of all, look for the same function in our table */
- def = CUR.IDefs;
- limit = def + CUR.numIDefs;
+ def = exc->IDefs;
+ limit = def + exc->numIDefs;
for ( ; def < limit; def++ )
if ( def->opc == (FT_ULong)args[0] )
@@ -5089,39 +4054,39 @@
if ( def == limit )
{
/* check that there is enough room for a new instruction */
- if ( CUR.numIDefs >= CUR.maxIDefs )
+ if ( exc->numIDefs >= exc->maxIDefs )
{
- CUR.error = FT_THROW( Too_Many_Instruction_Defs );
+ exc->error = FT_THROW( Too_Many_Instruction_Defs );
return;
}
- CUR.numIDefs++;
+ exc->numIDefs++;
}
/* opcode must be unsigned 8-bit integer */
if ( 0 > args[0] || args[0] > 0x00FF )
{
- CUR.error = FT_THROW( Too_Many_Instruction_Defs );
+ exc->error = FT_THROW( Too_Many_Instruction_Defs );
return;
}
def->opc = (FT_Byte)args[0];
- def->start = CUR.IP + 1;
- def->range = CUR.curRange;
+ def->start = exc->IP + 1;
+ def->range = exc->curRange;
def->active = TRUE;
- if ( (FT_ULong)args[0] > CUR.maxIns )
- CUR.maxIns = (FT_Byte)args[0];
+ if ( (FT_ULong)args[0] > exc->maxIns )
+ exc->maxIns = (FT_Byte)args[0];
/* Now skip the whole function definition. */
/* We don't allow nested IDEFs & FDEFs. */
- while ( SKIP_Code() == SUCCESS )
+ while ( SkipCode( exc ) == SUCCESS )
{
- switch ( CUR.opcode )
+ switch ( exc->opcode )
{
case 0x89: /* IDEF */
case 0x2C: /* FDEF */
- CUR.error = FT_THROW( Nested_DEFS );
+ exc->error = FT_THROW( Nested_DEFS );
return;
case 0x2D: /* ENDF */
return;
@@ -5134,8 +4099,6 @@
/* */
/* PUSHING DATA ONTO THE INTERPRETER STACK */
/* */
- /* Instructions appear in the specification's order. */
- /* */
/*************************************************************************/
@@ -5146,23 +4109,24 @@
/* Stack: --> uint32... */
/* */
static void
- Ins_NPUSHB( INS_ARG )
+ Ins_NPUSHB( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort L, K;
- L = (FT_UShort)CUR.code[CUR.IP + 1];
+ L = (FT_UShort)exc->code[exc->IP + 1];
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
+ if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
for ( K = 1; K <= L; K++ )
- args[K - 1] = CUR.code[CUR.IP + K + 1];
+ args[K - 1] = exc->code[exc->IP + K + 1];
- CUR.new_top += L;
+ exc->new_top += L;
}
@@ -5173,26 +4137,27 @@
/* Stack: --> int32... */
/* */
static void
- Ins_NPUSHW( INS_ARG )
+ Ins_NPUSHW( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort L, K;
- L = (FT_UShort)CUR.code[CUR.IP + 1];
+ L = (FT_UShort)exc->code[exc->IP + 1];
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
+ if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
- CUR.IP += 2;
+ exc->IP += 2;
for ( K = 0; K < L; K++ )
- args[K] = GET_ShortIns();
+ args[K] = GetShortIns( exc );
- CUR.step_ins = FALSE;
- CUR.new_top += L;
+ exc->step_ins = FALSE;
+ exc->new_top += L;
}
@@ -5203,21 +4168,22 @@
/* Stack: --> uint32... */
/* */
static void
- Ins_PUSHB( INS_ARG )
+ Ins_PUSHB( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort L, K;
- L = (FT_UShort)( CUR.opcode - 0xB0 + 1 );
+ L = (FT_UShort)( exc->opcode - 0xB0 + 1 );
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
+ if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
for ( K = 1; K <= L; K++ )
- args[K - 1] = CUR.code[CUR.IP + K];
+ args[K - 1] = exc->code[exc->IP + K];
}
@@ -5228,25 +4194,26 @@
/* Stack: --> int32... */
/* */
static void
- Ins_PUSHW( INS_ARG )
+ Ins_PUSHW( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort L, K;
- L = (FT_UShort)( CUR.opcode - 0xB8 + 1 );
+ L = (FT_UShort)( exc->opcode - 0xB8 + 1 );
- if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) )
+ if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
- CUR.IP++;
+ exc->IP++;
for ( K = 0; K < L; K++ )
- args[K] = GET_ShortIns();
+ args[K] = GetShortIns( exc );
- CUR.step_ins = FALSE;
+ exc->step_ins = FALSE;
}
@@ -5254,9 +4221,559 @@
/* */
/* MANAGING THE GRAPHICS STATE */
/* */
- /* Instructions appear in the specs' order. */
+ /*************************************************************************/
+
+
+ static FT_Bool
+ Ins_SxVTL( TT_ExecContext exc,
+ FT_UShort aIdx1,
+ FT_UShort aIdx2,
+ FT_UnitVector* Vec )
+ {
+ FT_Long A, B, C;
+ FT_Vector* p1;
+ FT_Vector* p2;
+
+ FT_Byte opcode = exc->opcode;
+
+
+ if ( BOUNDS( aIdx1, exc->zp2.n_points ) ||
+ BOUNDS( aIdx2, exc->zp1.n_points ) )
+ {
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
+ return FAILURE;
+ }
+
+ p1 = exc->zp1.cur + aIdx2;
+ p2 = exc->zp2.cur + aIdx1;
+
+ A = p1->x - p2->x;
+ B = p1->y - p2->y;
+
+ /* If p1 == p2, SPvTL and SFvTL behave the same as */
+ /* SPvTCA[X] and SFvTCA[X], respectively. */
+ /* */
+ /* Confirmed by Greg Hitchcock. */
+
+ if ( A == 0 && B == 0 )
+ {
+ A = 0x4000;
+ opcode = 0;
+ }
+
+ if ( ( opcode & 1 ) != 0 )
+ {
+ C = B; /* counter clockwise rotation */
+ B = A;
+ A = -C;
+ }
+
+ Normalize( A, B, Vec );
+
+ return SUCCESS;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */
+ /* Opcode range: 0x00-0x01 */
+ /* Stack: --> */
+ /* */
+ /* SPvTCA[a]: Set PVector to Coordinate Axis */
+ /* Opcode range: 0x02-0x03 */
+ /* Stack: --> */
+ /* */
+ /* SFvTCA[a]: Set FVector to Coordinate Axis */
+ /* Opcode range: 0x04-0x05 */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_SxyTCA( TT_ExecContext exc )
+ {
+ FT_Short AA, BB;
+
+ FT_Byte opcode = exc->opcode;
+
+
+ AA = (FT_Short)( ( opcode & 1 ) << 14 );
+ BB = (FT_Short)( AA ^ 0x4000 );
+
+ if ( opcode < 4 )
+ {
+ exc->GS.projVector.x = AA;
+ exc->GS.projVector.y = BB;
+
+ exc->GS.dualVector.x = AA;
+ exc->GS.dualVector.y = BB;
+ }
+ else
+ GUESS_VECTOR( projVector );
+
+ if ( ( opcode & 2 ) == 0 )
+ {
+ exc->GS.freeVector.x = AA;
+ exc->GS.freeVector.y = BB;
+ }
+ else
+ GUESS_VECTOR( freeVector );
+
+ Compute_Funcs( exc );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SPvTL[a]: Set PVector To Line */
+ /* Opcode range: 0x06-0x07 */
+ /* Stack: uint32 uint32 --> */
+ /* */
+ static void
+ Ins_SPVTL( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( Ins_SxVTL( exc,
+ (FT_UShort)args[1],
+ (FT_UShort)args[0],
+ &exc->GS.projVector ) == SUCCESS )
+ {
+ exc->GS.dualVector = exc->GS.projVector;
+ GUESS_VECTOR( freeVector );
+ Compute_Funcs( exc );
+ }
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SFvTL[a]: Set FVector To Line */
+ /* Opcode range: 0x08-0x09 */
+ /* Stack: uint32 uint32 --> */
+ /* */
+ static void
+ Ins_SFVTL( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( Ins_SxVTL( exc,
+ (FT_UShort)args[1],
+ (FT_UShort)args[0],
+ &exc->GS.freeVector ) == SUCCESS )
+ {
+ GUESS_VECTOR( projVector );
+ Compute_Funcs( exc );
+ }
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SFvTPv[]: Set FVector To PVector */
+ /* Opcode range: 0x0E */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_SFVTPV( TT_ExecContext exc )
+ {
+ GUESS_VECTOR( projVector );
+ exc->GS.freeVector = exc->GS.projVector;
+ Compute_Funcs( exc );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SPvFS[]: Set PVector From Stack */
+ /* Opcode range: 0x0A */
+ /* Stack: f2.14 f2.14 --> */
+ /* */
+ static void
+ Ins_SPVFS( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ FT_Short S;
+ FT_Long X, Y;
+
+
+ /* Only use low 16bits, then sign extend */
+ S = (FT_Short)args[1];
+ Y = (FT_Long)S;
+ S = (FT_Short)args[0];
+ X = (FT_Long)S;
+
+ Normalize( X, Y, &exc->GS.projVector );
+
+ exc->GS.dualVector = exc->GS.projVector;
+ GUESS_VECTOR( freeVector );
+ Compute_Funcs( exc );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SFvFS[]: Set FVector From Stack */
+ /* Opcode range: 0x0B */
+ /* Stack: f2.14 f2.14 --> */
/* */
+ static void
+ Ins_SFVFS( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ FT_Short S;
+ FT_Long X, Y;
+
+
+ /* Only use low 16bits, then sign extend */
+ S = (FT_Short)args[1];
+ Y = (FT_Long)S;
+ S = (FT_Short)args[0];
+ X = S;
+
+ Normalize( X, Y, &exc->GS.freeVector );
+ GUESS_VECTOR( projVector );
+ Compute_Funcs( exc );
+ }
+
+
/*************************************************************************/
+ /* */
+ /* GPv[]: Get Projection Vector */
+ /* Opcode range: 0x0C */
+ /* Stack: ef2.14 --> ef2.14 */
+ /* */
+ static void
+ Ins_GPV( TT_ExecContext exc,
+ FT_Long* args )
+ {
+#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
+ if ( exc->face->unpatented_hinting )
+ {
+ args[0] = exc->GS.both_x_axis ? 0x4000 : 0;
+ args[1] = exc->GS.both_x_axis ? 0 : 0x4000;
+ }
+ else
+ {
+ args[0] = exc->GS.projVector.x;
+ args[1] = exc->GS.projVector.y;
+ }
+#else
+ args[0] = exc->GS.projVector.x;
+ args[1] = exc->GS.projVector.y;
+#endif
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* GFv[]: Get Freedom Vector */
+ /* Opcode range: 0x0D */
+ /* Stack: ef2.14 --> ef2.14 */
+ /* */
+ static void
+ Ins_GFV( TT_ExecContext exc,
+ FT_Long* args )
+ {
+#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
+ if ( exc->face->unpatented_hinting )
+ {
+ args[0] = exc->GS.both_x_axis ? 0x4000 : 0;
+ args[1] = exc->GS.both_x_axis ? 0 : 0x4000;
+ }
+ else
+ {
+ args[0] = exc->GS.freeVector.x;
+ args[1] = exc->GS.freeVector.y;
+ }
+#else
+ args[0] = exc->GS.freeVector.x;
+ args[1] = exc->GS.freeVector.y;
+#endif
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SRP0[]: Set Reference Point 0 */
+ /* Opcode range: 0x10 */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_SRP0( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.rp0 = (FT_UShort)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SRP1[]: Set Reference Point 1 */
+ /* Opcode range: 0x11 */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_SRP1( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.rp1 = (FT_UShort)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SRP2[]: Set Reference Point 2 */
+ /* Opcode range: 0x12 */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_SRP2( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.rp2 = (FT_UShort)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SMD[]: Set Minimum Distance */
+ /* Opcode range: 0x1A */
+ /* Stack: f26.6 --> */
+ /* */
+ static void
+ Ins_SMD( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.minimum_distance = args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SCVTCI[]: Set Control Value Table Cut In */
+ /* Opcode range: 0x1D */
+ /* Stack: f26.6 --> */
+ /* */
+ static void
+ Ins_SCVTCI( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.control_value_cutin = (FT_F26Dot6)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SSWCI[]: Set Single Width Cut In */
+ /* Opcode range: 0x1E */
+ /* Stack: f26.6 --> */
+ /* */
+ static void
+ Ins_SSWCI( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.single_width_cutin = (FT_F26Dot6)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SSW[]: Set Single Width */
+ /* Opcode range: 0x1F */
+ /* Stack: int32? --> */
+ /* */
+ static void
+ Ins_SSW( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.single_width_value = FT_MulFix( args[0],
+ exc->tt_metrics.scale );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* FLIPON[]: Set auto-FLIP to ON */
+ /* Opcode range: 0x4D */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_FLIPON( TT_ExecContext exc )
+ {
+ exc->GS.auto_flip = TRUE;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* FLIPOFF[]: Set auto-FLIP to OFF */
+ /* Opcode range: 0x4E */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_FLIPOFF( TT_ExecContext exc )
+ {
+ exc->GS.auto_flip = FALSE;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SANGW[]: Set ANGle Weight */
+ /* Opcode range: 0x7E */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_SANGW( void )
+ {
+ /* instruction not supported anymore */
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SDB[]: Set Delta Base */
+ /* Opcode range: 0x5E */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_SDB( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ exc->GS.delta_base = (FT_UShort)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SDS[]: Set Delta Shift */
+ /* Opcode range: 0x5F */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_SDS( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ if ( (FT_ULong)args[0] > 6UL )
+ exc->error = FT_THROW( Bad_Argument );
+ else
+ exc->GS.delta_shift = (FT_UShort)args[0];
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RTHG[]: Round To Half Grid */
+ /* Opcode range: 0x19 */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_RTHG( TT_ExecContext exc )
+ {
+ exc->GS.round_state = TT_Round_To_Half_Grid;
+ exc->func_round = (TT_Round_Func)Round_To_Half_Grid;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RTG[]: Round To Grid */
+ /* Opcode range: 0x18 */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_RTG( TT_ExecContext exc )
+ {
+ exc->GS.round_state = TT_Round_To_Grid;
+ exc->func_round = (TT_Round_Func)Round_To_Grid;
+ }
+
+
+ /*************************************************************************/
+ /* RTDG[]: Round To Double Grid */
+ /* Opcode range: 0x3D */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_RTDG( TT_ExecContext exc )
+ {
+ exc->GS.round_state = TT_Round_To_Double_Grid;
+ exc->func_round = (TT_Round_Func)Round_To_Double_Grid;
+ }
+
+
+ /*************************************************************************/
+ /* RUTG[]: Round Up To Grid */
+ /* Opcode range: 0x7C */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_RUTG( TT_ExecContext exc )
+ {
+ exc->GS.round_state = TT_Round_Up_To_Grid;
+ exc->func_round = (TT_Round_Func)Round_Up_To_Grid;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RDTG[]: Round Down To Grid */
+ /* Opcode range: 0x7D */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_RDTG( TT_ExecContext exc )
+ {
+ exc->GS.round_state = TT_Round_Down_To_Grid;
+ exc->func_round = (TT_Round_Func)Round_Down_To_Grid;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* ROFF[]: Round OFF */
+ /* Opcode range: 0x7A */
+ /* Stack: --> */
+ /* */
+ static void
+ Ins_ROFF( TT_ExecContext exc )
+ {
+ exc->GS.round_state = TT_Round_Off;
+ exc->func_round = (TT_Round_Func)Round_None;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* SROUND[]: Super ROUND */
+ /* Opcode range: 0x76 */
+ /* Stack: Eint8 --> */
+ /* */
+ static void
+ Ins_SROUND( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ SetSuperRound( exc, 0x4000, args[0] );
+
+ exc->GS.round_state = TT_Round_Super;
+ exc->func_round = (TT_Round_Func)Round_Super;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* S45ROUND[]: Super ROUND 45 degrees */
+ /* Opcode range: 0x77 */
+ /* Stack: uint32 --> */
+ /* */
+ static void
+ Ins_S45ROUND( TT_ExecContext exc,
+ FT_Long* args )
+ {
+ SetSuperRound( exc, 0x2D41, args[0] );
+
+ exc->GS.round_state = TT_Round_Super_45;
+ exc->func_round = (TT_Round_Func)Round_Super_45;
+ }
/*************************************************************************/
@@ -5269,7 +4786,8 @@
/* along the dual projection vector! */
/* */
static void
- Ins_GC( INS_ARG )
+ Ins_GC( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong L;
FT_F26Dot6 R;
@@ -5277,18 +4795,18 @@
L = (FT_ULong)args[0];
- if ( BOUNDSL( L, CUR.zp2.n_points ) )
+ if ( BOUNDSL( L, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
R = 0;
}
else
{
- if ( CUR.opcode & 1 )
- R = CUR_fast_dualproj( &CUR.zp2.org[L] );
+ if ( exc->opcode & 1 )
+ R = FAST_DUALPROJ( &exc->zp2.org[L] );
else
- R = CUR_fast_project( &CUR.zp2.cur[L] );
+ R = FAST_PROJECT( &exc->zp2.cur[L] );
}
args[0] = R;
@@ -5306,7 +4824,8 @@
/* OA := OA + ( value - OA.p )/( f.p ) * f */
/* */
static void
- Ins_SCFS( INS_ARG )
+ Ins_SCFS( TT_ExecContext exc,
+ FT_Long* args )
{
FT_Long K;
FT_UShort L;
@@ -5314,21 +4833,21 @@
L = (FT_UShort)args[0];
- if ( BOUNDS( L, CUR.zp2.n_points ) )
+ if ( BOUNDS( L, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- K = CUR_fast_project( &CUR.zp2.cur[L] );
+ K = FAST_PROJECT( &exc->zp2.cur[L] );
- CUR_Func_move( &CUR.zp2, L, args[1] - K );
+ exc->func_move( exc, &exc->zp2, L, args[1] - K );
/* UNDOCUMENTED! The MS rasterizer does that with */
/* twilight points (confirmed by Greg Hitchcock) */
- if ( CUR.GS.gep2 == 0 )
- CUR.zp2.org[L] = CUR.zp2.cur[L];
+ if ( exc->GS.gep2 == 0 )
+ exc->zp2.org[L] = exc->zp2.cur[L];
}
@@ -5348,7 +4867,8 @@
/* XXX: UNDOCUMENTED: `zp0 - zp1', and not `zp2 - zp1! */
/* */
static void
- Ins_MD( INS_ARG )
+ Ins_MD( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort K, L;
FT_F26Dot6 D;
@@ -5357,50 +4877,50 @@
K = (FT_UShort)args[1];
L = (FT_UShort)args[0];
- if ( BOUNDS( L, CUR.zp0.n_points ) ||
- BOUNDS( K, CUR.zp1.n_points ) )
+ if ( BOUNDS( L, exc->zp0.n_points ) ||
+ BOUNDS( K, exc->zp1.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
D = 0;
}
else
{
- if ( CUR.opcode & 1 )
- D = CUR_Func_project( CUR.zp0.cur + L, CUR.zp1.cur + K );
+ if ( exc->opcode & 1 )
+ D = PROJECT( exc->zp0.cur + L, exc->zp1.cur + K );
else
{
/* XXX: UNDOCUMENTED: twilight zone special case */
- if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 )
+ if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 )
{
- FT_Vector* vec1 = CUR.zp0.org + L;
- FT_Vector* vec2 = CUR.zp1.org + K;
+ FT_Vector* vec1 = exc->zp0.org + L;
+ FT_Vector* vec2 = exc->zp1.org + K;
- D = CUR_Func_dualproj( vec1, vec2 );
+ D = DUALPROJ( vec1, vec2 );
}
else
{
- FT_Vector* vec1 = CUR.zp0.orus + L;
- FT_Vector* vec2 = CUR.zp1.orus + K;
+ FT_Vector* vec1 = exc->zp0.orus + L;
+ FT_Vector* vec2 = exc->zp1.orus + K;
- if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
+ if ( exc->metrics.x_scale == exc->metrics.y_scale )
{
/* this should be faster */
- D = CUR_Func_dualproj( vec1, vec2 );
- D = FT_MulFix( D, CUR.metrics.x_scale );
+ D = DUALPROJ( vec1, vec2 );
+ D = FT_MulFix( D, exc->metrics.x_scale );
}
else
{
FT_Vector vec;
- vec.x = FT_MulFix( vec1->x - vec2->x, CUR.metrics.x_scale );
- vec.y = FT_MulFix( vec1->y - vec2->y, CUR.metrics.y_scale );
+ vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale );
+ vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale );
- D = CUR_fast_dualproj( &vec );
+ D = FAST_DUALPROJ( &vec );
}
}
}
@@ -5408,8 +4928,9 @@
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
/* Disable Type 2 Vacuform Rounds - e.g. Arial Narrow */
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode && FT_ABS( D ) == 64 )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ FT_ABS( D ) == 64 )
D += 1;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
@@ -5419,61 +4940,63 @@
/*************************************************************************/
/* */
- /* SDPVTL[a]: Set Dual PVector to Line */
+ /* SDPvTL[a]: Set Dual PVector to Line */
/* Opcode range: 0x86-0x87 */
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_SDPVTL( INS_ARG )
+ Ins_SDPVTL( TT_ExecContext exc,
+ FT_Long* args )
{
FT_Long A, B, C;
FT_UShort p1, p2; /* was FT_Int in pas type ERROR */
- FT_Int aOpc = CUR.opcode;
+
+ FT_Byte opcode = exc->opcode;
p1 = (FT_UShort)args[1];
p2 = (FT_UShort)args[0];
- if ( BOUNDS( p2, CUR.zp1.n_points ) ||
- BOUNDS( p1, CUR.zp2.n_points ) )
+ if ( BOUNDS( p2, exc->zp1.n_points ) ||
+ BOUNDS( p1, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
{
- FT_Vector* v1 = CUR.zp1.org + p2;
- FT_Vector* v2 = CUR.zp2.org + p1;
+ FT_Vector* v1 = exc->zp1.org + p2;
+ FT_Vector* v2 = exc->zp2.org + p1;
A = v1->x - v2->x;
B = v1->y - v2->y;
- /* If v1 == v2, SDPVTL behaves the same as */
+ /* If v1 == v2, SDPvTL behaves the same as */
/* SVTCA[X], respectively. */
/* */
/* Confirmed by Greg Hitchcock. */
if ( A == 0 && B == 0 )
{
- A = 0x4000;
- aOpc = 0;
+ A = 0x4000;
+ opcode = 0;
}
}
- if ( ( aOpc & 1 ) != 0 )
+ if ( ( opcode & 1 ) != 0 )
{
C = B; /* counter clockwise rotation */
B = A;
A = -C;
}
- NORMalize( A, B, &CUR.GS.dualVector );
+ Normalize( A, B, &exc->GS.dualVector );
{
- FT_Vector* v1 = CUR.zp1.cur + p2;
- FT_Vector* v2 = CUR.zp2.cur + p1;
+ FT_Vector* v1 = exc->zp1.cur + p2;
+ FT_Vector* v2 = exc->zp2.cur + p1;
A = v1->x - v2->x;
@@ -5481,23 +5004,21 @@
if ( A == 0 && B == 0 )
{
- A = 0x4000;
- aOpc = 0;
+ A = 0x4000;
+ opcode = 0;
}
}
- if ( ( aOpc & 1 ) != 0 )
+ if ( ( opcode & 1 ) != 0 )
{
C = B; /* counter clockwise rotation */
B = A;
A = -C;
}
- NORMalize( A, B, &CUR.GS.projVector );
-
+ Normalize( A, B, &exc->GS.projVector );
GUESS_VECTOR( freeVector );
-
- COMPUTE_Funcs();
+ Compute_Funcs( exc );
}
@@ -5508,25 +5029,26 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_SZP0( INS_ARG )
+ Ins_SZP0( TT_ExecContext exc,
+ FT_Long* args )
{
switch ( (FT_Int)args[0] )
{
case 0:
- CUR.zp0 = CUR.twilight;
+ exc->zp0 = exc->twilight;
break;
case 1:
- CUR.zp0 = CUR.pts;
+ exc->zp0 = exc->pts;
break;
default:
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- CUR.GS.gep0 = (FT_UShort)args[0];
+ exc->GS.gep0 = (FT_UShort)args[0];
}
@@ -5537,25 +5059,26 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_SZP1( INS_ARG )
+ Ins_SZP1( TT_ExecContext exc,
+ FT_Long* args )
{
switch ( (FT_Int)args[0] )
{
case 0:
- CUR.zp1 = CUR.twilight;
+ exc->zp1 = exc->twilight;
break;
case 1:
- CUR.zp1 = CUR.pts;
+ exc->zp1 = exc->pts;
break;
default:
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- CUR.GS.gep1 = (FT_UShort)args[0];
+ exc->GS.gep1 = (FT_UShort)args[0];
}
@@ -5566,25 +5089,26 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_SZP2( INS_ARG )
+ Ins_SZP2( TT_ExecContext exc,
+ FT_Long* args )
{
switch ( (FT_Int)args[0] )
{
case 0:
- CUR.zp2 = CUR.twilight;
+ exc->zp2 = exc->twilight;
break;
case 1:
- CUR.zp2 = CUR.pts;
+ exc->zp2 = exc->pts;
break;
default:
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- CUR.GS.gep2 = (FT_UShort)args[0];
+ exc->GS.gep2 = (FT_UShort)args[0];
}
@@ -5595,30 +5119,31 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_SZPS( INS_ARG )
+ Ins_SZPS( TT_ExecContext exc,
+ FT_Long* args )
{
switch ( (FT_Int)args[0] )
{
case 0:
- CUR.zp0 = CUR.twilight;
+ exc->zp0 = exc->twilight;
break;
case 1:
- CUR.zp0 = CUR.pts;
+ exc->zp0 = exc->pts;
break;
default:
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- CUR.zp1 = CUR.zp0;
- CUR.zp2 = CUR.zp0;
+ exc->zp1 = exc->zp0;
+ exc->zp2 = exc->zp0;
- CUR.GS.gep0 = (FT_UShort)args[0];
- CUR.GS.gep1 = (FT_UShort)args[0];
- CUR.GS.gep2 = (FT_UShort)args[0];
+ exc->GS.gep0 = (FT_UShort)args[0];
+ exc->GS.gep1 = (FT_UShort)args[0];
+ exc->GS.gep2 = (FT_UShort)args[0];
}
@@ -5629,26 +5154,47 @@
/* Stack: int32 int32 --> */
/* */
static void
- Ins_INSTCTRL( INS_ARG )
+ Ins_INSTCTRL( TT_ExecContext exc,
+ FT_Long* args )
{
- FT_Long K, L;
+ FT_Long K, L, Kf;
K = args[1];
L = args[0];
- if ( K < 1 || K > 2 )
+ /* selector values cannot be `OR'ed; */
+ /* they are indices starting with index 1, not flags */
+ if ( K < 1 || K > 3 )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
+ /* convert index to flag value */
+ Kf = 1 << ( K - 1 );
+
if ( L != 0 )
- L = K;
+ {
+ /* arguments to selectors look like flag values */
+ if ( L != Kf )
+ {
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
+ return;
+ }
+ }
- CUR.GS.instruct_control = FT_BOOL(
- ( (FT_Byte)CUR.GS.instruct_control & ~(FT_Byte)K ) | (FT_Byte)L );
+ exc->GS.instruct_control &= ~(FT_Byte)Kf;
+ exc->GS.instruct_control |= (FT_Byte)L;
+
+#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ /* INSTCTRL modifying flag 3 also has an effect */
+ /* outside of the CVT program */
+ if ( K == 3 )
+ exc->ignore_x_mode = FT_BOOL( L == 4 );
+#endif
}
@@ -5659,7 +5205,8 @@
/* Stack: uint32? --> */
/* */
static void
- Ins_SCANCTRL( INS_ARG )
+ Ins_SCANCTRL( TT_ExecContext exc,
+ FT_Long* args )
{
FT_Int A;
@@ -5669,32 +5216,32 @@
if ( A == 0xFF )
{
- CUR.GS.scan_control = TRUE;
+ exc->GS.scan_control = TRUE;
return;
}
else if ( A == 0 )
{
- CUR.GS.scan_control = FALSE;
+ exc->GS.scan_control = FALSE;
return;
}
- if ( ( args[0] & 0x100 ) != 0 && CUR.tt_metrics.ppem <= A )
- CUR.GS.scan_control = TRUE;
+ if ( ( args[0] & 0x100 ) != 0 && exc->tt_metrics.ppem <= A )
+ exc->GS.scan_control = TRUE;
- if ( ( args[0] & 0x200 ) != 0 && CUR.tt_metrics.rotated )
- CUR.GS.scan_control = TRUE;
+ if ( ( args[0] & 0x200 ) != 0 && exc->tt_metrics.rotated )
+ exc->GS.scan_control = TRUE;
- if ( ( args[0] & 0x400 ) != 0 && CUR.tt_metrics.stretched )
- CUR.GS.scan_control = TRUE;
+ if ( ( args[0] & 0x400 ) != 0 && exc->tt_metrics.stretched )
+ exc->GS.scan_control = TRUE;
- if ( ( args[0] & 0x800 ) != 0 && CUR.tt_metrics.ppem > A )
- CUR.GS.scan_control = FALSE;
+ if ( ( args[0] & 0x800 ) != 0 && exc->tt_metrics.ppem > A )
+ exc->GS.scan_control = FALSE;
- if ( ( args[0] & 0x1000 ) != 0 && CUR.tt_metrics.rotated )
- CUR.GS.scan_control = FALSE;
+ if ( ( args[0] & 0x1000 ) != 0 && exc->tt_metrics.rotated )
+ exc->GS.scan_control = FALSE;
- if ( ( args[0] & 0x2000 ) != 0 && CUR.tt_metrics.stretched )
- CUR.GS.scan_control = FALSE;
+ if ( ( args[0] & 0x2000 ) != 0 && exc->tt_metrics.stretched )
+ exc->GS.scan_control = FALSE;
}
@@ -5705,10 +5252,11 @@
/* Stack: uint32? --> */
/* */
static void
- Ins_SCANTYPE( INS_ARG )
+ Ins_SCANTYPE( TT_ExecContext exc,
+ FT_Long* args )
{
if ( args[0] >= 0 )
- CUR.GS.scan_type = (FT_Int)args[0];
+ exc->GS.scan_type = (FT_Int)args[0];
}
@@ -5716,8 +5264,6 @@
/* */
/* MANAGING OUTLINES */
/* */
- /* Instructions appear in the specification's order. */
- /* */
/*************************************************************************/
@@ -5728,43 +5274,41 @@
/* Stack: uint32... --> */
/* */
static void
- Ins_FLIPPT( INS_ARG )
+ Ins_FLIPPT( TT_ExecContext exc )
{
FT_UShort point;
- FT_UNUSED_ARG;
-
- if ( CUR.top < CUR.GS.loop )
+ if ( exc->top < exc->GS.loop )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Too_Few_Arguments );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Too_Few_Arguments );
goto Fail;
}
- while ( CUR.GS.loop > 0 )
+ while ( exc->GS.loop > 0 )
{
- CUR.args--;
+ exc->args--;
- point = (FT_UShort)CUR.stack[CUR.args];
+ point = (FT_UShort)exc->stack[exc->args];
- if ( BOUNDS( point, CUR.pts.n_points ) )
+ if ( BOUNDS( point, exc->pts.n_points ) )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
}
else
- CUR.pts.tags[point] ^= FT_CURVE_TAG_ON;
+ exc->pts.tags[point] ^= FT_CURVE_TAG_ON;
- CUR.GS.loop--;
+ exc->GS.loop--;
}
Fail:
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
+ exc->GS.loop = 1;
+ exc->new_top = exc->args;
}
@@ -5775,7 +5319,8 @@
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_FLIPRGON( INS_ARG )
+ Ins_FLIPRGON( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort I, K, L;
@@ -5783,16 +5328,16 @@
K = (FT_UShort)args[1];
L = (FT_UShort)args[0];
- if ( BOUNDS( K, CUR.pts.n_points ) ||
- BOUNDS( L, CUR.pts.n_points ) )
+ if ( BOUNDS( K, exc->pts.n_points ) ||
+ BOUNDS( L, exc->pts.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
for ( I = L; I <= K; I++ )
- CUR.pts.tags[I] |= FT_CURVE_TAG_ON;
+ exc->pts.tags[I] |= FT_CURVE_TAG_ON;
}
@@ -5803,7 +5348,8 @@
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_FLIPRGOFF( INS_ARG )
+ Ins_FLIPRGOFF( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort I, K, L;
@@ -5811,45 +5357,46 @@
K = (FT_UShort)args[1];
L = (FT_UShort)args[0];
- if ( BOUNDS( K, CUR.pts.n_points ) ||
- BOUNDS( L, CUR.pts.n_points ) )
+ if ( BOUNDS( K, exc->pts.n_points ) ||
+ BOUNDS( L, exc->pts.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
for ( I = L; I <= K; I++ )
- CUR.pts.tags[I] &= ~FT_CURVE_TAG_ON;
+ exc->pts.tags[I] &= ~FT_CURVE_TAG_ON;
}
static FT_Bool
- Compute_Point_Displacement( EXEC_OP_ FT_F26Dot6* x,
- FT_F26Dot6* y,
- TT_GlyphZone zone,
- FT_UShort* refp )
+ Compute_Point_Displacement( TT_ExecContext exc,
+ FT_F26Dot6* x,
+ FT_F26Dot6* y,
+ TT_GlyphZone zone,
+ FT_UShort* refp )
{
TT_GlyphZoneRec zp;
FT_UShort p;
FT_F26Dot6 d;
- if ( CUR.opcode & 1 )
+ if ( exc->opcode & 1 )
{
- zp = CUR.zp0;
- p = CUR.GS.rp1;
+ zp = exc->zp0;
+ p = exc->GS.rp1;
}
else
{
- zp = CUR.zp1;
- p = CUR.GS.rp2;
+ zp = exc->zp1;
+ p = exc->GS.rp2;
}
if ( BOUNDS( p, zp.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
*refp = 0;
return FAILURE;
}
@@ -5857,12 +5404,12 @@
*zone = zp;
*refp = p;
- d = CUR_Func_project( zp.cur + p, zp.org + p );
+ d = PROJECT( zp.cur + p, zp.org + p );
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
- if ( CUR.GS.both_x_axis )
+ if ( exc->GS.both_x_axis )
{
*x = d;
*y = 0;
@@ -5876,8 +5423,8 @@
else
#endif
{
- *x = FT_MulDiv( d, (FT_Long)CUR.GS.freeVector.x, CUR.F_dot_P );
- *y = FT_MulDiv( d, (FT_Long)CUR.GS.freeVector.y, CUR.F_dot_P );
+ *x = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.x, exc->F_dot_P );
+ *y = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.y, exc->F_dot_P );
}
return SUCCESS;
@@ -5885,42 +5432,43 @@
static void
- Move_Zp2_Point( EXEC_OP_ FT_UShort point,
- FT_F26Dot6 dx,
- FT_F26Dot6 dy,
- FT_Bool touch )
+ Move_Zp2_Point( TT_ExecContext exc,
+ FT_UShort point,
+ FT_F26Dot6 dx,
+ FT_F26Dot6 dy,
+ FT_Bool touch )
{
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
- if ( CUR.GS.both_x_axis )
+ if ( exc->GS.both_x_axis )
{
- CUR.zp2.cur[point].x += dx;
+ exc->zp2.cur[point].x += dx;
if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
+ exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
}
else
{
- CUR.zp2.cur[point].y += dy;
+ exc->zp2.cur[point].y += dy;
if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
+ exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
return;
}
#endif
- if ( CUR.GS.freeVector.x != 0 )
+ if ( exc->GS.freeVector.x != 0 )
{
- CUR.zp2.cur[point].x += dx;
+ exc->zp2.cur[point].x += dx;
if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
+ exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X;
}
- if ( CUR.GS.freeVector.y != 0 )
+ if ( exc->GS.freeVector.y != 0 )
{
- CUR.zp2.cur[point].y += dy;
+ exc->zp2.cur[point].y += dy;
if ( touch )
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
+ exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y;
}
}
@@ -5932,57 +5480,54 @@
/* Stack: uint32... --> */
/* */
static void
- Ins_SHP( INS_ARG )
+ Ins_SHP( TT_ExecContext exc )
{
TT_GlyphZoneRec zp;
FT_UShort refp;
- FT_F26Dot6 dx,
- dy;
+ FT_F26Dot6 dx, dy;
FT_UShort point;
- FT_UNUSED_ARG;
-
- if ( CUR.top < CUR.GS.loop )
+ if ( exc->top < exc->GS.loop )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
+ if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) )
return;
- while ( CUR.GS.loop > 0 )
+ while ( exc->GS.loop > 0 )
{
- CUR.args--;
- point = (FT_UShort)CUR.stack[CUR.args];
+ exc->args--;
+ point = (FT_UShort)exc->stack[exc->args];
- if ( BOUNDS( point, CUR.zp2.n_points ) )
+ if ( BOUNDS( point, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
}
else
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
/* doesn't follow Cleartype spec but produces better result */
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode )
- MOVE_Zp2_Point( point, 0, dy, TRUE );
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode )
+ Move_Zp2_Point( exc, point, 0, dy, TRUE );
else
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- MOVE_Zp2_Point( point, dx, dy, TRUE );
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
- CUR.GS.loop--;
+ exc->GS.loop--;
}
Fail:
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
+ exc->GS.loop = 1;
+ exc->new_top = exc->args;
}
@@ -5997,7 +5542,8 @@
/* zero which includes all points of it. */
/* */
static void
- Ins_SHC( INS_ARG )
+ Ins_SHC( TT_ExecContext exc,
+ FT_Long* args )
{
TT_GlyphZoneRec zp;
FT_UShort refp;
@@ -6007,36 +5553,36 @@
FT_UShort start, limit, i;
- contour = (FT_UShort)args[0];
- bounds = ( CUR.GS.gep2 == 0 ) ? 1 : CUR.zp2.n_contours;
+ contour = (FT_Short)args[0];
+ bounds = ( exc->GS.gep2 == 0 ) ? 1 : exc->zp2.n_contours;
if ( BOUNDS( contour, bounds ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
+ if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) )
return;
if ( contour == 0 )
start = 0;
else
- start = (FT_UShort)( CUR.zp2.contours[contour - 1] + 1 -
- CUR.zp2.first_point );
+ start = (FT_UShort)( exc->zp2.contours[contour - 1] + 1 -
+ exc->zp2.first_point );
/* we use the number of points if in the twilight zone */
- if ( CUR.GS.gep2 == 0 )
- limit = CUR.zp2.n_points;
+ if ( exc->GS.gep2 == 0 )
+ limit = exc->zp2.n_points;
else
- limit = (FT_UShort)( CUR.zp2.contours[contour] -
- CUR.zp2.first_point + 1 );
+ limit = (FT_UShort)( exc->zp2.contours[contour] -
+ exc->zp2.first_point + 1 );
for ( i = start; i < limit; i++ )
{
- if ( zp.cur != CUR.zp2.cur || refp != i )
- MOVE_Zp2_Point( i, dx, dy, TRUE );
+ if ( zp.cur != exc->zp2.cur || refp != i )
+ Move_Zp2_Point( exc, i, dx, dy, TRUE );
}
}
@@ -6048,7 +5594,8 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_SHZ( INS_ARG )
+ Ins_SHZ( TT_ExecContext exc,
+ FT_Long* args )
{
TT_GlyphZoneRec zp;
FT_UShort refp;
@@ -6060,30 +5607,30 @@
if ( BOUNDS( args[0], 2 ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) )
+ if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) )
return;
/* XXX: UNDOCUMENTED! SHZ doesn't move the phantom points. */
/* Twilight zone has no real contours, so use `n_points'. */
/* Normal zone's `n_points' includes phantoms, so must */
/* use end of last contour. */
- if ( CUR.GS.gep2 == 0 )
- limit = (FT_UShort)CUR.zp2.n_points;
- else if ( CUR.GS.gep2 == 1 && CUR.zp2.n_contours > 0 )
- limit = (FT_UShort)( CUR.zp2.contours[CUR.zp2.n_contours - 1] + 1 );
+ if ( exc->GS.gep2 == 0 )
+ limit = (FT_UShort)exc->zp2.n_points;
+ else if ( exc->GS.gep2 == 1 && exc->zp2.n_contours > 0 )
+ limit = (FT_UShort)( exc->zp2.contours[exc->zp2.n_contours - 1] + 1 );
else
limit = 0;
/* XXX: UNDOCUMENTED! SHZ doesn't touch the points */
for ( i = 0; i < limit; i++ )
{
- if ( zp.cur != CUR.zp2.cur || refp != i )
- MOVE_Zp2_Point( i, dx, dy, FALSE );
+ if ( zp.cur != exc->zp2.cur || refp != i )
+ Move_Zp2_Point( exc, i, dx, dy, FALSE );
}
}
@@ -6095,7 +5642,8 @@
/* Stack: f26.6 uint32... --> */
/* */
static void
- Ins_SHPIX( INS_ARG )
+ Ins_SHPIX( TT_ExecContext exc,
+ FT_Long* args )
{
FT_F26Dot6 dx, dy;
FT_UShort point;
@@ -6104,17 +5652,17 @@
#endif
- if ( CUR.top < CUR.GS.loop + 1 )
+ if ( exc->top < exc->GS.loop + 1 )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
- if ( CUR.GS.both_x_axis )
+ if ( exc->GS.both_x_axis )
{
dx = (FT_UInt32)args[0];
dy = 0;
@@ -6128,115 +5676,115 @@
else
#endif
{
- dx = TT_MulFix14( (FT_UInt32)args[0], CUR.GS.freeVector.x );
- dy = TT_MulFix14( (FT_UInt32)args[0], CUR.GS.freeVector.y );
+ dx = TT_MulFix14( args[0], exc->GS.freeVector.x );
+ dy = TT_MulFix14( args[0], exc->GS.freeVector.y );
}
- while ( CUR.GS.loop > 0 )
+ while ( exc->GS.loop > 0 )
{
- CUR.args--;
+ exc->args--;
- point = (FT_UShort)CUR.stack[CUR.args];
+ point = (FT_UShort)exc->stack[exc->args];
- if ( BOUNDS( point, CUR.zp2.n_points ) )
+ if ( BOUNDS( point, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
}
else
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
{
- /* If not using ignore_x_mode rendering, allow ZP2 move. */
- /* If inline deltas aren't allowed, skip ZP2 move. */
- /* If using ignore_x_mode rendering, allow ZP2 point move if: */
- /* - freedom vector is y and sph_compatibility_mode is off */
- /* - the glyph is composite and the move is in the Y direction */
- /* - the glyph is specifically set to allow SHPIX moves */
- /* - the move is on a previously Y-touched point */
-
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode )
+ /* If not using ignore_x_mode rendering, allow ZP2 move. */
+ /* If inline deltas aren't allowed, skip ZP2 move. */
+ /* If using ignore_x_mode rendering, allow ZP2 point move if: */
+ /* - freedom vector is y and sph_compatibility_mode is off */
+ /* - the glyph is composite and the move is in the Y direction */
+ /* - the glyph is specifically set to allow SHPIX moves */
+ /* - the move is on a previously Y-touched point */
+
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode )
{
/* save point for later comparison */
- if ( CUR.GS.freeVector.y != 0 )
- B1 = CUR.zp2.cur[point].y;
+ if ( exc->GS.freeVector.y != 0 )
+ B1 = exc->zp2.cur[point].y;
else
- B1 = CUR.zp2.cur[point].x;
+ B1 = exc->zp2.cur[point].x;
- if ( !CUR.face->sph_compatibility_mode &&
- CUR.GS.freeVector.y != 0 )
+ if ( !exc->face->sph_compatibility_mode &&
+ exc->GS.freeVector.y != 0 )
{
- MOVE_Zp2_Point( point, dx, dy, TRUE );
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
/* save new point */
- if ( CUR.GS.freeVector.y != 0 )
+ if ( exc->GS.freeVector.y != 0 )
{
- B2 = CUR.zp2.cur[point].y;
+ B2 = exc->zp2.cur[point].y;
/* reverse any disallowed moves */
- if ( ( CUR.sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
- ( B1 & 63 ) != 0 &&
- ( B2 & 63 ) != 0 &&
- B1 != B2 )
- MOVE_Zp2_Point( point, -dx, -dy, TRUE );
+ if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
+ ( B1 & 63 ) != 0 &&
+ ( B2 & 63 ) != 0 &&
+ B1 != B2 )
+ Move_Zp2_Point( exc, point, -dx, -dy, TRUE );
}
}
- else if ( CUR.face->sph_compatibility_mode )
+ else if ( exc->face->sph_compatibility_mode )
{
- if ( CUR.sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
+ if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
{
dx = FT_PIX_ROUND( B1 + dx ) - B1;
dy = FT_PIX_ROUND( B1 + dy ) - B1;
}
/* skip post-iup deltas */
- if ( CUR.iup_called &&
- ( ( CUR.sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
- ( CUR.sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
+ if ( exc->iup_called &&
+ ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
+ ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
goto Skip;
- if ( !( CUR.sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
- ( ( CUR.is_composite && CUR.GS.freeVector.y != 0 ) ||
- ( CUR.zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
- ( CUR.sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
- MOVE_Zp2_Point( point, 0, dy, TRUE );
+ if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
+ ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
+ ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
+ ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
+ Move_Zp2_Point( exc, point, 0, dy, TRUE );
/* save new point */
- if ( CUR.GS.freeVector.y != 0 )
+ if ( exc->GS.freeVector.y != 0 )
{
- B2 = CUR.zp2.cur[point].y;
+ B2 = exc->zp2.cur[point].y;
/* reverse any disallowed moves */
if ( ( B1 & 63 ) == 0 &&
( B2 & 63 ) != 0 &&
B1 != B2 )
- MOVE_Zp2_Point( point, 0, -dy, TRUE );
+ Move_Zp2_Point( exc, point, 0, -dy, TRUE );
}
}
- else if ( CUR.sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
- MOVE_Zp2_Point( point, dx, dy, TRUE );
+ else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
}
else
- MOVE_Zp2_Point( point, dx, dy, TRUE );
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
}
Skip:
#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- MOVE_Zp2_Point( point, dx, dy, TRUE );
+ Move_Zp2_Point( exc, point, dx, dy, TRUE );
#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- CUR.GS.loop--;
+ exc->GS.loop--;
}
Fail:
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
+ exc->GS.loop = 1;
+ exc->new_top = exc->args;
}
@@ -6247,7 +5795,8 @@
/* Stack: f26.6 uint32 --> */
/* */
static void
- Ins_MSIRP( INS_ARG )
+ Ins_MSIRP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort point;
FT_F26Dot6 distance;
@@ -6258,11 +5807,11 @@
if ( SUBPIXEL_HINTING )
{
- control_value_cutin = CUR.GS.control_value_cutin;
+ control_value_cutin = exc->GS.control_value_cutin;
- if ( CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 &&
- !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ if ( exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = 0;
}
@@ -6270,42 +5819,41 @@
point = (FT_UShort)args[0];
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
+ if ( BOUNDS( point, exc->zp1.n_points ) ||
+ BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
/* UNDOCUMENTED! The MS rasterizer does that with */
/* twilight points (confirmed by Greg Hitchcock) */
- if ( CUR.GS.gep1 == 0 )
+ if ( exc->GS.gep1 == 0 )
{
- CUR.zp1.org[point] = CUR.zp0.org[CUR.GS.rp0];
- CUR_Func_move_orig( &CUR.zp1, point, args[1] );
- CUR.zp1.cur[point] = CUR.zp1.org[point];
+ exc->zp1.org[point] = exc->zp0.org[exc->GS.rp0];
+ exc->func_move_orig( exc, &exc->zp1, point, args[1] );
+ exc->zp1.cur[point] = exc->zp1.org[point];
}
- distance = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
+ distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
/* subpixel hinting - make MSIRP respect CVT cut-in; */
if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
FT_ABS( distance - args[1] ) >= control_value_cutin )
distance = args[1];
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- CUR_Func_move( &CUR.zp1, point, args[1] - distance );
+ exc->func_move( exc, &exc->zp1, point, args[1] - distance );
- CUR.GS.rp1 = CUR.GS.rp0;
- CUR.GS.rp2 = point;
+ exc->GS.rp1 = exc->GS.rp0;
+ exc->GS.rp2 = point;
- if ( ( CUR.opcode & 1 ) != 0 )
- CUR.GS.rp0 = point;
+ if ( ( exc->opcode & 1 ) != 0 )
+ exc->GS.rp0 = point;
}
@@ -6316,7 +5864,8 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_MDAP( INS_ARG )
+ Ins_MDAP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort point;
FT_F26Dot6 cur_dist;
@@ -6325,36 +5874,38 @@
point = (FT_UShort)args[0];
- if ( BOUNDS( point, CUR.zp0.n_points ) )
+ if ( BOUNDS( point, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- if ( ( CUR.opcode & 1 ) != 0 )
+ if ( ( exc->opcode & 1 ) != 0 )
{
- cur_dist = CUR_fast_project( &CUR.zp0.cur[point] );
+ cur_dist = FAST_PROJECT( &exc->zp0.cur[point] );
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 )
- distance = ROUND_None(
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
+ distance = Round_None(
+ exc,
cur_dist,
- CUR.tt_metrics.compensations[0] ) - cur_dist;
+ exc->tt_metrics.compensations[0] ) - cur_dist;
else
#endif
- distance = CUR_Func_round(
+ distance = exc->func_round(
+ exc,
cur_dist,
- CUR.tt_metrics.compensations[0] ) - cur_dist;
+ exc->tt_metrics.compensations[0] ) - cur_dist;
}
else
distance = 0;
- CUR_Func_move( &CUR.zp0, point, distance );
+ exc->func_move( exc, &exc->zp0, point, distance );
- CUR.GS.rp0 = point;
- CUR.GS.rp1 = point;
+ exc->GS.rp0 = point;
+ exc->GS.rp1 = point;
}
@@ -6365,7 +5916,8 @@
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_MIAP( INS_ARG )
+ Ins_MIAP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong cvtEntry;
FT_UShort point;
@@ -6374,24 +5926,24 @@
FT_F26Dot6 control_value_cutin;
- control_value_cutin = CUR.GS.control_value_cutin;
+ control_value_cutin = exc->GS.control_value_cutin;
cvtEntry = (FT_ULong)args[1];
point = (FT_UShort)args[0];
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 &&
- CUR.GS.freeVector.y == 0 &&
- !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ exc->GS.freeVector.y == 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = 0;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- if ( BOUNDS( point, CUR.zp0.n_points ) ||
- BOUNDSL( cvtEntry, CUR.cvtSize ) )
+ if ( BOUNDS( point, exc->zp0.n_points ) ||
+ BOUNDSL( cvtEntry, exc->cvtSize ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
@@ -6415,56 +5967,58 @@
/* */
/* Confirmed by Greg Hitchcock. */
- distance = CUR_Func_read_cvt( cvtEntry );
+ distance = exc->func_read_cvt( exc, cvtEntry );
- if ( CUR.GS.gep0 == 0 ) /* If in twilight zone */
+ if ( exc->GS.gep0 == 0 ) /* If in twilight zone */
{
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
/* Only adjust if not in sph_compatibility_mode or ignore_x_mode. */
/* Determined via experimentation and may be incorrect... */
- if ( !SUBPIXEL_HINTING ||
- ( !CUR.ignore_x_mode ||
- !CUR.face->sph_compatibility_mode ) )
+ if ( !SUBPIXEL_HINTING ||
+ ( !exc->ignore_x_mode ||
+ !exc->face->sph_compatibility_mode ) )
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- CUR.zp0.org[point].x = TT_MulFix14( (FT_UInt32)distance,
- CUR.GS.freeVector.x );
- CUR.zp0.org[point].y = TT_MulFix14( (FT_UInt32)distance,
- CUR.GS.freeVector.y ),
- CUR.zp0.cur[point] = CUR.zp0.org[point];
+ exc->zp0.org[point].x = TT_MulFix14( distance,
+ exc->GS.freeVector.x );
+ exc->zp0.org[point].y = TT_MulFix14( distance,
+ exc->GS.freeVector.y ),
+ exc->zp0.cur[point] = exc->zp0.org[point];
}
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) &&
- distance > 0 &&
- CUR.GS.freeVector.y != 0 )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) &&
+ distance > 0 &&
+ exc->GS.freeVector.y != 0 )
distance = 0;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- org_dist = CUR_fast_project( &CUR.zp0.cur[point] );
+ org_dist = FAST_PROJECT( &exc->zp0.cur[point] );
- if ( ( CUR.opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
+ if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
{
if ( FT_ABS( distance - org_dist ) > control_value_cutin )
distance = org_dist;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 )
- distance = ROUND_None( distance,
- CUR.tt_metrics.compensations[0] );
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
+ distance = Round_None( exc,
+ distance,
+ exc->tt_metrics.compensations[0] );
else
#endif
- distance = CUR_Func_round( distance,
- CUR.tt_metrics.compensations[0] );
+ distance = exc->func_round( exc,
+ distance,
+ exc->tt_metrics.compensations[0] );
}
- CUR_Func_move( &CUR.zp0, point, distance - org_dist );
+ exc->func_move( exc, &exc->zp0, point, distance - org_dist );
Fail:
- CUR.GS.rp0 = point;
- CUR.GS.rp1 = point;
+ exc->GS.rp0 = point;
+ exc->GS.rp1 = point;
}
@@ -6475,29 +6029,30 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_MDRP( INS_ARG )
+ Ins_MDRP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort point;
FT_F26Dot6 org_dist, distance, minimum_distance;
- minimum_distance = CUR.GS.minimum_distance;
+ minimum_distance = exc->GS.minimum_distance;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 &&
- !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
minimum_distance = 0;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
point = (FT_UShort)args[0];
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
+ if ( BOUNDS( point, exc->zp1.n_points ) ||
+ BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
@@ -6506,74 +6061,77 @@
/* XXX: UNDOCUMENTED: twilight zone special case */
- if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 )
+ if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 )
{
- FT_Vector* vec1 = &CUR.zp1.org[point];
- FT_Vector* vec2 = &CUR.zp0.org[CUR.GS.rp0];
+ FT_Vector* vec1 = &exc->zp1.org[point];
+ FT_Vector* vec2 = &exc->zp0.org[exc->GS.rp0];
- org_dist = CUR_Func_dualproj( vec1, vec2 );
+ org_dist = DUALPROJ( vec1, vec2 );
}
else
{
- FT_Vector* vec1 = &CUR.zp1.orus[point];
- FT_Vector* vec2 = &CUR.zp0.orus[CUR.GS.rp0];
+ FT_Vector* vec1 = &exc->zp1.orus[point];
+ FT_Vector* vec2 = &exc->zp0.orus[exc->GS.rp0];
- if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
+ if ( exc->metrics.x_scale == exc->metrics.y_scale )
{
/* this should be faster */
- org_dist = CUR_Func_dualproj( vec1, vec2 );
- org_dist = FT_MulFix( org_dist, CUR.metrics.x_scale );
+ org_dist = DUALPROJ( vec1, vec2 );
+ org_dist = FT_MulFix( org_dist, exc->metrics.x_scale );
}
else
{
FT_Vector vec;
- vec.x = FT_MulFix( vec1->x - vec2->x, CUR.metrics.x_scale );
- vec.y = FT_MulFix( vec1->y - vec2->y, CUR.metrics.y_scale );
+ vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale );
+ vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale );
- org_dist = CUR_fast_dualproj( &vec );
+ org_dist = FAST_DUALPROJ( &vec );
}
}
/* single width cut-in test */
- if ( FT_ABS( org_dist - CUR.GS.single_width_value ) <
- CUR.GS.single_width_cutin )
+ if ( FT_ABS( org_dist - exc->GS.single_width_value ) <
+ exc->GS.single_width_cutin )
{
if ( org_dist >= 0 )
- org_dist = CUR.GS.single_width_value;
+ org_dist = exc->GS.single_width_value;
else
- org_dist = -CUR.GS.single_width_value;
+ org_dist = -exc->GS.single_width_value;
}
/* round flag */
- if ( ( CUR.opcode & 4 ) != 0 )
+ if ( ( exc->opcode & 4 ) != 0 )
{
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 )
- distance = ROUND_None(
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 )
+ distance = Round_None(
+ exc,
org_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
+ exc->tt_metrics.compensations[exc->opcode & 3] );
else
#endif
- distance = CUR_Func_round(
- org_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
+ distance = exc->func_round(
+ exc,
+ org_dist,
+ exc->tt_metrics.compensations[exc->opcode & 3] );
}
else
- distance = ROUND_None(
+ distance = Round_None(
+ exc,
org_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
+ exc->tt_metrics.compensations[exc->opcode & 3] );
/* minimum distance flag */
- if ( ( CUR.opcode & 8 ) != 0 )
+ if ( ( exc->opcode & 8 ) != 0 )
{
if ( org_dist >= 0 )
{
@@ -6589,17 +6147,16 @@
/* now move the point */
- org_dist = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
+ org_dist = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
- CUR_Func_move( &CUR.zp1, point, distance - org_dist );
+ exc->func_move( exc, &exc->zp1, point, distance - org_dist );
Fail:
- CUR.GS.rp1 = CUR.GS.rp0;
- CUR.GS.rp2 = point;
+ exc->GS.rp1 = exc->GS.rp0;
+ exc->GS.rp2 = point;
- if ( ( CUR.opcode & 16 ) != 0 )
- CUR.GS.rp0 = point;
+ if ( ( exc->opcode & 16 ) != 0 )
+ exc->GS.rp0 = point;
}
@@ -6610,7 +6167,8 @@
/* Stack: int32? uint32 --> */
/* */
static void
- Ins_MIRP( INS_ARG )
+ Ins_MIRP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort point;
FT_ULong cvtEntry;
@@ -6628,77 +6186,75 @@
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- minimum_distance = CUR.GS.minimum_distance;
- control_value_cutin = CUR.GS.control_value_cutin;
+ minimum_distance = exc->GS.minimum_distance;
+ control_value_cutin = exc->GS.control_value_cutin;
point = (FT_UShort)args[0];
cvtEntry = (FT_ULong)( args[1] + 1 );
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.x != 0 &&
- !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.x != 0 &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = minimum_distance = 0;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
/* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
- if ( BOUNDS( point, CUR.zp1.n_points ) ||
- BOUNDSL( cvtEntry, CUR.cvtSize + 1 ) ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
+ if ( BOUNDS( point, exc->zp1.n_points ) ||
+ BOUNDSL( cvtEntry, exc->cvtSize + 1 ) ||
+ BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
if ( !cvtEntry )
cvt_dist = 0;
else
- cvt_dist = CUR_Func_read_cvt( cvtEntry - 1 );
+ cvt_dist = exc->func_read_cvt( exc, cvtEntry - 1 );
/* single width test */
- if ( FT_ABS( cvt_dist - CUR.GS.single_width_value ) <
- CUR.GS.single_width_cutin )
+ if ( FT_ABS( cvt_dist - exc->GS.single_width_value ) <
+ exc->GS.single_width_cutin )
{
if ( cvt_dist >= 0 )
- cvt_dist = CUR.GS.single_width_value;
+ cvt_dist = exc->GS.single_width_value;
else
- cvt_dist = -CUR.GS.single_width_value;
+ cvt_dist = -exc->GS.single_width_value;
}
/* UNDOCUMENTED! The MS rasterizer does that with */
/* twilight points (confirmed by Greg Hitchcock) */
- if ( CUR.GS.gep1 == 0 )
+ if ( exc->GS.gep1 == 0 )
{
- CUR.zp1.org[point].x = CUR.zp0.org[CUR.GS.rp0].x +
- TT_MulFix14( (FT_UInt32)cvt_dist,
- CUR.GS.freeVector.x );
- CUR.zp1.org[point].y = CUR.zp0.org[CUR.GS.rp0].y +
- TT_MulFix14( (FT_UInt32)cvt_dist,
- CUR.GS.freeVector.y );
- CUR.zp1.cur[point] = CUR.zp1.org[point];
+ exc->zp1.org[point].x = exc->zp0.org[exc->GS.rp0].x +
+ TT_MulFix14( cvt_dist,
+ exc->GS.freeVector.x );
+ exc->zp1.org[point].y = exc->zp0.org[exc->GS.rp0].y +
+ TT_MulFix14( cvt_dist,
+ exc->GS.freeVector.y );
+ exc->zp1.cur[point] = exc->zp1.org[point];
}
- org_dist = CUR_Func_dualproj( &CUR.zp1.org[point],
- &CUR.zp0.org[CUR.GS.rp0] );
- cur_dist = CUR_Func_project ( &CUR.zp1.cur[point],
- &CUR.zp0.cur[CUR.GS.rp0] );
+ org_dist = DUALPROJ( &exc->zp1.org[point], &exc->zp0.org[exc->GS.rp0] );
+ cur_dist = PROJECT ( &exc->zp1.cur[point], &exc->zp0.cur[exc->GS.rp0] );
/* auto-flip test */
- if ( CUR.GS.auto_flip )
+ if ( exc->GS.auto_flip )
{
if ( ( org_dist ^ cvt_dist ) < 0 )
cvt_dist = -cvt_dist;
}
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.freeVector.y != 0 &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.freeVector.y != 0 &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
{
if ( cur_dist < -64 )
cvt_dist -= 16;
@@ -6709,12 +6265,12 @@
/* control value cut-in and round */
- if ( ( CUR.opcode & 4 ) != 0 )
+ if ( ( exc->opcode & 4 ) != 0 )
{
/* XXX: UNDOCUMENTED! Only perform cut-in test when both points */
/* refer to the same zone. */
- if ( CUR.GS.gep0 == CUR.GS.gep1 )
+ if ( exc->GS.gep0 == exc->GS.gep1 )
{
/* XXX: According to Greg Hitchcock, the following wording is */
/* the right one: */
@@ -6732,32 +6288,34 @@
cvt_dist = org_dist;
}
- distance = CUR_Func_round(
+ distance = exc->func_round(
+ exc,
cvt_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
+ exc->tt_metrics.compensations[exc->opcode & 3] );
}
else
{
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
/* do cvt cut-in always in MIRP for sph */
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.GS.gep0 == CUR.GS.gep1 )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->GS.gep0 == exc->GS.gep1 )
{
if ( FT_ABS( cvt_dist - org_dist ) > control_value_cutin )
cvt_dist = org_dist;
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- distance = ROUND_None(
+ distance = Round_None(
+ exc,
cvt_dist,
- CUR.tt_metrics.compensations[CUR.opcode & 3] );
+ exc->tt_metrics.compensations[exc->opcode & 3] );
}
/* minimum distance test */
- if ( ( CUR.opcode & 8 ) != 0 )
+ if ( ( exc->opcode & 8 ) != 0 )
{
if ( org_dist >= 0 )
{
@@ -6774,59 +6332,59 @@
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
if ( SUBPIXEL_HINTING )
{
- B1 = CUR.zp1.cur[point].y;
+ B1 = exc->zp1.cur[point].y;
/* Round moves if necessary */
- if ( CUR.ignore_x_mode &&
- CUR.GS.freeVector.y != 0 &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) )
+ if ( exc->ignore_x_mode &&
+ exc->GS.freeVector.y != 0 &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) )
distance = FT_PIX_ROUND( B1 + distance - cur_dist ) - B1 + cur_dist;
- if ( CUR.ignore_x_mode &&
- CUR.GS.freeVector.y != 0 &&
- ( CUR.opcode & 16 ) == 0 &&
- ( CUR.opcode & 8 ) == 0 &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
+ if ( exc->ignore_x_mode &&
+ exc->GS.freeVector.y != 0 &&
+ ( exc->opcode & 16 ) == 0 &&
+ ( exc->opcode & 8 ) == 0 &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
distance += 64;
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- CUR_Func_move( &CUR.zp1, point, distance - cur_dist );
+ exc->func_move( exc, &exc->zp1, point, distance - cur_dist );
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
if ( SUBPIXEL_HINTING )
{
- B2 = CUR.zp1.cur[point].y;
+ B2 = exc->zp1.cur[point].y;
/* Reverse move if necessary */
- if ( CUR.ignore_x_mode )
+ if ( exc->ignore_x_mode )
{
- if ( CUR.face->sph_compatibility_mode &&
- CUR.GS.freeVector.y != 0 &&
- ( B1 & 63 ) == 0 &&
- ( B2 & 63 ) != 0 )
+ if ( exc->face->sph_compatibility_mode &&
+ exc->GS.freeVector.y != 0 &&
+ ( B1 & 63 ) == 0 &&
+ ( B2 & 63 ) != 0 )
reverse_move = TRUE;
- if ( ( CUR.sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
- CUR.GS.freeVector.y != 0 &&
- ( B2 & 63 ) != 0 &&
- ( B1 & 63 ) != 0 )
+ if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
+ exc->GS.freeVector.y != 0 &&
+ ( B2 & 63 ) != 0 &&
+ ( B1 & 63 ) != 0 )
reverse_move = TRUE;
}
if ( reverse_move )
- CUR_Func_move( &CUR.zp1, point, -( distance - cur_dist ) );
+ exc->func_move( exc, &exc->zp1, point, -( distance - cur_dist ) );
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
Fail:
- CUR.GS.rp1 = CUR.GS.rp0;
+ exc->GS.rp1 = exc->GS.rp0;
- if ( ( CUR.opcode & 16 ) != 0 )
- CUR.GS.rp0 = point;
+ if ( ( exc->opcode & 16 ) != 0 )
+ exc->GS.rp0 = point;
- CUR.GS.rp2 = point;
+ exc->GS.rp2 = point;
}
@@ -6837,61 +6395,59 @@
/* Stack: uint32 uint32... --> */
/* */
static void
- Ins_ALIGNRP( INS_ARG )
+ Ins_ALIGNRP( TT_ExecContext exc )
{
FT_UShort point;
FT_F26Dot6 distance;
- FT_UNUSED_ARG;
-
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.iup_called &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->iup_called &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- if ( CUR.top < CUR.GS.loop ||
- BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) )
+ if ( exc->top < exc->GS.loop ||
+ BOUNDS( exc->GS.rp0, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
- while ( CUR.GS.loop > 0 )
+ while ( exc->GS.loop > 0 )
{
- CUR.args--;
+ exc->args--;
- point = (FT_UShort)CUR.stack[CUR.args];
+ point = (FT_UShort)exc->stack[exc->args];
- if ( BOUNDS( point, CUR.zp1.n_points ) )
+ if ( BOUNDS( point, exc->zp1.n_points ) )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
}
else
{
- distance = CUR_Func_project( CUR.zp1.cur + point,
- CUR.zp0.cur + CUR.GS.rp0 );
+ distance = PROJECT( exc->zp1.cur + point,
+ exc->zp0.cur + exc->GS.rp0 );
- CUR_Func_move( &CUR.zp1, point, -distance );
+ exc->func_move( exc, &exc->zp1, point, -distance );
}
- CUR.GS.loop--;
+ exc->GS.loop--;
}
Fail:
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
+ exc->GS.loop = 1;
+ exc->new_top = exc->args;
}
@@ -6902,7 +6458,8 @@
/* Stack: 5 * uint32 --> */
/* */
static void
- Ins_ISECT( INS_ARG )
+ Ins_ISECT( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort point,
a0, a1,
@@ -6926,29 +6483,29 @@
b0 = (FT_UShort)args[3];
b1 = (FT_UShort)args[4];
- if ( BOUNDS( b0, CUR.zp0.n_points ) ||
- BOUNDS( b1, CUR.zp0.n_points ) ||
- BOUNDS( a0, CUR.zp1.n_points ) ||
- BOUNDS( a1, CUR.zp1.n_points ) ||
- BOUNDS( point, CUR.zp2.n_points ) )
+ if ( BOUNDS( b0, exc->zp0.n_points ) ||
+ BOUNDS( b1, exc->zp0.n_points ) ||
+ BOUNDS( a0, exc->zp1.n_points ) ||
+ BOUNDS( a1, exc->zp1.n_points ) ||
+ BOUNDS( point, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
/* Cramer's rule */
- dbx = CUR.zp0.cur[b1].x - CUR.zp0.cur[b0].x;
- dby = CUR.zp0.cur[b1].y - CUR.zp0.cur[b0].y;
+ dbx = exc->zp0.cur[b1].x - exc->zp0.cur[b0].x;
+ dby = exc->zp0.cur[b1].y - exc->zp0.cur[b0].y;
- dax = CUR.zp1.cur[a1].x - CUR.zp1.cur[a0].x;
- day = CUR.zp1.cur[a1].y - CUR.zp1.cur[a0].y;
+ dax = exc->zp1.cur[a1].x - exc->zp1.cur[a0].x;
+ day = exc->zp1.cur[a1].y - exc->zp1.cur[a0].y;
- dx = CUR.zp0.cur[b0].x - CUR.zp1.cur[a0].x;
- dy = CUR.zp0.cur[b0].y - CUR.zp1.cur[a0].y;
+ dx = exc->zp0.cur[b0].x - exc->zp1.cur[a0].x;
+ dy = exc->zp0.cur[b0].y - exc->zp1.cur[a0].y;
- CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH;
+ exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH;
discriminant = FT_MulDiv( dax, -dby, 0x40 ) +
FT_MulDiv( day, dbx, 0x40 );
@@ -6970,21 +6527,21 @@
R.x = FT_MulDiv( val, dax, discriminant );
R.y = FT_MulDiv( val, day, discriminant );
- CUR.zp2.cur[point].x = CUR.zp1.cur[a0].x + R.x;
- CUR.zp2.cur[point].y = CUR.zp1.cur[a0].y + R.y;
+ exc->zp2.cur[point].x = exc->zp1.cur[a0].x + R.x;
+ exc->zp2.cur[point].y = exc->zp1.cur[a0].y + R.y;
}
else
{
/* else, take the middle of the middles of A and B */
- CUR.zp2.cur[point].x = ( CUR.zp1.cur[a0].x +
- CUR.zp1.cur[a1].x +
- CUR.zp0.cur[b0].x +
- CUR.zp0.cur[b1].x ) / 4;
- CUR.zp2.cur[point].y = ( CUR.zp1.cur[a0].y +
- CUR.zp1.cur[a1].y +
- CUR.zp0.cur[b0].y +
- CUR.zp0.cur[b1].y ) / 4;
+ exc->zp2.cur[point].x = ( exc->zp1.cur[a0].x +
+ exc->zp1.cur[a1].x +
+ exc->zp0.cur[b0].x +
+ exc->zp0.cur[b1].x ) / 4;
+ exc->zp2.cur[point].y = ( exc->zp1.cur[a0].y +
+ exc->zp1.cur[a1].y +
+ exc->zp0.cur[b0].y +
+ exc->zp0.cur[b1].y ) / 4;
}
}
@@ -6996,7 +6553,8 @@
/* Stack: uint32 uint32 --> */
/* */
static void
- Ins_ALIGNPTS( INS_ARG )
+ Ins_ALIGNPTS( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort p1, p2;
FT_F26Dot6 distance;
@@ -7005,19 +6563,18 @@
p1 = (FT_UShort)args[0];
p2 = (FT_UShort)args[1];
- if ( BOUNDS( p1, CUR.zp1.n_points ) ||
- BOUNDS( p2, CUR.zp0.n_points ) )
+ if ( BOUNDS( p1, exc->zp1.n_points ) ||
+ BOUNDS( p2, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
- distance = CUR_Func_project( CUR.zp0.cur + p2,
- CUR.zp1.cur + p1 ) / 2;
+ distance = PROJECT( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2;
- CUR_Func_move( &CUR.zp1, p1, distance );
- CUR_Func_move( &CUR.zp0, p2, -distance );
+ exc->func_move( exc, &exc->zp1, p1, distance );
+ exc->func_move( exc, &exc->zp0, p2, -distance );
}
@@ -7031,50 +6588,48 @@
/* SOMETIMES, DUMBER CODE IS BETTER CODE */
static void
- Ins_IP( INS_ARG )
+ Ins_IP( TT_ExecContext exc )
{
FT_F26Dot6 old_range, cur_range;
FT_Vector* orus_base;
FT_Vector* cur_base;
FT_Int twilight;
- FT_UNUSED_ARG;
-
- if ( CUR.top < CUR.GS.loop )
+ if ( exc->top < exc->GS.loop )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
/*
* We need to deal in a special way with the twilight zone.
- * Otherwise, by definition, the value of CUR.twilight.orus[n] is (0,0),
+ * Otherwise, by definition, the value of exc->twilight.orus[n] is (0,0),
* for every n.
*/
- twilight = CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 || CUR.GS.gep2 == 0;
+ twilight = exc->GS.gep0 == 0 || exc->GS.gep1 == 0 || exc->GS.gep2 == 0;
- if ( BOUNDS( CUR.GS.rp1, CUR.zp0.n_points ) )
+ if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
goto Fail;
}
if ( twilight )
- orus_base = &CUR.zp0.org[CUR.GS.rp1];
+ orus_base = &exc->zp0.org[exc->GS.rp1];
else
- orus_base = &CUR.zp0.orus[CUR.GS.rp1];
+ orus_base = &exc->zp0.orus[exc->GS.rp1];
- cur_base = &CUR.zp0.cur[CUR.GS.rp1];
+ cur_base = &exc->zp0.cur[exc->GS.rp1];
/* XXX: There are some glyphs in some braindead but popular */
/* fonts out there (e.g. [aeu]grave in monotype.ttf) */
/* calling IP[] with bad values of rp[12]. */
/* Do something sane when this odd thing happens. */
- if ( BOUNDS( CUR.GS.rp1, CUR.zp0.n_points ) ||
- BOUNDS( CUR.GS.rp2, CUR.zp1.n_points ) )
+ if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) ||
+ BOUNDS( exc->GS.rp2, exc->zp1.n_points ) )
{
old_range = 0;
cur_range = 0;
@@ -7082,62 +6637,60 @@
else
{
if ( twilight )
- old_range = CUR_Func_dualproj( &CUR.zp1.org[CUR.GS.rp2],
- orus_base );
- else if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
- old_range = CUR_Func_dualproj( &CUR.zp1.orus[CUR.GS.rp2],
- orus_base );
+ old_range = DUALPROJ( &exc->zp1.org[exc->GS.rp2], orus_base );
+ else if ( exc->metrics.x_scale == exc->metrics.y_scale )
+ old_range = DUALPROJ( &exc->zp1.orus[exc->GS.rp2], orus_base );
else
{
FT_Vector vec;
- vec.x = FT_MulFix( CUR.zp1.orus[CUR.GS.rp2].x - orus_base->x,
- CUR.metrics.x_scale );
- vec.y = FT_MulFix( CUR.zp1.orus[CUR.GS.rp2].y - orus_base->y,
- CUR.metrics.y_scale );
+ vec.x = FT_MulFix( exc->zp1.orus[exc->GS.rp2].x - orus_base->x,
+ exc->metrics.x_scale );
+ vec.y = FT_MulFix( exc->zp1.orus[exc->GS.rp2].y - orus_base->y,
+ exc->metrics.y_scale );
- old_range = CUR_fast_dualproj( &vec );
+ old_range = FAST_DUALPROJ( &vec );
}
- cur_range = CUR_Func_project ( &CUR.zp1.cur[CUR.GS.rp2], cur_base );
+ cur_range = PROJECT( &exc->zp1.cur[exc->GS.rp2], cur_base );
}
- for ( ; CUR.GS.loop > 0; --CUR.GS.loop )
+ for ( ; exc->GS.loop > 0; --exc->GS.loop )
{
- FT_UInt point = (FT_UInt)CUR.stack[--CUR.args];
+ FT_UInt point = (FT_UInt)exc->stack[--exc->args];
FT_F26Dot6 org_dist, cur_dist, new_dist;
/* check point bounds */
- if ( BOUNDS( point, CUR.zp2.n_points ) )
+ if ( BOUNDS( point, exc->zp2.n_points ) )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
continue;
}
if ( twilight )
- org_dist = CUR_Func_dualproj( &CUR.zp2.org[point], orus_base );
- else if ( CUR.metrics.x_scale == CUR.metrics.y_scale )
- org_dist = CUR_Func_dualproj( &CUR.zp2.orus[point], orus_base );
+ org_dist = DUALPROJ( &exc->zp2.org[point], orus_base );
+ else if ( exc->metrics.x_scale == exc->metrics.y_scale )
+ org_dist = DUALPROJ( &exc->zp2.orus[point], orus_base );
else
{
FT_Vector vec;
- vec.x = FT_MulFix( CUR.zp2.orus[point].x - orus_base->x,
- CUR.metrics.x_scale );
- vec.y = FT_MulFix( CUR.zp2.orus[point].y - orus_base->y,
- CUR.metrics.y_scale );
+ vec.x = FT_MulFix( exc->zp2.orus[point].x - orus_base->x,
+ exc->metrics.x_scale );
+ vec.y = FT_MulFix( exc->zp2.orus[point].y - orus_base->y,
+ exc->metrics.y_scale );
- org_dist = CUR_fast_dualproj( &vec );
+ org_dist = FAST_DUALPROJ( &vec );
}
- cur_dist = CUR_Func_project( &CUR.zp2.cur[point], cur_base );
+ cur_dist = PROJECT( &exc->zp2.cur[point], cur_base );
if ( org_dist )
{
@@ -7167,12 +6720,15 @@
else
new_dist = 0;
- CUR_Func_move( &CUR.zp2, (FT_UShort)point, new_dist - cur_dist );
+ exc->func_move( exc,
+ &exc->zp2,
+ (FT_UShort)point,
+ new_dist - cur_dist );
}
Fail:
- CUR.GS.loop = 1;
- CUR.new_top = CUR.args;
+ exc->GS.loop = 1;
+ exc->new_top = exc->args;
}
@@ -7183,7 +6739,8 @@
/* Stack: uint32 --> */
/* */
static void
- Ins_UTP( INS_ARG )
+ Ins_UTP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_UShort point;
FT_Byte mask;
@@ -7191,22 +6748,22 @@
point = (FT_UShort)args[0];
- if ( BOUNDS( point, CUR.zp0.n_points ) )
+ if ( BOUNDS( point, exc->zp0.n_points ) )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
mask = 0xFF;
- if ( CUR.GS.freeVector.x != 0 )
+ if ( exc->GS.freeVector.x != 0 )
mask &= ~FT_CURVE_TAG_TOUCH_X;
- if ( CUR.GS.freeVector.y != 0 )
+ if ( exc->GS.freeVector.y != 0 )
mask &= ~FT_CURVE_TAG_TOUCH_Y;
- CUR.zp0.tags[point] &= mask;
+ exc->zp0.tags[point] &= mask;
}
@@ -7251,7 +6808,7 @@
FT_UInt ref2 )
{
FT_UInt i;
- FT_F26Dot6 orus1, orus2, org1, org2, delta1, delta2;
+ FT_F26Dot6 orus1, orus2, org1, org2, cur1, cur2, delta1, delta2;
if ( p1 > p2 )
@@ -7281,12 +6838,15 @@
org1 = worker->orgs[ref1].x;
org2 = worker->orgs[ref2].x;
- delta1 = worker->curs[ref1].x - org1;
- delta2 = worker->curs[ref2].x - org2;
+ cur1 = worker->curs[ref1].x;
+ cur2 = worker->curs[ref2].x;
+ delta1 = cur1 - org1;
+ delta2 = cur2 - org2;
- if ( orus1 == orus2 )
+ if ( cur1 == cur2 || orus1 == orus2 )
{
- /* simple shift of untouched points */
+
+ /* trivial snap or shift of untouched points */
for ( i = p1; i <= p2; i++ )
{
FT_F26Dot6 x = worker->orgs[i].x;
@@ -7294,9 +6854,13 @@
if ( x <= org1 )
x += delta1;
- else
+
+ else if ( x >= org2 )
x += delta2;
+ else
+ x = cur1;
+
worker->curs[i].x = x;
}
}
@@ -7323,12 +6887,10 @@
if ( !scale_valid )
{
scale_valid = 1;
- scale = FT_DivFix( org2 + delta2 - ( org1 + delta1 ),
- orus2 - orus1 );
+ scale = FT_DivFix( cur2 - cur1, orus2 - orus1 );
}
- x = ( org1 + delta1 ) +
- FT_MulFix( worker->orus[i].x - orus1, scale );
+ x = cur1 + FT_MulFix( worker->orus[i].x - orus1, scale );
}
worker->curs[i].x = x;
}
@@ -7343,7 +6905,7 @@
/* Stack: --> */
/* */
static void
- Ins_IUP( INS_ARG )
+ Ins_IUP( TT_ExecContext exc )
{
IUP_WorkerRec V;
FT_Byte mask;
@@ -7357,51 +6919,49 @@
FT_UInt point; /* current point */
FT_Short contour; /* current contour */
- FT_UNUSED_ARG;
-
/* ignore empty outlines */
- if ( CUR.pts.n_contours == 0 )
+ if ( exc->pts.n_contours == 0 )
return;
- if ( CUR.opcode & 1 )
+ if ( exc->opcode & 1 )
{
mask = FT_CURVE_TAG_TOUCH_X;
- V.orgs = CUR.pts.org;
- V.curs = CUR.pts.cur;
- V.orus = CUR.pts.orus;
+ V.orgs = exc->pts.org;
+ V.curs = exc->pts.cur;
+ V.orus = exc->pts.orus;
}
else
{
mask = FT_CURVE_TAG_TOUCH_Y;
- V.orgs = (FT_Vector*)( (FT_Pos*)CUR.pts.org + 1 );
- V.curs = (FT_Vector*)( (FT_Pos*)CUR.pts.cur + 1 );
- V.orus = (FT_Vector*)( (FT_Pos*)CUR.pts.orus + 1 );
+ V.orgs = (FT_Vector*)( (FT_Pos*)exc->pts.org + 1 );
+ V.curs = (FT_Vector*)( (FT_Pos*)exc->pts.cur + 1 );
+ V.orus = (FT_Vector*)( (FT_Pos*)exc->pts.orus + 1 );
}
- V.max_points = CUR.pts.n_points;
+ V.max_points = exc->pts.n_points;
contour = 0;
point = 0;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode )
{
- CUR.iup_called = TRUE;
- if ( CUR.sph_tweak_flags & SPH_TWEAK_SKIP_IUP )
+ exc->iup_called = TRUE;
+ if ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_IUP )
return;
}
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
do
{
- end_point = CUR.pts.contours[contour] - CUR.pts.first_point;
+ end_point = exc->pts.contours[contour] - exc->pts.first_point;
first_point = point;
- if ( BOUNDS ( end_point, CUR.pts.n_points ) )
- end_point = CUR.pts.n_points - 1;
+ if ( BOUNDS( end_point, exc->pts.n_points ) )
+ end_point = exc->pts.n_points - 1;
- while ( point <= end_point && ( CUR.pts.tags[point] & mask ) == 0 )
+ while ( point <= end_point && ( exc->pts.tags[point] & mask ) == 0 )
point++;
if ( point <= end_point )
@@ -7413,7 +6973,7 @@
while ( point <= end_point )
{
- if ( ( CUR.pts.tags[point] & mask ) != 0 )
+ if ( ( exc->pts.tags[point] & mask ) != 0 )
{
_iup_worker_interpolate( &V,
cur_touched + 1,
@@ -7445,7 +7005,7 @@
}
}
contour++;
- } while ( contour < CUR.pts.n_contours );
+ } while ( contour < exc->pts.n_contours );
}
@@ -7456,7 +7016,8 @@
/* Stack: uint32 (2 * uint32)... --> */
/* */
static void
- Ins_DELTAP( INS_ARG )
+ Ins_DELTAP( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong nump, k;
FT_UShort A;
@@ -7466,52 +7027,52 @@
FT_UShort B1, B2;
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.iup_called &&
- ( CUR.sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) )
+ if ( SUBPIXEL_HINTING &&
+ exc->ignore_x_mode &&
+ exc->iup_called &&
+ ( exc->sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) )
goto Fail;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
/* Delta hinting is covered by US Patent 5159668. */
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
FT_Long n = args[0] * 2;
- if ( CUR.args < n )
+ if ( exc->args < n )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Too_Few_Arguments );
- n = CUR.args;
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Too_Few_Arguments );
+ n = exc->args;
}
- CUR.args -= n;
- CUR.new_top = CUR.args;
+ exc->args -= n;
+ exc->new_top = exc->args;
return;
}
#endif
- P = (FT_ULong)CUR_Func_cur_ppem();
+ P = (FT_ULong)exc->func_cur_ppem( exc );
nump = (FT_ULong)args[0]; /* some points theoretically may occur more
than once, thus UShort isn't enough */
for ( k = 1; k <= nump; k++ )
{
- if ( CUR.args < 2 )
+ if ( exc->args < 2 )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Too_Few_Arguments );
- CUR.args = 0;
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Too_Few_Arguments );
+ exc->args = 0;
goto Fail;
}
- CUR.args -= 2;
+ exc->args -= 2;
- A = (FT_UShort)CUR.stack[CUR.args + 1];
- B = CUR.stack[CUR.args];
+ A = (FT_UShort)exc->stack[exc->args + 1];
+ B = exc->stack[exc->args];
/* XXX: Because some popular fonts contain some invalid DeltaP */
/* instructions, we simply ignore them when the stacked */
@@ -7519,11 +7080,11 @@
/* error. As a delta instruction doesn't change a glyph */
/* in great ways, this shouldn't be a problem. */
- if ( !BOUNDS( A, CUR.zp0.n_points ) )
+ if ( !BOUNDS( A, exc->zp0.n_points ) )
{
C = ( (FT_ULong)B & 0xF0 ) >> 4;
- switch ( CUR.opcode )
+ switch ( exc->opcode )
{
case 0x5D:
break;
@@ -7537,14 +7098,14 @@
break;
}
- C += CUR.GS.delta_base;
+ C += exc->GS.delta_base;
if ( P == C )
{
B = ( (FT_ULong)B & 0xF ) - 8;
if ( B >= 0 )
B++;
- B *= 1L << ( 6 - CUR.GS.delta_shift );
+ B *= 1L << ( 6 - exc->GS.delta_shift );
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
@@ -7558,65 +7119,65 @@
* - glyph is composite and freedom vector is not in subpixel
* direction.
*/
- if ( !CUR.ignore_x_mode ||
- ( CUR.sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) ||
- ( CUR.is_composite && CUR.GS.freeVector.y != 0 ) )
- CUR_Func_move( &CUR.zp0, A, B );
+ if ( !exc->ignore_x_mode ||
+ ( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) ||
+ ( exc->is_composite && exc->GS.freeVector.y != 0 ) )
+ exc->func_move( exc, &exc->zp0, A, B );
/* Otherwise, apply subpixel hinting and compatibility mode */
/* rules, always skipping deltas in subpixel direction. */
- else if ( CUR.ignore_x_mode && CUR.GS.freeVector.y != 0 )
+ else if ( exc->ignore_x_mode && exc->GS.freeVector.y != 0 )
{
/* save the y value of the point now; compare after move */
- B1 = (FT_UShort)CUR.zp0.cur[A].y;
+ B1 = (FT_UShort)exc->zp0.cur[A].y;
/* Standard subpixel hinting: Allow y move for y-touched */
/* points. This messes up DejaVu ... */
- if ( !CUR.face->sph_compatibility_mode &&
- ( CUR.zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) )
- CUR_Func_move( &CUR.zp0, A, B );
+ if ( !exc->face->sph_compatibility_mode &&
+ ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) )
+ exc->func_move( exc, &exc->zp0, A, B );
/* compatibility mode */
- else if ( CUR.face->sph_compatibility_mode &&
- !( CUR.sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) )
+ else if ( exc->face->sph_compatibility_mode &&
+ !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) )
{
- if ( CUR.sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
+ if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
B = FT_PIX_ROUND( B1 + B ) - B1;
/* Allow delta move if using sph_compatibility_mode, */
/* IUP has not been called, and point is touched on Y. */
- if ( !CUR.iup_called &&
- ( CUR.zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) )
- CUR_Func_move( &CUR.zp0, A, B );
+ if ( !exc->iup_called &&
+ ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) )
+ exc->func_move( exc, &exc->zp0, A, B );
}
- B2 = (FT_UShort)CUR.zp0.cur[A].y;
+ B2 = (FT_UShort)exc->zp0.cur[A].y;
/* Reverse this move if it results in a disallowed move */
- if ( CUR.GS.freeVector.y != 0 &&
- ( ( CUR.face->sph_compatibility_mode &&
+ if ( exc->GS.freeVector.y != 0 &&
+ ( ( exc->face->sph_compatibility_mode &&
( B1 & 63 ) == 0 &&
( B2 & 63 ) != 0 ) ||
- ( ( CUR.sph_tweak_flags &
+ ( ( exc->sph_tweak_flags &
SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP ) &&
( B1 & 63 ) != 0 &&
( B2 & 63 ) != 0 ) ) )
- CUR_Func_move( &CUR.zp0, A, -B );
+ exc->func_move( exc, &exc->zp0, A, -B );
}
}
else
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
- CUR_Func_move( &CUR.zp0, A, B );
+ exc->func_move( exc, &exc->zp0, A, B );
}
}
else
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Invalid_Reference );
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Invalid_Reference );
}
Fail:
- CUR.new_top = CUR.args;
+ exc->new_top = exc->args;
}
@@ -7627,7 +7188,8 @@
/* Stack: uint32 (2 * uint32)... --> */
/* */
static void
- Ins_DELTAC( INS_ARG )
+ Ins_DELTAC( TT_ExecContext exc,
+ FT_Long* args )
{
FT_ULong nump, k;
FT_ULong A, C, P;
@@ -7636,47 +7198,47 @@
#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
/* Delta hinting is covered by US Patent 5159668. */
- if ( CUR.face->unpatented_hinting )
+ if ( exc->face->unpatented_hinting )
{
FT_Long n = args[0] * 2;
- if ( CUR.args < n )
+ if ( exc->args < n )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Too_Few_Arguments );
- n = CUR.args;
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Too_Few_Arguments );
+ n = exc->args;
}
- CUR.args -= n;
- CUR.new_top = CUR.args;
+ exc->args -= n;
+ exc->new_top = exc->args;
return;
}
#endif
- P = (FT_ULong)CUR_Func_cur_ppem();
+ P = (FT_ULong)exc->func_cur_ppem( exc );
nump = (FT_ULong)args[0];
for ( k = 1; k <= nump; k++ )
{
- if ( CUR.args < 2 )
+ if ( exc->args < 2 )
{
- if ( CUR.pedantic_hinting )
- CUR.error = FT_THROW( Too_Few_Arguments );
- CUR.args = 0;
+ if ( exc->pedantic_hinting )
+ exc->error = FT_THROW( Too_Few_Arguments );
+ exc->args = 0;
goto Fail;
}
- CUR.args -= 2;
+ exc->args -= 2;
- A = (FT_ULong)CUR.stack[CUR.args + 1];
- B = CUR.stack[CUR.args];
+ A = (FT_ULong)exc->stack[exc->args + 1];
+ B = exc->stack[exc->args];
- if ( BOUNDSL( A, CUR.cvtSize ) )
+ if ( BOUNDSL( A, exc->cvtSize ) )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
return;
}
}
@@ -7684,7 +7246,7 @@
{
C = ( (FT_ULong)B & 0xF0 ) >> 4;
- switch ( CUR.opcode )
+ switch ( exc->opcode )
{
case 0x73:
break;
@@ -7698,22 +7260,22 @@
break;
}
- C += CUR.GS.delta_base;
+ C += exc->GS.delta_base;
if ( P == C )
{
B = ( (FT_ULong)B & 0xF ) - 8;
if ( B >= 0 )
B++;
- B *= 1L << ( 6 - CUR.GS.delta_shift );
+ B *= 1L << ( 6 - exc->GS.delta_shift );
- CUR_Func_move_cvt( A, B );
+ exc->func_move_cvt( exc, A, B );
}
}
}
Fail:
- CUR.new_top = CUR.args;
+ exc->new_top = exc->args;
}
@@ -7730,8 +7292,17 @@
/* Opcode range: 0x88 */
/* Stack: uint32 --> uint32 */
/* */
+ /* XXX: UNDOCUMENTED: Selector bits higher than 9 are currently (May */
+ /* 2015) not documented in the OpenType specification. */
+ /* */
+ /* Selector bit 11 is incorrectly described as bit 8, while the */
+ /* real meaning of bit 8 (vertical LCD subpixels) stays */
+ /* undocumented. The same mistake can be found in Greg Hitchcock's */
+ /* whitepaper. */
+ /* */
static void
- Ins_GETINFO( INS_ARG )
+ Ins_GETINFO( TT_ExecContext exc,
+ FT_Long* args )
{
FT_Long K;
@@ -7744,13 +7315,20 @@
/* Selector Bit: 0 */
/* Return Bit(s): 0-7 */
/* */
- if ( SUBPIXEL_HINTING &&
- ( args[0] & 1 ) != 0 &&
- CUR.ignore_x_mode )
+ if ( SUBPIXEL_HINTING &&
+ ( args[0] & 1 ) != 0 &&
+ exc->subpixel_hinting )
{
- K = CUR.rasterizer_version;
- FT_TRACE7(( "Setting rasterizer version %d\n",
- CUR.rasterizer_version ));
+ if ( exc->ignore_x_mode )
+ {
+ /* if in ClearType backwards compatibility mode, */
+ /* we sometimes change the TrueType version dynamically */
+ K = exc->rasterizer_version;
+ FT_TRACE6(( "Setting rasterizer version %d\n",
+ exc->rasterizer_version ));
+ }
+ else
+ K = TT_INTERPRETER_VERSION_38;
}
else
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
@@ -7762,7 +7340,7 @@
/* Selector Bit: 1 */
/* Return Bit(s): 8 */
/* */
- if ( ( args[0] & 2 ) != 0 && CUR.tt_metrics.rotated )
+ if ( ( args[0] & 2 ) != 0 && exc->tt_metrics.rotated )
K |= 0x80;
/********************************/
@@ -7770,7 +7348,7 @@
/* Selector Bit: 2 */
/* Return Bit(s): 9 */
/* */
- if ( ( args[0] & 4 ) != 0 && CUR.tt_metrics.stretched )
+ if ( ( args[0] & 4 ) != 0 && exc->tt_metrics.stretched )
K |= 1 << 8;
/********************************/
@@ -7778,24 +7356,23 @@
/* Selector Bit: 5 */
/* Return Bit(s): 12 */
/* */
- if ( ( args[0] & 32 ) != 0 && CUR.grayscale )
+ if ( ( args[0] & 32 ) != 0 && exc->grayscale )
K |= 1 << 12;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- if ( SUBPIXEL_HINTING &&
- CUR.ignore_x_mode &&
- CUR.rasterizer_version >= TT_INTERPRETER_VERSION_35 )
+ if ( SUBPIXEL_HINTING &&
+ exc->rasterizer_version >= TT_INTERPRETER_VERSION_35 )
{
- if ( CUR.rasterizer_version >= 37 )
+ if ( exc->rasterizer_version >= 37 )
{
/********************************/
/* HINTING FOR SUBPIXEL */
/* Selector Bit: 6 */
/* Return Bit(s): 13 */
/* */
- if ( ( args[0] & 64 ) != 0 && CUR.subpixel )
+ if ( ( args[0] & 64 ) != 0 && exc->subpixel_hinting )
K |= 1 << 13;
/********************************/
@@ -7804,16 +7381,16 @@
/* Return Bit(s): 14 */
/* */
/* Functionality still needs to be added */
- if ( ( args[0] & 128 ) != 0 && CUR.compatible_widths )
+ if ( ( args[0] & 128 ) != 0 && exc->compatible_widths )
K |= 1 << 14;
/********************************/
- /* SYMMETRICAL SMOOTHING */
+ /* VERTICAL LCD SUBPIXELS? */
/* Selector Bit: 8 */
/* Return Bit(s): 15 */
/* */
/* Functionality still needs to be added */
- if ( ( args[0] & 256 ) != 0 && CUR.symmetrical_smoothing )
+ if ( ( args[0] & 256 ) != 0 && exc->vertical_lcd )
K |= 1 << 15;
/********************************/
@@ -7822,10 +7399,10 @@
/* Return Bit(s): 16 */
/* */
/* Functionality still needs to be added */
- if ( ( args[0] & 512 ) != 0 && CUR.bgr )
+ if ( ( args[0] & 512 ) != 0 && exc->bgr )
K |= 1 << 16;
- if ( CUR.rasterizer_version >= 38 )
+ if ( exc->rasterizer_version >= 38 )
{
/********************************/
/* SUBPIXEL POSITIONED? */
@@ -7833,8 +7410,26 @@
/* Return Bit(s): 17 */
/* */
/* Functionality still needs to be added */
- if ( ( args[0] & 1024 ) != 0 && CUR.subpixel_positioned )
+ if ( ( args[0] & 1024 ) != 0 && exc->subpixel_positioned )
K |= 1 << 17;
+
+ /********************************/
+ /* SYMMETRICAL SMOOTHING */
+ /* Selector Bit: 11 */
+ /* Return Bit(s): 18 */
+ /* */
+ /* Functionality still needs to be added */
+ if ( ( args[0] & 2048 ) != 0 && exc->symmetrical_smoothing )
+ K |= 1 << 18;
+
+ /********************************/
+ /* GRAY CLEARTYPE */
+ /* Selector Bit: 12 */
+ /* Return Bit(s): 19 */
+ /* */
+ /* Functionality still needs to be added */
+ if ( ( args[0] & 4096 ) != 0 && exc->gray_cleartype )
+ K |= 1 << 19;
}
}
}
@@ -7846,331 +7441,43 @@
static void
- Ins_UNKNOWN( INS_ARG )
+ Ins_UNKNOWN( TT_ExecContext exc )
{
- TT_DefRecord* def = CUR.IDefs;
- TT_DefRecord* limit = def + CUR.numIDefs;
-
- FT_UNUSED_ARG;
+ TT_DefRecord* def = exc->IDefs;
+ TT_DefRecord* limit = def + exc->numIDefs;
for ( ; def < limit; def++ )
{
- if ( (FT_Byte)def->opc == CUR.opcode && def->active )
+ if ( (FT_Byte)def->opc == exc->opcode && def->active )
{
TT_CallRec* call;
- if ( CUR.callTop >= CUR.callSize )
+ if ( exc->callTop >= exc->callSize )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
return;
}
- call = CUR.callStack + CUR.callTop++;
+ call = exc->callStack + exc->callTop++;
- call->Caller_Range = CUR.curRange;
- call->Caller_IP = CUR.IP + 1;
+ call->Caller_Range = exc->curRange;
+ call->Caller_IP = exc->IP + 1;
call->Cur_Count = 1;
call->Def = def;
- INS_Goto_CodeRange( def->range, def->start );
+ Ins_Goto_CodeRange( exc, def->range, def->start );
- CUR.step_ins = FALSE;
+ exc->step_ins = FALSE;
return;
}
}
- CUR.error = FT_THROW( Invalid_Opcode );
+ exc->error = FT_THROW( Invalid_Opcode );
}
-#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
-
- static
- TInstruction_Function Instruct_Dispatch[256] =
- {
- /* Opcodes are gathered in groups of 16. */
- /* Please keep the spaces as they are. */
-
- /* SVTCA y */ Ins_SVTCA,
- /* SVTCA x */ Ins_SVTCA,
- /* SPvTCA y */ Ins_SPVTCA,
- /* SPvTCA x */ Ins_SPVTCA,
- /* SFvTCA y */ Ins_SFVTCA,
- /* SFvTCA x */ Ins_SFVTCA,
- /* SPvTL // */ Ins_SPVTL,
- /* SPvTL + */ Ins_SPVTL,
- /* SFvTL // */ Ins_SFVTL,
- /* SFvTL + */ Ins_SFVTL,
- /* SPvFS */ Ins_SPVFS,
- /* SFvFS */ Ins_SFVFS,
- /* GPV */ Ins_GPV,
- /* GFV */ Ins_GFV,
- /* SFvTPv */ Ins_SFVTPV,
- /* ISECT */ Ins_ISECT,
-
- /* SRP0 */ Ins_SRP0,
- /* SRP1 */ Ins_SRP1,
- /* SRP2 */ Ins_SRP2,
- /* SZP0 */ Ins_SZP0,
- /* SZP1 */ Ins_SZP1,
- /* SZP2 */ Ins_SZP2,
- /* SZPS */ Ins_SZPS,
- /* SLOOP */ Ins_SLOOP,
- /* RTG */ Ins_RTG,
- /* RTHG */ Ins_RTHG,
- /* SMD */ Ins_SMD,
- /* ELSE */ Ins_ELSE,
- /* JMPR */ Ins_JMPR,
- /* SCvTCi */ Ins_SCVTCI,
- /* SSwCi */ Ins_SSWCI,
- /* SSW */ Ins_SSW,
-
- /* DUP */ Ins_DUP,
- /* POP */ Ins_POP,
- /* CLEAR */ Ins_CLEAR,
- /* SWAP */ Ins_SWAP,
- /* DEPTH */ Ins_DEPTH,
- /* CINDEX */ Ins_CINDEX,
- /* MINDEX */ Ins_MINDEX,
- /* AlignPTS */ Ins_ALIGNPTS,
- /* INS_0x28 */ Ins_UNKNOWN,
- /* UTP */ Ins_UTP,
- /* LOOPCALL */ Ins_LOOPCALL,
- /* CALL */ Ins_CALL,
- /* FDEF */ Ins_FDEF,
- /* ENDF */ Ins_ENDF,
- /* MDAP[0] */ Ins_MDAP,
- /* MDAP[1] */ Ins_MDAP,
-
- /* IUP[0] */ Ins_IUP,
- /* IUP[1] */ Ins_IUP,
- /* SHP[0] */ Ins_SHP,
- /* SHP[1] */ Ins_SHP,
- /* SHC[0] */ Ins_SHC,
- /* SHC[1] */ Ins_SHC,
- /* SHZ[0] */ Ins_SHZ,
- /* SHZ[1] */ Ins_SHZ,
- /* SHPIX */ Ins_SHPIX,
- /* IP */ Ins_IP,
- /* MSIRP[0] */ Ins_MSIRP,
- /* MSIRP[1] */ Ins_MSIRP,
- /* AlignRP */ Ins_ALIGNRP,
- /* RTDG */ Ins_RTDG,
- /* MIAP[0] */ Ins_MIAP,
- /* MIAP[1] */ Ins_MIAP,
-
- /* NPushB */ Ins_NPUSHB,
- /* NPushW */ Ins_NPUSHW,
- /* WS */ Ins_WS,
- /* RS */ Ins_RS,
- /* WCvtP */ Ins_WCVTP,
- /* RCvt */ Ins_RCVT,
- /* GC[0] */ Ins_GC,
- /* GC[1] */ Ins_GC,
- /* SCFS */ Ins_SCFS,
- /* MD[0] */ Ins_MD,
- /* MD[1] */ Ins_MD,
- /* MPPEM */ Ins_MPPEM,
- /* MPS */ Ins_MPS,
- /* FlipON */ Ins_FLIPON,
- /* FlipOFF */ Ins_FLIPOFF,
- /* DEBUG */ Ins_DEBUG,
-
- /* LT */ Ins_LT,
- /* LTEQ */ Ins_LTEQ,
- /* GT */ Ins_GT,
- /* GTEQ */ Ins_GTEQ,
- /* EQ */ Ins_EQ,
- /* NEQ */ Ins_NEQ,
- /* ODD */ Ins_ODD,
- /* EVEN */ Ins_EVEN,
- /* IF */ Ins_IF,
- /* EIF */ Ins_EIF,
- /* AND */ Ins_AND,
- /* OR */ Ins_OR,
- /* NOT */ Ins_NOT,
- /* DeltaP1 */ Ins_DELTAP,
- /* SDB */ Ins_SDB,
- /* SDS */ Ins_SDS,
-
- /* ADD */ Ins_ADD,
- /* SUB */ Ins_SUB,
- /* DIV */ Ins_DIV,
- /* MUL */ Ins_MUL,
- /* ABS */ Ins_ABS,
- /* NEG */ Ins_NEG,
- /* FLOOR */ Ins_FLOOR,
- /* CEILING */ Ins_CEILING,
- /* ROUND[0] */ Ins_ROUND,
- /* ROUND[1] */ Ins_ROUND,
- /* ROUND[2] */ Ins_ROUND,
- /* ROUND[3] */ Ins_ROUND,
- /* NROUND[0] */ Ins_NROUND,
- /* NROUND[1] */ Ins_NROUND,
- /* NROUND[2] */ Ins_NROUND,
- /* NROUND[3] */ Ins_NROUND,
-
- /* WCvtF */ Ins_WCVTF,
- /* DeltaP2 */ Ins_DELTAP,
- /* DeltaP3 */ Ins_DELTAP,
- /* DeltaCn[0] */ Ins_DELTAC,
- /* DeltaCn[1] */ Ins_DELTAC,
- /* DeltaCn[2] */ Ins_DELTAC,
- /* SROUND */ Ins_SROUND,
- /* S45Round */ Ins_S45ROUND,
- /* JROT */ Ins_JROT,
- /* JROF */ Ins_JROF,
- /* ROFF */ Ins_ROFF,
- /* INS_0x7B */ Ins_UNKNOWN,
- /* RUTG */ Ins_RUTG,
- /* RDTG */ Ins_RDTG,
- /* SANGW */ Ins_SANGW,
- /* AA */ Ins_AA,
-
- /* FlipPT */ Ins_FLIPPT,
- /* FlipRgON */ Ins_FLIPRGON,
- /* FlipRgOFF */ Ins_FLIPRGOFF,
- /* INS_0x83 */ Ins_UNKNOWN,
- /* INS_0x84 */ Ins_UNKNOWN,
- /* ScanCTRL */ Ins_SCANCTRL,
- /* SDPVTL[0] */ Ins_SDPVTL,
- /* SDPVTL[1] */ Ins_SDPVTL,
- /* GetINFO */ Ins_GETINFO,
- /* IDEF */ Ins_IDEF,
- /* ROLL */ Ins_ROLL,
- /* MAX */ Ins_MAX,
- /* MIN */ Ins_MIN,
- /* ScanTYPE */ Ins_SCANTYPE,
- /* InstCTRL */ Ins_INSTCTRL,
- /* INS_0x8F */ Ins_UNKNOWN,
-
- /* INS_0x90 */ Ins_UNKNOWN,
- /* INS_0x91 */ Ins_UNKNOWN,
- /* INS_0x92 */ Ins_UNKNOWN,
- /* INS_0x93 */ Ins_UNKNOWN,
- /* INS_0x94 */ Ins_UNKNOWN,
- /* INS_0x95 */ Ins_UNKNOWN,
- /* INS_0x96 */ Ins_UNKNOWN,
- /* INS_0x97 */ Ins_UNKNOWN,
- /* INS_0x98 */ Ins_UNKNOWN,
- /* INS_0x99 */ Ins_UNKNOWN,
- /* INS_0x9A */ Ins_UNKNOWN,
- /* INS_0x9B */ Ins_UNKNOWN,
- /* INS_0x9C */ Ins_UNKNOWN,
- /* INS_0x9D */ Ins_UNKNOWN,
- /* INS_0x9E */ Ins_UNKNOWN,
- /* INS_0x9F */ Ins_UNKNOWN,
-
- /* INS_0xA0 */ Ins_UNKNOWN,
- /* INS_0xA1 */ Ins_UNKNOWN,
- /* INS_0xA2 */ Ins_UNKNOWN,
- /* INS_0xA3 */ Ins_UNKNOWN,
- /* INS_0xA4 */ Ins_UNKNOWN,
- /* INS_0xA5 */ Ins_UNKNOWN,
- /* INS_0xA6 */ Ins_UNKNOWN,
- /* INS_0xA7 */ Ins_UNKNOWN,
- /* INS_0xA8 */ Ins_UNKNOWN,
- /* INS_0xA9 */ Ins_UNKNOWN,
- /* INS_0xAA */ Ins_UNKNOWN,
- /* INS_0xAB */ Ins_UNKNOWN,
- /* INS_0xAC */ Ins_UNKNOWN,
- /* INS_0xAD */ Ins_UNKNOWN,
- /* INS_0xAE */ Ins_UNKNOWN,
- /* INS_0xAF */ Ins_UNKNOWN,
-
- /* PushB[0] */ Ins_PUSHB,
- /* PushB[1] */ Ins_PUSHB,
- /* PushB[2] */ Ins_PUSHB,
- /* PushB[3] */ Ins_PUSHB,
- /* PushB[4] */ Ins_PUSHB,
- /* PushB[5] */ Ins_PUSHB,
- /* PushB[6] */ Ins_PUSHB,
- /* PushB[7] */ Ins_PUSHB,
- /* PushW[0] */ Ins_PUSHW,
- /* PushW[1] */ Ins_PUSHW,
- /* PushW[2] */ Ins_PUSHW,
- /* PushW[3] */ Ins_PUSHW,
- /* PushW[4] */ Ins_PUSHW,
- /* PushW[5] */ Ins_PUSHW,
- /* PushW[6] */ Ins_PUSHW,
- /* PushW[7] */ Ins_PUSHW,
-
- /* MDRP[00] */ Ins_MDRP,
- /* MDRP[01] */ Ins_MDRP,
- /* MDRP[02] */ Ins_MDRP,
- /* MDRP[03] */ Ins_MDRP,
- /* MDRP[04] */ Ins_MDRP,
- /* MDRP[05] */ Ins_MDRP,
- /* MDRP[06] */ Ins_MDRP,
- /* MDRP[07] */ Ins_MDRP,
- /* MDRP[08] */ Ins_MDRP,
- /* MDRP[09] */ Ins_MDRP,
- /* MDRP[10] */ Ins_MDRP,
- /* MDRP[11] */ Ins_MDRP,
- /* MDRP[12] */ Ins_MDRP,
- /* MDRP[13] */ Ins_MDRP,
- /* MDRP[14] */ Ins_MDRP,
- /* MDRP[15] */ Ins_MDRP,
-
- /* MDRP[16] */ Ins_MDRP,
- /* MDRP[17] */ Ins_MDRP,
- /* MDRP[18] */ Ins_MDRP,
- /* MDRP[19] */ Ins_MDRP,
- /* MDRP[20] */ Ins_MDRP,
- /* MDRP[21] */ Ins_MDRP,
- /* MDRP[22] */ Ins_MDRP,
- /* MDRP[23] */ Ins_MDRP,
- /* MDRP[24] */ Ins_MDRP,
- /* MDRP[25] */ Ins_MDRP,
- /* MDRP[26] */ Ins_MDRP,
- /* MDRP[27] */ Ins_MDRP,
- /* MDRP[28] */ Ins_MDRP,
- /* MDRP[29] */ Ins_MDRP,
- /* MDRP[30] */ Ins_MDRP,
- /* MDRP[31] */ Ins_MDRP,
-
- /* MIRP[00] */ Ins_MIRP,
- /* MIRP[01] */ Ins_MIRP,
- /* MIRP[02] */ Ins_MIRP,
- /* MIRP[03] */ Ins_MIRP,
- /* MIRP[04] */ Ins_MIRP,
- /* MIRP[05] */ Ins_MIRP,
- /* MIRP[06] */ Ins_MIRP,
- /* MIRP[07] */ Ins_MIRP,
- /* MIRP[08] */ Ins_MIRP,
- /* MIRP[09] */ Ins_MIRP,
- /* MIRP[10] */ Ins_MIRP,
- /* MIRP[11] */ Ins_MIRP,
- /* MIRP[12] */ Ins_MIRP,
- /* MIRP[13] */ Ins_MIRP,
- /* MIRP[14] */ Ins_MIRP,
- /* MIRP[15] */ Ins_MIRP,
-
- /* MIRP[16] */ Ins_MIRP,
- /* MIRP[17] */ Ins_MIRP,
- /* MIRP[18] */ Ins_MIRP,
- /* MIRP[19] */ Ins_MIRP,
- /* MIRP[20] */ Ins_MIRP,
- /* MIRP[21] */ Ins_MIRP,
- /* MIRP[22] */ Ins_MIRP,
- /* MIRP[23] */ Ins_MIRP,
- /* MIRP[24] */ Ins_MIRP,
- /* MIRP[25] */ Ins_MIRP,
- /* MIRP[26] */ Ins_MIRP,
- /* MIRP[27] */ Ins_MIRP,
- /* MIRP[28] */ Ins_MIRP,
- /* MIRP[29] */ Ins_MIRP,
- /* MIRP[30] */ Ins_MIRP,
- /* MIRP[31] */ Ins_MIRP
- };
-
-
-#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
-
/*************************************************************************/
/* */
/* RUN */
@@ -8198,8 +7505,6 @@
/* */
/* THIS IS THE INTERPRETER'S MAIN LOOP. */
/* */
- /* Instructions appear in the specification's order. */
- /* */
/*************************************************************************/
@@ -8225,90 +7530,100 @@
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- if ( !exc )
- return FT_THROW( Invalid_Argument );
-
- cur = *exc;
-#endif
-
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
- CUR.iup_called = FALSE;
+ exc->iup_called = FALSE;
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
/* set PPEM and CVT functions */
- CUR.tt_metrics.ratio = 0;
- if ( CUR.metrics.x_ppem != CUR.metrics.y_ppem )
+ exc->tt_metrics.ratio = 0;
+ if ( exc->metrics.x_ppem != exc->metrics.y_ppem )
{
/* non-square pixels, use the stretched routines */
- CUR.func_cur_ppem = Current_Ppem_Stretched;
- CUR.func_read_cvt = Read_CVT_Stretched;
- CUR.func_write_cvt = Write_CVT_Stretched;
- CUR.func_move_cvt = Move_CVT_Stretched;
+ exc->func_cur_ppem = Current_Ppem_Stretched;
+ exc->func_read_cvt = Read_CVT_Stretched;
+ exc->func_write_cvt = Write_CVT_Stretched;
+ exc->func_move_cvt = Move_CVT_Stretched;
}
else
{
/* square pixels, use normal routines */
- CUR.func_cur_ppem = Current_Ppem;
- CUR.func_read_cvt = Read_CVT;
- CUR.func_write_cvt = Write_CVT;
- CUR.func_move_cvt = Move_CVT;
+ exc->func_cur_ppem = Current_Ppem;
+ exc->func_read_cvt = Read_CVT;
+ exc->func_write_cvt = Write_CVT;
+ exc->func_move_cvt = Move_CVT;
}
- COMPUTE_Funcs();
- COMPUTE_Round( (FT_Byte)exc->GS.round_state );
+ Compute_Funcs( exc );
+ Compute_Round( exc, (FT_Byte)exc->GS.round_state );
do
{
- CUR.opcode = CUR.code[CUR.IP];
+ exc->opcode = exc->code[exc->IP];
- FT_TRACE7(( " " ));
- FT_TRACE7(( opcode_name[CUR.opcode] ));
- FT_TRACE7(( "\n" ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+ {
+ FT_Long cnt = FT_MIN( 8, exc->top );
+ FT_Long n;
+
+
+ /* if tracing level is 7, show current code position */
+ /* and the first few stack elements also */
+ FT_TRACE6(( " " ));
+ FT_TRACE7(( "%06d ", exc->IP ));
+ FT_TRACE6(( opcode_name[exc->opcode] + 2 ));
+ FT_TRACE7(( "%*s", *opcode_name[exc->opcode] == 'A'
+ ? 2
+ : 12 - ( *opcode_name[exc->opcode] - '0' ),
+ "#" ));
+ for ( n = 0; n < cnt; n++ )
+ FT_TRACE7(( " %d", exc->stack[exc->top - n] ));
+ FT_TRACE6(( "\n" ));
+ }
+#endif /* FT_DEBUG_LEVEL_TRACE */
- if ( ( CUR.length = opcode_length[CUR.opcode] ) < 0 )
+ if ( ( exc->length = opcode_length[exc->opcode] ) < 0 )
{
- if ( CUR.IP + 1 >= CUR.codeSize )
+ if ( exc->IP + 1 >= exc->codeSize )
goto LErrorCodeOverflow_;
- CUR.length = 2 - CUR.length * CUR.code[CUR.IP + 1];
+ exc->length = 2 - exc->length * exc->code[exc->IP + 1];
}
- if ( CUR.IP + CUR.length > CUR.codeSize )
+ if ( exc->IP + exc->length > exc->codeSize )
goto LErrorCodeOverflow_;
/* First, let's check for empty stack and overflow */
- CUR.args = CUR.top - ( Pop_Push_Count[CUR.opcode] >> 4 );
+ exc->args = exc->top - ( Pop_Push_Count[exc->opcode] >> 4 );
/* `args' is the top of the stack once arguments have been popped. */
/* One can also interpret it as the index of the last argument. */
- if ( CUR.args < 0 )
+ if ( exc->args < 0 )
{
- if ( CUR.pedantic_hinting )
+ if ( exc->pedantic_hinting )
{
- CUR.error = FT_THROW( Too_Few_Arguments );
+ exc->error = FT_THROW( Too_Few_Arguments );
goto LErrorLabel_;
}
/* push zeroes onto the stack */
- for ( i = 0; i < Pop_Push_Count[CUR.opcode] >> 4; i++ )
- CUR.stack[i] = 0;
- CUR.args = 0;
+ for ( i = 0; i < Pop_Push_Count[exc->opcode] >> 4; i++ )
+ exc->stack[i] = 0;
+ exc->args = 0;
}
- CUR.new_top = CUR.args + ( Pop_Push_Count[CUR.opcode] & 15 );
+ exc->new_top = exc->args + ( Pop_Push_Count[exc->opcode] & 15 );
/* `new_top' is the new top of the stack, after the instruction's */
/* execution. `top' will be set to `new_top' after the `switch' */
/* statement. */
- if ( CUR.new_top > CUR.stackSize )
+ if ( exc->new_top > exc->stackSize )
{
- CUR.error = FT_THROW( Stack_Overflow );
+ exc->error = FT_THROW( Stack_Overflow );
goto LErrorLabel_;
}
- CUR.step_ins = TRUE;
- CUR.error = FT_Err_Ok;
+ exc->step_ins = TRUE;
+ exc->error = FT_Err_Ok;
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
@@ -8316,17 +7631,17 @@
{
for ( i = 0; i < opcode_patterns; i++ )
{
- if ( opcode_pointer[i] < opcode_size[i] &&
- CUR.opcode == opcode_pattern[i][opcode_pointer[i]] )
+ if ( opcode_pointer[i] < opcode_size[i] &&
+ exc->opcode == opcode_pattern[i][opcode_pointer[i]] )
{
opcode_pointer[i] += 1;
if ( opcode_pointer[i] == opcode_size[i] )
{
- FT_TRACE7(( "sph: opcode ptrn: %d, %s %s\n",
+ FT_TRACE6(( "sph: opcode ptrn: %d, %s %s\n",
i,
- CUR.face->root.family_name,
- CUR.face->root.style_name ));
+ exc->face->root.family_name,
+ exc->face->root.style_name ));
switch ( i )
{
@@ -8343,15 +7658,9 @@
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
-#ifdef TT_CONFIG_OPTION_INTERPRETER_SWITCH
-
{
- FT_Long* args = CUR.stack + CUR.args;
- FT_Byte opcode = CUR.opcode;
-
-
-#undef ARRAY_BOUND_ERROR
-#define ARRAY_BOUND_ERROR goto Set_Invalid_Ref
+ FT_Long* args = exc->stack + exc->args;
+ FT_Byte opcode = exc->opcode;
switch ( opcode )
@@ -8362,580 +7671,543 @@
case 0x03: /* SPvTCA x */
case 0x04: /* SFvTCA y */
case 0x05: /* SFvTCA x */
- {
- FT_Short AA, BB;
-
-
- AA = (FT_Short)( ( opcode & 1 ) << 14 );
- BB = (FT_Short)( AA ^ 0x4000 );
-
- if ( opcode < 4 )
- {
- CUR.GS.projVector.x = AA;
- CUR.GS.projVector.y = BB;
-
- CUR.GS.dualVector.x = AA;
- CUR.GS.dualVector.y = BB;
- }
- else
- {
- GUESS_VECTOR( projVector );
- }
-
- if ( ( opcode & 2 ) == 0 )
- {
- CUR.GS.freeVector.x = AA;
- CUR.GS.freeVector.y = BB;
- }
- else
- {
- GUESS_VECTOR( freeVector );
- }
-
- COMPUTE_Funcs();
- }
+ Ins_SxyTCA( exc );
break;
case 0x06: /* SPvTL // */
case 0x07: /* SPvTL + */
- DO_SPVTL
+ Ins_SPVTL( exc, args );
break;
case 0x08: /* SFvTL // */
case 0x09: /* SFvTL + */
- DO_SFVTL
+ Ins_SFVTL( exc, args );
break;
case 0x0A: /* SPvFS */
- DO_SPVFS
+ Ins_SPVFS( exc, args );
break;
case 0x0B: /* SFvFS */
- DO_SFVFS
+ Ins_SFVFS( exc, args );
break;
- case 0x0C: /* GPV */
- DO_GPV
+ case 0x0C: /* GPv */
+ Ins_GPV( exc, args );
break;
- case 0x0D: /* GFV */
- DO_GFV
+ case 0x0D: /* GFv */
+ Ins_GFV( exc, args );
break;
case 0x0E: /* SFvTPv */
- DO_SFVTPV
+ Ins_SFVTPV( exc );
break;
case 0x0F: /* ISECT */
- Ins_ISECT( EXEC_ARG_ args );
+ Ins_ISECT( exc, args );
break;
case 0x10: /* SRP0 */
- DO_SRP0
+ Ins_SRP0( exc, args );
break;
case 0x11: /* SRP1 */
- DO_SRP1
+ Ins_SRP1( exc, args );
break;
case 0x12: /* SRP2 */
- DO_SRP2
+ Ins_SRP2( exc, args );
break;
case 0x13: /* SZP0 */
- Ins_SZP0( EXEC_ARG_ args );
+ Ins_SZP0( exc, args );
break;
case 0x14: /* SZP1 */
- Ins_SZP1( EXEC_ARG_ args );
+ Ins_SZP1( exc, args );
break;
case 0x15: /* SZP2 */
- Ins_SZP2( EXEC_ARG_ args );
+ Ins_SZP2( exc, args );
break;
case 0x16: /* SZPS */
- Ins_SZPS( EXEC_ARG_ args );
+ Ins_SZPS( exc, args );
break;
case 0x17: /* SLOOP */
- DO_SLOOP
+ Ins_SLOOP( exc, args );
break;
case 0x18: /* RTG */
- DO_RTG
+ Ins_RTG( exc );
break;
case 0x19: /* RTHG */
- DO_RTHG
+ Ins_RTHG( exc );
break;
case 0x1A: /* SMD */
- DO_SMD
+ Ins_SMD( exc, args );
break;
case 0x1B: /* ELSE */
- Ins_ELSE( EXEC_ARG_ args );
+ Ins_ELSE( exc );
break;
case 0x1C: /* JMPR */
- DO_JMPR
+ Ins_JMPR( exc, args );
break;
case 0x1D: /* SCVTCI */
- DO_SCVTCI
+ Ins_SCVTCI( exc, args );
break;
case 0x1E: /* SSWCI */
- DO_SSWCI
+ Ins_SSWCI( exc, args );
break;
case 0x1F: /* SSW */
- DO_SSW
+ Ins_SSW( exc, args );
break;
case 0x20: /* DUP */
- DO_DUP
+ Ins_DUP( args );
break;
case 0x21: /* POP */
- /* nothing :-) */
+ Ins_POP();
break;
case 0x22: /* CLEAR */
- DO_CLEAR
+ Ins_CLEAR( exc );
break;
case 0x23: /* SWAP */
- DO_SWAP
+ Ins_SWAP( args );
break;
case 0x24: /* DEPTH */
- DO_DEPTH
+ Ins_DEPTH( exc, args );
break;
case 0x25: /* CINDEX */
- DO_CINDEX
+ Ins_CINDEX( exc, args );
break;
case 0x26: /* MINDEX */
- Ins_MINDEX( EXEC_ARG_ args );
+ Ins_MINDEX( exc, args );
break;
case 0x27: /* ALIGNPTS */
- Ins_ALIGNPTS( EXEC_ARG_ args );
+ Ins_ALIGNPTS( exc, args );
break;
case 0x28: /* ???? */
- Ins_UNKNOWN( EXEC_ARG_ args );
+ Ins_UNKNOWN( exc );
break;
case 0x29: /* UTP */
- Ins_UTP( EXEC_ARG_ args );
+ Ins_UTP( exc, args );
break;
case 0x2A: /* LOOPCALL */
- Ins_LOOPCALL( EXEC_ARG_ args );
+ Ins_LOOPCALL( exc, args );
break;
case 0x2B: /* CALL */
- Ins_CALL( EXEC_ARG_ args );
+ Ins_CALL( exc, args );
break;
case 0x2C: /* FDEF */
- Ins_FDEF( EXEC_ARG_ args );
+ Ins_FDEF( exc, args );
break;
case 0x2D: /* ENDF */
- Ins_ENDF( EXEC_ARG_ args );
+ Ins_ENDF( exc );
break;
case 0x2E: /* MDAP */
case 0x2F: /* MDAP */
- Ins_MDAP( EXEC_ARG_ args );
+ Ins_MDAP( exc, args );
break;
case 0x30: /* IUP */
case 0x31: /* IUP */
- Ins_IUP( EXEC_ARG_ args );
+ Ins_IUP( exc );
break;
case 0x32: /* SHP */
case 0x33: /* SHP */
- Ins_SHP( EXEC_ARG_ args );
+ Ins_SHP( exc );
break;
case 0x34: /* SHC */
case 0x35: /* SHC */
- Ins_SHC( EXEC_ARG_ args );
+ Ins_SHC( exc, args );
break;
case 0x36: /* SHZ */
case 0x37: /* SHZ */
- Ins_SHZ( EXEC_ARG_ args );
+ Ins_SHZ( exc, args );
break;
case 0x38: /* SHPIX */
- Ins_SHPIX( EXEC_ARG_ args );
+ Ins_SHPIX( exc, args );
break;
case 0x39: /* IP */
- Ins_IP( EXEC_ARG_ args );
+ Ins_IP( exc );
break;
case 0x3A: /* MSIRP */
case 0x3B: /* MSIRP */
- Ins_MSIRP( EXEC_ARG_ args );
+ Ins_MSIRP( exc, args );
break;
case 0x3C: /* AlignRP */
- Ins_ALIGNRP( EXEC_ARG_ args );
+ Ins_ALIGNRP( exc );
break;
case 0x3D: /* RTDG */
- DO_RTDG
+ Ins_RTDG( exc );
break;
case 0x3E: /* MIAP */
case 0x3F: /* MIAP */
- Ins_MIAP( EXEC_ARG_ args );
+ Ins_MIAP( exc, args );
break;
case 0x40: /* NPUSHB */
- Ins_NPUSHB( EXEC_ARG_ args );
+ Ins_NPUSHB( exc, args );
break;
case 0x41: /* NPUSHW */
- Ins_NPUSHW( EXEC_ARG_ args );
+ Ins_NPUSHW( exc, args );
break;
case 0x42: /* WS */
- DO_WS
- break;
-
- Set_Invalid_Ref:
- CUR.error = FT_THROW( Invalid_Reference );
+ Ins_WS( exc, args );
break;
case 0x43: /* RS */
- DO_RS
+ Ins_RS( exc, args );
break;
case 0x44: /* WCVTP */
- DO_WCVTP
+ Ins_WCVTP( exc, args );
break;
case 0x45: /* RCVT */
- DO_RCVT
+ Ins_RCVT( exc, args );
break;
case 0x46: /* GC */
case 0x47: /* GC */
- Ins_GC( EXEC_ARG_ args );
+ Ins_GC( exc, args );
break;
case 0x48: /* SCFS */
- Ins_SCFS( EXEC_ARG_ args );
+ Ins_SCFS( exc, args );
break;
case 0x49: /* MD */
case 0x4A: /* MD */
- Ins_MD( EXEC_ARG_ args );
+ Ins_MD( exc, args );
break;
case 0x4B: /* MPPEM */
- DO_MPPEM
+ Ins_MPPEM( exc, args );
break;
case 0x4C: /* MPS */
- DO_MPS
+ Ins_MPS( exc, args );
break;
case 0x4D: /* FLIPON */
- DO_FLIPON
+ Ins_FLIPON( exc );
break;
case 0x4E: /* FLIPOFF */
- DO_FLIPOFF
+ Ins_FLIPOFF( exc );
break;
case 0x4F: /* DEBUG */
- DO_DEBUG
+ Ins_DEBUG( exc );
break;
case 0x50: /* LT */
- DO_LT
+ Ins_LT( args );
break;
case 0x51: /* LTEQ */
- DO_LTEQ
+ Ins_LTEQ( args );
break;
case 0x52: /* GT */
- DO_GT
+ Ins_GT( args );
break;
case 0x53: /* GTEQ */
- DO_GTEQ
+ Ins_GTEQ( args );
break;
case 0x54: /* EQ */
- DO_EQ
+ Ins_EQ( args );
break;
case 0x55: /* NEQ */
- DO_NEQ
+ Ins_NEQ( args );
break;
case 0x56: /* ODD */
- DO_ODD
+ Ins_ODD( exc, args );
break;
case 0x57: /* EVEN */
- DO_EVEN
+ Ins_EVEN( exc, args );
break;
case 0x58: /* IF */
- Ins_IF( EXEC_ARG_ args );
+ Ins_IF( exc, args );
break;
case 0x59: /* EIF */
- /* do nothing */
+ Ins_EIF();
break;
case 0x5A: /* AND */
- DO_AND
+ Ins_AND( args );
break;
case 0x5B: /* OR */
- DO_OR
+ Ins_OR( args );
break;
case 0x5C: /* NOT */
- DO_NOT
+ Ins_NOT( args );
break;
case 0x5D: /* DELTAP1 */
- Ins_DELTAP( EXEC_ARG_ args );
+ Ins_DELTAP( exc, args );
break;
case 0x5E: /* SDB */
- DO_SDB
+ Ins_SDB( exc, args );
break;
case 0x5F: /* SDS */
- DO_SDS
+ Ins_SDS( exc, args );
break;
case 0x60: /* ADD */
- DO_ADD
+ Ins_ADD( args );
break;
case 0x61: /* SUB */
- DO_SUB
+ Ins_SUB( args );
break;
case 0x62: /* DIV */
- DO_DIV
+ Ins_DIV( exc, args );
break;
case 0x63: /* MUL */
- DO_MUL
+ Ins_MUL( args );
break;
case 0x64: /* ABS */
- DO_ABS
+ Ins_ABS( args );
break;
case 0x65: /* NEG */
- DO_NEG
+ Ins_NEG( args );
break;
case 0x66: /* FLOOR */
- DO_FLOOR
+ Ins_FLOOR( args );
break;
case 0x67: /* CEILING */
- DO_CEILING
+ Ins_CEILING( args );
break;
case 0x68: /* ROUND */
case 0x69: /* ROUND */
case 0x6A: /* ROUND */
case 0x6B: /* ROUND */
- DO_ROUND
+ Ins_ROUND( exc, args );
break;
case 0x6C: /* NROUND */
case 0x6D: /* NROUND */
case 0x6E: /* NRRUND */
case 0x6F: /* NROUND */
- DO_NROUND
+ Ins_NROUND( exc, args );
break;
case 0x70: /* WCVTF */
- DO_WCVTF
+ Ins_WCVTF( exc, args );
break;
case 0x71: /* DELTAP2 */
case 0x72: /* DELTAP3 */
- Ins_DELTAP( EXEC_ARG_ args );
+ Ins_DELTAP( exc, args );
break;
case 0x73: /* DELTAC0 */
case 0x74: /* DELTAC1 */
case 0x75: /* DELTAC2 */
- Ins_DELTAC( EXEC_ARG_ args );
+ Ins_DELTAC( exc, args );
break;
case 0x76: /* SROUND */
- DO_SROUND
+ Ins_SROUND( exc, args );
break;
case 0x77: /* S45Round */
- DO_S45ROUND
+ Ins_S45ROUND( exc, args );
break;
case 0x78: /* JROT */
- DO_JROT
+ Ins_JROT( exc, args );
break;
case 0x79: /* JROF */
- DO_JROF
+ Ins_JROF( exc, args );
break;
case 0x7A: /* ROFF */
- DO_ROFF
+ Ins_ROFF( exc );
break;
case 0x7B: /* ???? */
- Ins_UNKNOWN( EXEC_ARG_ args );
+ Ins_UNKNOWN( exc );
break;
case 0x7C: /* RUTG */
- DO_RUTG
+ Ins_RUTG( exc );
break;
case 0x7D: /* RDTG */
- DO_RDTG
+ Ins_RDTG( exc );
break;
case 0x7E: /* SANGW */
- case 0x7F: /* AA */
- /* nothing - obsolete */
+ Ins_SANGW();
+ break;
+
+ case 0x7F: /* AA */
+ Ins_AA();
break;
case 0x80: /* FLIPPT */
- Ins_FLIPPT( EXEC_ARG_ args );
+ Ins_FLIPPT( exc );
break;
case 0x81: /* FLIPRGON */
- Ins_FLIPRGON( EXEC_ARG_ args );
+ Ins_FLIPRGON( exc, args );
break;
case 0x82: /* FLIPRGOFF */
- Ins_FLIPRGOFF( EXEC_ARG_ args );
+ Ins_FLIPRGOFF( exc, args );
break;
case 0x83: /* UNKNOWN */
case 0x84: /* UNKNOWN */
- Ins_UNKNOWN( EXEC_ARG_ args );
+ Ins_UNKNOWN( exc );
break;
case 0x85: /* SCANCTRL */
- Ins_SCANCTRL( EXEC_ARG_ args );
+ Ins_SCANCTRL( exc, args );
break;
- case 0x86: /* SDPVTL */
- case 0x87: /* SDPVTL */
- Ins_SDPVTL( EXEC_ARG_ args );
+ case 0x86: /* SDPvTL */
+ case 0x87: /* SDPvTL */
+ Ins_SDPVTL( exc, args );
break;
case 0x88: /* GETINFO */
- Ins_GETINFO( EXEC_ARG_ args );
+ Ins_GETINFO( exc, args );
break;
case 0x89: /* IDEF */
- Ins_IDEF( EXEC_ARG_ args );
+ Ins_IDEF( exc, args );
break;
case 0x8A: /* ROLL */
- Ins_ROLL( EXEC_ARG_ args );
+ Ins_ROLL( args );
break;
case 0x8B: /* MAX */
- DO_MAX
+ Ins_MAX( args );
break;
case 0x8C: /* MIN */
- DO_MIN
+ Ins_MIN( args );
break;
case 0x8D: /* SCANTYPE */
- Ins_SCANTYPE( EXEC_ARG_ args );
+ Ins_SCANTYPE( exc, args );
break;
case 0x8E: /* INSTCTRL */
- Ins_INSTCTRL( EXEC_ARG_ args );
+ Ins_INSTCTRL( exc, args );
break;
case 0x8F:
- Ins_UNKNOWN( EXEC_ARG_ args );
+ Ins_UNKNOWN( exc );
break;
default:
if ( opcode >= 0xE0 )
- Ins_MIRP( EXEC_ARG_ args );
+ Ins_MIRP( exc, args );
else if ( opcode >= 0xC0 )
- Ins_MDRP( EXEC_ARG_ args );
+ Ins_MDRP( exc, args );
else if ( opcode >= 0xB8 )
- Ins_PUSHW( EXEC_ARG_ args );
+ Ins_PUSHW( exc, args );
else if ( opcode >= 0xB0 )
- Ins_PUSHB( EXEC_ARG_ args );
+ Ins_PUSHB( exc, args );
else
- Ins_UNKNOWN( EXEC_ARG_ args );
+ Ins_UNKNOWN( exc );
}
-
}
-#else
-
- Instruct_Dispatch[CUR.opcode]( EXEC_ARG_ &CUR.stack[CUR.args] );
-
-#endif /* TT_CONFIG_OPTION_INTERPRETER_SWITCH */
-
- if ( CUR.error )
+ if ( exc->error )
{
- switch ( CUR.error )
+ switch ( exc->error )
{
/* looking for redefined instructions */
case FT_ERR( Invalid_Opcode ):
{
- TT_DefRecord* def = CUR.IDefs;
- TT_DefRecord* limit = def + CUR.numIDefs;
+ TT_DefRecord* def = exc->IDefs;
+ TT_DefRecord* limit = def + exc->numIDefs;
for ( ; def < limit; def++ )
{
- if ( def->active && CUR.opcode == (FT_Byte)def->opc )
+ if ( def->active && exc->opcode == (FT_Byte)def->opc )
{
TT_CallRec* callrec;
- if ( CUR.callTop >= CUR.callSize )
+ if ( exc->callTop >= exc->callSize )
{
- CUR.error = FT_THROW( Invalid_Reference );
+ exc->error = FT_THROW( Invalid_Reference );
goto LErrorLabel_;
}
- callrec = &CUR.callStack[CUR.callTop];
+ callrec = &exc->callStack[exc->callTop];
- callrec->Caller_Range = CUR.curRange;
- callrec->Caller_IP = CUR.IP + 1;
+ callrec->Caller_Range = exc->curRange;
+ callrec->Caller_IP = exc->IP + 1;
callrec->Cur_Count = 1;
callrec->Def = def;
- if ( INS_Goto_CodeRange( def->range, def->start ) == FAILURE )
+ if ( Ins_Goto_CodeRange( exc,
+ def->range,
+ def->start ) == FAILURE )
goto LErrorLabel_;
goto LSuiteLabel_;
@@ -8943,7 +8215,7 @@
}
}
- CUR.error = FT_THROW( Invalid_Opcode );
+ exc->error = FT_THROW( Invalid_Opcode );
goto LErrorLabel_;
#if 0
@@ -8961,10 +8233,10 @@
}
}
- CUR.top = CUR.new_top;
+ exc->top = exc->new_top;
- if ( CUR.step_ins )
- CUR.IP += CUR.length;
+ if ( exc->step_ins )
+ exc->IP += exc->length;
/* increment instruction counter and check if we didn't */
/* run this program for too long (e.g. infinite loops). */
@@ -8972,48 +8244,38 @@
return FT_THROW( Execution_Too_Long );
LSuiteLabel_:
- if ( CUR.IP >= CUR.codeSize )
+ if ( exc->IP >= exc->codeSize )
{
- if ( CUR.callTop > 0 )
+ if ( exc->callTop > 0 )
{
- CUR.error = FT_THROW( Code_Overflow );
+ exc->error = FT_THROW( Code_Overflow );
goto LErrorLabel_;
}
else
goto LNo_Error_;
}
- } while ( !CUR.instruction_trap );
+ } while ( !exc->instruction_trap );
LNo_Error_:
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- *exc = cur;
-#endif
-
return FT_Err_Ok;
LErrorCodeOverflow_:
- CUR.error = FT_THROW( Code_Overflow );
+ exc->error = FT_THROW( Code_Overflow );
LErrorLabel_:
-
-#ifdef TT_CONFIG_OPTION_STATIC_RASTER
- *exc = cur;
-#endif
-
/* If any errors have occurred, function tables may be broken. */
/* Force a re-execution of `prep' and `fpgm' tables if no */
/* bytecode debugger is run. */
- if ( CUR.error &&
- !CUR.instruction_trap &&
- CUR.curRange == tt_coderange_glyph )
+ if ( exc->error &&
+ !exc->instruction_trap &&
+ exc->curRange == tt_coderange_glyph )
{
- FT_TRACE1(( " The interpreter returned error 0x%x\n", CUR.error ));
+ FT_TRACE1(( " The interpreter returned error 0x%x\n", exc->error ));
exc->size->bytecode_ready = -1;
exc->size->cvt_ready = -1;
}
- return CUR.error;
+ return exc->error;
}
diff --git a/freetype/src/truetype/ttinterp.h b/freetype/src/truetype/ttinterp.h
index 333decc6a..32706d076 100644
--- a/freetype/src/truetype/ttinterp.h
+++ b/freetype/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
/* */
/* TrueType bytecode interpreter (specification). */
/* */
-/* Copyright 1996-2007, 2010, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -26,23 +26,6 @@
FT_BEGIN_HEADER
-#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
-
-#define EXEC_OP_ TT_ExecContext exc,
-#define EXEC_OP TT_ExecContext exc
-#define EXEC_ARG_ exc,
-#define EXEC_ARG exc
-
-#else /* static implementation */
-
-#define EXEC_OP_ /* void */
-#define EXEC_OP /* void */
-#define EXEC_ARG_ /* void */
-#define EXEC_ARG /* void */
-
-#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
-
-
/*************************************************************************/
/* */
/* Rounding mode constants. */
@@ -67,33 +50,38 @@ FT_BEGIN_HEADER
/* Rounding function */
typedef FT_F26Dot6
- (*TT_Round_Func)( EXEC_OP_ FT_F26Dot6 distance,
- FT_F26Dot6 compensation );
+ (*TT_Round_Func)( TT_ExecContext exc,
+ FT_F26Dot6 distance,
+ FT_F26Dot6 compensation );
/* Point displacement along the freedom vector routine */
typedef void
- (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone zone,
- FT_UShort point,
- FT_F26Dot6 distance );
+ (*TT_Move_Func)( TT_ExecContext exc,
+ TT_GlyphZone zone,
+ FT_UShort point,
+ FT_F26Dot6 distance );
/* Distance projection along one of the projection vectors */
typedef FT_F26Dot6
- (*TT_Project_Func)( EXEC_OP_ FT_Pos dx,
- FT_Pos dy );
+ (*TT_Project_Func)( TT_ExecContext exc,
+ FT_Pos dx,
+ FT_Pos dy );
/* getting current ppem. Take care of non-square pixels if necessary */
typedef FT_Long
- (*TT_Cur_Ppem_Func)( EXEC_OP );
+ (*TT_Cur_Ppem_Func)( TT_ExecContext exc );
/* reading a cvt value. Take care of non-square pixels if necessary */
typedef FT_F26Dot6
- (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong idx );
+ (*TT_Get_CVT_Func)( TT_ExecContext exc,
+ FT_ULong idx );
/* setting or moving a cvt value. Take care of non-square pixels */
/* if necessary */
typedef void
- (*TT_Set_CVT_Func)( EXEC_OP_ FT_ULong idx,
- FT_F26Dot6 value );
+ (*TT_Set_CVT_Func)( TT_ExecContext exc,
+ FT_ULong idx,
+ FT_F26Dot6 value );
/*************************************************************************/
@@ -170,11 +158,11 @@ FT_BEGIN_HEADER
FT_Long top; /* top of exec. stack */
- FT_UInt stackSize; /* size of exec. stack */
+ FT_Long stackSize; /* size of exec. stack */
FT_Long* stack; /* current exec. stack */
FT_Long args;
- FT_UInt new_top; /* new top after exec. */
+ FT_Long new_top; /* new top after exec. */
TT_GlyphZoneRec zp0, /* zone records */
zp1,
@@ -264,18 +252,22 @@ FT_BEGIN_HEADER
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
TT_Round_Func func_round_sphn; /* subpixel rounding function */
- FT_Bool subpixel; /* Using subpixel hinting? */
+ FT_Bool subpixel_hinting; /* Using subpixel hinting? */
FT_Bool ignore_x_mode; /* Standard rendering mode for */
/* subpixel hinting. On if gray */
/* or subpixel hinting is on. */
- /* The following 4 aren't fully implemented but here for MS rasterizer */
+ /* The following 6 aren't fully implemented but here for MS rasterizer */
/* compatibility. */
FT_Bool compatible_widths; /* compatible widths? */
FT_Bool symmetrical_smoothing; /* symmetrical_smoothing? */
FT_Bool bgr; /* bgr instead of rgb? */
+ FT_Bool vertical_lcd; /* long side of LCD subpixel */
+ /* rectangles is horizontal */
FT_Bool subpixel_positioned; /* subpixel positioned */
/* (DirectWrite ClearType)? */
+ FT_Bool gray_cleartype; /* ClearType hinting but */
+ /* grayscale rendering */
FT_Int rasterizer_version; /* MS rasterizer version */
@@ -315,7 +307,7 @@ FT_BEGIN_HEADER
FT_LOCAL( FT_Error )
Update_Max( FT_Memory memory,
FT_ULong* size,
- FT_Long multiplier,
+ FT_ULong multiplier,
void* _pbuff,
FT_ULong new_max );
#endif /* TT_USE_BYTECODE_INTERPRETER */
@@ -339,6 +331,7 @@ FT_BEGIN_HEADER
/* */
/* <Note> */
/* Only the glyph loader and debugger should call this function. */
+ /* (And right now only the glyph loader uses it.) */
/* */
FT_EXPORT( TT_ExecContext )
TT_New_Context( TT_Driver driver );
@@ -358,8 +351,7 @@ FT_BEGIN_HEADER
TT_Size ins );
FT_LOCAL( FT_Error )
- TT_Run_Context( TT_ExecContext exec,
- FT_Bool debug );
+ TT_Run_Context( TT_ExecContext exec );
#endif /* TT_USE_BYTECODE_INTERPRETER */
diff --git a/freetype/src/truetype/ttobjs.c b/freetype/src/truetype/ttobjs.c
index 7357cdf4e..68cb15741 100644
--- a/freetype/src/truetype/ttobjs.c
+++ b/freetype/src/truetype/ttobjs.c
@@ -4,7 +4,7 @@
/* */
/* Objects manager (body). */
/* */
-/* Copyright 1996-2013 */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -751,14 +751,7 @@
FT_Error error;
- /* debugging instances have their own context */
- if ( size->debug )
- exec = size->context;
- else
- exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
-
- if ( !exec )
- return FT_THROW( Could_Not_Find_Context );
+ exec = size->context;
error = TT_Load_Context( exec, face, size );
if ( error )
@@ -795,7 +788,7 @@
TT_Set_CodeRange( exec,
tt_coderange_font,
face->font_program,
- face->font_program_size );
+ (FT_Long)face->font_program_size );
/* disable CVT and glyph programs coderange */
TT_Clear_CodeRange( exec, tt_coderange_cvt );
@@ -845,14 +838,7 @@
FT_Error error;
- /* debugging instances have their own context */
- if ( size->debug )
- exec = size->context;
- else
- exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
-
- if ( !exec )
- return FT_THROW( Could_Not_Find_Context );
+ exec = size->context;
error = TT_Load_Context( exec, face, size );
if ( error )
@@ -868,7 +854,7 @@
TT_Set_CodeRange( exec,
tt_coderange_cvt,
face->cvt_program,
- face->cvt_program_size );
+ (FT_Long)face->cvt_program_size );
TT_Clear_CodeRange( exec, tt_coderange_glyph );
@@ -876,12 +862,9 @@
{
TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );
- if ( !size->debug )
- {
- FT_TRACE4(( "Executing `prep' table.\n" ));
+ FT_TRACE4(( "Executing `prep' table.\n" ));
- error = face->interpreter( exec );
- }
+ error = face->interpreter( exec );
}
else
error = FT_Err_Ok;
@@ -924,12 +907,10 @@
TT_Face face = (TT_Face)ftsize->face;
FT_Memory memory = face->root.memory;
-
- if ( size->debug )
+ if ( size->context )
{
- /* the debug context must be deleted by the debugger itself */
+ TT_Done_Context( size->context );
size->context = NULL;
- size->debug = FALSE;
}
FT_FREE( size->cvt );
@@ -973,9 +954,21 @@
TT_MaxProfile* maxp = &face->max_profile;
+ /* clean up bytecode related data */
+ FT_FREE( size->function_defs );
+ FT_FREE( size->instruction_defs );
+ FT_FREE( size->cvt );
+ FT_FREE( size->storage );
+
+ if ( size->context )
+ TT_Done_Context( size->context );
+ tt_glyphzone_done( &size->twilight );
+
size->bytecode_ready = -1;
size->cvt_ready = -1;
+ size->context = TT_New_Context( (TT_Driver)face->root.driver );
+
size->max_function_defs = maxp->maxFunctionDefs;
size->max_instruction_defs = maxp->maxInstructionDefs;
@@ -1259,10 +1252,6 @@
TT_Driver driver = (TT_Driver)ttdriver;
-
- if ( !TT_New_Context( driver ) )
- return FT_THROW( Could_Not_Find_Context );
-
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
driver->interpreter_version = TT_INTERPRETER_VERSION_38;
#else
@@ -1293,20 +1282,7 @@
FT_LOCAL_DEF( void )
tt_driver_done( FT_Module ttdriver ) /* TT_Driver */
{
-#ifdef TT_USE_BYTECODE_INTERPRETER
- TT_Driver driver = (TT_Driver)ttdriver;
-
-
- /* destroy the execution context */
- if ( driver->context )
- {
- TT_Done_Context( driver->context );
- driver->context = NULL;
- }
-#else
FT_UNUSED( ttdriver );
-#endif
-
}
diff --git a/freetype/src/truetype/ttobjs.h b/freetype/src/truetype/ttobjs.h
index f029923d3..16590b691 100644
--- a/freetype/src/truetype/ttobjs.h
+++ b/freetype/src/truetype/ttobjs.h
@@ -4,7 +4,7 @@
/* */
/* Objects manager (specification). */
/* */
-/* Copyright 1996-2009, 2011-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -160,7 +160,7 @@ FT_BEGIN_HEADER
typedef struct TT_CodeRange_
{
FT_Byte* base;
- FT_ULong size;
+ FT_Long size;
} TT_CodeRange;
@@ -324,13 +324,6 @@ FT_BEGIN_HEADER
TT_GlyphZoneRec twilight; /* The instance's twilight zone */
- /* debugging variables */
-
- /* When using the debugger, we must keep the */
- /* execution context tied to the instance */
- /* object rather than asking it on demand. */
-
- FT_Bool debug;
TT_ExecContext context;
/* if negative, `fpgm' (resp. `prep'), wasn't executed yet; */
@@ -351,7 +344,6 @@ FT_BEGIN_HEADER
{
FT_DriverRec root;
- TT_ExecContext context; /* execution context */
TT_GlyphZoneRec zone; /* glyph loader points zone */
FT_UInt interpreter_version;
diff --git a/freetype/src/truetype/ttpic.c b/freetype/src/truetype/ttpic.c
index 99ae45cb9..d58d54fa7 100644
--- a/freetype/src/truetype/ttpic.c
+++ b/freetype/src/truetype/ttpic.c
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for truetype module. */
/* */
-/* Copyright 2009, 2010, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/ttpic.h b/freetype/src/truetype/ttpic.h
index cfb4ee628..48ba4aaf0 100644
--- a/freetype/src/truetype/ttpic.h
+++ b/freetype/src/truetype/ttpic.h
@@ -4,7 +4,7 @@
/* */
/* The FreeType position independent code services for truetype module. */
/* */
-/* Copyright 2009, 2012, 2013 by */
+/* Copyright 2009-2015 by */
/* Oran Agra and Mickey Gabel. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/ttpload.c b/freetype/src/truetype/ttpload.c
index 33bca68fe..8238f63c5 100644
--- a/freetype/src/truetype/ttpload.c
+++ b/freetype/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
/* */
/* TrueType-specific tables loader (body). */
/* */
-/* Copyright 1996-2002, 2004-2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -118,20 +118,20 @@
/* we only handle the case where `maxp' gives a larger value */
if ( face->num_locations <= (FT_ULong)face->root.num_glyphs )
{
- FT_Long new_loca_len =
- ( (FT_Long)( face->root.num_glyphs ) + 1 ) << shift;
+ FT_ULong new_loca_len =
+ ( (FT_ULong)face->root.num_glyphs + 1 ) << shift;
TT_Table entry = face->dir_tables;
TT_Table limit = entry + face->num_tables;
- FT_Long pos = FT_Stream_Pos( stream );
+ FT_Long pos = (FT_Long)FT_STREAM_POS();
FT_Long dist = 0x7FFFFFFFL;
/* compute the distance to next table in font file */
for ( ; entry < limit; entry++ )
{
- FT_Long diff = entry->Offset - pos;
+ FT_Long diff = (FT_Long)entry->Offset - pos;
if ( diff > 0 && diff < dist )
@@ -141,12 +141,12 @@
if ( entry == limit )
{
/* `loca' is the last table */
- dist = stream->size - pos;
+ dist = (FT_Long)stream->size - pos;
}
- if ( new_loca_len <= dist )
+ if ( new_loca_len <= (FT_ULong)dist )
{
- face->num_locations = face->root.num_glyphs + 1;
+ face->num_locations = (FT_ULong)face->root.num_glyphs + 1;
table_len = new_loca_len;
FT_TRACE2(( "adjusting num_locations to %d\n",
diff --git a/freetype/src/truetype/ttpload.h b/freetype/src/truetype/ttpload.h
index ec93680f4..eb4ad0d28 100644
--- a/freetype/src/truetype/ttpload.h
+++ b/freetype/src/truetype/ttpload.h
@@ -4,7 +4,7 @@
/* */
/* TrueType-specific tables loader (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2005, 2006 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/truetype/ttsubpix.c b/freetype/src/truetype/ttsubpix.c
index 9955021f1..64e9b865d 100644
--- a/freetype/src/truetype/ttsubpix.c
+++ b/freetype/src/truetype/ttsubpix.c
@@ -4,7 +4,7 @@
/* */
/* TrueType Subpixel Hinting. */
/* */
-/* Copyright 2010-2013 by */
+/* Copyright 2010-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -63,8 +63,8 @@
/* rules below. A blank entry "" is required at the end of these! */
#define FAMILY_CLASS_RULES_SIZE 7
- static const SPH_Font_Class FAMILY_CLASS_Rules
- [FAMILY_CLASS_RULES_SIZE] =
+ static const SPH_Font_Class FAMILY_CLASS_Rules
+ [FAMILY_CLASS_RULES_SIZE] =
{
{ "MS Legacy Fonts",
{ "Aharoni",
@@ -223,8 +223,8 @@
/* rules below. A blank entry "" is required at the end of these! */
#define STYLE_CLASS_RULES_SIZE 5
- const SPH_Font_Class STYLE_CLASS_Rules
- [STYLE_CLASS_RULES_SIZE] =
+ static const SPH_Font_Class STYLE_CLASS_Rules
+ [STYLE_CLASS_RULES_SIZE] =
{
{ "Regular Class",
{ "Regular",
@@ -279,8 +279,8 @@
/* Force special legacy fixes for fonts. */
#define COMPATIBILITY_MODE_RULES_SIZE 1
- const SPH_TweakRule COMPATIBILITY_MODE_Rules
- [COMPATIBILITY_MODE_RULES_SIZE] =
+ static const SPH_TweakRule COMPATIBILITY_MODE_Rules
+ [COMPATIBILITY_MODE_RULES_SIZE] =
{
{ "Verdana Clones", 0, "", 0 },
};
@@ -289,8 +289,8 @@
/* Don't do subpixel (ignore_x_mode) hinting; do normal hinting. */
#define PIXEL_HINTING_RULES_SIZE 2
- const SPH_TweakRule PIXEL_HINTING_Rules
- [PIXEL_HINTING_RULES_SIZE] =
+ static const SPH_TweakRule PIXEL_HINTING_Rules
+ [PIXEL_HINTING_RULES_SIZE] =
{
/* these characters are almost always safe */
{ "Courier New", 12, "Italic", 'z' },
@@ -301,8 +301,8 @@
/* Subpixel hinting ignores SHPIX rules on X. Force SHPIX for these. */
#define DO_SHPIX_RULES_SIZE 1
- const SPH_TweakRule DO_SHPIX_Rules
- [DO_SHPIX_RULES_SIZE] =
+ static const SPH_TweakRule DO_SHPIX_Rules
+ [DO_SHPIX_RULES_SIZE] =
{
{ "-", 0, "", 0 },
};
@@ -312,8 +312,8 @@
/* boundary and don't move that point to a Y pixel boundary. */
#define SKIP_NONPIXEL_Y_MOVES_RULES_SIZE 4
- const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules
- [SKIP_NONPIXEL_Y_MOVES_RULES_SIZE] =
+ static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules
+ [SKIP_NONPIXEL_Y_MOVES_RULES_SIZE] =
{
/* fix vwxyz thinness*/
{ "Consolas", 0, "", 0 },
@@ -328,8 +328,8 @@
#define SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
- const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions
- [SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
+ static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_Rules_Exceptions
+ [SKIP_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
{
/* Fixes < and > */
{ "Courier New", 0, "Regular", 0 },
@@ -340,8 +340,8 @@
/* boundary and don't move that point to a Y pixel boundary. */
#define SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE 2
- const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_DELTAP_Rules
- [SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE] =
+ static const SPH_TweakRule SKIP_NONPIXEL_Y_MOVES_DELTAP_Rules
+ [SKIP_NONPIXEL_Y_MOVES_DELTAP_RULES_SIZE] =
{
/* Maintain thickness of diagonal in 'N' */
{ "Times New Roman", 0, "Regular/Bold Class", 'N' },
@@ -352,8 +352,8 @@
/* Skip Y moves that move a point off a Y pixel boundary. */
#define SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE 1
- const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules
- [SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE] =
+ static const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules
+ [SKIP_OFFPIXEL_Y_MOVES_RULES_SIZE] =
{
{ "-", 0, "", 0 },
};
@@ -361,8 +361,8 @@
#define SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
- const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules_Exceptions
- [SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
+ static const SPH_TweakRule SKIP_OFFPIXEL_Y_MOVES_Rules_Exceptions
+ [SKIP_OFFPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
{
{ "-", 0, "", 0 },
};
@@ -371,8 +371,8 @@
/* Round moves that don't move a point to a Y pixel boundary. */
#define ROUND_NONPIXEL_Y_MOVES_RULES_SIZE 2
- const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules
- [ROUND_NONPIXEL_Y_MOVES_RULES_SIZE] =
+ static const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules
+ [ROUND_NONPIXEL_Y_MOVES_RULES_SIZE] =
{
/* Droid font instructions don't snap Y to pixels */
{ "Droid Sans", 0, "Regular/Italic Class", 0 },
@@ -382,8 +382,8 @@
#define ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE 1
- const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules_Exceptions
- [ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
+ static const SPH_TweakRule ROUND_NONPIXEL_Y_MOVES_Rules_Exceptions
+ [ROUND_NONPIXEL_Y_MOVES_RULES_EXCEPTIONS_SIZE] =
{
{ "-", 0, "", 0 },
};
@@ -392,8 +392,8 @@
/* Allow a Direct_Move along X freedom vector if matched. */
#define ALLOW_X_DMOVE_RULES_SIZE 1
- const SPH_TweakRule ALLOW_X_DMOVE_Rules
- [ALLOW_X_DMOVE_RULES_SIZE] =
+ static const SPH_TweakRule ALLOW_X_DMOVE_Rules
+ [ALLOW_X_DMOVE_RULES_SIZE] =
{
/* Fixes vanishing diagonal in 4 */
{ "Verdana", 0, "Regular", '4' },
@@ -403,8 +403,8 @@
/* Return MS rasterizer version 35 if matched. */
#define RASTERIZER_35_RULES_SIZE 8
- const SPH_TweakRule RASTERIZER_35_Rules
- [RASTERIZER_35_RULES_SIZE] =
+ static const SPH_TweakRule RASTERIZER_35_Rules
+ [RASTERIZER_35_RULES_SIZE] =
{
/* This seems to be the only way to make these look good */
{ "Times New Roman", 0, "Regular", 'i' },
@@ -421,8 +421,8 @@
/* Don't round to the subpixel grid. Round to pixel grid. */
#define NORMAL_ROUND_RULES_SIZE 1
- const SPH_TweakRule NORMAL_ROUND_Rules
- [NORMAL_ROUND_RULES_SIZE] =
+ static const SPH_TweakRule NORMAL_ROUND_Rules
+ [NORMAL_ROUND_RULES_SIZE] =
{
/* Fix serif thickness for certain ppems */
/* Can probably be generalized somehow */
@@ -433,8 +433,8 @@
/* Skip IUP instructions if matched. */
#define SKIP_IUP_RULES_SIZE 1
- const SPH_TweakRule SKIP_IUP_Rules
- [SKIP_IUP_RULES_SIZE] =
+ static const SPH_TweakRule SKIP_IUP_Rules
+ [SKIP_IUP_RULES_SIZE] =
{
{ "Arial", 13, "Regular", 'a' },
};
@@ -443,8 +443,8 @@
/* Skip MIAP Twilight hack if matched. */
#define MIAP_HACK_RULES_SIZE 1
- const SPH_TweakRule MIAP_HACK_Rules
- [MIAP_HACK_RULES_SIZE] =
+ static const SPH_TweakRule MIAP_HACK_Rules
+ [MIAP_HACK_RULES_SIZE] =
{
{ "Geneva", 12, "", 0 },
};
@@ -453,8 +453,8 @@
/* Skip DELTAP instructions if matched. */
#define ALWAYS_SKIP_DELTAP_RULES_SIZE 23
- const SPH_TweakRule ALWAYS_SKIP_DELTAP_Rules
- [ALWAYS_SKIP_DELTAP_RULES_SIZE] =
+ static const SPH_TweakRule ALWAYS_SKIP_DELTAP_Rules
+ [ALWAYS_SKIP_DELTAP_RULES_SIZE] =
{
{ "Georgia", 0, "Regular", 'k' },
/* fix various problems with e in different versions */
@@ -489,8 +489,8 @@
/* Always do DELTAP instructions if matched. */
#define ALWAYS_DO_DELTAP_RULES_SIZE 1
- const SPH_TweakRule ALWAYS_DO_DELTAP_Rules
- [ALWAYS_DO_DELTAP_RULES_SIZE] =
+ static const SPH_TweakRule ALWAYS_DO_DELTAP_Rules
+ [ALWAYS_DO_DELTAP_RULES_SIZE] =
{
{ "-", 0, "", 0 },
};
@@ -744,7 +744,7 @@
#endif /* FORCE_NATURAL_WIDTHS */
- FT_LOCAL_DEF( FT_Bool )
+ static FT_Bool
is_member_of_family_class( const FT_String* detected_font_name,
const FT_String* rule_font_name )
{
@@ -779,7 +779,7 @@
}
- FT_LOCAL_DEF( FT_Bool )
+ static FT_Bool
is_member_of_style_class( const FT_String* detected_font_style,
const FT_String* rule_font_style )
{
@@ -905,7 +905,7 @@
{
TT_Face face = (TT_Face)loader->face;
FT_String* family = face->root.family_name;
- int ppem = loader->size->metrics.x_ppem;
+ FT_UInt ppem = loader->size->metrics.x_ppem;
FT_String* style = face->root.style_name;
diff --git a/freetype/src/truetype/ttsubpix.h b/freetype/src/truetype/ttsubpix.h
index 8a54fc7cc..9151aa325 100644
--- a/freetype/src/truetype/ttsubpix.h
+++ b/freetype/src/truetype/ttsubpix.h
@@ -4,7 +4,7 @@
/* */
/* TrueType Subpixel Hinting. */
/* */
-/* Copyright 2010-2013 by */
+/* Copyright 2010-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -50,26 +50,26 @@ FT_BEGIN_HEADER
/* Tweak flags that are set for each glyph by the below rules. */
/* */
/* */
-#define SPH_TWEAK_ALLOW_X_DMOVE 0x0000001
-#define SPH_TWEAK_ALWAYS_DO_DELTAP 0x0000002
-#define SPH_TWEAK_ALWAYS_SKIP_DELTAP 0x0000004
-#define SPH_TWEAK_COURIER_NEW_2_HACK 0x0000008
-#define SPH_TWEAK_DEEMBOLDEN 0x0000010
-#define SPH_TWEAK_DO_SHPIX 0x0000020
-#define SPH_TWEAK_EMBOLDEN 0x0000040
-#define SPH_TWEAK_MIAP_HACK 0x0000080
-#define SPH_TWEAK_NORMAL_ROUND 0x0000100
-#define SPH_TWEAK_NO_ALIGNRP_AFTER_IUP 0x0000200
-#define SPH_TWEAK_NO_CALL_AFTER_IUP 0x0000400
-#define SPH_TWEAK_NO_DELTAP_AFTER_IUP 0x0000800
-#define SPH_TWEAK_PIXEL_HINTING 0x0001000
-#define SPH_TWEAK_RASTERIZER_35 0x0002000
-#define SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES 0x0004000
-#define SPH_TWEAK_SKIP_IUP 0x0008000
-#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES 0x0010000
-#define SPH_TWEAK_SKIP_OFFPIXEL_Y_MOVES 0x0020000
-#define SPH_TWEAK_TIMES_NEW_ROMAN_HACK 0x0040000
-#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP 0x0080000
+#define SPH_TWEAK_ALLOW_X_DMOVE 0x0000001UL
+#define SPH_TWEAK_ALWAYS_DO_DELTAP 0x0000002UL
+#define SPH_TWEAK_ALWAYS_SKIP_DELTAP 0x0000004UL
+#define SPH_TWEAK_COURIER_NEW_2_HACK 0x0000008UL
+#define SPH_TWEAK_DEEMBOLDEN 0x0000010UL
+#define SPH_TWEAK_DO_SHPIX 0x0000020UL
+#define SPH_TWEAK_EMBOLDEN 0x0000040UL
+#define SPH_TWEAK_MIAP_HACK 0x0000080UL
+#define SPH_TWEAK_NORMAL_ROUND 0x0000100UL
+#define SPH_TWEAK_NO_ALIGNRP_AFTER_IUP 0x0000200UL
+#define SPH_TWEAK_NO_CALL_AFTER_IUP 0x0000400UL
+#define SPH_TWEAK_NO_DELTAP_AFTER_IUP 0x0000800UL
+#define SPH_TWEAK_PIXEL_HINTING 0x0001000UL
+#define SPH_TWEAK_RASTERIZER_35 0x0002000UL
+#define SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES 0x0004000UL
+#define SPH_TWEAK_SKIP_IUP 0x0008000UL
+#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES 0x0010000UL
+#define SPH_TWEAK_SKIP_OFFPIXEL_Y_MOVES 0x0020000UL
+#define SPH_TWEAK_TIMES_NEW_ROMAN_HACK 0x0040000UL
+#define SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP 0x0080000UL
FT_LOCAL( FT_Bool )
diff --git a/freetype/src/type1/Jamfile b/freetype/src/type1/Jamfile
index 8e366baae..5d7b62c49 100644
--- a/freetype/src/type1/Jamfile
+++ b/freetype/src/type1/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/type1 Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type1/module.mk b/freetype/src/type1/module.mk
index ade0210d7..feb3459d8 100644
--- a/freetype/src/type1/module.mk
+++ b/freetype/src/type1/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type1/rules.mk b/freetype/src/type1/rules.mk
index 15087b030..fbd054353 100644
--- a/freetype/src/type1/rules.mk
+++ b/freetype/src/type1/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2001, 2003 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ T1_DIR := $(SRC_DIR)/type1
# compilation flags for the driver
#
-T1_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T1_DIR))
+T1_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(T1_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# Type1 driver sources (i.e., C files)
diff --git a/freetype/src/type1/t1afm.c b/freetype/src/type1/t1afm.c
index 92c167ecb..e7ce05da3 100644
--- a/freetype/src/type1/t1afm.c
+++ b/freetype/src/type1/t1afm.c
@@ -4,7 +4,7 @@
/* */
/* AFM support for Type 1 fonts (body). */
/* */
-/* Copyright 1996-2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -169,8 +169,8 @@
goto Exit;
/* now, read each kern pair */
- kp = fi->KernPairs;
- limit = p + 4 * fi->NumKernPair;
+ kp = fi->KernPairs;
+ limit = p + 4 * fi->NumKernPair;
/* PFM kerning data are stored by encoding rather than glyph index, */
/* so find the PostScript charmap of this font and install it */
@@ -362,7 +362,7 @@
FT_Fixed* kerning )
{
AFM_FontInfo fi = (AFM_FontInfo)( (T1_Face)face )->afm_data;
- FT_Int i;
+ FT_UInt i;
if ( !fi )
diff --git a/freetype/src/type1/t1afm.h b/freetype/src/type1/t1afm.h
index 6f46d55c7..1f184bc79 100644
--- a/freetype/src/type1/t1afm.h
+++ b/freetype/src/type1/t1afm.h
@@ -4,7 +4,7 @@
/* */
/* AFM support for Type 1 fonts (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2006 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/t1driver.c b/freetype/src/type1/t1driver.c
index b9798d500..c8d38ad7c 100644
--- a/freetype/src/type1/t1driver.c
+++ b/freetype/src/type1/t1driver.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 driver interface (body). */
/* */
-/* Copyright 1996-2004, 2006, 2007, 2009, 2011, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -32,7 +32,7 @@
#include FT_SERVICE_MULTIPLE_MASTERS_H
#include FT_SERVICE_GLYPH_DICT_H
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#include FT_SERVICE_POSTSCRIPT_NAME_H
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
#include <internal/services/svpsinfo.h>
@@ -176,9 +176,11 @@
PS_Dict_Keys key,
FT_UInt idx,
void *value,
- FT_Long value_len )
+ FT_Long value_len_ )
{
- FT_Long retval = -1;
+ FT_ULong retval = 0; /* always >= 1 if valid */
+ FT_ULong value_len = value_len_ < 0 ? 0 : (FT_ULong)value_len_;
+
T1_Face t1face = (T1_Face)face;
T1_Font type1 = &t1face->type1;
@@ -225,7 +227,7 @@
if ( idx < sizeof ( type1->font_bbox ) /
sizeof ( type1->font_bbox.xMin ) )
{
- FT_Fixed val = 0;
+ FT_Fixed val = 0;
retval = sizeof ( val );
@@ -258,7 +260,7 @@
break;
case PS_DICT_FONT_NAME:
- retval = (FT_Long)( ft_strlen( type1->font_name ) + 1 );
+ retval = ft_strlen( type1->font_name ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_name ), retval );
break;
@@ -278,7 +280,7 @@
case PS_DICT_CHAR_STRING_KEY:
if ( idx < (FT_UInt)type1->num_glyphs )
{
- retval = (FT_Long)( ft_strlen( type1->glyph_names[idx] ) + 1 );
+ retval = ft_strlen( type1->glyph_names[idx] ) + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->glyph_names[idx] ), retval );
@@ -290,7 +292,7 @@
case PS_DICT_CHAR_STRING:
if ( idx < (FT_UInt)type1->num_glyphs )
{
- retval = (FT_Long)( type1->charstrings_len[idx] + 1 );
+ retval = type1->charstrings_len[idx] + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->charstrings[idx] ),
@@ -310,7 +312,7 @@
if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY &&
idx < (FT_UInt)type1->encoding.num_chars )
{
- retval = (FT_Long)( ft_strlen( type1->encoding.char_name[idx] ) + 1 );
+ retval = ft_strlen( type1->encoding.char_name[idx] ) + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->encoding.char_name[idx] ),
@@ -329,7 +331,7 @@
case PS_DICT_SUBR:
if ( idx < (FT_UInt)type1->num_subrs )
{
- retval = (FT_Long)( type1->subrs_len[idx] + 1 );
+ retval = type1->subrs_len[idx] + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->subrs[idx] ), retval - 1 );
@@ -523,31 +525,31 @@
break;
case PS_DICT_VERSION:
- retval = (FT_Long)( ft_strlen( type1->font_info.version ) + 1 );
+ retval = ft_strlen( type1->font_info.version ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.version ), retval );
break;
case PS_DICT_NOTICE:
- retval = (FT_Long)( ft_strlen( type1->font_info.notice ) + 1 );
+ retval = ft_strlen( type1->font_info.notice ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.notice ), retval );
break;
case PS_DICT_FULL_NAME:
- retval = (FT_Long)( ft_strlen( type1->font_info.full_name ) + 1 );
+ retval = ft_strlen( type1->font_info.full_name ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.full_name ), retval );
break;
case PS_DICT_FAMILY_NAME:
- retval = (FT_Long)( ft_strlen( type1->font_info.family_name ) + 1 );
+ retval = ft_strlen( type1->font_info.family_name ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.family_name ), retval );
break;
case PS_DICT_WEIGHT:
- retval = (FT_Long)( ft_strlen( type1->font_info.weight ) + 1 );
+ retval = ft_strlen( type1->font_info.weight ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.weight ), retval );
break;
@@ -559,7 +561,7 @@
break;
}
- return retval;
+ return retval == 0 ? -1 : (FT_Long)retval;
}
@@ -590,7 +592,7 @@
{
{ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &t1_service_ps_name },
{ FT_SERVICE_ID_GLYPH_DICT, &t1_service_glyph_dict },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TYPE_1 },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_1 },
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &t1_service_ps_info },
#ifndef T1_CONFIG_OPTION_NO_AFM
diff --git a/freetype/src/type1/t1driver.h b/freetype/src/type1/t1driver.h
index cf1bca922..5180a248e 100644
--- a/freetype/src/type1/t1driver.h
+++ b/freetype/src/type1/t1driver.h
@@ -4,7 +4,7 @@
/* */
/* High-level Type 1 driver interface (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/t1errors.h b/freetype/src/type1/t1errors.h
index 8740530ee..fc7a9bd64 100644
--- a/freetype/src/type1/t1errors.h
+++ b/freetype/src/type1/t1errors.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/t1gload.c b/freetype/src/type1/t1gload.c
index 90644ac95..885988390 100644
--- a/freetype/src/type1/t1gload.c
+++ b/freetype/src/type1/t1gload.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 Glyph Loader (body). */
/* */
-/* Copyright 1996-2006, 2008-2010, 2013, 2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -54,7 +54,7 @@
/*************************************************************************/
- FT_LOCAL_DEF( FT_Error )
+ static FT_Error
T1_Parse_Glyph_And_Get_Char_String( T1_Decoder decoder,
FT_UInt glyph_index,
FT_Data* char_string )
@@ -92,7 +92,7 @@
if ( !error )
error = decoder->funcs.parse_charstrings(
decoder, (FT_Byte*)char_string->pointer,
- char_string->length );
+ (FT_UInt)char_string->length );
#ifdef FT_CONFIG_OPTION_INCREMENTAL
@@ -194,7 +194,7 @@
for ( glyph_index = 0; glyph_index < type1->num_glyphs; glyph_index++ )
{
/* now get load the unscaled outline */
- (void)T1_Parse_Glyph( &decoder, glyph_index );
+ (void)T1_Parse_Glyph( &decoder, (FT_UInt)glyph_index );
if ( glyph_index == 0 || decoder.builder.advance.x > *max_advance )
*max_advance = decoder.builder.advance.x;
@@ -504,7 +504,7 @@
/* Set the control data to null - it is no longer available if */
/* loaded incrementally. */
- t1glyph->control_data = 0;
+ t1glyph->control_data = NULL;
t1glyph->control_len = 0;
}
#endif
diff --git a/freetype/src/type1/t1gload.h b/freetype/src/type1/t1gload.h
index 0bdea3a8d..05f60d586 100644
--- a/freetype/src/type1/t1gload.h
+++ b/freetype/src/type1/t1gload.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 Glyph Loader (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2008, 2011 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/t1load.c b/freetype/src/type1/t1load.c
index 3ed65c2ec..7e64370b0 100644
--- a/freetype/src/type1/t1load.c
+++ b/freetype/src/type1/t1load.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 font loader (body). */
/* */
-/* Copyright 1996-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -226,7 +226,7 @@
/* Given a normalized (blend) coordinate, figure out the design */
/* coordinate appropriate for that value. */
/* */
- FT_LOCAL_DEF( FT_Fixed )
+ static FT_Fixed
mm_axis_unmap( PS_DesignMap axismap,
FT_Fixed ncv )
{
@@ -255,7 +255,7 @@
/* Given a vector of weights, one for each design, figure out the */
/* normalized axis coordinates which gave rise to those weights. */
/* */
- FT_LOCAL_DEF( void )
+ static void
mm_weights_unmap( FT_Fixed* weights,
FT_Fixed* axiscoords,
FT_UInt axis_count )
@@ -368,44 +368,43 @@
FT_Fixed* coords )
{
PS_Blend blend = face->blend;
- FT_Error error;
FT_UInt n, m;
- error = FT_ERR( Invalid_Argument );
+ if ( !blend )
+ return FT_THROW( Invalid_Argument );
+
+ if ( num_coords > blend->num_axis )
+ num_coords = blend->num_axis;
- if ( blend && blend->num_axis == num_coords )
+ /* recompute the weight vector from the blend coordinates */
+ for ( n = 0; n < blend->num_designs; n++ )
{
- /* recompute the weight vector from the blend coordinates */
- for ( n = 0; n < blend->num_designs; n++ )
- {
- FT_Fixed result = 0x10000L; /* 1.0 fixed */
+ FT_Fixed result = 0x10000L; /* 1.0 fixed */
- for ( m = 0; m < blend->num_axis; m++ )
- {
- FT_Fixed factor;
+ for ( m = 0; m < blend->num_axis; m++ )
+ {
+ FT_Fixed factor;
- /* get current blend axis position */
- factor = coords[m];
- if ( factor < 0 )
- factor = 0;
- if ( factor > 0x10000L )
- factor = 0x10000L;
+ /* get current blend axis position; */
+ /* use a default value if we don't have a coordinate */
+ factor = m < num_coords ? coords[m] : 0x8000;
+ if ( factor < 0 )
+ factor = 0;
+ if ( factor > 0x10000L )
+ factor = 0x10000L;
- if ( ( n & ( 1 << m ) ) == 0 )
- factor = 0x10000L - factor;
+ if ( ( n & ( 1 << m ) ) == 0 )
+ factor = 0x10000L - factor;
- result = FT_MulFix( result, factor );
- }
- blend->weight_vector[n] = result;
+ result = FT_MulFix( result, factor );
}
-
- error = FT_Err_Ok;
+ blend->weight_vector[n] = result;
}
- return error;
+ return FT_Err_Ok;
}
@@ -415,68 +414,72 @@
FT_Long* coords )
{
PS_Blend blend = face->blend;
- FT_Error error;
FT_UInt n, p;
+ FT_Fixed final_blends[T1_MAX_MM_DESIGNS];
- error = FT_ERR( Invalid_Argument );
- if ( blend && blend->num_axis == num_coords )
- {
- /* compute the blend coordinates through the blend design map */
- FT_Fixed final_blends[T1_MAX_MM_DESIGNS];
+ if ( !blend )
+ return FT_THROW( Invalid_Argument );
+ if ( num_coords > blend->num_axis )
+ num_coords = blend->num_axis;
- for ( n = 0; n < blend->num_axis; n++ )
- {
- FT_Long design = coords[n];
- FT_Fixed the_blend;
- PS_DesignMap map = blend->design_map + n;
- FT_Long* designs = map->design_points;
- FT_Fixed* blends = map->blend_points;
- FT_Int before = -1, after = -1;
+ /* compute the blend coordinates through the blend design map */
+ for ( n = 0; n < blend->num_axis; n++ )
+ {
+ FT_Long design;
+ FT_Fixed the_blend;
+ PS_DesignMap map = blend->design_map + n;
+ FT_Long* designs = map->design_points;
+ FT_Fixed* blends = map->blend_points;
+ FT_Int before = -1, after = -1;
- for ( p = 0; p < (FT_UInt)map->num_points; p++ )
- {
- FT_Long p_design = designs[p];
+ /* use a default value if we don't have a coordinate */
+ if ( n < num_coords )
+ design = coords[n];
+ else
+ design = ( designs[map->num_points - 1] - designs[0] ) / 2;
- /* exact match? */
- if ( design == p_design )
- {
- the_blend = blends[p];
- goto Found;
- }
+ for ( p = 0; p < (FT_UInt)map->num_points; p++ )
+ {
+ FT_Long p_design = designs[p];
- if ( design < p_design )
- {
- after = p;
- break;
- }
- before = p;
+ /* exact match? */
+ if ( design == p_design )
+ {
+ the_blend = blends[p];
+ goto Found;
}
- /* now interpolate if necessary */
- if ( before < 0 )
- the_blend = blends[0];
+ if ( design < p_design )
+ {
+ after = (FT_Int)p;
+ break;
+ }
- else if ( after < 0 )
- the_blend = blends[map->num_points - 1];
+ before = (FT_Int)p;
+ }
- else
- the_blend = FT_MulDiv( design - designs[before],
- blends [after] - blends [before],
- designs[after] - designs[before] );
+ /* now interpolate if necessary */
+ if ( before < 0 )
+ the_blend = blends[0];
- Found:
- final_blends[n] = the_blend;
- }
+ else if ( after < 0 )
+ the_blend = blends[map->num_points - 1];
+
+ else
+ the_blend = FT_MulDiv( design - designs[before],
+ blends [after] - blends [before],
+ designs[after] - designs[before] );
- error = T1_Set_MM_Blend( face, num_coords, final_blends );
+ Found:
+ final_blends[n] = the_blend;
}
- return error;
+ return T1_Set_MM_Blend( face, blend->num_axis, final_blends );
}
@@ -490,20 +493,17 @@
FT_UInt num_coords,
FT_Fixed* coords )
{
- FT_Long lcoords[4]; /* maximum axis count is 4 */
- FT_UInt i;
- FT_Error error;
+ FT_Long lcoords[T1_MAX_MM_AXIS];
+ FT_UInt i;
+
+ if ( num_coords > T1_MAX_MM_AXIS )
+ num_coords = T1_MAX_MM_AXIS;
- error = FT_ERR( Invalid_Argument );
- if ( num_coords <= 4 && num_coords > 0 )
- {
- for ( i = 0; i < num_coords; ++i )
- lcoords[i] = FIXED_TO_INT( coords[i] );
- error = T1_Set_MM_Design( face, num_coords, lcoords );
- }
+ for ( i = 0; i < num_coords; ++i )
+ lcoords[i] = FIXED_TO_INT( coords[i] );
- return error;
+ return T1_Set_MM_Design( face, num_coords, lcoords );
}
@@ -599,23 +599,23 @@
/* each token is an immediate containing the name of the axis */
for ( n = 0; n < num_axis; n++ )
{
- T1_Token token = axis_tokens + n;
- FT_Byte* name;
- FT_PtrDist len;
+ T1_Token token = axis_tokens + n;
+ FT_Byte* name;
+ FT_UInt len;
/* skip first slash, if any */
if ( token->start[0] == '/' )
token->start++;
- len = token->limit - token->start;
+ len = (FT_UInt)( token->limit - token->start );
if ( len == 0 )
{
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
- if ( FT_ALLOC( blend->axis_names[n], (FT_Long)( len + 1 ) ) )
+ if ( FT_ALLOC( blend->axis_names[n], len + 1 ) )
goto Exit;
name = (FT_Byte*)blend->axis_names[n];
@@ -692,7 +692,9 @@
}
num_axis = n_axis;
- error = t1_allocate_blend( face, num_designs, num_axis );
+ error = t1_allocate_blend( face,
+ (FT_UInt)num_designs,
+ (FT_UInt)num_axis );
if ( error )
goto Exit;
blend = face->blend;
@@ -757,7 +759,7 @@
old_cursor = parser->root.cursor;
old_limit = parser->root.limit;
- error = t1_allocate_blend( face, 0, num_axis );
+ error = t1_allocate_blend( face, 0, (FT_UInt)num_axis );
if ( error )
goto Exit;
blend = face->blend;
@@ -848,7 +850,7 @@
if ( !blend || !blend->num_designs )
{
- error = t1_allocate_blend( face, num_designs, 0 );
+ error = t1_allocate_blend( face, (FT_UInt)num_designs, 0 );
if ( error )
goto Exit;
blend = face->blend;
@@ -890,8 +892,8 @@
parse_buildchar( T1_Face face,
T1_Loader loader )
{
- face->len_buildchar = T1_ToFixedArray( &loader->parser, 0, NULL, 0 );
-
+ face->len_buildchar = (FT_UInt)T1_ToFixedArray( &loader->parser,
+ 0, NULL, 0 );
return;
}
@@ -1038,9 +1040,11 @@
}
+ /* return 1 in case of success */
+
static int
read_binary_data( T1_Parser parser,
- FT_Long* size,
+ FT_ULong* size,
FT_Byte** base,
FT_Bool incremental )
{
@@ -1072,7 +1076,7 @@
if ( s >= 0 && s < limit - *base )
{
parser->root.cursor += s + 1;
- *size = s;
+ *size = (FT_ULong)s;
return !parser->root.error;
}
}
@@ -1285,7 +1289,7 @@
if ( cur + 2 < limit && *cur == '/' && n < count )
{
- FT_PtrDist len;
+ FT_UInt len;
cur++;
@@ -1297,7 +1301,7 @@
if ( parser->root.error )
return;
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
parser->root.error = T1_Add_Table( char_table, charcode,
cur, len + 1 );
@@ -1407,7 +1411,8 @@
/* */
for (;;)
{
- FT_Long idx, size;
+ FT_Long idx;
+ FT_ULong size;
FT_Byte* base;
@@ -1457,7 +1462,7 @@
/* some fonts define empty subr records -- this is not totally */
/* compliant to the specification (which says they should at */
/* least contain a `return'), but we support them anyway */
- if ( size < face->type1.private_dict.lenIV )
+ if ( size < (FT_ULong)face->type1.private_dict.lenIV )
{
error = FT_THROW( Invalid_File_Format );
goto Fail;
@@ -1468,7 +1473,7 @@
goto Fail;
FT_MEM_COPY( temp, base, size );
psaux->t1_decrypt( temp, size, 4330 );
- size -= face->type1.private_dict.lenIV;
+ size -= (FT_ULong)face->type1.private_dict.lenIV;
error = T1_Add_Table( table, (FT_Int)idx,
temp + face->type1.private_dict.lenIV, size );
FT_FREE( temp );
@@ -1508,7 +1513,7 @@
FT_Byte* cur;
FT_Byte* limit = parser->root.limit;
FT_Int n, num_glyphs;
- FT_UInt notdef_index = 0;
+ FT_Int notdef_index = 0;
FT_Byte notdef_found = 0;
@@ -1555,7 +1560,7 @@
for (;;)
{
- FT_Long size;
+ FT_ULong size;
FT_Byte* base;
@@ -1606,7 +1611,7 @@
if ( *cur == '/' )
{
- FT_PtrDist len;
+ FT_UInt len;
if ( cur + 2 >= limit )
@@ -1616,7 +1621,7 @@
}
cur++; /* skip `/' */
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
if ( !read_binary_data( parser, &size, &base, IS_INCREMENTAL ) )
return;
@@ -1649,7 +1654,7 @@
FT_Byte* temp;
- if ( size <= face->type1.private_dict.lenIV )
+ if ( size <= (FT_ULong)face->type1.private_dict.lenIV )
{
error = FT_THROW( Invalid_File_Format );
goto Fail;
@@ -1660,7 +1665,7 @@
goto Fail;
FT_MEM_COPY( temp, base, size );
psaux->t1_decrypt( temp, size, 4330 );
- size -= face->type1.private_dict.lenIV;
+ size -= (FT_ULong)face->type1.private_dict.lenIV;
error = T1_Add_Table( code_table, n,
temp + face->type1.private_dict.lenIV, size );
FT_FREE( temp );
@@ -1838,15 +1843,11 @@
};
-#define T1_FIELD_COUNT \
- ( sizeof ( t1_keywords ) / sizeof ( t1_keywords[0] ) )
-
-
static FT_Error
parse_dict( T1_Face face,
T1_Loader loader,
FT_Byte* base,
- FT_Long size )
+ FT_ULong size )
{
T1_Parser parser = &loader->parser;
FT_Byte *limit, *start_binary = NULL;
@@ -1902,7 +1903,7 @@
else if ( *cur == 'R' && cur + 6 < limit && *(cur + 1) == 'D' &&
have_integer )
{
- FT_Long s;
+ FT_ULong s;
FT_Byte* b;
@@ -1915,7 +1916,7 @@
else if ( *cur == '-' && cur + 6 < limit && *(cur + 1) == '|' &&
have_integer )
{
- FT_Long s;
+ FT_ULong s;
FT_Byte* b;
@@ -1928,7 +1929,7 @@
/* look for immediates */
else if ( *cur == '/' && cur + 2 < limit )
{
- FT_PtrDist len;
+ FT_UInt len;
cur++;
@@ -1938,7 +1939,7 @@
if ( parser->root.error )
goto Exit;
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
if ( len > 0 && len < 22 && parser->root.cursor < limit )
{
@@ -1955,9 +1956,9 @@
if ( !name )
break;
- if ( cur[0] == name[0] &&
- len == (FT_PtrDist)ft_strlen( (const char *)name ) &&
- ft_memcmp( cur, name, len ) == 0 )
+ if ( cur[0] == name[0] &&
+ len == ft_strlen( (const char *)name ) &&
+ ft_memcmp( cur, name, len ) == 0 )
{
/* We found it -- run the parsing callback! */
/* We record every instance of every field */
@@ -2212,8 +2213,8 @@
/* the `lengths' field must be released later */
type1->glyph_names_block = loader.glyph_names.block;
type1->glyph_names = (FT_String**)loader.glyph_names.elements;
- loader.glyph_names.block = 0;
- loader.glyph_names.elements = 0;
+ loader.glyph_names.block = NULL;
+ loader.glyph_names.elements = NULL;
/* we must now build type1.encoding when we have a custom array */
if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
diff --git a/freetype/src/type1/t1load.h b/freetype/src/type1/t1load.h
index 2fd918790..fad6cf960 100644
--- a/freetype/src/type1/t1load.h
+++ b/freetype/src/type1/t1load.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 font loader (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2004, 2006, 2007 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/t1objs.c b/freetype/src/type1/t1objs.c
index f99dd6efe..f0d971673 100644
--- a/freetype/src/type1/t1objs.c
+++ b/freetype/src/type1/t1objs.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 objects manager (body). */
/* */
-/* Copyright 1996-2009, 2011, 2013 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -86,7 +86,7 @@
if ( funcs )
funcs->destroy( (PSH_Globals)size->root.internal );
- size->root.internal = 0;
+ size->root.internal = NULL;
}
}
@@ -144,7 +144,7 @@
FT_LOCAL_DEF( void )
T1_GlyphSlot_Done( FT_GlyphSlot slot )
{
- slot->internal->glyph_hints = 0;
+ slot->internal->glyph_hints = NULL;
}
@@ -224,7 +224,7 @@
}
T1_Done_Blend( face );
- face->blend = 0;
+ face->blend = NULL;
#endif
/* release font info strings */
@@ -457,7 +457,7 @@
/* no embedded bitmap support */
root->num_fixed_sizes = 0;
- root->available_sizes = 0;
+ root->available_sizes = NULL;
root->bbox.xMin = type1->font_bbox.xMin >> 16;
root->bbox.yMin = type1->font_bbox.yMin >> 16;
diff --git a/freetype/src/type1/t1objs.h b/freetype/src/type1/t1objs.h
index 1dd5467da..85eea6532 100644
--- a/freetype/src/type1/t1objs.h
+++ b/freetype/src/type1/t1objs.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 objects manager (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2006, 2011 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/t1parse.c b/freetype/src/type1/t1parse.c
index 093a1bd3b..42bd95111 100644
--- a/freetype/src/type1/t1parse.c
+++ b/freetype/src/type1/t1parse.c
@@ -4,7 +4,7 @@
/* */
/* Type 1 parser (body). */
/* */
-/* Copyright 1996-2005, 2008, 2009, 2012-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -143,13 +143,13 @@
FT_ULong size;
- psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );
+ psaux->ps_parser_funcs->init( &parser->root, NULL, NULL, memory );
parser->stream = stream;
parser->base_len = 0;
- parser->base_dict = 0;
+ parser->base_dict = NULL;
parser->private_len = 0;
- parser->private_dict = 0;
+ parser->private_dict = NULL;
parser->in_pfb = 0;
parser->in_memory = 0;
parser->single_block = 0;
@@ -273,7 +273,7 @@
/* made of several segments. We thus first read the number of */
/* segments to compute the total size of the private dictionary */
/* then re-read them into memory. */
- FT_Long start_pos = FT_STREAM_POS();
+ FT_ULong start_pos = FT_STREAM_POS();
FT_UShort tag;
@@ -411,9 +411,11 @@
/* fine that are violating this limitation, so we add a heuristic */
/* test to stop at \r only if it is not used for EOL. */
- pos_lf = ft_memchr( cur, '\n', limit - cur );
- test_cr = FT_BOOL( !pos_lf ||
- pos_lf > ft_memchr( cur, '\r', limit - cur ) );
+ pos_lf = ft_memchr( cur, '\n', (size_t)( limit - cur ) );
+ test_cr = FT_BOOL( !pos_lf ||
+ pos_lf > ft_memchr( cur,
+ '\r',
+ (size_t)( limit - cur ) ) );
while ( cur < limit &&
( *cur == ' ' ||
@@ -429,7 +431,7 @@
goto Exit;
}
- size = (FT_ULong)( parser->base_len - ( cur - parser->base_dict ) );
+ size = parser->base_len - (FT_ULong)( cur - parser->base_dict );
if ( parser->in_memory )
{
@@ -443,7 +445,7 @@
parser->single_block = 1;
parser->private_dict = parser->base_dict;
parser->private_len = size;
- parser->base_dict = 0;
+ parser->base_dict = NULL;
parser->base_len = 0;
}
@@ -459,7 +461,7 @@
ft_isxdigit( cur[2] ) && ft_isxdigit( cur[3] ) )
{
/* ASCII hexadecimal encoding */
- FT_Long len;
+ FT_ULong len;
parser->root.cursor = cur;
diff --git a/freetype/src/type1/t1parse.h b/freetype/src/type1/t1parse.h
index 8c35ce898..4ec657636 100644
--- a/freetype/src/type1/t1parse.h
+++ b/freetype/src/type1/t1parse.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 parser (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2008 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -77,12 +77,6 @@ FT_BEGIN_HEADER
#define T1_Add_Table( p, i, o, l ) (p)->funcs.add( (p), i, o, l )
-#define T1_Done_Table( p ) \
- do \
- { \
- if ( (p)->funcs.done ) \
- (p)->funcs.done( p ); \
- } while ( 0 )
#define T1_Release_Table( p ) \
do \
{ \
diff --git a/freetype/src/type1/t1tokens.h b/freetype/src/type1/t1tokens.h
index e37276b90..399265243 100644
--- a/freetype/src/type1/t1tokens.h
+++ b/freetype/src/type1/t1tokens.h
@@ -4,7 +4,7 @@
/* */
/* Type 1 tokenizer (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type1/type1.c b/freetype/src/type1/type1.c
index ccc12be10..4c70ea763 100644
--- a/freetype/src/type1/type1.c
+++ b/freetype/src/type1/type1.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Type 1 driver component (body only). */
/* */
-/* Copyright 1996-2001 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type42/Jamfile b/freetype/src/type42/Jamfile
index 00371d54f..e0db3cca8 100644
--- a/freetype/src/type42/Jamfile
+++ b/freetype/src/type42/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/type42 Jamfile
#
-# Copyright 2002 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type42/module.mk b/freetype/src/type42/module.mk
index b3f10a8d3..af7e651d9 100644
--- a/freetype/src/type42/module.mk
+++ b/freetype/src/type42/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002, 2006 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/type42/rules.mk b/freetype/src/type42/rules.mk
index eac1081eb..4a8efca50 100644
--- a/freetype/src/type42/rules.mk
+++ b/freetype/src/type42/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 2002, 2003, 2008 by
+# Copyright 2002-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -20,7 +20,10 @@ T42_DIR := $(SRC_DIR)/type42
# compilation flags for the driver
#
-T42_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T42_DIR))
+T42_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(T42_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# Type42 driver source
diff --git a/freetype/src/type42/t42drivr.c b/freetype/src/type42/t42drivr.c
index e3a52d772..d2b53300b 100644
--- a/freetype/src/type42/t42drivr.c
+++ b/freetype/src/type42/t42drivr.c
@@ -4,7 +4,7 @@
/* */
/* High-level Type 42 driver interface (body). */
/* */
-/* Copyright 2002-2004, 2006, 2007, 2009, 2011, 2013 by */
+/* Copyright 2002-2015 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -41,7 +41,7 @@
#include "t42error.h"
#include <internal/ftdebug.h>
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
#include FT_SERVICE_GLYPH_DICT_H
#include FT_SERVICE_POSTSCRIPT_NAME_H
#include <internal/services/svpsinfo.h>
@@ -180,7 +180,7 @@
{ FT_SERVICE_ID_GLYPH_DICT, &t42_service_glyph_dict },
{ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &t42_service_ps_font_name },
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &t42_service_ps_info },
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_TYPE_42 },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_42 },
{ NULL, NULL }
};
diff --git a/freetype/src/type42/t42drivr.h b/freetype/src/type42/t42drivr.h
index fca34d03f..86983552c 100644
--- a/freetype/src/type42/t42drivr.h
+++ b/freetype/src/type42/t42drivr.h
@@ -4,7 +4,8 @@
/* */
/* High-level Type 42 driver interface (specification). */
/* */
-/* Copyright 2002 by Roberto Alameda. */
+/* Copyright 2002-2015 by */
+/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
diff --git a/freetype/src/type42/t42error.h b/freetype/src/type42/t42error.h
index 217ae8bd5..cddaf9e9c 100644
--- a/freetype/src/type42/t42error.h
+++ b/freetype/src/type42/t42error.h
@@ -4,7 +4,7 @@
/* */
/* Type 42 error codes (specification only). */
/* */
-/* Copyright 2002, 2003, 2012 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/type42/t42objs.c b/freetype/src/type42/t42objs.c
index 66bdb6907..b0ad95581 100644
--- a/freetype/src/type42/t42objs.c
+++ b/freetype/src/type42/t42objs.c
@@ -4,8 +4,8 @@
/* */
/* Type 42 objects manager (body). */
/* */
-/* Copyright 2002-2009, 2011, 2013 */
-/* by Roberto Alameda. */
+/* Copyright 2002-2015 by */
+/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -92,8 +92,8 @@
/* the `lengths' field must be released later */
type1->glyph_names_block = loader.glyph_names.block;
type1->glyph_names = (FT_String**)loader.glyph_names.elements;
- loader.glyph_names.block = 0;
- loader.glyph_names.elements = 0;
+ loader.glyph_names.block = NULL;
+ loader.glyph_names.elements = NULL;
/* we must now build type1.encoding when we have a custom array */
if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
@@ -285,7 +285,7 @@
/* no embedded bitmap support */
root->num_fixed_sizes = 0;
- root->available_sizes = 0;
+ root->available_sizes = NULL;
/* Load the TTF font embedded in the T42 font */
{
@@ -461,8 +461,8 @@
FT_FREE( face->unicode_map.maps );
face->unicode_map.num_maps = 0;
- face->root.family_name = 0;
- face->root.style_name = 0;
+ face->root.family_name = NULL;
+ face->root.style_name = NULL;
}
@@ -632,10 +632,10 @@
slot->bitmap_left = 0;
slot->bitmap_top = 0;
slot->num_subglyphs = 0;
- slot->subglyphs = 0;
- slot->control_data = 0;
+ slot->subglyphs = NULL;
+ slot->control_data = NULL;
slot->control_len = 0;
- slot->other = 0;
+ slot->other = NULL;
slot->format = FT_GLYPH_FORMAT_NONE;
slot->linearHoriAdvance = 0;
diff --git a/freetype/src/type42/t42objs.h b/freetype/src/type42/t42objs.h
index 0fad19adb..9e0cd8745 100644
--- a/freetype/src/type42/t42objs.h
+++ b/freetype/src/type42/t42objs.h
@@ -4,7 +4,8 @@
/* */
/* Type 42 objects manager (specification). */
/* */
-/* Copyright 2002, 2003, 2006, 2007, 2011 by Roberto Alameda. */
+/* Copyright 2002-2015 by */
+/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -55,7 +56,6 @@ FT_BEGIN_HEADER
{
FT_DriverRec root;
FT_Driver_Class ttclazz;
- void* extension_component;
} T42_DriverRec, *T42_Driver;
diff --git a/freetype/src/type42/t42parse.c b/freetype/src/type42/t42parse.c
index 1be13d3f4..09d88c20f 100644
--- a/freetype/src/type42/t42parse.c
+++ b/freetype/src/type42/t42parse.c
@@ -4,7 +4,7 @@
/* */
/* Type 42 font parser (body). */
/* */
-/* Copyright 2002-2014 by */
+/* Copyright 2002-2015 by */
/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -104,12 +104,6 @@
#define T1_Add_Table( p, i, o, l ) (p)->funcs.add( (p), i, o, l )
-#define T1_Done_Table( p ) \
- do \
- { \
- if ( (p)->funcs.done ) \
- (p)->funcs.done( p ); \
- } while ( 0 )
#define T1_Release_Table( p ) \
do \
{ \
@@ -148,11 +142,11 @@
FT_Long size;
- psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );
+ psaux->ps_parser_funcs->init( &parser->root, NULL, NULL, memory );
parser->stream = stream;
parser->base_len = 0;
- parser->base_dict = 0;
+ parser->base_dict = NULL;
parser->in_memory = 0;
/*******************************************************************/
@@ -184,7 +178,7 @@
if ( error || FT_STREAM_SEEK( 0 ) )
goto Exit;
- size = stream->size;
+ size = (FT_Long)stream->size;
/* now, try to load `size' bytes of the `base' dictionary we */
/* found previously */
@@ -433,7 +427,7 @@
if ( cur + 2 < limit && *cur == '/' && n < count )
{
- FT_PtrDist len;
+ FT_UInt len;
cur++;
@@ -445,7 +439,7 @@
if ( parser->root.error )
return;
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
parser->root.error = T1_Add_Table( char_table, charcode,
cur, len + 1 );
@@ -524,9 +518,9 @@
FT_Byte* limit = parser->root.limit;
FT_Error error;
FT_Int num_tables = 0;
- FT_ULong count;
+ FT_Long count;
- FT_Long n, string_size, old_string_size, real_size;
+ FT_ULong n, string_size, old_string_size, real_size;
FT_Byte* string_buf = NULL;
FT_Bool allocated = 0;
@@ -579,7 +573,7 @@
goto Exit;
/* don't include delimiters */
- string_size = (FT_Long)( ( parser->root.cursor - cur - 2 + 1 ) / 2 );
+ string_size = (FT_ULong)( ( parser->root.cursor - cur - 2 + 1 ) / 2 );
if ( !string_size )
{
FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
@@ -594,11 +588,14 @@
parser->root.cursor = cur;
(void)T1_ToBytes( parser, string_buf, string_size, &real_size, 1 );
old_string_size = string_size;
- string_size = real_size;
+ string_size = real_size;
}
else if ( ft_isdigit( *cur ) )
{
+ FT_Long tmp;
+
+
if ( allocated )
{
FT_ERROR(( "t42_parse_sfnts: "
@@ -607,13 +604,15 @@
goto Fail;
}
- string_size = T1_ToInt( parser );
- if ( string_size < 0 )
+ tmp = T1_ToInt( parser );
+ if ( tmp < 0 )
{
FT_ERROR(( "t42_parse_sfnts: invalid string size\n" ));
error = FT_THROW( Invalid_File_Format );
goto Fail;
}
+ else
+ string_size = (FT_ULong)tmp;
T1_Skip_PS_Token( parser ); /* `RD' */
if ( parser->root.error )
@@ -621,7 +620,7 @@
string_buf = parser->root.cursor + 1; /* one space after `RD' */
- if ( limit - parser->root.cursor < string_size )
+ if ( (FT_ULong)( limit - parser->root.cursor ) < string_size )
{
FT_ERROR(( "t42_parse_sfnts: too much binary data\n" ));
error = FT_THROW( Invalid_File_Format );
@@ -667,7 +666,7 @@
status = BEFORE_TABLE_DIR;
face->ttf_size = 12 + 16 * num_tables;
- if ( (FT_ULong)( limit - parser->root.cursor ) < face->ttf_size )
+ if ( (FT_Long)( limit - parser->root.cursor ) < face->ttf_size )
{
FT_ERROR(( "t42_parse_sfnts: invalid data in sfnts array\n" ));
error = FT_THROW( Invalid_File_Format );
@@ -700,7 +699,7 @@
len = FT_PEEK_ULONG( p );
/* Pad to a 4-byte boundary length */
- face->ttf_size += ( len + 3 ) & ~3;
+ face->ttf_size += (FT_Long)( ( len + 3 ) & ~3U );
}
status = OTHER_TABLES;
@@ -754,8 +753,8 @@
FT_Byte* cur;
FT_Byte* limit = parser->root.limit;
- FT_UInt n;
- FT_UInt notdef_index = 0;
+ FT_Int n;
+ FT_Int notdef_index = 0;
FT_Byte notdef_found = 0;
@@ -770,15 +769,21 @@
if ( ft_isdigit( *parser->root.cursor ) )
{
- loader->num_glyphs = (FT_UInt)T1_ToInt( parser );
+ loader->num_glyphs = T1_ToInt( parser );
if ( parser->root.error )
return;
+ if ( loader->num_glyphs < 0 )
+ {
+ FT_ERROR(( "t42_parse_encoding: invalid number of glyphs\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ goto Fail;
+ }
}
else if ( *parser->root.cursor == '<' )
{
/* We have `<< ... >>'. Count the number of `/' in the dictionary */
/* to get its size. */
- FT_UInt count = 0;
+ FT_Int count = 0;
T1_Skip_PS_Token( parser );
@@ -873,7 +878,7 @@
if ( *cur == '/' )
{
- FT_PtrDist len;
+ FT_UInt len;
if ( cur + 2 >= limit )
@@ -884,7 +889,7 @@
}
cur++; /* skip `/' */
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
error = T1_Add_Table( name_table, n, cur, len + 1 );
if ( error )
@@ -914,7 +919,7 @@
goto Fail;
}
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
error = T1_Add_Table( code_table, n, cur, len + 1 );
if ( error )
@@ -1135,7 +1140,7 @@
/* look for immediates */
else if ( *cur == '/' && cur + 2 < limit )
{
- FT_PtrDist len;
+ FT_UInt len;
cur++;
@@ -1145,7 +1150,7 @@
if ( parser->root.error )
goto Exit;
- len = parser->root.cursor - cur;
+ len = (FT_UInt)( parser->root.cursor - cur );
if ( len > 0 && len < 22 && parser->root.cursor < limit )
{
@@ -1164,9 +1169,9 @@
if ( !name )
continue;
- if ( cur[0] == name[0] &&
- len == (FT_PtrDist)ft_strlen( (const char *)name ) &&
- ft_memcmp( cur, name, len ) == 0 )
+ if ( cur[0] == name[0] &&
+ len == ft_strlen( (const char *)name ) &&
+ ft_memcmp( cur, name, len ) == 0 )
{
/* we found it -- run the parsing callback! */
parser->root.error = t42_load_keyword( face,
diff --git a/freetype/src/type42/t42parse.h b/freetype/src/type42/t42parse.h
index f1ae1fcad..9e5b7be8d 100644
--- a/freetype/src/type42/t42parse.h
+++ b/freetype/src/type42/t42parse.h
@@ -4,7 +4,8 @@
/* */
/* Type 42 font parser (specification). */
/* */
-/* Copyright 2002, 2003 by Roberto Alameda. */
+/* Copyright 2002-2015 by */
+/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -42,11 +43,11 @@ FT_BEGIN_HEADER
{
T42_ParserRec parser; /* parser used to read the stream */
- FT_UInt num_chars; /* number of characters in encoding */
+ FT_Int num_chars; /* number of characters in encoding */
PS_TableRec encoding_table; /* PS_Table used to store the */
/* encoding character names */
- FT_UInt num_glyphs;
+ FT_Int num_glyphs;
PS_TableRec glyph_names;
PS_TableRec charstrings;
PS_TableRec swap_table; /* For moving .notdef glyph to index 0. */
diff --git a/freetype/src/type42/t42types.h b/freetype/src/type42/t42types.h
index cfe1cb192..b48971ecb 100644
--- a/freetype/src/type42/t42types.h
+++ b/freetype/src/type42/t42types.h
@@ -4,7 +4,8 @@
/* */
/* Type 42 font data types (specification only). */
/* */
-/* Copyright 2002, 2003, 2006, 2008 by Roberto Alameda. */
+/* Copyright 2002-2015 by */
+/* Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -39,7 +40,7 @@ FT_BEGIN_HEADER
const void* afm_data;
#endif
FT_Byte* ttf_data;
- FT_ULong ttf_size;
+ FT_Long ttf_size;
FT_Face ttf_face;
FT_CharMapRec charmaprecs[2];
FT_CharMap charmaps[2];
diff --git a/freetype/src/type42/type42.c b/freetype/src/type42/type42.c
index d13df56b1..3332b7b7e 100644
--- a/freetype/src/type42/type42.c
+++ b/freetype/src/type42/type42.c
@@ -4,7 +4,7 @@
/* */
/* FreeType Type 42 driver component. */
/* */
-/* Copyright 2002 by */
+/* Copyright 2002-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/winfonts/Jamfile b/freetype/src/winfonts/Jamfile
index 71cf5678e..86ee66819 100644
--- a/freetype/src/winfonts/Jamfile
+++ b/freetype/src/winfonts/Jamfile
@@ -1,6 +1,6 @@
# FreeType 2 src/winfonts Jamfile
#
-# Copyright 2001 by
+# Copyright 2001-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/winfonts/fnterrs.h b/freetype/src/winfonts/fnterrs.h
index 463ba77ee..0bf4d0986 100644
--- a/freetype/src/winfonts/fnterrs.h
+++ b/freetype/src/winfonts/fnterrs.h
@@ -4,7 +4,7 @@
/* */
/* Win FNT/FON error codes (specification only). */
/* */
-/* Copyright 2001, 2012 by */
+/* Copyright 2001-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/freetype/src/winfonts/module.mk b/freetype/src/winfonts/module.mk
index b44d7f057..8ba6d7584 100644
--- a/freetype/src/winfonts/module.mk
+++ b/freetype/src/winfonts/module.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2006 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
diff --git a/freetype/src/winfonts/rules.mk b/freetype/src/winfonts/rules.mk
index 71a7df2d8..4535f54d4 100644
--- a/freetype/src/winfonts/rules.mk
+++ b/freetype/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
#
-# Copyright 1996-2000, 2001, 2003 by
+# Copyright 1996-2015 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
@@ -18,7 +18,10 @@
FNT_DIR := $(SRC_DIR)/winfonts
-FNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(FNT_DIR))
+FNT_COMPILE := $(CC) $(ANSIFLAGS) \
+ $I$(subst /,$(COMPILER_SEP),$(FNT_DIR)) \
+ $(INCLUDE_FLAGS) \
+ $(FT_CFLAGS)
# Windows driver sources (i.e., C files)
diff --git a/freetype/src/winfonts/winfnt.c b/freetype/src/winfonts/winfnt.c
index eba168406..8e3691e52 100644
--- a/freetype/src/winfonts/winfnt.c
+++ b/freetype/src/winfonts/winfnt.c
@@ -4,7 +4,7 @@
/* */
/* FreeType font driver for Windows FNT/FON files */
/* */
-/* Copyright 1996-2004, 2006-2014 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* Copyright 2003 Huw D M Davies for Codeweavers */
/* Copyright 2007 Dmitry Timoshkov for Codeweavers */
@@ -28,7 +28,7 @@
#include "winfnt.h"
#include "fnterrs.h"
#include FT_SERVICE_WINFNT_H
-#include FT_SERVICE_XFREE86_NAME_H
+#include FT_SERVICE_FONT_FORMAT_H
/*************************************************************************/
/* */
@@ -201,7 +201,7 @@
FT_FREE( font->family_name );
FT_FREE( font );
- face->font = 0;
+ face->font = NULL;
}
@@ -277,7 +277,7 @@
WinMZ_HeaderRec mz_header;
- face->font = 0;
+ face->font = NULL;
/* does it begin with an MZ header? */
if ( FT_STREAM_SEEK( 0 ) ||
@@ -331,8 +331,8 @@
if ( type_id == 0x8008U )
{
font_count = count;
- font_offset = (FT_ULong)( FT_STREAM_POS() + 4 +
- ( stream->cursor - stream->limit ) );
+ font_offset = FT_STREAM_POS() + 4 +
+ (FT_ULong)( stream->cursor - stream->limit );
break;
}
@@ -370,8 +370,8 @@
if ( FT_NEW( face->font ) )
goto Exit;
- if ( FT_STREAM_SEEK( font_offset + face_index * 12 ) ||
- FT_FRAME_ENTER( 12 ) )
+ if ( FT_STREAM_SEEK( font_offset + (FT_ULong)face_index * 12 ) ||
+ FT_FRAME_ENTER( 12 ) )
goto Fail;
face->font->offset = (FT_ULong)FT_GET_USHORT_LE() << size_shift;
@@ -391,7 +391,7 @@
WinPE_RsrcDirEntryRec dir_entry1, dir_entry2, dir_entry3;
WinPE_RsrcDataEntryRec data_entry;
- FT_Long root_dir_offset, name_dir_offset, lang_dir_offset;
+ FT_ULong root_dir_offset, name_dir_offset, lang_dir_offset;
FT_UShort i, j, k;
@@ -739,9 +739,9 @@
/* we now need to fill the root FT_Face fields */
/* with relevant information */
{
- FT_Face root = FT_FACE( face );
- FNT_Font font = face->font;
- FT_PtrDist family_size;
+ FT_Face root = FT_FACE( face );
+ FNT_Font font = face->font;
+ FT_ULong family_size;
root->face_index = face_index;
@@ -769,9 +769,9 @@
FT_UShort x_res, y_res;
- bsize->width = font->header.avg_width;
- bsize->height = (FT_Short)(
- font->header.pixel_height + font->header.external_leading );
+ bsize->width = (FT_Short)font->header.avg_width;
+ bsize->height = (FT_Short)( font->header.pixel_height +
+ font->header.external_leading );
bsize->size = font->header.nominal_point_size << 6;
x_res = font->header.horizontal_resolution;
@@ -964,7 +964,7 @@
FNT_Font font;
FT_Error error = FT_Err_Ok;
FT_Byte* p;
- FT_Int len;
+ FT_UInt len;
FT_Bitmap* bitmap = &slot->bitmap;
FT_ULong offset;
FT_Bool new_format;
@@ -1009,7 +1009,7 @@
p = font->fnt_frame + offset;
- bitmap->width = FT_NEXT_SHORT_LE( p );
+ bitmap->width = FT_NEXT_USHORT_LE( p );
/* jump to glyph entry */
if ( new_format )
@@ -1030,12 +1030,12 @@
/* allocate and build bitmap */
{
FT_Memory memory = FT_FACE_MEMORY( slot->face );
- FT_Int pitch = ( bitmap->width + 7 ) >> 3;
+ FT_UInt pitch = ( bitmap->width + 7 ) >> 3;
FT_Byte* column;
FT_Byte* write;
- bitmap->pitch = pitch;
+ bitmap->pitch = (int)pitch;
bitmap->rows = font->header.pixel_height;
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
@@ -1069,14 +1069,14 @@
slot->format = FT_GLYPH_FORMAT_BITMAP;
/* now set up metrics */
- slot->metrics.width = bitmap->width << 6;
- slot->metrics.height = bitmap->rows << 6;
- slot->metrics.horiAdvance = bitmap->width << 6;
+ slot->metrics.width = (FT_Pos)( bitmap->width << 6 );
+ slot->metrics.height = (FT_Pos)( bitmap->rows << 6 );
+ slot->metrics.horiAdvance = (FT_Pos)( bitmap->width << 6 );
slot->metrics.horiBearingX = 0;
slot->metrics.horiBearingY = slot->bitmap_top << 6;
ft_synthesize_vertical_metrics( &slot->metrics,
- bitmap->rows << 6 );
+ (FT_Pos)( bitmap->rows << 6 ) );
Exit:
return error;
@@ -1108,8 +1108,8 @@
static const FT_ServiceDescRec winfnt_services[] =
{
- { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_WINFNT },
- { FT_SERVICE_ID_WINFNT, &winfnt_service_rec },
+ { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_WINFNT },
+ { FT_SERVICE_ID_WINFNT, &winfnt_service_rec },
{ NULL, NULL }
};
diff --git a/freetype/src/winfonts/winfnt.h b/freetype/src/winfonts/winfnt.h
index fc0cd10ae..70a5710fc 100644
--- a/freetype/src/winfonts/winfnt.h
+++ b/freetype/src/winfonts/winfnt.h
@@ -4,7 +4,7 @@
/* */
/* FreeType font driver for Windows FNT/FON files */
/* */
-/* Copyright 1996-2001, 2002, 2003, 2004, 2007 by */
+/* Copyright 1996-2015 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* Copyright 2007 Dmitry Timoshkov for Codeweavers */
/* */
diff --git a/freetype/vms_make.com b/freetype/vms_make.com
index 8d8fdf771..73522bf34 100644
--- a/freetype/vms_make.com
+++ b/freetype/vms_make.com
@@ -1,6 +1,6 @@
$! make Freetype2 under OpenVMS
$!
-$! Copyright 2003, 2004, 2006, 2007, 2013 by
+$! Copyright 2003-2015 by
$! David Turner, Robert Wilhelm, and Werner Lemberg.
$!
$! This file is part of the FreeType project, and may only be used, modified,
@@ -23,7 +23,7 @@ $! * LOPTS - Options to be passed to the link command
$! * CCOPT - Options to be passed to the C compiler
$!
$! In case of problems with the install you might contact me at
-$! zinser@zinser.no-ip.info(preferred) or
+$! zinser@zinser.no-ip.info (preferred) or
$! zinser@sysdev.deutsche-boerse.com (work)
$!
$! Make procedure history for Freetype2
@@ -356,8 +356,8 @@ $ deck
CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.builds.vms],[--.include],[--.src.base])
OBJS=ftbase.obj,ftinit.obj,ftglyph.obj,ftdebug.obj,ftbdf.obj,ftmm.obj,\
- fttype1.obj,ftxf86.obj,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
- ftbitmap.obj ftlcdfil.obj ftgasp.obj
+ fttype1.obj,ftfntfmt.obj,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
+ ftbitmap.obj,ftlcdfil.obj,ftgasp.obj
all : $(OBJS)
library [--.lib]freetype.olb $(OBJS)
@@ -1197,7 +1197,7 @@ $! Analyze Object files for OpenVMS AXP to extract Procedure and Data
$! information to build a symbol vector for a shareable image
$! All the "brains" of this logic was suggested by Hartmut Becker
$! (Hartmut.Becker@compaq.com). All the bugs were introduced by me
-$! (zinser@decus.de), so if you do have problem reports please do not
+$! (zinser@zinser.no-ip.info), so if you do have problem reports please do not
$! bother Hartmut/HP, but get in touch with me
$!
$! Version history
diff --git a/include/xcb/xcbext.h b/include/xcb/xcbext.h
index b2575f7e3..44d789eee 100644
--- a/include/xcb/xcbext.h
+++ b/include/xcb/xcbext.h
@@ -68,13 +68,13 @@ enum xcb_send_request_flags_t {
*
* This function sends a new request to the X server. The data of the request is
* given as an array of @c iovecs in the @p vector argument. The length of that
- * array and the neccessary management information are given in the @p request
+ * array and the necessary management information are given in the @p request
* argument.
*
* When this function returns, the request might or might not be sent already.
* Use xcb_flush() to make sure that it really was sent.
*
- * Please note that this function is not the prefered way for sending requests.
+ * Please note that this function is not the preferred way for sending requests.
* It's better to use the generated wrapper functions.
*
* Please note that xcb might use index -1 and -2 of the @p vector array internally,
@@ -83,6 +83,37 @@ enum xcb_send_request_flags_t {
unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *request);
/**
+ * @brief Send a request to the server.
+ * @param c: The connection to the X server.
+ * @param flags: A combination of flags from the xcb_send_request_flags_t enumeration.
+ * @param vector: Data to send; must have two iovecs before start for internal use.
+ * @param request: Information about the request to be sent.
+ * @param num_fds: Number of additional file descriptors to send to the server
+ * @param fds: Additional file descriptors that should be send to the server.
+ * @return The request's sequence number on success, 0 otherwise.
+ *
+ * This function sends a new request to the X server. The data of the request is
+ * given as an array of @c iovecs in the @p vector argument. The length of that
+ * array and the necessary management information are given in the @p request
+ * argument.
+ *
+ * If @p num_fds is non-zero, @p fds points to an array of file descriptors that
+ * will be sent to the X server along with this request. After this function
+ * returns, all file descriptors sent are owned by xcb and will be closed
+ * eventually.
+ *
+ * When this function returns, the request might or might not be sent already.
+ * Use xcb_flush() to make sure that it really was sent.
+ *
+ * Please note that this function is not the preferred way for sending requests.
+ *
+ * Please note that xcb might use index -1 and -2 of the @p vector array internally,
+ * so they must be valid!
+ */
+unsigned int xcb_send_request_with_fds(xcb_connection_t *c, int flags, struct iovec *vector,
+ const xcb_protocol_request_t *request, unsigned int num_fds, int *fds);
+
+/**
* @brief Send a request to the server, with 64-bit sequence number returned.
* @param c: The connection to the X server.
* @param flags: A combination of flags from the xcb_send_request_flags_t enumeration.
@@ -92,13 +123,13 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
*
* This function sends a new request to the X server. The data of the request is
* given as an array of @c iovecs in the @p vector argument. The length of that
- * array and the neccessary management information are given in the @p request
+ * array and the necessary management information are given in the @p request
* argument.
*
* When this function returns, the request might or might not be sent already.
* Use xcb_flush() to make sure that it really was sent.
*
- * Please note that this function is not the prefered way for sending requests.
+ * Please note that this function is not the preferred way for sending requests.
* It's better to use the generated wrapper functions.
*
* Please note that xcb might use index -1 and -2 of the @p vector array internally,
@@ -107,6 +138,38 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *request);
/**
+ * @brief Send a request to the server, with 64-bit sequence number returned.
+ * @param c: The connection to the X server.
+ * @param flags: A combination of flags from the xcb_send_request_flags_t enumeration.
+ * @param vector: Data to send; must have two iovecs before start for internal use.
+ * @param request: Information about the request to be sent.
+ * @param num_fds: Number of additional file descriptors to send to the server
+ * @param fds: Additional file descriptors that should be send to the server.
+ * @return The request's sequence number on success, 0 otherwise.
+ *
+ * This function sends a new request to the X server. The data of the request is
+ * given as an array of @c iovecs in the @p vector argument. The length of that
+ * array and the necessary management information are given in the @p request
+ * argument.
+ *
+ * If @p num_fds is non-zero, @p fds points to an array of file descriptors that
+ * will be sent to the X server along with this request. After this function
+ * returns, all file descriptors sent are owned by xcb and will be closed
+ * eventually.
+ *
+ * When this function returns, the request might or might not be sent already.
+ * Use xcb_flush() to make sure that it really was sent.
+ *
+ * Please note that this function is not the preferred way for sending requests.
+ * It's better to use the generated wrapper functions.
+ *
+ * Please note that xcb might use index -1 and -2 of the @p vector array internally,
+ * so they must be valid!
+ */
+uint64_t xcb_send_request_with_fds64(xcb_connection_t *c, int flags, struct iovec *vector,
+ const xcb_protocol_request_t *request, unsigned int num_fds, int *fds);
+
+/**
* @brief Send a file descriptor to the server in the next call to xcb_send_request.
* @param c: The connection to the X server.
* @param fd: The file descriptor to send.
@@ -114,9 +177,9 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
* After this function returns, the file descriptor given is owned by xcb and
* will be closed eventually.
*
- * FIXME: How the heck is this supposed to work in a thread-safe way? There is a
- * race between two threads doing xcb_send_fd(); xcb_send_request(); at the same
- * time.
+ * @deprecated This function cannot be used in a thread-safe way. Two threads
+ * that run xcb_send_fd(); xcb_send_request(); could mix up their file
+ * descriptors. Instead, xcb_send_request_with_fds() should be used.
*/
void xcb_send_fd(xcb_connection_t *c, int fd);
diff --git a/libX11/modules/im/ximcp/imLcPrs.c b/libX11/modules/im/ximcp/imLcPrs.c
index 9bb45ff31..60215c706 100644
--- a/libX11/modules/im/ximcp/imLcPrs.c
+++ b/libX11/modules/im/ximcp/imLcPrs.c
@@ -496,12 +496,12 @@ parseline(
token = nexttoken(fp, tokenbuf, &lastch);
if (token != KEY && token != STRING)
goto error;
- if ((filename = TransFileName(im, tokenbuf)) == NULL)
- goto error;
if (++depth > 100)
goto error;
+ if ((filename = TransFileName(im, tokenbuf)) == NULL)
+ goto error;
infp = _XFopenFile(filename, "r");
- Xfree(filename);
+ Xfree(filename);
if (infp == NULL)
goto error;
parsestringfile(infp, im, depth);
diff --git a/libX11/modules/om/generic/omGeneric.c b/libX11/modules/om/generic/omGeneric.c
index d6f499a97..14d5a5c82 100644
--- a/libX11/modules/om/generic/omGeneric.c
+++ b/libX11/modules/om/generic/omGeneric.c
@@ -106,7 +106,7 @@ init_fontdata(
if(fd == (FontData) NULL)
return False;
- memset(fd, 0x00, sizeof(FontData) * font_data_count);
+ memset(fd, 0x00, sizeof(FontDataRec) * font_data_count);
for(i = 0 ; i < font_data_count ; i++)
fd[i] = font_data[i];
diff --git a/libX11/src/FontNames.c b/libX11/src/FontNames.c
index 6fc6b1272..21dcafea1 100644
--- a/libX11/src/FontNames.c
+++ b/libX11/src/FontNames.c
@@ -47,7 +47,7 @@ int *actualCount) /* RETURN */
int count = 0;
xListFontsReply rep;
register xListFontsReq *req;
- unsigned long rlen;
+ unsigned long rlen = 0;
LockDisplay(dpy);
GetReq(ListFonts, req);
diff --git a/libX11/src/GetFPath.c b/libX11/src/GetFPath.c
index 62ba01436..8c3f49c95 100644
--- a/libX11/src/GetFPath.c
+++ b/libX11/src/GetFPath.c
@@ -35,7 +35,7 @@ char **XGetFontPath(
int *npaths) /* RETURN */
{
xGetFontPathReply rep;
- unsigned long nbytes;
+ unsigned long nbytes = 0;
char **flist = NULL;
char *ch = NULL;
char *chend;
diff --git a/libX11/src/ListExt.c b/libX11/src/ListExt.c
index 431ae6784..be6b989a3 100644
--- a/libX11/src/ListExt.c
+++ b/libX11/src/ListExt.c
@@ -42,7 +42,7 @@ char **XListExtensions(
register unsigned i;
register int length;
register xReq *req;
- unsigned long rlen;
+ unsigned long rlen = 0;
LockDisplay(dpy);
GetEmptyReq (ListExtensions, req);
diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py
index 6cce43f37..e80e13f2f 100755
--- a/libxcb/src/c_client.py
+++ b/libxcb/src/c_client.py
@@ -630,8 +630,7 @@ def _c_helper_resolve_field_names (prefix):
all_fields = {}
tmp_prefix = []
# look for fields in the remaining containers
- for idx, p in enumerate(prefix):
- name, sep, obj = p
+ for idx, (name, sep, obj) in enumerate(prefix):
if ''==sep:
# sep can be preset in prefix, if not, make a sensible guess
sep = '.' if (obj.is_switch or obj.is_case_or_bitcase) else '->'
@@ -1034,7 +1033,7 @@ def _c_serialize_helper_fields_fixed_size(context, self, field,
if not self.is_case_or_bitcase:
code_lines.append('%s /* %s.%s */' % (space, self.c_type, field.c_field_name))
else:
- scoped_name = [p[2].c_type if idx==0 else p[0] for idx, p in enumerate(prefix)]
+ scoped_name = [obj.c_type if idx==0 else name for idx, (name, _, obj) in enumerate(prefix)]
typename = ".".join(scoped_name)
code_lines.append('%s /* %s.%s */' % (space, typename, field.c_field_name))
@@ -1328,7 +1327,7 @@ def _c_serialize(context, self):
for p in params:
typespec, pointerspec, field_name = p
spacing = ' '*(maxtypelen-len(typespec)-len(pointerspec))
- param_str.append("%s%s%s %s%s /**< */" % (indent, typespec, spacing, pointerspec, field_name))
+ param_str.append("%s%s%s %s%s" % (indent, typespec, spacing, pointerspec, field_name))
# insert function name
param_str[0] = "%s (%s" % (func_name, param_str[0].strip())
param_str = ["%s," % x for x in param_str]
@@ -1521,9 +1520,9 @@ def _c_iterator(self, name):
_h(' * @brief %s', self.c_iterator_type)
_h(' **/')
_h('typedef struct %s {', self.c_iterator_type)
- _h(' %s *data; /**< */', self.c_type)
- _h(' int%s rem; /**< */', ' ' * (len(self.c_type) - 2))
- _h(' int%s index; /**< */', ' ' * (len(self.c_type) - 2))
+ _h(' %s *data;', self.c_type)
+ _h(' int%s rem;', ' ' * (len(self.c_type) - 2))
+ _h(' int%s index;', ' ' * (len(self.c_type) - 2))
# add additional params of the type "self" as fields to the iterator struct
# so that they can be passed to the sizeof-function by the iterator's next-function
params = _c_get_additional_type_params(self)
@@ -1547,8 +1546,8 @@ def _c_iterator(self, name):
_h(' */')
_c('')
_hc('void')
- _h('%s (%s *i /**< */);', self.c_next_name, self.c_iterator_type)
- _c('%s (%s *i /**< */)', self.c_next_name, self.c_iterator_type)
+ _h('%s (%s *i);', self.c_next_name, self.c_iterator_type)
+ _c('%s (%s *i)', self.c_next_name, self.c_iterator_type)
_c('{')
if not self.fixed_size():
@@ -1593,8 +1592,8 @@ def _c_iterator(self, name):
_h(' */')
_c('')
_hc('xcb_generic_iterator_t')
- _h('%s (%s i /**< */);', self.c_end_name, self.c_iterator_type)
- _c('%s (%s i /**< */)', self.c_end_name, self.c_iterator_type)
+ _h('%s (%s i);', self.c_end_name, self.c_iterator_type)
+ _c('%s (%s i)', self.c_end_name, self.c_iterator_type)
_c('{')
_c(' xcb_generic_iterator_t ret;')
@@ -1750,8 +1749,8 @@ def _c_accessors_field(self, field):
if field.type.is_simple:
_hc('')
_hc('%s', field.c_field_type)
- _h('%s (const %s *R /**< */);', field.c_accessor_name, c_type)
- _c('%s (const %s *R /**< */)', field.c_accessor_name, c_type)
+ _h('%s (const %s *R);', field.c_accessor_name, c_type)
+ _c('%s (const %s *R)', field.c_accessor_name, c_type)
_c('{')
if field.prev_varsized_field is None:
_c(' return (%s *) (R + 1);', field.c_field_type)
@@ -1768,8 +1767,8 @@ def _c_accessors_field(self, field):
return_type = '%s *' % field.c_field_type
_hc(return_type)
- _h('%s (const %s *R /**< */);', field.c_accessor_name, c_type)
- _c('%s (const %s *R /**< */)', field.c_accessor_name, c_type)
+ _h('%s (const %s *R);', field.c_accessor_name, c_type)
+ _c('%s (const %s *R)', field.c_accessor_name, c_type)
_c('{')
if field.prev_varsized_field is None:
_c(' return (%s) (R + 1);', return_type)
@@ -1868,7 +1867,7 @@ def _c_accessors_list(self, field):
if len(additional_params) == 0:
return ''
else:
- return (',\n' + indent).join([''] + ['%s %s /**< */' % p for p in additional_params])
+ return (',\n' + indent).join([''] + ['%s %s' % p for p in additional_params])
_h_setlevel(1)
_c_setlevel(1)
@@ -1877,8 +1876,8 @@ def _c_accessors_list(self, field):
_hc('')
_hc('%s *', field.c_field_type)
- _h('%s (%s /**< */);', field.c_accessor_name, params[idx][0])
- _c('%s (%s /**< */)', field.c_accessor_name, params[idx][0])
+ _h('%s (%s);', field.c_accessor_name, params[idx][0])
+ _c('%s (%s)', field.c_accessor_name, params[idx][0])
_c('{')
if switch_obj is not None:
@@ -1903,12 +1902,12 @@ def _c_accessors_list(self, field):
spacing = ' '*(len(field.c_length_name)+2)
add_param_str = additional_params_to_str(spacing)
if switch_obj is not None:
- _hc('%s (const %s *R /**< */,', field.c_length_name, R_obj.c_type)
- _h('%sconst %s *S /**< */%s);', spacing, S_obj.c_type, add_param_str)
- _c('%sconst %s *S /**< */%s)', spacing, S_obj.c_type, add_param_str)
+ _hc('%s (const %s *R,', field.c_length_name, R_obj.c_type)
+ _h('%sconst %s *S%s);', spacing, S_obj.c_type, add_param_str)
+ _c('%sconst %s *S%s)', spacing, S_obj.c_type, add_param_str)
else:
- _h('%s (const %s *R /**< */%s);', field.c_length_name, c_type, add_param_str)
- _c('%s (const %s *R /**< */%s)', field.c_length_name, c_type, add_param_str)
+ _h('%s (const %s *R%s);', field.c_length_name, c_type, add_param_str)
+ _c('%s (const %s *R%s)', field.c_length_name, c_type, add_param_str)
_c('{')
length = _c_accessor_get_expr(field.type.expr, fields)
_c(' return %s;', length)
@@ -1920,12 +1919,12 @@ def _c_accessors_list(self, field):
spacing = ' '*(len(field.c_end_name)+2)
add_param_str = additional_params_to_str(spacing)
if switch_obj is not None:
- _hc('%s (const %s *R /**< */,', field.c_end_name, R_obj.c_type)
- _h('%sconst %s *S /**< */%s);', spacing, S_obj.c_type, add_param_str)
- _c('%sconst %s *S /**< */%s)', spacing, S_obj.c_type, add_param_str)
+ _hc('%s (const %s *R,', field.c_end_name, R_obj.c_type)
+ _h('%sconst %s *S%s);', spacing, S_obj.c_type, add_param_str)
+ _c('%sconst %s *S%s)', spacing, S_obj.c_type, add_param_str)
else:
- _h('%s (const %s *R /**< */%s);', field.c_end_name, c_type, add_param_str)
- _c('%s (const %s *R /**< */%s)', field.c_end_name, c_type, add_param_str)
+ _h('%s (const %s *R%s);', field.c_end_name, c_type, add_param_str)
+ _c('%s (const %s *R%s)', field.c_end_name, c_type, add_param_str)
_c('{')
_c(' xcb_generic_iterator_t i;')
@@ -1953,12 +1952,12 @@ def _c_accessors_list(self, field):
spacing = ' '*(len(field.c_iterator_name)+2)
add_param_str = additional_params_to_str(spacing)
if switch_obj is not None:
- _hc('%s (const %s *R /**< */,', field.c_iterator_name, R_obj.c_type)
- _h('%sconst %s *S /**< */%s);', spacing, S_obj.c_type, add_param_str)
- _c('%sconst %s *S /**< */%s)', spacing, S_obj.c_type, add_param_str)
+ _hc('%s (const %s *R,', field.c_iterator_name, R_obj.c_type)
+ _h('%sconst %s *S%s);', spacing, S_obj.c_type, add_param_str)
+ _c('%sconst %s *S%s)', spacing, S_obj.c_type, add_param_str)
else:
- _h('%s (const %s *R /**< */%s);', field.c_iterator_name, c_type, add_param_str)
- _c('%s (const %s *R /**< */%s)', field.c_iterator_name, c_type, add_param_str)
+ _h('%s (const %s *R%s);', field.c_iterator_name, c_type, add_param_str)
+ _c('%s (const %s *R%s)', field.c_iterator_name, c_type, add_param_str)
_c('{')
_c(' %s i;', field.c_iterator_type)
@@ -2064,10 +2063,10 @@ def _c_complex(self, force_packed = False):
# necessary for unserialize to work
(self.is_switch and field.type.is_switch)):
spacing = ' ' * (maxtypelen - len(field.c_field_type))
- _h('%s %s%s %s%s; /**< */', space, field.c_field_type, spacing, field.c_field_name, field.c_subscript)
+ _h('%s %s%s %s%s;', space, field.c_field_type, spacing, field.c_field_name, field.c_subscript)
else:
spacing = ' ' * (maxtypelen - (len(field.c_field_type) + 1))
- _h('%s %s%s *%s%s; /**< */', space, field.c_field_type, spacing, field.c_field_name, field.c_subscript)
+ _h('%s %s%s *%s%s;', space, field.c_field_type, spacing, field.c_field_name, field.c_subscript)
if not self.is_switch:
for field in struct_fields:
@@ -2244,9 +2243,9 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
spacing = ' ' * (maxtypelen - len('xcb_connection_t'))
comma = ',' if len(param_fields) else ');'
- _h('%s (xcb_connection_t%s *c /**< */%s', func_name, spacing, comma)
+ _h('%s (xcb_connection_t%s *c%s', func_name, spacing, comma)
comma = ',' if len(param_fields) else ')'
- _c('%s (xcb_connection_t%s *c /**< */%s', func_name, spacing, comma)
+ _c('%s (xcb_connection_t%s *c%s', func_name, spacing, comma)
func_spacing = ' ' * (len(func_name) + 2)
count = len(param_fields)
@@ -2259,10 +2258,10 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
c_pointer = '*'
spacing = ' ' * (maxtypelen - len(c_field_const_type))
comma = ',' if count else ');'
- _h('%s%s%s %s%s /**< */%s', func_spacing, c_field_const_type,
+ _h('%s%s%s %s%s%s', func_spacing, c_field_const_type,
spacing, c_pointer, field.c_field_name, comma)
comma = ',' if count else ')'
- _c('%s%s%s %s%s /**< */%s', func_spacing, c_field_const_type,
+ _c('%s%s%s %s%s%s', func_spacing, c_field_const_type,
spacing, c_pointer, field.c_field_name, comma)
count = 2
@@ -2292,13 +2291,16 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
_c(' void *xcb_aux = 0;')
- for idx, f in enumerate(serial_fields):
+ for idx, _ in enumerate(serial_fields):
if aux:
_c(' void *xcb_aux%d = 0;' % (idx))
if list_with_var_size_elems:
_c(' unsigned int i;')
_c(' unsigned int xcb_tmp_len;')
_c(' char *xcb_tmp;')
+ num_fds = len([field for field in param_fields if field.isfd])
+ if num_fds > 0:
+ _c(' int fds[%d];' % (num_fds))
_c('')
# fixed size fields
@@ -2399,11 +2401,16 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
# no padding necessary - _serialize() keeps track of padding automatically
_c('')
+ fd_index = 0
for field in param_fields:
if field.isfd:
- _c(' xcb_send_fd(c, %s);', field.c_field_name)
+ _c(' fds[%d] = %s;', fd_index, field.c_field_name)
+ fd_index = fd_index + 1
- _c(' xcb_ret.sequence = xcb_send_request(c, %s, xcb_parts + 2, &xcb_req);', func_flags)
+ if num_fds == 0:
+ _c(' xcb_ret.sequence = xcb_send_request(c, %s, xcb_parts + 2, &xcb_req);', func_flags)
+ else:
+ _c(' xcb_ret.sequence = xcb_send_request_with_fds(c, %s, xcb_parts + 2, &xcb_req, %d, fds);', func_flags, num_fds)
# free dyn. all. data, if any
for f in free_calls:
@@ -2458,10 +2465,10 @@ def _c_reply(self, name):
_h(' */')
_c('')
_hc('%s *', self.c_reply_type)
- _hc('%s (xcb_connection_t%s *c /**< */,', self.c_reply_name, spacing1)
+ _hc('%s (xcb_connection_t%s *c,', self.c_reply_name, spacing1)
_hc('%s%s cookie /**< */,', spacing3, self.c_cookie_type)
- _h('%sxcb_generic_error_t%s **e /**< */);', spacing3, spacing2)
- _c('%sxcb_generic_error_t%s **e /**< */)', spacing3, spacing2)
+ _h('%sxcb_generic_error_t%s **e);', spacing3, spacing2)
+ _c('%sxcb_generic_error_t%s **e)', spacing3, spacing2)
_c('{')
if len(unserialize_fields)>0:
@@ -2516,8 +2523,8 @@ def _c_reply_fds(self, name):
_c('')
_hc('int *')
_hc('%s (xcb_connection_t%s *c /**< */,', self.c_reply_fds_name, spacing1)
- _h('%s%s *reply /**< */);', spacing3, self.c_reply_type)
- _c('%s%s *reply /**< */)', spacing3, self.c_reply_type)
+ _h('%s%s *reply);', spacing3, self.c_reply_type)
+ _c('%s%s *reply)', spacing3, self.c_reply_type)
_c('{')
_c(' return xcb_get_reply_fds(c, reply, sizeof(%s) + 4 * reply->length);', self.c_reply_type)
@@ -2544,7 +2551,7 @@ def _c_cookie(self, name):
_h(' * @brief %s', self.c_cookie_type)
_h(' **/')
_h('typedef struct %s {', self.c_cookie_type)
- _h(' unsigned int sequence; /**< */')
+ _h(' unsigned int sequence;')
_h('} %s;', self.c_cookie_type)
def _man_request(self, name, void, aux):
diff --git a/libxcb/src/xcb_in.c b/libxcb/src/xcb_in.c
index 623a0a803..322bed816 100755
--- a/libxcb/src/xcb_in.c
+++ b/libxcb/src/xcb_in.c
@@ -761,6 +761,7 @@ xcb_generic_event_t *xcb_wait_for_special_event(xcb_connection_t *c,
if(!_xcb_conn_wait(c, &se->special_event_cond, 0, 0))
break;
+ _xcb_in_wake_up_next_reader(c);
pthread_mutex_unlock(&c->iolock);
return event;
}
diff --git a/libxcb/src/xcb_out.c b/libxcb/src/xcb_out.c
index efe2b4bc5..3d849ea5b 100644
--- a/libxcb/src/xcb_out.c
+++ b/libxcb/src/xcb_out.c
@@ -178,15 +178,59 @@ uint32_t xcb_get_maximum_request_length(xcb_connection_t *c)
return c->out.maximum_request_length.value;
}
-uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *req)
+static void close_fds(int *fds, unsigned int num_fds)
+{
+ for (unsigned int index = 0; index < num_fds; index++)
+ close(fds[index]);
+}
+
+static void send_fds(xcb_connection_t *c, int *fds, unsigned int num_fds)
+{
+#if HAVE_SENDMSG
+ /* Calling _xcb_out_flush_to() can drop the iolock and wait on a condition
+ * variable if another thread is currently writing (c->out.writing > 0).
+ * This call waits for writers to be done and thus _xcb_out_flush_to() will
+ * do the work itself (in which case we are a writer and
+ * prepare_socket_request() will wait for us to be done if another threads
+ * tries to send fds, too). Thanks to this, we can atomically write out FDs.
+ */
+ prepare_socket_request(c);
+
+ while (num_fds > 0) {
+ while (c->out.out_fd.nfd == XCB_MAX_PASS_FD && !c->has_error) {
+ /* XXX: if c->out.writing > 0, this releases the iolock and
+ * potentially allows other threads to interfere with their own fds.
+ */
+ _xcb_out_flush_to(c, c->out.request);
+
+ if (c->out.out_fd.nfd == XCB_MAX_PASS_FD) {
+ /* We need some request to send FDs with */
+ _xcb_out_send_sync(c);
+ }
+ }
+ if (c->has_error)
+ break;
+
+ c->out.out_fd.fd[c->out.out_fd.nfd++] = fds[0];
+ fds++;
+ num_fds--;
+ }
+#endif
+ close_fds(fds, num_fds);
+}
+
+uint64_t xcb_send_request_with_fds64(xcb_connection_t *c, int flags, struct iovec *vector,
+ const xcb_protocol_request_t *req, unsigned int num_fds, int *fds)
{
uint64_t request;
uint32_t prefix[2];
int veclen = req->count;
enum workarounds workaround = WORKAROUND_NONE;
- if(c->has_error)
+ if(c->has_error) {
+ close_fds(fds, num_fds);
return 0;
+ }
assert(c != 0);
assert(vector != 0);
@@ -205,6 +249,7 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
const xcb_query_extension_reply_t *extension = xcb_get_extension_data(c, req->ext);
if(!(extension && extension->present))
{
+ close_fds(fds, num_fds);
_xcb_conn_shutdown(c, XCB_CONN_CLOSED_EXT_NOTSUPPORTED);
return 0;
}
@@ -235,6 +280,7 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
}
else if(longlen > xcb_get_maximum_request_length(c))
{
+ close_fds(fds, num_fds);
_xcb_conn_shutdown(c, XCB_CONN_CLOSED_REQ_LEN_EXCEED);
return 0; /* server can't take this; maybe need BIGREQUESTS? */
}
@@ -265,6 +311,11 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
/* get a sequence number and arrange for delivery. */
pthread_mutex_lock(&c->iolock);
+ /* send FDs before establishing a good request number, because this might
+ * call send_sync(), too
+ */
+ send_fds(c, fds, num_fds);
+
prepare_socket_request(c);
/* send GetInputFocus (sync_req) when 64k-2 requests have been sent without
@@ -273,7 +324,7 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
* applications see sequence 0 as that is used to indicate
* an error in sending the request
*/
-
+
while ((req->isvoid && c->out.request == c->in.request_expected + (1 << 16) - 2) ||
(unsigned int) (c->out.request + 1) == 0)
{
@@ -288,6 +339,18 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
}
/* request number are actually uint64_t internally but keep API compat with unsigned int */
+unsigned int xcb_send_request_with_fds(xcb_connection_t *c, int flags, struct iovec *vector,
+ const xcb_protocol_request_t *req, unsigned int num_fds, int *fds)
+{
+ return xcb_send_request_with_fds64(c, flags, vector, req, num_fds, fds);
+}
+
+uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *req)
+{
+ return xcb_send_request_with_fds64(c, flags, vector, req, 0, NULL);
+}
+
+/* request number are actually uint64_t internally but keep API compat with unsigned int */
unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *req)
{
return xcb_send_request64(c, flags, vector, req);
@@ -296,19 +359,15 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
void
xcb_send_fd(xcb_connection_t *c, int fd)
{
-#if HAVE_SENDMSG
- if (c->has_error)
+ int fds[1] = { fd };
+
+ if (c->has_error) {
+ close(fd);
return;
- pthread_mutex_lock(&c->iolock);
- while (c->out.out_fd.nfd == XCB_MAX_PASS_FD) {
- _xcb_out_flush_to(c, c->out.request);
- if (c->has_error)
- break;
}
- if (!c->has_error)
- c->out.out_fd.fd[c->out.out_fd.nfd++] = fd;
+ pthread_mutex_lock(&c->iolock);
+ send_fds(c, &fds[0], 1);
pthread_mutex_unlock(&c->iolock);
-#endif
}
int xcb_take_socket(xcb_connection_t *c, void (*return_socket)(void *closure), void *closure, int flags, uint64_t *sent)
diff --git a/libxcb/src/xcbext.h b/libxcb/src/xcbext.h
index b2575f7e3..44d789eee 100644
--- a/libxcb/src/xcbext.h
+++ b/libxcb/src/xcbext.h
@@ -68,13 +68,13 @@ enum xcb_send_request_flags_t {
*
* This function sends a new request to the X server. The data of the request is
* given as an array of @c iovecs in the @p vector argument. The length of that
- * array and the neccessary management information are given in the @p request
+ * array and the necessary management information are given in the @p request
* argument.
*
* When this function returns, the request might or might not be sent already.
* Use xcb_flush() to make sure that it really was sent.
*
- * Please note that this function is not the prefered way for sending requests.
+ * Please note that this function is not the preferred way for sending requests.
* It's better to use the generated wrapper functions.
*
* Please note that xcb might use index -1 and -2 of the @p vector array internally,
@@ -83,6 +83,37 @@ enum xcb_send_request_flags_t {
unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *request);
/**
+ * @brief Send a request to the server.
+ * @param c: The connection to the X server.
+ * @param flags: A combination of flags from the xcb_send_request_flags_t enumeration.
+ * @param vector: Data to send; must have two iovecs before start for internal use.
+ * @param request: Information about the request to be sent.
+ * @param num_fds: Number of additional file descriptors to send to the server
+ * @param fds: Additional file descriptors that should be send to the server.
+ * @return The request's sequence number on success, 0 otherwise.
+ *
+ * This function sends a new request to the X server. The data of the request is
+ * given as an array of @c iovecs in the @p vector argument. The length of that
+ * array and the necessary management information are given in the @p request
+ * argument.
+ *
+ * If @p num_fds is non-zero, @p fds points to an array of file descriptors that
+ * will be sent to the X server along with this request. After this function
+ * returns, all file descriptors sent are owned by xcb and will be closed
+ * eventually.
+ *
+ * When this function returns, the request might or might not be sent already.
+ * Use xcb_flush() to make sure that it really was sent.
+ *
+ * Please note that this function is not the preferred way for sending requests.
+ *
+ * Please note that xcb might use index -1 and -2 of the @p vector array internally,
+ * so they must be valid!
+ */
+unsigned int xcb_send_request_with_fds(xcb_connection_t *c, int flags, struct iovec *vector,
+ const xcb_protocol_request_t *request, unsigned int num_fds, int *fds);
+
+/**
* @brief Send a request to the server, with 64-bit sequence number returned.
* @param c: The connection to the X server.
* @param flags: A combination of flags from the xcb_send_request_flags_t enumeration.
@@ -92,13 +123,13 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
*
* This function sends a new request to the X server. The data of the request is
* given as an array of @c iovecs in the @p vector argument. The length of that
- * array and the neccessary management information are given in the @p request
+ * array and the necessary management information are given in the @p request
* argument.
*
* When this function returns, the request might or might not be sent already.
* Use xcb_flush() to make sure that it really was sent.
*
- * Please note that this function is not the prefered way for sending requests.
+ * Please note that this function is not the preferred way for sending requests.
* It's better to use the generated wrapper functions.
*
* Please note that xcb might use index -1 and -2 of the @p vector array internally,
@@ -107,6 +138,38 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector, const xcb_protocol_request_t *request);
/**
+ * @brief Send a request to the server, with 64-bit sequence number returned.
+ * @param c: The connection to the X server.
+ * @param flags: A combination of flags from the xcb_send_request_flags_t enumeration.
+ * @param vector: Data to send; must have two iovecs before start for internal use.
+ * @param request: Information about the request to be sent.
+ * @param num_fds: Number of additional file descriptors to send to the server
+ * @param fds: Additional file descriptors that should be send to the server.
+ * @return The request's sequence number on success, 0 otherwise.
+ *
+ * This function sends a new request to the X server. The data of the request is
+ * given as an array of @c iovecs in the @p vector argument. The length of that
+ * array and the necessary management information are given in the @p request
+ * argument.
+ *
+ * If @p num_fds is non-zero, @p fds points to an array of file descriptors that
+ * will be sent to the X server along with this request. After this function
+ * returns, all file descriptors sent are owned by xcb and will be closed
+ * eventually.
+ *
+ * When this function returns, the request might or might not be sent already.
+ * Use xcb_flush() to make sure that it really was sent.
+ *
+ * Please note that this function is not the preferred way for sending requests.
+ * It's better to use the generated wrapper functions.
+ *
+ * Please note that xcb might use index -1 and -2 of the @p vector array internally,
+ * so they must be valid!
+ */
+uint64_t xcb_send_request_with_fds64(xcb_connection_t *c, int flags, struct iovec *vector,
+ const xcb_protocol_request_t *request, unsigned int num_fds, int *fds);
+
+/**
* @brief Send a file descriptor to the server in the next call to xcb_send_request.
* @param c: The connection to the X server.
* @param fd: The file descriptor to send.
@@ -114,9 +177,9 @@ uint64_t xcb_send_request64(xcb_connection_t *c, int flags, struct iovec *vector
* After this function returns, the file descriptor given is owned by xcb and
* will be closed eventually.
*
- * FIXME: How the heck is this supposed to work in a thread-safe way? There is a
- * race between two threads doing xcb_send_fd(); xcb_send_request(); at the same
- * time.
+ * @deprecated This function cannot be used in a thread-safe way. Two threads
+ * that run xcb_send_fd(); xcb_send_request(); could mix up their file
+ * descriptors. Instead, xcb_send_request_with_fds() should be used.
*/
void xcb_send_fd(xcb_connection_t *c, int fd);
diff --git a/libxcb/xcb-proto/doc/xml-xcb.txt b/libxcb/xcb-proto/doc/xml-xcb.txt
index f8129ea9c..12c0881a9 100644
--- a/libxcb/xcb-proto/doc/xml-xcb.txt
+++ b/libxcb/xcb-proto/doc/xml-xcb.txt
@@ -218,13 +218,6 @@ enum; the value is restricted to one of the constants named in the enum.
of the list in terms of other fields in the structure. See the section
"Expressions" for details on the expression representation.
-<localfield type="identifier" name="identifier" />
-
- This element represents a parameter in a request that is not sent over the
- wire. The field can be referenced in the length expressions of lists or in
- an exprfield. The type attribute declares the data type of the field, and
- the name attribute gives the name of the field.
-
<exprfield type="identifier" name="identifier">expression</exprfield>
This element represents a field in a request that is calculated rather than
@@ -244,8 +237,8 @@ enum; the value is restricted to one of the constants named in the enum.
<switch> instead for new protocol definitions.
<switch name="identifier"> switch expression
- <bitcase> bitcase expression(s), fields </bitcase>
- <case> case expression(s), fields </case>
+ <bitcase [name="identifier"]> bitcase expression(s), fields </bitcase>
+ <case [name="identifier"]> case expression(s), fields </case>
</switch>
This element represents conditional inclusion of fields. It can be viewed
diff --git a/libxcb/xcb-proto/src/present.xml b/libxcb/xcb-proto/src/present.xml
index 95fee0181..513388c1c 100644
--- a/libxcb/xcb-proto/src/present.xml
+++ b/libxcb/xcb-proto/src/present.xml
@@ -199,15 +199,7 @@ OF THIS SOFTWARE.
<field type="CARD64" name="target_msc" />
<field type="CARD64" name="divisor" />
<field type="CARD64" name="remainder" />
- <list type="Notify" name="notifies">
- <op op="/">
- <op op="-">
- <fieldref>length</fieldref>
- <value>18</value>
- </op>
- <value>2</value>
- </op>
- </list>
+ <list type="Notify" name="notifies" />
</event>
</xcb>
diff --git a/libxcb/xcb-proto/src/xprint.xml b/libxcb/xcb-proto/src/xprint.xml
index dc23dd0da..4da49b0a9 100644
--- a/libxcb/xcb-proto/src/xprint.xml
+++ b/libxcb/xcb-proto/src/xprint.xml
@@ -178,9 +178,13 @@ authorization from the authors.
<fieldref>len_data</fieldref>
</list>
<!-- padding -->
- <list type="STRING8" name="doc_format" />
+ <list type="STRING8" name="doc_format">
+ <fieldref>len_fmt</fieldref>
+ </list>
<!-- padding -->
- <list type="STRING8" name="options" />
+ <list type="STRING8" name="options">
+ <fieldref>len_options</fieldref>
+ </list>
</request>
<request name="PrintGetDocumentData" opcode="12">
diff --git a/mesalib/Android.common.mk b/mesalib/Android.common.mk
index edf52d6fa..d662d6018 100644
--- a/mesalib/Android.common.mk
+++ b/mesalib/Android.common.mk
@@ -68,7 +68,16 @@ LOCAL_CFLAGS += \
endif
endif
+ifeq ($(MESA_ENABLE_LLVM),true)
+LOCAL_CFLAGS += \
+ -DHAVE_LLVM=0x0305 -DLLVM_VERSION_PATCH=2 \
+ -D__STDC_CONSTANT_MACROS \
+ -D__STDC_FORMAT_MACROS \
+ -D__STDC_LIMIT_MACROS
+endif
+
LOCAL_CPPFLAGS += \
+ $(if $(filter true,$(MESA_LOLLIPOP_BUILD)),-D_USING_LIBCXX) \
-Wno-error=non-virtual-dtor \
-Wno-non-virtual-dtor
diff --git a/mesalib/Android.mk b/mesalib/Android.mk
index b19419ba7..69e0d33f1 100644
--- a/mesalib/Android.mk
+++ b/mesalib/Android.mk
@@ -24,7 +24,7 @@
# BOARD_GPU_DRIVERS should be defined. The valid values are
#
# classic drivers: i915 i965
-# gallium drivers: swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx
+# gallium drivers: swrast freedreno i915g ilo nouveau r300g r600g radeonsi vc4 vmwgfx
#
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
# module will also be built. DRI modules will be loaded by libGLES_mesa.
@@ -48,7 +48,7 @@ MESA_PYTHON2 := python
DRM_GRALLOC_TOP := hardware/drm_gralloc
classic_drivers := i915 i965
-gallium_drivers := swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx
+gallium_drivers := swrast freedreno i915g ilo nouveau r300g r600g radeonsi vmwgfx vc4
MESA_GPU_DRIVERS := $(strip $(BOARD_GPU_DRIVERS))
@@ -80,6 +80,8 @@ else
MESA_BUILD_GALLIUM := false
endif
+MESA_ENABLE_LLVM := $(if $(filter radeonsi,$(MESA_GPU_DRIVERS)),true,false)
+
# add subdirectories
ifneq ($(strip $(MESA_GPU_DRIVERS)),)
@@ -89,13 +91,9 @@ SUBDIRS := \
src/glsl \
src/mesa \
src/util \
- src/egl/main
-
-ifeq ($(strip $(MESA_BUILD_CLASSIC)),true)
-SUBDIRS += \
+ src/egl/main \
src/egl/drivers/dri2 \
src/mesa/drivers/dri
-endif
ifeq ($(strip $(MESA_BUILD_GALLIUM)),true)
SUBDIRS += src/gallium
diff --git a/mesalib/CleanSpec.mk b/mesalib/CleanSpec.mk
index 20681638e..d08b0def7 100644
--- a/mesalib/CleanSpec.mk
+++ b/mesalib/CleanSpec.mk
@@ -13,3 +13,4 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/libGLES_mesa_int
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/mesa_*_intermediates)
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/EXECUTABLES/glsl_compiler_intermediates)
$(call add-clean-step, rm -rf $(HOST_OUT_release)/*/STATIC_LIBRARIES/libmesa_*_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/*/SHARED_LIBRARIES/*_dri_intermediates)
diff --git a/mesalib/VERSION b/mesalib/VERSION
index 8d3030650..1edd8fc00 100644
--- a/mesalib/VERSION
+++ b/mesalib/VERSION
@@ -1 +1 @@
-10.6.0-devel
+10.7.0-devel
diff --git a/mesalib/configure.ac b/mesalib/configure.ac
index 095e23e69..34d1ac988 100644
--- a/mesalib/configure.ac
+++ b/mesalib/configure.ac
@@ -649,6 +649,7 @@ if test "x$enable_asm" = xyes; then
fi
AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"])
+AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"])
AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"])
dnl Check to see if dlopen is in default libraries (like Solaris, which
@@ -713,15 +714,15 @@ AC_ARG_ENABLE([opengl],
[enable_opengl="$enableval"],
[enable_opengl=yes])
AC_ARG_ENABLE([gles1],
- [AS_HELP_STRING([--enable-gles1],
- [enable support for OpenGL ES 1.x API @<:@default=disabled@:>@])],
+ [AS_HELP_STRING([--disable-gles1],
+ [disable support for OpenGL ES 1.x API @<:@default=enabled@:>@])],
[enable_gles1="$enableval"],
- [enable_gles1=no])
+ [enable_gles1=yes])
AC_ARG_ENABLE([gles2],
- [AS_HELP_STRING([--enable-gles2],
- [enable support for OpenGL ES 2.x API @<:@default=disabled@:>@])],
+ [AS_HELP_STRING([--disable-gles2],
+ [disable support for OpenGL ES 2.x API @<:@default=enabled@:>@])],
[enable_gles2="$enableval"],
- [enable_gles2=no])
+ [enable_gles2=yes])
AC_ARG_ENABLE([dri],
[AS_HELP_STRING([--enable-dri],
@@ -1920,10 +1921,7 @@ if test "x$enable_gallium_llvm" = xyes; then
AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer is required])
fi
- LLVM_COMPONENTS="engine bitwriter"
- if $LLVM_CONFIG --components | grep -qw 'mcjit'; then
- LLVM_COMPONENTS="${LLVM_COMPONENTS} mcjit"
- fi
+ LLVM_COMPONENTS="engine bitwriter mcjit mcdisassembler"
if test "x$enable_opencl" = xyes; then
llvm_check_version_for "3" "5" "0" "opencl"
@@ -2050,16 +2048,19 @@ require_egl_drm() {
}
radeon_llvm_check() {
+ if test ${LLVM_VERSION_INT} -lt 307; then
+ amdgpu_llvm_target_name='r600'
+ else
+ amdgpu_llvm_target_name='amdgpu'
+ fi
if test "x$enable_gallium_llvm" != "xyes"; then
AC_MSG_ERROR([--enable-gallium-llvm is required when building $1])
fi
llvm_check_version_for "3" "4" "2" $1
- if test true && $LLVM_CONFIG --targets-built | grep -qvw 'R600' ; then
- AC_MSG_ERROR([LLVM R600 Target not enabled. You can enable it when building the LLVM
- sources with the --enable-experimental-targets=R600
- configure flag])
+ if test true && $LLVM_CONFIG --targets-built | grep -iqvw $amdgpu_llvm_target_name ; then
+ AC_MSG_ERROR([LLVM $amdgpu_llvm_target_name not enabled in your LLVM build.])
fi
- LLVM_COMPONENTS="${LLVM_COMPONENTS} r600 bitreader ipo"
+ LLVM_COMPONENTS="${LLVM_COMPONENTS} $amdgpu_llvm_target_name bitreader ipo"
NEED_RADEON_LLVM=yes
if test "x$have_libelf" != xyes; then
AC_MSG_ERROR([$1 requires libelf when using llvm])
@@ -2352,7 +2353,6 @@ AC_CONFIG_FILES([Makefile
src/gallium/drivers/svga/Makefile
src/gallium/drivers/trace/Makefile
src/gallium/drivers/vc4/Makefile
- src/gallium/drivers/vc4/kernel/Makefile
src/gallium/state_trackers/clover/Makefile
src/gallium/state_trackers/dri/Makefile
src/gallium/state_trackers/glx/xlib/Makefile
diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt
index c7009308a..f2d06f173 100644
--- a/mesalib/docs/GL3.txt
+++ b/mesalib/docs/GL3.txt
@@ -102,8 +102,8 @@ GL 4.0, GLSL 4.00:
- Dynamically uniform UBO array indices DONE (r600)
- Implicit signed -> unsigned conversions DONE
- Fused multiply-add DONE ()
- - Packing/bitfield/conversion functions DONE (r600, radeonsi)
- - Enhanced textureGather DONE (r600, radeonsi)
+ - Packing/bitfield/conversion functions DONE (r600, radeonsi, softpipe)
+ - Enhanced textureGather DONE (r600, radeonsi, softpipe)
- Geometry shader instancing DONE (r600)
- Geometry shader multiple streams DONE ()
- Enhanced per-sample shading DONE (r600, radeonsi)
@@ -115,7 +115,7 @@ GL 4.0, GLSL 4.00:
GL_ARB_tessellation_shader started (Chris, Ilia)
GL_ARB_texture_buffer_object_rgb32 DONE (i965, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_texture_cube_map_array DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
- GL_ARB_texture_gather DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe)
+ GL_ARB_texture_gather DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_texture_query_lod DONE (i965, nv50, nvc0, r600, radeonsi)
GL_ARB_transform_feedback2 DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_transform_feedback3 DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
@@ -153,7 +153,7 @@ GL 4.3, GLSL 4.30:
GL_ARB_ES3_compatibility DONE (all drivers that support GLSL 3.30)
GL_ARB_clear_buffer_object DONE (all drivers)
GL_ARB_compute_shader in progress (jljusten)
- GL_ARB_copy_image DONE (i965)
+ GL_ARB_copy_image DONE (i965) (gallium - in progress, VMware)
GL_KHR_debug DONE (all drivers)
GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL)
GL_ARB_fragment_layer_viewport DONE (nv50, nvc0, r600, llvmpipe)
@@ -164,7 +164,7 @@ GL 4.3, GLSL 4.30:
GL_ARB_program_interface_query DONE (all drivers)
GL_ARB_robust_buffer_access_behavior not started
GL_ARB_shader_image_size in progress (Martin Peres)
- GL_ARB_shader_storage_buffer_object not started
+ GL_ARB_shader_storage_buffer_object in progress (Iago Toral, Samuel Iglesias)
GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_texture_buffer_range DONE (nv50, nvc0, i965, r600, radeonsi, llvmpipe)
GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30)
@@ -177,7 +177,7 @@ GL 4.4, GLSL 4.40:
GL_MAX_VERTEX_ATTRIB_STRIDE DONE (all drivers)
GL_ARB_buffer_storage DONE (i965, nv50, nvc0, r600, radeonsi)
- GL_ARB_clear_texture DONE (i965)
+ GL_ARB_clear_texture DONE (i965) (gallium - in progress, VMware)
GL_ARB_enhanced_layouts not started
GL_ARB_multi_bind DONE (all drivers)
GL_ARB_query_buffer_object not started
@@ -190,7 +190,7 @@ GL 4.5, GLSL 4.50:
GL_ARB_ES3_1_compatibility not started
GL_ARB_clip_control DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
GL_ARB_conditional_render_inverted DONE (i965, nv50, nvc0, llvmpipe, softpipe)
- GL_ARB_cull_distance not started
+ GL_ARB_cull_distance in progress (Tobias)
GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
GL_ARB_direct_state_access DONE (all drivers)
- Transform Feedback object DONE
@@ -221,7 +221,7 @@ GLES3.1, GLSL ES 3.1
GL_ARB_shader_atomic_counters DONE (i965)
GL_ARB_shader_image_load_store in progress (curro)
GL_ARB_shader_image_size in progress (Martin Peres)
- GL_ARB_shader_storage_buffer_object not started
+ GL_ARB_shader_storage_buffer_object in progress (Iago Toral, Samuel Iglesias)
GL_ARB_shading_language_packing DONE (all drivers)
GL_ARB_separate_shader_objects DONE (all drivers)
GL_ARB_stencil_texturing DONE (i965/gen8+, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
diff --git a/mesalib/docs/devinfo.html b/mesalib/docs/devinfo.html
index 8d20eea3c..0da18b9b7 100644
--- a/mesalib/docs/devinfo.html
+++ b/mesalib/docs/devinfo.html
@@ -17,159 +17,241 @@
<h1>Development Notes</h1>
-<h2>Adding Extensions</h2>
-
-<p>
-To add a new GL extension to Mesa you have to do at least the following.
-
<ul>
-<li>
- If glext.h doesn't define the extension, edit include/GL/gl.h and add
- code like this:
- <pre>
- #ifndef GL_EXT_the_extension_name
- #define GL_EXT_the_extension_name 1
- /* declare the new enum tokens */
- /* prototype the new functions */
- /* TYPEDEFS for the new functions */
- #endif
- </pre>
-</li>
-<li>
- In the src/mapi/glapi/gen/ directory, add the new extension functions and
- enums to the gl_API.xml file.
- Then, a bunch of source files must be regenerated by executing the
- corresponding Python scripts.
-</li>
-<li>
- Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
-</li>
-<li>
- Update the <code>extensions.c</code> file.
-</li>
-<li>
- From this point, the best way to proceed is to find another extension,
- similar to the new one, that's already implemented in Mesa and use it
- as an example.
-</li>
-<li>
- If the new extension adds new GL state, the functions in get.c, enable.c
- and attrib.c will most likely require new code.
-</li>
-<li>
- The dispatch tests check_table.cpp and dispatch_sanity.cpp
- should be updated with details about the new extensions functions. These
- tests are run using 'make check'
-</li>
+<li><a href="#style">Coding Style</a>
+<li><a href="#submitting">Submitting Patches</a>
+<li><a href="#release">Making a New Mesa Release</a>
+<li><a href="#extensions">Adding Extensions</a>
</ul>
-
-<h2>Coding Style</h2>
+<h2 id="style">Coding Style</h2>
<p>
-Mesa's code style has changed over the years. Here's the latest.
+Mesa is over 20 years old and the coding style has evolved over time.
+Some old parts use a style that's a bit out of date.
+If the guidelines below don't cover something, try following the format of
+existing, neighboring code.
</p>
<p>
-Comment your code! It's extremely important that open-source code be
-well documented. Also, strive to write clean, easily understandable code.
+Basic formatting guidelines
</p>
-<p>
-3-space indentation
-</p>
+<ul>
+<li>3-space indentation, no tabs.
+<li>Limit lines to 78 or fewer characters. The idea is to prevent line
+wrapping in 80-column editors and terminals. There are exceptions, such
+as if you're defining a large, static table of information.
+<li>Opening braces go on the same line as the if/for/while statement.
+For example:
+<pre>
+ if (condition) {
+ foo;
+ } else {
+ bar;
+ }
+</pre>
-<p>
-If you use tabs, set them to 8 columns
-</p>
+<li>Put a space before/after operators. For example, <tt>a = b + c;</tt>
+and not <tt>a=b+c;</tt>
-<p>
-Line width: the preferred width to fill comments and code in Mesa is 78
-columns. Exceptions are sometimes made for clarity (e.g. tabular data is
-sometimes filled to a much larger width so that extraneous carriage returns
-don't obscure the table).
-</p>
+<li>This GNU indent command generally does the right thing for formatting:
+<pre>
+ indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
+</pre>
-<p>
-Brace example:
-</p>
+<li>Use comments wherever you think it would be helpful for other developers.
+Several specific cases and style examples follow. Note that we roughly
+follow <a href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> conventions.
+<br>
+<br>
+Single-line comments:
+<pre>
+ /* null-out pointer to prevent dangling reference below */
+ bufferObj = NULL;
+</pre>
+Or,
+<pre>
+ bufferObj = NULL; /* prevent dangling reference below */
+</pre>
+Multi-line comment:
<pre>
- if (condition) {
- foo;
- }
- else {
- bar;
- }
-
- switch (condition) {
- case 0:
- foo();
- break;
-
- case 1: {
- ...
- break;
- }
-
- default:
- ...
- break;
- }
+ /* If this is a new buffer object id, or one which was generated but
+ * never used before, allocate a buffer object now.
+ */
+</pre>
+We try to quote the OpenGL specification where prudent:
+<pre>
+ /* Page 38 of the PDF of the OpenGL ES 3.0 spec says:
+ *
+ * "An INVALID_OPERATION error is generated for any of the following
+ * conditions:
+ *
+ * * <length> is zero."
+ *
+ * Additionally, page 94 of the PDF of the OpenGL 4.5 core spec
+ * (30.10.2014) also says this, so it's no longer allowed for desktop GL,
+ * either.
+ */
+</pre>
+Function comment example:
+<pre>
+ /**
+ * Create and initialize a new buffer object. Called via the
+ * ctx->Driver.CreateObject() driver callback function.
+ * \param name integer name of the object
+ * \param type one of GL_FOO, GL_BAR, etc.
+ * \return pointer to new object or NULL if error
+ */
+ struct gl_object *
+ _mesa_create_object(GLuint name, GLenum type)
+ {
+ /* function body */
+ }
</pre>
-<p>
-Here's the GNU indent command which will best approximate my preferred style:
-(Note that it won't format switch statements in the preferred way)
-</p>
+<li>Put the function return type and qualifiers on one line and the function
+name and parameters on the next, as seen above. This makes it easy to use
+<code>grep ^function_name dir/*</code> to find function definitions. Also,
+the opening brace goes on the next line by itself (see above.)
+
+<li>Function names follow various conventions depending on the type of function:
<pre>
- indent -br -i3 -npcs --no-tabs infile.c -o outfile.c
+ glFooBar() - a public GL entry point (in glapi_dispatch.c)
+ _mesa_FooBar() - the internal immediate mode function
+ save_FooBar() - retained mode (display list) function in dlist.c
+ foo_bar() - a static (private) function
+ _mesa_foo_bar() - an internal non-static Mesa function
</pre>
+<li>Constants, macros and enumerant names are ALL_UPPERCASE, with _ between
+words.
+<li>Mesa usually uses camel case for local variables (Ex: "localVarname")
+while gallium typically uses underscores (Ex: "local_var_name").
+<li>Global variables are almost never used because Mesa should be thread-safe.
-<p>
-Local variable name example: localVarName (no underscores)
-</p>
+<li>Booleans. Places that are not directly visible to the GL API
+should prefer the use of <tt>bool</tt>, <tt>true</tt>, and
+<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
+<tt>GL_FALSE</tt>. In C code, this may mean that
+<tt>#include &lt;stdbool.h&gt;</tt> needs to be added. The
+<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
+src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
-<p>
-Constants and macros are ALL_UPPERCASE, with _ between words
-</p>
+</ul>
+
+
+<h2 id="submitting">Submitting patches</h2>
<p>
-Global variables are not allowed.
+The basic guidelines for submitting patches are:
</p>
+<ul>
+<li>Patches should be sufficiently tested before submitting.
+<li>Code patches should follow Mesa coding conventions.
+<li>Whenever possible, patches should only effect individual Mesa/Gallium
+components.
+<li>Patches should never introduce build breaks and should be bisectable (see
+<code>git bisect</code>.)
+<li>Patches should be properly formatted (see below).
+<li>Patches should be submitted to mesa-dev for review using
+<code>git send-email</code>.
+<li>Patches should not mix code changes with code formatting changes (except,
+perhaps, in very trivial cases.)
+</ul>
+
+<h3>Patch formatting</h3>
+
<p>
-Function name examples:
+The basic rules for patch formatting are:
</p>
+
+<ul>
+<li>Lines should be limited to 75 characters or less so that git logs
+displayed in 80-column terminals avoid line wrapping. Note that git
+log uses 4 spaces of indentation (4 + 75 &lt; 80).
+<li>The first line should be a short, concise summary of the change prefixed
+with a module name. Examples:
+<pre>
+ mesa: Add support for querying GL_VERTEX_ATTRIB_ARRAY_LONG
+
+ gallium: add PIPE_CAP_DEVICE_RESET_STATUS_QUERY
+
+ i965: Fix missing type in local variable declaration.
+</pre>
+<li>Subsequent patch comments should describe the change in more detail,
+if needed. For example:
+<pre>
+ i965: Remove end-of-thread SEND alignment code.
+
+ This was present in Eric's initial implementation of the compaction code
+ for Sandybridge (commit 077d01b6). There is no documentation saying this
+ is necessary, and removing it causes no regressions in piglit on any
+ platform.
+</pre>
+<li>A "Signed-off-by:" line is not required, but not discouraged either.
+<li>If a patch address a bugzilla issue, that should be noted in the
+patch comment. For example:
+<pre>
+ Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89689
+</pre>
+<li>If there have been several revisions to a patch during the review
+process, they should be noted such as in this example:
<pre>
- glFooBar() - a public GL entry point (in glapi_dispatch.c)
- _mesa_FooBar() - the internal immediate mode function
- save_FooBar() - retained mode (display list) function in dlist.c
- foo_bar() - a static (private) function
- _mesa_foo_bar() - an internal non-static Mesa function
+ st/mesa: add ARB_texture_stencil8 support (v4)
+
+ if we support stencil texturing, enable texture_stencil8
+ there is no requirement to support native S8 for this,
+ the texture can be converted to x24s8 fine.
+
+ v2: fold fixes from Marek in:
+ a) put S8 last in the list
+ b) fix renderable to always test for d/s renderable
+ fixup the texture case to use a stencil only format
+ for picking the format for the texture view.
+ v3: hit fallback for getteximage
+ v4: put s8 back in front, it shouldn't get picked now (Ilia)
</pre>
+<li>If someone tested your patch, document it with a line like this:
+<pre>
+ Tested-by: Joe Hacker &lt;jhacker@foo.com&gt;
+</pre>
+<li>If the patch was reviewed (usually the case) or acked by someone,
+that should be documented with:
+<pre>
+ Reviewed-by: Joe Hacker &lt;jhacker@foo.com&gt;
+ Acked-by: Joe Hacker &lt;jhacker@foo.com&gt;
+</pre>
+</ul>
+
+
+
+<h3>Testing Patches</h3>
<p>
-Places that are not directly visible to the GL API should prefer the use
-of <tt>bool</tt>, <tt>true</tt>, and
-<tt>false</tt> over <tt>GLboolean</tt>, <tt>GL_TRUE</tt>, and
-<tt>GL_FALSE</tt>. In C code, this may mean that
-<tt>#include &lt;stdbool.h&gt;</tt> needs to be added. The
-<tt>try_emit_</tt>* methods in src/mesa/program/ir_to_mesa.cpp and
-src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples.
+It should go without saying that patches must be tested. In general,
+do whatever testing is prudent.
</p>
-<h2>Submitting patches</h2>
-
<p>
-You should always run the Mesa Testsuite before submitting patches.
-The Testsuite can be run using the 'make check' command. All tests
+You should always run the Mesa test suite before submitting patches.
+The test suite can be run using the 'make check' command. All tests
must pass before patches will be accepted, this may mean you have
to update the tests themselves.
</p>
<p>
+Whenever possible and applicable, test the patch with
+<a href="http://people.freedesktop.org/~nh/piglit/">Piglit</a> to
+check for regressions.
+</p>
+
+
+<h3>Mailing Patches</h3>
+
+<p>
Patches should be sent to the Mesa mailing list for review.
When submitting a patch make sure to use git send-email rather than attaching
patches to emails. Sending patches as attachments prevents people from being
@@ -184,7 +266,32 @@ re-sending the whole series). Using --in-reply-to makes
it harder for reviewers to accidentally review old patches.
</p>
-<h2>Marking a commit as a candidate for a stable branch</h2>
+<h3>Reviewing Patches</h3>
+
+<p>
+When you've reviewed a patch on the mailing list, please be unambiguous
+about your review. That is, state either
+<pre>
+ Reviewed-by: Joe Hacker &lt;jhacker@foo.com&gt;
+</pre>
+or
+<pre>
+ Acked-by: Joe Hacker &lt;jhacker@foo.com&gt;
+</pre>
+Rather than saying just "LGTM" or "Seems OK".
+</p>
+
+<p>
+If small changes are suggested, it's OK to say something like:
+<pre>
+ With the above fixes, Reviewed-by: Joe Hacker &lt;jhacker@foo.com&gt;
+</pre>
+which tells the patch author that the patch can be committed, as long
+as the issues are resolved first.
+</p>
+
+
+<h3>Marking a commit as a candidate for a stable branch</h3>
<p>
If you want a commit to be applied to a stable branch,
@@ -221,7 +328,7 @@ the upcoming stable release can always be seen on the
<a href="http://cworth.org/~cworth/mesa-stable-queue/">Mesa Stable Queue</a>
page.
-<h2>Criteria for accepting patches to the stable branch</h2>
+<h3>Criteria for accepting patches to the stable branch</h3>
Mesa has a designated release manager for each stable branch, and the release
manager is the only developer that should be pushing changes to these
@@ -306,7 +413,8 @@ be rejected:
regression that is unaacceptable for the stable branch.</li>
</ul>
-<h2>Making a New Mesa Release</h2>
+
+<h2 id="release">Making a New Mesa Release</h2>
<p>
These are the instructions for making a new Mesa release.
@@ -456,7 +564,7 @@ Edit docs/relnotes/X.Y.Z.html to add the sha256sums printed as part of "make
tarballs" in the previous step. Commit this change.
</p>
-<h3>Push all commits and the tag creates above</h3>
+<h3>Push all commits and the tag created above</h3>
<p>
This is the first step that cannot easily be undone. The release is going
@@ -483,7 +591,7 @@ signatures to the freedesktop.org server:
mv ~/MesaLib-X.Y.Z* .
</pre>
-<h3>Back on mesa master, andd the new release notes into the tree</h3>
+<h3>Back on mesa master, add the new release notes into the tree</h3>
<p>
Something like the following steps will do the trick:
@@ -543,6 +651,56 @@ release announcement:
</pre>
</p>
+
+<h2 id="extensions">Adding Extensions</h2>
+
+<p>
+To add a new GL extension to Mesa you have to do at least the following.
+
+<ul>
+<li>
+ If glext.h doesn't define the extension, edit include/GL/gl.h and add
+ code like this:
+ <pre>
+ #ifndef GL_EXT_the_extension_name
+ #define GL_EXT_the_extension_name 1
+ /* declare the new enum tokens */
+ /* prototype the new functions */
+ /* TYPEDEFS for the new functions */
+ #endif
+ </pre>
+</li>
+<li>
+ In the src/mapi/glapi/gen/ directory, add the new extension functions and
+ enums to the gl_API.xml file.
+ Then, a bunch of source files must be regenerated by executing the
+ corresponding Python scripts.
+</li>
+<li>
+ Add a new entry to the <code>gl_extensions</code> struct in mtypes.h
+</li>
+<li>
+ Update the <code>extensions.c</code> file.
+</li>
+<li>
+ From this point, the best way to proceed is to find another extension,
+ similar to the new one, that's already implemented in Mesa and use it
+ as an example.
+</li>
+<li>
+ If the new extension adds new GL state, the functions in get.c, enable.c
+ and attrib.c will most likely require new code.
+</li>
+<li>
+ The dispatch tests check_table.cpp and dispatch_sanity.cpp
+ should be updated with details about the new extensions functions. These
+ tests are run using 'make check'
+</li>
+</ul>
+
+
+
+
</div>
</body>
</html>
diff --git a/mesalib/docs/index.html b/mesalib/docs/index.html
index 325e554df..252242495 100644
--- a/mesalib/docs/index.html
+++ b/mesalib/docs/index.html
@@ -16,6 +16,25 @@
<h1>News</h1>
+<h2>June 14, 2015</h2>
+<p>
+<a href="relnotes/10.6.0.html">Mesa 10.6.0</a> is released. This is a new
+development release. See the release notes for more information about
+the release.
+</p>
+
+<h2>June 07, 2015</h2>
+<p>
+<a href="relnotes/10.5.7.html">Mesa 10.5.7</a> is released.
+This is a bug-fix release.
+</p>
+
+<h2>May 23, 2015</h2>
+<p>
+<a href="relnotes/10.5.6.html">Mesa 10.5.6</a> is released.
+This is a bug-fix release.
+</p>
+
<h2>May 11, 2015</h2>
<p>
<a href="relnotes/10.5.5.html">Mesa 10.5.5</a> is released.
diff --git a/mesalib/docs/relnotes.html b/mesalib/docs/relnotes.html
index 6ba9e5904..a037b9684 100644
--- a/mesalib/docs/relnotes.html
+++ b/mesalib/docs/relnotes.html
@@ -21,6 +21,9 @@ The release notes summarize what's new or changed in each Mesa release.
</p>
<ul>
+<li><a href="relnotes/10.6.0.html">10.6.0 release notes</a>
+<li><a href="relnotes/10.5.7.html">10.5.7 release notes</a>
+<li><a href="relnotes/10.5.6.html">10.5.6 release notes</a>
<li><a href="relnotes/10.5.5.html">10.5.5 release notes</a>
<li><a href="relnotes/10.5.4.html">10.5.4 release notes</a>
<li><a href="relnotes/10.5.3.html">10.5.3 release notes</a>
diff --git a/mesalib/docs/relnotes/10.5.6.html b/mesalib/docs/relnotes/10.5.6.html
new file mode 100644
index 000000000..0046b8ff9
--- /dev/null
+++ b/mesalib/docs/relnotes/10.5.6.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 10.5.6 Release Notes / May 23, 2015</h1>
+
+<p>
+Mesa 10.5.6 is a bug fix release which fixes bugs found since the 10.5.5 release.
+</p>
+<p>
+Mesa 10.5.6 implements the OpenGL 3.3 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 3.3. OpenGL
+3.3 is <strong>only</strong> available if requested at context creation
+because compatibility contexts are not supported.
+</p>
+
+
+<h2>SHA256 checksums</h2>
+<pre>
+89ff9cb08d0f6e3f34154864c3071253057cd21020759457c8ae27e0f70985d3 mesa-10.5.6.tar.gz
+66017853bde5f7a6647db3eede30512a091a3491daa1708e0ad8027c328ba595 mesa-10.5.6.tar.xz
+</pre>
+
+
+<h2>New features</h2>
+<p>None</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86792">Bug 86792</a> - [NVC0] Portal 2 Crashes in Wine</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90147">Bug 90147</a> - swrast: build error undeclared _SC_PHYS_PAGES on osx</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90350">Bug 90350</a> - [G96] Portal's portal are incorrectly rendered</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90363">Bug 90363</a> - [nv50] HW state is not reset correctly when using a new GL context</li>
+
+</ul>
+
+
+<h2>Changes</h2>
+
+<p>Alex Deucher (1):</p>
+<ul>
+ <li>radeonsi: add new bonaire pci id</li>
+</ul>
+
+<p>Axel Davy (2):</p>
+<ul>
+ <li>egl/wayland: properly destroy wayland objects</li>
+ <li>glx/dri3: Add additional check for gpu offloading case</li>
+</ul>
+
+<p>Emil Velikov (4):</p>
+<ul>
+ <li>docs: Add sha256 sums for the 10.5.5 release</li>
+ <li>egl/main: fix EGL_KHR_get_all_proc_addresses</li>
+ <li>targets/osmesa: drop the -module tag from LDFLAGS</li>
+ <li>Update version to 10.5.6</li>
+</ul>
+
+<p>Francisco Jerez (4):</p>
+<ul>
+ <li>clover: Refactor event::trigger and ::abort to prevent deadlock and reentrancy issues.</li>
+ <li>clover: Wrap event::_status in a method to prevent unlocked access.</li>
+ <li>clover: Implement locking of the wait_count, _chain and _status members of event.</li>
+ <li>i965: Fix PBO cache coherency issue after _mesa_meta_pbo_GetTexSubImage().</li>
+</ul>
+
+<p>Fredrik Höglund (2):</p>
+<ul>
+ <li>main: Require that the texture exists in framebuffer_texture</li>
+ <li>mesa: Generate GL_INVALID_VALUE in framebuffer_texture when layer &lt; 0</li>
+</ul>
+
+<p>Ilia Mirkin (7):</p>
+<ul>
+ <li>nv50/ir: only propagate saturate up if some actual folding took place</li>
+ <li>nv50: keep track of PGRAPH state in nv50_screen</li>
+ <li>nvc0: keep track of PGRAPH state in nvc0_screen</li>
+ <li>nvc0: reset the instanced elements state when doing blit using 3d engine</li>
+ <li>nv50/ir: only enable mul saturate on G200+</li>
+ <li>st/mesa: make sure to create a "clean" bool when doing i2b</li>
+ <li>nvc0: switch mechanism for shader eviction to be a while loop</li>
+</ul>
+
+<p>Jeremy Huddleston Sequoia (2):</p>
+<ul>
+ <li>swrast: Build fix for darwin</li>
+ <li>darwin: Fix install name of libOSMesa</li>
+</ul>
+
+<p>Laura Ekstrand (2):</p>
+<ul>
+ <li>main: Fix an error generated by FramebufferTexture</li>
+ <li>main: Complete error conditions for glInvalidate*Framebuffer.</li>
+</ul>
+
+<p>Marta Lofstedt (1):</p>
+<ul>
+ <li>main: glGetIntegeri_v fails for GL_VERTEX_BINDING_STRIDE</li>
+</ul>
+
+<p>Rob Clark (2):</p>
+<ul>
+ <li>freedreno: enable a306</li>
+ <li>freedreno: fix bug in tile/slot calculation</li>
+</ul>
+
+<p>Roland Scheidegger (1):</p>
+<ul>
+ <li>draw: (trivial) fix out-of-bounds vector initialization</li>
+</ul>
+
+<p>Tim Rowley (1):</p>
+<ul>
+ <li>mesa: fix shininess check for ffvertex_prog v2</li>
+</ul>
+
+<p>Tom Stellard (2):</p>
+<ul>
+ <li>clover: Add a mutex to guard queue::queued_events</li>
+ <li>clover: Fix a bug with multi-threaded events v2</li>
+</ul>
+
+
+</div>
+</body>
+</html>
diff --git a/mesalib/docs/relnotes/10.5.7.html b/mesalib/docs/relnotes/10.5.7.html
new file mode 100644
index 000000000..68c838549
--- /dev/null
+++ b/mesalib/docs/relnotes/10.5.7.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 10.5.7 Release Notes / June 07, 2015</h1>
+
+<p>
+Mesa 10.5.7 is a bug fix release which fixes bugs found since the 10.5.6 release.
+</p>
+<p>
+Mesa 10.5.7 implements the OpenGL 3.3 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 3.3. OpenGL
+3.3 is <strong>only</strong> available if requested at context creation
+because compatibility contexts are not supported.
+</p>
+
+
+<h2>SHA256 checksums</h2>
+<pre>
+8f865ce497435fdf25d4e35f3b5551b2bcd5f9bc6570561183be82af20d18b82 mesa-10.5.7.tar.gz
+04d06890cd69af8089d6ca76f40e46dcf9cacfe4a9788b32be620574d4638818 mesa-10.5.7.tar.xz
+</pre>
+
+
+<h2>New features</h2>
+<p>None</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89131">Bug 89131</a> - [Bisected] Graphical corruption in Weston, shows old framebuffer pieces</li>
+
+</ul>
+
+
+<h2>Changes</h2>
+
+<p>Ben Widawsky (1):</p>
+<ul>
+ <li>i965: Emit 3DSTATE_MULTISAMPLE before WM_HZ_OP (gen8+)</li>
+</ul>
+
+<p>Emil Velikov (4):</p>
+<ul>
+ <li>docs: Add sha256sums for the 10.5.6 release</li>
+ <li>get-pick-list.sh: Require explicit "10.5" for nominating stable patches</li>
+ <li>cherry-ignore: add clover build fix not applicable for 10.5</li>
+ <li>Update version to 10.5.7</li>
+</ul>
+
+<p>Ilia Mirkin (18):</p>
+<ul>
+ <li>nvc0/ir: set ftz when sources are floats, not just destinations</li>
+ <li>nv50/ir: guess that the constant offset is the starting slot of array</li>
+ <li>nvc0/ir: LOAD's can't be used for shader inputs</li>
+ <li>nvc0: a geometry shader can have up to 1024 vertices output</li>
+ <li>nv50/ir: avoid messing up arg1 of PFETCH</li>
+ <li>nv30: don't leak fragprog consts</li>
+ <li>nv30: avoid leaking render state and draw shaders</li>
+ <li>nv30: fix clip plane uploads and enable changes</li>
+ <li>nv30/draw: avoid leaving stale pointers in draw state</li>
+ <li>nv30/draw: draw expects constbuf size in bytes, not vec4 units</li>
+ <li>st/mesa: don't leak glsl_to_tgsi object on link failure</li>
+ <li>glsl: avoid leaking linked gl_shader when there's a late linker error</li>
+ <li>nv30/draw: fix indexed draws with swtnl path and a resource index buffer</li>
+ <li>nv30/draw: only use the DMA1 object (GART) if the bo is not in VRAM</li>
+ <li>nv30/draw: allocate vertex buffers in gart</li>
+ <li>nv30/draw: switch varying hookup logic to know about texcoords</li>
+ <li>nv30: falling back to draw path for edgeflag does no good</li>
+ <li>nv30: avoid doing extra work on clear and hitting unexpected states</li>
+</ul>
+
+<p>Jason Ekstrand (1):</p>
+<ul>
+ <li>i965/fs: Fix implied_mrf_writes for scratch writes</li>
+</ul>
+
+<p>Marek Olšák (1):</p>
+<ul>
+ <li>st/dri: fix postprocessing crash when there's no depth buffer</li>
+</ul>
+
+
+</div>
+</body>
+</html>
diff --git a/mesalib/docs/relnotes/10.6.0.html b/mesalib/docs/relnotes/10.6.0.html
index 474a2c71f..ebd1f104d 100644
--- a/mesalib/docs/relnotes/10.6.0.html
+++ b/mesalib/docs/relnotes/10.6.0.html
@@ -14,7 +14,7 @@
<iframe src="../contents.html"></iframe>
<div class="content">
-<h1>Mesa 10.6.0 Release Notes / TBD</h1>
+<h1>Mesa 10.6.0 Release Notes / June 14, 2015</h1>
<p>
Mesa 10.6.0 is a new development release.
@@ -31,9 +31,10 @@ because compatibility contexts are not supported.
</p>
-<h2>MD5 checksums</h2>
+<h2>SHA256 checksums</h2>
<pre>
-TBD.
+9bc659abdba26202509304f259723aaa4343dba6aac4bd87d5baea11d23c8c63 mesa-10.6.0.tar.gz
+f37e2633978deed02ff0522abc36c709586e2b555fd439a82ab71dce2c866c76 mesa-10.6.0.tar.xz
</pre>
@@ -71,7 +72,246 @@ Note: some of the new features are only available with certain drivers.
<h2>Bug fixes</h2>
-TBD.
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=15006">Bug 15006</a> - translate &amp; rotate the line cause Aliasing</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=27007">Bug 27007</a> - Lines disappear with GL_LINE_SMOOTH</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=28832">Bug 28832</a> - piglit/general/line-aa-width fail</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=45348">Bug 45348</a> - [swrast] piglit fbo-drawbuffers-arbfp regression</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=60797">Bug 60797</a> - 1px lines in octave plot aliased to 0</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=67564">Bug 67564</a> - HiZ buffers are much larger than necessary</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=69226">Bug 69226</a> - Cannot enable basic shaders with Second Life aborts attempt</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=71591">Bug 71591</a> - Second Life shaders fail to compile (extension declared in middle of shader)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=79202">Bug 79202</a> - valgrind errors in glsl-fs-uniform-array-loop-unroll.shader_test; random code generation</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=81025">Bug 81025</a> - [IVB/BYT Bisected]Piglit spec_ARB_draw_indirect_arb_draw_indirect-draw-elements-prim-restart-ugly fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82477">Bug 82477</a> - [softpipe] piglit fp-long-alu regression</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82668">Bug 82668</a> - Can't set int attributes to certain values on 32-bit</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=82831">Bug 82831</a> - i965: Support GL_ARB_blend_func_extended in SIMD16</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=83962">Bug 83962</a> - [HSW/BYT]Piglit spec_ARB_gpu_shader5_arb_gpu_shader5-emitstreamvertex_nodraw fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84613">Bug 84613</a> - [G965, bisected] piglit regressions : glslparsertest.glsl2</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86747">Bug 86747</a> - Noise in Football Manager 2014 textures</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86792">Bug 86792</a> - [NVC0] Portal 2 Crashes in Wine</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86811">Bug 86811</a> - [BDW/BSW Bisected]Piglit spec_arb_shading_language_packing_execution_built-in-functions_vs-unpackSnorm4x8 fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86837">Bug 86837</a> - kodi segfault since auxiliary/vl: rework the build of the VL code</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86944">Bug 86944</a> - glsl_parser_extras.cpp&quot;, line 1455: Error: Badly formed expression. (Oracle Studio)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86974">Bug 86974</a> - INTEL_DEBUG=shader_time always asserts in fs_generator::generate_code() when Mesa is built with --enable-debug (= with asserts)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=86980">Bug 86980</a> - [swrast] piglit fp-rfl regression</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=87258">Bug 87258</a> - [BDW/BSW Bisected]Piglit spec_ARB_shader_atomic_counters_array-indexing fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88246">Bug 88246</a> - Commit 2881b12 causes 43 DrawElements test regressions</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88248">Bug 88248</a> - Calling glClear while there is an occlusion query in progress messes up the results</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88521">Bug 88521</a> - GLBenchmark 2.7 TRex renders with artifacts on Gen8 with !UXA</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88534">Bug 88534</a> - include/c11/threads_posix.h PTHREAD_MUTEX_RECURSIVE_NP not defined</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88561">Bug 88561</a> - [radeonsi][regression,bisected] Depth test/buffer issues in Portal</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88793">Bug 88793</a> - [BDW/BSW Bisected]Piglit/shaders_glsl-max-varyings fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88815">Bug 88815</a> - Incorrect handling of GLSL #line directive</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88883">Bug 88883</a> - ir-a2xx.c: variable changed in assert statement</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88885">Bug 88885</a> - Transform feedback uses incorrect interleaving if a previous draw did not write gl_Position</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88905">Bug 88905</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.gtf.GL3Tests.packed_pixels.packed_pixels fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=88999">Bug 88999</a> - [SKL] Compiz crashes after opening unity dash</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89014">Bug 89014</a> - PIPE_QUERY_GPU_FINISHED is not acting as expected on SI</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89026">Bug 89026</a> - Renderbuffer layered state used for framebuffer completeness test</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89032">Bug 89032</a> - [BDW/BSW/SKL Bisected]Piglit spec_OpenGL_1.1_infinite-spot-light fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89037">Bug 89037</a> - [SKL]Piglit spec_EXT_texture_array_copyteximage_1D_ARRAY_samples=2 sporadically causes GPU hang</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89039">Bug 89039</a> - [SKL]etqw system hang</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89058">Bug 89058</a> - [SKL]Render error in some games (etqw-demo, nexuiz, portal)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89068">Bug 89068</a> - glTexImage2D regression by texstore_rgba switch to _mesa_format_convert</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89069">Bug 89069</a> - Lack of grass in The Talos Principle on radeonsi (native\wine\nine)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89094">Bug 89094</a> - [SNB/IVB/HSW/BYT Bisected]Ogles3conform ES3-CTS.gtf.GL3Tests.shadow.shadow_execution_vert fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89095">Bug 89095</a> - [SNB/IVB/BYT Bisected]Webglc conformance/glsl/functions/glsl-function-mix-float.html fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89112">Bug 89112</a> - u_atomic_test: u_atomic_test.c:124: test_atomic_8bits_bool: Assertion `r == 65 &amp;&amp; &quot;p_atomic_add&quot;' failed.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89118">Bug 89118</a> - [SKL Bisected]many Ogles3conform cases core dumped</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89131">Bug 89131</a> - [Bisected] Graphical corruption in Weston, shows old framebuffer pieces</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89156">Bug 89156</a> - r300g: GL_COMPRESSED_RED_RGTC1 / ATI1N support broken</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89180">Bug 89180</a> - [IVB regression] Rendering issues in Mass Effect through VMware Workstation</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89210">Bug 89210</a> - GS statistics fail on SNB</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89218">Bug 89218</a> - lower_instructions.cpp:648:48: error: invalid suffix 'd' on floating constant</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89224">Bug 89224</a> - Incorrect rendering of Unigine Valley running in VM on VMware Workstation</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89260">Bug 89260</a> - macros.h:34:25: fatal error: util/u_math.h: No such file or directory</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89292">Bug 89292</a> - [regression,bisected] incomplete screenshots in some cases</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89311">Bug 89311</a> - [regression, bisected] dEQP: Added entry points for glCompressedTextureSubImage*D.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89312">Bug 89312</a> - [regression, bisected] main: Added entry points for CopyTextureSubImage*D. (d6b7c40cecfe01)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89315">Bug 89315</a> - [HSW, regression, bisected] i965/fs: Emit MAD instructions when possible.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89317">Bug 89317</a> - [HSW, regression, bisected] i965: Add LINTERP/CINTERP to can_do_cmod() (d91390634)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89328">Bug 89328</a> - python required to build Mesa release tarballs</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89342">Bug 89342</a> - main/light.c:159:62: error: 'M_PI' undeclared (first use in this function)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89343">Bug 89343</a> - compiler/tests/radeon_compiler_optimize_tests.c:43:3: error: implicit declaration of function ‘fprintf’ [-Werror=implicit-function-declaration]</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89345">Bug 89345</a> - imports.h:452:58: error: expected declaration specifiers or '...' before 'va_list'</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89364">Bug 89364</a> - c99_alloca.h:40:22: fatal error: alloca.h: No such file or directory</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89372">Bug 89372</a> - [softpipe] piglit glsl-1.50 generate-zero-primitives regression</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89387">Bug 89387</a> - Double delete in lp_bld_misc.cpp</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89416">Bug 89416</a> - UE4Editor crash after load project</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89430">Bug 89430</a> - [g965][bisected] arb_copy_image-targets gl_texture* tests fail</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89433">Bug 89433</a> - GCC 4.2 does not support -Wvla</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89455">Bug 89455</a> - [NVC0/Gallium] Unigine Heaven black and white boxes</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89457">Bug 89457</a> - [BSW Bisected]ogles3conform ES3-CTS.gtf.GL3Tests.shadow.shadow_execution_vert fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89477">Bug 89477</a> - include/no_extern_c.h:47:1: error: template with C linkage</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89508">Bug 89508</a> - Bad int(floatBitsToInt(vec4))</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89530">Bug 89530</a> - FTBFS in loader: missing fstat</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89569">Bug 89569</a> - Papo &amp; Yo crash on startup [HSW]</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89590">Bug 89590</a> - Crash in glLinkProgram with shaders with multiple constant arrays</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89662">Bug 89662</a> - context.c:943: undefined reference to `_glapi_new_nop_table'</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89670">Bug 89670</a> - cmod_propagation_test.andnz_one regression</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89679">Bug 89679</a> - [NV50] Portal/Half-Life 2 will not start (native Steam)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89689">Bug 89689</a> - [Regression] Weston on DRM backend won't start with new version of mesa</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89722">Bug 89722</a> - [ILK Bisected]Ogles2conform/ES2-CTS.gtf.GL.equal.equal_vec2_frag fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89726">Bug 89726</a> - [Bisected] dEQP-GLES3: uniform linking logic in the presence of structs</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89746">Bug 89746</a> - Mesa and LLVM 3.6+ break opengl for genymotion</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89754">Bug 89754</a> - vertexAttrib fails WebGL Conformance test with mesa drivers</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89758">Bug 89758</a> - pow WebGL Conformance test with mesa drivers</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89759">Bug 89759</a> - WebGL OGL ES GLSL conformance test with mesa drivers fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89831">Bug 89831</a> - [r600] r600_asm.c:310:assign_alu_units: Assertion `0' failed.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89899">Bug 89899</a> - nir/nir_lower_tex_projector.c:112: error: unknown field ‘ssa’ specified in initializer</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89957">Bug 89957</a> - vm protection faults in piglit lest: texsubimage cube_map_array pbo</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89960">Bug 89960</a> - [softpipe] piglit copy-pixels regreession</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89961">Bug 89961</a> - [BDW/BSW Bisected]Synmark2_v6 OglDrvRes/OglDrvShComp/OglDrvState/OglPSPom Image Validation fail</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=89963">Bug 89963</a> - lp_bld_debug.cpp:100:31: error: no matching function for call to ‘llvm::raw_ostream::raw_ostream()’</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90000">Bug 90000</a> - [i965 Bisected NIR] Piglit/gglean_fragprog1-z-write_test fail</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90109">Bug 90109</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.shaders.uniform_block.random.basic_arrays.3 fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90114">Bug 90114</a> - [SNB+ Bisected]Ogles3conform ES3-CTS.shaders.struct.uniform.sampler_array_fragment fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90130">Bug 90130</a> - gl_PrimitiveId seems to reset at 340</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90147">Bug 90147</a> - swrast: build error undeclared _SC_PHYS_PAGES on osx</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90149">Bug 90149</a> - [SNB+ Bisected]ES3-CTS.gtf.GL3Tests.uniform_buffer_object.uniform_buffer_object_getactiveuniformsiv_for_nonexistent_uniform_indices fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90153">Bug 90153</a> - [SKL Bisected]ES3-CTS.gtf.GL3Tests.uniform_buffer_object.uniform_buffer_object_all_valid_basic_types fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90167">Bug 90167</a> - [softpipe] piglit depthstencil-default_fb-drawpixels-32f_24_8_rev regression</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90207">Bug 90207</a> - [r600g, bisected] regression: NI/Turks crash on WebGL Water (most WebGL stuff)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90213">Bug 90213</a> - glDrawPixels with GL_COLOR_INDEX never returns.</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90243">Bug 90243</a> - [bisected] regression: spec.!opengl 3_2.get-active-attrib-returns-all-inputs</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90258">Bug 90258</a> - [IVB] spec.glsl-1_10.execution.fs-dfdy-accuracy fails intermittently</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90310">Bug 90310</a> - Fails to build gallium_dri.so at linking stage with clang because of multiple redefinitions</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90350">Bug 90350</a> - [G96] Portal's portal are incorrectly rendered</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90363">Bug 90363</a> - [nv50] HW state is not reset correctly when using a new GL context</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90397">Bug 90397</a> - ARB_program_interface_query: glGetProgramResourceiv() returns wrong value for GL_REFERENCED_BY_*_SHADER prop for GL_UNIFORM for members of an interface block with an instance name</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90466">Bug 90466</a> - arm: linker error ndefined reference to `nir_metadata_preserve'</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90520">Bug 90520</a> - Register spilling clobbers registers used elsewhere in the shader</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90547">Bug 90547</a> - [BDW/BSW/SKL Bisected]Piglit/glean&#64;vertprog1-rsq_test_2_(reciprocal_square_root_of_negative_value) fais</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90580">Bug 90580</a> - [HSW bisected] integer multiplication bug</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90629">Bug 90629</a> - [i965] SIMD16 dual_source_blend assertion `src[i].file != GRF || src[i].width == dst.width' failed</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90749">Bug 90749</a> - [BDW Bisected]dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.primitives.lines_wide fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90830">Bug 90830</a> - [bsw bisected regression] GPU hang for spec.arb_gpu_shader5.execution.sampler_array_indexing.vs-nonzero-base</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90839">Bug 90839</a> - [10.5.5/10.6 regression, bisected] PBO glDrawPixels no longer using blit fastpath</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=90905">Bug 90905</a> - mesa: Finish subdir-objects transition</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=9951">Bug 9951</a> - GL_LINE_SMOOTH and GL_POLYGON_SMOOTH with i965 driver</li>
+
+</ul>
+
<h2>Changes</h2>
diff --git a/mesalib/docs/relnotes/10.7.0.html b/mesalib/docs/relnotes/10.7.0.html
new file mode 100644
index 000000000..7518389ba
--- /dev/null
+++ b/mesalib/docs/relnotes/10.7.0.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8">
+ <title>Mesa Release Notes</title>
+ <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+ <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 10.7.0 Release Notes / TBD</h1>
+
+<p>
+Mesa 10.7.0 is a new development release.
+People who are concerned with stability and reliability should stick
+with a previous release or wait for Mesa 10.7.1.
+</p>
+<p>
+Mesa 10.7.0 implements the OpenGL 3.3 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 3.3. OpenGL
+3.3 is <strong>only</strong> available if requested at context creation
+because compatibility contexts are not supported.
+</p>
+
+
+<h2>SHA256 checksums</h2>
+<pre>
+TBD.
+</pre>
+
+
+<h2>New features</h2>
+
+<p>
+Note: some of the new features are only available with certain drivers.
+</p>
+
+<ul>
+<li>GL_ARB_shader_stencil_export on llvmpipe</li>
+</ul>
+
+<h2>Bug fixes</h2>
+
+TBD.
+
+<h2>Changes</h2>
+
+TBD.
+
+</div>
+</body>
+</html>
diff --git a/mesalib/include/EGL/egl.h b/mesalib/include/EGL/egl.h
index 99ea342a4..0d514e4de 100644
--- a/mesalib/include/EGL/egl.h
+++ b/mesalib/include/EGL/egl.h
@@ -1,11 +1,12 @@
-/* -*- mode: c; tab-width: 8; -*- */
-/* vi: set sw=4 ts=8: */
-/* Reference version of egl.h for EGL 1.4.
- * $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
- */
+#ifndef __egl_h_
+#define __egl_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
-** Copyright (c) 2007-2009 The Khronos Group Inc.
+** Copyright (c) 2013-2014 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
@@ -26,304 +27,277 @@
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** http://www.opengl.org/registry/
+**
+** Khronos $Revision: 31039 $ on $Date: 2015-05-04 17:01:57 -0700 (Mon, 04 May 2015) $
+*/
-#ifndef __egl_h_
-#define __egl_h_
-
-/* All platform-dependent types and macro boilerplate (such as EGLAPI
- * and EGLAPIENTRY) should go in eglplatform.h.
- */
#include <EGL/eglplatform.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+/* Generated on date 20150504 */
+
+/* Generated C header for:
+ * API: egl
+ * Versions considered: .*
+ * Versions emitted: .*
+ * Default extensions included: None
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
-/* EGL Types */
-/* EGLint is defined in eglplatform.h */
+#ifndef EGL_VERSION_1_0
+#define EGL_VERSION_1_0 1
typedef unsigned int EGLBoolean;
-typedef unsigned int EGLenum;
-typedef void *EGLConfig;
-typedef void *EGLContext;
typedef void *EGLDisplay;
+#include <KHR/khrplatform.h>
+#include <EGL/eglplatform.h>
+typedef void *EGLConfig;
typedef void *EGLSurface;
-typedef void *EGLClientBuffer;
-
-/* EGL Versioning */
-#define EGL_VERSION_1_0 1
-#define EGL_VERSION_1_1 1
-#define EGL_VERSION_1_2 1
-#define EGL_VERSION_1_3 1
-#define EGL_VERSION_1_4 1
-
-/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
- * enums are assigned unique values starting at 0x3000.
- */
-
-/* EGL aliases */
-#define EGL_FALSE 0
-#define EGL_TRUE 1
-
-/* Out-of-band handle values */
-#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
-#define EGL_NO_CONTEXT ((EGLContext)0)
-#define EGL_NO_DISPLAY ((EGLDisplay)0)
-#define EGL_NO_SURFACE ((EGLSurface)0)
-
-/* Out-of-band attribute value */
-#define EGL_DONT_CARE ((EGLint)-1)
-
-/* Errors / GetError return values */
-#define EGL_SUCCESS 0x3000
-#define EGL_NOT_INITIALIZED 0x3001
-#define EGL_BAD_ACCESS 0x3002
-#define EGL_BAD_ALLOC 0x3003
-#define EGL_BAD_ATTRIBUTE 0x3004
-#define EGL_BAD_CONFIG 0x3005
-#define EGL_BAD_CONTEXT 0x3006
-#define EGL_BAD_CURRENT_SURFACE 0x3007
-#define EGL_BAD_DISPLAY 0x3008
-#define EGL_BAD_MATCH 0x3009
-#define EGL_BAD_NATIVE_PIXMAP 0x300A
-#define EGL_BAD_NATIVE_WINDOW 0x300B
-#define EGL_BAD_PARAMETER 0x300C
-#define EGL_BAD_SURFACE 0x300D
-#define EGL_CONTEXT_LOST 0x300E /* EGL 1.1 - IMG_power_management */
-
-/* Reserved 0x300F-0x301F for additional errors */
-
-/* Config attributes */
-#define EGL_BUFFER_SIZE 0x3020
-#define EGL_ALPHA_SIZE 0x3021
-#define EGL_BLUE_SIZE 0x3022
-#define EGL_GREEN_SIZE 0x3023
-#define EGL_RED_SIZE 0x3024
-#define EGL_DEPTH_SIZE 0x3025
-#define EGL_STENCIL_SIZE 0x3026
-#define EGL_CONFIG_CAVEAT 0x3027
-#define EGL_CONFIG_ID 0x3028
-#define EGL_LEVEL 0x3029
-#define EGL_MAX_PBUFFER_HEIGHT 0x302A
-#define EGL_MAX_PBUFFER_PIXELS 0x302B
-#define EGL_MAX_PBUFFER_WIDTH 0x302C
-#define EGL_NATIVE_RENDERABLE 0x302D
-#define EGL_NATIVE_VISUAL_ID 0x302E
-#define EGL_NATIVE_VISUAL_TYPE 0x302F
-#define EGL_SAMPLES 0x3031
-#define EGL_SAMPLE_BUFFERS 0x3032
-#define EGL_SURFACE_TYPE 0x3033
-#define EGL_TRANSPARENT_TYPE 0x3034
-#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
-#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
-#define EGL_TRANSPARENT_RED_VALUE 0x3037
-#define EGL_NONE 0x3038 /* Attrib list terminator */
-#define EGL_BIND_TO_TEXTURE_RGB 0x3039
-#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
-#define EGL_MIN_SWAP_INTERVAL 0x303B
-#define EGL_MAX_SWAP_INTERVAL 0x303C
-#define EGL_LUMINANCE_SIZE 0x303D
-#define EGL_ALPHA_MASK_SIZE 0x303E
-#define EGL_COLOR_BUFFER_TYPE 0x303F
-#define EGL_RENDERABLE_TYPE 0x3040
-#define EGL_MATCH_NATIVE_PIXMAP 0x3041 /* Pseudo-attribute (not queryable) */
-#define EGL_CONFORMANT 0x3042
-
-/* Reserved 0x3041-0x304F for additional config attributes */
-
-/* Config attribute values */
-#define EGL_SLOW_CONFIG 0x3050 /* EGL_CONFIG_CAVEAT value */
-#define EGL_NON_CONFORMANT_CONFIG 0x3051 /* EGL_CONFIG_CAVEAT value */
-#define EGL_TRANSPARENT_RGB 0x3052 /* EGL_TRANSPARENT_TYPE value */
-#define EGL_RGB_BUFFER 0x308E /* EGL_COLOR_BUFFER_TYPE value */
-#define EGL_LUMINANCE_BUFFER 0x308F /* EGL_COLOR_BUFFER_TYPE value */
-
-/* More config attribute values, for EGL_TEXTURE_FORMAT */
-#define EGL_NO_TEXTURE 0x305C
-#define EGL_TEXTURE_RGB 0x305D
-#define EGL_TEXTURE_RGBA 0x305E
-#define EGL_TEXTURE_2D 0x305F
-
-/* Config attribute mask bits */
-#define EGL_PBUFFER_BIT 0x0001 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_PIXMAP_BIT 0x0002 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_WINDOW_BIT 0x0004 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */
-#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */
-
-#define EGL_OPENGL_ES_BIT 0x0001 /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENVG_BIT 0x0002 /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENGL_ES2_BIT 0x0004 /* EGL_RENDERABLE_TYPE mask bits */
-#define EGL_OPENGL_BIT 0x0008 /* EGL_RENDERABLE_TYPE mask bits */
-
-/* QueryString targets */
-#define EGL_VENDOR 0x3053
-#define EGL_VERSION 0x3054
-#define EGL_EXTENSIONS 0x3055
-#define EGL_CLIENT_APIS 0x308D
-
-/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
-#define EGL_HEIGHT 0x3056
-#define EGL_WIDTH 0x3057
-#define EGL_LARGEST_PBUFFER 0x3058
-#define EGL_TEXTURE_FORMAT 0x3080
-#define EGL_TEXTURE_TARGET 0x3081
-#define EGL_MIPMAP_TEXTURE 0x3082
-#define EGL_MIPMAP_LEVEL 0x3083
-#define EGL_RENDER_BUFFER 0x3086
-#define EGL_VG_COLORSPACE 0x3087
-#define EGL_VG_ALPHA_FORMAT 0x3088
-#define EGL_HORIZONTAL_RESOLUTION 0x3090
-#define EGL_VERTICAL_RESOLUTION 0x3091
-#define EGL_PIXEL_ASPECT_RATIO 0x3092
-#define EGL_SWAP_BEHAVIOR 0x3093
-#define EGL_MULTISAMPLE_RESOLVE 0x3099
-
-/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
-#define EGL_BACK_BUFFER 0x3084
-#define EGL_SINGLE_BUFFER 0x3085
-
-/* OpenVG color spaces */
-#define EGL_VG_COLORSPACE_sRGB 0x3089 /* EGL_VG_COLORSPACE value */
-#define EGL_VG_COLORSPACE_LINEAR 0x308A /* EGL_VG_COLORSPACE value */
-
-/* OpenVG alpha formats */
-#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B /* EGL_ALPHA_FORMAT value */
-#define EGL_VG_ALPHA_FORMAT_PRE 0x308C /* EGL_ALPHA_FORMAT value */
-
-/* Constant scale factor by which fractional display resolutions &
- * aspect ratio are scaled when queried as integer values.
- */
-#define EGL_DISPLAY_SCALING 10000
-
-/* Unknown display resolution/aspect ratio */
-#define EGL_UNKNOWN ((EGLint)-1)
-
-/* Back buffer swap behaviors */
-#define EGL_BUFFER_PRESERVED 0x3094 /* EGL_SWAP_BEHAVIOR value */
-#define EGL_BUFFER_DESTROYED 0x3095 /* EGL_SWAP_BEHAVIOR value */
-
-/* CreatePbufferFromClientBuffer buffer types */
-#define EGL_OPENVG_IMAGE 0x3096
-
-/* QueryContext targets */
-#define EGL_CONTEXT_CLIENT_TYPE 0x3097
-
-/* CreateContext attributes */
-#define EGL_CONTEXT_CLIENT_VERSION 0x3098
-
-/* Multisample resolution behaviors */
-#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */
-#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B /* EGL_MULTISAMPLE_RESOLVE value */
-
-/* BindAPI/QueryAPI targets */
-#define EGL_OPENGL_ES_API 0x30A0
-#define EGL_OPENVG_API 0x30A1
-#define EGL_OPENGL_API 0x30A2
-
-/* GetCurrentSurface targets */
-#define EGL_DRAW 0x3059
-#define EGL_READ 0x305A
-
-/* WaitNative engines */
-#define EGL_CORE_NATIVE_ENGINE 0x305B
-
-/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
-#define EGL_COLORSPACE EGL_VG_COLORSPACE
-#define EGL_ALPHA_FORMAT EGL_VG_ALPHA_FORMAT
-#define EGL_COLORSPACE_sRGB EGL_VG_COLORSPACE_sRGB
-#define EGL_COLORSPACE_LINEAR EGL_VG_COLORSPACE_LINEAR
-#define EGL_ALPHA_FORMAT_NONPRE EGL_VG_ALPHA_FORMAT_NONPRE
-#define EGL_ALPHA_FORMAT_PRE EGL_VG_ALPHA_FORMAT_PRE
-
-/* EGL extensions must request enum blocks from the Khronos
- * API Registrar, who maintains the enumerant registry. Submit
- * a bug in Khronos Bugzilla against task "Registry".
- */
-
-
-
-/* EGL Functions */
-
-EGLAPI EGLint EGLAPIENTRY eglGetError(void);
-
-EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
-EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
-EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);
-
-EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
- EGLint config_size, EGLint *num_config);
-EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
- EGLConfig *configs, EGLint config_size,
- EGLint *num_config);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
- EGLint attribute, EGLint *value);
-
-EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
- EGLNativeWindowType win,
- const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
- const EGLint *attrib_list);
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
- EGLNativePixmapType pixmap,
- const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
-EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
- EGLint attribute, EGLint *value);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
-EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);
-
-EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
- EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
- EGLConfig config, const EGLint *attrib_list);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
- EGLint attribute, EGLint value);
-EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-
-
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);
-
-
-EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
- EGLContext share_context,
- const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
-EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
- EGLSurface read, EGLContext ctx);
-
-EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
-EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
-EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
-EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
- EGLint attribute, EGLint *value);
-
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
-EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
-EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
- EGLNativePixmapType target);
-
-/* This is a generic function pointer type, whose name indicates it must
- * be cast to the proper type *and calling convention* before use.
- */
+typedef void *EGLContext;
typedef void (*__eglMustCastToProperFunctionPointerType)(void);
-
-/* Now, define eglGetProcAddress using the generic function ptr. type */
-EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY
- eglGetProcAddress(const char *procname);
+#define EGL_ALPHA_SIZE 0x3021
+#define EGL_BAD_ACCESS 0x3002
+#define EGL_BAD_ALLOC 0x3003
+#define EGL_BAD_ATTRIBUTE 0x3004
+#define EGL_BAD_CONFIG 0x3005
+#define EGL_BAD_CONTEXT 0x3006
+#define EGL_BAD_CURRENT_SURFACE 0x3007
+#define EGL_BAD_DISPLAY 0x3008
+#define EGL_BAD_MATCH 0x3009
+#define EGL_BAD_NATIVE_PIXMAP 0x300A
+#define EGL_BAD_NATIVE_WINDOW 0x300B
+#define EGL_BAD_PARAMETER 0x300C
+#define EGL_BAD_SURFACE 0x300D
+#define EGL_BLUE_SIZE 0x3022
+#define EGL_BUFFER_SIZE 0x3020
+#define EGL_CONFIG_CAVEAT 0x3027
+#define EGL_CONFIG_ID 0x3028
+#define EGL_CORE_NATIVE_ENGINE 0x305B
+#define EGL_DEPTH_SIZE 0x3025
+#define EGL_DONT_CARE ((EGLint)-1)
+#define EGL_DRAW 0x3059
+#define EGL_EXTENSIONS 0x3055
+#define EGL_FALSE 0
+#define EGL_GREEN_SIZE 0x3023
+#define EGL_HEIGHT 0x3056
+#define EGL_LARGEST_PBUFFER 0x3058
+#define EGL_LEVEL 0x3029
+#define EGL_MAX_PBUFFER_HEIGHT 0x302A
+#define EGL_MAX_PBUFFER_PIXELS 0x302B
+#define EGL_MAX_PBUFFER_WIDTH 0x302C
+#define EGL_NATIVE_RENDERABLE 0x302D
+#define EGL_NATIVE_VISUAL_ID 0x302E
+#define EGL_NATIVE_VISUAL_TYPE 0x302F
+#define EGL_NONE 0x3038
+#define EGL_NON_CONFORMANT_CONFIG 0x3051
+#define EGL_NOT_INITIALIZED 0x3001
+#define EGL_NO_CONTEXT ((EGLContext)0)
+#define EGL_NO_DISPLAY ((EGLDisplay)0)
+#define EGL_NO_SURFACE ((EGLSurface)0)
+#define EGL_PBUFFER_BIT 0x0001
+#define EGL_PIXMAP_BIT 0x0002
+#define EGL_READ 0x305A
+#define EGL_RED_SIZE 0x3024
+#define EGL_SAMPLES 0x3031
+#define EGL_SAMPLE_BUFFERS 0x3032
+#define EGL_SLOW_CONFIG 0x3050
+#define EGL_STENCIL_SIZE 0x3026
+#define EGL_SUCCESS 0x3000
+#define EGL_SURFACE_TYPE 0x3033
+#define EGL_TRANSPARENT_BLUE_VALUE 0x3035
+#define EGL_TRANSPARENT_GREEN_VALUE 0x3036
+#define EGL_TRANSPARENT_RED_VALUE 0x3037
+#define EGL_TRANSPARENT_RGB 0x3052
+#define EGL_TRANSPARENT_TYPE 0x3034
+#define EGL_TRUE 1
+#define EGL_VENDOR 0x3053
+#define EGL_VERSION 0x3054
+#define EGL_WIDTH 0x3057
+#define EGL_WINDOW_BIT 0x0004
+EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void);
+EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id);
+EGLAPI EGLint EGLAPIENTRY eglGetError (void);
+EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname);
+EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor);
+EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
+EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface);
+EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine);
+#endif /* EGL_VERSION_1_0 */
+
+#ifndef EGL_VERSION_1_1
+#define EGL_VERSION_1_1 1
+#define EGL_BACK_BUFFER 0x3084
+#define EGL_BIND_TO_TEXTURE_RGB 0x3039
+#define EGL_BIND_TO_TEXTURE_RGBA 0x303A
+#define EGL_CONTEXT_LOST 0x300E
+#define EGL_MIN_SWAP_INTERVAL 0x303B
+#define EGL_MAX_SWAP_INTERVAL 0x303C
+#define EGL_MIPMAP_TEXTURE 0x3082
+#define EGL_MIPMAP_LEVEL 0x3083
+#define EGL_NO_TEXTURE 0x305C
+#define EGL_TEXTURE_2D 0x305F
+#define EGL_TEXTURE_FORMAT 0x3080
+#define EGL_TEXTURE_RGB 0x305D
+#define EGL_TEXTURE_RGBA 0x305E
+#define EGL_TEXTURE_TARGET 0x3081
+EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval);
+#endif /* EGL_VERSION_1_1 */
+
+#ifndef EGL_VERSION_1_2
+#define EGL_VERSION_1_2 1
+typedef unsigned int EGLenum;
+typedef void *EGLClientBuffer;
+#define EGL_ALPHA_FORMAT 0x3088
+#define EGL_ALPHA_FORMAT_NONPRE 0x308B
+#define EGL_ALPHA_FORMAT_PRE 0x308C
+#define EGL_ALPHA_MASK_SIZE 0x303E
+#define EGL_BUFFER_PRESERVED 0x3094
+#define EGL_BUFFER_DESTROYED 0x3095
+#define EGL_CLIENT_APIS 0x308D
+#define EGL_COLORSPACE 0x3087
+#define EGL_COLORSPACE_sRGB 0x3089
+#define EGL_COLORSPACE_LINEAR 0x308A
+#define EGL_COLOR_BUFFER_TYPE 0x303F
+#define EGL_CONTEXT_CLIENT_TYPE 0x3097
+#define EGL_DISPLAY_SCALING 10000
+#define EGL_HORIZONTAL_RESOLUTION 0x3090
+#define EGL_LUMINANCE_BUFFER 0x308F
+#define EGL_LUMINANCE_SIZE 0x303D
+#define EGL_OPENGL_ES_BIT 0x0001
+#define EGL_OPENVG_BIT 0x0002
+#define EGL_OPENGL_ES_API 0x30A0
+#define EGL_OPENVG_API 0x30A1
+#define EGL_OPENVG_IMAGE 0x3096
+#define EGL_PIXEL_ASPECT_RATIO 0x3092
+#define EGL_RENDERABLE_TYPE 0x3040
+#define EGL_RENDER_BUFFER 0x3086
+#define EGL_RGB_BUFFER 0x308E
+#define EGL_SINGLE_BUFFER 0x3085
+#define EGL_SWAP_BEHAVIOR 0x3093
+#define EGL_UNKNOWN ((EGLint)-1)
+#define EGL_VERTICAL_RESOLUTION 0x3091
+EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api);
+EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void);
+#endif /* EGL_VERSION_1_2 */
+
+#ifndef EGL_VERSION_1_3
+#define EGL_VERSION_1_3 1
+#define EGL_CONFORMANT 0x3042
+#define EGL_CONTEXT_CLIENT_VERSION 0x3098
+#define EGL_MATCH_NATIVE_PIXMAP 0x3041
+#define EGL_OPENGL_ES2_BIT 0x0004
+#define EGL_VG_ALPHA_FORMAT 0x3088
+#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
+#define EGL_VG_ALPHA_FORMAT_PRE 0x308C
+#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
+#define EGL_VG_COLORSPACE 0x3087
+#define EGL_VG_COLORSPACE_sRGB 0x3089
+#define EGL_VG_COLORSPACE_LINEAR 0x308A
+#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
+#endif /* EGL_VERSION_1_3 */
+
+#ifndef EGL_VERSION_1_4
+#define EGL_VERSION_1_4 1
+#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
+#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
+#define EGL_MULTISAMPLE_RESOLVE 0x3099
+#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
+#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
+#define EGL_OPENGL_API 0x30A2
+#define EGL_OPENGL_BIT 0x0008
+#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
+EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void);
+#endif /* EGL_VERSION_1_4 */
+
+#ifndef EGL_VERSION_1_5
+#define EGL_VERSION_1_5 1
+typedef void *EGLSync;
+typedef intptr_t EGLAttrib;
+typedef khronos_utime_nanoseconds_t EGLTime;
+typedef void *EGLImage;
+#define EGL_CONTEXT_MAJOR_VERSION 0x3098
+#define EGL_CONTEXT_MINOR_VERSION 0x30FB
+#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
+#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
+#define EGL_NO_RESET_NOTIFICATION 0x31BE
+#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF
+#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
+#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0
+#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
+#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
+#define EGL_OPENGL_ES3_BIT 0x00000040
+#define EGL_CL_EVENT_HANDLE 0x309C
+#define EGL_SYNC_CL_EVENT 0x30FE
+#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
+#define EGL_SYNC_TYPE 0x30F7
+#define EGL_SYNC_STATUS 0x30F1
+#define EGL_SYNC_CONDITION 0x30F8
+#define EGL_SIGNALED 0x30F2
+#define EGL_UNSIGNALED 0x30F3
+#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
+#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
+#define EGL_TIMEOUT_EXPIRED 0x30F5
+#define EGL_CONDITION_SATISFIED 0x30F6
+#define EGL_NO_SYNC ((EGLSync)0)
+#define EGL_SYNC_FENCE 0x30F9
+#define EGL_GL_COLORSPACE 0x309D
+#define EGL_GL_COLORSPACE_SRGB 0x3089
+#define EGL_GL_COLORSPACE_LINEAR 0x308A
+#define EGL_GL_RENDERBUFFER 0x30B9
+#define EGL_GL_TEXTURE_2D 0x30B1
+#define EGL_GL_TEXTURE_LEVEL 0x30BC
+#define EGL_GL_TEXTURE_3D 0x30B2
+#define EGL_GL_TEXTURE_ZOFFSET 0x30BD
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
+#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
+#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
+#define EGL_IMAGE_PRESERVED 0x30D2
+#define EGL_NO_IMAGE ((EGLImage)0)
+EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value);
+EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image);
+EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
+EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags);
+#endif /* EGL_VERSION_1_5 */
#ifdef __cplusplus
}
#endif
-#endif /* __egl_h_ */
+#endif
diff --git a/mesalib/include/EGL/eglext.h b/mesalib/include/EGL/eglext.h
index 88b39dbc4..6043b374f 100644
--- a/mesalib/include/EGL/eglext.h
+++ b/mesalib/include/EGL/eglext.h
@@ -6,7 +6,7 @@ extern "C" {
#endif
/*
-** Copyright (c) 2013 The Khronos Group Inc.
+** Copyright (c) 2013-2014 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
@@ -33,12 +33,12 @@ extern "C" {
** used to make the header, and the header can be found at
** http://www.opengl.org/registry/
**
-** Khronos $Revision: 24567 $ on $Date: 2013-12-18 09:50:17 -0800 (Wed, 18 Dec 2013) $
+** Khronos $Revision$ on $Date$
*/
#include <EGL/eglplatform.h>
-#define EGL_EGLEXT_VERSION 20131218
+#define EGL_EGLEXT_VERSION 20150508
/* Generated C header for:
* API: egl
@@ -94,12 +94,28 @@ EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type,
#define EGL_OPENGL_ES3_BIT_KHR 0x00000040
#endif /* EGL_KHR_create_context */
+#ifndef EGL_KHR_create_context_no_error
+#define EGL_KHR_create_context_no_error 1
+#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3
+#endif /* EGL_KHR_create_context_no_error */
+
#ifndef EGL_KHR_fence_sync
#define EGL_KHR_fence_sync 1
+typedef khronos_utime_nanoseconds_t EGLTimeKHR;
#ifdef KHRONOS_SUPPORT_INT64
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
#define EGL_SYNC_CONDITION_KHR 0x30F8
#define EGL_SYNC_FENCE_KHR 0x30F9
+typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
+typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
+EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+#endif
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_KHR_fence_sync */
@@ -207,9 +223,38 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface s
#endif
#endif /* EGL_KHR_lock_surface3 */
+#ifndef EGL_KHR_partial_update
+#define EGL_KHR_partial_update 1
+#define EGL_BUFFER_AGE_KHR 0x313D
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_KHR_partial_update */
+
+#ifndef EGL_KHR_platform_android
+#define EGL_KHR_platform_android 1
+#define EGL_PLATFORM_ANDROID_KHR 0x3141
+#endif /* EGL_KHR_platform_android */
+
+#ifndef EGL_KHR_platform_gbm
+#define EGL_KHR_platform_gbm 1
+#define EGL_PLATFORM_GBM_KHR 0x31D7
+#endif /* EGL_KHR_platform_gbm */
+
+#ifndef EGL_KHR_platform_wayland
+#define EGL_KHR_platform_wayland 1
+#define EGL_PLATFORM_WAYLAND_KHR 0x31D8
+#endif /* EGL_KHR_platform_wayland */
+
+#ifndef EGL_KHR_platform_x11
+#define EGL_KHR_platform_x11 1
+#define EGL_PLATFORM_X11_KHR 0x31D5
+#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6
+#endif /* EGL_KHR_platform_x11 */
+
#ifndef EGL_KHR_reusable_sync
#define EGL_KHR_reusable_sync 1
-typedef khronos_utime_nanoseconds_t EGLTimeKHR;
#ifdef KHRONOS_SUPPORT_INT64
#define EGL_SYNC_STATUS_KHR 0x30F1
#define EGL_SIGNALED_KHR 0x30F2
@@ -221,17 +266,9 @@ typedef khronos_utime_nanoseconds_t EGLTimeKHR;
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0)
-typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
-typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync);
-EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
-EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
#endif
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_KHR_reusable_sync */
@@ -333,6 +370,14 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy,
#define EGL_KHR_surfaceless_context 1
#endif /* EGL_KHR_surfaceless_context */
+#ifndef EGL_KHR_swap_buffers_with_damage
+#define EGL_KHR_swap_buffers_with_damage 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
+#endif
+#endif /* EGL_KHR_swap_buffers_with_damage */
+
#ifndef EGL_KHR_vg_parent_image
#define EGL_KHR_vg_parent_image 1
#define EGL_VG_PARENT_IMAGE_KHR 0x30BA
@@ -389,6 +434,12 @@ EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR
#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200
#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */
+#ifndef EGL_ANGLE_device_d3d
+#define EGL_ANGLE_device_d3d 1
+#define EGL_D3D9_DEVICE_ANGLE 0x33A0
+#define EGL_D3D11_DEVICE_ANGLE 0x33A1
+#endif /* EGL_ANGLE_device_d3d */
+
#ifndef EGL_ANGLE_query_surface_pointer
#define EGL_ANGLE_query_surface_pointer 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
@@ -401,6 +452,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */
+#ifndef EGL_ANGLE_window_fixed_size
+#define EGL_ANGLE_window_fixed_size 1
+#define EGL_FIXED_SIZE_ANGLE 0x3201
+#endif /* EGL_ANGLE_window_fixed_size */
+
#ifndef EGL_ARM_pixmap_multisample_discard
#define EGL_ARM_pixmap_multisample_discard 1
#define EGL_DISCARD_SAMPLES_ARM 0x3286
@@ -423,6 +479,42 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF
#endif /* EGL_EXT_create_context_robustness */
+#ifndef EGL_EXT_device_base
+#define EGL_EXT_device_base 1
+typedef void *EGLDeviceEXT;
+#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0))
+#define EGL_BAD_DEVICE_EXT 0x322B
+#define EGL_DEVICE_EXT 0x322C
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
+#endif
+#endif /* EGL_EXT_device_base */
+
+#ifndef EGL_EXT_device_drm
+#define EGL_EXT_device_drm 1
+#define EGL_DRM_DEVICE_FILE_EXT 0x3233
+#endif /* EGL_EXT_device_drm */
+
+#ifndef EGL_EXT_device_enumeration
+#define EGL_EXT_device_enumeration 1
+#endif /* EGL_EXT_device_enumeration */
+
+#ifndef EGL_EXT_device_openwf
+#define EGL_EXT_device_openwf 1
+#define EGL_OPENWF_DEVICE_ID_EXT 0x3237
+#endif /* EGL_EXT_device_openwf */
+
+#ifndef EGL_EXT_device_query
+#define EGL_EXT_device_query 1
+#endif /* EGL_EXT_device_query */
+
#ifndef EGL_EXT_image_dma_buf_import
#define EGL_EXT_image_dma_buf_import 1
#define EGL_LINUX_DMA_BUF_EXT 0x3270
@@ -454,6 +546,48 @@ EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSu
#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134
#endif /* EGL_EXT_multiview_window */
+#ifndef EGL_EXT_output_base
+#define EGL_EXT_output_base 1
+typedef void *EGLOutputLayerEXT;
+typedef void *EGLOutputPortEXT;
+#define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0)
+#define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0)
+#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D
+#define EGL_BAD_OUTPUT_PORT_EXT 0x322E
+#define EGL_SWAP_INTERVAL_EXT 0x322F
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
+typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers);
+EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports);
+EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name);
+EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value);
+EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value);
+EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name);
+#endif
+#endif /* EGL_EXT_output_base */
+
+#ifndef EGL_EXT_output_drm
+#define EGL_EXT_output_drm 1
+#define EGL_DRM_CRTC_EXT 0x3234
+#define EGL_DRM_PLANE_EXT 0x3235
+#define EGL_DRM_CONNECTOR_EXT 0x3236
+#endif /* EGL_EXT_output_drm */
+
+#ifndef EGL_EXT_output_openwf
+#define EGL_EXT_output_openwf 1
+#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238
+#define EGL_OPENWF_PORT_ID_EXT 0x3239
+#endif /* EGL_EXT_output_openwf */
+
#ifndef EGL_EXT_platform_base
#define EGL_EXT_platform_base 1
typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
@@ -466,6 +600,11 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy,
#endif
#endif /* EGL_EXT_platform_base */
+#ifndef EGL_EXT_platform_device
+#define EGL_EXT_platform_device 1
+#define EGL_PLATFORM_DEVICE_EXT 0x313F
+#endif /* EGL_EXT_platform_device */
+
#ifndef EGL_EXT_platform_wayland
#define EGL_EXT_platform_wayland 1
#define EGL_PLATFORM_WAYLAND_EXT 0x31D8
@@ -477,6 +616,19 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy,
#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6
#endif /* EGL_EXT_platform_x11 */
+#ifndef EGL_EXT_protected_surface
+#define EGL_EXT_protected_surface 1
+#define EGL_PROTECTED_CONTENT_EXT 0x32C0
+#endif /* EGL_EXT_protected_surface */
+
+#ifndef EGL_EXT_stream_consumer_egloutput
+#define EGL_EXT_stream_consumer_egloutput 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer);
+#endif
+#endif /* EGL_EXT_stream_consumer_egloutput */
+
#ifndef EGL_EXT_swap_buffers_with_damage
#define EGL_EXT_swap_buffers_with_damage 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
@@ -485,6 +637,35 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSu
#endif
#endif /* EGL_EXT_swap_buffers_with_damage */
+#ifndef EGL_EXT_yuv_surface
+#define EGL_EXT_yuv_surface 1
+#define EGL_YUV_ORDER_EXT 0x3301
+#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311
+#define EGL_YUV_SUBSAMPLE_EXT 0x3312
+#define EGL_YUV_DEPTH_RANGE_EXT 0x3317
+#define EGL_YUV_CSC_STANDARD_EXT 0x330A
+#define EGL_YUV_PLANE_BPP_EXT 0x331A
+#define EGL_YUV_BUFFER_EXT 0x3300
+#define EGL_YUV_ORDER_YUV_EXT 0x3302
+#define EGL_YUV_ORDER_YVU_EXT 0x3303
+#define EGL_YUV_ORDER_YUYV_EXT 0x3304
+#define EGL_YUV_ORDER_UYVY_EXT 0x3305
+#define EGL_YUV_ORDER_YVYU_EXT 0x3306
+#define EGL_YUV_ORDER_VYUY_EXT 0x3307
+#define EGL_YUV_ORDER_AYUV_EXT 0x3308
+#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313
+#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314
+#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315
+#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318
+#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319
+#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B
+#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C
+#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D
+#define EGL_YUV_PLANE_BPP_0_EXT 0x331B
+#define EGL_YUV_PLANE_BPP_8_EXT 0x331C
+#define EGL_YUV_PLANE_BPP_10_EXT 0x331D
+#endif /* EGL_EXT_yuv_surface */
+
#ifndef EGL_HI_clientpixmap
#define EGL_HI_clientpixmap 1
struct EGLClientPixmapHI {
@@ -533,11 +714,42 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
#endif
#endif /* EGL_MESA_drm_image */
+#ifndef EGL_MESA_image_dma_buf_export
+#define EGL_MESA_image_dma_buf_export 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers);
+EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
+#endif
+#endif /* EGL_MESA_image_dma_buf_export */
+
#ifndef EGL_MESA_platform_gbm
#define EGL_MESA_platform_gbm 1
#define EGL_PLATFORM_GBM_MESA 0x31D7
#endif /* EGL_MESA_platform_gbm */
+#ifndef EGL_NOK_swap_region
+#define EGL_NOK_swap_region 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#endif
+#endif /* EGL_NOK_swap_region */
+
+#ifndef EGL_NOK_swap_region2
+#define EGL_NOK_swap_region2 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects);
+#endif
+#endif /* EGL_NOK_swap_region2 */
+
+#ifndef EGL_NOK_texture_from_pixmap
+#define EGL_NOK_texture_from_pixmap 1
+#define EGL_Y_INVERTED_NOK 0x307F
+#endif /* EGL_NOK_texture_from_pixmap */
+
#ifndef EGL_NV_3dvision_surface
#define EGL_NV_3dvision_surface 1
#define EGL_AUTO_STEREO_NV 0x3136
@@ -556,6 +768,13 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133
#endif /* EGL_NV_coverage_sample_resolve */
+#ifndef EGL_NV_cuda_event
+#define EGL_NV_cuda_event 1
+#define EGL_CUDA_EVENT_HANDLE_NV 0x323B
+#define EGL_SYNC_CUDA_EVENT_NV 0x323C
+#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D
+#endif /* EGL_NV_cuda_event */
+
#ifndef EGL_NV_depth_nonlinear
#define EGL_NV_depth_nonlinear 1
#define EGL_DEPTH_ENCODING_NV 0x30E2
@@ -563,6 +782,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR
#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
#endif /* EGL_NV_depth_nonlinear */
+#ifndef EGL_NV_device_cuda
+#define EGL_NV_device_cuda 1
+#define EGL_CUDA_DEVICE_NV 0x323A
+#endif /* EGL_NV_device_cuda */
+
#ifndef EGL_NV_native_query
#define EGL_NV_native_query 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id);
@@ -645,6 +869,16 @@ EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void);
#endif /* KHRONOS_SUPPORT_INT64 */
#endif /* EGL_NV_system_time */
+#ifndef EGL_TIZEN_image_native_buffer
+#define EGL_TIZEN_image_native_buffer 1
+#define EGL_NATIVE_BUFFER_TIZEN 0x32A0
+#endif /* EGL_TIZEN_image_native_buffer */
+
+#ifndef EGL_TIZEN_image_native_surface
+#define EGL_TIZEN_image_native_surface 1
+#define EGL_NATIVE_SURFACE_TIZEN 0x32A1
+#endif /* EGL_TIZEN_image_native_surface */
+
#include <EGL/eglmesaext.h>
#include <EGL/eglextchromium.h>
diff --git a/mesalib/include/EGL/eglmesaext.h b/mesalib/include/EGL/eglmesaext.h
index 87748cadb..917a2043c 100644
--- a/mesalib/include/EGL/eglmesaext.h
+++ b/mesalib/include/EGL/eglmesaext.h
@@ -87,45 +87,14 @@ typedef struct wl_buffer * (EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL) (
#endif
-#ifndef EGL_NOK_swap_region
-#define EGL_NOK_swap_region 1
-
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint* rects);
-#endif
-
+/* remnant of EGL_NOK_swap_region kept for compatibility because of a non-standard type name */
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOK) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint* rects);
-#endif
-
-#ifndef EGL_NOK_texture_from_pixmap
-#define EGL_NOK_texture_from_pixmap 1
-
-#define EGL_Y_INVERTED_NOK 0x307F
-#endif /* EGL_NOK_texture_from_pixmap */
-
-#ifndef EGL_ANDROID_image_native_buffer
-#define EGL_ANDROID_image_native_buffer 1
-#define EGL_NATIVE_BUFFER_ANDROID 0x3140 /* eglCreateImageKHR target */
-#endif
#ifndef EGL_MESA_configless_context
#define EGL_MESA_configless_context 1
#define EGL_NO_CONFIG_MESA ((EGLConfig)0)
#endif
-#if KHRONOS_SUPPORT_INT64
-#ifndef EGL_MESA_image_dma_buf_export
-#define EGL_MESA_image_dma_buf_export 1
-#ifdef EGL_EGLEXT_PROTOTYPES
-EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *fourcc, EGLint *nplanes, EGLuint64KHR *modifiers);
-EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
-#endif
-#endif
-
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESA) (EGLDisplay dpy, EGLImageKHR image, EGLint *fourcc, EGLint *nplanes, EGLuint64KHR *modifiers);
-typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESA) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
-
-#endif
#ifdef __cplusplus
}
#endif
diff --git a/mesalib/include/EGL/eglplatform.h b/mesalib/include/EGL/eglplatform.h
index 2eb686590..7802542ad 100644
--- a/mesalib/include/EGL/eglplatform.h
+++ b/mesalib/include/EGL/eglplatform.h
@@ -2,7 +2,7 @@
#define __eglplatform_h_
/*
-** Copyright (c) 2007-2009 The Khronos Group Inc.
+** Copyright (c) 2007-2013 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
@@ -25,7 +25,7 @@
*/
/* Platform-specific types and definitions for egl.h
- * $Revision: 12306 $ on $Date: 2010-08-25 09:51:28 -0700 (Wed, 25 Aug 2010) $
+ * $Revision: 30994 $ on $Date: 2015-04-30 13:36:48 -0700 (Thu, 30 Apr 2015) $
*
* Adopters may modify khrplatform.h and this file to suit their platform.
* You are encouraged to submit all modifications to the Khronos group so that
@@ -77,7 +77,7 @@ typedef HDC EGLNativeDisplayType;
typedef HBITMAP EGLNativePixmapType;
typedef HWND EGLNativeWindowType;
-#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
+#elif defined(__APPLE__) || defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
typedef int EGLNativeDisplayType;
typedef void *EGLNativeWindowType;
@@ -95,14 +95,15 @@ typedef struct gbm_device *EGLNativeDisplayType;
typedef struct gbm_bo *EGLNativePixmapType;
typedef void *EGLNativeWindowType;
-#elif defined(ANDROID) /* Android */
+#elif defined(__ANDROID__) || defined(ANDROID)
+
+#include <android/native_window.h>
-struct ANativeWindow;
struct egl_native_pixmap_t;
-typedef struct ANativeWindow *EGLNativeWindowType;
-typedef struct egl_native_pixmap_t *EGLNativePixmapType;
-typedef void *EGLNativeDisplayType;
+typedef struct ANativeWindow* EGLNativeWindowType;
+typedef struct egl_native_pixmap_t* EGLNativePixmapType;
+typedef void* EGLNativeDisplayType;
#elif defined(__unix__)
@@ -131,9 +132,7 @@ typedef khronos_uintptr_t EGLNativePixmapType;
typedef khronos_uintptr_t EGLNativeWindowType;
#else
-
#error "Platform not recognized"
-
#endif
/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
diff --git a/mesalib/include/KHR/khrplatform.h b/mesalib/include/KHR/khrplatform.h
index 447953940..790de44b8 100644
--- a/mesalib/include/KHR/khrplatform.h
+++ b/mesalib/include/KHR/khrplatform.h
@@ -26,7 +26,7 @@
/* Khronos platform-specific types and definitions.
*
- * $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
+ * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $
*
* Adopters may modify this file to suit their platform. Adopters are
* encouraged to submit platform specific modifications to the Khronos
@@ -106,9 +106,9 @@
#elif defined (__SYMBIAN32__)
# define KHRONOS_APICALL IMPORT_C
#elif (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303) \
- || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+ || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
/* KHRONOS_APIATTRIBUTES is not used by the client API headers yet */
-# define KHRONOS_APICALL __attribute__((visibility("default")))
+# define KHRONOS_APICALL __attribute__((visibility("default")))
#else
# define KHRONOS_APICALL
#endif
@@ -229,10 +229,23 @@ typedef signed char khronos_int8_t;
typedef unsigned char khronos_uint8_t;
typedef signed short int khronos_int16_t;
typedef unsigned short int khronos_uint16_t;
+
+/*
+ * Types that differ between LLP64 and LP64 architectures - in LLP64,
+ * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
+ * to be the only LLP64 architecture in current use.
+ */
+#ifdef _WIN64
+typedef signed long long int khronos_intptr_t;
+typedef unsigned long long int khronos_uintptr_t;
+typedef signed long long int khronos_ssize_t;
+typedef unsigned long long int khronos_usize_t;
+#else
typedef signed long int khronos_intptr_t;
typedef unsigned long int khronos_uintptr_t;
typedef signed long int khronos_ssize_t;
typedef unsigned long int khronos_usize_t;
+#endif
#if KHRONOS_SUPPORT_FLOAT
/*
diff --git a/mesalib/scons/llvm.py b/mesalib/scons/llvm.py
index 17278df88..c59b8cb93 100644
--- a/mesalib/scons/llvm.py
+++ b/mesalib/scons/llvm.py
@@ -120,6 +120,7 @@ def generate(env):
])
elif llvm_version >= distutils.version.LooseVersion('3.5'):
env.Prepend(LIBS = [
+ 'LLVMMCDisassembler',
'LLVMBitWriter', 'LLVMMCJIT', 'LLVMRuntimeDyld',
'LLVMX86Disassembler', 'LLVMX86AsmParser', 'LLVMX86CodeGen',
'LLVMSelectionDAG', 'LLVMAsmPrinter', 'LLVMX86Desc',
@@ -132,6 +133,7 @@ def generate(env):
])
else:
env.Prepend(LIBS = [
+ 'LLVMMCDisassembler',
'LLVMBitWriter', 'LLVMX86Disassembler', 'LLVMX86AsmParser',
'LLVMX86CodeGen', 'LLVMX86Desc', 'LLVMSelectionDAG',
'LLVMAsmPrinter', 'LLVMMCParser', 'LLVMX86AsmPrinter',
@@ -189,7 +191,7 @@ def generate(env):
if '-fno-rtti' in cxxflags:
env.Append(CXXFLAGS = ['-fno-rtti'])
- components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter']
+ components = ['engine', 'mcjit', 'bitwriter', 'x86asmprinter', 'mcdisassembler']
env.ParseConfig('llvm-config --libs ' + ' '.join(components))
env.ParseConfig('llvm-config --ldflags')
diff --git a/mesalib/src/Makefile.am b/mesalib/src/Makefile.am
index 18cb4ce76..5d69abd99 100644
--- a/mesalib/src/Makefile.am
+++ b/mesalib/src/Makefile.am
@@ -72,4 +72,5 @@ noinst_LTLIBRARIES = libglsl_util.la
libglsl_util_la_SOURCES = \
mesa/main/imports.c \
mesa/program/prog_hash_table.c \
- mesa/program/symbol_table.c
+ mesa/program/symbol_table.c \
+ mesa/program/dummy_errors.c
diff --git a/mesalib/src/gallium/Android.common.mk b/mesalib/src/gallium/Android.common.mk
index 782510ff0..7c6c7ac68 100644
--- a/mesalib/src/gallium/Android.common.mk
+++ b/mesalib/src/gallium/Android.common.mk
@@ -29,4 +29,12 @@ LOCAL_C_INCLUDES += \
$(GALLIUM_TOP)/winsys \
$(GALLIUM_TOP)/drivers
+ifeq ($(MESA_ENABLE_LLVM),true)
+LOCAL_C_INCLUDES += \
+ external/llvm/include \
+ external/llvm/device/include \
+ external/libcxx/include \
+ external/elfutils/$(if $(filter true,$(MESA_LOLLIPOP_BUILD)),0.153/)libelf
+endif
+
include $(MESA_COMMON_MK)
diff --git a/mesalib/src/gallium/Android.mk b/mesalib/src/gallium/Android.mk
index b2662ffca..b94668184 100644
--- a/mesalib/src/gallium/Android.mk
+++ b/mesalib/src/gallium/Android.mk
@@ -33,7 +33,9 @@ SUBDIRS := auxiliary
#
# swrast
-SUBDIRS += winsys/sw/android drivers/softpipe
+ifneq ($(filter swrast,$(MESA_GPU_DRIVERS)),)
+SUBDIRS += winsys/sw/dri winsys/sw/kms-dri drivers/softpipe
+endif
# freedreno
ifneq ($(filter freedreno, $(MESA_GPU_DRIVERS)),)
@@ -74,10 +76,17 @@ endif
endif
endif
+# vc4
+ifneq ($(filter vc4, $(MESA_GPU_DRIVERS)),)
+SUBDIRS += winsys/vc4/drm drivers/vc4
+endif
+
# vmwgfx
ifneq ($(filter vmwgfx, $(MESA_GPU_DRIVERS)),)
SUBDIRS += winsys/svga/drm drivers/svga
endif
-mkfiles := $(patsubst %,$(GALLIUM_TOP)/%/Android.mk,$(SUBDIRS))
-include $(mkfiles)
+# Gallium state trackers and target for dri
+SUBDIRS += state_trackers/dri targets/dri
+
+include $(call all-named-subdir-makefiles,$(SUBDIRS))
diff --git a/mesalib/src/gallium/auxiliary/Android.mk b/mesalib/src/gallium/auxiliary/Android.mk
index 96a2125de..86430eb6a 100644
--- a/mesalib/src/gallium/auxiliary/Android.mk
+++ b/mesalib/src/gallium/auxiliary/Android.mk
@@ -30,12 +30,23 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
$(C_SOURCES) \
+ $(NIR_SOURCES) \
$(VL_STUB_SOURCES)
LOCAL_C_INCLUDES := \
$(GALLIUM_TOP)/auxiliary/util
+ifeq ($(MESA_ENABLE_LLVM),true)
+LOCAL_SRC_FILES += \
+ $(GALLIVM_SOURCES) \
+ $(GALLIVM_CPP_SOURCES)
+
+LOCAL_CPPFLAGS := -std=c++11
+endif
+
+# We need libmesa_glsl to get NIR's generated include directories.
LOCAL_MODULE := libmesa_gallium
+LOCAL_STATIC_LIBRARIES += libmesa_glsl
# generate sources
LOCAL_MODULE_CLASS := STATIC_LIBRARIES
diff --git a/mesalib/src/gallium/auxiliary/hud/hud_context.c b/mesalib/src/gallium/auxiliary/hud/hud_context.c
index 00ec20589..6a124f7d7 100644
--- a/mesalib/src/gallium/auxiliary/hud/hud_context.c
+++ b/mesalib/src/gallium/auxiliary/hud/hud_context.c
@@ -423,6 +423,8 @@ hud_draw(struct hud_context *hud, struct pipe_resource *tex)
cso_save_viewport(cso);
cso_save_stream_outputs(cso);
cso_save_geometry_shader(cso);
+ cso_save_tessctrl_shader(cso);
+ cso_save_tesseval_shader(cso);
cso_save_vertex_shader(cso);
cso_save_vertex_elements(cso);
cso_save_aux_vertex_buffer_slot(cso);
@@ -456,6 +458,8 @@ hud_draw(struct hud_context *hud, struct pipe_resource *tex)
cso_set_rasterizer(cso, &hud->rasterizer);
cso_set_viewport(cso, &viewport);
cso_set_stream_outputs(cso, 0, NULL, NULL);
+ cso_set_tessctrl_shader_handle(cso, NULL);
+ cso_set_tesseval_shader_handle(cso, NULL);
cso_set_geometry_shader_handle(cso, NULL);
cso_set_vertex_shader_handle(cso, hud->vs);
cso_set_vertex_elements(cso, 2, hud->velems);
@@ -548,6 +552,8 @@ hud_draw(struct hud_context *hud, struct pipe_resource *tex)
cso_restore_rasterizer(cso);
cso_restore_viewport(cso);
cso_restore_stream_outputs(cso);
+ cso_restore_tessctrl_shader(cso);
+ cso_restore_tesseval_shader(cso);
cso_restore_geometry_shader(cso);
cso_restore_vertex_shader(cso);
cso_restore_vertex_elements(cso);
diff --git a/mesalib/src/gallium/auxiliary/nir/tgsi_to_nir.c b/mesalib/src/gallium/auxiliary/nir/tgsi_to_nir.c
index 59aaf6778..1702b4139 100644
--- a/mesalib/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/mesalib/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -401,7 +401,6 @@ ttn_src_for_file_and_index(struct ttn_compile *c, unsigned file, unsigned index,
load->num_components = 4;
load->const_index[0] = index;
- load->const_index[1] = 1;
if (dim) {
if (dimind) {
load->src[srcn] =
@@ -1625,7 +1624,6 @@ ttn_emit_instruction(struct ttn_compile *c)
}
if (tgsi_inst->Instruction.Saturate) {
- assert(tgsi_inst->Instruction.Saturate == TGSI_SAT_ZERO_ONE);
assert(!dest.dest.is_ssa);
ttn_move_dest(b, dest, nir_fsat(b, ttn_src_for_dest(b, &dest)));
}
@@ -1672,7 +1670,6 @@ ttn_add_output_stores(struct ttn_compile *c)
nir_intrinsic_instr_create(b->shader, nir_intrinsic_store_output);
store->num_components = 4;
store->const_index[0] = var->data.driver_location + i;
- store->const_index[1] = 1;
store->src[0].reg.reg = c->output_regs[var->data.driver_location].reg;
nir_instr_insert_after_cf_list(b->cf_node_list, &store->instr);
}
diff --git a/mesalib/src/gallium/auxiliary/util/u_blit.c b/mesalib/src/gallium/auxiliary/util/u_blit.c
index 90408ffdc..3f3b5fe63 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blit.c
+++ b/mesalib/src/gallium/auxiliary/util/u_blit.c
@@ -535,6 +535,8 @@ util_blit_pixels_tex(struct blit_state *ctx,
cso_save_framebuffer(ctx->cso);
cso_save_fragment_shader(ctx->cso);
cso_save_vertex_shader(ctx->cso);
+ cso_save_tessctrl_shader(ctx->cso);
+ cso_save_tesseval_shader(ctx->cso);
cso_save_geometry_shader(ctx->cso);
cso_save_vertex_elements(ctx->cso);
cso_save_aux_vertex_buffer_slot(ctx->cso);
@@ -571,6 +573,8 @@ util_blit_pixels_tex(struct blit_state *ctx,
set_fragment_shader(ctx, TGSI_WRITEMASK_XYZW,
src_sampler_view->texture->target);
set_vertex_shader(ctx);
+ cso_set_tessctrl_shader_handle(ctx->cso, NULL);
+ cso_set_tesseval_shader_handle(ctx->cso, NULL);
cso_set_geometry_shader_handle(ctx->cso, NULL);
/* drawing dest */
@@ -611,6 +615,8 @@ util_blit_pixels_tex(struct blit_state *ctx,
cso_restore_framebuffer(ctx->cso);
cso_restore_fragment_shader(ctx->cso);
cso_restore_vertex_shader(ctx->cso);
+ cso_restore_tessctrl_shader(ctx->cso);
+ cso_restore_tesseval_shader(ctx->cso);
cso_restore_geometry_shader(ctx->cso);
cso_restore_vertex_elements(ctx->cso);
cso_restore_aux_vertex_buffer_slot(ctx->cso);
diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.c b/mesalib/src/gallium/auxiliary/util/u_blitter.c
index 24a5b93e1..16bf90fc9 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blitter.c
+++ b/mesalib/src/gallium/auxiliary/util/u_blitter.c
@@ -130,6 +130,7 @@ struct blitter_context_priv
unsigned dst_height;
boolean has_geometry_shader;
+ boolean has_tessellation;
boolean has_layered;
boolean has_stream_out;
boolean has_stencil_export;
@@ -183,6 +184,11 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
ctx->has_geometry_shader =
pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_GEOMETRY,
PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0;
+
+ ctx->has_tessellation =
+ pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_TESS_CTRL,
+ PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0;
+
ctx->has_stream_out =
pipe->screen->get_param(pipe->screen,
PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0;
@@ -510,6 +516,8 @@ static void blitter_check_saved_vertex_states(struct blitter_context_priv *ctx)
assert(ctx->base.saved_velem_state != INVALID_PTR);
assert(ctx->base.saved_vs != INVALID_PTR);
assert(!ctx->has_geometry_shader || ctx->base.saved_gs != INVALID_PTR);
+ assert(!ctx->has_tessellation || ctx->base.saved_tcs != INVALID_PTR);
+ assert(!ctx->has_tessellation || ctx->base.saved_tes != INVALID_PTR);
assert(!ctx->has_stream_out || ctx->base.saved_num_so_targets != ~0);
assert(ctx->base.saved_rs_state != INVALID_PTR);
}
@@ -538,6 +546,13 @@ static void blitter_restore_vertex_states(struct blitter_context_priv *ctx)
ctx->base.saved_gs = INVALID_PTR;
}
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, ctx->base.saved_tcs);
+ pipe->bind_tes_state(pipe, ctx->base.saved_tes);
+ ctx->base.saved_tcs = INVALID_PTR;
+ ctx->base.saved_tes = INVALID_PTR;
+ }
+
/* Stream outputs. */
if (ctx->has_stream_out) {
unsigned offsets[PIPE_MAX_SO_BUFFERS];
@@ -1108,6 +1123,10 @@ static void blitter_set_common_draw_rect_state(struct blitter_context_priv *ctx,
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, NULL);
+ pipe->bind_tes_state(pipe, NULL);
+ }
if (ctx->has_stream_out)
pipe->set_stream_output_targets(pipe, 0, NULL, NULL);
}
@@ -1967,6 +1986,10 @@ void util_blitter_copy_buffer(struct blitter_context *blitter,
bind_vs_pos_only(ctx);
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, NULL);
+ pipe->bind_tes_state(pipe, NULL);
+ }
pipe->bind_rasterizer_state(pipe, ctx->rs_discard_state);
so_target = pipe->create_stream_output_target(pipe, dst, dstx, size);
@@ -2027,6 +2050,10 @@ void util_blitter_clear_buffer(struct blitter_context *blitter,
bind_vs_pos_only(ctx);
if (ctx->has_geometry_shader)
pipe->bind_gs_state(pipe, NULL);
+ if (ctx->has_tessellation) {
+ pipe->bind_tcs_state(pipe, NULL);
+ pipe->bind_tes_state(pipe, NULL);
+ }
pipe->bind_rasterizer_state(pipe, ctx->rs_discard_state);
so_target = pipe->create_stream_output_target(pipe, dst, offset, size);
diff --git a/mesalib/src/gallium/auxiliary/util/u_blitter.h b/mesalib/src/gallium/auxiliary/util/u_blitter.h
index 1568030ac..93b0e513b 100644
--- a/mesalib/src/gallium/auxiliary/util/u_blitter.h
+++ b/mesalib/src/gallium/auxiliary/util/u_blitter.h
@@ -102,7 +102,7 @@ struct blitter_context
void *saved_dsa_state; /**< depth stencil alpha state */
void *saved_velem_state; /**< vertex elements state */
void *saved_rs_state; /**< rasterizer state */
- void *saved_fs, *saved_vs, *saved_gs; /**< shaders */
+ void *saved_fs, *saved_vs, *saved_gs, *saved_tcs, *saved_tes; /**< shaders */
struct pipe_framebuffer_state saved_fb_state; /**< framebuffer state */
struct pipe_stencil_ref saved_stencil_ref; /**< stencil ref */
@@ -427,6 +427,20 @@ void util_blitter_save_geometry_shader(struct blitter_context *blitter,
blitter->saved_gs = gs;
}
+static INLINE void
+util_blitter_save_tessctrl_shader(struct blitter_context *blitter,
+ void *sh)
+{
+ blitter->saved_tcs = sh;
+}
+
+static INLINE void
+util_blitter_save_tesseval_shader(struct blitter_context *blitter,
+ void *sh)
+{
+ blitter->saved_tes = sh;
+}
+
static INLINE
void util_blitter_save_framebuffer(struct blitter_context *blitter,
const struct pipe_framebuffer_state *state)
diff --git a/mesalib/src/gallium/auxiliary/util/u_dump_state.c b/mesalib/src/gallium/auxiliary/util/u_dump_state.c
index e6614d5d2..7f620b50c 100644
--- a/mesalib/src/gallium/auxiliary/util/u_dump_state.c
+++ b/mesalib/src/gallium/auxiliary/util/u_dump_state.c
@@ -750,6 +750,8 @@ util_dump_draw_info(FILE *stream, const struct pipe_draw_info *state)
util_dump_member(stream, uint, state, start_instance);
util_dump_member(stream, uint, state, instance_count);
+ util_dump_member(stream, uint, state, vertices_per_patch);
+
util_dump_member(stream, int, state, index_bias);
util_dump_member(stream, uint, state, min_index);
util_dump_member(stream, uint, state, max_index);
diff --git a/mesalib/src/gallium/auxiliary/util/u_format_etc.c b/mesalib/src/gallium/auxiliary/util/u_format_etc.c
index f909b1608..63e03ff5c 100644
--- a/mesalib/src/gallium/auxiliary/util/u_format_etc.c
+++ b/mesalib/src/gallium/auxiliary/util/u_format_etc.c
@@ -65,11 +65,10 @@ util_format_etc1_rgb8_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, con
void
util_format_etc1_rgb8_fetch_rgba_float(float *dst, const uint8_t *src, unsigned i, unsigned j)
{
- const unsigned bw = 4, bh = 4;
struct etc1_block block;
uint8_t tmp[3];
- assert(i < bw && j < bh);
+ assert(i < 4 && j < 4); /* check i, j against 4x4 block size */
etc1_parse_block(&block, src);
etc1_fetch_texel(&block, i, j, tmp);
diff --git a/mesalib/src/gallium/auxiliary/util/u_math.h b/mesalib/src/gallium/auxiliary/util/u_math.h
index 3d27a59e8..3b4040f0e 100644
--- a/mesalib/src/gallium/auxiliary/util/u_math.h
+++ b/mesalib/src/gallium/auxiliary/util/u_math.h
@@ -42,6 +42,7 @@
#include "pipe/p_compiler.h"
#include "c99_math.h"
+#include <assert.h>
#include <float.h>
#include <stdarg.h>
@@ -424,6 +425,25 @@ util_last_bit(unsigned u)
}
/**
+ * Find last bit set in a word. The least significant bit is 1.
+ * Return 0 if no bits are set.
+ */
+static INLINE unsigned
+util_last_bit64(uint64_t u)
+{
+#if defined(HAVE___BUILTIN_CLZLL)
+ return u == 0 ? 0 : 64 - __builtin_clzll(u);
+#else
+ unsigned r = 0;
+ while (u) {
+ r++;
+ u >>= 1;
+ }
+ return r;
+#endif
+}
+
+/**
* Find last bit in a word that does not match the sign bit. The least
* significant bit is 1.
* Return 0 if no bits are set.
diff --git a/mesalib/src/gallium/auxiliary/util/u_tests.h b/mesalib/src/gallium/auxiliary/util/u_tests.h
index 49ae54f87..106b0a0a9 100644
--- a/mesalib/src/gallium/auxiliary/util/u_tests.h
+++ b/mesalib/src/gallium/auxiliary/util/u_tests.h
@@ -30,8 +30,16 @@
#include "pipe/p_compiler.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct pipe_screen;
void util_run_tests(struct pipe_screen *screen);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/mesalib/src/glsl/Android.mk b/mesalib/src/glsl/Android.mk
index f20741e0d..f63b7daf2 100644
--- a/mesalib/src/glsl/Android.mk
+++ b/mesalib/src/glsl/Android.mk
@@ -46,7 +46,6 @@ LOCAL_C_INCLUDES := \
LOCAL_MODULE := libmesa_glsl
-include external/stlport/libstlport.mk
include $(LOCAL_PATH)/Android.gen.mk
include $(MESA_COMMON_MK)
include $(BUILD_STATIC_LIBRARY)
diff --git a/mesalib/src/glsl/Makefile.am b/mesalib/src/glsl/Makefile.am
index 23c6fe8bb..fa8c9f5d3 100644
--- a/mesalib/src/glsl/Makefile.am
+++ b/mesalib/src/glsl/Makefile.am
@@ -89,8 +89,7 @@ tests_general_ir_test_SOURCES = \
tests/builtin_variable_test.cpp \
tests/invalidate_locations_test.cpp \
tests/general_ir_test.cpp \
- tests/varyings_test.cpp \
- tests/common.c
+ tests/varyings_test.cpp
tests_general_ir_test_CFLAGS = \
$(PTHREAD_CFLAGS)
tests_general_ir_test_LDADD = \
@@ -103,8 +102,7 @@ tests_uniform_initializer_test_SOURCES = \
tests/copy_constant_to_storage_tests.cpp \
tests/set_uniform_initializer_tests.cpp \
tests/uniform_initializer_utils.cpp \
- tests/uniform_initializer_utils.h \
- tests/common.c
+ tests/uniform_initializer_utils.h
tests_uniform_initializer_test_CFLAGS = \
$(PTHREAD_CFLAGS)
tests_uniform_initializer_test_LDADD = \
@@ -114,8 +112,7 @@ tests_uniform_initializer_test_LDADD = \
$(PTHREAD_LIBS)
tests_sampler_types_test_SOURCES = \
- tests/sampler_types_test.cpp \
- tests/common.c
+ tests/sampler_types_test.cpp
tests_sampler_types_test_CFLAGS = \
$(PTHREAD_CFLAGS)
tests_sampler_types_test_LDADD = \
@@ -133,8 +130,7 @@ libglcpp_la_SOURCES = \
$(LIBGLCPP_FILES)
glcpp_glcpp_SOURCES = \
- glcpp/glcpp.c \
- tests/common.c
+ glcpp/glcpp.c
glcpp_glcpp_LDADD = \
libglcpp.la \
$(top_builddir)/src/libglsl_util.la \
@@ -164,7 +160,6 @@ glsl_compiler_LDADD = \
glsl_test_SOURCES = \
standalone_scaffolding.cpp \
- tests/common.c \
test.cpp \
test_optpass.cpp \
test_optpass.h
@@ -247,21 +242,21 @@ dist-hook:
$(RM) glcpp/tests/subtest*/*.out
nir/nir_builder_opcodes.h: nir/nir_opcodes.py nir/nir_builder_opcodes_h.py
- $(MKDIR_P) nir; \
- $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_builder_opcodes_h.py > $@
+ $(AM_V_at)$(MKDIR_P) nir
+ $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_builder_opcodes_h.py > $@
nir/nir_constant_expressions.c: nir/nir_opcodes.py nir/nir_constant_expressions.py nir/nir_constant_expressions.h
- $(MKDIR_P) nir; \
- $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_constant_expressions.py > $@
+ $(AM_V_at)$(MKDIR_P) nir
+ $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_constant_expressions.py > $@
nir/nir_opcodes.h: nir/nir_opcodes.py nir/nir_opcodes_h.py
- $(MKDIR_P) nir; \
- $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opcodes_h.py > $@
+ $(AM_V_at)$(MKDIR_P) nir
+ $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opcodes_h.py > $@
nir/nir_opcodes.c: nir/nir_opcodes.py nir/nir_opcodes_c.py
- $(MKDIR_P) nir; \
- $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opcodes_c.py > $@
+ $(AM_V_at)$(MKDIR_P) nir
+ $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opcodes_c.py > $@
nir/nir_opt_algebraic.c: nir/nir_opt_algebraic.py nir/nir_algebraic.py
- $(MKDIR_P) nir; \
- $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opt_algebraic.py > $@
+ $(AM_V_at)$(MKDIR_P) nir
+ $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/nir/nir_opt_algebraic.py > $@
diff --git a/mesalib/src/glsl/SConscript b/mesalib/src/glsl/SConscript
index 284b37584..89c603580 100644
--- a/mesalib/src/glsl/SConscript
+++ b/mesalib/src/glsl/SConscript
@@ -71,6 +71,7 @@ env.Command('imports.c', '#src/mesa/main/imports.c', Copy('$TARGET', '$SOURCE'))
env.Prepend(CPPPATH = ['#src/mesa/program'])
env.Command('prog_hash_table.c', '#src/mesa/program/prog_hash_table.c', Copy('$TARGET', '$SOURCE'))
env.Command('symbol_table.c', '#src/mesa/program/symbol_table.c', Copy('$TARGET', '$SOURCE'))
+env.Command('dummy_errors.c', '#src/mesa/program/dummy_errors.c', Copy('$TARGET', '$SOURCE'))
compiler_objs = env.StaticObject(source_lists['GLSL_COMPILER_CXX_FILES'])
@@ -78,6 +79,7 @@ mesa_objs = env.StaticObject([
'imports.c',
'prog_hash_table.c',
'symbol_table.c',
+ 'dummy_errors.c',
])
compiler_objs += mesa_objs
@@ -115,6 +117,6 @@ env.Alias('glsl_compiler', glsl_compiler)
glcpp = env.Program(
target = 'glcpp/glcpp',
- source = ['glcpp/glcpp.c', 'tests/common.c'] + mesa_objs,
+ source = ['glcpp/glcpp.c'] + mesa_objs,
)
env.Alias('glcpp', glcpp)
diff --git a/mesalib/src/glsl/ast_array_index.cpp b/mesalib/src/glsl/ast_array_index.cpp
index ecef651f7..752d86f72 100644
--- a/mesalib/src/glsl/ast_array_index.cpp
+++ b/mesalib/src/glsl/ast_array_index.cpp
@@ -225,7 +225,7 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
* values *do* diverge, then the behavior of the operation requiring a
* dynamically uniform expression is undefined.
*/
- if (array->type->element_type()->is_sampler()) {
+ if (array->type->without_array()->is_sampler()) {
if (!state->is_version(130, 100)) {
if (state->es_shader) {
_mesa_glsl_warning(&loc, state,
diff --git a/mesalib/src/glsl/ast_function.cpp b/mesalib/src/glsl/ast_function.cpp
index 758361324..92e26bf24 100644
--- a/mesalib/src/glsl/ast_function.cpp
+++ b/mesalib/src/glsl/ast_function.cpp
@@ -863,7 +863,7 @@ process_array_constructor(exec_list *instructions,
if (is_unsized_array) {
constructor_type =
- glsl_type::get_array_instance(constructor_type->element_type(),
+ glsl_type::get_array_instance(constructor_type->fields.array,
parameter_count);
assert(constructor_type != NULL);
assert(constructor_type->length == parameter_count);
@@ -876,7 +876,7 @@ process_array_constructor(exec_list *instructions,
ir_rvalue *result = ir;
const glsl_base_type element_base_type =
- constructor_type->element_type()->base_type;
+ constructor_type->fields.array->base_type;
/* Apply implicit conversions (not the scalar constructor rules!). See
* the spec quote above. */
@@ -896,10 +896,10 @@ process_array_constructor(exec_list *instructions,
}
}
- if (result->type != constructor_type->element_type()) {
+ if (result->type != constructor_type->fields.array) {
_mesa_glsl_error(loc, state, "type error in array constructor: "
"expected: %s, found %s",
- constructor_type->element_type()->name,
+ constructor_type->fields.array->name,
result->type->name);
return ir_rvalue::error_value(ctx);
}
@@ -993,11 +993,15 @@ emit_inline_vector_constructor(const glsl_type *type,
ir_variable *var = new(ctx) ir_variable(type, "vec_ctor", ir_var_temporary);
instructions->push_tail(var);
- /* There are two kinds of vector constructors.
+ /* There are three kinds of vector constructors.
*
* - Construct a vector from a single scalar by replicating that scalar to
* all components of the vector.
*
+ * - Construct a vector from at least a matrix. This case should already
+ * have been taken care of in ast_function_expression::hir by breaking
+ * down the matrix into a series of column vectors.
+ *
* - Construct a vector from an arbirary combination of vectors and
* scalars. The components of the constructor parameters are assigned
* to the vector in order until the vector is full.
@@ -1091,6 +1095,14 @@ emit_inline_vector_constructor(const glsl_type *type,
rhs_components = lhs_components - base_component;
}
+ /* If we do not have any components left to copy, break out of the
+ * loop. This can happen when initializing a vec4 with a mat3 as the
+ * mat3 would have been broken into a series of column vectors.
+ */
+ if (rhs_components == 0) {
+ break;
+ }
+
const ir_constant *const c = param->as_constant();
if (c == NULL) {
/* Mask of fields to be written in the assignment.
@@ -1681,11 +1693,11 @@ ast_function_expression::hir(exec_list *instructions,
return ir_rvalue::error_value(ctx);
}
- /* Later, we cast each parameter to the same base type as the
- * constructor. Since there are no non-floating point matrices, we
- * need to break them up into a series of column vectors.
+ /* Matrices can never be consumed as is by any constructor but matrix
+ * constructors. If the constructor type is not matrix, always break the
+ * matrix up into a series of column vectors.
*/
- if (constructor_type->base_type != GLSL_TYPE_FLOAT) {
+ if (!constructor_type->is_matrix()) {
foreach_in_list_safe(ir_rvalue, matrix, &actual_parameters) {
if (!matrix->type->is_matrix())
continue;
diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp
index 14e630905..fc24305b2 100644
--- a/mesalib/src/glsl/ast_to_hir.cpp
+++ b/mesalib/src/glsl/ast_to_hir.cpp
@@ -678,7 +678,7 @@ validate_assignment(struct _mesa_glsl_parse_state *state,
* is handled by ir_dereference::is_lvalue.
*/
if (lhs_type->is_unsized_array() && rhs->type->is_array()
- && (lhs_type->element_type() == rhs->type->element_type())) {
+ && (lhs_type->fields.array == rhs->type->fields.array)) {
if (is_initializer) {
return rhs;
} else {
@@ -820,7 +820,7 @@ do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state,
var->data.max_array_access);
}
- var->type = glsl_type::get_array_instance(lhs->type->element_type(),
+ var->type = glsl_type::get_array_instance(lhs->type->fields.array,
rhs->type->array_size());
d->type = var->type;
}
@@ -2330,8 +2330,7 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
struct _mesa_glsl_parse_state *state,
YYLTYPE *loc)
{
- const glsl_type *base_type =
- (var->type->is_array() ? var->type->element_type() : var->type);
+ const glsl_type *base_type = var->type->without_array();
if (base_type->is_image()) {
if (var->data.mode != ir_var_uniform &&
@@ -2730,7 +2729,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
* GL_ARB_conservative_depth
* GL_ARB_gpu_shader5
* GL_ARB_separate_shader_objects
- * GL_ARB_tesselation_shader
+ * GL_ARB_tessellation_shader
* GL_ARB_transform_feedback3
* GL_ARB_uniform_buffer_object
*
@@ -2855,7 +2854,7 @@ get_variable_being_redeclared(ir_variable *var, YYLTYPE loc,
* type and specify a size."
*/
if (earlier->type->is_unsized_array() && var->type->is_array()
- && (var->type->element_type() == earlier->type->element_type())) {
+ && (var->type->fields.array == earlier->type->fields.array)) {
/* FINISHME: This doesn't match the qualifiers on the two
* FINISHME: declarations. It's not 100% clear whether this is
* FINISHME: required or not.
@@ -3608,6 +3607,51 @@ ast_declarator_list::hir(exec_list *instructions,
}
handle_geometry_shader_input_decl(state, loc, var);
+ } else if (state->stage == MESA_SHADER_FRAGMENT) {
+ /* From section 4.3.4 (Input Variables) of the GLSL ES 3.10 spec:
+ *
+ * It is a compile-time error to declare a fragment shader
+ * input with, or that contains, any of the following types:
+ *
+ * * A boolean type
+ * * An opaque type
+ * * An array of arrays
+ * * An array of structures
+ * * A structure containing an array
+ * * A structure containing a structure
+ */
+ if (state->es_shader) {
+ const glsl_type *check_type = var->type->without_array();
+ if (check_type->is_boolean() ||
+ check_type->contains_opaque()) {
+ _mesa_glsl_error(&loc, state,
+ "fragment shader input cannot have type %s",
+ check_type->name);
+ }
+ if (var->type->is_array() &&
+ var->type->fields.array->is_array()) {
+ _mesa_glsl_error(&loc, state,
+ "%s shader output "
+ "cannot have an array of arrays",
+ _mesa_shader_stage_to_string(state->stage));
+ }
+ if (var->type->is_array() &&
+ var->type->fields.array->is_record()) {
+ _mesa_glsl_error(&loc, state,
+ "fragment shader input "
+ "cannot have an array of structs");
+ }
+ if (var->type->is_record()) {
+ for (unsigned i = 0; i < var->type->length; i++) {
+ if (var->type->fields.structure[i].type->is_array() ||
+ var->type->fields.structure[i].type->is_record())
+ _mesa_glsl_error(&loc, state,
+ "fragement shader input cannot have "
+ "a struct that contains an "
+ "array or struct");
+ }
+ }
+ }
}
} else if (var->data.mode == ir_var_shader_out) {
const glsl_type *check_type = var->type->without_array();
@@ -3642,7 +3686,7 @@ ast_declarator_list::hir(exec_list *instructions,
if (check_type->is_record() || check_type->is_matrix())
_mesa_glsl_error(&loc, state,
"fragment shader output "
- "cannot have struct or array type");
+ "cannot have struct or matrix type");
switch (check_type->base_type) {
case GLSL_TYPE_UINT:
case GLSL_TYPE_INT:
@@ -3654,6 +3698,55 @@ ast_declarator_list::hir(exec_list *instructions,
"type %s", check_type->name);
}
}
+
+ /* From section 4.3.6 (Output Variables) of the GLSL ES 3.10 spec:
+ *
+ * It is a compile-time error to declare a vertex shader output
+ * with, or that contains, any of the following types:
+ *
+ * * A boolean type
+ * * An opaque type
+ * * An array of arrays
+ * * An array of structures
+ * * A structure containing an array
+ * * A structure containing a structure
+ *
+ * It is a compile-time error to declare a fragment shader output
+ * with, or that contains, any of the following types:
+ *
+ * * A boolean type
+ * * An opaque type
+ * * A matrix
+ * * A structure
+ * * An array of array
+ */
+ if (state->es_shader) {
+ if (var->type->is_array() &&
+ var->type->fields.array->is_array()) {
+ _mesa_glsl_error(&loc, state,
+ "%s shader output "
+ "cannot have an array of arrays",
+ _mesa_shader_stage_to_string(state->stage));
+ }
+ if (state->stage == MESA_SHADER_VERTEX) {
+ if (var->type->is_array() &&
+ var->type->fields.array->is_record()) {
+ _mesa_glsl_error(&loc, state,
+ "vertex shader output "
+ "cannot have an array of structs");
+ }
+ if (var->type->is_record()) {
+ for (unsigned i = 0; i < var->type->length; i++) {
+ if (var->type->fields.structure[i].type->is_array() ||
+ var->type->fields.structure[i].type->is_record())
+ _mesa_glsl_error(&loc, state,
+ "vertex shader output cannot have a "
+ "struct that contains an "
+ "array or struct");
+ }
+ }
+ }
+ }
}
/* Integer fragment inputs must be qualified with 'flat'. In GLSL ES,
@@ -3850,7 +3943,15 @@ ast_declarator_list::hir(exec_list *instructions,
decl->identifier);
}
- if (state->es_shader) {
+ /* GLSL ES 3.10 removes the restriction on unsized arrays.
+ *
+ * Section 4.1.9 (Arrays) of the GLSL ES 3.10 spec says:
+ *
+ * "Variables of the same type can be aggregated into arrays by
+ * declaring a name followed by brackets ([ ]) enclosing an
+ * optional size."
+ */
+ if (state->es_shader && state->language_version < 310) {
const glsl_type *const t = (earlier == NULL)
? var->type : earlier->type;
@@ -5746,6 +5847,17 @@ ast_interface_block::hir(exec_list *instructions,
const glsl_type *block_array_type =
process_array_type(&loc, block_type, this->array_specifier, state);
+ /* From section 4.3.9 (Interface Blocks) of the GLSL ES 3.10 spec:
+ *
+ * * Arrays of arrays of blocks are not allowed
+ */
+ if (state->es_shader && block_array_type->is_array() &&
+ block_array_type->fields.array->is_array()) {
+ _mesa_glsl_error(&loc, state,
+ "arrays of arrays interface blocks are "
+ "not allowed");
+ }
+
var = new(state) ir_variable(block_array_type,
this->instance_name,
var_mode);
diff --git a/mesalib/src/glsl/builtin_functions.cpp b/mesalib/src/glsl/builtin_functions.cpp
index 499210685..cf53e1691 100755
--- a/mesalib/src/glsl/builtin_functions.cpp
+++ b/mesalib/src/glsl/builtin_functions.cpp
@@ -410,6 +410,13 @@ fp64(const _mesa_glsl_parse_state *state)
return state->has_double();
}
+static bool
+barrier_supported(const _mesa_glsl_parse_state *state)
+{
+ return state->stage == MESA_SHADER_COMPUTE;
+ /* TODO: || stage->state == MESA_SHADER_TESS_CTRL; */
+}
+
/** @} */
/******************************************************************************/
@@ -654,6 +661,7 @@ private:
const glsl_type *stream_type);
ir_function_signature *_EndStreamPrimitive(builtin_available_predicate avail,
const glsl_type *stream_type);
+ B0(barrier)
B2(textureQueryLod);
B1(textureQueryLevels);
@@ -1933,6 +1941,7 @@ builtin_builder::create_builtins()
_EndStreamPrimitive(gs_streams, glsl_type::uint_type),
_EndStreamPrimitive(gs_streams, glsl_type::int_type),
NULL);
+ add_function("barrier", _barrier(), NULL);
add_function("textureQueryLOD",
_textureQueryLod(glsl_type::sampler1D_type, glsl_type::float_type),
@@ -4296,6 +4305,15 @@ builtin_builder::_EndStreamPrimitive(builtin_available_predicate avail,
}
ir_function_signature *
+builtin_builder::_barrier()
+{
+ MAKE_SIG(glsl_type::void_type, barrier_supported, 0);
+
+ body.emit(new(mem_ctx) ir_barrier());
+ return sig;
+}
+
+ir_function_signature *
builtin_builder::_textureQueryLod(const glsl_type *sampler_type,
const glsl_type *coord_type)
{
diff --git a/mesalib/src/glsl/glsl_parser_extras.cpp b/mesalib/src/glsl/glsl_parser_extras.cpp
index be6713c46..046d5d7b5 100644
--- a/mesalib/src/glsl/glsl_parser_extras.cpp
+++ b/mesalib/src/glsl/glsl_parser_extras.cpp
@@ -778,7 +778,7 @@ _mesa_ast_set_aggregate_type(const glsl_type *type,
/* If the aggregate is an array, recursively set its elements' types. */
if (type->is_array()) {
- /* Each array element has the type type->element_type().
+ /* Each array element has the type type->fields.array.
*
* E.g., if <type> if struct S[2] we want to set each element's type to
* struct S.
@@ -790,7 +790,7 @@ _mesa_ast_set_aggregate_type(const glsl_type *type,
link);
if (expr->oper == ast_aggregate)
- _mesa_ast_set_aggregate_type(type->element_type(), expr);
+ _mesa_ast_set_aggregate_type(type->fields.array, expr);
}
/* If the aggregate is a struct, recursively set its fields' types. */
diff --git a/mesalib/src/glsl/glsl_types.cpp b/mesalib/src/glsl/glsl_types.cpp
index 9c9b7efcb..f675e90cb 100644
--- a/mesalib/src/glsl/glsl_types.cpp
+++ b/mesalib/src/glsl/glsl_types.cpp
@@ -217,7 +217,7 @@ glsl_type::contains_opaque() const {
case GLSL_TYPE_ATOMIC_UINT:
return true;
case GLSL_TYPE_ARRAY:
- return element_type()->contains_opaque();
+ return fields.array->contains_opaque();
case GLSL_TYPE_STRUCT:
for (unsigned int i = 0; i < length; i++) {
if (fields.structure[i].type->contains_opaque())
diff --git a/mesalib/src/glsl/glsl_types.h b/mesalib/src/glsl/glsl_types.h
index 5645dcd50..f54a9393e 100644
--- a/mesalib/src/glsl/glsl_types.h
+++ b/mesalib/src/glsl/glsl_types.h
@@ -228,18 +228,6 @@ struct glsl_type {
const glsl_type *get_scalar_type() const;
/**
- * Query the type of elements in an array
- *
- * \return
- * Pointer to the type of elements in the array for array types, or \c NULL
- * for non-array types.
- */
- const glsl_type *element_type() const
- {
- return is_array() ? fields.array : NULL;
- }
-
- /**
* Get the instance of a built-in scalar, vector, or matrix type
*/
static const glsl_type *get_instance(unsigned base_type, unsigned rows,
@@ -556,7 +544,7 @@ struct glsl_type {
if (base_type == GLSL_TYPE_ATOMIC_UINT)
return ATOMIC_COUNTER_SIZE;
else if (is_array())
- return length * element_type()->atomic_size();
+ return length * fields.array->atomic_size();
else
return 0;
}
diff --git a/mesalib/src/glsl/ir.cpp b/mesalib/src/glsl/ir.cpp
index 68c37275c..3f266f8f0 100755
--- a/mesalib/src/glsl/ir.cpp
+++ b/mesalib/src/glsl/ir.cpp
@@ -912,7 +912,7 @@ ir_constant::zero(void *mem_ctx, const glsl_type *type)
c->array_elements = ralloc_array(c, ir_constant *, type->length);
for (unsigned i = 0; i < type->length; i++)
- c->array_elements[i] = ir_constant::zero(c, type->element_type());
+ c->array_elements[i] = ir_constant::zero(c, type->fields.array);
}
if (type->is_record()) {
@@ -1341,7 +1341,7 @@ ir_dereference_array::set_array(ir_rvalue *value)
const glsl_type *const vt = this->array->type;
if (vt->is_array()) {
- type = vt->element_type();
+ type = vt->fields.array;
} else if (vt->is_matrix()) {
type = vt->column_type();
} else if (vt->is_vector()) {
diff --git a/mesalib/src/glsl/ir.h b/mesalib/src/glsl/ir.h
index fab1cd2d2..f90455535 100644
--- a/mesalib/src/glsl/ir.h
+++ b/mesalib/src/glsl/ir.h
@@ -78,6 +78,7 @@ enum ir_node_type {
ir_type_discard,
ir_type_emit_vertex,
ir_type_end_primitive,
+ ir_type_barrier,
ir_type_max, /**< maximum ir_type enum number, for validation */
ir_type_unset = ir_type_max
};
@@ -2396,6 +2397,29 @@ public:
ir_rvalue *stream;
};
+/**
+ * IR instruction for tessellation control and compute shader barrier.
+ */
+class ir_barrier : public ir_instruction {
+public:
+ ir_barrier()
+ : ir_instruction(ir_type_barrier)
+ {
+ }
+
+ virtual void accept(ir_visitor *v)
+ {
+ v->visit(this);
+ }
+
+ virtual ir_barrier *clone(void *mem_ctx, struct hash_table *) const
+ {
+ return new(mem_ctx) ir_barrier();
+ }
+
+ virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+};
+
/*@}*/
/**
diff --git a/mesalib/src/glsl/ir_hierarchical_visitor.cpp b/mesalib/src/glsl/ir_hierarchical_visitor.cpp
index adb629414..1d23a7766 100644
--- a/mesalib/src/glsl/ir_hierarchical_visitor.cpp
+++ b/mesalib/src/glsl/ir_hierarchical_visitor.cpp
@@ -80,6 +80,15 @@ ir_hierarchical_visitor::visit(ir_dereference_variable *ir)
}
ir_visitor_status
+ir_hierarchical_visitor::visit(ir_barrier *ir)
+{
+ if (this->callback_enter != NULL)
+ this->callback_enter(ir, this->data_enter);
+
+ return visit_continue;
+}
+
+ir_visitor_status
ir_hierarchical_visitor::visit_enter(ir_loop *ir)
{
if (this->callback_enter != NULL)
diff --git a/mesalib/src/glsl/ir_hierarchical_visitor.h b/mesalib/src/glsl/ir_hierarchical_visitor.h
index faa52fd79..28517b6e4 100644
--- a/mesalib/src/glsl/ir_hierarchical_visitor.h
+++ b/mesalib/src/glsl/ir_hierarchical_visitor.h
@@ -59,7 +59,7 @@ enum ir_visitor_status {
* in the composite's \c accept method. The \c accept method for a leaf-node
* class will simply call the \c visit method, as usual, and pass its return
* value on. The \c accept method for internal-node classes will call the \c
- * visit_enter method, call the \c accpet method of each child node, and,
+ * visit_enter method, call the \c accept method of each child node, and,
* finally, call the \c visit_leave method. If any of these return a value
* other that \c visit_continue, the correct action must be taken.
*
@@ -87,6 +87,7 @@ public:
virtual ir_visitor_status visit(class ir_variable *);
virtual ir_visitor_status visit(class ir_constant *);
virtual ir_visitor_status visit(class ir_loop_jump *);
+ virtual ir_visitor_status visit(class ir_barrier *);
/**
* ir_dereference_variable isn't technically a leaf, but it is treated as a
diff --git a/mesalib/src/glsl/ir_hv_accept.cpp b/mesalib/src/glsl/ir_hv_accept.cpp
index be5b3eaa0..d3662cf50 100644
--- a/mesalib/src/glsl/ir_hv_accept.cpp
+++ b/mesalib/src/glsl/ir_hv_accept.cpp
@@ -429,3 +429,9 @@ ir_end_primitive::accept(ir_hierarchical_visitor *v)
return (s == visit_stop) ? s : v->visit_leave(this);
}
+
+ir_visitor_status
+ir_barrier::accept(ir_hierarchical_visitor *v)
+{
+ return v->visit(this);
+}
diff --git a/mesalib/src/glsl/ir_print_visitor.cpp b/mesalib/src/glsl/ir_print_visitor.cpp
index 01f52e85f..f5de6ac06 100644
--- a/mesalib/src/glsl/ir_print_visitor.cpp
+++ b/mesalib/src/glsl/ir_print_visitor.cpp
@@ -573,5 +573,10 @@ ir_print_visitor::visit(ir_end_primitive *ir)
fprintf(f, "(end-primitive ");
ir->stream->accept(this);
fprintf(f, ")\n");
+}
+void
+ir_print_visitor::visit(ir_barrier *ir)
+{
+ fprintf(f, "(barrier)\n");
}
diff --git a/mesalib/src/glsl/ir_print_visitor.h b/mesalib/src/glsl/ir_print_visitor.h
index 98f041d1a..965e63ade 100644
--- a/mesalib/src/glsl/ir_print_visitor.h
+++ b/mesalib/src/glsl/ir_print_visitor.h
@@ -71,6 +71,7 @@ public:
virtual void visit(ir_loop_jump *);
virtual void visit(ir_emit_vertex *);
virtual void visit(ir_end_primitive *);
+ virtual void visit(ir_barrier *);
/*@}*/
private:
diff --git a/mesalib/src/glsl/ir_uniform.h b/mesalib/src/glsl/ir_uniform.h
index 21b5d05c1..e1b801477 100644
--- a/mesalib/src/glsl/ir_uniform.h
+++ b/mesalib/src/glsl/ir_uniform.h
@@ -181,6 +181,11 @@ struct gl_uniform_storage {
* via the API.
*/
bool hidden;
+
+ /**
+ * This is a built-in uniform that should not be modified through any gl API.
+ */
+ bool builtin;
};
#ifdef __cplusplus
diff --git a/mesalib/src/glsl/ir_visitor.h b/mesalib/src/glsl/ir_visitor.h
index 40f96ffbc..7c38481cd 100644
--- a/mesalib/src/glsl/ir_visitor.h
+++ b/mesalib/src/glsl/ir_visitor.h
@@ -65,6 +65,7 @@ public:
virtual void visit(class ir_loop_jump *) = 0;
virtual void visit(class ir_emit_vertex *) = 0;
virtual void visit(class ir_end_primitive *) = 0;
+ virtual void visit(class ir_barrier *) = 0;
/*@}*/
};
@@ -85,6 +86,7 @@ public:
virtual void visit(class ir_call *) {}
virtual void visit(class ir_emit_vertex *) {}
virtual void visit(class ir_end_primitive *) {}
+ virtual void visit(class ir_barrier *) {}
};
#endif /* __cplusplus */
diff --git a/mesalib/src/glsl/link_atomics.cpp b/mesalib/src/glsl/link_atomics.cpp
index 603873a5d..100d03c4e 100644
--- a/mesalib/src/glsl/link_atomics.cpp
+++ b/mesalib/src/glsl/link_atomics.cpp
@@ -207,7 +207,7 @@ link_assign_atomic_counter_resources(struct gl_context *ctx,
storage->atomic_buffer_index = i;
storage->offset = var->data.atomic.offset;
storage->array_stride = (var->type->is_array() ?
- var->type->element_type()->atomic_size() : 0);
+ var->type->without_array()->atomic_size() : 0);
}
/* Assign stage-specific fields. */
diff --git a/mesalib/src/glsl/link_uniform_initializers.cpp b/mesalib/src/glsl/link_uniform_initializers.cpp
index 69073841e..204acfa22 100644
--- a/mesalib/src/glsl/link_uniform_initializers.cpp
+++ b/mesalib/src/glsl/link_uniform_initializers.cpp
@@ -103,7 +103,7 @@ void
set_sampler_binding(gl_shader_program *prog, const char *name, int binding)
{
struct gl_uniform_storage *const storage =
- get_storage(prog->UniformStorage, prog->NumUserUniformStorage, name);
+ get_storage(prog->UniformStorage, prog->NumUniformStorage, name);
if (storage == NULL) {
assert(storage != NULL);
@@ -193,7 +193,7 @@ set_uniform_initializer(void *mem_ctx, gl_shader_program *prog,
struct gl_uniform_storage *const storage =
get_storage(prog->UniformStorage,
- prog->NumUserUniformStorage,
+ prog->NumUniformStorage,
name);
if (storage == NULL) {
assert(storage != NULL);
diff --git a/mesalib/src/glsl/link_uniforms.cpp b/mesalib/src/glsl/link_uniforms.cpp
index 4a0a3e5c2..142e90ffa 100644
--- a/mesalib/src/glsl/link_uniforms.cpp
+++ b/mesalib/src/glsl/link_uniforms.cpp
@@ -589,12 +589,13 @@ private:
handle_samplers(base_type, &this->uniforms[id]);
handle_images(base_type, &this->uniforms[id]);
- /* If there is already storage associated with this uniform, it means
- * that it was set while processing an earlier shader stage. For
- * example, we may be processing the uniform in the fragment shader, but
- * the uniform was already processed in the vertex shader.
+ /* If there is already storage associated with this uniform or if the
+ * uniform is set as builtin, it means that it was set while processing
+ * an earlier shader stage. For example, we may be processing the
+ * uniform in the fragment shader, but the uniform was already processed
+ * in the vertex shader.
*/
- if (this->uniforms[id].storage != NULL) {
+ if (this->uniforms[id].storage != NULL || this->uniforms[id].builtin) {
return;
}
@@ -619,10 +620,15 @@ private:
this->uniforms[id].initialized = 0;
this->uniforms[id].num_driver_storage = 0;
this->uniforms[id].driver_storage = NULL;
- this->uniforms[id].storage = this->values;
this->uniforms[id].atomic_buffer_index = -1;
this->uniforms[id].hidden =
current_var->data.how_declared == ir_var_hidden;
+ this->uniforms[id].builtin = is_gl_identifier(name);
+
+ /* Do not assign storage if the uniform is builtin */
+ if (!this->uniforms[id].builtin)
+ this->uniforms[id].storage = this->values;
+
if (this->ubo_block_index != -1) {
this->uniforms[id].block_index = this->ubo_block_index;
@@ -894,7 +900,7 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
{
ralloc_free(prog->UniformStorage);
prog->UniformStorage = NULL;
- prog->NumUserUniformStorage = 0;
+ prog->NumUniformStorage = 0;
if (prog->UniformHash != NULL) {
prog->UniformHash->clear();
@@ -940,14 +946,6 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
if ((var == NULL) || (var->data.mode != ir_var_uniform))
continue;
- /* FINISHME: Update code to process built-in uniforms!
- */
- if (is_gl_identifier(var->name)) {
- uniform_size.num_shader_uniform_components +=
- var->type->component_slots();
- continue;
- }
-
uniform_size.process(var);
}
@@ -962,16 +960,16 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
}
}
- const unsigned num_user_uniforms = uniform_size.num_active_uniforms;
+ const unsigned num_uniforms = uniform_size.num_active_uniforms;
const unsigned num_data_slots = uniform_size.num_values;
/* On the outside chance that there were no uniforms, bail out.
*/
- if (num_user_uniforms == 0)
+ if (num_uniforms == 0)
return;
struct gl_uniform_storage *uniforms =
- rzalloc_array(prog, struct gl_uniform_storage, num_user_uniforms);
+ rzalloc_array(prog, struct gl_uniform_storage, num_uniforms);
union gl_constant_value *data =
rzalloc_array(uniforms, union gl_constant_value, num_data_slots);
#ifndef NDEBUG
@@ -992,11 +990,6 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
if ((var == NULL) || (var->data.mode != ir_var_uniform))
continue;
- /* FINISHME: Update code to process built-in uniforms!
- */
- if (is_gl_identifier(var->name))
- continue;
-
parcel.set_and_process(prog, var);
}
@@ -1009,10 +1002,10 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
}
const unsigned hidden_uniforms =
- move_hidden_uniforms_to_end(prog, uniforms, num_user_uniforms);
+ move_hidden_uniforms_to_end(prog, uniforms, num_uniforms);
/* Reserve all the explicit locations of the active uniforms. */
- for (unsigned i = 0; i < num_user_uniforms; i++) {
+ for (unsigned i = 0; i < num_uniforms; i++) {
if (uniforms[i].remap_location != UNMAPPED_UNIFORM_LOC) {
/* How many new entries for this uniform? */
const unsigned entries = MAX2(1, uniforms[i].array_elements);
@@ -1028,7 +1021,11 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
}
/* Reserve locations for rest of the uniforms. */
- for (unsigned i = 0; i < num_user_uniforms; i++) {
+ for (unsigned i = 0; i < num_uniforms; i++) {
+
+ /* Built-in uniforms should not get any location. */
+ if (uniforms[i].builtin)
+ continue;
/* Explicit ones have been set already. */
if (uniforms[i].remap_location != UNMAPPED_UNIFORM_LOC)
@@ -1055,13 +1052,13 @@ link_assign_uniform_locations(struct gl_shader_program *prog,
}
#ifndef NDEBUG
- for (unsigned i = 0; i < num_user_uniforms; i++) {
- assert(uniforms[i].storage != NULL);
+ for (unsigned i = 0; i < num_uniforms; i++) {
+ assert(uniforms[i].storage != NULL || uniforms[i].builtin);
}
assert(parcel.values == data_end);
#endif
- prog->NumUserUniformStorage = num_user_uniforms;
+ prog->NumUniformStorage = num_uniforms;
prog->NumHiddenUniforms = hidden_uniforms;
prog->UniformStorage = uniforms;
diff --git a/mesalib/src/glsl/link_varyings.cpp b/mesalib/src/glsl/link_varyings.cpp
index 605748a9c..7b2d4bd23 100644
--- a/mesalib/src/glsl/link_varyings.cpp
+++ b/mesalib/src/glsl/link_varyings.cpp
@@ -56,7 +56,7 @@ cross_validate_types_and_qualifiers(struct gl_shader_program *prog,
const glsl_type *type_to_match = input->type;
if (consumer_stage == MESA_SHADER_GEOMETRY) {
assert(type_to_match->is_array()); /* Enforced by ast_to_hir */
- type_to_match = type_to_match->element_type();
+ type_to_match = type_to_match->fields.array;
}
if (type_to_match != output->type) {
/* There is a bit of a special case for gl_TexCoord. This
diff --git a/mesalib/src/glsl/linker.cpp b/mesalib/src/glsl/linker.cpp
index ea73c6f9d..99783800b 100644
--- a/mesalib/src/glsl/linker.cpp
+++ b/mesalib/src/glsl/linker.cpp
@@ -224,7 +224,7 @@ public:
return visit_continue;
}
- var->type = glsl_type::get_array_instance(var->type->element_type(),
+ var->type = glsl_type::get_array_instance(var->type->fields.array,
this->num_vertices);
var->data.max_array_access = this->num_vertices - 1;
@@ -245,7 +245,7 @@ public:
{
const glsl_type *const vt = ir->array->type;
if (vt->is_array())
- ir->type = vt->element_type();
+ ir->type = vt->fields.array;
return visit_continue;
}
};
@@ -1400,8 +1400,8 @@ link_fs_input_layout_qualifiers(struct gl_shader_program *prog,
"layout qualifiers for gl_FragCoord\n");
}
- /* Update the linked shader state.  Note that uses_gl_fragcoord should
- * accumulate the results.  The other values should replace.  If there
+ /* Update the linked shader state. Note that uses_gl_fragcoord should
+ * accumulate the results. The other values should replace. If there
* are multiple redeclarations, all the fields except uses_gl_fragcoord
* are already known to be the same.
*/
@@ -2693,13 +2693,23 @@ build_program_resource_list(struct gl_context *ctx,
}
/* Add uniforms from uniform storage. */
- for (unsigned i = 0; i < shProg->NumUserUniformStorage; i++) {
+ for (unsigned i = 0; i < shProg->NumUniformStorage; i++) {
/* Do not add uniforms internally used by Mesa. */
if (shProg->UniformStorage[i].hidden)
continue;
uint8_t stageref =
build_stageref(shProg, shProg->UniformStorage[i].name);
+
+ /* Add stagereferences for uniforms in a uniform block. */
+ int block_index = shProg->UniformStorage[i].block_index;
+ if (block_index != -1) {
+ for (unsigned j = 0; j < MESA_SHADER_STAGES; j++) {
+ if (shProg->UniformBlockStageIndex[j][block_index] != -1)
+ stageref |= (1 << j);
+ }
+ }
+
if (!add_program_resource(shProg, GL_UNIFORM,
&shProg->UniformStorage[i], stageref))
return;
@@ -2819,8 +2829,11 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
link_intrastage_shaders(mem_ctx, ctx, prog, shader_list[stage],
num_shaders[stage]);
- if (!prog->LinkStatus)
+ if (!prog->LinkStatus) {
+ if (sh)
+ ctx->Driver.DeleteShader(ctx, sh);
goto done;
+ }
switch (stage) {
case MESA_SHADER_VERTEX:
@@ -2833,8 +2846,11 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
validate_fragment_shader_executable(prog, sh);
break;
}
- if (!prog->LinkStatus)
+ if (!prog->LinkStatus) {
+ if (sh)
+ ctx->Driver.DeleteShader(ctx, sh);
goto done;
+ }
_mesa_reference_shader(ctx, &prog->_LinkedShaders[stage], sh);
}
diff --git a/mesalib/src/glsl/lower_clip_distance.cpp b/mesalib/src/glsl/lower_clip_distance.cpp
index 2d6138d5a..01f028b1f 100644
--- a/mesalib/src/glsl/lower_clip_distance.cpp
+++ b/mesalib/src/glsl/lower_clip_distance.cpp
@@ -114,7 +114,7 @@ lower_clip_distance_visitor::visit(ir_variable *ir)
return visit_continue;
assert (ir->type->is_array());
- if (!ir->type->element_type()->is_array()) {
+ if (!ir->type->fields.array->is_array()) {
/* 1D gl_ClipDistance (used for vertex and geometry output, and fragment
* input).
*/
@@ -123,7 +123,7 @@ lower_clip_distance_visitor::visit(ir_variable *ir)
this->progress = true;
this->old_clip_distance_1d_var = ir;
- assert (ir->type->element_type() == glsl_type::float_type);
+ assert (ir->type->fields.array == glsl_type::float_type);
unsigned new_size = (ir->type->array_size() + 3) / 4;
/* Clone the old var so that we inherit all of its properties */
@@ -148,8 +148,8 @@ lower_clip_distance_visitor::visit(ir_variable *ir)
this->progress = true;
this->old_clip_distance_2d_var = ir;
- assert (ir->type->element_type()->element_type() == glsl_type::float_type);
- unsigned new_size = (ir->type->element_type()->array_size() + 3) / 4;
+ assert (ir->type->fields.array->fields.array == glsl_type::float_type);
+ unsigned new_size = (ir->type->fields.array->array_size() + 3) / 4;
/* Clone the old var so that we inherit all of its properties */
this->new_clip_distance_2d_var = ir->clone(ralloc_parent(ir), NULL);
diff --git a/mesalib/src/glsl/main.cpp b/mesalib/src/glsl/main.cpp
index 47c0db81e..a4212fa40 100644
--- a/mesalib/src/glsl/main.cpp
+++ b/mesalib/src/glsl/main.cpp
@@ -52,12 +52,6 @@
static int glsl_version = 330;
-extern "C" void
-_mesa_error_no_memory(const char *caller)
-{
- fprintf(stderr, "Mesa error: out of memory in %s", caller);
-}
-
static void
initialize_context(struct gl_context *ctx, gl_api api)
{
@@ -293,7 +287,7 @@ usage_fail(const char *name)
"usage: %s [options] <file.vert | file.geom | file.frag>\n"
"\n"
"Possible options are:\n";
- printf(header, name, name);
+ printf(header, name);
for (const struct option *o = compiler_opts; o->name != 0; ++o) {
printf(" --%s\n", o->name);
}
diff --git a/mesalib/src/glsl/nir/glsl_to_nir.cpp b/mesalib/src/glsl/nir/glsl_to_nir.cpp
index af758ceb0..95531bbcd 100644
--- a/mesalib/src/glsl/nir/glsl_to_nir.cpp
+++ b/mesalib/src/glsl/nir/glsl_to_nir.cpp
@@ -65,6 +65,7 @@ public:
virtual void visit(ir_dereference_variable *);
virtual void visit(ir_dereference_record *);
virtual void visit(ir_dereference_array *);
+ virtual void visit(ir_barrier *);
void create_function(ir_function *ir);
@@ -930,13 +931,9 @@ nir_visitor::evaluate_rvalue(ir_rvalue* ir)
}
nir_dest *dest = get_instr_dest(this->result);
-
assert(dest->is_ssa);
- nir_src src = NIR_SRC_INIT;
- src.is_ssa = true;
- src.ssa = &dest->ssa;
- return src;
+ return nir_src_for_ssa(&dest->ssa);
}
nir_alu_instr *
@@ -1893,3 +1890,11 @@ nir_visitor::visit(ir_dereference_array *ir)
ralloc_steal(this->deref_tail, deref);
this->deref_tail = &deref->deref;
}
+
+void
+nir_visitor::visit(ir_barrier *ir)
+{
+ nir_intrinsic_instr *instr =
+ nir_intrinsic_instr_create(this->shader, nir_intrinsic_barrier);
+ nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
+}
diff --git a/mesalib/src/glsl/nir/nir_intrinsics.h b/mesalib/src/glsl/nir/nir_intrinsics.h
index 10192c531..bc6e6b8f4 100644
--- a/mesalib/src/glsl/nir/nir_intrinsics.h
+++ b/mesalib/src/glsl/nir/nir_intrinsics.h
@@ -67,6 +67,7 @@ INTRINSIC(interp_var_at_offset, 1, ARR(2), true, 0, 1, 0,
*/
#define BARRIER(name) INTRINSIC(name, 0, ARR(), false, 0, 0, 0, 0)
+BARRIER(barrier)
BARRIER(discard)
/*
@@ -138,12 +139,11 @@ SYSTEM_VALUE(sample_mask_in, 1)
SYSTEM_VALUE(invocation_id, 1)
/*
- * The first index is the address to load from, and the second index is the
- * number of array elements to load. Indirect loads have an additional
- * register input, which is added to the constant address to compute the
- * final address to load from. For UBO's (and SSBO's), the first source is
- * the (possibly constant) UBO buffer index and the indirect (if it exists)
- * is the second source.
+ * The first and only index is the base address to load from. Indirect
+ * loads have an additional register input, which is added to the constant
+ * address to compute the final address to load from. For UBO's (and
+ * SSBO's), the first source is the (possibly constant) UBO buffer index
+ * and the indirect (if it exists) is the second source.
*
* For vector backends, the address is in terms of one vec4, and so each array
* element is +4 scalar components from the previous array element. For scalar
@@ -152,9 +152,9 @@ SYSTEM_VALUE(invocation_id, 1)
*/
#define LOAD(name, extra_srcs, flags) \
- INTRINSIC(load_##name, extra_srcs, ARR(1), true, 0, 0, 2, flags) \
+ INTRINSIC(load_##name, extra_srcs, ARR(1), true, 0, 0, 1, flags) \
INTRINSIC(load_##name##_indirect, extra_srcs + 1, ARR(1, 1), \
- true, 0, 0, 2, flags)
+ true, 0, 0, 1, flags)
LOAD(uniform, 0, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
LOAD(ubo, 1, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
@@ -172,7 +172,7 @@ LOAD(input, 0, NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER)
INTRINSIC(store_##name##_indirect, 2, ARR(0, 1), false, 0, 0, \
num_indices, flags) \
-STORE(output, 2, 0)
-/* STORE(ssbo, 3, 0) */
+STORE(output, 1, 0)
+/* STORE(ssbo, 2, 0) */
LAST_INTRINSIC(store_output_indirect)
diff --git a/mesalib/src/glsl/nir/nir_lower_atomics.c b/mesalib/src/glsl/nir/nir_lower_atomics.c
index f6f89020f..0457de60d 100644
--- a/mesalib/src/glsl/nir/nir_lower_atomics.c
+++ b/mesalib/src/glsl/nir/nir_lower_atomics.c
@@ -109,7 +109,7 @@ lower_instr(nir_intrinsic_instr *instr, nir_function_impl *impl)
}
new_instr->src[0].is_ssa = true;
- new_instr->src[0].ssa = offset_def;;
+ new_instr->src[0].ssa = offset_def;
if (instr->dest.is_ssa) {
nir_ssa_dest_init(&new_instr->instr, &new_instr->dest,
diff --git a/mesalib/src/glsl/nir/nir_lower_io.c b/mesalib/src/glsl/nir/nir_lower_io.c
index 03eed04e1..6761d5bad 100644
--- a/mesalib/src/glsl/nir/nir_lower_io.c
+++ b/mesalib/src/glsl/nir/nir_lower_io.c
@@ -288,7 +288,6 @@ nir_lower_io_block(nir_block *block, void *void_state)
offset += intrin->variables[0]->var->data.driver_location;
load->const_index[0] = offset;
- load->const_index[1] = 1;
if (has_indirect)
load->src[0] = indirect;
@@ -331,7 +330,6 @@ nir_lower_io_block(nir_block *block, void *void_state)
offset += intrin->variables[0]->var->data.driver_location;
store->const_index[0] = offset;
- store->const_index[1] = 1;
nir_src_copy(&store->src[0], &intrin->src[0], state->mem_ctx);
diff --git a/mesalib/src/glsl/nir/nir_lower_phis_to_scalar.c b/mesalib/src/glsl/nir/nir_lower_phis_to_scalar.c
index 4bdb80072..a57d25397 100644
--- a/mesalib/src/glsl/nir/nir_lower_phis_to_scalar.c
+++ b/mesalib/src/glsl/nir/nir_lower_phis_to_scalar.c
@@ -153,6 +153,11 @@ should_lower_phi(nir_phi_instr *phi, struct lower_phis_to_scalar_state *state)
break;
}
+ /* The hash table entry for 'phi' may have changed while recursing the
+ * dependence graph, so we need to reset it */
+ entry = _mesa_hash_table_search(state->phi_table, phi);
+ assert(entry);
+
entry->data = (void *)(intptr_t)scalarizable;
return scalarizable;
diff --git a/mesalib/src/glsl/nir/nir_opt_algebraic.py b/mesalib/src/glsl/nir/nir_opt_algebraic.py
index fa039222f..eace791f5 100644
--- a/mesalib/src/glsl/nir/nir_opt_algebraic.py
+++ b/mesalib/src/glsl/nir/nir_opt_algebraic.py
@@ -156,6 +156,8 @@ optimizations = [
(('fpow', a, 2.0), ('fmul', a, a)),
(('fpow', a, 4.0), ('fmul', ('fmul', a, a), ('fmul', a, a))),
(('fpow', 2.0, a), ('fexp2', a)),
+ (('fpow', ('fpow', a, 2.2), 0.454545), a),
+ (('fpow', ('fabs', ('fpow', a, 2.2)), 0.454545), ('fabs', a)),
(('fsqrt', ('fexp2', a)), ('fexp2', ('fmul', 0.5, a))),
(('frcp', ('fexp2', a)), ('fexp2', ('fneg', a))),
(('frsq', ('fexp2', a)), ('fexp2', ('fmul', -0.5, a))),
diff --git a/mesalib/src/glsl/nir/nir_opt_peephole_ffma.c b/mesalib/src/glsl/nir/nir_opt_peephole_ffma.c
index b430eac8e..798506b75 100644
--- a/mesalib/src/glsl/nir/nir_opt_peephole_ffma.c
+++ b/mesalib/src/glsl/nir/nir_opt_peephole_ffma.c
@@ -73,7 +73,8 @@ are_all_uses_fadd(nir_ssa_def *def)
}
static nir_alu_instr *
-get_mul_for_src(nir_alu_src *src, uint8_t swizzle[4], bool *negate, bool *abs)
+get_mul_for_src(nir_alu_src *src, int num_components,
+ uint8_t swizzle[4], bool *negate, bool *abs)
{
assert(src->src.is_ssa && !src->abs && !src->negate);
@@ -85,16 +86,16 @@ get_mul_for_src(nir_alu_src *src, uint8_t swizzle[4], bool *negate, bool *abs)
switch (alu->op) {
case nir_op_imov:
case nir_op_fmov:
- alu = get_mul_for_src(&alu->src[0], swizzle, negate, abs);
+ alu = get_mul_for_src(&alu->src[0], num_components, swizzle, negate, abs);
break;
case nir_op_fneg:
- alu = get_mul_for_src(&alu->src[0], swizzle, negate, abs);
+ alu = get_mul_for_src(&alu->src[0], num_components, swizzle, negate, abs);
*negate = !*negate;
break;
case nir_op_fabs:
- alu = get_mul_for_src(&alu->src[0], swizzle, negate, abs);
+ alu = get_mul_for_src(&alu->src[0], num_components, swizzle, negate, abs);
*negate = false;
*abs = true;
break;
@@ -115,12 +116,8 @@ get_mul_for_src(nir_alu_src *src, uint8_t swizzle[4], bool *negate, bool *abs)
if (!alu)
return NULL;
- for (unsigned i = 0; i < 4; i++) {
- if (!(alu->dest.write_mask & (1 << i)))
- break;
-
+ for (unsigned i = 0; i < num_components; i++)
swizzle[i] = swizzle[src->swizzle[i]];
- }
return alu;
}
@@ -160,7 +157,9 @@ nir_opt_peephole_ffma_block(nir_block *block, void *void_state)
negate = false;
abs = false;
- mul = get_mul_for_src(&add->src[add_mul_src], swizzle, &negate, &abs);
+ mul = get_mul_for_src(&add->src[add_mul_src],
+ add->dest.dest.ssa.num_components,
+ swizzle, &negate, &abs);
if (mul != NULL)
break;
diff --git a/mesalib/src/glsl/standalone_scaffolding.cpp b/mesalib/src/glsl/standalone_scaffolding.cpp
index a109c4e92..00db61e40 100644
--- a/mesalib/src/glsl/standalone_scaffolding.cpp
+++ b/mesalib/src/glsl/standalone_scaffolding.cpp
@@ -89,7 +89,7 @@ _mesa_clear_shader_program_data(struct gl_shader_program *shProg)
{
unsigned i;
- shProg->NumUserUniformStorage = 0;
+ shProg->NumUniformStorage = 0;
shProg->UniformStorage = NULL;
shProg->NumUniformRemapTable = 0;
shProg->UniformRemapTable = NULL;
diff --git a/mesalib/src/loader/Android.mk b/mesalib/src/loader/Android.mk
index 8e215de3c..92d9fd20d 100755
--- a/mesalib/src/loader/Android.mk
+++ b/mesalib/src/loader/Android.mk
@@ -40,6 +40,8 @@ else
LOCAL_SHARED_LIBRARIES := libdrm
endif
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
+
LOCAL_MODULE := libmesa_loader
include $(MESA_COMMON_MK)
diff --git a/mesalib/src/loader/Makefile.am b/mesalib/src/loader/Makefile.am
index 36ddba82b..aef1bd61b 100755
--- a/mesalib/src/loader/Makefile.am
+++ b/mesalib/src/loader/Makefile.am
@@ -41,15 +41,11 @@ libloader_la_CPPFLAGS += \
-I$(top_builddir)/src/mesa/drivers/dri/common/ \
-I$(top_srcdir)/src/mesa/ \
-I$(top_srcdir)/src/mapi/ \
- -DUSE_DRICONF \
- $(EXPAT_CFLAGS)
+ -DUSE_DRICONF
-libloader_la_SOURCES += \
- $(top_srcdir)/src/mesa/drivers/dri/common/xmlconfig.c
+ libloader_la_LIBADD += \
+ $(top_builddir)/src/mesa/drivers/dri/common/libxmlconfig.la
-libloader_la_LIBADD += \
- -lm \
- $(EXPAT_LIBS)
endif
if !HAVE_LIBDRM
diff --git a/mesalib/src/mapi/glapi/gen/AMD_performance_monitor.xml b/mesalib/src/mapi/glapi/gen/AMD_performance_monitor.xml
index b96b263db..41b520838 100644
--- a/mesalib/src/mapi/glapi/gen/AMD_performance_monitor.xml
+++ b/mesalib/src/mapi/glapi/gen/AMD_performance_monitor.xml
@@ -5,13 +5,13 @@
<category name="GL_AMD_performance_monitor" number="360">
- <function name="GetPerfMonitorGroupsAMD" offset="assign">
+ <function name="GetPerfMonitorGroupsAMD">
<param name="numGroups" type="GLint *"/>
<param name="groupsSize" type="GLsizei"/>
<param name="groups" type="GLuint *"/>
</function>
- <function name="GetPerfMonitorCountersAMD" offset="assign">
+ <function name="GetPerfMonitorCountersAMD">
<param name="group" type="GLuint"/>
<param name="numCounters" type="GLint *"/>
<param name="maxActiveCounters" type="GLint *"/>
@@ -19,14 +19,14 @@
<param name="counters" type="GLuint *"/>
</function>
- <function name="GetPerfMonitorGroupStringAMD" offset="assign">
+ <function name="GetPerfMonitorGroupStringAMD">
<param name="group" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
<param name="groupString" type="GLchar *"/>
</function>
- <function name="GetPerfMonitorCounterStringAMD" offset="assign">
+ <function name="GetPerfMonitorCounterStringAMD">
<param name="group" type="GLuint"/>
<param name="counter" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
@@ -34,24 +34,24 @@
<param name="counterString" type="GLchar *"/>
</function>
- <function name="GetPerfMonitorCounterInfoAMD" offset="assign">
+ <function name="GetPerfMonitorCounterInfoAMD">
<param name="group" type="GLuint"/>
<param name="counter" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="data" type="GLvoid *"/>
</function>
- <function name="GenPerfMonitorsAMD" offset="assign">
+ <function name="GenPerfMonitorsAMD">
<param name="n" type="GLsizei"/>
<param name="monitors" type="GLuint *"/>
</function>
- <function name="DeletePerfMonitorsAMD" offset="assign">
+ <function name="DeletePerfMonitorsAMD">
<param name="n" type="GLsizei"/>
<param name="monitors" type="GLuint *"/>
</function>
- <function name="SelectPerfMonitorCountersAMD" offset="assign">
+ <function name="SelectPerfMonitorCountersAMD">
<param name="monitor" type="GLuint"/>
<param name="enable" type="GLboolean"/>
<param name="group" type="GLuint"/>
@@ -59,15 +59,15 @@
<param name="counterList" type="GLuint *"/>
</function>
- <function name="BeginPerfMonitorAMD" offset="assign">
+ <function name="BeginPerfMonitorAMD">
<param name="monitor" type="GLuint"/>
</function>
- <function name="EndPerfMonitorAMD" offset="assign">
+ <function name="EndPerfMonitorAMD">
<param name="monitor" type="GLuint"/>
</function>
- <function name="GetPerfMonitorCounterDataAMD" offset="assign">
+ <function name="GetPerfMonitorCounterDataAMD">
<param name="monitor" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="dataSize" type="GLsizei"/>
diff --git a/mesalib/src/mapi/glapi/gen/APPLE_object_purgeable.xml b/mesalib/src/mapi/glapi/gen/APPLE_object_purgeable.xml
index 62fa64ad2..829fc2631 100644
--- a/mesalib/src/mapi/glapi/gen/APPLE_object_purgeable.xml
+++ b/mesalib/src/mapi/glapi/gen/APPLE_object_purgeable.xml
@@ -13,21 +13,21 @@
<enum name="BUFFER_OBJECT_APPLE" value="0x85B3"/>
- <function name="ObjectPurgeableAPPLE" offset="assign">
+ <function name="ObjectPurgeableAPPLE">
<param name="objectType" type="GLenum"/>
<param name="name" type="GLuint"/>
<param name="option" type="GLenum"/>
<return type="GLenum"/>
</function>
- <function name="ObjectUnpurgeableAPPLE" offset="assign">
+ <function name="ObjectUnpurgeableAPPLE">
<param name="objectType" type="GLenum"/>
<param name="name" type="GLuint"/>
<param name="option" type="GLenum"/>
<return type="GLenum"/>
</function>
- <function name="GetObjectParameterivAPPLE" offset="assign">
+ <function name="GetObjectParameterivAPPLE">
<param name="objectType" type="GLenum"/>
<param name="name" type="GLuint"/>
<param name="pname" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/APPLE_vertex_array_object.xml b/mesalib/src/mapi/glapi/gen/APPLE_vertex_array_object.xml
index 5eb53b14e..7312f9b35 100644
--- a/mesalib/src/mapi/glapi/gen/APPLE_vertex_array_object.xml
+++ b/mesalib/src/mapi/glapi/gen/APPLE_vertex_array_object.xml
@@ -5,23 +5,21 @@
<category name="GL_APPLE_vertex_array_object" number="273">
<enum name="VERTEX_ARRAY_BINDING_APPLE" value="0x85B5"/>
- <function name="BindVertexArrayAPPLE" offset="assign"
- static_dispatch="false" deprecated="3.1">
+ <function name="BindVertexArrayAPPLE" deprecated="3.1">
<param name="array" type="GLuint"/>
</function>
- <function name="DeleteVertexArraysAPPLE" static_dispatch="false" alias="DeleteVertexArrays">
+ <function name="DeleteVertexArraysAPPLE" alias="DeleteVertexArrays">
<param name="n" type="GLsizei"/>
<param name="arrays" type="const GLuint *"/>
</function>
- <function name="GenVertexArraysAPPLE" offset="assign"
- static_dispatch="false" deprecated="3.1">
+ <function name="GenVertexArraysAPPLE" deprecated="3.1">
<param name="n" type="GLsizei"/>
<param name="arrays" type="GLuint *" count="n" output="true"/>
</function>
- <function name="IsVertexArrayAPPLE" static_dispatch="false" alias="IsVertexArray">
+ <function name="IsVertexArrayAPPLE" alias="IsVertexArray">
<param name="array" type="GLuint"/>
<return type="GLboolean"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_ES2_compatibility.xml b/mesalib/src/mapi/glapi/gen/ARB_ES2_compatibility.xml
index d15736612..c96e71c44 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_ES2_compatibility.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_ES2_compatibility.xml
@@ -18,17 +18,17 @@
<enum name="MAX_VARYING_VECTORS" value="0x8DFC"/>
<enum name="MAX_FRAGMENT_UNIFORM_VECTORS" value="0x8DFD"/>
- <function name="GetShaderPrecisionFormat" offset="assign" es2="2.0">
+ <function name="GetShaderPrecisionFormat" es2="2.0">
<param name="shadertype" type="GLenum"/>
<param name="precisiontype" type="GLenum"/>
<param name="range" type="GLint *"/>
<param name="precision" type="GLint *"/>
</function>
- <function name="ReleaseShaderCompiler" offset="assign" es2="2.0">
+ <function name="ReleaseShaderCompiler" es2="2.0">
</function>
- <function name="ShaderBinary" offset="assign" es2="2.0">
+ <function name="ShaderBinary" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="shaders" type="const GLuint *"/>
<param name="binaryformat" type="GLenum"/>
@@ -45,11 +45,11 @@
<enum name="IMPLEMENTATION_COLOR_READ_FORMAT" value="0x8B9B"/>
<!-- from GL_OES_single_precision -->
- <function name="ClearDepthf" offset="assign" es1="1.0" es2="2.0">
+ <function name="ClearDepthf" es1="1.0" es2="2.0">
<param name="depth" type="GLclampf"/>
</function>
- <function name="DepthRangef" offset="assign" es1="1.0" es2="2.0">
+ <function name="DepthRangef" es1="1.0" es2="2.0">
<param name="zNear" type="GLclampf"/>
<param name="zFar" type="GLclampf"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_base_instance.xml b/mesalib/src/mapi/glapi/gen/ARB_base_instance.xml
index 1478e3970..56de639e9 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_base_instance.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_base_instance.xml
@@ -8,8 +8,7 @@
<category name="GL_ARB_base_instance" number="107">
- <function name="DrawArraysInstancedBaseInstance" offset="assign"
- exec="dynamic">
+ <function name="DrawArraysInstancedBaseInstance" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
@@ -17,8 +16,7 @@
<param name="baseinstance" type="GLuint"/>
</function>
- <function name="DrawElementsInstancedBaseInstance" offset="assign"
- exec="dynamic">
+ <function name="DrawElementsInstancedBaseInstance" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
@@ -27,8 +25,7 @@
<param name="baseinstance" type="GLuint"/>
</function>
- <function name="DrawElementsInstancedBaseVertexBaseInstance" offset="assign"
- exec="dynamic">
+ <function name="DrawElementsInstancedBaseVertexBaseInstance" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_blend_func_extended.xml b/mesalib/src/mapi/glapi/gen/ARB_blend_func_extended.xml
index 32adcde77..406140f7d 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_blend_func_extended.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_blend_func_extended.xml
@@ -8,14 +8,14 @@
<category name="GL_ARB_blend_func_extended" number="78">
- <function name="BindFragDataLocationIndexed" offset="assign">
+ <function name="BindFragDataLocationIndexed">
<param name="program" type="GLuint"/>
<param name="colorNumber" type="GLuint"/>
<param name="index" type="GLuint"/>
<param name="name" type="const GLchar *"/>
</function>
- <function name="GetFragDataIndex" offset="assign">
+ <function name="GetFragDataIndex">
<param name="program" type="GLuint"/>
<param name="name" type="const GLchar *"/>
<return type="GLint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_clear_buffer_object.xml b/mesalib/src/mapi/glapi/gen/ARB_clear_buffer_object.xml
index cb97a0185..2284eacd6 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_clear_buffer_object.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_clear_buffer_object.xml
@@ -8,7 +8,7 @@
<category name="GL_ARB_clear_buffer_object" number="121">
- <function name ="ClearBufferData" offset="assign">
+ <function name ="ClearBufferData">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="format" type="GLenum"/>
@@ -16,7 +16,7 @@
<param name="data" type="const GLvoid *"/>
</function>
- <function name ="ClearBufferSubData" offset="assign">
+ <function name ="ClearBufferSubData">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="offset" type="GLintptr"/>
@@ -26,7 +26,7 @@
<param name="data" type="const GLvoid *"/>
</function>
-<!-- <function name="ClearNamedBufferDataEXT" offset="assign">
+<!-- <function name="ClearNamedBufferDataEXT">
<param name="buffer" type="GLuint"/>
<param name="internalformat" type="GLenum"/>
<param name="format" type="GLenum"/>
@@ -35,7 +35,7 @@
</function>
- <function name="ClearNamedBufferSubDataEXT" offset="assign">
+ <function name="ClearNamedBufferSubDataEXT">
<param name="buffer" type="GLuint"/>
<param name="internalformat" type="GLenum"/>
<param name="offset" type="GLintptr"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_clear_texture.xml b/mesalib/src/mapi/glapi/gen/ARB_clear_texture.xml
index bd9116f8b..1ff981ea8 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_clear_texture.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_clear_texture.xml
@@ -7,7 +7,7 @@
<enum name="CLEAR_TEXTURE" value="0x9365"/>
- <function name ="ClearTexImage" offset="assign">
+ <function name ="ClearTexImage">
<param name="texture" type="GLuint"/>
<param name="level" type="GLint"/>
<param name="format" type="GLenum"/>
@@ -15,7 +15,7 @@
<param name="data" type="const GLvoid *"/>
</function>
- <function name ="ClearTexSubImage" offset="assign">
+ <function name ="ClearTexSubImage">
<param name="texture" type="GLuint"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_clip_control.xml b/mesalib/src/mapi/glapi/gen/ARB_clip_control.xml
index ab1a3883e..ecce133bb 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_clip_control.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_clip_control.xml
@@ -14,7 +14,7 @@
<enum name="CLIP_ORIGIN" value = "0x935C"/>
<enum name="CLIP_DEPTH_MODE" value = "0x935D"/>
- <function name="ClipControl" offset="assign">
+ <function name="ClipControl">
<param name="origin" type="GLenum"/>
<param name="depth" type="GLenum"/>
<!-- <glx rop="1340"/> -->
diff --git a/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml b/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml
index 1db373e99..c2ec842ef 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_compute_shader.xml
@@ -26,13 +26,13 @@
<enum name="DISPATCH_INDIRECT_BUFFER_BINDING" value="0x90EF"/>
<enum name="COMPUTE_SHADER_BIT" value="0x00000020"/>
- <function name="DispatchCompute" offset="assign">
+ <function name="DispatchCompute" es2="3.1">
<param name="num_groups_x" type="GLuint"/>
<param name="num_groups_y" type="GLuint"/>
<param name="num_groups_z" type="GLuint"/>
</function>
- <function name="DispatchComputeIndirect" offset="assign">
+ <function name="DispatchComputeIndirect" es2="3.1">
<param name="indirect" type="GLintptr"/>
</function>
</category>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_copy_buffer.xml b/mesalib/src/mapi/glapi/gen/ARB_copy_buffer.xml
index 6982ed1d2..d1c6f1fec 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_copy_buffer.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_copy_buffer.xml
@@ -11,7 +11,7 @@
<enum name="COPY_READ_BUFFER" value="0x8F36"/>
<enum name="COPY_WRITE_BUFFER" value="0x8F37"/>
- <function name="CopyBufferSubData" offset="assign" es2="3.0">
+ <function name="CopyBufferSubData" es2="3.0">
<param name="readTarget" type="GLenum"/>
<param name="writeTarget" type="GLenum"/>
<param name="readOffset" type="GLintptr"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_copy_image.xml b/mesalib/src/mapi/glapi/gen/ARB_copy_image.xml
index 2fbd84557..af672cd38 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_copy_image.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_copy_image.xml
@@ -5,7 +5,7 @@
<category name="GL_ARB_copy_image" number="123">
- <function name="CopyImageSubData" offset="assign">
+ <function name="CopyImageSubData">
<param name="srcName" type="GLuint"/>
<param name="srcTarget" type="GLenum"/>
<param name="srcLevel" type="GLint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_direct_state_access.xml b/mesalib/src/mapi/glapi/gen/ARB_direct_state_access.xml
index bb9baf5a3..4c8f73ede 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -9,18 +9,18 @@
<!-- Transform Feedback object functions -->
- <function name="CreateTransformFeedbacks" offset="assign">
+ <function name="CreateTransformFeedbacks">
<param name="n" type="GLsizei" />
<param name="ids" type="GLuint *" />
</function>
- <function name="TransformFeedbackBufferBase" offset="assign">
+ <function name="TransformFeedbackBufferBase">
<param name="xfb" type="GLuint" />
<param name="index" type="GLuint" />
<param name="buffer" type="GLuint" />
</function>
- <function name="TransformFeedbackBufferRange" offset="assign">
+ <function name="TransformFeedbackBufferRange">
<param name="xfb" type="GLuint" />
<param name="index" type="GLuint" />
<param name="buffer" type="GLuint" />
@@ -28,20 +28,20 @@
<param name="size" type="GLsizeiptr" />
</function>
- <function name="GetTransformFeedbackiv" offset="assign">
+ <function name="GetTransformFeedbackiv">
<param name="xfb" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="GLint *" />
</function>
- <function name="GetTransformFeedbacki_v" offset="assign">
+ <function name="GetTransformFeedbacki_v">
<param name="xfb" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="index" type="GLuint" />
<param name="param" type="GLint *" />
</function>
- <function name="GetTransformFeedbacki64_v" offset="assign">
+ <function name="GetTransformFeedbacki64_v">
<param name="xfb" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="index" type="GLuint" />
@@ -50,33 +50,33 @@
<!-- Buffer object functions -->
- <function name="CreateBuffers" offset="assign">
+ <function name="CreateBuffers">
<param name="n" type="GLsizei" />
<param name="buffers" type="GLuint *" />
</function>
- <function name="NamedBufferStorage" offset="assign">
+ <function name="NamedBufferStorage">
<param name="buffer" type="GLuint" />
<param name="size" type="GLsizeiptr" />
<param name="data" type="const GLvoid *" />
<param name="flags" type="GLbitfield" />
</function>
- <function name="NamedBufferData" offset="assign">
+ <function name="NamedBufferData">
<param name="buffer" type="GLuint" />
<param name="size" type="GLsizeiptr" />
<param name="data" type="const GLvoid *" />
<param name="usage" type="GLenum" />
</function>
- <function name="NamedBufferSubData" offset="assign">
+ <function name="NamedBufferSubData">
<param name="buffer" type="GLuint" />
<param name="offset" type="GLintptr" />
<param name="size" type="GLsizeiptr" />
<param name="data" type="const GLvoid *" />
</function>
- <function name="CopyNamedBufferSubData" offset="assign">
+ <function name="CopyNamedBufferSubData">
<param name="readBuffer" type="GLuint" />
<param name="writeBuffer" type="GLuint" />
<param name="readOffset" type="GLintptr" />
@@ -84,7 +84,7 @@
<param name="size" type="GLsizeiptr" />
</function>
- <function name="ClearNamedBufferData" offset="assign">
+ <function name="ClearNamedBufferData">
<param name="buffer" type="GLuint" />
<param name="internalformat" type="GLenum" />
<param name="format" type="GLenum" />
@@ -92,7 +92,7 @@
<param name="data" type="const GLvoid *" />
</function>
- <function name="ClearNamedBufferSubData" offset="assign">
+ <function name="ClearNamedBufferSubData">
<param name="buffer" type="GLuint" />
<param name="internalformat" type="GLenum" />
<param name="offset" type="GLintptr" />
@@ -102,13 +102,13 @@
<param name="data" type="const GLvoid *" />
</function>
- <function name="MapNamedBuffer" offset="assign">
+ <function name="MapNamedBuffer">
<return type="GLvoid *" />
<param name="buffer" type="GLuint" />
<param name="access" type="GLenum" />
</function>
- <function name="MapNamedBufferRange" offset="assign">
+ <function name="MapNamedBufferRange">
<return type="GLvoid *" />
<param name="buffer" type="GLuint" />
<param name="offset" type="GLintptr" />
@@ -116,36 +116,36 @@
<param name="access" type="GLbitfield" />
</function>
- <function name="UnmapNamedBuffer" offset="assign">
+ <function name="UnmapNamedBuffer">
<return type="GLboolean" />
<param name="buffer" type="GLuint" />
</function>
- <function name="FlushMappedNamedBufferRange" offset="assign">
+ <function name="FlushMappedNamedBufferRange">
<param name="buffer" type="GLuint" />
<param name="offset" type="GLintptr" />
<param name="length" type="GLsizeiptr" />
</function>
- <function name="GetNamedBufferParameteriv" offset="assign">
+ <function name="GetNamedBufferParameteriv">
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
</function>
- <function name="GetNamedBufferParameteri64v" offset="assign">
+ <function name="GetNamedBufferParameteri64v">
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint64 *" />
</function>
- <function name="GetNamedBufferPointerv" offset="assign">
+ <function name="GetNamedBufferPointerv">
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLvoid **" />
</function>
- <function name="GetNamedBufferSubData" offset="assign">
+ <function name="GetNamedBufferSubData">
<param name="buffer" type="GLuint" />
<param name="offset" type="GLintptr" />
<param name="size" type="GLsizeiptr" />
@@ -283,19 +283,19 @@
<!-- Renderbuffer object functions -->
- <function name="CreateRenderbuffers" offset="assign">
+ <function name="CreateRenderbuffers">
<param name="n" type="GLsizei" />
<param name="renderbuffers" type="GLuint *" />
</function>
- <function name="NamedRenderbufferStorage" offset="assign">
+ <function name="NamedRenderbufferStorage">
<param name="renderbuffer" type="GLuint" />
<param name="internalformat" type="GLenum" />
<param name="width" type="GLsizei" />
<param name="height" type="GLsizei" />
</function>
- <function name="NamedRenderbufferStorageMultisample" offset="assign">
+ <function name="NamedRenderbufferStorageMultisample">
<param name="renderbuffer" type="GLuint" />
<param name="samples" type="GLsizei" />
<param name="internalformat" type="GLenum" />
@@ -303,7 +303,7 @@
<param name="height" type="GLsizei" />
</function>
- <function name="GetNamedRenderbufferParameteriv" offset="assign">
+ <function name="GetNamedRenderbufferParameteriv">
<param name="renderbuffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
@@ -311,19 +311,19 @@
<!-- Texture object functions -->
- <function name="CreateTextures" offset="assign">
+ <function name="CreateTextures">
<param name="target" type="GLenum" />
<param name="n" type="GLsizei" />
<param name="textures" type="GLuint *" />
</function>
- <function name="TextureBuffer" offset="assign">
+ <function name="TextureBuffer">
<param name="texture" type="GLuint" />
<param name="internalformat" type="GLenum" />
<param name="buffer" type="GLuint" />
</function>
- <function name="TextureBufferRange" offset="assign">
+ <function name="TextureBufferRange">
<param name="texture" type="GLuint" />
<param name="internalformat" type="GLenum" />
<param name="buffer" type="GLuint" />
@@ -331,14 +331,14 @@
<param name="size" type="GLsizeiptr" />
</function>
- <function name="TextureStorage1D" offset="assign">
+ <function name="TextureStorage1D">
<param name="texture" type="GLuint" />
<param name="levels" type="GLsizei" />
<param name="internalformat" type="GLenum" />
<param name="width" type="GLsizei" />
</function>
- <function name="TextureStorage2D" offset="assign">
+ <function name="TextureStorage2D">
<param name="texture" type="GLuint" />
<param name="levels" type="GLsizei" />
<param name="internalformat" type="GLenum" />
@@ -346,7 +346,7 @@
<param name="height" type="GLsizei" />
</function>
- <function name="TextureStorage3D" offset="assign">
+ <function name="TextureStorage3D">
<param name="texture" type="GLuint" />
<param name="levels" type="GLsizei" />
<param name="internalformat" type="GLenum" />
@@ -355,7 +355,7 @@
<param name="depth" type="GLsizei" />
</function>
- <function name="TextureStorage2DMultisample" offset="assign">
+ <function name="TextureStorage2DMultisample">
<param name="texture" type="GLuint" />
<param name="samples" type="GLsizei" />
<param name="internalformat" type="GLenum" />
@@ -364,7 +364,7 @@
<param name="fixedsamplelocations" type="GLboolean" />
</function>
- <function name="TextureStorage3DMultisample" offset="assign">
+ <function name="TextureStorage3DMultisample">
<param name="texture" type="GLuint" />
<param name="samples" type="GLsizei" />
<param name="internalformat" type="GLenum" />
@@ -374,7 +374,7 @@
<param name="fixedsamplelocations" type="GLboolean" />
</function>
- <function name="TextureSubImage1D" offset="assign">
+ <function name="TextureSubImage1D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -384,7 +384,7 @@
<param name="pixels" type="const GLvoid *" />
</function>
- <function name="TextureSubImage2D" offset="assign">
+ <function name="TextureSubImage2D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -396,7 +396,7 @@
<param name="pixels" type="const GLvoid *" />
</function>
- <function name="TextureSubImage3D" offset="assign">
+ <function name="TextureSubImage3D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -410,7 +410,7 @@
<param name="pixels" type="const GLvoid *" />
</function>
- <function name="CompressedTextureSubImage1D" offset="assign">
+ <function name="CompressedTextureSubImage1D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -420,7 +420,7 @@
<param name="data" type="const GLvoid *" />
</function>
- <function name="CompressedTextureSubImage2D" offset="assign">
+ <function name="CompressedTextureSubImage2D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -432,7 +432,7 @@
<param name="data" type="const GLvoid *" />
</function>
- <function name="CompressedTextureSubImage3D" offset="assign">
+ <function name="CompressedTextureSubImage3D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -446,7 +446,7 @@
<param name="data" type="const GLvoid *" />
</function>
- <function name="CopyTextureSubImage1D" offset="assign">
+ <function name="CopyTextureSubImage1D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -455,7 +455,7 @@
<param name="width" type="GLsizei" />
</function>
- <function name="CopyTextureSubImage2D" offset="assign">
+ <function name="CopyTextureSubImage2D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -466,7 +466,7 @@
<param name="height" type="GLsizei" />
</function>
- <function name="CopyTextureSubImage3D" offset="assign">
+ <function name="CopyTextureSubImage3D">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="xoffset" type="GLint" />
@@ -478,52 +478,52 @@
<param name="height" type="GLsizei" />
</function>
- <function name="TextureParameterf" offset="assign">
+ <function name="TextureParameterf">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="GLfloat" />
</function>
- <function name="TextureParameterfv" offset="assign">
+ <function name="TextureParameterfv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="const GLfloat *" />
</function>
- <function name="TextureParameteri" offset="assign">
+ <function name="TextureParameteri">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="GLint" />
</function>
- <function name="TextureParameterIiv" offset="assign">
+ <function name="TextureParameterIiv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLint *" />
</function>
- <function name="TextureParameterIuiv" offset="assign">
+ <function name="TextureParameterIuiv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="const GLuint *" />
</function>
- <function name="TextureParameteriv" offset="assign">
+ <function name="TextureParameteriv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="const GLint *" />
</function>
- <function name="GenerateTextureMipmap" offset="assign">
+ <function name="GenerateTextureMipmap">
<param name="texture" type="GLuint" />
</function>
- <function name="BindTextureUnit" offset="assign">
+ <function name="BindTextureUnit">
<param name="unit" type="GLuint" />
<param name="texture" type="GLuint" />
</function>
- <function name="GetTextureImage" offset="assign">
+ <function name="GetTextureImage">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="format" type="GLenum" />
@@ -532,46 +532,46 @@
<param name="pixels" type="GLvoid *" />
</function>
- <function name="GetCompressedTextureImage" offset="assign">
+ <function name="GetCompressedTextureImage">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="bufSize" type="GLsizei" />
<param name="pixels" type="GLvoid *" />
</function>
- <function name="GetTextureLevelParameterfv" offset="assign">
+ <function name="GetTextureLevelParameterfv">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLfloat *" />
</function>
- <function name="GetTextureLevelParameteriv" offset="assign">
+ <function name="GetTextureLevelParameteriv">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
</function>
- <function name="GetTextureParameterfv" offset="assign">
+ <function name="GetTextureParameterfv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLfloat *" />
</function>
- <function name="GetTextureParameterIiv" offset="assign">
+ <function name="GetTextureParameterIiv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
</function>
- <function name="GetTextureParameterIuiv" offset="assign">
+ <function name="GetTextureParameterIuiv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLuint *" />
</function>
- <function name="GetTextureParameteriv" offset="assign">
+ <function name="GetTextureParameteriv">
<param name="texture" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
@@ -579,27 +579,27 @@
<!-- Vertex Array object functions -->
- <function name="CreateVertexArrays" offset="assign">
+ <function name="CreateVertexArrays">
<param name="n" type="GLsizei" />
<param name="arrays" type="GLuint *" />
</function>
- <function name="DisableVertexArrayAttrib" offset="assign">
+ <function name="DisableVertexArrayAttrib">
<param name="vaobj" type="GLuint" />
<param name="index" type="GLuint" />
</function>
- <function name="EnableVertexArrayAttrib" offset="assign">
+ <function name="EnableVertexArrayAttrib">
<param name="vaobj" type="GLuint" />
<param name="index" type="GLuint" />
</function>
- <function name="VertexArrayElementBuffer" offset="assign">
+ <function name="VertexArrayElementBuffer">
<param name="vaobj" type="GLuint" />
<param name="buffer" type="GLuint" />
</function>
- <function name="VertexArrayVertexBuffer" offset="assign">
+ <function name="VertexArrayVertexBuffer">
<param name="vaobj" type="GLuint" />
<param name="bindingindex" type="GLuint" />
<param name="buffer" type="GLuint" />
@@ -607,7 +607,7 @@
<param name="stride" type="GLsizei" />
</function>
- <function name="VertexArrayVertexBuffers" offset="assign">
+ <function name="VertexArrayVertexBuffers">
<param name="vaobj" type="GLuint" />
<param name="first" type="GLuint" />
<param name="count" type="GLsizei" />
@@ -616,7 +616,7 @@
<param name="strides" type="const GLsizei *" />
</function>
- <function name="VertexArrayAttribFormat" offset="assign">
+ <function name="VertexArrayAttribFormat">
<param name="vaobj" type="GLuint" />
<param name="attribindex" type="GLuint" />
<param name="size" type="GLint" />
@@ -625,7 +625,7 @@
<param name="relativeoffset" type="GLuint" />
</function>
- <function name="VertexArrayAttribIFormat" offset="assign">
+ <function name="VertexArrayAttribIFormat">
<param name="vaobj" type="GLuint" />
<param name="attribindex" type="GLuint" />
<param name="size" type="GLint" />
@@ -633,7 +633,7 @@
<param name="relativeoffset" type="GLuint" />
</function>
- <function name="VertexArrayAttribLFormat" offset="assign">
+ <function name="VertexArrayAttribLFormat">
<param name="vaobj" type="GLuint" />
<param name="attribindex" type="GLuint" />
<param name="size" type="GLint" />
@@ -641,32 +641,32 @@
<param name="relativeoffset" type="GLuint" />
</function>
- <function name="VertexArrayAttribBinding" offset="assign">
+ <function name="VertexArrayAttribBinding">
<param name="vaobj" type="GLuint" />
<param name="attribindex" type="GLuint" />
<param name="bindingindex" type="GLuint" />
</function>
- <function name="VertexArrayBindingDivisor" offset="assign">
+ <function name="VertexArrayBindingDivisor">
<param name="vaobj" type="GLuint" />
<param name="bindingindex" type="GLuint" />
<param name="divisor" type="GLuint" />
</function>
- <function name="GetVertexArrayiv" offset="assign">
+ <function name="GetVertexArrayiv">
<param name="vaobj" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="GLint *" />
</function>
- <function name="GetVertexArrayIndexediv" offset="assign">
+ <function name="GetVertexArrayIndexediv">
<param name="vaobj" type="GLuint" />
<param name="index" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="param" type="GLint *" />
</function>
- <function name="GetVertexArrayIndexed64iv" offset="assign">
+ <function name="GetVertexArrayIndexed64iv">
<param name="vaobj" type="GLuint" />
<param name="index" type="GLuint" />
<param name="pname" type="GLenum" />
@@ -675,48 +675,48 @@
<!-- Sampler object functions -->
- <function name="CreateSamplers" offset="assign">
+ <function name="CreateSamplers">
<param name="n" type="GLsizei" />
<param name="samplers" type="GLuint *" />
</function>
<!-- Program Pipeline object functions -->
- <function name="CreateProgramPipelines" offset="assign">
+ <function name="CreateProgramPipelines">
<param name="n" type="GLsizei" />
<param name="pipelines" type="GLuint *" />
</function>
<!-- Query object functions -->
- <function name="CreateQueries" offset="assign">
+ <function name="CreateQueries">
<param name="target" type="GLenum" />
<param name="n" type="GLsizei" />
<param name="ids" type="GLuint *" />
</function>
- <function name="GetQueryBufferObjectiv" offset="assign">
+ <function name="GetQueryBufferObjectiv">
<param name="id" type="GLuint" />
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="offset" type="GLintptr" />
</function>
- <function name="GetQueryBufferObjectuiv" offset="assign">
+ <function name="GetQueryBufferObjectuiv">
<param name="id" type="GLuint" />
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="offset" type="GLintptr" />
</function>
- <function name="GetQueryBufferObjecti64v" offset="assign">
+ <function name="GetQueryBufferObjecti64v">
<param name="id" type="GLuint" />
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="offset" type="GLintptr" />
</function>
- <function name="GetQueryBufferObjectui64v" offset="assign">
+ <function name="GetQueryBufferObjectui64v">
<param name="id" type="GLuint" />
<param name="buffer" type="GLuint" />
<param name="pname" type="GLenum" />
diff --git a/mesalib/src/mapi/glapi/gen/ARB_draw_buffers_blend.xml b/mesalib/src/mapi/glapi/gen/ARB_draw_buffers_blend.xml
index 0b6947cc5..8c33fbf89 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_draw_buffers_blend.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_draw_buffers_blend.xml
@@ -8,24 +8,24 @@
<category name="GL_ARB_draw_buffers_blend" number="69">
- <function name="BlendEquationiARB" offset="assign">
+ <function name="BlendEquationiARB">
<param name="buf" type="GLuint"/>
<param name="mode" type="GLenum"/>
</function>
- <function name="BlendEquationSeparateiARB" offset="assign">
+ <function name="BlendEquationSeparateiARB">
<param name="buf" type="GLuint"/>
<param name="modeRGB" type="GLenum"/>
<param name="modeA" type="GLenum"/>
</function>
- <function name="BlendFunciARB" offset="assign">
+ <function name="BlendFunciARB">
<param name="buf" type="GLuint"/>
<param name="src" type="GLenum"/>
<param name="dst" type="GLenum"/>
</function>
- <function name="BlendFuncSeparateiARB" offset="assign">
+ <function name="BlendFuncSeparateiARB">
<param name="buf" type="GLuint"/>
<param name="srcRGB" type="GLenum"/>
<param name="dstRGB" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml b/mesalib/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
index 986654848..120bda13d 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml
@@ -8,7 +8,7 @@
<category name="GL_ARB_draw_elements_base_vertex" number="62">
- <function name="DrawElementsBaseVertex" offset="assign" exec="dynamic">
+ <function name="DrawElementsBaseVertex" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
@@ -16,8 +16,7 @@
<param name="basevertex" type="GLint"/>
</function>
- <function name="DrawRangeElementsBaseVertex" offset="assign"
- exec="dynamic">
+ <function name="DrawRangeElementsBaseVertex" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="start" type="GLuint"/>
<param name="end" type="GLuint"/>
@@ -27,8 +26,7 @@
<param name="basevertex" type="GLint"/>
</function>
- <function name="MultiDrawElementsBaseVertex" offset="assign"
- exec="dynamic">
+ <function name="MultiDrawElementsBaseVertex" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="const GLsizei *"/>
<param name="type" type="GLenum"/>
@@ -37,8 +35,7 @@
<param name="basevertex" type="const GLint *"/>
</function>
- <function name="DrawElementsInstancedBaseVertex" offset="assign"
- exec="dynamic">
+ <function name="DrawElementsInstancedBaseVertex" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_draw_indirect.xml b/mesalib/src/mapi/glapi/gen/ARB_draw_indirect.xml
index 7de03cd35..3b29d6b86 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_draw_indirect.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_draw_indirect.xml
@@ -8,12 +8,12 @@
<enum name="DRAW_INDIRECT_BUFFER" value="0x8F3F"/>
<enum name="DRAW_INDIRECT_BUFFER_BINDING" value="0x8F43"/>
- <function name="DrawArraysIndirect" offset="assign" exec="dynamic">
+ <function name="DrawArraysIndirect" exec="dynamic" es2="3.1">
<param name="mode" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
</function>
- <function name="DrawElementsIndirect" offset="assign" exec="dynamic">
+ <function name="DrawElementsIndirect" exec="dynamic" es2="3.1">
<param name="mode" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
@@ -24,14 +24,14 @@
<category name="GL_ARB_multi_draw_indirect" number="133">
- <function name="MultiDrawArraysIndirect" offset="assign" exec="dynamic">
+ <function name="MultiDrawArraysIndirect" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
<param name="primcount" type="GLsizei"/>
<param name="stride" type="GLsizei"/>
</function>
- <function name="MultiDrawElementsIndirect" offset="assign" exec="dynamic">
+ <function name="MultiDrawElementsIndirect" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="indirect" type="const GLvoid *"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_draw_instanced.xml b/mesalib/src/mapi/glapi/gen/ARB_draw_instanced.xml
index 7ee7629c7..b1c822144 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_draw_instanced.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_draw_instanced.xml
@@ -8,14 +8,14 @@
<category name="GL_ARB_draw_instanced" number="44">
- <function name="DrawArraysInstancedARB" offset="assign" exec="dynamic">
+ <function name="DrawArraysInstancedARB" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="primcount" type="GLsizei"/>
</function>
- <function name="DrawElementsInstancedARB" offset="assign" exec="dynamic">
+ <function name="DrawElementsInstancedARB" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_framebuffer_object.xml b/mesalib/src/mapi/glapi/gen/ARB_framebuffer_object.xml
index 999a8ef13..1573e7e96 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_framebuffer_object.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_framebuffer_object.xml
@@ -140,33 +140,31 @@
- <function name="IsRenderbuffer" es2="2.0" offset="assign">
+ <function name="IsRenderbuffer" es2="2.0">
<param name="renderbuffer" type="GLuint"/>
<return type="GLboolean"/>
<glx vendorpriv="1422"/>
</function>
- <function name="BindRenderbuffer" es2="2.0" offset="assign">
+ <function name="BindRenderbuffer" es2="2.0">
<param name="target" type="GLenum"/>
<param name="renderbuffer" type="GLuint"/>
<glx rop="235"/>
</function>
- <function name="DeleteRenderbuffers"
- es2="2.0" offset="assign">
+ <function name="DeleteRenderbuffers" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="renderbuffers" type="const GLuint *" count="n"/>
<glx rop="4317"/>
</function>
- <function name="GenRenderbuffers" es2="2.0" offset="assign">
+ <function name="GenRenderbuffers" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="renderbuffers" type="GLuint *" count="n" output="true"/>
<glx vendorpriv="1423" always_array="true"/>
</function>
- <function name="RenderbufferStorage"
- es2="2.0" offset="assign">
+ <function name="RenderbufferStorage" es2="2.0">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -174,7 +172,7 @@
<glx rop="4318"/>
</function>
- <function name="RenderbufferStorageMultisample" offset="assign" es2="3.0">
+ <function name="RenderbufferStorageMultisample" es2="3.0">
<param name="target" type="GLenum"/>
<param name="samples" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
@@ -183,46 +181,44 @@
<glx rop="4331"/>
</function>
- <function name="GetRenderbufferParameteriv" es2="2.0" offset="assign">
+ <function name="GetRenderbufferParameteriv" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true"/>
<glx vendorpriv="1424"/>
</function>
- <function name="IsFramebuffer" es2="2.0" offset="assign">
+ <function name="IsFramebuffer" es2="2.0">
<param name="framebuffer" type="GLuint"/>
<return type="GLboolean"/>
<glx vendorpriv="1425"/>
</function>
- <function name="BindFramebuffer" es2="2.0" offset="assign">
+ <function name="BindFramebuffer" es2="2.0">
<param name="target" type="GLenum"/>
<param name="framebuffer" type="GLuint"/>
<glx rop="236"/>
</function>
- <function name="DeleteFramebuffers"
- es2="2.0" offset="assign">
+ <function name="DeleteFramebuffers" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="framebuffers" type="const GLuint *" count="n"/>
<glx rop="4320"/>
</function>
- <function name="GenFramebuffers" es2="2.0" offset="assign">
+ <function name="GenFramebuffers" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="framebuffers" type="GLuint *" count="n" output="true"/>
<glx vendorpriv="1426" always_array="true"/>
</function>
- <function name="CheckFramebufferStatus"
- es2="2.0" offset="assign">
+ <function name="CheckFramebufferStatus" es2="2.0">
<param name="target" type="GLenum"/>
<return type="GLenum"/>
<glx vendorpriv="1427"/>
</function>
- <function name="FramebufferTexture1D" offset="assign">
+ <function name="FramebufferTexture1D">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="textarget" type="GLenum"/>
@@ -231,8 +227,7 @@
<glx rop="4321"/>
</function>
- <function name="FramebufferTexture2D"
- es2="2.0" offset="assign">
+ <function name="FramebufferTexture2D" es2="2.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="textarget" type="GLenum"/>
@@ -241,7 +236,7 @@
<glx rop="4322"/>
</function>
- <function name="FramebufferTexture3D" offset="assign">
+ <function name="FramebufferTexture3D">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="textarget" type="GLenum"/>
@@ -251,7 +246,7 @@
<glx rop="4323"/>
</function>
- <function name="FramebufferTextureLayer" es2="3.0" offset="assign">
+ <function name="FramebufferTextureLayer" es2="3.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="texture" type="GLuint"/>
@@ -260,8 +255,7 @@
<glx rop="237"/>
</function>
- <function name="FramebufferRenderbuffer"
- es2="2.0" offset="assign">
+ <function name="FramebufferRenderbuffer" es2="2.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="renderbuffertarget" type="GLenum"/>
@@ -269,7 +263,7 @@
<glx rop="4324"/>
</function>
- <function name="GetFramebufferAttachmentParameteriv" es2="2.0" offset="assign">
+ <function name="GetFramebufferAttachmentParameteriv" es2="2.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="pname" type="GLenum"/>
@@ -277,7 +271,7 @@
<glx vendorpriv="1428"/>
</function>
- <function name="BlitFramebuffer" es2="3.0" offset="assign">
+ <function name="BlitFramebuffer" es2="3.0">
<param name="srcX0" type="GLint"/>
<param name="srcY0" type="GLint"/>
<param name="srcX1" type="GLint"/>
@@ -291,7 +285,7 @@
<glx rop="4330"/>
</function>
- <function name="GenerateMipmap" es2="2.0" offset="assign">
+ <function name="GenerateMipmap" es2="2.0">
<param name="target" type="GLenum"/>
<glx rop="4325"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_geometry_shader4.xml b/mesalib/src/mapi/glapi/gen/ARB_geometry_shader4.xml
index e62047c9b..280e7a075 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_geometry_shader4.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_geometry_shader4.xml
@@ -45,7 +45,7 @@
<param name="level" type="GLint"/>
<param name="layer" type="GLint"/>
</function>
- <function name="FramebufferTextureFaceARB" exec="skip" offset="assign">
+ <function name="FramebufferTextureFaceARB" exec="skip">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="texture" type="GLuint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_get_program_binary.xml b/mesalib/src/mapi/glapi/gen/ARB_get_program_binary.xml
index e84d0678e..25e0a37c8 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_get_program_binary.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_get_program_binary.xml
@@ -11,7 +11,7 @@
<enum name="NUM_PROGRAM_BINARY_FORMATS" value="0x87FE"/>
<enum name="PROGRAM_BINARY_FORMATS" value="0x87FF"/>
- <function name="GetProgramBinary" offset="assign" es2="3.0">
+ <function name="GetProgramBinary" es2="3.0">
<param name="program" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
@@ -19,14 +19,14 @@
<param name="binary" type="GLvoid *"/>
</function>
- <function name="ProgramBinary" offset="assign" es2="3.0">
+ <function name="ProgramBinary" es2="3.0">
<param name="program" type="GLuint"/>
<param name="binaryFormat" type="GLenum"/>
<param name="binary" type="const GLvoid *"/>
<param name="length" type="GLsizei"/>
</function>
- <function name="ProgramParameteri" offset="assign" es2="3.0">
+ <function name="ProgramParameteri" es2="3.0">
<param name="program" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="value" type="GLint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_gpu_shader_fp64.xml b/mesalib/src/mapi/glapi/gen/ARB_gpu_shader_fp64.xml
index 4f860ef8c..fd1ad117e 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_gpu_shader_fp64.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_gpu_shader_fp64.xml
@@ -5,25 +5,25 @@
<category name="GL_ARB_gpu_shader_fp64" number="89">
- <function name="Uniform1d" offset="assign">
+ <function name="Uniform1d">
<param name="location" type="GLint"/>
<param name="x" type="GLdouble"/>
</function>
- <function name="Uniform2d" offset="assign">
+ <function name="Uniform2d">
<param name="location" type="GLint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
</function>
- <function name="Uniform3d" offset="assign">
+ <function name="Uniform3d">
<param name="location" type="GLint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
</function>
- <function name="Uniform4d" offset="assign">
+ <function name="Uniform4d">
<param name="location" type="GLint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
@@ -31,94 +31,94 @@
<param name="w" type="GLdouble"/>
</function>
- <function name="Uniform1dv" offset="assign">
+ <function name="Uniform1dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="Uniform2dv" offset="assign">
+ <function name="Uniform2dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="Uniform3dv" offset="assign">
+ <function name="Uniform3dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="Uniform4dv" offset="assign">
+ <function name="Uniform4dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix2dv" offset="assign">
+ <function name="UniformMatrix2dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix3dv" offset="assign">
+ <function name="UniformMatrix3dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix4dv" offset="assign">
+ <function name="UniformMatrix4dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix2x3dv" offset="assign">
+ <function name="UniformMatrix2x3dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix2x4dv" offset="assign">
+ <function name="UniformMatrix2x4dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix3x2dv" offset="assign">
+ <function name="UniformMatrix3x2dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix3x4dv" offset="assign">
+ <function name="UniformMatrix3x4dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix4x2dv" offset="assign">
+ <function name="UniformMatrix4x2dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="UniformMatrix4x3dv" offset="assign">
+ <function name="UniformMatrix4x3dv">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLdouble *"/>
</function>
- <function name="GetUniformdv" offset="assign">
+ <function name="GetUniformdv">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="params" type="GLdouble *"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_internalformat_query.xml b/mesalib/src/mapi/glapi/gen/ARB_internalformat_query.xml
index 70a2a3109..16d14b1b7 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_internalformat_query.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_internalformat_query.xml
@@ -8,8 +8,7 @@
<enum name="NUM_SAMPLE_COUNTS" value="0x9380"/>
- <function name="GetInternalformativ" offset="assign" static_dispatch="false"
- es2="3.0">
+ <function name="GetInternalformativ" es2="3.0">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="pname" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_invalidate_subdata.xml b/mesalib/src/mapi/glapi/gen/ARB_invalidate_subdata.xml
index 31b515cdb..052816ad7 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_invalidate_subdata.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_invalidate_subdata.xml
@@ -3,7 +3,7 @@
<OpenGLAPI>
<category name="GL_ARB_invalidate_subdata" number="666">
- <function name="InvalidateTexSubImage" offset="assign">
+ <function name="InvalidateTexSubImage">
<param name="texture" type="GLuint"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -14,22 +14,22 @@
<param name="depth" type="GLsizei"/>
</function>
- <function name="InvalidateTexImage" offset="assign">
+ <function name="InvalidateTexImage">
<param name="texture" type="GLuint"/>
<param name="level" type="GLint"/>
</function>
- <function name="InvalidateBufferSubData" offset="assign">
+ <function name="InvalidateBufferSubData">
<param name="buffer" type="GLuint"/>
<param name="offset" type="GLintptr"/>
<param name="length" type="GLsizeiptr"/>
</function>
- <function name="InvalidateBufferData" offset="assign">
+ <function name="InvalidateBufferData">
<param name="buffer" type="GLuint"/>
</function>
- <function name="InvalidateSubFramebuffer" offset="assign" es2="3.0">
+ <function name="InvalidateSubFramebuffer" es2="3.0">
<param name="target" type="GLenum"/>
<param name="numAttachments" type="GLsizei" counter="true"/>
<param name="attachments" type="const GLenum *" count="numAttachments"/>
@@ -39,7 +39,7 @@
<param name="height" type="GLsizei"/>
</function>
- <function name="InvalidateFramebuffer" offset="assign" es2="3.0">
+ <function name="InvalidateFramebuffer" es2="3.0">
<param name="target" type="GLenum"/>
<param name="numAttachments" type="GLsizei" counter="true"/>
<param name="attachments" type="const GLenum *" count="numAttachments"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_map_buffer_range.xml b/mesalib/src/mapi/glapi/gen/ARB_map_buffer_range.xml
index d87450446..cf7b21148 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_map_buffer_range.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_map_buffer_range.xml
@@ -15,7 +15,7 @@
<enum name="MAP_FLUSH_EXPLICIT_BIT" value="0x0010"/>
<enum name="MAP_UNSYNCHRONIZED_BIT" value="0x0020"/>
- <function name="MapBufferRange" offset="assign" es2="3.0">
+ <function name="MapBufferRange" es2="3.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="length" type="GLsizeiptr"/>
@@ -23,7 +23,7 @@
<return type="GLvoid *"/>
</function>
- <function name="FlushMappedBufferRange" offset="assign" es2="3.0">
+ <function name="FlushMappedBufferRange" es2="3.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="length" type="GLsizeiptr"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_multi_bind.xml b/mesalib/src/mapi/glapi/gen/ARB_multi_bind.xml
index 4f2f2a259..f42eaa28e 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_multi_bind.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_multi_bind.xml
@@ -7,14 +7,14 @@
<category name="GL_ARB_multi_bind" number="147">
- <function name="BindBuffersBase" offset="assign">
+ <function name="BindBuffersBase">
<param name="target" type="GLenum"/>
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="buffers" type="const GLuint *"/>
</function>
- <function name="BindBuffersRange" offset="assign">
+ <function name="BindBuffersRange">
<param name="target" type="GLenum"/>
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
@@ -23,25 +23,25 @@
<param name="sizes" type="const GLsizeiptr *"/>
</function>
- <function name="BindTextures" offset="assign">
+ <function name="BindTextures">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="textures" type="const GLuint *"/>
</function>
- <function name="BindSamplers" offset="assign">
+ <function name="BindSamplers">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="samplers" type="const GLuint *"/>
</function>
- <function name="BindImageTextures" offset="assign">
+ <function name="BindImageTextures">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="textures" type="const GLuint *"/>
</function>
- <function name="BindVertexBuffers" offset="assign">
+ <function name="BindVertexBuffers">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="buffers" type="const GLuint *"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_program_interface_query.xml b/mesalib/src/mapi/glapi/gen/ARB_program_interface_query.xml
index 59eb59c64..c3162f5ed 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_program_interface_query.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_program_interface_query.xml
@@ -56,21 +56,21 @@
<enum name="NUM_COMPATIBLE_SUBROUTINES" value="0x8E4A"/>
<enum name="COMPATIBLE_SUBROUTINES" value="0x8E4B"/>
- <function name="GetProgramInterfaceiv" offset="assign">
+ <function name="GetProgramInterfaceiv" es2="3.1">
<param name="program" type="GLuint"/>
<param name="programInterface" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true"/>
</function>
- <function name="GetProgramResourceIndex" offset="assign">
+ <function name="GetProgramResourceIndex" es2="3.1">
<param name="program" type="GLuint"/>
<param name="programInterface" type="GLenum"/>
<param name="name" type="const GLchar *"/>
<return type="GLuint"/>
</function>
- <function name="GetProgramResourceName" offset="assign">
+ <function name="GetProgramResourceName" es2="3.1">
<param name="program" type="GLuint"/>
<param name="programInterface" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -79,7 +79,7 @@
<param name="name" type="GLchar *" output="true"/>
</function>
- <function name="GetProgramResourceiv" offset="assign">
+ <function name="GetProgramResourceiv" es2="3.1">
<param name="program" type="GLuint"/>
<param name="programInterface" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -90,14 +90,14 @@
<param name="params" type="GLint *" output="true"/>
</function>
- <function name="GetProgramResourceLocation" offset="assign">
+ <function name="GetProgramResourceLocation" es2="3.1">
<param name="program" type="GLuint"/>
<param name="programInterface" type="GLenum"/>
<param name="name" type="const GLchar *"/>
<return type="GLint"/>
</function>
- <function name="GetProgramResourceLocationIndex" offset="assign">
+ <function name="GetProgramResourceLocationIndex">
<param name="program" type="GLuint"/>
<param name="programInterface" type="GLenum"/>
<param name="name" type="const GLchar *"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_robustness.xml b/mesalib/src/mapi/glapi/gen/ARB_robustness.xml
index 65843149c..9b2f2f0a7 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_robustness.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_robustness.xml
@@ -20,26 +20,26 @@
<enum name="CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB" value="0x00000004"/>
- <function name="GetGraphicsResetStatusARB" offset="assign">
+ <function name="GetGraphicsResetStatusARB">
<return type="GLenum"/>
</function>
<!-- OpenGL 1.0 sized buffer queries -->
- <function name="GetnMapdvARB" offset="assign" deprecated="3.1">
+ <function name="GetnMapdvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="query" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
<param name="v" type="GLdouble *" output="true"/>
</function>
- <function name="GetnMapfvARB" offset="assign" deprecated="3.1">
+ <function name="GetnMapfvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="query" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
<param name="v" type="GLfloat *" output="true"/>
</function>
- <function name="GetnMapivARB" offset="assign" deprecated="3.1">
+ <function name="GetnMapivARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="query" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
@@ -48,19 +48,19 @@
- <function name="GetnPixelMapfvARB" offset="assign" deprecated="3.1">
+ <function name="GetnPixelMapfvARB" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
<param name="values" type="GLfloat *" output="true"/>
</function>
- <function name="GetnPixelMapuivARB" offset="assign" deprecated="3.1">
+ <function name="GetnPixelMapuivARB" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
<param name="values" type="GLuint *" output="true"/>
</function>
- <function name="GetnPixelMapusvARB" offset="assign" deprecated="3.1">
+ <function name="GetnPixelMapusvARB" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
<param name="values" type="GLushort *" output="true"/>
@@ -68,12 +68,12 @@
- <function name="GetnPolygonStippleARB" offset="assign">
+ <function name="GetnPolygonStippleARB">
<param name="bufSize" type="GLsizei"/>
<param name="pattern" type="GLubyte *" output="true"/>
</function>
- <function name="GetnTexImageARB" offset="assign">
+ <function name="GetnTexImageARB">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="format" type="GLenum"/>
@@ -82,7 +82,7 @@
<param name="img" type="GLvoid *" output="true"/>
</function>
- <function name="ReadnPixelsARB" offset="assign">
+ <function name="ReadnPixelsARB">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="width" type="GLsizei"/>
@@ -95,7 +95,7 @@
<!-- ARB_imaging sized buffer queries -->
- <function name="GetnColorTableARB" offset="assign" deprecated="3.1">
+ <function name="GetnColorTableARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -103,7 +103,7 @@
<param name="table" type="GLvoid *" output="true"/>
</function>
- <function name="GetnConvolutionFilterARB" offset="assign" deprecated="3.1">
+ <function name="GetnConvolutionFilterARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -111,7 +111,7 @@
<param name="image" type="GLvoid *" output="true"/>
</function>
- <function name="GetnSeparableFilterARB" offset="assign" deprecated="3.1">
+ <function name="GetnSeparableFilterARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -122,7 +122,7 @@
<param name="span" type="GLvoid *" output="true"/>
</function>
- <function name="GetnHistogramARB" offset="assign" deprecated="3.1">
+ <function name="GetnHistogramARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="reset" type="GLboolean"/>
<param name="format" type="GLenum"/>
@@ -131,7 +131,7 @@
<param name="values" type="GLvoid *" output="true"/>
</function>
- <function name="GetnMinmaxARB" offset="assign" deprecated="3.1">
+ <function name="GetnMinmaxARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="reset" type="GLboolean"/>
<param name="format" type="GLenum"/>
@@ -142,7 +142,7 @@
<!-- OpenGL 1.3 sized buffer queries -->
- <function name="GetnCompressedTexImageARB" offset="assign">
+ <function name="GetnCompressedTexImageARB">
<param name="target" type="GLenum"/>
<param name="lod" type="GLint"/>
<param name="bufSize" type="GLsizei"/>
@@ -151,28 +151,28 @@
<!-- OpenGL 2.0 sized buffer queries -->
- <function name="GetnUniformfvARB" offset="assign">
+ <function name="GetnUniformfvARB">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="bufSize" type="GLsizei"/>
<param name="params" type="GLfloat *" output="true"/>
</function>
- <function name="GetnUniformivARB" offset="assign">
+ <function name="GetnUniformivARB">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="bufSize" type="GLsizei"/>
<param name="params" type="GLint *" output="true"/>
</function>
- <function name="GetnUniformuivARB" offset="assign">
+ <function name="GetnUniformuivARB">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="bufSize" type="GLsizei"/>
<param name="params" type="GLuint *" output="true"/>
</function>
- <function name="GetnUniformdvARB" offset="assign">
+ <function name="GetnUniformdvARB">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="bufSize" type="GLsizei"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_sampler_objects.xml b/mesalib/src/mapi/glapi/gen/ARB_sampler_objects.xml
index 9173dee5c..bc69e97bd 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_sampler_objects.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_sampler_objects.xml
@@ -7,81 +7,81 @@
<category name="GL_ARB_sampler_objects" number="81">
- <function name="GenSamplers" offset="assign" es2="3.0">
+ <function name="GenSamplers" es2="3.0">
<param name="count" type="GLsizei"/>
<param name="samplers" type="GLuint *"/>
</function>
- <function name="DeleteSamplers" offset="assign" es2="3.0">
+ <function name="DeleteSamplers" es2="3.0">
<param name="count" type="GLsizei"/>
<param name="samplers" type="const GLuint *"/>
</function>
- <function name="IsSampler" offset="assign" es2="3.0">
+ <function name="IsSampler" es2="3.0">
<param name="sampler" type="GLuint"/>
<return type="GLboolean"/>
</function>
- <function name="BindSampler" offset="assign" es2="3.0">
+ <function name="BindSampler" es2="3.0">
<param name="unit" type="GLuint"/>
<param name="sampler" type="GLuint"/>
</function>
- <function name="SamplerParameteri" offset="assign" es2="3.0">
+ <function name="SamplerParameteri" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
</function>
- <function name="SamplerParameterf" offset="assign" es2="3.0">
+ <function name="SamplerParameterf" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
</function>
- <function name="SamplerParameteriv" offset="assign" es2="3.0">
+ <function name="SamplerParameteriv" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
</function>
- <function name="SamplerParameterfv" offset="assign" es2="3.0">
+ <function name="SamplerParameterfv" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *"/>
</function>
- <function name="SamplerParameterIiv" offset="assign">
+ <function name="SamplerParameterIiv">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
</function>
- <function name="SamplerParameterIuiv" offset="assign">
+ <function name="SamplerParameterIuiv">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLuint *"/>
</function>
- <function name="GetSamplerParameteriv" offset="assign" es2="3.0">
+ <function name="GetSamplerParameteriv" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *"/>
</function>
- <function name="GetSamplerParameterfv" offset="assign" es2="3.0">
+ <function name="GetSamplerParameterfv" es2="3.0">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *"/>
</function>
- <function name="GetSamplerParameterIiv" offset="assign">
+ <function name="GetSamplerParameterIiv">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *"/>
</function>
- <function name="GetSamplerParameterIuiv" offset="assign">
+ <function name="GetSamplerParameterIuiv">
<param name="sampler" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLuint *"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_separate_shader_objects.xml b/mesalib/src/mapi/glapi/gen/ARB_separate_shader_objects.xml
index 96ae2b9cb..c9f481d8b 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_separate_shader_objects.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_separate_shader_objects.xml
@@ -15,69 +15,69 @@
<enum name="ALL_SHADER_BITS" value="0xFFFFFFFF"/>
<enum name="PROGRAM_SEPARABLE" value="0x8258"/>
- <function name="UseProgramStages" offset="assign" static_dispatch="false">
+ <function name="UseProgramStages" es2="3.1">
<param name="pipeline" type="GLuint" />
<param name="stages" type="GLbitfield" />
<param name="program" type="GLuint" />
</function>
- <function name="ActiveShaderProgram" offset="assign" static_dispatch="false">
+ <function name="ActiveShaderProgram" es2="3.1">
<param name="pipeline" type="GLuint" />
<param name="program" type="GLuint" />
</function>
- <function name="CreateShaderProgramv" offset="assign" static_dispatch="false">
+ <function name="CreateShaderProgramv" es2="3.1">
<param name="type" type="GLenum" />
<param name="count" type="GLsizei" />
<param name="strings" type="const GLchar * const *" />
<return type="GLuint"/>
</function>
- <function name="BindProgramPipeline" offset="assign" static_dispatch="false">
+ <function name="BindProgramPipeline" es2="3.1">
<param name="pipeline" type="GLuint" />
</function>
- <function name="DeleteProgramPipelines" offset="assign" static_dispatch="false">
+ <function name="DeleteProgramPipelines" es2="3.1">
<param name="n" type="GLsizei" />
<param name="pipelines" type="const GLuint *" />
</function>
- <function name="GenProgramPipelines" offset="assign" static_dispatch="false">
+ <function name="GenProgramPipelines" es2="3.1">
<param name="n" type="GLsizei" />
<param name="pipelines" type="GLuint *" />
</function>
- <function name="IsProgramPipeline" offset="assign" static_dispatch="false">
+ <function name="IsProgramPipeline" es2="3.1">
<param name="pipeline" type="GLuint" />
<return type="GLboolean"/>
</function>
<!-- Function already included on ARB_get_program_binary.xml. Keep a commented
version here for completeness -->
<!--
- <function name="ProgramParameteri" offset="assign" es2="3.0" static_dispatch="false">
+ <function name="ProgramParameteri" es2="3.0">
<param name="program" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="value" type="GLint"/>
</function>
-->
- <function name="GetProgramPipelineiv" offset="assign" static_dispatch="false">
+ <function name="GetProgramPipelineiv" es2="3.1">
<param name="pipeline" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
</function>
- <function name="ProgramUniform1i" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1i" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLint" />
</function>
- <function name="ProgramUniform2i" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2i" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
</function>
- <function name="ProgramUniform3i" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3i" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLint" />
<param name="y" type="GLint" />
<param name="z" type="GLint" />
</function>
- <function name="ProgramUniform4i" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4i" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLint" />
@@ -85,25 +85,25 @@
<param name="z" type="GLint" />
<param name="w" type="GLint" />
</function>
- <function name="ProgramUniform1ui" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1ui" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLuint" />
</function>
- <function name="ProgramUniform2ui" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2ui" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLuint" />
<param name="y" type="GLuint" />
</function>
- <function name="ProgramUniform3ui" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3ui" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLuint" />
<param name="y" type="GLuint" />
<param name="z" type="GLuint" />
</function>
- <function name="ProgramUniform4ui" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4ui" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLuint" />
@@ -111,25 +111,25 @@
<param name="z" type="GLuint" />
<param name="w" type="GLuint" />
</function>
- <function name="ProgramUniform1f" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1f" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLfloat" />
</function>
- <function name="ProgramUniform2f" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2f" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLfloat" />
<param name="y" type="GLfloat" />
</function>
- <function name="ProgramUniform3f" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3f" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLfloat" />
<param name="y" type="GLfloat" />
<param name="z" type="GLfloat" />
</function>
- <function name="ProgramUniform4f" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4f" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLfloat" />
@@ -137,170 +137,170 @@
<param name="z" type="GLfloat" />
<param name="w" type="GLfloat" />
</function>
- <function name="ProgramUniform1iv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1iv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLint *" />
</function>
- <function name="ProgramUniform2iv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2iv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLint *" />
</function>
- <function name="ProgramUniform3iv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3iv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLint *" />
</function>
- <function name="ProgramUniform4iv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4iv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLint *" />
</function>
- <function name="ProgramUniform1uiv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1uiv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLuint *" />
</function>
- <function name="ProgramUniform2uiv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2uiv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLuint *" />
</function>
- <function name="ProgramUniform3uiv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3uiv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLuint *" />
</function>
- <function name="ProgramUniform4uiv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4uiv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLuint *" />
</function>
- <function name="ProgramUniform1fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniform2fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniform3fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniform4fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix2fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix2fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix3fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix3fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix4fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix4fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix2x3fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix2x3fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix3x2fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix3x2fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix2x4fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix2x4fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix4x2fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix4x2fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix3x4fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix3x4fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ProgramUniformMatrix4x3fv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix4x3fv" es2="3.1">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLfloat *" />
</function>
- <function name="ValidateProgramPipeline" offset="assign" static_dispatch="false">
+ <function name="ValidateProgramPipeline" es2="3.1">
<param name="pipeline" type="GLuint" />
</function>
- <function name="GetProgramPipelineInfoLog" offset="assign" static_dispatch="false">
+ <function name="GetProgramPipelineInfoLog" es2="3.1">
<param name="pipeline" type="GLuint" />
<param name="bufSize" type="GLsizei" />
<param name="length" type="GLsizei *" />
<param name="infoLog" type="GLchar *" />
</function>
- <function name="ProgramUniform1d" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1d">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLdouble" />
</function>
- <function name="ProgramUniform2d" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2d">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLdouble" />
<param name="y" type="GLdouble" />
</function>
- <function name="ProgramUniform3d" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3d">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLdouble" />
<param name="y" type="GLdouble" />
<param name="z" type="GLdouble" />
</function>
- <function name="ProgramUniform4d" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4d">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="x" type="GLdouble" />
@@ -308,88 +308,88 @@
<param name="z" type="GLdouble" />
<param name="w" type="GLdouble" />
</function>
- <function name="ProgramUniformMatrix2x3dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix2x3dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix3x2dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix3x2dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix2x4dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix2x4dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix4x2dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix4x2dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix3x4dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix3x4dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix4x3dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix4x3dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix2dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix2dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix3dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix3dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniformMatrix4dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniformMatrix4dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="transpose" type="GLboolean" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniform1dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform1dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniform2dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform2dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniform3dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform3dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
<param name="value" type="const GLdouble *" />
</function>
- <function name="ProgramUniform4dv" offset="assign" static_dispatch="false">
+ <function name="ProgramUniform4dv">
<param name="program" type="GLuint" />
<param name="location" type="GLint" />
<param name="count" type="GLsizei" />
diff --git a/mesalib/src/mapi/glapi/gen/ARB_shader_atomic_counters.xml b/mesalib/src/mapi/glapi/gen/ARB_shader_atomic_counters.xml
index f3b74e9c2..0b0b60fa7 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_shader_atomic_counters.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_shader_atomic_counters.xml
@@ -35,7 +35,7 @@
<enum name="UNSIGNED_INT_ATOMIC_COUNTER" value="0x92DB"/>
<enum name="MAX_ATOMIC_COUNTER_BUFFER_BINDINGS" value="0x92DC"/>
-<function name="GetActiveAtomicCounterBufferiv" offset="assign">
+<function name="GetActiveAtomicCounterBufferiv">
<param name="program" type="GLuint" />
<param name="bufferIndex" type="GLuint" />
<param name="pname" type="GLenum" />
diff --git a/mesalib/src/mapi/glapi/gen/ARB_shader_image_load_store.xml b/mesalib/src/mapi/glapi/gen/ARB_shader_image_load_store.xml
index 7ccfca41d..178e930f1 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_shader_image_load_store.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_shader_image_load_store.xml
@@ -70,7 +70,7 @@
<enum name="MAX_FRAGMENT_IMAGE_UNIFORMS" value="0x90CE"/>
<enum name="MAX_COMBINED_IMAGE_UNIFORMS" value="0x90CF"/>
-<function name="BindImageTexture" offset="assign">
+<function name="BindImageTexture" es2="3.1">
<param name="unit" type="GLuint"/>
<param name="texture" type="GLuint"/>
<param name="level" type="GLint"/>
@@ -80,7 +80,7 @@
<param name="format" type="GLenum"/>
</function>
-<function name="MemoryBarrier" offset="assign">
+<function name="MemoryBarrier" es2="3.1">
<param name="barriers" type="GLbitfield"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_sync.xml b/mesalib/src/mapi/glapi/gen/ARB_sync.xml
index 58f1639c4..d8a1c34e0 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_sync.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_sync.xml
@@ -39,40 +39,40 @@
-->
- <function name="FenceSync" offset="assign" es2="3.0">
+ <function name="FenceSync" es2="3.0">
<param name="condition" type="GLenum"/>
<param name="flags" type="GLbitfield"/>
<return type="GLsync"/>
</function>
- <function name="IsSync" offset="assign" es2="3.0">
+ <function name="IsSync" es2="3.0">
<param name="sync" type="GLsync"/>
<return type="GLboolean"/>
</function>
- <function name="DeleteSync" offset="assign" es2="3.0">
+ <function name="DeleteSync" es2="3.0">
<param name="sync" type="GLsync"/>
</function>
- <function name="ClientWaitSync" offset="assign" es2="3.0">
+ <function name="ClientWaitSync" es2="3.0">
<param name="sync" type="GLsync"/>
<param name="flags" type="GLbitfield"/>
<param name="timeout" type="GLuint64"/>
<return type="GLenum"/>
</function>
- <function name="WaitSync" offset="assign" es2="3.0">
+ <function name="WaitSync" es2="3.0">
<param name="sync" type="GLsync"/>
<param name="flags" type="GLbitfield"/>
<param name="timeout" type="GLuint64"/>
</function>
- <function name="GetInteger64v" offset="assign" es2="3.0">
+ <function name="GetInteger64v" es2="3.0">
<param name="pname" type="GLenum"/>
<param name="params" type="GLint64 *" output="true" variable_param="pname"/>
</function>
- <function name="GetSynciv" offset="assign" es2="3.0">
+ <function name="GetSynciv" es2="3.0">
<param name="sync" type="GLsync"/>
<param name="pname" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_texture_buffer_range.xml b/mesalib/src/mapi/glapi/gen/ARB_texture_buffer_range.xml
index 2176c08ef..36bcc4932 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_texture_buffer_range.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_texture_buffer_range.xml
@@ -9,7 +9,7 @@
<enum name="TEXTURE_BUFFER_SIZE" value="0x919E"/>
<enum name="TEXTURE_BUFFER_OFFSET_ALIGNMENT" value="0x919F"/>
- <function name="TexBufferRange" offset="assign">
+ <function name="TexBufferRange">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="buffer" type="GLuint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_texture_multisample.xml b/mesalib/src/mapi/glapi/gen/ARB_texture_multisample.xml
index 1f65a8bcf..595e1c7ea 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_texture_multisample.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_texture_multisample.xml
@@ -34,7 +34,7 @@
<enum name="INT_SAMPLER_2D_MULTISAMPLE_ARRAY" value="0x910C"/>
<enum name="UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY" value="0x910D"/>
- <function name="TexImage2DMultisample" offset="assign">
+ <function name="TexImage2DMultisample">
<param name="target" type="GLenum"/>
<param name="samples" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
@@ -43,7 +43,7 @@
<param name="fixedsamplelocations" type="GLboolean"/>
</function>
- <function name="TexImage3DMultisample" offset="assign">
+ <function name="TexImage3DMultisample">
<param name="target" type="GLenum"/>
<param name="samples" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
@@ -53,13 +53,13 @@
<param name="fixedsamplelocations" type="GLboolean"/>
</function>
- <function name="GetMultisamplefv" offset="assign">
+ <function name="GetMultisamplefv" es2="3.1">
<param name="pname" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="val" type="GLfloat *"/>
</function>
- <function name="SampleMaski" offset="assign">
+ <function name="SampleMaski" es2="3.1">
<param name="index" type="GLuint"/>
<param name="mask" type="GLbitfield"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_texture_storage.xml b/mesalib/src/mapi/glapi/gen/ARB_texture_storage.xml
index 1d63e7ce3..7df394241 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_texture_storage.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_texture_storage.xml
@@ -10,14 +10,14 @@
<enum name="TEXTURE_IMMUTABLE_FORMAT" value="0x912F"/>
- <function name="TexStorage1D" offset="assign">
+ <function name="TexStorage1D">
<param name="target" type="GLenum"/>
<param name="levels" type="GLsizei"/>
<param name="internalFormat" type="GLenum"/>
<param name="width" type="GLsizei"/>
</function>
- <function name="TexStorage2D" offset="assign" es2="3.0">
+ <function name="TexStorage2D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="levels" type="GLsizei"/>
<param name="internalFormat" type="GLenum"/>
@@ -25,7 +25,7 @@
<param name="height" type="GLsizei"/>
</function>
- <function name="TexStorage3D" offset="assign" es2="3.0">
+ <function name="TexStorage3D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="levels" type="GLsizei"/>
<param name="internalFormat" type="GLenum"/>
@@ -34,7 +34,7 @@
<param name="depth" type="GLsizei"/>
</function>
- <function name="TextureStorage1DEXT" offset="assign">
+ <function name="TextureStorage1DEXT">
<param name="texture" type="GLuint"/>
<param name="target" type="GLenum"/>
<param name="levels" type="GLsizei"/>
@@ -42,7 +42,7 @@
<param name="width" type="GLsizei"/>
</function>
- <function name="TextureStorage2DEXT" offset="assign">
+ <function name="TextureStorage2DEXT">
<param name="texture" type="GLuint"/>
<param name="target" type="GLenum"/>
<param name="levels" type="GLsizei"/>
@@ -51,7 +51,7 @@
<param name="height" type="GLsizei"/>
</function>
- <function name="TextureStorage3DEXT" offset="assign">
+ <function name="TextureStorage3DEXT">
<param name="texture" type="GLuint"/>
<param name="target" type="GLenum"/>
<param name="levels" type="GLsizei"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_texture_storage_multisample.xml b/mesalib/src/mapi/glapi/gen/ARB_texture_storage_multisample.xml
index 0f9d323d4..6ed8f1a01 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_texture_storage_multisample.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_texture_storage_multisample.xml
@@ -7,7 +7,7 @@
<category name="GL_ARB_texture_storage_multisample" number="141">
- <function name="TexStorage2DMultisample" offset="assign">
+ <function name="TexStorage2DMultisample" es2="3.1">
<param name="target" type="GLenum"/>
<param name="samples" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
@@ -16,7 +16,7 @@
<param name="fixedsamplelocations" type="GLboolean"/>
</function>
- <function name="TexStorage3DMultisample" offset="assign">
+ <function name="TexStorage3DMultisample">
<param name="target" type="GLenum"/>
<param name="samples" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_texture_view.xml b/mesalib/src/mapi/glapi/gen/ARB_texture_view.xml
index 3e6b8c904..4215fc5bd 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_texture_view.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_texture_view.xml
@@ -7,7 +7,7 @@
<category name="GL_ARB_texture_view" number="124">
- <function name="TextureView" offset="assign">
+ <function name="TextureView">
<param name="texture" type="GLuint"/>
<param name="target" type="GLenum"/>
<param name="origtexture" type="GLuint"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml b/mesalib/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml
index 11aacb033..cf86bbb2f 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml
@@ -39,14 +39,14 @@
<enum name="UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER" value="0x8A46" />
<enum name="INVALID_INDEX" value="0xFFFFFFFF" />
-<function name="GetUniformIndices" offset="assign" es2="3.0">
+<function name="GetUniformIndices" es2="3.0">
<param name="program" type="GLuint" />
<param name="uniformCount" type="GLsizei" />
<param name="uniformNames" type="const GLchar * const *" />
<param name="uniformIndices" type="GLuint *" />
</function>
-<function name="GetActiveUniformsiv" offset="assign" es2="3.0">
+<function name="GetActiveUniformsiv" es2="3.0">
<param name="program" type="GLuint" />
<param name="uniformCount" type="GLsizei" />
<param name="uniformIndices" type="const GLuint *" />
@@ -54,7 +54,7 @@
<param name="params" type="GLint *" />
</function>
-<function name="GetActiveUniformName" offset="assign">
+<function name="GetActiveUniformName">
<param name="program" type="GLuint" />
<param name="uniformIndex" type="GLuint" />
<param name="bufSize" type="GLsizei" />
@@ -62,20 +62,20 @@
<param name="uniformName" type="GLchar *" />
</function>
-<function name="GetUniformBlockIndex" offset="assign" es2="3.0">
+<function name="GetUniformBlockIndex" es2="3.0">
<return type="GLuint"/>
<param name="program" type="GLuint" />
<param name="uniformBlockName" type="const GLchar *" />
</function>
-<function name="GetActiveUniformBlockiv" offset="assign" es2="3.0">
+<function name="GetActiveUniformBlockiv" es2="3.0">
<param name="program" type="GLuint" />
<param name="uniformBlockIndex" type="GLuint" />
<param name="pname" type="GLenum" />
<param name="params" type="GLint *" />
</function>
-<function name="GetActiveUniformBlockName" offset="assign" es2="3.0">
+<function name="GetActiveUniformBlockName" es2="3.0">
<param name="program" type="GLuint" />
<param name="uniformBlockIndex" type="GLuint" />
<param name="bufSize" type="GLsizei" />
@@ -86,7 +86,7 @@
<!-- Duplicated with GL3x.xml: BindBufferRange, BindBufferBase,
GetIntegeri_v -->
-<function name="UniformBlockBinding" offset="assign" es2="3.0">
+<function name="UniformBlockBinding" es2="3.0">
<param name="program" type="GLuint" />
<param name="uniformBlockIndex" type="GLuint" />
<param name="uniformBlockBinding" type="GLuint" />
diff --git a/mesalib/src/mapi/glapi/gen/ARB_vertex_array_object.xml b/mesalib/src/mapi/glapi/gen/ARB_vertex_array_object.xml
index f2277d2bc..4a392dbb4 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_vertex_array_object.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_vertex_array_object.xml
@@ -10,21 +10,21 @@
<enum name="VERTEX_ARRAY_BINDING" value="0x85B5"/>
- <function name="BindVertexArray" offset="assign" es2="3.0">
+ <function name="BindVertexArray" es2="3.0">
<param name="array" type="GLuint"/>
</function>
- <function name="DeleteVertexArrays" es2="3.0" offset="assign">
+ <function name="DeleteVertexArrays" es2="3.0">
<param name="n" type="GLsizei"/>
<param name="arrays" type="const GLuint *" count="n"/>
</function>
- <function name="GenVertexArrays" offset="assign" es2="3.0">
+ <function name="GenVertexArrays" es2="3.0">
<param name="n" type="GLsizei"/>
<param name="arrays" type="GLuint *"/>
</function>
- <function name="IsVertexArray" es2="3.0" offset="assign">
+ <function name="IsVertexArray" es2="3.0">
<param name="array" type="GLuint"/>
<return type="GLboolean"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml
index fc49f84b5..211642fc3 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_64bit.xml
@@ -5,25 +5,25 @@
<category name="GL_ARB_vertex_attrib_64bit" number="99">
- <function name="VertexAttribL1d" offset="assign">
+ <function name="VertexAttribL1d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
</function>
- <function name="VertexAttribL2d" offset="assign">
+ <function name="VertexAttribL2d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
</function>
- <function name="VertexAttribL3d" offset="assign">
+ <function name="VertexAttribL3d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
</function>
- <function name="VertexAttribL4d" offset="assign">
+ <function name="VertexAttribL4d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
@@ -31,27 +31,27 @@
<param name="w" type="GLdouble"/>
</function>
- <function name="VertexAttribL1dv" offset="assign">
+ <function name="VertexAttribL1dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttribL2dv" offset="assign">
+ <function name="VertexAttribL2dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttribL3dv" offset="assign">
+ <function name="VertexAttribL3dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttribL4dv" offset="assign">
+ <function name="VertexAttribL4dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttribLPointer" offset="assign">
+ <function name="VertexAttribLPointer">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
@@ -59,7 +59,7 @@
<param name="pointer" type="const GLvoid *"/>
</function>
- <function name="GetVertexAttribLdv" offset="assign">
+ <function name="GetVertexAttribLdv">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLdouble *"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml
index 7e6268877..ba9ca57bb 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_vertex_attrib_binding.xml
@@ -7,14 +7,14 @@
<category name="GL_ARB_vertex_attrib_binding" number="125">
- <function name="BindVertexBuffer" offset="assign">
+ <function name="BindVertexBuffer" es2="3.1">
<param name="bindingindex" type="GLuint"/>
<param name="buffer" type="GLuint"/>
<param name="offset" type="GLintptr"/>
<param name="stride" type="GLsizei"/>
</function>
- <function name="VertexAttribFormat" offset="assign">
+ <function name="VertexAttribFormat" es2="3.1">
<param name="attribindex" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
@@ -22,26 +22,26 @@
<param name="relativeoffset" type="GLuint"/>
</function>
- <function name="VertexAttribIFormat" offset="assign">
+ <function name="VertexAttribIFormat" es2="3.1">
<param name="attribindex" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="relativeoffset" type="GLuint"/>
</function>
- <function name="VertexAttribLFormat" offset="assign">
+ <function name="VertexAttribLFormat">
<param name="attribindex" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="relativeoffset" type="GLuint"/>
</function>
- <function name="VertexAttribBinding" offset="assign">
+ <function name="VertexAttribBinding" es2="3.1">
<param name="attribindex" type="GLuint"/>
<param name="bindingindex" type="GLuint"/>
</function>
- <function name="VertexBindingDivisor" offset="assign">
+ <function name="VertexBindingDivisor" es2="3.1">
<param name="attribindex" type="GLuint"/>
<param name="divisor" type="GLuint"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_vertex_type_2_10_10_10_rev.xml b/mesalib/src/mapi/glapi/gen/ARB_vertex_type_2_10_10_10_rev.xml
index 6c6090c1c..92ec6e167 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_vertex_type_2_10_10_10_rev.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_vertex_type_2_10_10_10_rev.xml
@@ -7,244 +7,214 @@
<enum name="INT_2_10_10_10_REV" value = "0x8D9F"/>
- <function name="VertexP2ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexP2ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexP3ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexP3ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexP4ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexP4ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexP2uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexP2uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="VertexP3uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexP3uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="VertexP4uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexP4uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="TexCoordP1ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP1ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="TexCoordP2ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP2ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="TexCoordP3ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP3ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="TexCoordP4ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP4ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="TexCoordP1uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP1uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="TexCoordP2uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP2uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="TexCoordP3uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP3uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="TexCoordP4uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoordP4uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="MultiTexCoordP1ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP1ui" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="MultiTexCoordP2ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP2ui" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="MultiTexCoordP3ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP3ui" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="MultiTexCoordP4ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP4ui" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="MultiTexCoordP1uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP1uiv" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="MultiTexCoordP2uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP2uiv" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="MultiTexCoordP3uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP3uiv" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="MultiTexCoordP4uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="MultiTexCoordP4uiv" deprecated="3.1" exec="dynamic">
<param name="texture" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="NormalP3ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="NormalP3ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="GLuint"/>
</function>
- <function name="NormalP3uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="NormalP3uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="coords" type="const GLuint *"/>
</function>
- <function name="ColorP3ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="ColorP3ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="color" type="GLuint"/>
</function>
- <function name="ColorP4ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="ColorP4ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="color" type="GLuint"/>
</function>
- <function name="ColorP3uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="ColorP3uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="color" type="const GLuint *"/>
</function>
- <function name="ColorP4uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="ColorP4uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="color" type="const GLuint *"/>
</function>
- <function name="SecondaryColorP3ui" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="SecondaryColorP3ui" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="color" type="GLuint"/>
</function>
- <function name="SecondaryColorP3uiv" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="SecondaryColorP3uiv" deprecated="3.1" exec="dynamic">
<param name="type" type="GLenum"/>
<param name="color" type="const GLuint *"/>
</function>
- <function name="VertexAttribP1ui" offset="assign" exec="dynamic">
+ <function name="VertexAttribP1ui" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexAttribP2ui" offset="assign" exec="dynamic">
+ <function name="VertexAttribP2ui" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexAttribP3ui" offset="assign" exec="dynamic">
+ <function name="VertexAttribP3ui" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexAttribP4ui" offset="assign" exec="dynamic">
+ <function name="VertexAttribP4ui" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="GLuint"/>
</function>
- <function name="VertexAttribP1uiv" offset="assign" exec="dynamic">
+ <function name="VertexAttribP1uiv" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="VertexAttribP2uiv" offset="assign" exec="dynamic">
+ <function name="VertexAttribP2uiv" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="VertexAttribP3uiv" offset="assign" exec="dynamic">
+ <function name="VertexAttribP3uiv" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="VertexAttribP4uiv" offset="assign" exec="dynamic">
+ <function name="VertexAttribP4uiv" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="type" type="GLenum"/>
<param name="normalized" type="GLboolean"/>
diff --git a/mesalib/src/mapi/glapi/gen/ARB_viewport_array.xml b/mesalib/src/mapi/glapi/gen/ARB_viewport_array.xml
index e1c6c2d81..b20cf612c 100644
--- a/mesalib/src/mapi/glapi/gen/ARB_viewport_array.xml
+++ b/mesalib/src/mapi/glapi/gen/ARB_viewport_array.xml
@@ -21,54 +21,54 @@
<enum name="PROVOKING_VERTEX" value="0x8E4F"/>
<enum name="UNDEFINED_VERTEX" value="0x8260"/>
- <function name="ViewportArrayv" offset="assign">
+ <function name="ViewportArrayv">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="v" type="const GLfloat *"/>
</function>
- <function name="ViewportIndexedf" offset="assign">
+ <function name="ViewportIndexedf">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="w" type="GLfloat"/>
<param name="h" type="GLfloat"/>
</function>
- <function name="ViewportIndexedfv" offset="assign">
+ <function name="ViewportIndexedfv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *"/>
</function>
- <function name="ScissorArrayv" offset="assign">
+ <function name="ScissorArrayv">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="v" type="const int *"/>
</function>
- <function name="ScissorIndexed" offset="assign">
+ <function name="ScissorIndexed">
<param name="index" type="GLuint"/>
<param name="left" type="GLint"/>
<param name="bottom" type="GLint"/>
<param name="width" type="GLsizei"/>
<param name="height" type="GLsizei"/>
</function>
- <function name="ScissorIndexedv" offset="assign">
+ <function name="ScissorIndexedv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *"/>
</function>
- <function name="DepthRangeArrayv" offset="assign">
+ <function name="DepthRangeArrayv">
<param name="first" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="v" type="const GLclampd *"/>
</function>
- <function name="DepthRangeIndexed" offset="assign">
+ <function name="DepthRangeIndexed">
<param name="index" type="GLuint"/>
<param name="n" type="GLclampd"/>
<param name="f" type="GLclampd"/>
</function>
- <function name="GetFloati_v" offset="assign">
+ <function name="GetFloati_v">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="data" type="GLfloat *"/>
</function>
- <function name="GetDoublei_v" offset="assign">
+ <function name="GetDoublei_v">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="data" type="GLdouble *"/>
diff --git a/mesalib/src/mapi/glapi/gen/EXT_framebuffer_object.xml b/mesalib/src/mapi/glapi/gen/EXT_framebuffer_object.xml
index 2cf75bc67..9ae029152 100644
--- a/mesalib/src/mapi/glapi/gen/EXT_framebuffer_object.xml
+++ b/mesalib/src/mapi/glapi/gen/EXT_framebuffer_object.xml
@@ -78,7 +78,7 @@
<return type="GLboolean"/>
</function>
- <function name="BindRenderbufferEXT" offset="assign" deprecated="3.1">
+ <function name="BindRenderbufferEXT" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="renderbuffer" type="GLuint"/>
<glx rop="4316"/>
@@ -112,7 +112,7 @@
<return type="GLboolean"/>
</function>
- <function name="BindFramebufferEXT" offset="assign" deprecated="3.1">
+ <function name="BindFramebufferEXT" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="framebuffer" type="GLuint"/>
<glx rop="4319"/>
@@ -186,7 +186,7 @@
<enum name="READ_FRAMEBUFFER_BINDING_EXT" count="1" value="0x8CAA">
<size name="Get" mode="get"/>
</enum>
- <function name="BlitFramebufferEXT" static_dispatch="false" alias="BlitFramebuffer">
+ <function name="BlitFramebufferEXT" alias="BlitFramebuffer">
<param name="srcX0" type="GLint"/>
<param name="srcY0" type="GLint"/>
<param name="srcX1" type="GLint"/>
diff --git a/mesalib/src/mapi/glapi/gen/EXT_gpu_shader4.xml b/mesalib/src/mapi/glapi/gen/EXT_gpu_shader4.xml
index d204c3fc7..b1f7eae26 100644
--- a/mesalib/src/mapi/glapi/gen/EXT_gpu_shader4.xml
+++ b/mesalib/src/mapi/glapi/gen/EXT_gpu_shader4.xml
@@ -44,25 +44,25 @@
</enum>
- <function name="VertexAttribI1iEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI1iEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLint"/>
</function>
- <function name="VertexAttribI2iEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI2iEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
</function>
- <function name="VertexAttribI3iEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI3iEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
</function>
- <function name="VertexAttribI4iEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI4iEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
@@ -70,25 +70,25 @@
<param name="w" type="GLint"/>
</function>
- <function name="VertexAttribI1uiEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI1uiEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLuint"/>
</function>
- <function name="VertexAttribI2uiEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI2uiEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
</function>
- <function name="VertexAttribI3uiEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI3uiEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
<param name="z" type="GLuint"/>
</function>
- <function name="VertexAttribI4uiEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI4uiEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
@@ -101,17 +101,17 @@
<param name="v" type="const GLint *"/>
</function>
- <function name="VertexAttribI2ivEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI2ivEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *"/>
</function>
- <function name="VertexAttribI3ivEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI3ivEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *"/>
</function>
- <function name="VertexAttribI4ivEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI4ivEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *"/>
</function>
@@ -121,17 +121,17 @@
<param name="v" type="const GLuint *"/>
</function>
- <function name="VertexAttribI2uivEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI2uivEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLuint *"/>
</function>
- <function name="VertexAttribI3uivEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI3uivEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLuint *"/>
</function>
- <function name="VertexAttribI4uivEXT" offset="assign" exec="dynamic">
+ <function name="VertexAttribI4uivEXT" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLuint *"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/EXT_provoking_vertex.xml b/mesalib/src/mapi/glapi/gen/EXT_provoking_vertex.xml
index eb872098d..3d1ae771e 100644
--- a/mesalib/src/mapi/glapi/gen/EXT_provoking_vertex.xml
+++ b/mesalib/src/mapi/glapi/gen/EXT_provoking_vertex.xml
@@ -26,7 +26,7 @@
<enum name="PROVOKING_VERTEX" value="0x8E4F"/>
<enum name="QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION" value="0x8E4C"/>
- <function name="ProvokingVertex" offset="assign">
+ <function name="ProvokingVertex">
<param name="mode" type="GLenum"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/EXT_separate_shader_objects.xml b/mesalib/src/mapi/glapi/gen/EXT_separate_shader_objects.xml
index c6163a193..1fa699fbc 100644
--- a/mesalib/src/mapi/glapi/gen/EXT_separate_shader_objects.xml
+++ b/mesalib/src/mapi/glapi/gen/EXT_separate_shader_objects.xml
@@ -8,16 +8,16 @@
<!-- Alias of CURRENT_PROGRAM -->
<!-- <enum name="ACTIVE_PROGRAM_EXT" value="0x8B8D"/> -->
- <function name="UseShaderProgramEXT" deprecated="3.1" offset="assign" exec="skip">
+ <function name="UseShaderProgramEXT" deprecated="3.1" exec="skip">
<param name="type" type="GLenum"/>
<param name="program" type="GLuint"/>
</function>
- <function name="ActiveProgramEXT" deprecated="3.1" offset="assign" exec="skip">
+ <function name="ActiveProgramEXT" deprecated="3.1" exec="skip">
<param name="program" type="GLuint"/>
</function>
- <function name="CreateShaderProgramEXT" deprecated="3.1" offset="assign" exec="skip">
+ <function name="CreateShaderProgramEXT" deprecated="3.1" exec="skip">
<param name="type" type="GLenum"/>
<param name="string" type="const GLchar *"/>
<return type="GLuint"/>
@@ -31,65 +31,65 @@
<enum name="ALL_SHADER_BITS_EXT" value="0xFFFFFFFF"/>
<enum name="PROGRAM_SEPARABLE_EXT" value="0x8258"/>
- <function name="UseProgramStagesEXT" alias="UseProgramStages" static_dispatch="false" es2="2.0">
+ <function name="UseProgramStagesEXT" alias="UseProgramStages" es2="2.0">
<param name="pipeline" type="GLuint"/>
<param name="stages" type="GLbitfield"/>
<param name="program" type="GLuint"/>
</function>
- <function name="ActiveShaderProgramEXT" alias="ActiveShaderProgram" static_dispatch="false" es2="2.0">
+ <function name="ActiveShaderProgramEXT" alias="ActiveShaderProgram" es2="2.0">
<param name="pipeline" type="GLuint"/>
<param name="program" type="GLuint"/>
</function>
- <function name="CreateShaderProgramvEXT" alias="CreateShaderProgramv" static_dispatch="false" es2="2.0">
+ <function name="CreateShaderProgramvEXT" alias="CreateShaderProgramv" es2="2.0">
<param name="type" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="strings" type="const GLchar * const *"/>
<return type="GLuint"/>
</function>
- <function name="BindProgramPipelineEXT" alias="BindProgramPipeline" static_dispatch="false" es2="2.0">
+ <function name="BindProgramPipelineEXT" alias="BindProgramPipeline" es2="2.0">
<param name="pipeline" type="GLuint"/>
</function>
- <function name="DeleteProgramPipelinesEXT" alias="DeleteProgramPipelines" static_dispatch="false" es2="2.0">
+ <function name="DeleteProgramPipelinesEXT" alias="DeleteProgramPipelines" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="pipelines" type="const GLuint *"/>
</function>
- <function name="GenProgramPipelinesEXT" alias="GenProgramPipelines" static_dispatch="false" es2="2.0">
+ <function name="GenProgramPipelinesEXT" alias="GenProgramPipelines" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="pipelines" type="GLuint *"/>
</function>
- <function name="IsProgramPipelineEXT" alias="IsProgramPipeline" static_dispatch="false" es2="2.0">
+ <function name="IsProgramPipelineEXT" alias="IsProgramPipeline" es2="2.0">
<param name="pipeline" type="GLuint"/>
<return type="GLboolean"/>
</function>
- <function name="ProgramParameteriEXT" alias="ProgramParameteri" static_dispatch="false" es2="2.0">
+ <function name="ProgramParameteriEXT" alias="ProgramParameteri" es2="2.0">
<param name="program" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="value" type="GLint"/>
</function>
- <function name="GetProgramPipelineivEXT" alias="GetProgramPipelineiv" static_dispatch="false" es2="2.0">
+ <function name="GetProgramPipelineivEXT" alias="GetProgramPipelineiv" es2="2.0">
<param name="pipeline" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *"/>
</function>
- <function name="ProgramUniform1iEXT" alias="ProgramUniform1i" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform1iEXT" alias="ProgramUniform1i" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLint"/>
</function>
- <function name="ProgramUniform2iEXT" alias="ProgramUniform2i" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform2iEXT" alias="ProgramUniform2i" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
</function>
- <function name="ProgramUniform3iEXT" alias="ProgramUniform3i" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform3iEXT" alias="ProgramUniform3i" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
</function>
- <function name="ProgramUniform4iEXT" alias="ProgramUniform4i" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform4iEXT" alias="ProgramUniform4i" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLint"/>
@@ -97,25 +97,25 @@
<param name="z" type="GLint"/>
<param name="w" type="GLint"/>
</function>
- <function name="ProgramUniform1uiEXT" alias="ProgramUniform1ui" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform1uiEXT" alias="ProgramUniform1ui" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
</function>
- <function name="ProgramUniform2uiEXT" alias="ProgramUniform2ui" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform2uiEXT" alias="ProgramUniform2ui" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
</function>
- <function name="ProgramUniform3uiEXT" alias="ProgramUniform3ui" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform3uiEXT" alias="ProgramUniform3ui" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
<param name="z" type="GLuint"/>
</function>
- <function name="ProgramUniform4uiEXT" alias="ProgramUniform4ui" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform4uiEXT" alias="ProgramUniform4ui" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
@@ -123,25 +123,25 @@
<param name="z" type="GLuint"/>
<param name="w" type="GLuint"/>
</function>
- <function name="ProgramUniform1fEXT" alias="ProgramUniform1f" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform1fEXT" alias="ProgramUniform1f" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLfloat"/>
</function>
- <function name="ProgramUniform2fEXT" alias="ProgramUniform2f" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform2fEXT" alias="ProgramUniform2f" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
</function>
- <function name="ProgramUniform3fEXT" alias="ProgramUniform3f" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform3fEXT" alias="ProgramUniform3f" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
</function>
- <function name="ProgramUniform4fEXT" alias="ProgramUniform4f" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform4fEXT" alias="ProgramUniform4f" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="x" type="GLfloat"/>
@@ -149,145 +149,145 @@
<param name="z" type="GLfloat"/>
<param name="w" type="GLfloat"/>
</function>
- <function name="ProgramUniform1ivEXT" alias="ProgramUniform1iv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform1ivEXT" alias="ProgramUniform1iv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLint *"/>
</function>
- <function name="ProgramUniform2ivEXT" alias="ProgramUniform2iv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform2ivEXT" alias="ProgramUniform2iv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLint *"/>
</function>
- <function name="ProgramUniform3ivEXT" alias="ProgramUniform3iv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform3ivEXT" alias="ProgramUniform3iv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLint *"/>
</function>
- <function name="ProgramUniform4ivEXT" alias="ProgramUniform4iv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform4ivEXT" alias="ProgramUniform4iv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLint *"/>
</function>
- <function name="ProgramUniform1uivEXT" alias="ProgramUniform1uiv" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform1uivEXT" alias="ProgramUniform1uiv" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="ProgramUniform2uivEXT" alias="ProgramUniform2uiv" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform2uivEXT" alias="ProgramUniform2uiv" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="ProgramUniform3uivEXT" alias="ProgramUniform3uiv" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform3uivEXT" alias="ProgramUniform3uiv" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="ProgramUniform4uivEXT" alias="ProgramUniform4uiv" static_dispatch="false" es2="3.0">
+ <function name="ProgramUniform4uivEXT" alias="ProgramUniform4uiv" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="ProgramUniform1fvEXT" alias="ProgramUniform1fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform1fvEXT" alias="ProgramUniform1fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniform2fvEXT" alias="ProgramUniform2fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform2fvEXT" alias="ProgramUniform2fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniform3fvEXT" alias="ProgramUniform3fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform3fvEXT" alias="ProgramUniform3fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniform4fvEXT" alias="ProgramUniform4fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniform4fvEXT" alias="ProgramUniform4fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix2fvEXT" alias="ProgramUniformMatrix2fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix2fvEXT" alias="ProgramUniformMatrix2fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix3fvEXT" alias="ProgramUniformMatrix3fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix3fvEXT" alias="ProgramUniformMatrix3fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix4fvEXT" alias="ProgramUniformMatrix4fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix4fvEXT" alias="ProgramUniformMatrix4fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix2x3fvEXT" alias="ProgramUniformMatrix2x3fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix2x3fvEXT" alias="ProgramUniformMatrix2x3fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix3x2fvEXT" alias="ProgramUniformMatrix3x2fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix3x2fvEXT" alias="ProgramUniformMatrix3x2fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix2x4fvEXT" alias="ProgramUniformMatrix2x4fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix2x4fvEXT" alias="ProgramUniformMatrix2x4fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix4x2fvEXT" alias="ProgramUniformMatrix4x2fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix4x2fvEXT" alias="ProgramUniformMatrix4x2fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix3x4fvEXT" alias="ProgramUniformMatrix3x4fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix3x4fvEXT" alias="ProgramUniformMatrix3x4fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ProgramUniformMatrix4x3fvEXT" alias="ProgramUniformMatrix4x3fv" static_dispatch="false" es2="2.0">
+ <function name="ProgramUniformMatrix4x3fvEXT" alias="ProgramUniformMatrix4x3fv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="count" type="GLsizei"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ValidateProgramPipelineEXT" alias="ValidateProgramPipeline" static_dispatch="false" es2="2.0">
+ <function name="ValidateProgramPipelineEXT" alias="ValidateProgramPipeline" es2="2.0">
<param name="pipeline" type="GLuint"/>
</function>
- <function name="GetProgramPipelineInfoLogEXT" alias="GetProgramPipelineInfoLog" static_dispatch="false" es2="2.0">
+ <function name="GetProgramPipelineInfoLogEXT" alias="GetProgramPipelineInfoLog" es2="2.0">
<param name="pipeline" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
diff --git a/mesalib/src/mapi/glapi/gen/EXT_texture_integer.xml b/mesalib/src/mapi/glapi/gen/EXT_texture_integer.xml
index aca21f4b1..5f9ea2963 100644
--- a/mesalib/src/mapi/glapi/gen/EXT_texture_integer.xml
+++ b/mesalib/src/mapi/glapi/gen/EXT_texture_integer.xml
@@ -55,14 +55,14 @@
<enum name="LUMINANCE_INTEGER_EXT" value="0x8D9C"/>
<enum name="LUMINANCE_ALPHA_INTEGER_EXT" value="0x8D9D"/>
- <function name="ClearColorIiEXT" offset="assign">
+ <function name="ClearColorIiEXT">
<param name="r" type="GLint"/>
<param name="g" type="GLint"/>
<param name="b" type="GLint"/>
<param name="a" type="GLint"/>
</function>
- <function name="ClearColorIuiEXT" offset="assign">
+ <function name="ClearColorIuiEXT">
<param name="r" type="GLuint"/>
<param name="g" type="GLuint"/>
<param name="b" type="GLuint"/>
diff --git a/mesalib/src/mapi/glapi/gen/EXT_transform_feedback.xml b/mesalib/src/mapi/glapi/gen/EXT_transform_feedback.xml
index 65259fc1f..2aa26ad72 100644
--- a/mesalib/src/mapi/glapi/gen/EXT_transform_feedback.xml
+++ b/mesalib/src/mapi/glapi/gen/EXT_transform_feedback.xml
@@ -32,7 +32,7 @@
<param name="size" type="GLsizeiptr"/>
</function>
- <function name="BindBufferOffsetEXT" offset="assign">
+ <function name="BindBufferOffsetEXT">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="buffer" type="GLuint"/>
@@ -82,33 +82,33 @@
<enum name="TRANSFORM_FEEDBACK_BUFFER_ACTIVE" value="0x8E24"/>
<enum name="TRANSFORM_FEEDBACK_BINDING" value="0x8E25"/>
- <function name="BindTransformFeedback" offset="assign" es2="3.0">
+ <function name="BindTransformFeedback" es2="3.0">
<param name="target" type="GLenum"/>
<param name="id" type="GLuint"/>
</function>
- <function name="DeleteTransformFeedbacks" offset="assign" es2="3.0">
+ <function name="DeleteTransformFeedbacks" es2="3.0">
<param name="n" type="GLsizei"/>
<param name="ids" type="const GLuint *"/>
</function>
- <function name="GenTransformFeedbacks" offset="assign" es2="3.0">
+ <function name="GenTransformFeedbacks" es2="3.0">
<param name="n" type="GLsizei"/>
<param name="ids" type="GLuint *"/>
</function>
- <function name="IsTransformFeedback" offset="assign" es2="3.0">
+ <function name="IsTransformFeedback" es2="3.0">
<param name="id" type="GLuint"/>
<return type="GLboolean"/>
</function>
- <function name="PauseTransformFeedback" offset="assign" es2="3.0">
+ <function name="PauseTransformFeedback" es2="3.0">
</function>
- <function name="ResumeTransformFeedback" offset="assign" es2="3.0">
+ <function name="ResumeTransformFeedback" es2="3.0">
</function>
- <function name="DrawTransformFeedback" offset="assign" exec="dynamic">
+ <function name="DrawTransformFeedback" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/GL3x.xml b/mesalib/src/mapi/glapi/gen/GL3x.xml
index 11c5a186c..a5c7f40a6 100644
--- a/mesalib/src/mapi/glapi/gen/GL3x.xml
+++ b/mesalib/src/mapi/glapi/gen/GL3x.xml
@@ -123,38 +123,38 @@
<!-- These functions are unique to GL3 -->
- <function name="ClearBufferiv" offset="assign" es2="3.0">
+ <function name="ClearBufferiv" es2="3.0">
<param name="buffer" type="GLenum"/>
<param name="drawbuffer" type="GLint"/>
<param name="value" type="const GLint *"/>
</function>
- <function name="ClearBufferuiv" offset="assign" es2="3.0">
+ <function name="ClearBufferuiv" es2="3.0">
<param name="buffer" type="GLenum"/>
<param name="drawbuffer" type="GLint"/>
<param name="value" type="const GLuint *"/>
</function>
- <function name="ClearBufferfv" offset="assign" es2="3.0">
+ <function name="ClearBufferfv" es2="3.0">
<param name="buffer" type="GLenum"/>
<param name="drawbuffer" type="GLint"/>
<param name="value" type="const GLfloat *"/>
</function>
- <function name="ClearBufferfi" offset="assign" es2="3.0">
+ <function name="ClearBufferfi" es2="3.0">
<param name="buffer" type="GLenum"/>
<param name="drawbuffer" type="GLint"/>
<param name="depth" type="GLfloat"/>
<param name="stencil" type="GLint"/>
</function>
- <function name="GetStringi" offset="assign" es2="3.0">
+ <function name="GetStringi" es2="3.0">
<param name="name" type="GLenum"/>
<param name="index" type="GLuint"/>
<return type="const GLubyte *"/>
</function>
- <function name="ClampColor" offset="assign">
+ <function name="ClampColor">
<param name="target" type="GLenum"/>
<param name="clamp" type="GLenum"/>
<glx rop="234"/>
@@ -162,7 +162,7 @@
<!-- These functions alias ones form GL_ARB_draw_buffers2 -->
- <function name="ColorMaski" offset="assign">
+ <function name="ColorMaski">
<param name="buf" type="GLuint"/>
<param name="r" type="GLboolean"/>
<param name="g" type="GLboolean"/>
@@ -170,29 +170,29 @@
<param name="a" type="GLboolean"/>
</function>
- <function name="GetBooleani_v" offset="assign">
+ <function name="GetBooleani_v" es2="3.1">
<param name="value" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="data" type="GLboolean *"/>
</function>
- <function name="GetIntegeri_v" es2="3.0" offset="assign">
+ <function name="GetIntegeri_v" es2="3.0">
<param name="value" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="data" type="GLint *"/>
</function>
- <function name="Enablei" offset="assign">
+ <function name="Enablei">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
</function>
- <function name="Disablei" offset="assign">
+ <function name="Disablei">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
</function>
- <function name="IsEnabledi" offset="assign">
+ <function name="IsEnabledi">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<return type="GLboolean"/>
@@ -200,26 +200,26 @@
<!-- These functions alias ones form GL_EXT_transform_feedback -->
- <function name="GetFragDataLocation" es2="3.0" offset="assign">
+ <function name="GetFragDataLocation" es2="3.0">
<param name="program" type="GLuint"/>
<param name="name" type="const GLchar *"/>
<return type="GLint"/>
</function>
- <function name="BindFragDataLocation" offset="assign">
+ <function name="BindFragDataLocation">
<param name="program" type="GLuint"/>
<param name="colorNumber" type="GLuint"/>
<param name="name" type="const GLchar *"/>
</function>
- <function name="BeginTransformFeedback" es2="3.0" offset="assign">
+ <function name="BeginTransformFeedback" es2="3.0">
<param name="mode" type="GLenum"/>
</function>
- <function name="EndTransformFeedback" es2="3.0" offset="assign">
+ <function name="EndTransformFeedback" es2="3.0">
</function>
- <function name="BindBufferRange" es2="3.0" offset="assign">
+ <function name="BindBufferRange" es2="3.0">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="buffer" type="GLuint"/>
@@ -227,20 +227,20 @@
<param name="size" type="GLsizeiptr"/>
</function>
- <function name="BindBufferBase" es2="3.0" offset="assign">
+ <function name="BindBufferBase" es2="3.0">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="buffer" type="GLuint"/>
</function>
- <function name="TransformFeedbackVaryings" es2="3.0" offset="assign">
+ <function name="TransformFeedbackVaryings" es2="3.0">
<param name="program" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="varyings" type="const GLchar * const *"/>
<param name="bufferMode" type="GLenum"/>
</function>
- <function name="GetTransformFeedbackVarying" es2="3.0" offset="assign">
+ <function name="GetTransformFeedbackVarying" es2="3.0">
<param name="program" type="GLuint"/>
<param name="index" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
@@ -252,17 +252,17 @@
<!-- These functions alias ones from GL_NV_conditional_render -->
- <function name="BeginConditionalRender" offset="assign">
+ <function name="BeginConditionalRender">
<param name="query" type="GLuint"/>
<param name="mode" type="GLenum"/>
</function>
- <function name="EndConditionalRender" offset="assign">
+ <function name="EndConditionalRender">
</function>
<!-- These functions alias ones from GL_EXT_gpu_shader4 -->
- <function name="VertexAttribIPointer" es2="3.0" offset="assign">
+ <function name="VertexAttribIPointer" es2="3.0">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
@@ -270,13 +270,13 @@
<param name="pointer" type="const GLvoid *"/>
</function>
- <function name="GetVertexAttribIiv" es2="3.0" offset="assign">
+ <function name="GetVertexAttribIiv" es2="3.0">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *"/>
</function>
- <function name="GetVertexAttribIuiv" es2="3.0" offset="assign">
+ <function name="GetVertexAttribIuiv" es2="3.0">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLuint *"/>
@@ -334,7 +334,7 @@
<param name="w" type="GLuint"/>
</function>
- <function name="VertexAttribI1iv" offset="assign">
+ <function name="VertexAttribI1iv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *"/>
</function>
@@ -354,7 +354,7 @@
<param name="v" type="const GLint *"/>
</function>
- <function name="VertexAttribI1uiv" offset="assign">
+ <function name="VertexAttribI1uiv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLuint *"/>
</function>
@@ -374,51 +374,51 @@
<param name="v" type="const GLuint *"/>
</function>
- <function name="VertexAttribI4bv" offset="assign">
+ <function name="VertexAttribI4bv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLbyte *"/>
</function>
- <function name="VertexAttribI4sv" offset="assign">
+ <function name="VertexAttribI4sv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *"/>
</function>
- <function name="VertexAttribI4ubv" offset="assign">
+ <function name="VertexAttribI4ubv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLubyte *"/>
</function>
- <function name="VertexAttribI4usv" offset="assign">
+ <function name="VertexAttribI4usv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLushort *"/>
</function>
- <function name="GetUniformuiv" es2="3.0" offset="assign">
+ <function name="GetUniformuiv" es2="3.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="params" type="GLuint *"/>
</function>
- <function name="Uniform1ui" es2="3.0" offset="assign">
+ <function name="Uniform1ui" es2="3.0">
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
</function>
- <function name="Uniform2ui" es2="3.0" offset="assign">
+ <function name="Uniform2ui" es2="3.0">
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
</function>
- <function name="Uniform3ui" es2="3.0" offset="assign">
+ <function name="Uniform3ui" es2="3.0">
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
<param name="z" type="GLuint"/>
</function>
- <function name="Uniform4ui" es2="3.0" offset="assign">
+ <function name="Uniform4ui" es2="3.0">
<param name="location" type="GLint"/>
<param name="x" type="GLuint"/>
<param name="y" type="GLuint"/>
@@ -426,25 +426,25 @@
<param name="w" type="GLuint"/>
</function>
- <function name="Uniform1uiv" es2="3.0" offset="assign">
+ <function name="Uniform1uiv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLuint *" count="count"/>
</function>
- <function name="Uniform2uiv" es2="3.0" offset="assign">
+ <function name="Uniform2uiv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLuint *" count="count" count_scale="2"/>
</function>
- <function name="Uniform3uiv" es2="3.0" offset="assign">
+ <function name="Uniform3uiv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLuint *" count="count" count_scale="3"/>
</function>
- <function name="Uniform4uiv" es2="3.0" offset="assign">
+ <function name="Uniform4uiv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLuint *" count="count" count_scale="4"/>
@@ -452,25 +452,25 @@
<!-- These functions alias ones from GL_EXT_texture_integer -->
- <function name="TexParameterIiv" offset="assign">
+ <function name="TexParameterIiv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
</function>
- <function name="TexParameterIuiv" offset="assign">
+ <function name="TexParameterIuiv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLuint *"/>
</function>
- <function name="GetTexParameterIiv" offset="assign">
+ <function name="GetTexParameterIiv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *"/>
</function>
- <function name="GetTexParameterIuiv" offset="assign">
+ <function name="GetTexParameterIuiv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLuint *"/>
@@ -561,13 +561,13 @@
<param name="primcount" type="GLsizei"/>
</function>
- <function name="TexBuffer" offset="assign">
+ <function name="TexBuffer">
<param name="target" type="GLenum"/>
<param name="internalFormat" type="GLenum"/>
<param name="buffer" type="GLuint"/>
</function>
- <function name="PrimitiveRestartIndex" offset="assign">
+ <function name="PrimitiveRestartIndex">
<param name="index" type="GLuint"/>
</function>
@@ -599,19 +599,19 @@
<enum name="MAX_FRAGMENT_INPUT_COMPONENTS" value="0x9125"/>
<enum name="CONTEXT_PROFILE_MASK" value="0x9126"/>
- <function name="GetInteger64i_v" offset="assign" es2="3.0">
+ <function name="GetInteger64i_v" es2="3.0">
<param name="cap" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="data" type="GLint64 *"/>
</function>
- <function name="GetBufferParameteri64v" offset="assign" es2="3.0">
+ <function name="GetBufferParameteri64v" es2="3.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint64 *"/>
</function>
- <function name="FramebufferTexture" offset="assign">
+ <function name="FramebufferTexture">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="texture" type="GLuint"/>
@@ -629,7 +629,7 @@
<enum name="TEXTURE_SWIZZLE_A" value="0x8E45"/>
<enum name="TEXTURE_SWIZZLE_RGBA" value="0x8E46"/>
- <function name="VertexAttribDivisor" offset="assign" es2="3.0">
+ <function name="VertexAttribDivisor" es2="3.0">
<param name="index" type="GLuint"/>
<param name="divisor" type="GLuint"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/GL4x.xml b/mesalib/src/mapi/glapi/gen/GL4x.xml
index 848316e9e..94ddfb729 100644
--- a/mesalib/src/mapi/glapi/gen/GL4x.xml
+++ b/mesalib/src/mapi/glapi/gen/GL4x.xml
@@ -9,17 +9,17 @@
<enum name="SAMPLE_SHADING" value="0x8C36"/>
<enum name="MIN_SAMPLE_SHADING_VALUE" value="0x8C37"/>
- <function name="MinSampleShading" offset="assign">
+ <function name="MinSampleShading">
<param name="value" type="GLfloat"/>
</function>
- <function name="BlendFunci" static_dispatch="false" alias="BlendFunciARB">
+ <function name="BlendFunci" alias="BlendFunciARB">
<param name="buf" type="GLuint"/>
<param name="sfactor" type="GLenum"/>
<param name="dfactor" type="GLenum"/>
</function>
- <function name="BlendFuncSeparatei" static_dispatch="false" alias="BlendFuncSeparateiARB">
+ <function name="BlendFuncSeparatei" alias="BlendFuncSeparateiARB">
<param name="buf" type="GLuint"/>
<param name="sfactorRGB" type="GLenum"/>
<param name="dfactorRGB" type="GLenum"/>
@@ -27,12 +27,12 @@
<param name="dfactorAlpha" type="GLenum"/>
</function>
- <function name="BlendEquationi" static_dispatch="false" alias="BlendEquationiARB">
+ <function name="BlendEquationi" alias="BlendEquationiARB">
<param name="buf" type="GLuint"/>
<param name="mode" type="GLenum"/>
</function>
- <function name="BlendEquationSeparatei" static_dispatch="false" alias="BlendEquationSeparateiARB" >
+ <function name="BlendEquationSeparatei" alias="BlendEquationSeparateiARB" >
<param name="buf" type="GLuint"/>
<param name="modeRGB" type="GLenum"/>
<param name="modeA" type="GLenum"/>
diff --git a/mesalib/src/mapi/glapi/gen/INTEL_performance_query.xml b/mesalib/src/mapi/glapi/gen/INTEL_performance_query.xml
index 25cd1817f..9573cb1bd 100644
--- a/mesalib/src/mapi/glapi/gen/INTEL_performance_query.xml
+++ b/mesalib/src/mapi/glapi/gen/INTEL_performance_query.xml
@@ -5,21 +5,21 @@
<category name="GL_INTEL_performance_query" number="443">
- <function name="GetFirstPerfQueryIdINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="GetFirstPerfQueryIdINTEL" es2="2.0">
<param name="queryId" type="GLuint *"/>
</function>
- <function name="GetNextPerfQueryIdINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="GetNextPerfQueryIdINTEL" es2="2.0">
<param name="queryId" type="GLuint"/>
<param name="nextQueryId" type="GLuint *"/>
</function>
- <function name="GetPerfQueryIdByNameINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="GetPerfQueryIdByNameINTEL" es2="2.0">
<param name="queryName" type="GLchar *"/>
<param name="queryId" type="GLuint *"/>
</function>
- <function name="GetPerfQueryInfoINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="GetPerfQueryInfoINTEL" es2="2.0">
<param name="queryId" type="GLuint"/>
<param name="queryNameLength" type="GLuint"/>
<param name="queryName" type="GLchar *"/>
@@ -29,7 +29,7 @@
<param name="capsMask" type="GLuint *"/>
</function>
- <function name="GetPerfCounterInfoINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="GetPerfCounterInfoINTEL" es2="2.0">
<param name="queryId" type="GLuint"/>
<param name="counterId" type="GLuint"/>
<param name="counterNameLength" type="GLuint"/>
@@ -43,24 +43,24 @@
<param name="rawCounterMaxValue" type="GLuint64 *"/>
</function>
- <function name="CreatePerfQueryINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="CreatePerfQueryINTEL" es2="2.0">
<param name="queryId" type="GLuint"/>
<param name="queryHandle" type="GLuint *"/>
</function>
- <function name="DeletePerfQueryINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="DeletePerfQueryINTEL" es2="2.0">
<param name="queryHandle" type="GLuint"/>
</function>
- <function name="BeginPerfQueryINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="BeginPerfQueryINTEL" es2="2.0">
<param name="queryHandle" type="GLuint"/>
</function>
- <function name="EndPerfQueryINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="EndPerfQueryINTEL" es2="2.0">
<param name="queryHandle" type="GLuint"/>
</function>
- <function name="GetPerfQueryDataINTEL" offset="assign" static_dispatch="false" es2="2.0">
+ <function name="GetPerfQueryDataINTEL" es2="2.0">
<param name="queryHandle" type="GLuint"/>
<param name="flags" type="GLuint"/>
<param name="dataSize" type="GLsizei"/>
diff --git a/mesalib/src/mapi/glapi/gen/KHR_debug.xml b/mesalib/src/mapi/glapi/gen/KHR_debug.xml
index 48f7fa762..77956d61e 100644
--- a/mesalib/src/mapi/glapi/gen/KHR_debug.xml
+++ b/mesalib/src/mapi/glapi/gen/KHR_debug.xml
@@ -73,7 +73,7 @@
<!-- Compatibility Profile -->
<enum name="DISPLAY_LIST" value="0x82E7"/>
- <function name="DebugMessageControl" offset="assign">
+ <function name="DebugMessageControl">
<param name="source" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="severity" type="GLenum"/>
@@ -82,7 +82,7 @@
<param name="enabled" type="GLboolean"/>
</function>
- <function name="DebugMessageInsert" offset="assign">
+ <function name="DebugMessageInsert">
<param name="source" type="GLenum"/>
<param name="type" type="GLenum"/>
<param name="id" type="GLuint"/>
@@ -91,12 +91,12 @@
<param name="buf" type="const GLchar *"/>
</function>
- <function name="DebugMessageCallback" offset="assign">
+ <function name="DebugMessageCallback">
<param name="callback" type="GLDEBUGPROC"/>
<param name="userParam" type="const GLvoid *"/>
</function>
- <function name="GetDebugMessageLog" offset="assign">
+ <function name="GetDebugMessageLog">
<return type="GLuint"/>
<param name="count" type="GLuint"/>
<param name="bufsize" type="GLsizei"/>
@@ -108,23 +108,23 @@
<param name="messageLog" type="GLchar *" output="true"/>
</function>
- <function name="PushDebugGroup" offset="assign">
+ <function name="PushDebugGroup">
<param name="source" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="length" type="GLsizei"/>
<param name="message" type="const GLchar *"/>
</function>
- <function name="PopDebugGroup" offset="assign"/>
+ <function name="PopDebugGroup" />
- <function name="ObjectLabel" offset="assign">
+ <function name="ObjectLabel">
<param name="identifier" type="GLenum"/>
<param name="name" type="GLuint"/>
<param name="length" type="GLsizei"/>
<param name="label" type="const GLchar *"/>
</function>
- <function name="GetObjectLabel" offset="assign">
+ <function name="GetObjectLabel">
<param name="identifier" type="GLenum"/>
<param name="name" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
@@ -132,13 +132,13 @@
<param name="label" type="GLchar *"/>
</function>
- <function name="ObjectPtrLabel" offset="assign">
+ <function name="ObjectPtrLabel">
<param name="ptr" type="const GLvoid *"/>
<param name="length" type="GLsizei"/>
<param name="label" type="const GLchar *"/>
</function>
- <function name="GetObjectPtrLabel" offset="assign">
+ <function name="GetObjectPtrLabel">
<param name="ptr" type="const GLvoid *"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
diff --git a/mesalib/src/mapi/glapi/gen/Makefile.am b/mesalib/src/mapi/glapi/gen/Makefile.am
index c8d417468..34602579c 100644
--- a/mesalib/src/mapi/glapi/gen/Makefile.am
+++ b/mesalib/src/mapi/glapi/gen/Makefile.am
@@ -61,6 +61,7 @@ EXTRA_DIST= \
$(MESA_GLAPI_DIR)/glapi_x86-64.S \
$(MESA_GLAPI_DIR)/glapi_sparc.S \
$(COMMON_GLX) \
+ apiexec.py \
gl_apitemp.py \
gl_enums.py \
gl_genexec.py \
@@ -75,6 +76,7 @@ EXTRA_DIST= \
glX_proto_size.py \
glX_server_table.py \
remap_helper.py \
+ static_data.py \
SConscript \
gl_API.dtd
@@ -140,6 +142,7 @@ API_XML = \
ARB_map_buffer_range.xml \
ARB_multi_bind.xml \
ARB_pipeline_statistics_query.xml \
+ ARB_program_interface_query.xml \
ARB_robustness.xml \
ARB_sample_shading.xml \
ARB_sampler_objects.xml \
@@ -197,6 +200,7 @@ COMMON = $(API_XML) \
gl_XML.py \
glX_XML.py \
license.py \
+ static_data.py \
typeexpr.py
COMMON_GLX = $(COMMON) glX_API.xml glX_XML.py glX_proto_common.py
@@ -264,7 +268,7 @@ $(MESA_GLAPI_DIR)/glapi_sparc.S: gl_SPARC_asm.py $(COMMON)
$(MESA_DIR)/main/enums.c: gl_enums.py $(COMMON)
$(PYTHON_GEN) $< -f $(srcdir)/gl_and_es_API.xml > $@
-$(MESA_DIR)/main/api_exec.c: gl_genexec.py $(COMMON)
+$(MESA_DIR)/main/api_exec.c: gl_genexec.py apiexec.py $(COMMON)
$(PYTHON_GEN) $< -f $(srcdir)/gl_and_es_API.xml > $@
$(MESA_DIR)/main/dispatch.h: gl_table.py $(COMMON)
@@ -287,7 +291,7 @@ $(MESA_GLX_DIR)/indirect_init.c: glX_proto_send.py $(COMMON_GLX)
$(MESA_GLX_DIR)/indirect_size.h $(XORG_GLX_DIR)/indirect_size.h: glX_proto_size.py $(COMMON_GLX)
$(PYTHON_GEN) $< -f $(srcdir)/gl_API.xml -m size_h --only-set \
- -h _INDIRECT_SIZE_H_ \
+ --header-tag _INDIRECT_SIZE_H_ \
| $(INDENT) $(INDENT_FLAGS) > $@
$(MESA_GLX_DIR)/indirect_size.c: glX_proto_size.py $(COMMON_GLX)
diff --git a/mesalib/src/mapi/glapi/gen/NV_primitive_restart.xml b/mesalib/src/mapi/glapi/gen/NV_primitive_restart.xml
index 39edafe31..232665236 100644
--- a/mesalib/src/mapi/glapi/gen/NV_primitive_restart.xml
+++ b/mesalib/src/mapi/glapi/gen/NV_primitive_restart.xml
@@ -11,9 +11,7 @@
<enum name="PRIMITIVE_RESTART_NV" value="0x8558"/>
<enum name="PRIMITIVE_RESTART_INDEX_NV" value="0x8559"/>
- <function name="PrimitiveRestartNV" offset="assign" deprecated="3.1"
- exec="dynamic">
- </function>
+ <function name="PrimitiveRestartNV" deprecated="3.1" exec="dynamic"/>
<function name="PrimitiveRestartIndexNV" alias="PrimitiveRestartIndex">
<param name="index" type="GLuint"/>
diff --git a/mesalib/src/mapi/glapi/gen/NV_texture_barrier.xml b/mesalib/src/mapi/glapi/gen/NV_texture_barrier.xml
index 52b1a3c08..b4c361cc3 100644
--- a/mesalib/src/mapi/glapi/gen/NV_texture_barrier.xml
+++ b/mesalib/src/mapi/glapi/gen/NV_texture_barrier.xml
@@ -7,7 +7,7 @@
<OpenGLAPI>
<category name="GL_NV_texture_barrier" number="381">
- <function name="TextureBarrierNV" offset="assign" />
+ <function name="TextureBarrierNV"/>
</category>
</OpenGLAPI>
diff --git a/mesalib/src/mapi/glapi/gen/NV_vdpau_interop.xml b/mesalib/src/mapi/glapi/gen/NV_vdpau_interop.xml
index 0b19e1a85..ceef7bdc9 100644
--- a/mesalib/src/mapi/glapi/gen/NV_vdpau_interop.xml
+++ b/mesalib/src/mapi/glapi/gen/NV_vdpau_interop.xml
@@ -5,14 +5,14 @@
<category name="GL_NV_vdpau_interop" number="396">
- <function name="VDPAUInitNV" offset="assign">
+ <function name="VDPAUInitNV">
<param name="vdpDevice" type="const GLvoid *"/>
<param name="getProcAddress" type="const GLvoid *"/>
</function>
- <function name="VDPAUFiniNV" offset="assign"/>
+ <function name="VDPAUFiniNV"/>
- <function name="VDPAURegisterVideoSurfaceNV" offset="assign">
+ <function name="VDPAURegisterVideoSurfaceNV">
<return type="GLintptr"/>
<param name="vdpSurface" type="const GLvoid *"/>
<param name="target" type="GLenum"/>
@@ -20,7 +20,7 @@
<param name="textureNames" type="const GLuint *"/>
</function>
- <function name="VDPAURegisterOutputSurfaceNV" offset="assign">
+ <function name="VDPAURegisterOutputSurfaceNV">
<return type="GLintptr"/>
<param name="vdpSurface" type="const GLvoid *"/>
<param name="target" type="GLenum"/>
@@ -28,16 +28,16 @@
<param name="textureNames" type="const GLuint *"/>
</function>
- <function name="VDPAUIsSurfaceNV" offset="assign">
+ <function name="VDPAUIsSurfaceNV">
<return type="GLboolean"/>
<param name="surface" type="GLintptr"/>
</function>
- <function name="VDPAUUnregisterSurfaceNV" offset="assign">
+ <function name="VDPAUUnregisterSurfaceNV">
<param name="surface" type="GLintptr"/>
</function>
- <function name="VDPAUGetSurfaceivNV" offset="assign">
+ <function name="VDPAUGetSurfaceivNV">
<param name="surface" type="GLintptr"/>
<param name="pname" type="GLenum"/>
<param name="bufSize" type="GLsizei"/>
@@ -45,17 +45,17 @@
<param name="values" type="GLint *"/>
</function>
- <function name="VDPAUSurfaceAccessNV" offset="assign">
+ <function name="VDPAUSurfaceAccessNV">
<param name="surface" type="GLintptr"/>
<param name="access" type="GLenum"/>
</function>
- <function name="VDPAUMapSurfacesNV" offset="assign">
+ <function name="VDPAUMapSurfacesNV">
<param name="numSurfaces" type="GLsizei"/>
<param name="surfaces" type="const GLintptr *"/>
</function>
- <function name="VDPAUUnmapSurfacesNV" offset="assign">
+ <function name="VDPAUUnmapSurfacesNV">
<param name="numSurfaces" type="GLsizei"/>
<param name="surfaces" type="const GLintptr *"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/OES_EGL_image.xml b/mesalib/src/mapi/glapi/gen/OES_EGL_image.xml
index a995cad6c..c483e91f1 100644
--- a/mesalib/src/mapi/glapi/gen/OES_EGL_image.xml
+++ b/mesalib/src/mapi/glapi/gen/OES_EGL_image.xml
@@ -5,14 +5,12 @@
<category name="GL_OES_EGL_image">
- <function name="EGLImageTargetTexture2DOES" offset="assign" es1="1.0"
- es2="2.0">
+ <function name="EGLImageTargetTexture2DOES" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="writeOffset" type="GLvoid *"/>
</function>
- <function name="EGLImageTargetRenderbufferStorageOES" offset="assign"
- es1="1.0" es2="2.0">
+ <function name="EGLImageTargetRenderbufferStorageOES" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="writeOffset" type="GLvoid *"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/OES_fixed_point.xml b/mesalib/src/mapi/glapi/gen/OES_fixed_point.xml
index d62d6e2ec..edd0acdba 100644
--- a/mesalib/src/mapi/glapi/gen/OES_fixed_point.xml
+++ b/mesalib/src/mapi/glapi/gen/OES_fixed_point.xml
@@ -13,52 +13,45 @@
<type name="clampx" size="4" />
<!-- OpenGL ES 1.0 -->
- <function name="AlphaFuncxOES" static_dispatch="false"
- es1="1.0" alias="AlphaFuncx">
+ <function name="AlphaFuncxOES" es1="1.0" alias="AlphaFuncx">
<param name="func" type="GLenum"/>
<param name="ref" type="GLclampx"/>
</function>
- <function name="ClearColorxOES" static_dispatch="false"
- es1="1.0" alias="ClearColorx">
+ <function name="ClearColorxOES" es1="1.0" alias="ClearColorx">
<param name="red" type="GLclampx"/>
<param name="green" type="GLclampx"/>
<param name="blue" type="GLclampx"/>
<param name="alpha" type="GLclampx"/>
</function>
- <function name="ClearDepthxOES" static_dispatch="false"
- es1="1.0" alias="ClearDepthx">
+ <function name="ClearDepthxOES" es1="1.0" alias="ClearDepthx">
<param name="depth" type="GLclampx"/>
</function>
- <function name="Color4xOES" static_dispatch="false"
- es1="1.0" alias="Color4x">
+ <function name="Color4xOES" es1="1.0" alias="Color4x">
<param name="red" type="GLfixed"/>
<param name="green" type="GLfixed"/>
<param name="blue" type="GLfixed"/>
<param name="alpha" type="GLfixed"/>
</function>
- <function name="DepthRangexOES" static_dispatch="false"
- es1="1.0" alias="DepthRangex">
+ <function name="DepthRangexOES" es1="1.0" alias="DepthRangex">
<param name="zNear" type="GLclampx"/>
<param name="zFar" type="GLclampx"/>
</function>
- <function name="FogxOES" static_dispatch="false" es1="1.0" alias="Fogx">
+ <function name="FogxOES" es1="1.0" alias="Fogx">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="FogxvOES" static_dispatch="false"
- es1="1.0" alias="Fogxv">
+ <function name="FogxvOES" es1="1.0" alias="Fogxv">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="FrustumxOES" static_dispatch="false"
- es1="1.0" alias="Frustumx">
+ <function name="FrustumxOES" es1="1.0" alias="Frustumx">
<param name="left" type="GLfixed"/>
<param name="right" type="GLfixed"/>
<param name="bottom" type="GLfixed"/>
@@ -67,63 +60,53 @@
<param name="zFar" type="GLfixed"/>
</function>
- <function name="LightModelxOES" static_dispatch="false"
- es1="1.0" alias="LightModelx">
+ <function name="LightModelxOES" es1="1.0" alias="LightModelx">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="LightModelxvOES" static_dispatch="false"
- es1="1.0" alias="LightModelxv">
+ <function name="LightModelxvOES" es1="1.0" alias="LightModelxv">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="LightxOES" static_dispatch="false"
- es1="1.0" alias="Lightx">
+ <function name="LightxOES" es1="1.0" alias="Lightx">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="LightxvOES" static_dispatch="false"
- es1="1.0" alias="Lightxv">
+ <function name="LightxvOES" es1="1.0" alias="Lightxv">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="LineWidthxOES" static_dispatch="false"
- es1="1.0" alias="LineWidthx">
+ <function name="LineWidthxOES" es1="1.0" alias="LineWidthx">
<param name="width" type="GLfixed"/>
</function>
- <function name="LoadMatrixxOES" static_dispatch="false"
- es1="1.0" alias="LoadMatrixx">
+ <function name="LoadMatrixxOES" es1="1.0" alias="LoadMatrixx">
<param name="m" type="const GLfixed *"/>
</function>
- <function name="MaterialxOES" static_dispatch="false"
- es1="1.0" alias="Materialx">
+ <function name="MaterialxOES" es1="1.0" alias="Materialx">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="MaterialxvOES" static_dispatch="false"
- es1="1.0" alias="Materialxv">
+ <function name="MaterialxvOES" es1="1.0" alias="Materialxv">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="MultMatrixxOES" static_dispatch="false"
- es1="1.0" alias="MultMatrixx">
+ <function name="MultMatrixxOES" es1="1.0" alias="MultMatrixx">
<param name="m" type="const GLfixed *"/>
</function>
- <function name="MultiTexCoord4xOES" static_dispatch="false"
- es1="1.0" alias="MultiTexCoord4x">
+ <function name="MultiTexCoord4xOES" es1="1.0" alias="MultiTexCoord4x">
<param name="target" type="GLenum"/>
<param name="s" type="GLfixed"/>
<param name="t" type="GLfixed"/>
@@ -131,15 +114,13 @@
<param name="q" type="GLfixed"/>
</function>
- <function name="Normal3xOES" static_dispatch="false"
- es1="1.0" alias="Normal3x">
+ <function name="Normal3xOES" es1="1.0" alias="Normal3x">
<param name="nx" type="GLfixed"/>
<param name="ny" type="GLfixed"/>
<param name="nz" type="GLfixed"/>
</function>
- <function name="OrthoxOES" static_dispatch="false"
- es1="1.0" alias="Orthox">
+ <function name="OrthoxOES" es1="1.0" alias="Orthox">
<param name="left" type="GLfixed"/>
<param name="right" type="GLfixed"/>
<param name="bottom" type="GLfixed"/>
@@ -148,149 +129,129 @@
<param name="zFar" type="GLfixed"/>
</function>
- <function name="PointSizexOES" static_dispatch="false"
- es1="1.0" alias="PointSizex">
+ <function name="PointSizexOES" es1="1.0" alias="PointSizex">
<param name="size" type="GLfixed"/>
</function>
- <function name="PolygonOffsetxOES" static_dispatch="false"
- es1="1.0" alias="PolygonOffsetx">
+ <function name="PolygonOffsetxOES" es1="1.0" alias="PolygonOffsetx">
<param name="factor" type="GLfixed"/>
<param name="units" type="GLfixed"/>
</function>
- <function name="RotatexOES" static_dispatch="false"
- es1="1.0" alias="Rotatex">
+ <function name="RotatexOES" es1="1.0" alias="Rotatex">
<param name="angle" type="GLfixed"/>
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
</function>
- <function name="SampleCoveragexOES" static_dispatch="false"
- es1="1.0" alias="SampleCoveragex">
+ <function name="SampleCoveragexOES" es1="1.0" alias="SampleCoveragex">
<param name="value" type="GLclampx"/>
<param name="invert" type="GLboolean"/>
</function>
- <function name="ScalexOES" static_dispatch="false"
- es1="1.0" alias="Scalex">
+ <function name="ScalexOES" es1="1.0" alias="Scalex">
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
</function>
- <function name="TexEnvxOES" static_dispatch="false"
- es1="1.0" alias="TexEnvx">
+ <function name="TexEnvxOES" es1="1.0" alias="TexEnvx">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="TexEnvxvOES" static_dispatch="false"
- es1="1.0" alias="TexEnvxv">
+ <function name="TexEnvxvOES" es1="1.0" alias="TexEnvxv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="TexParameterxOES" static_dispatch="false"
- es1="1.0" alias="TexParameterx">
+ <function name="TexParameterxOES" es1="1.0" alias="TexParameterx">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="TranslatexOES" static_dispatch="false"
- es1="1.0" alias="Translatex">
+ <function name="TranslatexOES" es1="1.0" alias="Translatex">
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
</function>
<!-- OpenGL ES 1.1 -->
- <function name="ClipPlanexOES" static_dispatch="false"
- es1="1.0" alias="ClipPlanex">
+ <function name="ClipPlanexOES" es1="1.0" alias="ClipPlanex">
<param name="plane" type="GLenum"/>
<param name="equation" type="const GLfixed *"/>
</function>
- <function name="GetClipPlanexOES" static_dispatch="false"
+ <function name="GetClipPlanexOES"
es1="1.0" desktop="false" alias="GetClipPlanex">
<param name="plane" type="GLenum"/>
<param name="equation" type="GLfixed *"/>
</function>
- <function name="GetFixedvOES" static_dispatch="false"
- es1="1.0" alias="GetFixedv">
+ <function name="GetFixedvOES" es1="1.0" alias="GetFixedv">
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *"/>
</function>
- <function name="GetLightxvOES" static_dispatch="false"
- es1="1.0" alias="GetLightxv">
+ <function name="GetLightxvOES" es1="1.0" alias="GetLightxv">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *"/>
</function>
- <function name="GetMaterialxvOES" static_dispatch="false"
- es1="1.0" alias="GetMaterialxv">
+ <function name="GetMaterialxvOES" es1="1.0" alias="GetMaterialxv">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *"/>
</function>
- <function name="GetTexEnvxvOES" static_dispatch="false"
- es1="1.0" alias="GetTexEnvxv">
+ <function name="GetTexEnvxvOES" es1="1.0" alias="GetTexEnvxv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *"/>
</function>
- <function name="GetTexParameterxvOES"
- static_dispatch="false" es1="1.0" alias="GetTexParameterxv">
+ <function name="GetTexParameterxvOES" es1="1.0" alias="GetTexParameterxv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *"/>
</function>
- <function name="PointParameterxOES" static_dispatch="false"
- es1="1.0" alias="PointParameterx">
+ <function name="PointParameterxOES" es1="1.0" alias="PointParameterx">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="PointParameterxvOES"
- static_dispatch="false" es1="1.0" alias="PointParameterxv">
+ <function name="PointParameterxvOES" es1="1.0" alias="PointParameterxv">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="TexParameterxvOES" static_dispatch="false"
- es1="1.0" alias="TexParameterxv">
+ <function name="TexParameterxvOES" es1="1.0" alias="TexParameterxv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
<!-- texgen -->
- <function name="GetTexGenxvOES" offset="assign" static_dispatch="false"
+ <function name="GetTexGenxvOES"
es1="1.0" desktop="false">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *" output="true" variable_param="pname"/>
</function>
- <function name="TexGenxOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="TexGenxOES" es1="1.0" desktop="false">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
</function>
- <function name="TexGenxvOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="TexGenxvOES" es1="1.0" desktop="false">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
diff --git a/mesalib/src/mapi/glapi/gen/OES_single_precision.xml b/mesalib/src/mapi/glapi/gen/OES_single_precision.xml
index 8346b64ee..c6795042e 100644
--- a/mesalib/src/mapi/glapi/gen/OES_single_precision.xml
+++ b/mesalib/src/mapi/glapi/gen/OES_single_precision.xml
@@ -6,31 +6,27 @@
<OpenGLAPI>
<category name="GL_OES_single_precision" number="293">
- <function name="ClearDepthfOES" alias="ClearDepthf" static_dispatch="false"
- es1="1.0">
+ <function name="ClearDepthfOES" alias="ClearDepthf" es1="1.0">
<param name="depth" type="GLclampf"/>
</function>
- <function name="ClipPlanefOES" static_dispatch="false"
- es1="1.0" alias="ClipPlanef">
+ <function name="ClipPlanefOES" es1="1.0" alias="ClipPlanef">
<param name="plane" type="GLenum"/>
<param name="equation" type="const GLfloat *"/>
</function>
- <function name="DepthRangefOES" alias="DepthRangef" static_dispatch="false"
- es1="1.0">
+ <function name="DepthRangefOES" alias="DepthRangef" es1="1.0">
<param name="zNear" type="GLclampf"/>
<param name="zFar" type="GLclampf"/>
</function>
- <function name="GetClipPlanefOES" static_dispatch="false"
+ <function name="GetClipPlanefOES"
es1="1.0" desktop="false" alias="GetClipPlanef">
<param name="plane" type="GLenum"/>
<param name="equation" type="GLfloat *"/>
</function>
- <function name="FrustumfOES" static_dispatch="false"
- es1="1.0" alias="Frustumf">
+ <function name="FrustumfOES" es1="1.0" alias="Frustumf">
<param name="left" type="GLfloat"/>
<param name="right" type="GLfloat"/>
<param name="bottom" type="GLfloat"/>
@@ -39,8 +35,7 @@
<param name="zFar" type="GLfloat"/>
</function>
- <function name="OrthofOES" static_dispatch="false"
- es1="1.0" alias="Orthof">
+ <function name="OrthofOES" es1="1.0" alias="Orthof">
<param name="left" type="GLfloat"/>
<param name="right" type="GLfloat"/>
<param name="bottom" type="GLfloat"/>
diff --git a/mesalib/src/mapi/glapi/gen/apiexec.py b/mesalib/src/mapi/glapi/gen/apiexec.py
new file mode 100644
index 000000000..535de8a43
--- /dev/null
+++ b/mesalib/src/mapi/glapi/gen/apiexec.py
@@ -0,0 +1,240 @@
+# Copyright (C) 2015 Intel Corporation
+#
+# 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, sublicense,
+# 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 NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS 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.
+
+class exec_info():
+ """Information relating GL APIs to a function.
+
+ Each of the four attributes of this class, compatibility, core, es1, and
+ es2, specify the minimum API version where a function can possibly exist
+ in Mesa. The version is specified as an integer of (real GL version *
+ 10). For example, glCreateProgram was added in OpenGL 2.0, so
+ compatibility=20 and core=31.
+
+ If the attribute is None, then it cannot be supported by that
+ API. For example, glNewList was removed from core profiles, so
+ compatibility=10 and core=None.
+
+ Each of the attributes that is not None must have a valid value. The
+ valid ranges are:
+
+ compatiblity: [10, 30]
+ core: [31, )
+ es1: [10, 11]
+ es2: [20, )
+
+ These ranges are enforced by the constructor.
+ """
+ def __init__(self, compatibility=None, core=None, es1=None, es2=None):
+ if compatibility is not None:
+ assert isinstance(compatibility, int)
+ assert compatibility >= 10
+ assert compatibility <= 30
+
+ if core is not None:
+ assert isinstance(core, int)
+ assert core >= 31
+
+ if es1 is not None:
+ assert isinstance(es1, int)
+ assert es1 == 10 or es1 == 11
+
+ if es2 is not None:
+ assert isinstance(es2, int)
+ assert es2 >= 20
+
+ self.compatibility = compatibility
+ self.core = core
+ self.es1 = es1
+ self.es2 = es2
+
+functions = {
+ # OpenGL 3.1 / GL_ARB_texture_buffer_object. Mesa only exposes this
+ # extension with core profile.
+ "TexBuffer": exec_info(core=31),
+
+ # OpenGL 3.2 / GL_ARB_geometry_shader4. Mesa does not support
+ # GL_ARB_geometry_shader4, so OpenGL 3.2 is required.
+ "FramebufferTexture": exec_info(core=32),
+
+ # OpenGL 4.0 / GL_ARB_gpu_shader_fp64. The extension spec says:
+ #
+ # "OpenGL 3.2 and GLSL 1.50 are required."
+ "Uniform1d": exec_info(core=32),
+ "Uniform2d": exec_info(core=32),
+ "Uniform3d": exec_info(core=32),
+ "Uniform4d": exec_info(core=32),
+ "Uniform1dv": exec_info(core=32),
+ "Uniform2dv": exec_info(core=32),
+ "Uniform3dv": exec_info(core=32),
+ "Uniform4dv": exec_info(core=32),
+ "UniformMatrix2dv": exec_info(core=32),
+ "UniformMatrix3dv": exec_info(core=32),
+ "UniformMatrix4dv": exec_info(core=32),
+ "UniformMatrix2x3dv": exec_info(core=32),
+ "UniformMatrix2x4dv": exec_info(core=32),
+ "UniformMatrix3x2dv": exec_info(core=32),
+ "UniformMatrix3x4dv": exec_info(core=32),
+ "UniformMatrix4x2dv": exec_info(core=32),
+ "UniformMatrix4x3dv": exec_info(core=32),
+ "GetUniformdv": exec_info(core=32),
+
+ # OpenGL 4.1 / GL_ARB_vertex_attrib_64bit. The extension spec says:
+ #
+ # "OpenGL 3.0 and GLSL 1.30 are required.
+ #
+ # ARB_gpu_shader_fp64 (or equivalent functionality) is required."
+ #
+ # For Mesa this effectively means OpenGL 3.2 is required. It seems
+ # unlikely that Mesa will ever get support for any of the NV extensions
+ # that add "equivalent functionality."
+ "VertexAttribL1d": exec_info(core=32),
+ "VertexAttribL2d": exec_info(core=32),
+ "VertexAttribL3d": exec_info(core=32),
+ "VertexAttribL4d": exec_info(core=32),
+ "VertexAttribL1dv": exec_info(core=32),
+ "VertexAttribL2dv": exec_info(core=32),
+ "VertexAttribL3dv": exec_info(core=32),
+ "VertexAttribL4dv": exec_info(core=32),
+ "VertexAttribLPointer": exec_info(core=32),
+ "GetVertexAttribLdv": exec_info(core=32),
+
+ # OpenGL 4.1 / GL_ARB_viewport_array. The extension spec says:
+ #
+ # "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4
+ # extensions are required."
+ #
+ # Mesa does not support either of the geometry shader extensions, so
+ # OpenGL 3.2 is required.
+ "ViewportArrayv": exec_info(core=32),
+ "ViewportIndexedf": exec_info(core=32),
+ "ViewportIndexedfv": exec_info(core=32),
+ "ScissorArrayv": exec_info(core=32),
+ "ScissorIndexed": exec_info(core=32),
+ "ScissorIndexedv": exec_info(core=32),
+ "DepthRangeArrayv": exec_info(core=32),
+ "DepthRangeIndexed": exec_info(core=32),
+ # GetFloati_v also GL_ARB_shader_atomic_counters
+ # GetDoublei_v also GL_ARB_shader_atomic_counters
+
+ # OpenGL 4.3 / GL_ARB_texture_buffer_range. Mesa can expose the extension
+ # with OpenGL 3.1.
+ "TexBufferRange": exec_info(core=31),
+
+ # OpenGL 4.5 / GL_ARB_direct_state_access. Mesa can expose the extension
+ # with core profile.
+ "CreateTransformFeedbacks": exec_info(core=31),
+ "TransformFeedbackBufferBase": exec_info(core=31),
+ "TransformFeedbackBufferRange": exec_info(core=31),
+ "GetTransformFeedbackiv": exec_info(core=31),
+ "GetTransformFeedbacki_v": exec_info(core=31),
+ "GetTransformFeedbacki64_v": exec_info(core=31),
+ "CreateBuffers": exec_info(core=31),
+ "NamedBufferStorage": exec_info(core=31),
+ "NamedBufferData": exec_info(core=31),
+ "NamedBufferSubData": exec_info(core=31),
+ "CopyNamedBufferSubData": exec_info(core=31),
+ "ClearNamedBufferData": exec_info(core=31),
+ "ClearNamedBufferSubData": exec_info(core=31),
+ "MapNamedBuffer": exec_info(core=31),
+ "MapNamedBufferRange": exec_info(core=31),
+ "UnmapNamedBuffer": exec_info(core=31),
+ "FlushMappedNamedBufferRange": exec_info(core=31),
+ "GetNamedBufferParameteriv": exec_info(core=31),
+ "GetNamedBufferParameteri64v": exec_info(core=31),
+ "GetNamedBufferPointerv": exec_info(core=31),
+ "GetNamedBufferSubData": exec_info(core=31),
+ "CreateFramebuffers": exec_info(core=31),
+ "NamedFramebufferRenderbuffer": exec_info(core=31),
+ "NamedFramebufferParameteri": exec_info(core=31),
+ "NamedFramebufferTexture": exec_info(core=31),
+ "NamedFramebufferTextureLayer": exec_info(core=31),
+ "NamedFramebufferDrawBuffer": exec_info(core=31),
+ "NamedFramebufferDrawBuffers": exec_info(core=31),
+ "NamedFramebufferReadBuffer": exec_info(core=31),
+ "InvalidateNamedFramebufferData": exec_info(core=31),
+ "InvalidateNamedFramebufferSubData": exec_info(core=31),
+ "ClearNamedFramebufferiv": exec_info(core=31),
+ "ClearNamedFramebufferuiv": exec_info(core=31),
+ "ClearNamedFramebufferfv": exec_info(core=31),
+ "ClearNamedFramebufferfi": exec_info(core=31),
+ "BlitNamedFramebuffer": exec_info(core=31),
+ "CheckNamedFramebufferStatus": exec_info(core=31),
+ "GetNamedFramebufferParameteriv": exec_info(core=31),
+ "GetNamedFramebufferAttachmentParameteriv": exec_info(core=31),
+ "CreateRenderbuffers": exec_info(core=31),
+ "NamedRenderbufferStorage": exec_info(core=31),
+ "NamedRenderbufferStorageMultisample": exec_info(core=31),
+ "GetNamedRenderbufferParameteriv": exec_info(core=31),
+ "CreateTextures": exec_info(core=31),
+ "TextureBuffer": exec_info(core=31),
+ "TextureBufferRange": exec_info(core=31),
+ "TextureStorage1D": exec_info(core=31),
+ "TextureStorage2D": exec_info(core=31),
+ "TextureStorage3D": exec_info(core=31),
+ "TextureStorage2DMultisample": exec_info(core=31),
+ "TextureStorage3DMultisample": exec_info(core=31),
+ "TextureSubImage1D": exec_info(core=31),
+ "TextureSubImage2D": exec_info(core=31),
+ "TextureSubImage3D": exec_info(core=31),
+ "CompressedTextureSubImage1D": exec_info(core=31),
+ "CompressedTextureSubImage2D": exec_info(core=31),
+ "CompressedTextureSubImage3D": exec_info(core=31),
+ "CopyTextureSubImage1D": exec_info(core=31),
+ "CopyTextureSubImage2D": exec_info(core=31),
+ "CopyTextureSubImage3D": exec_info(core=31),
+ "TextureParameterf": exec_info(core=31),
+ "TextureParameterfv": exec_info(core=31),
+ "TextureParameteri": exec_info(core=31),
+ "TextureParameterIiv": exec_info(core=31),
+ "TextureParameterIuiv": exec_info(core=31),
+ "TextureParameteriv": exec_info(core=31),
+ "GenerateTextureMipmap": exec_info(core=31),
+ "BindTextureUnit": exec_info(core=31),
+ "GetTextureImage": exec_info(core=31),
+ "GetCompressedTextureImage": exec_info(core=31),
+ "GetTextureLevelParameterfv": exec_info(core=31),
+ "GetTextureLevelParameteriv": exec_info(core=31),
+ "GetTextureParameterfv": exec_info(core=31),
+ "GetTextureParameterIiv": exec_info(core=31),
+ "GetTextureParameterIuiv": exec_info(core=31),
+ "GetTextureParameteriv": exec_info(core=31),
+ "CreateVertexArrays": exec_info(core=31),
+ "DisableVertexArrayAttrib": exec_info(core=31),
+ "EnableVertexArrayAttrib": exec_info(core=31),
+ "VertexArrayElementBuffer": exec_info(core=31),
+ "VertexArrayVertexBuffer": exec_info(core=31),
+ "VertexArrayVertexBuffers": exec_info(core=31),
+ "VertexArrayAttribFormat": exec_info(core=31),
+ "VertexArrayAttribIFormat": exec_info(core=31),
+ "VertexArrayAttribLFormat": exec_info(core=31),
+ "VertexArrayAttribBinding": exec_info(core=31),
+ "VertexArrayBindingDivisor": exec_info(core=31),
+ "GetVertexArrayiv": exec_info(core=31),
+ "GetVertexArrayIndexediv": exec_info(core=31),
+ "GetVertexArrayIndexed64iv": exec_info(core=31),
+ "CreateSamplers": exec_info(core=31),
+ "CreateProgramPipelines": exec_info(core=31),
+ "CreateQueries": exec_info(core=31),
+ "GetQueryBufferObjectiv": exec_info(core=31),
+ "GetQueryBufferObjectuiv": exec_info(core=31),
+ "GetQueryBufferObjecti64v": exec_info(core=31),
+ "GetQueryBufferObjectui64v": exec_info(core=31),
+}
diff --git a/mesalib/src/mapi/glapi/gen/es_EXT.xml b/mesalib/src/mapi/glapi/gen/es_EXT.xml
index 3a2adeb04..642e3b319 100644
--- a/mesalib/src/mapi/glapi/gen/es_EXT.xml
+++ b/mesalib/src/mapi/glapi/gen/es_EXT.xml
@@ -11,7 +11,7 @@
<enum name="BLEND_EQUATION_ALPHA_OES" value="0x883D"/>
<function name="BlendEquationSeparateOES" alias="BlendEquationSeparate"
- static_dispatch="false" es1="1.0">
+ es1="1.0">
<param name="modeRGB" type="GLenum"/>
<param name="modeA" type="GLenum"/>
</function>
@@ -24,8 +24,7 @@
<enum name="BLEND_DST_ALPHA_OES" value="0x80CA"/>
<enum name="BLEND_SRC_ALPHA_OES" value="0x80CB"/>
- <function name="BlendFuncSeparateOES" alias="BlendFuncSeparate"
- static_dispatch="false" es1="1.0">
+ <function name="BlendFuncSeparateOES" alias="BlendFuncSeparate" es1="1.0">
<param name="sfactorRGB" type="GLenum"/>
<param name="dfactorRGB" type="GLenum"/>
<param name="sfactorAlpha" type="GLenum"/>
@@ -40,8 +39,7 @@
<enum name="FUNC_SUBTRACT_OES" value="0x800A"/>
<enum name="FUNC_REVERSE_SUBTRACT_OES" value="0x800B"/>
- <function name="BlendEquationOES" alias="BlendEquation"
- static_dispatch="false" es1="1.0">
+ <function name="BlendEquationOES" alias="BlendEquation" es1="1.0">
<param name="mode" type="GLenum"/>
</function>
</category>
@@ -72,8 +70,7 @@
<category name="GL_OES_draw_texture" number="7">
<enum name="TEXTURE_CROP_RECT_OES" value="0x8B9D"/>
- <function name="DrawTexiOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexiOES" es1="1.0" desktop="false">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
@@ -81,13 +78,11 @@
<param name="height" type="GLint"/>
</function>
- <function name="DrawTexivOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexivOES" es1="1.0" desktop="false">
<param name="coords" type="const GLint *" count="5"/>
</function>
- <function name="DrawTexfOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexfOES" es1="1.0" desktop="false">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
@@ -95,13 +90,11 @@
<param name="height" type="GLfloat"/>
</function>
- <function name="DrawTexfvOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexfvOES" es1="1.0" desktop="false">
<param name="coords" type="const GLfloat *" count="5"/>
</function>
- <function name="DrawTexsOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexsOES" es1="1.0" desktop="false">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
@@ -109,13 +102,11 @@
<param name="height" type="GLshort"/>
</function>
- <function name="DrawTexsvOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexsvOES" es1="1.0" desktop="false">
<param name="coords" type="const GLshort *" count="5"/>
</function>
- <function name="DrawTexxOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexxOES" es1="1.0" desktop="false">
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
@@ -123,8 +114,7 @@
<param name="height" type="GLfixed"/>
</function>
- <function name="DrawTexxvOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="DrawTexxvOES" es1="1.0" desktop="false">
<param name="coords" type="const GLfixed *" count="5"/>
</function>
@@ -177,40 +167,35 @@
<enum name="RENDERBUFFER_STENCIL_SIZE_OES" value="0x8D55"/>
<enum name="RGB565_OES" value="0x8D62"/>
- <function name="BindFramebufferOES" alias="BindFramebuffer"
- static_dispatch="false" es1="1.0">
+ <function name="BindFramebufferOES" alias="BindFramebuffer" es1="1.0">
<param name="target" type="GLenum"/>
<param name="framebuffer" type="GLuint"/>
</function>
- <function name="BindRenderbufferOES" alias="BindRenderbuffer"
- static_dispatch="false" es1="1.0">
+ <function name="BindRenderbufferOES" alias="BindRenderbuffer" es1="1.0">
<param name="target" type="GLenum"/>
<param name="renderbuffer" type="GLuint"/>
</function>
<function name="CheckFramebufferStatusOES"
- alias="CheckFramebufferStatus" static_dispatch="false"
- es1="1.0">
+ alias="CheckFramebufferStatus" es1="1.0">
<param name="target" type="GLenum"/>
<return type="GLenum"/>
</function>
- <function name="DeleteFramebuffersOES" alias="DeleteFramebuffers"
- static_dispatch="false" es1="1.0">
+ <function name="DeleteFramebuffersOES" alias="DeleteFramebuffers" es1="1.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="framebuffers" type="const GLuint *" count="n"/>
</function>
<function name="DeleteRenderbuffersOES" alias="DeleteRenderbuffers"
- static_dispatch="false" es1="1.0">
+ es1="1.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="renderbuffers" type="const GLuint *" count="n"/>
</function>
<function name="FramebufferRenderbufferOES"
- alias="FramebufferRenderbuffer" static_dispatch="false"
- es1="1.0">
+ alias="FramebufferRenderbuffer" es1="1.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="renderbuffertarget" type="GLenum"/>
@@ -218,7 +203,7 @@
</function>
<function name="FramebufferTexture2DOES" alias="FramebufferTexture2D"
- static_dispatch="false" es1="1.0">
+ es1="1.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="textarget" type="GLenum"/>
@@ -226,26 +211,22 @@
<param name="level" type="GLint"/>
</function>
- <function name="GenerateMipmapOES" alias="GenerateMipmap"
- static_dispatch="false" es1="1.0">
+ <function name="GenerateMipmapOES" alias="GenerateMipmap" es1="1.0">
<param name="target" type="GLenum"/>
</function>
- <function name="GenFramebuffersOES" alias="GenFramebuffers"
- static_dispatch="false" es1="1.0">
+ <function name="GenFramebuffersOES" alias="GenFramebuffers" es1="1.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="framebuffers" type="GLuint *" count="n" output="true"/>
</function>
- <function name="GenRenderbuffersOES" alias="GenRenderbuffers"
- static_dispatch="false" es1="1.0">
+ <function name="GenRenderbuffersOES" alias="GenRenderbuffers" es1="1.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="renderbuffers" type="GLuint *" count="n" output="true"/>
</function>
<function name="GetFramebufferAttachmentParameterivOES"
- alias="GetFramebufferAttachmentParameteriv"
- static_dispatch="false" es1="1.0">
+ alias="GetFramebufferAttachmentParameteriv" es1="1.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="pname" type="GLenum"/>
@@ -253,27 +234,24 @@
</function>
<function name="GetRenderbufferParameterivOES"
- alias="GetRenderbufferParameteriv" static_dispatch="false"
- es1="1.0">
+ alias="GetRenderbufferParameteriv" es1="1.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true"/>
</function>
- <function name="IsFramebufferOES" alias="IsFramebuffer"
- static_dispatch="false" es1="1.0">
+ <function name="IsFramebufferOES" alias="IsFramebuffer" es1="1.0">
<param name="framebuffer" type="GLuint"/>
<return type="GLboolean"/>
</function>
- <function name="IsRenderbufferOES" alias="IsRenderbuffer"
- static_dispatch="false" es1="1.0">
+ <function name="IsRenderbufferOES" alias="IsRenderbuffer" es1="1.0">
<param name="renderbuffer" type="GLuint"/>
<return type="GLboolean"/>
</function>
<function name="RenderbufferStorageOES" alias="RenderbufferStorage"
- static_dispatch="false" es1="1.0">
+ es1="1.0">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -308,25 +286,23 @@
<enum name="MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES" value="0x8B9E"/>
<function name="CurrentPaletteMatrixOES" alias="CurrentPaletteMatrixARB"
- static_dispatch="false" exec="skip">
+ exec="skip">
<param name="matrixpaletteindex" type="GLuint"/>
</function>
<!-- no offset -->
- <function name="LoadPaletteFromModelViewMatrixOES" static_dispatch="false"
- exec="skip">
+ <function name="LoadPaletteFromModelViewMatrixOES" exec="skip">
</function>
<function name="MatrixIndexPointerOES" alias="MatrixIndexPointerARB"
- static_dispatch="false" exec="skip">
+ exec="skip">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
</function>
- <function name="WeightPointerOES" alias="WeightPointerARB"
- static_dispatch="false" exec="skip">
+ <function name="WeightPointerOES" alias="WeightPointerARB" exec="skip">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -342,8 +318,7 @@
<enum name="POINT_SIZE_ARRAY_OES" value="0x8B9C"/>
<enum name="POINT_SIZE_ARRAY_BUFFER_BINDING_OES" value="0x8B9F"/>
- <function name="PointSizePointerOES" offset="assign"
- static_dispatch="true" es1="1.0" desktop="false">
+ <function name="PointSizePointerOES" es1="1.0" desktop="false">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
@@ -358,8 +333,7 @@
<!-- optional for es1.0 -->
<category name="GL_OES_query_matrix" number="16">
- <function name="QueryMatrixxOES" offset="assign" static_dispatch="false"
- es1="1.0" desktop="false">
+ <function name="QueryMatrixxOES" es1="1.0" desktop="false">
<param name="mantissa" type="GLfixed *" count="16" />
<param name="exponent" type="GLint *" count="16" />
<return type="GLbitfield"/>
@@ -388,43 +362,37 @@
<enum name="MAX_CUBE_MAP_TEXTURE_SIZE_OES" value="0x851C"/>
<enum name="TEXTURE_GEN_STR_OES" value="0x8D60"/>
- <function name="GetTexGenfvOES" alias="GetTexGenfv" static_dispatch="false"
- es1="1.0">
+ <function name="GetTexGenfvOES" alias="GetTexGenfv" es1="1.0">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
</function>
- <function name="GetTexGenivOES" alias="GetTexGeniv" static_dispatch="false"
- es1="1.0">
+ <function name="GetTexGenivOES" alias="GetTexGeniv" es1="1.0">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
</function>
- <function name="TexGenfOES" alias="TexGenf" static_dispatch="false"
- es1="1.0">
+ <function name="TexGenfOES" alias="TexGenf" es1="1.0">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
</function>
- <function name="TexGenfvOES" alias="TexGenfv" static_dispatch="false"
- es1="1.0">
+ <function name="TexGenfvOES" alias="TexGenfv" es1="1.0">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
</function>
- <function name="TexGeniOES" alias="TexGeni" static_dispatch="false"
- es1="1.0">
+ <function name="TexGeniOES" alias="TexGeni" es1="1.0">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
</function>
- <function name="TexGenivOES" alias="TexGeniv" static_dispatch="false"
- es1="1.0">
+ <function name="TexGenivOES" alias="TexGeniv" es1="1.0">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
@@ -460,21 +428,19 @@
<enum name="BUFFER_MAP_POINTER_OES" value="0x88BD"/>
<function name="GetBufferPointervOES" alias="GetBufferPointerv"
- static_dispatch="false" es1="1.0" es2="2.0">
+ es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLvoid **"/>
</function>
- <function name="MapBufferOES" alias="MapBuffer" static_dispatch="false"
- es1="1.0" es2="2.0">
+ <function name="MapBufferOES" alias="MapBuffer" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="access" type="GLenum"/>
<return type="GLvoid *"/>
</function>
- <function name="UnmapBufferOES" alias="UnmapBuffer"
- static_dispatch="false" es1="1.0" es2="2.0">
+ <function name="UnmapBufferOES" alias="UnmapBuffer" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<return type="GLboolean"/>
</function>
@@ -506,7 +472,7 @@
<enum name="FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES" value="0x8CD4"/>
<function name="CompressedTexImage3DOES" alias="CompressedTexImage3D"
- static_dispatch="false" es2="2.0">
+ es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -519,8 +485,7 @@
</function>
<function name="CompressedTexSubImage3DOES"
- alias="CompressedTexSubImage3D" static_dispatch="false"
- es2="2.0">
+ alias="CompressedTexSubImage3D" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -534,8 +499,7 @@
<param name="data" type="const GLvoid *" count="imageSize"/>
</function>
- <function name="CopyTexSubImage3DOES" alias="CopyTexSubImage3D"
- static_dispatch="false" es2="2.0">
+ <function name="CopyTexSubImage3DOES" alias="CopyTexSubImage3D" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -548,7 +512,7 @@
</function>
<function name="FramebufferTexture3DOES" alias="FramebufferTexture3D"
- static_dispatch="false" es2="2.0">
+ es2="2.0">
<param name="target" type="GLenum"/>
<param name="attachment" type="GLenum"/>
<param name="textarget" type="GLenum"/>
@@ -557,8 +521,7 @@
<param name="zoffset" type="GLint"/>
</function>
- <function name="TexImage3DOES" alias="TexImage3D" static_dispatch="false"
- es2="2.0">
+ <function name="TexImage3DOES" alias="TexImage3D" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -571,8 +534,7 @@
<param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_depth="depth" img_format="format" img_type="type" img_target="target" img_null_flag="true" img_pad_dimensions="true"/>
</function>
- <function name="TexSubImage3DOES" alias="TexSubImage3D"
- static_dispatch="false" es2="2.0">
+ <function name="TexSubImage3DOES" alias="TexSubImage3D" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -630,8 +592,7 @@
<enum name="NUM_PROGRAM_BINARY_FORMATS_OES" value="0x87FE"/>
<enum name="PROGRAM_BINARY_FORMATS_OES" value="0x87FF"/>
- <function name="GetProgramBinaryOES" alias="GetProgramBinary"
- static_dispatch="false" es2="2.0">
+ <function name="GetProgramBinaryOES" alias="GetProgramBinary" es2="2.0">
<param name="program" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
@@ -639,8 +600,7 @@
<param name="binary" type="GLvoid *"/>
</function>
- <function name="ProgramBinaryOES" alias="ProgramBinary"
- static_dispatch="false" es2="2.0">
+ <function name="ProgramBinaryOES" alias="ProgramBinary" es2="2.0">
<param name="program" type="GLuint"/>
<param name="binaryFormat" type="GLenum"/>
<param name="binary" type="const GLvoid *"/>
@@ -666,8 +626,7 @@
<!-- 64. GL_EXT_discard_framebuffer -->
<category name="GL_EXT_discard_framebuffer" number="64">
- <function name="DiscardFramebufferEXT" es1="1.0" es2="2.0"
- offset="assign" static_dispatch="false" desktop="false">
+ <function name="DiscardFramebufferEXT" es1="1.0" es2="2.0" desktop="false">
<param name="target" type="GLenum"/>
<param name="numAttachments" type="GLsizei"/>
<param name="attachments" type="const GLenum *" count="numAttachments"/>
@@ -689,25 +648,21 @@
<!-- 71. GL_OES_vertex_array_object -->
<category name="GL_OES_vertex_array_object" number="71">
- <function name="BindVertexArrayOES" alias="BindVertexArray"
- static_dispatch="false" es2="2.0">
+ <function name="BindVertexArrayOES" alias="BindVertexArray" es2="2.0">
<param name="array" type="GLuint"/>
</function>
- <function name="DeleteVertexArraysOES" alias="DeleteVertexArrays"
- static_dispatch="false" es2="2.0">
+ <function name="DeleteVertexArraysOES" alias="DeleteVertexArrays" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="arrays" type="const GLuint *" count="n"/>
</function>
- <function name="GenVertexArraysOES" alias="GenVertexArrays"
- static_dispatch="false" es2="2.0">
+ <function name="GenVertexArraysOES" alias="GenVertexArrays" es2="2.0">
<param name="n" type="GLsizei"/>
<param name="arrays" type="GLuint *" output="true" count="n"/>
</function>
- <function name="IsVertexArrayOES" alias="IsVertexArray"
- static_dispatch="false" es2="2.0">
+ <function name="IsVertexArrayOES" alias="IsVertexArray" es2="2.0">
<param name="array" type="GLuint"/>
<return type="GLboolean"/>
</function>
@@ -782,8 +737,7 @@
<size name="Get" mode="get"/>
</enum>
- <function name="DrawBuffersNV" alias="DrawBuffers"
- static_dispatch="false" es2="2.0">
+ <function name="DrawBuffersNV" alias="DrawBuffers" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="bufs" type="const GLenum *" count="n"/>
</function>
@@ -791,8 +745,7 @@
<!-- 93. GL_NV_read_buffer -->
<category name="GL_NV_read_buffer">
- <function name="ReadBufferNV" alias="ReadBuffer"
- static_dispatch="false" es2="2.0">
+ <function name="ReadBufferNV" alias="ReadBuffer" es2="2.0">
<param name="mode" type="GLenum"/>
</function>
</category>
@@ -821,7 +774,7 @@
<enum name="MAP_UNSYNCHRONIZED_BIT_EXT" value="0x0020"/>
<function name="MapBufferRangeEXT" alias="MapBufferRange"
- static_dispatch="false" es1="1.0" es2="2.0">
+ es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="size" type="GLsizeiptr"/>
@@ -830,7 +783,7 @@
</function>
<function name="FlushMappedBufferRangeEXT" alias="FlushMappedBufferRange"
- static_dispatch="false" es1="1.0" es2="2.0">
+ es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="length" type="GLsizeiptr"/>
@@ -839,8 +792,7 @@
<!-- 151. GL_EXT_draw_buffers -->
<category name="GL_EXT_draw_buffers" number="151">
- <function name="DrawBuffersEXT" alias="DrawBuffers"
- static_dispatch="false" es2="2.0">
+ <function name="DrawBuffersEXT" alias="DrawBuffers" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="bufs" type="const GLenum *" count="n"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/gen.sh b/mesalib/src/mapi/glapi/gen/gen.sh
index 0b72cdf62..58e8b6867 100755
--- a/mesalib/src/mapi/glapi/gen/gen.sh
+++ b/mesalib/src/mapi/glapi/gen/gen.sh
@@ -1,10 +1,10 @@
./glX_server_table.py -f gl_and_glX_API.xml > indirect_table.c
-./glX_proto_size.py -m size_h --only-set -h _INDIRECT_SIZE_H_ > indirect_size.h
+./glX_proto_size.py -m size_h --only-set --header-tag _INDIRECT_SIZE_H_ > indirect_size.h
./glX_proto_size.py -m size_c --only-set > indirect_size.c
-./glX_proto_size.py -m size_h --only-get -h _INDIRECT_SIZE_GET_H_ > indirect_size_get.h
+./glX_proto_size.py -m size_h --only-get --header-tag _INDIRECT_SIZE_GET_H_ > indirect_size_get.h
./glX_proto_size.py -m size_c --only-get > indirect_size_get.c
./glX_proto_size.py -m reqsize_c > indirect_reqsize.c
-./glX_proto_size.py -m reqsize_h --only-get -h _INDIRECT_SIZE_GET_H_ > indirect_reqsize.h
+./glX_proto_size.py -m reqsize_h --only-get --header-tag _INDIRECT_SIZE_GET_H_ > indirect_reqsize.h
./glX_proto_recv.py -m dispatch_c > indirect_dispatch.c
./glX_proto_recv.py -m dispatch_c -s > indirect_dispatch_swap.c
./glX_proto_recv.py -m dispatch_h -f gl_and_glX_API.xml -s > indirect_dispatch.h
diff --git a/mesalib/src/mapi/glapi/gen/glX_proto_recv.py b/mesalib/src/mapi/glapi/gen/glX_proto_recv.py
index 84a404ce3..08db9e21c 100755
--- a/mesalib/src/mapi/glapi/gen/glX_proto_recv.py
+++ b/mesalib/src/mapi/glapi/gen/glX_proto_recv.py
@@ -25,8 +25,10 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+import string
+
import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt, string
class PrintGlxDispatch_h(gl_XML.gl_print_base):
@@ -535,31 +537,39 @@ class PrintGlxDispatchFunctions(glX_proto_common.glx_print_proto):
return
-if __name__ == '__main__':
- file_name = "gl_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:m:s")
- except Exception,e:
- show_usage()
-
- mode = "dispatch_c"
- do_swap = 0
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-m":
- mode = val
- elif arg == "-s":
- do_swap = 1
-
- if mode == "dispatch_c":
- printer = PrintGlxDispatchFunctions(do_swap)
- elif mode == "dispatch_h":
+def _parser():
+ """Parse any arguments passed and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_API.xml',
+ help='an xml file describing an OpenGL API')
+ parser.add_argument('-m',
+ dest='mode',
+ default='dispatch_c',
+ choices=['dispatch_c', 'dispatch_h'],
+ help='what file to generate')
+ parser.add_argument('-s',
+ dest='swap',
+ action='store_true',
+ help='emit swap in GlXDispatchFunctions')
+ return parser.parse_args()
+
+
+def main():
+ """Main function."""
+ args = _parser()
+
+ if args.mode == "dispatch_c":
+ printer = PrintGlxDispatchFunctions(args.swap)
+ elif args.mode == "dispatch_h":
printer = PrintGlxDispatch_h()
- else:
- show_usage()
- api = gl_XML.parse_GL_API( file_name, glX_proto_common.glx_proto_item_factory() )
+ api = gl_XML.parse_GL_API(
+ args.filename, glX_proto_common.glx_proto_item_factory())
+
+ printer.Print(api)
- printer.Print( api )
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/glX_proto_send.py b/mesalib/src/mapi/glapi/gen/glX_proto_send.py
index b93989f75..2b3303078 100755
--- a/mesalib/src/mapi/glapi/gen/glX_proto_send.py
+++ b/mesalib/src/mapi/glapi/gen/glX_proto_send.py
@@ -2,6 +2,7 @@
# (C) Copyright IBM Corporation 2004, 2005
# All Rights Reserved.
+# Copyright (c) 2015 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
@@ -26,8 +27,10 @@
# Ian Romanick <idr@us.ibm.com>
# Jeremy Kolb <jkolb@brandeis.edu>
+import argparse
+
import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt, copy, string
+import copy, string
def convertStringForXCB(str):
tmp = ""
@@ -1085,42 +1088,41 @@ extern _X_HIDDEN NOINLINE FASTCALL GLubyte * __glXSetupVendorRequest(
print '#endif'
-def show_usage():
- print "Usage: %s [-f input_file_name] [-m output_mode] [-d]" % sys.argv[0]
- print " -m output_mode Output mode can be one of 'proto', 'init_c' or 'init_h'."
- print " -d Enable extra debug information in the generated code."
- sys.exit(1)
-
-
-if __name__ == '__main__':
- file_name = "gl_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:m:d")
- except Exception,e:
- show_usage()
-
- debug = 0
- mode = "proto"
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-m":
- mode = val
- elif arg == "-d":
- debug = 1
-
- if mode == "proto":
+def _parser():
+ """Parse input and returned a parsed namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ default='gl_API.xml',
+ dest='filename',
+ help='An XML file describing an API')
+ parser.add_argument('-m',
+ required=True,
+ dest='mode',
+ choices=frozenset(['proto', 'init_c', 'init_h']),
+ help='which file to generate')
+ parser.add_argument('-d',
+ action='store_true',
+ dest='debug',
+ help='turn debug mode on.')
+ return parser.parse_args()
+
+
+def main():
+ """Main function."""
+ args = _parser()
+
+ if args.mode == "proto":
printer = PrintGlxProtoStubs()
- elif mode == "init_c":
+ elif args.mode == "init_c":
printer = PrintGlxProtoInit_c()
- elif mode == "init_h":
+ elif args.mode == "init_h":
printer = PrintGlxProtoInit_h()
- else:
- show_usage()
-
- printer.debug = debug
- api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
+ printer.debug = args.debug
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
printer.Print( api )
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/glX_proto_size.py b/mesalib/src/mapi/glapi/gen/glX_proto_size.py
index b10c26fc3..9fe7b1941 100755
--- a/mesalib/src/mapi/glapi/gen/glX_proto_size.py
+++ b/mesalib/src/mapi/glapi/gen/glX_proto_size.py
@@ -25,9 +25,11 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+import sys, string
+
import gl_XML, glX_XML
import license
-import sys, getopt, copy, string
class glx_enum_function(object):
@@ -669,54 +671,57 @@ class PrintGlxReqSize_c(PrintGlxReqSize_common):
return alias
-def show_usage():
- print "Usage: %s [-f input_file_name] -m output_mode [--only-get | --only-set] [--get-alias-set]" % sys.argv[0]
- print " -m output_mode Output mode can be one of 'size_c' or 'size_h'."
- print " --only-get Only emit 'get'-type functions."
- print " --only-set Only emit 'set'-type functions."
- print ""
- print "By default, both 'get' and 'set'-type functions are emitted."
- sys.exit(1)
-
-
-if __name__ == '__main__':
- file_name = "gl_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:m:h:", ["only-get", "only-set", "header-tag"])
- except Exception,e:
- show_usage()
-
- mode = None
- header_tag = None
- which_functions = PrintGlxSizeStubs_common.do_get | PrintGlxSizeStubs_common.do_set
-
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-m":
- mode = val
- elif arg == "--only-get":
- which_functions = PrintGlxSizeStubs_common.do_get
- elif arg == "--only-set":
- which_functions = PrintGlxSizeStubs_common.do_set
- elif (arg == '-h') or (arg == "--header-tag"):
- header_tag = val
-
- if mode == "size_c":
- printer = PrintGlxSizeStubs_c( which_functions )
- elif mode == "size_h":
- printer = PrintGlxSizeStubs_h( which_functions )
- if header_tag:
- printer.header_tag = header_tag
- elif mode == "reqsize_c":
+def _parser():
+ """Parse arguments and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.set_defaults(which_functions=(PrintGlxSizeStubs_common.do_get |
+ PrintGlxSizeStubs_common.do_set))
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_API.xml',
+ help='an XML file describing an OpenGL API.')
+ parser.add_argument('-m',
+ dest='mode',
+ choices=['size_c', 'size_h', 'reqsize_c', 'reqsize_h'],
+ help='Which file to generate')
+ getset = parser.add_mutually_exclusive_group()
+ getset.add_argument('--only-get',
+ dest='which_functions',
+ action='store_const',
+ const=PrintGlxSizeStubs_common.do_get,
+ help='only emit "get-type" functions')
+ getset.add_argument('--only-set',
+ dest='which_functions',
+ action='store_const',
+ const=PrintGlxSizeStubs_common.do_set,
+ help='only emit "set-type" functions')
+ parser.add_argument('--header-tag',
+ dest='header_tag',
+ action='store',
+ default=None,
+ help='set header tag value')
+ return parser.parse_args()
+
+
+def main():
+ """Main function."""
+ args = _parser()
+
+ if args.mode == "size_c":
+ printer = PrintGlxSizeStubs_c(args.which_functions)
+ elif args.mode == "size_h":
+ printer = PrintGlxSizeStubs_h(args.which_functions)
+ if args.header_tag is not None:
+ printer.header_tag = args.header_tag
+ elif args.mode == "reqsize_c":
printer = PrintGlxReqSize_c()
- elif mode == "reqsize_h":
+ elif args.mode == "reqsize_h":
printer = PrintGlxReqSize_h()
- else:
- show_usage()
- api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
+
+ printer.Print(api)
- printer.Print( api )
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/glX_server_table.py b/mesalib/src/mapi/glapi/gen/glX_server_table.py
index fa2036ffa..02365221c 100755
--- a/mesalib/src/mapi/glapi/gen/glX_server_table.py
+++ b/mesalib/src/mapi/glapi/gen/glX_server_table.py
@@ -25,8 +25,9 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import gl_XML, glX_XML, glX_proto_common, license
-import sys, getopt
def log2(value):
@@ -387,28 +388,19 @@ class PrintGlxDispatchTables(glX_proto_common.glx_print_proto):
return
-if __name__ == '__main__':
- file_name = "gl_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:m")
- except Exception,e:
- show_usage()
-
- mode = "table_c"
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-m":
- mode = val
+def _parser():
+ """Parse arguments and return namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_API.xml',
+ help='An XML file describing an API.')
+ return parser.parse_args()
- if mode == "table_c":
- printer = PrintGlxDispatchTables()
- else:
- show_usage()
-
-
- api = gl_XML.parse_GL_API( file_name, glX_XML.glx_item_factory() )
+if __name__ == '__main__':
+ args = _parser()
+ printer = PrintGlxDispatchTables()
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
- printer.Print( api )
+ printer.Print(api)
diff --git a/mesalib/src/mapi/glapi/gen/gl_API.dtd b/mesalib/src/mapi/glapi/gen/gl_API.dtd
index ab321fad0..bdc62f1c8 100644
--- a/mesalib/src/mapi/glapi/gen/gl_API.dtd
+++ b/mesalib/src/mapi/glapi/gen/gl_API.dtd
@@ -33,8 +33,6 @@
value NMTOKEN #REQUIRED>
<!ATTLIST function name NMTOKEN #REQUIRED
alias NMTOKEN #IMPLIED
- offset CDATA #IMPLIED
- static_dispatch (true | false) "true"
vectorequiv NMTOKEN #IMPLIED
es1 CDATA "none"
es2 CDATA "none"
diff --git a/mesalib/src/mapi/glapi/gen/gl_API.xml b/mesalib/src/mapi/glapi/gen/gl_API.xml
index 0e2545636..6efc69b18 100755
--- a/mesalib/src/mapi/glapi/gen/gl_API.xml
+++ b/mesalib/src/mapi/glapi/gen/gl_API.xml
@@ -1109,51 +1109,51 @@
<type name="DEBUGPROCARB" size="4" pointer="true"/>
<type name="DEBUGPROC" size="4" pointer="true"/>
- <function name="NewList" offset="0" deprecated="3.1">
+ <function name="NewList" deprecated="3.1">
<param name="list" type="GLuint"/>
<param name="mode" type="GLenum"/>
<glx sop="101"/>
</function>
- <function name="EndList" offset="1" deprecated="3.1">
+ <function name="EndList" deprecated="3.1">
<glx sop="102"/>
</function>
- <function name="CallList" offset="2" deprecated="3.1">
+ <function name="CallList" deprecated="3.1">
<param name="list" type="GLuint"/>
<glx rop="1"/>
</function>
- <function name="CallLists" offset="3" deprecated="3.1">
+ <function name="CallLists" deprecated="3.1">
<param name="n" type="GLsizei" counter="true"/>
<param name="type" type="GLenum"/>
<param name="lists" type="const GLvoid *" variable_param="type" count="n"/>
<glx rop="2" large="true"/>
</function>
- <function name="DeleteLists" offset="4" deprecated="3.1">
+ <function name="DeleteLists" deprecated="3.1">
<param name="list" type="GLuint"/>
<param name="range" type="GLsizei"/>
<glx sop="103"/>
</function>
- <function name="GenLists" offset="5" deprecated="3.1">
+ <function name="GenLists" deprecated="3.1">
<param name="range" type="GLsizei"/>
<return type="GLuint"/>
<glx sop="104"/>
</function>
- <function name="ListBase" offset="6" deprecated="3.1">
+ <function name="ListBase" deprecated="3.1">
<param name="base" type="GLuint"/>
<glx rop="3"/>
</function>
- <function name="Begin" offset="7" deprecated="3.1" exec="dynamic">
+ <function name="Begin" deprecated="3.1" exec="dynamic">
<param name="mode" type="GLenum"/>
<glx rop="4"/>
</function>
- <function name="Bitmap" offset="8" deprecated="3.1">
+ <function name="Bitmap" deprecated="3.1">
<param name="width" type="GLsizei"/>
<param name="height" type="GLsizei"/>
<param name="xorig" type="GLfloat"/>
@@ -1164,129 +1164,120 @@
<glx rop="5" large="true"/>
</function>
- <function name="Color3b" offset="9" vectorequiv="Color3bv"
- deprecated="3.1">
+ <function name="Color3b" vectorequiv="Color3bv" deprecated="3.1">
<param name="red" type="GLbyte"/>
<param name="green" type="GLbyte"/>
<param name="blue" type="GLbyte"/>
</function>
- <function name="Color3bv" offset="10" deprecated="3.1">
+ <function name="Color3bv" deprecated="3.1">
<param name="v" type="const GLbyte *" count="3"/>
<glx rop="6"/>
</function>
- <function name="Color3d" offset="11" vectorequiv="Color3dv"
- deprecated="3.1">
+ <function name="Color3d" vectorequiv="Color3dv" deprecated="3.1">
<param name="red" type="GLdouble"/>
<param name="green" type="GLdouble"/>
<param name="blue" type="GLdouble"/>
</function>
- <function name="Color3dv" offset="12" deprecated="3.1">
+ <function name="Color3dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="7"/>
</function>
- <function name="Color3f" offset="13" vectorequiv="Color3fv"
- deprecated="3.1" exec="dynamic">
+ <function name="Color3f" vectorequiv="Color3fv"
+ deprecated="3.1" exec="dynamic">
<param name="red" type="GLfloat"/>
<param name="green" type="GLfloat"/>
<param name="blue" type="GLfloat"/>
</function>
- <function name="Color3fv" offset="14" deprecated="3.1" exec="dynamic">
+ <function name="Color3fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="8"/>
</function>
- <function name="Color3i" offset="15" vectorequiv="Color3iv"
- deprecated="3.1">
+ <function name="Color3i" vectorequiv="Color3iv" deprecated="3.1">
<param name="red" type="GLint"/>
<param name="green" type="GLint"/>
<param name="blue" type="GLint"/>
</function>
- <function name="Color3iv" offset="16" deprecated="3.1">
+ <function name="Color3iv" deprecated="3.1">
<param name="v" type="const GLint *" count="3"/>
<glx rop="9"/>
</function>
- <function name="Color3s" offset="17" vectorequiv="Color3sv"
- deprecated="3.1">
+ <function name="Color3s" vectorequiv="Color3sv" deprecated="3.1">
<param name="red" type="GLshort"/>
<param name="green" type="GLshort"/>
<param name="blue" type="GLshort"/>
</function>
- <function name="Color3sv" offset="18" deprecated="3.1">
+ <function name="Color3sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="3"/>
<glx rop="10"/>
</function>
- <function name="Color3ub" offset="19" vectorequiv="Color3ubv"
- deprecated="3.1">
+ <function name="Color3ub" vectorequiv="Color3ubv" deprecated="3.1">
<param name="red" type="GLubyte"/>
<param name="green" type="GLubyte"/>
<param name="blue" type="GLubyte"/>
</function>
- <function name="Color3ubv" offset="20" deprecated="3.1">
+ <function name="Color3ubv" deprecated="3.1">
<param name="v" type="const GLubyte *" count="3"/>
<glx rop="11"/>
</function>
- <function name="Color3ui" offset="21" vectorequiv="Color3uiv"
- deprecated="3.1">
+ <function name="Color3ui" vectorequiv="Color3uiv" deprecated="3.1">
<param name="red" type="GLuint"/>
<param name="green" type="GLuint"/>
<param name="blue" type="GLuint"/>
</function>
- <function name="Color3uiv" offset="22" deprecated="3.1">
+ <function name="Color3uiv" deprecated="3.1">
<param name="v" type="const GLuint *" count="3"/>
<glx rop="12"/>
</function>
- <function name="Color3us" offset="23" vectorequiv="Color3usv"
- deprecated="3.1">
+ <function name="Color3us" vectorequiv="Color3usv" deprecated="3.1">
<param name="red" type="GLushort"/>
<param name="green" type="GLushort"/>
<param name="blue" type="GLushort"/>
</function>
- <function name="Color3usv" offset="24" deprecated="3.1">
+ <function name="Color3usv" deprecated="3.1">
<param name="v" type="const GLushort *" count="3"/>
<glx rop="13"/>
</function>
- <function name="Color4b" offset="25" vectorequiv="Color4bv"
- deprecated="3.1">
+ <function name="Color4b" vectorequiv="Color4bv" deprecated="3.1">
<param name="red" type="GLbyte"/>
<param name="green" type="GLbyte"/>
<param name="blue" type="GLbyte"/>
<param name="alpha" type="GLbyte"/>
</function>
- <function name="Color4bv" offset="26" deprecated="3.1">
+ <function name="Color4bv" deprecated="3.1">
<param name="v" type="const GLbyte *" count="4"/>
<glx rop="14"/>
</function>
- <function name="Color4d" offset="27" vectorequiv="Color4dv"
- deprecated="3.1">
+ <function name="Color4d" vectorequiv="Color4dv" deprecated="3.1">
<param name="red" type="GLdouble"/>
<param name="green" type="GLdouble"/>
<param name="blue" type="GLdouble"/>
<param name="alpha" type="GLdouble"/>
</function>
- <function name="Color4dv" offset="28" deprecated="3.1">
+ <function name="Color4dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="15"/>
</function>
- <function name="Color4f" offset="29" vectorequiv="Color4fv" es1="1.0"
+ <function name="Color4f" vectorequiv="Color4fv" es1="1.0"
deprecated="3.1" exec="dynamic">
<param name="red" type="GLfloat"/>
<param name="green" type="GLfloat"/>
@@ -1294,38 +1285,36 @@
<param name="alpha" type="GLfloat"/>
</function>
- <function name="Color4fv" offset="30" deprecated="3.1" exec="dynamic">
+ <function name="Color4fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="16"/>
</function>
- <function name="Color4i" offset="31" vectorequiv="Color4iv"
- deprecated="3.1">
+ <function name="Color4i" vectorequiv="Color4iv" deprecated="3.1">
<param name="red" type="GLint"/>
<param name="green" type="GLint"/>
<param name="blue" type="GLint"/>
<param name="alpha" type="GLint"/>
</function>
- <function name="Color4iv" offset="32" deprecated="3.1">
+ <function name="Color4iv" deprecated="3.1">
<param name="v" type="const GLint *" count="4"/>
<glx rop="17"/>
</function>
- <function name="Color4s" offset="33" vectorequiv="Color4sv"
- deprecated="3.1">
+ <function name="Color4s" vectorequiv="Color4sv" deprecated="3.1">
<param name="red" type="GLshort"/>
<param name="green" type="GLshort"/>
<param name="blue" type="GLshort"/>
<param name="alpha" type="GLshort"/>
</function>
- <function name="Color4sv" offset="34" deprecated="3.1">
+ <function name="Color4sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="4"/>
<glx rop="18"/>
</function>
- <function name="Color4ub" offset="35" vectorequiv="Color4ubv" es1="1.1"
+ <function name="Color4ub" vectorequiv="Color4ubv" es1="1.1"
deprecated="3.1">
<param name="red" type="GLubyte"/>
<param name="green" type="GLubyte"/>
@@ -1333,494 +1322,462 @@
<param name="alpha" type="GLubyte"/>
</function>
- <function name="Color4ubv" offset="36" deprecated="3.1">
+ <function name="Color4ubv" deprecated="3.1">
<param name="v" type="const GLubyte *" count="4"/>
<glx rop="19"/>
</function>
- <function name="Color4ui" offset="37" vectorequiv="Color4uiv"
- deprecated="3.1">
+ <function name="Color4ui" vectorequiv="Color4uiv" deprecated="3.1">
<param name="red" type="GLuint"/>
<param name="green" type="GLuint"/>
<param name="blue" type="GLuint"/>
<param name="alpha" type="GLuint"/>
</function>
- <function name="Color4uiv" offset="38" deprecated="3.1">
+ <function name="Color4uiv" deprecated="3.1">
<param name="v" type="const GLuint *" count="4"/>
<glx rop="20"/>
</function>
- <function name="Color4us" offset="39" vectorequiv="Color4usv"
- deprecated="3.1">
+ <function name="Color4us" vectorequiv="Color4usv" deprecated="3.1">
<param name="red" type="GLushort"/>
<param name="green" type="GLushort"/>
<param name="blue" type="GLushort"/>
<param name="alpha" type="GLushort"/>
</function>
- <function name="Color4usv" offset="40" deprecated="3.1">
+ <function name="Color4usv" deprecated="3.1">
<param name="v" type="const GLushort *" count="4"/>
<glx rop="21"/>
</function>
- <function name="EdgeFlag" offset="41" vectorequiv="EdgeFlagv"
+ <function name="EdgeFlag" vectorequiv="EdgeFlagv"
deprecated="3.1" exec="dynamic">
<param name="flag" type="GLboolean"/>
</function>
- <function name="EdgeFlagv" offset="42" deprecated="3.1">
+ <function name="EdgeFlagv" deprecated="3.1">
<param name="flag" type="const GLboolean *" count="1"/>
<glx rop="22"/>
</function>
- <function name="End" offset="43" deprecated="3.1" exec="dynamic">
+ <function name="End" deprecated="3.1" exec="dynamic">
<glx rop="23"/>
</function>
- <function name="Indexd" offset="44" vectorequiv="Indexdv" deprecated="3.1">
+ <function name="Indexd" vectorequiv="Indexdv" deprecated="3.1">
<param name="c" type="GLdouble"/>
</function>
- <function name="Indexdv" offset="45" deprecated="3.1">
+ <function name="Indexdv" deprecated="3.1">
<param name="c" type="const GLdouble *" count="1"/>
<glx rop="24"/>
</function>
- <function name="Indexf" offset="46" vectorequiv="Indexfv" deprecated="3.1"
+ <function name="Indexf" vectorequiv="Indexfv" deprecated="3.1"
exec="dynamic">
<param name="c" type="GLfloat"/>
</function>
- <function name="Indexfv" offset="47" deprecated="3.1" exec="dynamic">
+ <function name="Indexfv" deprecated="3.1" exec="dynamic">
<param name="c" type="const GLfloat *" count="1"/>
<glx rop="25"/>
</function>
- <function name="Indexi" offset="48" vectorequiv="Indexiv" deprecated="3.1">
+ <function name="Indexi" vectorequiv="Indexiv" deprecated="3.1">
<param name="c" type="GLint"/>
</function>
- <function name="Indexiv" offset="49" deprecated="3.1">
+ <function name="Indexiv" deprecated="3.1">
<param name="c" type="const GLint *" count="1"/>
<glx rop="26"/>
</function>
- <function name="Indexs" offset="50" vectorequiv="Indexsv" deprecated="3.1">
+ <function name="Indexs" vectorequiv="Indexsv" deprecated="3.1">
<param name="c" type="GLshort"/>
</function>
- <function name="Indexsv" offset="51" deprecated="3.1">
+ <function name="Indexsv" deprecated="3.1">
<param name="c" type="const GLshort *" count="1"/>
<glx rop="27"/>
</function>
- <function name="Normal3b" offset="52" vectorequiv="Normal3bv"
- deprecated="3.1">
+ <function name="Normal3b" vectorequiv="Normal3bv" deprecated="3.1">
<param name="nx" type="GLbyte"/>
<param name="ny" type="GLbyte"/>
<param name="nz" type="GLbyte"/>
</function>
- <function name="Normal3bv" offset="53" deprecated="3.1">
+ <function name="Normal3bv" deprecated="3.1">
<param name="v" type="const GLbyte *" count="3"/>
<glx rop="28"/>
</function>
- <function name="Normal3d" offset="54" vectorequiv="Normal3dv"
- deprecated="3.1">
+ <function name="Normal3d" vectorequiv="Normal3dv" deprecated="3.1">
<param name="nx" type="GLdouble"/>
<param name="ny" type="GLdouble"/>
<param name="nz" type="GLdouble"/>
</function>
- <function name="Normal3dv" offset="55" deprecated="3.1">
+ <function name="Normal3dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="29"/>
</function>
- <function name="Normal3f" offset="56" vectorequiv="Normal3fv" es1="1.0"
+ <function name="Normal3f" vectorequiv="Normal3fv" es1="1.0"
deprecated="3.1" exec="dynamic">
<param name="nx" type="GLfloat"/>
<param name="ny" type="GLfloat"/>
<param name="nz" type="GLfloat"/>
</function>
- <function name="Normal3fv" offset="57" deprecated="3.1" exec="dynamic">
+ <function name="Normal3fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="30"/>
</function>
- <function name="Normal3i" offset="58" vectorequiv="Normal3iv"
- deprecated="3.1">
+ <function name="Normal3i" vectorequiv="Normal3iv" deprecated="3.1">
<param name="nx" type="GLint"/>
<param name="ny" type="GLint"/>
<param name="nz" type="GLint"/>
</function>
- <function name="Normal3iv" offset="59" deprecated="3.1">
+ <function name="Normal3iv" deprecated="3.1">
<param name="v" type="const GLint *" count="3"/>
<glx rop="31"/>
</function>
- <function name="Normal3s" offset="60" vectorequiv="Normal3sv"
- deprecated="3.1">
+ <function name="Normal3s" vectorequiv="Normal3sv" deprecated="3.1">
<param name="nx" type="GLshort"/>
<param name="ny" type="GLshort"/>
<param name="nz" type="GLshort"/>
</function>
- <function name="Normal3sv" offset="61" deprecated="3.1">
+ <function name="Normal3sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="3"/>
<glx rop="32"/>
</function>
- <function name="RasterPos2d" offset="62" vectorequiv="RasterPos2dv"
- deprecated="3.1">
+ <function name="RasterPos2d" vectorequiv="RasterPos2dv" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
</function>
- <function name="RasterPos2dv" offset="63" deprecated="3.1">
+ <function name="RasterPos2dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="2"/>
<glx rop="33"/>
</function>
- <function name="RasterPos2f" offset="64" vectorequiv="RasterPos2fv"
- deprecated="3.1">
+ <function name="RasterPos2f" vectorequiv="RasterPos2fv" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
</function>
- <function name="RasterPos2fv" offset="65" deprecated="3.1">
+ <function name="RasterPos2fv" deprecated="3.1">
<param name="v" type="const GLfloat *" count="2"/>
<glx rop="34"/>
</function>
- <function name="RasterPos2i" offset="66" vectorequiv="RasterPos2iv"
- deprecated="3.1">
+ <function name="RasterPos2i" vectorequiv="RasterPos2iv" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
</function>
- <function name="RasterPos2iv" offset="67" deprecated="3.1">
+ <function name="RasterPos2iv" deprecated="3.1">
<param name="v" type="const GLint *" count="2"/>
<glx rop="35"/>
</function>
- <function name="RasterPos2s" offset="68" vectorequiv="RasterPos2sv"
- deprecated="3.1">
+ <function name="RasterPos2s" vectorequiv="RasterPos2sv" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
</function>
- <function name="RasterPos2sv" offset="69" deprecated="3.1">
+ <function name="RasterPos2sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="2"/>
<glx rop="36"/>
</function>
- <function name="RasterPos3d" offset="70" vectorequiv="RasterPos3dv"
- deprecated="3.1">
+ <function name="RasterPos3d" vectorequiv="RasterPos3dv" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
</function>
- <function name="RasterPos3dv" offset="71" deprecated="3.1">
+ <function name="RasterPos3dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="37"/>
</function>
- <function name="RasterPos3f" offset="72" vectorequiv="RasterPos3fv"
- deprecated="3.1">
+ <function name="RasterPos3f" vectorequiv="RasterPos3fv" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
</function>
- <function name="RasterPos3fv" offset="73" deprecated="3.1">
+ <function name="RasterPos3fv" deprecated="3.1">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="38"/>
</function>
- <function name="RasterPos3i" offset="74" vectorequiv="RasterPos3iv"
- deprecated="3.1">
+ <function name="RasterPos3i" vectorequiv="RasterPos3iv" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
</function>
- <function name="RasterPos3iv" offset="75" deprecated="3.1">
+ <function name="RasterPos3iv" deprecated="3.1">
<param name="v" type="const GLint *" count="3"/>
<glx rop="39"/>
</function>
- <function name="RasterPos3s" offset="76" vectorequiv="RasterPos3sv"
- deprecated="3.1">
+ <function name="RasterPos3s" vectorequiv="RasterPos3sv" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
</function>
- <function name="RasterPos3sv" offset="77" deprecated="3.1">
+ <function name="RasterPos3sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="3"/>
<glx rop="40"/>
</function>
- <function name="RasterPos4d" offset="78" vectorequiv="RasterPos4dv"
- deprecated="3.1">
+ <function name="RasterPos4d" vectorequiv="RasterPos4dv" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
<param name="w" type="GLdouble"/>
</function>
- <function name="RasterPos4dv" offset="79" deprecated="3.1">
+ <function name="RasterPos4dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="41"/>
</function>
- <function name="RasterPos4f" offset="80" vectorequiv="RasterPos4fv"
- deprecated="3.1">
+ <function name="RasterPos4f" vectorequiv="RasterPos4fv" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
<param name="w" type="GLfloat"/>
</function>
- <function name="RasterPos4fv" offset="81" deprecated="3.1">
+ <function name="RasterPos4fv" deprecated="3.1">
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="42"/>
</function>
- <function name="RasterPos4i" offset="82" vectorequiv="RasterPos4iv"
- deprecated="3.1">
+ <function name="RasterPos4i" vectorequiv="RasterPos4iv" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
<param name="w" type="GLint"/>
</function>
- <function name="RasterPos4iv" offset="83" deprecated="3.1">
+ <function name="RasterPos4iv" deprecated="3.1">
<param name="v" type="const GLint *" count="4"/>
<glx rop="43"/>
</function>
- <function name="RasterPos4s" offset="84" vectorequiv="RasterPos4sv"
- deprecated="3.1">
+ <function name="RasterPos4s" vectorequiv="RasterPos4sv" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
<param name="w" type="GLshort"/>
</function>
- <function name="RasterPos4sv" offset="85" deprecated="3.1">
+ <function name="RasterPos4sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="4"/>
<glx rop="44"/>
</function>
- <function name="Rectd" offset="86" vectorequiv="Rectdv" deprecated="3.1">
+ <function name="Rectd" vectorequiv="Rectdv" deprecated="3.1">
<param name="x1" type="GLdouble"/>
<param name="y1" type="GLdouble"/>
<param name="x2" type="GLdouble"/>
<param name="y2" type="GLdouble"/>
</function>
- <function name="Rectdv" offset="87" deprecated="3.1">
+ <function name="Rectdv" deprecated="3.1">
<param name="v1" type="const GLdouble *" count="2"/>
<param name="v2" type="const GLdouble *" count="2"/>
<glx rop="45"/>
</function>
- <function name="Rectf" offset="88" vectorequiv="Rectfv" deprecated="3.1"
- exec="dynamic">
+ <function name="Rectf" vectorequiv="Rectfv" deprecated="3.1" exec="dynamic">
<param name="x1" type="GLfloat"/>
<param name="y1" type="GLfloat"/>
<param name="x2" type="GLfloat"/>
<param name="y2" type="GLfloat"/>
</function>
- <function name="Rectfv" offset="89" deprecated="3.1">
+ <function name="Rectfv" deprecated="3.1">
<param name="v1" type="const GLfloat *" count="2"/>
<param name="v2" type="const GLfloat *" count="2"/>
<glx rop="46"/>
</function>
- <function name="Recti" offset="90" vectorequiv="Rectiv" deprecated="3.1">
+ <function name="Recti" vectorequiv="Rectiv" deprecated="3.1">
<param name="x1" type="GLint"/>
<param name="y1" type="GLint"/>
<param name="x2" type="GLint"/>
<param name="y2" type="GLint"/>
</function>
- <function name="Rectiv" offset="91" deprecated="3.1">
+ <function name="Rectiv" deprecated="3.1">
<param name="v1" type="const GLint *" count="2"/>
<param name="v2" type="const GLint *" count="2"/>
<glx rop="47"/>
</function>
- <function name="Rects" offset="92" vectorequiv="Rectsv" deprecated="3.1">
+ <function name="Rects" vectorequiv="Rectsv" deprecated="3.1">
<param name="x1" type="GLshort"/>
<param name="y1" type="GLshort"/>
<param name="x2" type="GLshort"/>
<param name="y2" type="GLshort"/>
</function>
- <function name="Rectsv" offset="93" deprecated="3.1">
+ <function name="Rectsv" deprecated="3.1">
<param name="v1" type="const GLshort *" count="2"/>
<param name="v2" type="const GLshort *" count="2"/>
<glx rop="48"/>
</function>
- <function name="TexCoord1d" offset="94" vectorequiv="TexCoord1dv"
- deprecated="3.1">
+ <function name="TexCoord1d" vectorequiv="TexCoord1dv" deprecated="3.1">
<param name="s" type="GLdouble"/>
</function>
- <function name="TexCoord1dv" offset="95" deprecated="3.1">
+ <function name="TexCoord1dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="1"/>
<glx rop="49"/>
</function>
- <function name="TexCoord1f" offset="96" vectorequiv="TexCoord1fv"
+ <function name="TexCoord1f" vectorequiv="TexCoord1fv"
deprecated="3.1" exec="dynamic">
<param name="s" type="GLfloat"/>
</function>
- <function name="TexCoord1fv" offset="97" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoord1fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="1"/>
<glx rop="50"/>
</function>
- <function name="TexCoord1i" offset="98" vectorequiv="TexCoord1iv"
- deprecated="3.1">
+ <function name="TexCoord1i" vectorequiv="TexCoord1iv" deprecated="3.1">
<param name="s" type="GLint"/>
</function>
- <function name="TexCoord1iv" offset="99" deprecated="3.1">
+ <function name="TexCoord1iv" deprecated="3.1">
<param name="v" type="const GLint *" count="1"/>
<glx rop="51"/>
</function>
- <function name="TexCoord1s" offset="100" vectorequiv="TexCoord1sv"
- deprecated="3.1">
+ <function name="TexCoord1s" vectorequiv="TexCoord1sv" deprecated="3.1">
<param name="s" type="GLshort"/>
</function>
- <function name="TexCoord1sv" offset="101" deprecated="3.1">
+ <function name="TexCoord1sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="1"/>
<glx rop="52"/>
</function>
- <function name="TexCoord2d" offset="102" vectorequiv="TexCoord2dv"
- deprecated="3.1">
+ <function name="TexCoord2d" vectorequiv="TexCoord2dv" deprecated="3.1">
<param name="s" type="GLdouble"/>
<param name="t" type="GLdouble"/>
</function>
- <function name="TexCoord2dv" offset="103" deprecated="3.1">
+ <function name="TexCoord2dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="2"/>
<glx rop="53"/>
</function>
- <function name="TexCoord2f" offset="104" vectorequiv="TexCoord2fv"
+ <function name="TexCoord2f" vectorequiv="TexCoord2fv"
deprecated="3.1" exec="dynamic">
<param name="s" type="GLfloat"/>
<param name="t" type="GLfloat"/>
</function>
- <function name="TexCoord2fv" offset="105" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoord2fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="2"/>
<glx rop="54"/>
</function>
- <function name="TexCoord2i" offset="106" vectorequiv="TexCoord2iv"
- deprecated="3.1">
+ <function name="TexCoord2i" vectorequiv="TexCoord2iv" deprecated="3.1">
<param name="s" type="GLint"/>
<param name="t" type="GLint"/>
</function>
- <function name="TexCoord2iv" offset="107" deprecated="3.1">
+ <function name="TexCoord2iv" deprecated="3.1">
<param name="v" type="const GLint *" count="2"/>
<glx rop="55"/>
</function>
- <function name="TexCoord2s" offset="108" vectorequiv="TexCoord2sv"
- deprecated="3.1">
+ <function name="TexCoord2s" vectorequiv="TexCoord2sv" deprecated="3.1">
<param name="s" type="GLshort"/>
<param name="t" type="GLshort"/>
</function>
- <function name="TexCoord2sv" offset="109" deprecated="3.1">
+ <function name="TexCoord2sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="2"/>
<glx rop="56"/>
</function>
- <function name="TexCoord3d" offset="110" vectorequiv="TexCoord3dv"
- deprecated="3.1">
+ <function name="TexCoord3d" vectorequiv="TexCoord3dv" deprecated="3.1">
<param name="s" type="GLdouble"/>
<param name="t" type="GLdouble"/>
<param name="r" type="GLdouble"/>
</function>
- <function name="TexCoord3dv" offset="111" deprecated="3.1">
+ <function name="TexCoord3dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="57"/>
</function>
- <function name="TexCoord3f" offset="112" vectorequiv="TexCoord3fv"
+ <function name="TexCoord3f" vectorequiv="TexCoord3fv"
deprecated="3.1" exec="dynamic">
<param name="s" type="GLfloat"/>
<param name="t" type="GLfloat"/>
<param name="r" type="GLfloat"/>
</function>
- <function name="TexCoord3fv" offset="113" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoord3fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="58"/>
</function>
- <function name="TexCoord3i" offset="114" vectorequiv="TexCoord3iv"
- deprecated="3.1">
+ <function name="TexCoord3i" vectorequiv="TexCoord3iv" deprecated="3.1">
<param name="s" type="GLint"/>
<param name="t" type="GLint"/>
<param name="r" type="GLint"/>
</function>
- <function name="TexCoord3iv" offset="115" deprecated="3.1">
+ <function name="TexCoord3iv" deprecated="3.1">
<param name="v" type="const GLint *" count="3"/>
<glx rop="59"/>
</function>
- <function name="TexCoord3s" offset="116" vectorequiv="TexCoord3sv"
- deprecated="3.1">
+ <function name="TexCoord3s" vectorequiv="TexCoord3sv" deprecated="3.1">
<param name="s" type="GLshort"/>
<param name="t" type="GLshort"/>
<param name="r" type="GLshort"/>
</function>
- <function name="TexCoord3sv" offset="117" deprecated="3.1">
+ <function name="TexCoord3sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="3"/>
<glx rop="60"/>
</function>
- <function name="TexCoord4d" offset="118" vectorequiv="TexCoord4dv"
- deprecated="3.1">
+ <function name="TexCoord4d" vectorequiv="TexCoord4dv" deprecated="3.1">
<param name="s" type="GLdouble"/>
<param name="t" type="GLdouble"/>
<param name="r" type="GLdouble"/>
<param name="q" type="GLdouble"/>
</function>
- <function name="TexCoord4dv" offset="119" deprecated="3.1">
+ <function name="TexCoord4dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="61"/>
</function>
- <function name="TexCoord4f" offset="120" vectorequiv="TexCoord4fv"
+ <function name="TexCoord4f" vectorequiv="TexCoord4fv"
deprecated="3.1" exec="dynamic">
<param name="s" type="GLfloat"/>
<param name="t" type="GLfloat"/>
@@ -1828,146 +1785,134 @@
<param name="q" type="GLfloat"/>
</function>
- <function name="TexCoord4fv" offset="121" deprecated="3.1"
- exec="dynamic">
+ <function name="TexCoord4fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="62"/>
</function>
- <function name="TexCoord4i" offset="122" vectorequiv="TexCoord4iv"
- deprecated="3.1">
+ <function name="TexCoord4i" vectorequiv="TexCoord4iv" deprecated="3.1">
<param name="s" type="GLint"/>
<param name="t" type="GLint"/>
<param name="r" type="GLint"/>
<param name="q" type="GLint"/>
</function>
- <function name="TexCoord4iv" offset="123" deprecated="3.1">
+ <function name="TexCoord4iv" deprecated="3.1">
<param name="v" type="const GLint *" count="4"/>
<glx rop="63"/>
</function>
- <function name="TexCoord4s" offset="124" vectorequiv="TexCoord4sv"
- deprecated="3.1">
+ <function name="TexCoord4s" vectorequiv="TexCoord4sv" deprecated="3.1">
<param name="s" type="GLshort"/>
<param name="t" type="GLshort"/>
<param name="r" type="GLshort"/>
<param name="q" type="GLshort"/>
</function>
- <function name="TexCoord4sv" offset="125" deprecated="3.1">
+ <function name="TexCoord4sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="4"/>
<glx rop="64"/>
</function>
- <function name="Vertex2d" offset="126" vectorequiv="Vertex2dv"
- deprecated="3.1">
+ <function name="Vertex2d" vectorequiv="Vertex2dv" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
</function>
- <function name="Vertex2dv" offset="127" deprecated="3.1">
+ <function name="Vertex2dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="2"/>
<glx rop="65"/>
</function>
- <function name="Vertex2f" offset="128" vectorequiv="Vertex2fv"
+ <function name="Vertex2f" vectorequiv="Vertex2fv"
deprecated="3.1" exec="dynamic">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
</function>
- <function name="Vertex2fv" offset="129" deprecated="3.1"
- exec="dynamic">
+ <function name="Vertex2fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="2"/>
<glx rop="66"/>
</function>
- <function name="Vertex2i" offset="130" vectorequiv="Vertex2iv"
- deprecated="3.1">
+ <function name="Vertex2i" vectorequiv="Vertex2iv" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
</function>
- <function name="Vertex2iv" offset="131" deprecated="3.1">
+ <function name="Vertex2iv" deprecated="3.1">
<param name="v" type="const GLint *" count="2"/>
<glx rop="67"/>
</function>
- <function name="Vertex2s" offset="132" vectorequiv="Vertex2sv"
- deprecated="3.1">
+ <function name="Vertex2s" vectorequiv="Vertex2sv" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
</function>
- <function name="Vertex2sv" offset="133" deprecated="3.1">
+ <function name="Vertex2sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="2"/>
<glx rop="68"/>
</function>
- <function name="Vertex3d" offset="134" vectorequiv="Vertex3dv"
- deprecated="3.1">
+ <function name="Vertex3d" vectorequiv="Vertex3dv" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
</function>
- <function name="Vertex3dv" offset="135" deprecated="3.1">
+ <function name="Vertex3dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="69"/>
</function>
- <function name="Vertex3f" offset="136" vectorequiv="Vertex3fv"
+ <function name="Vertex3f" vectorequiv="Vertex3fv"
deprecated="3.1" exec="dynamic">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
</function>
- <function name="Vertex3fv" offset="137" deprecated="3.1"
- exec="dynamic">
+ <function name="Vertex3fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="70"/>
</function>
- <function name="Vertex3i" offset="138" vectorequiv="Vertex3iv"
- deprecated="3.1">
+ <function name="Vertex3i" vectorequiv="Vertex3iv" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
</function>
- <function name="Vertex3iv" offset="139" deprecated="3.1">
+ <function name="Vertex3iv" deprecated="3.1">
<param name="v" type="const GLint *" count="3"/>
<glx rop="71"/>
</function>
- <function name="Vertex3s" offset="140" vectorequiv="Vertex3sv"
- deprecated="3.1">
+ <function name="Vertex3s" vectorequiv="Vertex3sv" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
</function>
- <function name="Vertex3sv" offset="141" deprecated="3.1">
+ <function name="Vertex3sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="3"/>
<glx rop="72"/>
</function>
- <function name="Vertex4d" offset="142" vectorequiv="Vertex4dv"
- deprecated="3.1">
+ <function name="Vertex4d" vectorequiv="Vertex4dv" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
<param name="w" type="GLdouble"/>
</function>
- <function name="Vertex4dv" offset="143" deprecated="3.1">
+ <function name="Vertex4dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="73"/>
</function>
- <function name="Vertex4f" offset="144" vectorequiv="Vertex4fv"
+ <function name="Vertex4f" vectorequiv="Vertex4fv"
deprecated="3.1" exec="dynamic">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
@@ -1975,199 +1920,195 @@
<param name="w" type="GLfloat"/>
</function>
- <function name="Vertex4fv" offset="145" deprecated="3.1"
- exec="dynamic">
+ <function name="Vertex4fv" deprecated="3.1" exec="dynamic">
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="74"/>
</function>
- <function name="Vertex4i" offset="146" vectorequiv="Vertex4iv"
- deprecated="3.1">
+ <function name="Vertex4i" vectorequiv="Vertex4iv" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
<param name="w" type="GLint"/>
</function>
- <function name="Vertex4iv" offset="147" deprecated="3.1">
+ <function name="Vertex4iv" deprecated="3.1">
<param name="v" type="const GLint *" count="4"/>
<glx rop="75"/>
</function>
- <function name="Vertex4s" offset="148" vectorequiv="Vertex4sv"
- deprecated="3.1">
+ <function name="Vertex4s" vectorequiv="Vertex4sv" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
<param name="w" type="GLshort"/>
</function>
- <function name="Vertex4sv" offset="149" deprecated="3.1">
+ <function name="Vertex4sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="4"/>
<glx rop="76"/>
</function>
- <function name="ClipPlane" offset="150" deprecated="3.1">
+ <function name="ClipPlane" deprecated="3.1">
<param name="plane" type="GLenum"/>
<param name="equation" type="const GLdouble *" count="4"/>
<glx rop="77"/>
</function>
- <function name="ColorMaterial" offset="151" deprecated="3.1">
+ <function name="ColorMaterial" deprecated="3.1">
<param name="face" type="GLenum"/>
<param name="mode" type="GLenum"/>
<glx rop="78"/>
</function>
- <function name="CullFace" offset="152" es1="1.0" es2="2.0">
+ <function name="CullFace" es1="1.0" es2="2.0">
<param name="mode" type="GLenum"/>
<glx rop="79"/>
</function>
- <function name="Fogf" offset="153" es1="1.0" deprecated="3.1">
+ <function name="Fogf" es1="1.0" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="80"/>
</function>
- <function name="Fogfv" offset="154" es1="1.0" deprecated="3.1">
+ <function name="Fogfv" es1="1.0" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="81"/>
</function>
- <function name="Fogi" offset="155" deprecated="3.1">
+ <function name="Fogi" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="82"/>
</function>
- <function name="Fogiv" offset="156" deprecated="3.1">
+ <function name="Fogiv" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="83"/>
</function>
- <function name="FrontFace" offset="157" es1="1.0" es2="2.0">
+ <function name="FrontFace" es1="1.0" es2="2.0">
<param name="mode" type="GLenum"/>
<glx rop="84"/>
</function>
- <function name="Hint" offset="158" es1="1.0" es2="2.0">
+ <function name="Hint" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="mode" type="GLenum"/>
<glx rop="85"/>
</function>
- <function name="Lightf" offset="159" es1="1.0" deprecated="3.1">
+ <function name="Lightf" es1="1.0" deprecated="3.1">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="86"/>
</function>
- <function name="Lightfv" offset="160" es1="1.0" deprecated="3.1">
+ <function name="Lightfv" es1="1.0" deprecated="3.1">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="87"/>
</function>
- <function name="Lighti" offset="161" deprecated="3.1">
+ <function name="Lighti" deprecated="3.1">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="88"/>
</function>
- <function name="Lightiv" offset="162" deprecated="3.1">
+ <function name="Lightiv" deprecated="3.1">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="89"/>
</function>
- <function name="LightModelf" offset="163" es1="1.0" deprecated="3.1">
+ <function name="LightModelf" es1="1.0" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="90"/>
</function>
- <function name="LightModelfv" offset="164" es1="1.0" deprecated="3.1">
+ <function name="LightModelfv" es1="1.0" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="91"/>
</function>
- <function name="LightModeli" offset="165" deprecated="3.1">
+ <function name="LightModeli" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="92"/>
</function>
- <function name="LightModeliv" offset="166" deprecated="3.1">
+ <function name="LightModeliv" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="93"/>
</function>
- <function name="LineStipple" offset="167" deprecated="3.1">
+ <function name="LineStipple" deprecated="3.1">
<param name="factor" type="GLint"/>
<param name="pattern" type="GLushort"/>
<glx rop="94"/>
</function>
- <function name="LineWidth" offset="168" es1="1.0" es2="2.0">
+ <function name="LineWidth" es1="1.0" es2="2.0">
<param name="width" type="GLfloat"/>
<glx rop="95"/>
</function>
- <function name="Materialf" offset="169" es1="1.0" deprecated="3.1">
+ <function name="Materialf" es1="1.0" deprecated="3.1">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="96"/>
</function>
- <function name="Materialfv" offset="170" es1="1.0" deprecated="3.1"
- exec="dynamic">
+ <function name="Materialfv" es1="1.0" deprecated="3.1" exec="dynamic">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="97"/>
</function>
- <function name="Materiali" offset="171" deprecated="3.1">
+ <function name="Materiali" deprecated="3.1">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="98"/>
</function>
- <function name="Materialiv" offset="172" deprecated="3.1">
+ <function name="Materialiv" deprecated="3.1">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="99"/>
</function>
- <function name="PointSize" offset="173" es1="1.0">
+ <function name="PointSize" es1="1.0">
<param name="size" type="GLfloat"/>
<glx rop="100"/>
</function>
- <function name="PolygonMode" offset="174">
+ <function name="PolygonMode">
<param name="face" type="GLenum"/>
<param name="mode" type="GLenum"/>
<glx rop="101"/>
</function>
- <function name="PolygonStipple" offset="175" deprecated="3.1">
+ <function name="PolygonStipple" deprecated="3.1">
<param name="mask" type="const GLubyte *" img_width="32" img_height="32" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP" img_target="0" img_pad_dimensions="false"/>
<glx rop="102"/>
</function>
- <function name="Scissor" offset="176" es1="1.0" es2="2.0">
+ <function name="Scissor" es1="1.0" es2="2.0">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="width" type="GLsizei"/>
@@ -2175,40 +2116,40 @@
<glx rop="103"/>
</function>
- <function name="ShadeModel" offset="177" es1="1.0" deprecated="3.1">
+ <function name="ShadeModel" es1="1.0" deprecated="3.1">
<param name="mode" type="GLenum"/>
<glx rop="104"/>
</function>
- <function name="TexParameterf" offset="178" es1="1.0" es2="2.0">
+ <function name="TexParameterf" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="105"/>
</function>
- <function name="TexParameterfv" offset="179" es1="1.1" es2="2.0">
+ <function name="TexParameterfv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="106"/>
</function>
- <function name="TexParameteri" offset="180" es1="1.1" es2="2.0">
+ <function name="TexParameteri" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="107"/>
</function>
- <function name="TexParameteriv" offset="181" es1="1.1" es2="2.0">
+ <function name="TexParameteriv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="108"/>
</function>
- <function name="TexImage1D" offset="182">
+ <function name="TexImage1D">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLint"/>
@@ -2220,7 +2161,7 @@
<glx rop="109" large="true"/>
</function>
- <function name="TexImage2D" offset="183" es1="1.0" es2="2.0">
+ <function name="TexImage2D" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLint"/>
@@ -2233,129 +2174,129 @@
<glx rop="110" large="true"/>
</function>
- <function name="TexEnvf" offset="184" es1="1.0" deprecated="3.1">
+ <function name="TexEnvf" es1="1.0" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="111"/>
</function>
- <function name="TexEnvfv" offset="185" es1="1.0" deprecated="3.1">
+ <function name="TexEnvfv" es1="1.0" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="112"/>
</function>
- <function name="TexEnvi" offset="186" es1="1.1" deprecated="3.1">
+ <function name="TexEnvi" es1="1.1" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="113"/>
</function>
- <function name="TexEnviv" offset="187" es1="1.1" deprecated="3.1">
+ <function name="TexEnviv" es1="1.1" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="114"/>
</function>
- <function name="TexGend" offset="188" deprecated="3.1">
+ <function name="TexGend" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLdouble"/>
<glx rop="115"/>
</function>
- <function name="TexGendv" offset="189" deprecated="3.1">
+ <function name="TexGendv" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLdouble *" variable_param="pname"/>
<glx rop="116"/>
</function>
- <function name="TexGenf" offset="190" deprecated="3.1">
+ <function name="TexGenf" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="117"/>
</function>
- <function name="TexGenfv" offset="191" deprecated="3.1">
+ <function name="TexGenfv" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="118"/>
</function>
- <function name="TexGeni" offset="192" deprecated="3.1">
+ <function name="TexGeni" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="119"/>
</function>
- <function name="TexGeniv" offset="193" deprecated="3.1">
+ <function name="TexGeniv" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="120"/>
</function>
- <function name="FeedbackBuffer" offset="194" deprecated="3.1">
+ <function name="FeedbackBuffer" deprecated="3.1">
<param name="size" type="GLsizei"/>
<param name="type" type="GLenum"/>
<param name="buffer" type="GLfloat *" output="true"/>
<glx sop="105" handcode="true"/>
</function>
- <function name="SelectBuffer" offset="195" deprecated="3.1">
+ <function name="SelectBuffer" deprecated="3.1">
<param name="size" type="GLsizei"/>
<param name="buffer" type="GLuint *" output="true"/>
<glx sop="106" handcode="true"/>
</function>
- <function name="RenderMode" offset="196" deprecated="3.1">
+ <function name="RenderMode" deprecated="3.1">
<param name="mode" type="GLenum"/>
<return type="GLint"/>
<glx sop="107" handcode="true"/>
</function>
- <function name="InitNames" offset="197" deprecated="3.1">
+ <function name="InitNames" deprecated="3.1">
<glx rop="121"/>
</function>
- <function name="LoadName" offset="198" deprecated="3.1">
+ <function name="LoadName" deprecated="3.1">
<param name="name" type="GLuint"/>
<glx rop="122"/>
</function>
- <function name="PassThrough" offset="199" deprecated="3.1">
+ <function name="PassThrough" deprecated="3.1">
<param name="token" type="GLfloat"/>
<glx rop="123"/>
</function>
- <function name="PopName" offset="200" deprecated="3.1">
+ <function name="PopName" deprecated="3.1">
<glx rop="124"/>
</function>
- <function name="PushName" offset="201" deprecated="3.1">
+ <function name="PushName" deprecated="3.1">
<param name="name" type="GLuint"/>
<glx rop="125"/>
</function>
- <function name="DrawBuffer" offset="202">
+ <function name="DrawBuffer">
<param name="mode" type="GLenum"/>
<glx rop="126"/>
</function>
- <function name="Clear" offset="203" es1="1.0" es2="2.0">
+ <function name="Clear" es1="1.0" es2="2.0">
<param name="mask" type="GLbitfield"/>
<glx rop="127"/>
</function>
- <function name="ClearAccum" offset="204" deprecated="3.1">
+ <function name="ClearAccum" deprecated="3.1">
<param name="red" type="GLfloat"/>
<param name="green" type="GLfloat"/>
<param name="blue" type="GLfloat"/>
@@ -2363,12 +2304,12 @@
<glx rop="128"/>
</function>
- <function name="ClearIndex" offset="205" deprecated="3.1">
+ <function name="ClearIndex" deprecated="3.1">
<param name="c" type="GLfloat"/>
<glx rop="129"/>
</function>
- <function name="ClearColor" offset="206" es1="1.0" es2="2.0">
+ <function name="ClearColor" es1="1.0" es2="2.0">
<param name="red" type="GLclampf"/>
<param name="green" type="GLclampf"/>
<param name="blue" type="GLclampf"/>
@@ -2376,22 +2317,22 @@
<glx rop="130"/>
</function>
- <function name="ClearStencil" offset="207" es1="1.0" es2="2.0">
+ <function name="ClearStencil" es1="1.0" es2="2.0">
<param name="s" type="GLint"/>
<glx rop="131"/>
</function>
- <function name="ClearDepth" offset="208">
+ <function name="ClearDepth">
<param name="depth" type="GLclampd"/>
<glx rop="132"/>
</function>
- <function name="StencilMask" offset="209" es1="1.0" es2="2.0">
+ <function name="StencilMask" es1="1.0" es2="2.0">
<param name="mask" type="GLuint"/>
<glx rop="133"/>
</function>
- <function name="ColorMask" offset="210" es1="1.0" es2="2.0">
+ <function name="ColorMask" es1="1.0" es2="2.0">
<param name="red" type="GLboolean"/>
<param name="green" type="GLboolean"/>
<param name="blue" type="GLboolean"/>
@@ -2399,50 +2340,50 @@
<glx rop="134"/>
</function>
- <function name="DepthMask" offset="211" es1="1.0" es2="2.0">
+ <function name="DepthMask" es1="1.0" es2="2.0">
<param name="flag" type="GLboolean"/>
<glx rop="135"/>
</function>
- <function name="IndexMask" offset="212" deprecated="3.1">
+ <function name="IndexMask" deprecated="3.1">
<param name="mask" type="GLuint"/>
<glx rop="136"/>
</function>
- <function name="Accum" offset="213" deprecated="3.1">
+ <function name="Accum" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="value" type="GLfloat"/>
<glx rop="137"/>
</function>
- <function name="Disable" offset="214" es1="1.0" es2="2.0">
+ <function name="Disable" es1="1.0" es2="2.0">
<param name="cap" type="GLenum"/>
<glx rop="138" handcode="client"/>
</function>
- <function name="Enable" offset="215" es1="1.0" es2="2.0">
+ <function name="Enable" es1="1.0" es2="2.0">
<param name="cap" type="GLenum"/>
<glx rop="139" handcode="client"/>
</function>
- <function name="Finish" offset="216" es1="1.0" es2="2.0">
+ <function name="Finish" es1="1.0" es2="2.0">
<glx sop="108" handcode="true"/>
</function>
- <function name="Flush" offset="217" es1="1.0" es2="2.0">
+ <function name="Flush" es1="1.0" es2="2.0">
<glx sop="142" handcode="true"/>
</function>
- <function name="PopAttrib" offset="218" deprecated="3.1">
+ <function name="PopAttrib" deprecated="3.1">
<glx rop="141"/>
</function>
- <function name="PushAttrib" offset="219" deprecated="3.1">
+ <function name="PushAttrib" deprecated="3.1">
<param name="mask" type="GLbitfield"/>
<glx rop="142"/>
</function>
- <function name="Map1d" offset="220" deprecated="3.1">
+ <function name="Map1d" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="u1" type="GLdouble"/>
<param name="u2" type="GLdouble"/>
@@ -2452,7 +2393,7 @@
<glx rop="143" handcode="true"/>
</function>
- <function name="Map1f" offset="221" deprecated="3.1">
+ <function name="Map1f" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="u1" type="GLfloat"/>
<param name="u2" type="GLfloat"/>
@@ -2462,7 +2403,7 @@
<glx rop="144" handcode="true"/>
</function>
- <function name="Map2d" offset="222" deprecated="3.1">
+ <function name="Map2d" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="u1" type="GLdouble"/>
<param name="u2" type="GLdouble"/>
@@ -2476,7 +2417,7 @@
<glx rop="145" handcode="true"/>
</function>
- <function name="Map2f" offset="223" deprecated="3.1">
+ <function name="Map2f" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="u1" type="GLfloat"/>
<param name="u2" type="GLfloat"/>
@@ -2490,21 +2431,21 @@
<glx rop="146" handcode="true"/>
</function>
- <function name="MapGrid1d" offset="224" deprecated="3.1">
+ <function name="MapGrid1d" deprecated="3.1">
<param name="un" type="GLint"/>
<param name="u1" type="GLdouble"/>
<param name="u2" type="GLdouble"/>
<glx rop="147"/>
</function>
- <function name="MapGrid1f" offset="225" deprecated="3.1">
+ <function name="MapGrid1f" deprecated="3.1">
<param name="un" type="GLint"/>
<param name="u1" type="GLfloat"/>
<param name="u2" type="GLfloat"/>
<glx rop="148"/>
</function>
- <function name="MapGrid2d" offset="226" deprecated="3.1">
+ <function name="MapGrid2d" deprecated="3.1">
<param name="un" type="GLint"/>
<param name="u1" type="GLdouble"/>
<param name="u2" type="GLdouble"/>
@@ -2514,7 +2455,7 @@
<glx rop="149"/>
</function>
- <function name="MapGrid2f" offset="227" deprecated="3.1">
+ <function name="MapGrid2f" deprecated="3.1">
<param name="un" type="GLint"/>
<param name="u1" type="GLfloat"/>
<param name="u2" type="GLfloat"/>
@@ -2524,64 +2465,59 @@
<glx rop="150"/>
</function>
- <function name="EvalCoord1d" offset="228" vectorequiv="EvalCoord1dv"
- deprecated="3.1">
+ <function name="EvalCoord1d" vectorequiv="EvalCoord1dv" deprecated="3.1">
<param name="u" type="GLdouble"/>
</function>
- <function name="EvalCoord1dv" offset="229" deprecated="3.1">
+ <function name="EvalCoord1dv" deprecated="3.1">
<param name="u" type="const GLdouble *" count="1"/>
<glx rop="151"/>
</function>
- <function name="EvalCoord1f" offset="230" vectorequiv="EvalCoord1fv"
+ <function name="EvalCoord1f" vectorequiv="EvalCoord1fv"
deprecated="3.1" exec="dynamic">
<param name="u" type="GLfloat"/>
</function>
- <function name="EvalCoord1fv" offset="231" deprecated="3.1">
+ <function name="EvalCoord1fv" deprecated="3.1">
<param name="u" type="const GLfloat *" count="1"/>
<glx rop="152"/>
</function>
- <function name="EvalCoord2d" offset="232" vectorequiv="EvalCoord2dv"
- deprecated="3.1">
+ <function name="EvalCoord2d" vectorequiv="EvalCoord2dv" deprecated="3.1">
<param name="u" type="GLdouble"/>
<param name="v" type="GLdouble"/>
</function>
- <function name="EvalCoord2dv" offset="233" deprecated="3.1">
+ <function name="EvalCoord2dv" deprecated="3.1">
<param name="u" type="const GLdouble *" count="2"/>
<glx rop="153"/>
</function>
- <function name="EvalCoord2f" offset="234" vectorequiv="EvalCoord2fv"
+ <function name="EvalCoord2f" vectorequiv="EvalCoord2fv"
deprecated="3.1" exec="dynamic">
<param name="u" type="GLfloat"/>
<param name="v" type="GLfloat"/>
</function>
- <function name="EvalCoord2fv" offset="235" deprecated="3.1">
+ <function name="EvalCoord2fv" deprecated="3.1">
<param name="u" type="const GLfloat *" count="2"/>
<glx rop="154"/>
</function>
- <function name="EvalMesh1" offset="236" deprecated="3.1"
- exec="dynamic">
+ <function name="EvalMesh1" deprecated="3.1" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="i1" type="GLint"/>
<param name="i2" type="GLint"/>
<glx rop="155"/>
</function>
- <function name="EvalPoint1" offset="237" deprecated="3.1"
- exec="dynamic">
+ <function name="EvalPoint1" deprecated="3.1" exec="dynamic">
<param name="i" type="GLint"/>
<glx rop="156"/>
</function>
- <function name="EvalMesh2" offset="238" deprecated="3.1"
- exec="dynamic">
+ <function name="EvalMesh2" deprecated="3.1" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="i1" type="GLint"/>
<param name="i2" type="GLint"/>
@@ -2590,106 +2526,105 @@
<glx rop="157"/>
</function>
- <function name="EvalPoint2" offset="239" deprecated="3.1"
- exec="dynamic">
+ <function name="EvalPoint2" deprecated="3.1" exec="dynamic">
<param name="i" type="GLint"/>
<param name="j" type="GLint"/>
<glx rop="158"/>
</function>
- <function name="AlphaFunc" offset="240" es1="1.0" deprecated="3.1">
+ <function name="AlphaFunc" es1="1.0" deprecated="3.1">
<param name="func" type="GLenum"/>
<param name="ref" type="GLclampf"/>
<glx rop="159"/>
</function>
- <function name="BlendFunc" offset="241" es1="1.0" es2="2.0">
+ <function name="BlendFunc" es1="1.0" es2="2.0">
<param name="sfactor" type="GLenum"/>
<param name="dfactor" type="GLenum"/>
<glx rop="160"/>
</function>
- <function name="LogicOp" offset="242" es1="1.0">
+ <function name="LogicOp" es1="1.0">
<param name="opcode" type="GLenum"/>
<glx rop="161"/>
</function>
- <function name="StencilFunc" offset="243" es1="1.0" es2="2.0">
+ <function name="StencilFunc" es1="1.0" es2="2.0">
<param name="func" type="GLenum"/>
<param name="ref" type="GLint"/>
<param name="mask" type="GLuint"/>
<glx rop="162"/>
</function>
- <function name="StencilOp" offset="244" es1="1.0" es2="2.0">
+ <function name="StencilOp" es1="1.0" es2="2.0">
<param name="fail" type="GLenum"/>
<param name="zfail" type="GLenum"/>
<param name="zpass" type="GLenum"/>
<glx rop="163"/>
</function>
- <function name="DepthFunc" offset="245" es1="1.0" es2="2.0">
+ <function name="DepthFunc" es1="1.0" es2="2.0">
<param name="func" type="GLenum"/>
<glx rop="164"/>
</function>
- <function name="PixelZoom" offset="246" deprecated="3.1">
+ <function name="PixelZoom" deprecated="3.1">
<param name="xfactor" type="GLfloat"/>
<param name="yfactor" type="GLfloat"/>
<glx rop="165"/>
</function>
- <function name="PixelTransferf" offset="247" deprecated="3.1">
+ <function name="PixelTransferf" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="166"/>
</function>
- <function name="PixelTransferi" offset="248" deprecated="3.1">
+ <function name="PixelTransferi" deprecated="3.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="167"/>
</function>
- <function name="PixelStoref" offset="249">
+ <function name="PixelStoref">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx sop="109" handcode="client"/>
</function>
- <function name="PixelStorei" offset="250" es1="1.0" es2="2.0">
+ <function name="PixelStorei" es1="1.0" es2="2.0">
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx sop="110" handcode="client"/>
</function>
- <function name="PixelMapfv" offset="251" deprecated="3.1">
+ <function name="PixelMapfv" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="mapsize" type="GLsizei" counter="true"/>
<param name="values" type="const GLfloat *" count="mapsize"/>
<glx rop="168" large="true"/>
</function>
- <function name="PixelMapuiv" offset="252" deprecated="3.1">
+ <function name="PixelMapuiv" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="mapsize" type="GLsizei" counter="true"/>
<param name="values" type="const GLuint *" count="mapsize"/>
<glx rop="169" large="true"/>
</function>
- <function name="PixelMapusv" offset="253" deprecated="3.1">
+ <function name="PixelMapusv" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="mapsize" type="GLsizei" counter="true"/>
<param name="values" type="const GLushort *" count="mapsize"/>
<glx rop="170" large="true"/>
</function>
- <function name="ReadBuffer" offset="254" es2="3.0">
+ <function name="ReadBuffer" es2="3.0">
<param name="mode" type="GLenum"/>
<glx rop="171"/>
</function>
- <function name="CopyPixels" offset="255" deprecated="3.1">
+ <function name="CopyPixels" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="width" type="GLsizei"/>
@@ -2698,7 +2633,7 @@
<glx rop="172"/>
</function>
- <function name="ReadPixels" offset="256" es1="1.0" es2="2.0">
+ <function name="ReadPixels" es1="1.0" es2="2.0">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="width" type="GLsizei"/>
@@ -2709,7 +2644,7 @@
<glx sop="111"/>
</function>
- <function name="DrawPixels" offset="257" deprecated="3.1">
+ <function name="DrawPixels" deprecated="3.1">
<param name="width" type="GLsizei"/>
<param name="height" type="GLsizei"/>
<param name="format" type="GLenum"/>
@@ -2718,155 +2653,155 @@
<glx rop="173" large="true"/>
</function>
- <function name="GetBooleanv" offset="258" es1="1.1" es2="2.0">
+ <function name="GetBooleanv" es1="1.1" es2="2.0">
<param name="pname" type="GLenum"/>
<param name="params" type="GLboolean *" output="true" variable_param="pname"/>
<glx sop="112" handcode="client"/>
</function>
- <function name="GetClipPlane" offset="259" deprecated="3.1">
+ <function name="GetClipPlane" deprecated="3.1">
<param name="plane" type="GLenum"/>
<param name="equation" type="GLdouble *" output="true" count="4"/>
<glx sop="113" always_array="true"/>
</function>
- <function name="GetDoublev" offset="260">
+ <function name="GetDoublev">
<param name="pname" type="GLenum"/>
<param name="params" type="GLdouble *" output="true" variable_param="pname"/>
<glx sop="114" handcode="client"/>
</function>
- <function name="GetError" offset="261" es1="1.0" es2="2.0">
+ <function name="GetError" es1="1.0" es2="2.0">
<return type="GLenum"/>
<glx sop="115" handcode="client"/>
</function>
- <function name="GetFloatv" offset="262" es1="1.1" es2="2.0">
+ <function name="GetFloatv" es1="1.1" es2="2.0">
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="116" handcode="client"/>
</function>
- <function name="GetIntegerv" offset="263" es1="1.0" es2="2.0">
+ <function name="GetIntegerv" es1="1.0" es2="2.0">
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="117" handcode="client"/>
</function>
- <function name="GetLightfv" offset="264" es1="1.1" deprecated="3.1">
+ <function name="GetLightfv" es1="1.1" deprecated="3.1">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="118"/>
</function>
- <function name="GetLightiv" offset="265" deprecated="3.1">
+ <function name="GetLightiv" deprecated="3.1">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="119"/>
</function>
- <function name="GetMapdv" offset="266" deprecated="3.1">
+ <function name="GetMapdv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="query" type="GLenum"/>
<param name="v" type="GLdouble *" output="true" variable_param="target query"/>
<glx sop="120"/>
</function>
- <function name="GetMapfv" offset="267" deprecated="3.1">
+ <function name="GetMapfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="query" type="GLenum"/>
<param name="v" type="GLfloat *" output="true" variable_param="target query"/>
<glx sop="121"/>
</function>
- <function name="GetMapiv" offset="268" deprecated="3.1">
+ <function name="GetMapiv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="query" type="GLenum"/>
<param name="v" type="GLint *" output="true" variable_param="target query"/>
<glx sop="122"/>
</function>
- <function name="GetMaterialfv" offset="269" es1="1.1" deprecated="3.1">
+ <function name="GetMaterialfv" es1="1.1" deprecated="3.1">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="123"/>
</function>
- <function name="GetMaterialiv" offset="270" deprecated="3.1">
+ <function name="GetMaterialiv" deprecated="3.1">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="124"/>
</function>
- <function name="GetPixelMapfv" offset="271" deprecated="3.1">
+ <function name="GetPixelMapfv" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="values" type="GLfloat *" output="true" variable_param="map"/>
<glx sop="125"/>
</function>
- <function name="GetPixelMapuiv" offset="272" deprecated="3.1">
+ <function name="GetPixelMapuiv" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="values" type="GLuint *" output="true" variable_param="map"/>
<glx sop="126"/>
</function>
- <function name="GetPixelMapusv" offset="273" deprecated="3.1">
+ <function name="GetPixelMapusv" deprecated="3.1">
<param name="map" type="GLenum"/>
<param name="values" type="GLushort *" output="true" variable_param="map"/>
<glx sop="127"/>
</function>
- <function name="GetPolygonStipple" offset="274" deprecated="3.1">
+ <function name="GetPolygonStipple" deprecated="3.1">
<param name="mask" type="GLubyte *" output="true" img_width="32" img_height="32" img_format="GL_COLOR_INDEX" img_type="GL_BITMAP"/>
<glx sop="128"/>
</function>
- <function name="GetString" offset="275" es1="1.0" es2="2.0">
+ <function name="GetString" es1="1.0" es2="2.0">
<param name="name" type="GLenum"/>
<return type="const GLubyte *"/>
<glx sop="129" handcode="true"/>
</function>
- <function name="GetTexEnvfv" offset="276" es1="1.1" deprecated="3.1">
+ <function name="GetTexEnvfv" es1="1.1" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="130"/>
</function>
- <function name="GetTexEnviv" offset="277" es1="1.1" deprecated="3.1">
+ <function name="GetTexEnviv" es1="1.1" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="131"/>
</function>
- <function name="GetTexGendv" offset="278" deprecated="3.1">
+ <function name="GetTexGendv" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLdouble *" output="true" variable_param="pname"/>
<glx sop="132"/>
</function>
- <function name="GetTexGenfv" offset="279" deprecated="3.1">
+ <function name="GetTexGenfv" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="133"/>
</function>
- <function name="GetTexGeniv" offset="280" deprecated="3.1">
+ <function name="GetTexGeniv" deprecated="3.1">
<param name="coord" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="134"/>
</function>
- <function name="GetTexImage" offset="281">
+ <function name="GetTexImage">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="format" type="GLenum"/>
@@ -2875,21 +2810,21 @@
<glx sop="135" dimensions_in_reply="true"/>
</function>
- <function name="GetTexParameterfv" offset="282" es1="1.1" es2="2.0">
+ <function name="GetTexParameterfv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="136"/>
</function>
- <function name="GetTexParameteriv" offset="283" es1="1.1" es2="2.0">
+ <function name="GetTexParameteriv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="137"/>
</function>
- <function name="GetTexLevelParameterfv" offset="284">
+ <function name="GetTexLevelParameterfv" es2="3.1">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="pname" type="GLenum"/>
@@ -2897,7 +2832,7 @@
<glx sop="138"/>
</function>
- <function name="GetTexLevelParameteriv" offset="285">
+ <function name="GetTexLevelParameteriv" es2="3.1">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="pname" type="GLenum"/>
@@ -2905,25 +2840,25 @@
<glx sop="139"/>
</function>
- <function name="IsEnabled" offset="286" es1="1.1" es2="2.0">
+ <function name="IsEnabled" es1="1.1" es2="2.0">
<param name="cap" type="GLenum"/>
<return type="GLboolean"/>
<glx sop="140" handcode="client"/>
</function>
- <function name="IsList" offset="287" deprecated="3.1">
+ <function name="IsList" deprecated="3.1">
<param name="list" type="GLuint"/>
<return type="GLboolean"/>
<glx sop="141"/>
</function>
- <function name="DepthRange" offset="288">
+ <function name="DepthRange">
<param name="zNear" type="GLclampd"/>
<param name="zFar" type="GLclampd"/>
<glx rop="174"/>
</function>
- <function name="Frustum" offset="289" deprecated="3.1">
+ <function name="Frustum" deprecated="3.1">
<param name="left" type="GLdouble"/>
<param name="right" type="GLdouble"/>
<param name="bottom" type="GLdouble"/>
@@ -2933,36 +2868,36 @@
<glx rop="175"/>
</function>
- <function name="LoadIdentity" offset="290" es1="1.0" deprecated="3.1">
+ <function name="LoadIdentity" es1="1.0" deprecated="3.1">
<glx rop="176"/>
</function>
- <function name="LoadMatrixf" offset="291" es1="1.0" deprecated="3.1">
+ <function name="LoadMatrixf" es1="1.0" deprecated="3.1">
<param name="m" type="const GLfloat *" count="16"/>
<glx rop="177"/>
</function>
- <function name="LoadMatrixd" offset="292" deprecated="3.1">
+ <function name="LoadMatrixd" deprecated="3.1">
<param name="m" type="const GLdouble *" count="16"/>
<glx rop="178"/>
</function>
- <function name="MatrixMode" offset="293" es1="1.0" deprecated="3.1">
+ <function name="MatrixMode" es1="1.0" deprecated="3.1">
<param name="mode" type="GLenum"/>
<glx rop="179"/>
</function>
- <function name="MultMatrixf" offset="294" es1="1.0" deprecated="3.1">
+ <function name="MultMatrixf" es1="1.0" deprecated="3.1">
<param name="m" type="const GLfloat *" count="16"/>
<glx rop="180"/>
</function>
- <function name="MultMatrixd" offset="295" deprecated="3.1">
+ <function name="MultMatrixd" deprecated="3.1">
<param name="m" type="const GLdouble *" count="16"/>
<glx rop="181"/>
</function>
- <function name="Ortho" offset="296" deprecated="3.1">
+ <function name="Ortho" deprecated="3.1">
<param name="left" type="GLdouble"/>
<param name="right" type="GLdouble"/>
<param name="bottom" type="GLdouble"/>
@@ -2972,15 +2907,15 @@
<glx rop="182"/>
</function>
- <function name="PopMatrix" offset="297" es1="1.0" deprecated="3.1">
+ <function name="PopMatrix" es1="1.0" deprecated="3.1">
<glx rop="183"/>
</function>
- <function name="PushMatrix" offset="298" es1="1.0" deprecated="3.1">
+ <function name="PushMatrix" es1="1.0" deprecated="3.1">
<glx rop="184"/>
</function>
- <function name="Rotated" offset="299" deprecated="3.1">
+ <function name="Rotated" deprecated="3.1">
<param name="angle" type="GLdouble"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
@@ -2988,7 +2923,7 @@
<glx rop="185"/>
</function>
- <function name="Rotatef" offset="300" es1="1.0" deprecated="3.1">
+ <function name="Rotatef" es1="1.0" deprecated="3.1">
<param name="angle" type="GLfloat"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
@@ -2996,35 +2931,35 @@
<glx rop="186"/>
</function>
- <function name="Scaled" offset="301" deprecated="3.1">
+ <function name="Scaled" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
<glx rop="187"/>
</function>
- <function name="Scalef" offset="302" es1="1.0" deprecated="3.1">
+ <function name="Scalef" es1="1.0" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
<glx rop="188"/>
</function>
- <function name="Translated" offset="303" deprecated="3.1">
+ <function name="Translated" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
<glx rop="189"/>
</function>
- <function name="Translatef" offset="304" es1="1.0" deprecated="3.1">
+ <function name="Translatef" es1="1.0" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
<glx rop="190"/>
</function>
- <function name="Viewport" offset="305" es1="1.0" es2="2.0">
+ <function name="Viewport" es1="1.0" es2="2.0">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="width" type="GLsizei"/>
@@ -3207,13 +3142,12 @@
<enum name="ALL_CLIENT_ATTRIB_BITS" value="0xFFFFFFFF"/>
<enum name="CLIENT_ALL_ATTRIB_BITS" value="0xFFFFFFFF"/>
- <function name="ArrayElement" offset="306" deprecated="3.1"
- exec="dynamic">
+ <function name="ArrayElement" deprecated="3.1" exec="dynamic">
<param name="i" type="GLint"/>
<glx handcode="true"/>
</function>
- <function name="ColorPointer" offset="308" es1="1.0" deprecated="3.1">
+ <function name="ColorPointer" es1="1.0" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -3221,22 +3155,19 @@
<glx handcode="true"/>
</function>
- <function name="DisableClientState" offset="309" es1="1.0"
- deprecated="3.1">
+ <function name="DisableClientState" es1="1.0" deprecated="3.1">
<param name="array" type="GLenum"/>
<glx handcode="true"/>
</function>
- <function name="DrawArrays" offset="310" es1="1.0" es2="2.0"
- exec="dynamic">
+ <function name="DrawArrays" es1="1.0" es2="2.0" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
<glx rop="193" handcode="true"/>
</function>
- <function name="DrawElements" offset="311" es1="1.0" es2="2.0"
- exec="dynamic">
+ <function name="DrawElements" es1="1.0" es2="2.0" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="GLsizei"/>
<param name="type" type="GLenum"/>
@@ -3244,45 +3175,45 @@
<glx handcode="true"/>
</function>
- <function name="EdgeFlagPointer" offset="312" deprecated="3.1">
+ <function name="EdgeFlagPointer" deprecated="3.1">
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
</function>
- <function name="EnableClientState" offset="313" es1="1.0" deprecated="3.1">
+ <function name="EnableClientState" es1="1.0" deprecated="3.1">
<param name="array" type="GLenum"/>
<glx handcode="true"/>
</function>
- <function name="GetPointerv" offset="329" es1="1.1">
+ <function name="GetPointerv" es1="1.1">
<param name="pname" type="GLenum"/>
<param name="params" type="GLvoid **" output="true"/>
<glx handcode="true"/>
</function>
- <function name="IndexPointer" offset="314" deprecated="3.1">
+ <function name="IndexPointer" deprecated="3.1">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
</function>
- <function name="InterleavedArrays" offset="317" deprecated="3.1">
+ <function name="InterleavedArrays" deprecated="3.1">
<param name="format" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
</function>
- <function name="NormalPointer" offset="318" es1="1.0" deprecated="3.1">
+ <function name="NormalPointer" es1="1.0" deprecated="3.1">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
</function>
- <function name="TexCoordPointer" offset="320" es1="1.0" deprecated="3.1">
+ <function name="TexCoordPointer" es1="1.0" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -3290,7 +3221,7 @@
<glx handcode="true"/>
</function>
- <function name="VertexPointer" offset="321" es1="1.0" deprecated="3.1">
+ <function name="VertexPointer" es1="1.0" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -3298,13 +3229,13 @@
<glx handcode="true"/>
</function>
- <function name="PolygonOffset" offset="319" es1="1.0" es2="2.0">
+ <function name="PolygonOffset" es1="1.0" es2="2.0">
<param name="factor" type="GLfloat"/>
<param name="units" type="GLfloat"/>
<glx rop="192"/>
</function>
- <function name="CopyTexImage1D" offset="323">
+ <function name="CopyTexImage1D">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -3315,7 +3246,7 @@
<glx rop="4119"/>
</function>
- <function name="CopyTexImage2D" offset="324" es1="1.0" es2="2.0">
+ <function name="CopyTexImage2D" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -3327,7 +3258,7 @@
<glx rop="4120"/>
</function>
- <function name="CopyTexSubImage1D" offset="325">
+ <function name="CopyTexSubImage1D">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -3337,7 +3268,7 @@
<glx rop="4121"/>
</function>
- <function name="CopyTexSubImage2D" offset="326" es1="1.0" es2="2.0">
+ <function name="CopyTexSubImage2D" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -3349,7 +3280,7 @@
<glx rop="4122"/>
</function>
- <function name="TexSubImage1D" offset="332">
+ <function name="TexSubImage1D">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -3361,7 +3292,7 @@
<glx rop="4099" large="true"/>
</function>
- <function name="TexSubImage2D" offset="333" es1="1.0" es2="2.0">
+ <function name="TexSubImage2D" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -3375,7 +3306,7 @@
<glx rop="4100" large="true"/>
</function>
- <function name="AreTexturesResident" offset="322" deprecated="3.1">
+ <function name="AreTexturesResident" deprecated="3.1">
<param name="n" type="GLsizei" counter="true"/>
<param name="textures" type="const GLuint *" count="n"/>
<param name="residences" type="GLboolean *" output="true" count="n"/>
@@ -3383,52 +3314,51 @@
<glx sop="143" handcode="client" always_array="true"/>
</function>
- <function name="BindTexture" offset="307" es1="1.0" es2="2.0">
+ <function name="BindTexture" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="texture" type="GLuint"/>
<glx rop="4117"/>
</function>
- <function name="DeleteTextures" offset="327" es1="1.0" es2="2.0">
+ <function name="DeleteTextures" es1="1.0" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="textures" type="const GLuint *" count="n"/>
<glx sop="144"/>
</function>
- <function name="GenTextures" offset="328" es1="1.0" es2="2.0">
+ <function name="GenTextures" es1="1.0" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="textures" type="GLuint *" output="true" count="n"/>
<glx sop="145" always_array="true"/>
</function>
- <function name="IsTexture" offset="330" es1="1.1" es2="2.0">
+ <function name="IsTexture" es1="1.1" es2="2.0">
<param name="texture" type="GLuint"/>
<return type="GLboolean"/>
<glx sop="146"/>
</function>
- <function name="PrioritizeTextures" offset="331" deprecated="3.1">
+ <function name="PrioritizeTextures" deprecated="3.1">
<param name="n" type="GLsizei" counter="true"/>
<param name="textures" type="const GLuint *" count="n"/>
<param name="priorities" type="const GLclampf *" count="n"/>
<glx rop="4118"/>
</function>
- <function name="Indexub" offset="315" vectorequiv="Indexubv"
- deprecated="3.1">
+ <function name="Indexub" vectorequiv="Indexubv" deprecated="3.1">
<param name="c" type="GLubyte"/>
</function>
- <function name="Indexubv" offset="316" deprecated="3.1">
+ <function name="Indexubv" deprecated="3.1">
<param name="c" type="const GLubyte *" count="1"/>
<glx rop="194"/>
</function>
- <function name="PopClientAttrib" offset="334" deprecated="3.1">
+ <function name="PopClientAttrib" deprecated="3.1">
<glx handcode="true"/>
</function>
- <function name="PushClientAttrib" offset="335" deprecated="3.1">
+ <function name="PushClientAttrib" deprecated="3.1">
<param name="mask" type="GLbitfield"/>
<glx handcode="true"/>
</function>
@@ -3781,7 +3711,7 @@
</enum>
- <function name="BlendColor" offset="336" es2="2.0">
+ <function name="BlendColor" es2="2.0">
<param name="red" type="GLclampf"/>
<param name="green" type="GLclampf"/>
<param name="blue" type="GLclampf"/>
@@ -3789,13 +3719,12 @@
<glx rop="4096"/>
</function>
- <function name="BlendEquation" offset="337" es2="2.0">
+ <function name="BlendEquation" es2="2.0">
<param name="mode" type="GLenum"/>
<glx rop="4097"/>
</function>
- <function name="DrawRangeElements" offset="338" es2="3.0"
- exec="dynamic">
+ <function name="DrawRangeElements" es2="3.0" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="start" type="GLuint"/>
<param name="end" type="GLuint"/>
@@ -3805,7 +3734,7 @@
<glx handcode="true"/>
</function>
- <function name="ColorTable" offset="339" deprecated="3.1">
+ <function name="ColorTable" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -3815,21 +3744,21 @@
<glx rop="2053" large="true"/>
</function>
- <function name="ColorTableParameterfv" offset="340" deprecated="3.1">
+ <function name="ColorTableParameterfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="2054"/>
</function>
- <function name="ColorTableParameteriv" offset="341" deprecated="3.1">
+ <function name="ColorTableParameteriv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="2055"/>
</function>
- <function name="CopyColorTable" offset="342" deprecated="3.1">
+ <function name="CopyColorTable" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="x" type="GLint"/>
@@ -3838,7 +3767,7 @@
<glx rop="2056"/>
</function>
- <function name="GetColorTable" offset="343" deprecated="3.1">
+ <function name="GetColorTable" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -3846,21 +3775,21 @@
<glx sop="147" dimensions_in_reply="true"/>
</function>
- <function name="GetColorTableParameterfv" offset="344" deprecated="3.1">
+ <function name="GetColorTableParameterfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="148"/>
</function>
- <function name="GetColorTableParameteriv" offset="345" deprecated="3.1">
+ <function name="GetColorTableParameteriv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="149"/>
</function>
- <function name="ColorSubTable" offset="346" deprecated="3.1">
+ <function name="ColorSubTable" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="start" type="GLsizei"/>
<param name="count" type="GLsizei"/>
@@ -3870,7 +3799,7 @@
<glx rop="195" large="true"/>
</function>
- <function name="CopyColorSubTable" offset="347" deprecated="3.1">
+ <function name="CopyColorSubTable" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="start" type="GLsizei"/>
<param name="x" type="GLint"/>
@@ -3879,7 +3808,7 @@
<glx rop="196"/>
</function>
- <function name="ConvolutionFilter1D" offset="348" deprecated="3.1">
+ <function name="ConvolutionFilter1D" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -3889,7 +3818,7 @@
<glx rop="4101" large="true"/>
</function>
- <function name="ConvolutionFilter2D" offset="349" deprecated="3.1">
+ <function name="ConvolutionFilter2D" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -3900,35 +3829,35 @@
<glx rop="4102" large="true"/>
</function>
- <function name="ConvolutionParameterf" offset="350" deprecated="3.1">
+ <function name="ConvolutionParameterf" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat"/>
<glx rop="4103"/>
</function>
- <function name="ConvolutionParameterfv" offset="351" deprecated="3.1">
+ <function name="ConvolutionParameterfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="4104"/>
</function>
- <function name="ConvolutionParameteri" offset="352" deprecated="3.1">
+ <function name="ConvolutionParameteri" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint"/>
<glx rop="4105"/>
</function>
- <function name="ConvolutionParameteriv" offset="353" deprecated="3.1">
+ <function name="ConvolutionParameteriv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="4106"/>
</function>
- <function name="CopyConvolutionFilter1D" offset="354" deprecated="3.1">
+ <function name="CopyConvolutionFilter1D" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="x" type="GLint"/>
@@ -3937,7 +3866,7 @@
<glx rop="4107"/>
</function>
- <function name="CopyConvolutionFilter2D" offset="355" deprecated="3.1">
+ <function name="CopyConvolutionFilter2D" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="x" type="GLint"/>
@@ -3947,7 +3876,7 @@
<glx rop="4108"/>
</function>
- <function name="GetConvolutionFilter" offset="356" deprecated="3.1">
+ <function name="GetConvolutionFilter" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -3955,21 +3884,21 @@
<glx sop="150" dimensions_in_reply="true"/>
</function>
- <function name="GetConvolutionParameterfv" offset="357" deprecated="3.1">
+ <function name="GetConvolutionParameterfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="151"/>
</function>
- <function name="GetConvolutionParameteriv" offset="358" deprecated="3.1">
+ <function name="GetConvolutionParameteriv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="152"/>
</function>
- <function name="GetSeparableFilter" offset="359" deprecated="3.1">
+ <function name="GetSeparableFilter" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -3979,7 +3908,7 @@
<glx sop="153" handcode="true"/>
</function>
- <function name="SeparableFilter2D" offset="360" deprecated="3.1">
+ <function name="SeparableFilter2D" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -3991,7 +3920,7 @@
<glx rop="4109" handcode="true"/>
</function>
- <function name="GetHistogram" offset="361" deprecated="3.1">
+ <function name="GetHistogram" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="reset" type="GLboolean"/>
<param name="format" type="GLenum"/>
@@ -4000,21 +3929,21 @@
<glx sop="154" dimensions_in_reply="true" img_reset="reset"/>
</function>
- <function name="GetHistogramParameterfv" offset="362" deprecated="3.1">
+ <function name="GetHistogramParameterfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="155"/>
</function>
- <function name="GetHistogramParameteriv" offset="363" deprecated="3.1">
+ <function name="GetHistogramParameteriv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="156"/>
</function>
- <function name="GetMinmax" offset="364" deprecated="3.1">
+ <function name="GetMinmax" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="reset" type="GLboolean"/>
<param name="format" type="GLenum"/>
@@ -4023,21 +3952,21 @@
<glx sop="157" img_reset="reset"/>
</function>
- <function name="GetMinmaxParameterfv" offset="365" deprecated="3.1">
+ <function name="GetMinmaxParameterfv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx sop="158"/>
</function>
- <function name="GetMinmaxParameteriv" offset="366" deprecated="3.1">
+ <function name="GetMinmaxParameteriv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="159"/>
</function>
- <function name="Histogram" offset="367" deprecated="3.1">
+ <function name="Histogram" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="width" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
@@ -4045,24 +3974,24 @@
<glx rop="4110"/>
</function>
- <function name="Minmax" offset="368" deprecated="3.1">
+ <function name="Minmax" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="sink" type="GLboolean"/>
<glx rop="4111"/>
</function>
- <function name="ResetHistogram" offset="369" deprecated="3.1">
+ <function name="ResetHistogram" deprecated="3.1">
<param name="target" type="GLenum"/>
<glx rop="4112"/>
</function>
- <function name="ResetMinmax" offset="370" deprecated="3.1">
+ <function name="ResetMinmax" deprecated="3.1">
<param name="target" type="GLenum"/>
<glx rop="4113"/>
</function>
- <function name="TexImage3D" offset="371" es2="3.0">
+ <function name="TexImage3D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLint"/>
@@ -4076,7 +4005,7 @@
<glx rop="4114" large="true"/>
</function>
- <function name="TexSubImage3D" offset="372" es2="3.0">
+ <function name="TexSubImage3D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -4092,7 +4021,7 @@
<glx rop="4115" large="true"/>
</function>
- <function name="CopyTexSubImage3D" offset="373" es2="3.0">
+ <function name="CopyTexSubImage3D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -4319,33 +4248,28 @@
<enum name="DOT3_RGB" value="0x86AE"/>
<enum name="DOT3_RGBA" value="0x86AF"/>
- <function name="ActiveTexture" es1="1.0"
- es2="2.0" offset="374">
+ <function name="ActiveTexture" es1="1.0" es2="2.0">
<param name="texture" type="GLenum"/>
<glx rop="197"/>
</function>
- <function name="ClientActiveTexture"
- es1="1.0" deprecated="3.1" offset="375">
+ <function name="ClientActiveTexture" es1="1.0" deprecated="3.1">
<param name="texture" type="GLenum"/>
<glx handcode="true"/>
</function>
- <function name="MultiTexCoord1d"
- deprecated="3.1" offset="376">
+ <function name="MultiTexCoord1d" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLdouble"/>
</function>
- <function name="MultiTexCoord1dv"
- deprecated="3.1" offset="377">
+ <function name="MultiTexCoord1dv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLdouble *" count="1"/>
<glx rop="198"/>
</function>
- <function name="MultiTexCoord1f" alias="MultiTexCoord1fARB"
- deprecated="3.1">
+ <function name="MultiTexCoord1f" alias="MultiTexCoord1fARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLfloat"/>
</function>
@@ -4356,41 +4280,35 @@
<param name="v" type="const GLfloat *"/>
</function>
- <function name="MultiTexCoord1i"
- deprecated="3.1" offset="380">
+ <function name="MultiTexCoord1i" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLint"/>
</function>
- <function name="MultiTexCoord1iv"
- deprecated="3.1" offset="381">
+ <function name="MultiTexCoord1iv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLint *" count="1"/>
<glx rop="200"/>
</function>
- <function name="MultiTexCoord1s"
- deprecated="3.1" offset="382">
+ <function name="MultiTexCoord1s" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLshort"/>
</function>
- <function name="MultiTexCoord1sv"
- deprecated="3.1" offset="383">
+ <function name="MultiTexCoord1sv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLshort *" count="1"/>
<glx rop="201"/>
</function>
- <function name="MultiTexCoord2d"
- deprecated="3.1" offset="384">
+ <function name="MultiTexCoord2d" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLdouble"/>
<param name="t" type="GLdouble"/>
</function>
- <function name="MultiTexCoord2dv"
- deprecated="3.1" offset="385">
+ <function name="MultiTexCoord2dv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLdouble *" count="2"/>
<glx rop="202"/>
@@ -4409,44 +4327,38 @@
<param name="v" type="const GLfloat *"/>
</function>
- <function name="MultiTexCoord2i"
- deprecated="3.1" offset="388">
+ <function name="MultiTexCoord2i" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLint"/>
<param name="t" type="GLint"/>
</function>
- <function name="MultiTexCoord2iv"
- deprecated="3.1" offset="389">
+ <function name="MultiTexCoord2iv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLint *" count="2"/>
<glx rop="204"/>
</function>
- <function name="MultiTexCoord2s"
- deprecated="3.1" offset="390">
+ <function name="MultiTexCoord2s" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLshort"/>
<param name="t" type="GLshort"/>
</function>
- <function name="MultiTexCoord2sv"
- deprecated="3.1" offset="391">
+ <function name="MultiTexCoord2sv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLshort *" count="2"/>
<glx rop="205"/>
</function>
- <function name="MultiTexCoord3d"
- deprecated="3.1" offset="392">
+ <function name="MultiTexCoord3d" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLdouble"/>
<param name="t" type="GLdouble"/>
<param name="r" type="GLdouble"/>
</function>
- <function name="MultiTexCoord3dv"
- deprecated="3.1" offset="393">
+ <function name="MultiTexCoord3dv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="206"/>
@@ -4466,38 +4378,33 @@
<param name="v" type="const GLfloat *"/>
</function>
- <function name="MultiTexCoord3i"
- deprecated="3.1" offset="396">
+ <function name="MultiTexCoord3i" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLint"/>
<param name="t" type="GLint"/>
<param name="r" type="GLint"/>
</function>
- <function name="MultiTexCoord3iv"
- deprecated="3.1" offset="397">
+ <function name="MultiTexCoord3iv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLint *" count="3"/>
<glx rop="208"/>
</function>
- <function name="MultiTexCoord3s"
- deprecated="3.1" offset="398">
+ <function name="MultiTexCoord3s" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLshort"/>
<param name="t" type="GLshort"/>
<param name="r" type="GLshort"/>
</function>
- <function name="MultiTexCoord3sv"
- deprecated="3.1" offset="399">
+ <function name="MultiTexCoord3sv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLshort *" count="3"/>
<glx rop="209"/>
</function>
- <function name="MultiTexCoord4d"
- deprecated="3.1" offset="400">
+ <function name="MultiTexCoord4d" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLdouble"/>
<param name="t" type="GLdouble"/>
@@ -4505,8 +4412,7 @@
<param name="q" type="GLdouble"/>
</function>
- <function name="MultiTexCoord4dv"
- deprecated="3.1" offset="401">
+ <function name="MultiTexCoord4dv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="210"/>
@@ -4527,8 +4433,7 @@
<param name="v" type="const GLfloat *"/>
</function>
- <function name="MultiTexCoord4i"
- deprecated="3.1" offset="404">
+ <function name="MultiTexCoord4i" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLint"/>
<param name="t" type="GLint"/>
@@ -4536,15 +4441,13 @@
<param name="q" type="GLint"/>
</function>
- <function name="MultiTexCoord4iv"
- deprecated="3.1" offset="405">
+ <function name="MultiTexCoord4iv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLint *" count="4"/>
<glx rop="212"/>
</function>
- <function name="MultiTexCoord4s"
- deprecated="3.1" offset="406">
+ <function name="MultiTexCoord4s" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="s" type="GLshort"/>
<param name="t" type="GLshort"/>
@@ -4552,45 +4455,39 @@
<param name="q" type="GLshort"/>
</function>
- <function name="MultiTexCoord4sv"
- deprecated="3.1" offset="407">
+ <function name="MultiTexCoord4sv" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="v" type="const GLshort *" count="4"/>
<glx rop="213"/>
</function>
- <function name="LoadTransposeMatrixf"
- deprecated="3.1" offset="assign">
+ <function name="LoadTransposeMatrixf" deprecated="3.1">
<param name="m" type="const GLfloat *"/>
<glx handcode="true"/>
</function>
- <function name="LoadTransposeMatrixd"
- deprecated="3.1" offset="assign">
+ <function name="LoadTransposeMatrixd" deprecated="3.1">
<param name="m" type="const GLdouble *"/>
<glx handcode="true"/>
</function>
- <function name="MultTransposeMatrixf"
- deprecated="3.1" offset="assign">
+ <function name="MultTransposeMatrixf" deprecated="3.1">
<param name="m" type="const GLfloat *"/>
<glx handcode="true"/>
</function>
- <function name="MultTransposeMatrixd"
- deprecated="3.1" offset="assign">
+ <function name="MultTransposeMatrixd" deprecated="3.1">
<param name="m" type="const GLdouble *"/>
<glx handcode="true"/>
</function>
- <function name="SampleCoverage" es1="1.0"
- es2="2.0" offset="assign">
+ <function name="SampleCoverage" es1="1.0" es2="2.0">
<param name="value" type="GLclampf"/>
<param name="invert" type="GLboolean"/>
<glx rop="229"/>
</function>
- <function name="CompressedTexImage3D" es2="3.0" offset="assign">
+ <function name="CompressedTexImage3D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -4603,8 +4500,7 @@
<glx rop="216" handcode="client"/>
</function>
- <function name="CompressedTexImage2D"
- es1="1.0" es2="2.0" offset="assign">
+ <function name="CompressedTexImage2D" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -4616,7 +4512,7 @@
<glx rop="215" handcode="client"/>
</function>
- <function name="CompressedTexImage1D" offset="assign">
+ <function name="CompressedTexImage1D">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="internalformat" type="GLenum"/>
@@ -4627,7 +4523,7 @@
<glx rop="214" handcode="client"/>
</function>
- <function name="CompressedTexSubImage3D" es2="3.0" offset="assign">
+ <function name="CompressedTexSubImage3D" es2="3.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -4642,8 +4538,7 @@
<glx rop="219" handcode="client"/>
</function>
- <function name="CompressedTexSubImage2D"
- es1="1.0" es2="2.0" offset="assign">
+ <function name="CompressedTexSubImage2D" es1="1.0" es2="2.0">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -4656,7 +4551,7 @@
<glx rop="218" handcode="client"/>
</function>
- <function name="CompressedTexSubImage1D" offset="assign">
+ <function name="CompressedTexSubImage1D">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="xoffset" type="GLint"/>
@@ -4667,7 +4562,7 @@
<glx rop="217" handcode="client"/>
</function>
- <function name="GetCompressedTexImage" offset="assign">
+ <function name="GetCompressedTexImage">
<param name="target" type="GLenum"/>
<param name="level" type="GLint"/>
<param name="img" type="GLvoid *" output="true"/>
@@ -4790,7 +4685,7 @@
</enum>
<enum name="COMPARE_R_TO_TEXTURE" value="0x884E"/>
- <function name="BlendFuncSeparate" es2="2.0" offset="assign">
+ <function name="BlendFuncSeparate" es2="2.0">
<param name="sfactorRGB" type="GLenum"/>
<param name="dfactorRGB" type="GLenum"/>
<param name="sfactorAlpha" type="GLenum"/>
@@ -4806,24 +4701,23 @@
<param name="coord" type="const GLfloat *"/>
</function>
- <function name="FogCoordd" deprecated="3.1" offset="assign">
+ <function name="FogCoordd" deprecated="3.1">
<param name="coord" type="GLdouble"/>
</function>
- <function name="FogCoorddv" deprecated="3.1" offset="assign">
+ <function name="FogCoorddv" deprecated="3.1">
<param name="coord" type="const GLdouble *" count="1"/>
<glx rop="4125"/>
</function>
- <function name="FogCoordPointer"
- deprecated="3.1" offset="assign">
+ <function name="FogCoordPointer" deprecated="3.1">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
<glx handcode="true"/>
</function>
- <function name="MultiDrawArrays" offset="assign">
+ <function name="MultiDrawArrays">
<param name="mode" type="GLenum"/>
<param name="first" type="const GLint *"/>
<param name="count" type="const GLsizei *"/>
@@ -4839,52 +4733,48 @@
<param name="primcount" type="GLsizei"/>
</function>
- <function name="PointParameterf" es1="1.1" offset="assign">
+ <function name="PointParameterf" es1="1.1">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
<glx rop="2065"/>
</function>
- <function name="PointParameterfv" es1="1.1" offset="assign">
+ <function name="PointParameterfv" es1="1.1">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *" variable_param="pname"/>
<glx rop="2066"/>
</function>
- <function name="PointParameteri" offset="assign">
+ <function name="PointParameteri">
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
<glx rop="4221"/>
</function>
- <function name="PointParameteriv" offset="assign">
+ <function name="PointParameteriv">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *" variable_param="pname"/>
<glx rop="4222"/>
</function>
- <function name="SecondaryColor3b"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3b" deprecated="3.1">
<param name="red" type="GLbyte"/>
<param name="green" type="GLbyte"/>
<param name="blue" type="GLbyte"/>
</function>
- <function name="SecondaryColor3bv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3bv" deprecated="3.1">
<param name="v" type="const GLbyte *" count="3"/>
<glx rop="4126"/>
</function>
- <function name="SecondaryColor3d"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3d" deprecated="3.1">
<param name="red" type="GLdouble"/>
<param name="green" type="GLdouble"/>
<param name="blue" type="GLdouble"/>
</function>
- <function name="SecondaryColor3dv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3dv" deprecated="3.1">
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="4130"/>
</function>
@@ -4901,73 +4791,62 @@
<param name="v" type="const GLfloat *"/>
</function>
- <function name="SecondaryColor3i"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3i" deprecated="3.1">
<param name="red" type="GLint"/>
<param name="green" type="GLint"/>
<param name="blue" type="GLint"/>
</function>
- <function name="SecondaryColor3iv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3iv" deprecated="3.1">
<param name="v" type="const GLint *" count="3"/>
<glx rop="4128"/>
</function>
- <function name="SecondaryColor3s"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3s" deprecated="3.1">
<param name="red" type="GLshort"/>
<param name="green" type="GLshort"/>
<param name="blue" type="GLshort"/>
</function>
- <function name="SecondaryColor3sv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3sv" deprecated="3.1">
<param name="v" type="const GLshort *" count="3"/>
<glx rop="4127"/>
</function>
- <function name="SecondaryColor3ub"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3ub" deprecated="3.1">
<param name="red" type="GLubyte"/>
<param name="green" type="GLubyte"/>
<param name="blue" type="GLubyte"/>
</function>
- <function name="SecondaryColor3ubv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3ubv" deprecated="3.1">
<param name="v" type="const GLubyte *" count="3"/>
<glx rop="4131"/>
</function>
- <function name="SecondaryColor3ui"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3ui" deprecated="3.1">
<param name="red" type="GLuint"/>
<param name="green" type="GLuint"/>
<param name="blue" type="GLuint"/>
</function>
- <function name="SecondaryColor3uiv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3uiv" deprecated="3.1">
<param name="v" type="const GLuint *" count="3"/>
<glx rop="4133"/>
</function>
- <function name="SecondaryColor3us"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3us" deprecated="3.1">
<param name="red" type="GLushort"/>
<param name="green" type="GLushort"/>
<param name="blue" type="GLushort"/>
</function>
- <function name="SecondaryColor3usv"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColor3usv" deprecated="3.1">
<param name="v" type="const GLushort *" count="3"/>
<glx rop="4132"/>
</function>
- <function name="SecondaryColorPointer"
- deprecated="3.1" offset="assign">
+ <function name="SecondaryColorPointer" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -4975,93 +4854,93 @@
<glx handcode="true"/>
</function>
- <function name="WindowPos2d" deprecated="3.1" offset="assign">
+ <function name="WindowPos2d" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2dv" deprecated="3.1" offset="assign">
+ <function name="WindowPos2dv" deprecated="3.1">
<param name="v" type="const GLdouble *"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2f" deprecated="3.1" offset="assign">
+ <function name="WindowPos2f" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2fv" deprecated="3.1" offset="assign">
+ <function name="WindowPos2fv" deprecated="3.1">
<param name="v" type="const GLfloat *"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2i" deprecated="3.1" offset="assign">
+ <function name="WindowPos2i" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2iv" deprecated="3.1" offset="assign">
+ <function name="WindowPos2iv" deprecated="3.1">
<param name="v" type="const GLint *"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2s" deprecated="3.1" offset="assign">
+ <function name="WindowPos2s" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos2sv" deprecated="3.1" offset="assign">
+ <function name="WindowPos2sv" deprecated="3.1">
<param name="v" type="const GLshort *"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos3d" deprecated="3.1" offset="assign">
+ <function name="WindowPos3d" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos3dv" deprecated="3.1" offset="assign">
+ <function name="WindowPos3dv" deprecated="3.1">
<param name="v" type="const GLdouble *"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos3f" deprecated="3.1" offset="assign">
+ <function name="WindowPos3f" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
</function>
- <function name="WindowPos3fv" deprecated="3.1" offset="assign">
+ <function name="WindowPos3fv" deprecated="3.1">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="230"/>
</function>
- <function name="WindowPos3i" deprecated="3.1" offset="assign">
+ <function name="WindowPos3i" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos3iv" deprecated="3.1" offset="assign">
+ <function name="WindowPos3iv" deprecated="3.1">
<param name="v" type="const GLint *"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos3s" deprecated="3.1" offset="assign">
+ <function name="WindowPos3s" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
<glx handcode="true"/>
</function>
- <function name="WindowPos3sv" deprecated="3.1" offset="assign">
+ <function name="WindowPos3sv" deprecated="3.1">
<param name="v" type="const GLshort *"/>
<glx handcode="true"/>
</function>
@@ -5132,13 +5011,13 @@
<type name="intptr" size="4" glx_name="CARD32"/>
<type name="sizeiptr" size="4" unsigned="true" glx_name="CARD32"/>
- <function name="BindBuffer" es1="1.1" es2="2.0" offset="assign">
+ <function name="BindBuffer" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="buffer" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="BufferData" es1="1.1" es2="2.0" offset="assign">
+ <function name="BufferData" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="size" type="GLsizeiptr" counter="true"/>
<param name="data" type="const GLvoid *" count="size" img_null_flag="true"/>
@@ -5146,8 +5025,7 @@
<glx ignore="true"/>
</function>
- <function name="BufferSubData" es1="1.1"
- es2="2.0" offset="assign">
+ <function name="BufferSubData" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="size" type="GLsizeiptr" counter="true"/>
@@ -5155,35 +5033,33 @@
<glx ignore="true"/>
</function>
- <function name="DeleteBuffers" es1="1.1"
- es2="2.0" offset="assign">
+ <function name="DeleteBuffers" es1="1.1" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="buffer" type="const GLuint *" count="n"/>
<glx ignore="true"/>
</function>
- <function name="GenBuffers" es1="1.1" es2="2.0" offset="assign">
+ <function name="GenBuffers" es1="1.1" es2="2.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="buffer" type="GLuint *" output="true" count="n"/>
<glx ignore="true"/>
</function>
- <function name="GetBufferParameteriv"
- es1="1.1" es2="2.0" offset="assign">
+ <function name="GetBufferParameteriv" es1="1.1" es2="2.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx ignore="true"/>
</function>
- <function name="GetBufferPointerv" es2="3.0" offset="assign">
+ <function name="GetBufferPointerv" es2="3.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLvoid **" output="true"/>
<glx ignore="true"/>
</function>
- <function name="GetBufferSubData" offset="assign">
+ <function name="GetBufferSubData">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="size" type="GLsizeiptr" counter="true"/>
@@ -5191,69 +5067,69 @@
<glx ignore="true"/>
</function>
- <function name="IsBuffer" es1="1.1" es2="2.0" offset="assign">
+ <function name="IsBuffer" es1="1.1" es2="2.0">
<param name="buffer" type="GLuint"/>
<return type="GLboolean"/>
<glx ignore="true"/>
</function>
- <function name="MapBuffer" offset="assign">
+ <function name="MapBuffer">
<param name="target" type="GLenum"/>
<param name="access" type="GLenum"/>
<return type="GLvoid *"/>
<glx ignore="true"/>
</function>
- <function name="UnmapBuffer" es2="3.0" offset="assign">
+ <function name="UnmapBuffer" es2="3.0">
<param name="target" type="GLenum"/>
<return type="GLboolean"/>
<glx ignore="true"/>
</function>
- <function name="GenQueries" es2="3.0" offset="assign">
+ <function name="GenQueries" es2="3.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="ids" type="GLuint *" output="true" count="n"/>
<glx sop="162" always_array="true"/>
</function>
- <function name="DeleteQueries" es2="3.0" offset="assign">
+ <function name="DeleteQueries" es2="3.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="ids" type="const GLuint *" count="n"/>
<glx sop="161"/>
</function>
- <function name="IsQuery" es2="3.0" offset="assign">
+ <function name="IsQuery" es2="3.0">
<param name="id" type="GLuint"/>
<return type="GLboolean"/>
<glx sop="163"/>
</function>
- <function name="BeginQuery" es2="3.0" offset="assign">
+ <function name="BeginQuery" es2="3.0">
<param name="target" type="GLenum"/>
<param name="id" type="GLuint"/>
<glx rop="231"/>
</function>
- <function name="EndQuery" es2="3.0" offset="assign">
+ <function name="EndQuery" es2="3.0">
<param name="target" type="GLenum"/>
<glx rop="232"/>
</function>
- <function name="GetQueryiv" es2="3.0" offset="assign">
+ <function name="GetQueryiv" es2="3.0">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="164"/>
</function>
- <function name="GetQueryObjectiv" offset="assign">
+ <function name="GetQueryObjectiv">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx sop="165"/>
</function>
- <function name="GetQueryObjectuiv" es2="3.0" offset="assign">
+ <function name="GetQueryObjectuiv" es2="3.0">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLuint *" output="true" variable_param="pname"/>
@@ -5356,20 +5232,19 @@
<enum name="STENCIL_BACK_VALUE_MASK" value="0x8CA4"/>
<enum name="STENCIL_BACK_WRITEMASK" value="0x8CA5"/>
- <function name="BlendEquationSeparate"
- es2="2.0" offset="assign">
+ <function name="BlendEquationSeparate" es2="2.0">
<param name="modeRGB" type="GLenum"/>
<param name="modeA" type="GLenum"/>
<glx rop="4228"/>
</function>
- <function name="DrawBuffers" es2="3.0" offset="assign">
+ <function name="DrawBuffers" es2="3.0">
<param name="n" type="GLsizei" counter="true"/>
<param name="bufs" type="const GLenum *" count="n"/>
<glx rop="233" large="true"/>
</function>
- <function name="StencilFuncSeparate" offset="assign" es2="2.0">
+ <function name="StencilFuncSeparate" es2="2.0">
<param name="face" type="GLenum"/>
<param name="func" type="GLenum"/>
<param name="ref" type="GLint"/>
@@ -5377,7 +5252,7 @@
<glx ignore="true"/>
</function>
- <function name="StencilOpSeparate" offset="assign" es2="2.0">
+ <function name="StencilOpSeparate" es2="2.0">
<param name="face" type="GLenum"/>
<param name="sfail" type="GLenum"/>
<param name="zfail" type="GLenum"/>
@@ -5385,72 +5260,70 @@
<glx ignore="true"/>
</function>
- <function name="StencilMaskSeparate" offset="assign" es2="2.0">
+ <function name="StencilMaskSeparate" es2="2.0">
<param name="face" type="GLenum"/>
<param name="mask" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="AttachShader" offset="assign" es2="2.0">
+ <function name="AttachShader" es2="2.0">
<param name="program" type="GLuint"/>
<param name="shader" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="BindAttribLocation"
- es2="2.0" offset="assign">
+ <function name="BindAttribLocation" es2="2.0">
<param name="program" type="GLuint"/>
<param name="index" type="GLuint"/>
<param name="name" type="const GLchar *"/>
<glx ignore="true"/>
</function>
- <function name="CompileShader" es2="2.0" offset="assign">
+ <function name="CompileShader" es2="2.0">
<param name="shader" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="CreateProgram" offset="assign" es2="2.0">
+ <function name="CreateProgram" es2="2.0">
<return type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="CreateShader" offset="assign" es2="2.0">
+ <function name="CreateShader" es2="2.0">
<param name="type" type="GLenum"/>
<return type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="DeleteProgram" offset="assign" es2="2.0">
+ <function name="DeleteProgram" es2="2.0">
<param name="program" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="DeleteShader" offset="assign" es2="2.0">
+ <function name="DeleteShader" es2="2.0">
<param name="program" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="DetachShader" offset="assign" es2="2.0">
+ <function name="DetachShader" es2="2.0">
<param name="program" type="GLuint"/>
<param name="shader" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="DisableVertexAttribArray" es2="2.0" offset="assign">
+ <function name="DisableVertexAttribArray" es2="2.0">
<param name="index" type="GLuint"/>
<glx ignore="true"/>
<glx handcode="true"/>
</function>
- <function name="EnableVertexAttribArray"
- es2="2.0" offset="assign">
+ <function name="EnableVertexAttribArray" es2="2.0">
<param name="index" type="GLuint"/>
<glx ignore="true"/>
<glx handcode="true"/>
</function>
- <function name="GetActiveAttrib" es2="2.0" offset="assign">
+ <function name="GetActiveAttrib" es2="2.0">
<param name="program" type="GLuint"/>
<param name="index" type="GLuint"/>
<param name="bufSize" type="GLsizei "/>
@@ -5461,7 +5334,7 @@
<glx ignore="true"/>
</function>
- <function name="GetActiveUniform" es2="2.0" offset="assign">
+ <function name="GetActiveUniform" es2="2.0">
<param name="program" type="GLuint"/>
<param name="index" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
@@ -5472,7 +5345,7 @@
<glx ignore="true"/>
</function>
- <function name="GetAttachedShaders" offset="assign" es2="2.0">
+ <function name="GetAttachedShaders" es2="2.0">
<param name="program" type="GLuint"/>
<param name="maxCount" type="GLsizei"/>
<param name="count" type="GLsizei *" output="true"/>
@@ -5480,21 +5353,21 @@
<glx ignore="true"/>
</function>
- <function name="GetAttribLocation" es2="2.0" offset="assign">
+ <function name="GetAttribLocation" es2="2.0">
<param name="program" type="GLuint"/>
<param name="name" type="const GLchar *"/>
<return type="GLint"/>
<glx ignore="true"/>
</function>
- <function name="GetProgramiv" offset="assign" es2="2.0">
+ <function name="GetProgramiv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true"/>
<glx ignore="true"/>
</function>
- <function name="GetProgramInfoLog" offset="assign" es2="2.0">
+ <function name="GetProgramInfoLog" es2="2.0">
<param name="program" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
@@ -5502,14 +5375,14 @@
<glx ignore="true"/>
</function>
- <function name="GetShaderiv" offset="assign" es2="2.0">
+ <function name="GetShaderiv" es2="2.0">
<param name="shader" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *"/>
<glx ignore="true"/>
</function>
- <function name="GetShaderInfoLog" offset="assign" es2="2.0">
+ <function name="GetShaderInfoLog" es2="2.0">
<param name="shader" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *"/>
@@ -5517,7 +5390,7 @@
<glx ignore="true"/>
</function>
- <function name="GetShaderSource" es2="2.0" offset="assign">
+ <function name="GetShaderSource" es2="2.0">
<param name="shader" type="GLuint"/>
<param name="bufSize" type="GLsizei"/>
<param name="length" type="GLsizei *" output="true"/>
@@ -5525,29 +5398,28 @@
<glx ignore="true"/>
</function>
- <function name="GetUniformLocation"
- es2="2.0" offset="assign">
+ <function name="GetUniformLocation" es2="2.0">
<param name="program" type="GLuint"/>
<param name="name" type="const GLchar *"/>
<return type="GLint"/>
<glx ignore="true"/>
</function>
- <function name="GetUniformfv" es2="2.0" offset="assign">
+ <function name="GetUniformfv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="params" type="GLfloat *" output="true"/>
<glx ignore="true"/>
</function>
- <function name="GetUniformiv" es2="2.0" offset="assign">
+ <function name="GetUniformiv" es2="2.0">
<param name="program" type="GLuint"/>
<param name="location" type="GLint"/>
<param name="params" type="GLint *" output="true"/>
<glx ignore="true"/>
</function>
- <function name="GetVertexAttribdv" offset="assign">
+ <function name="GetVertexAttribdv">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLdouble *" output="true" variable_param="pname"/>
@@ -5555,7 +5427,7 @@
<glx handcode="client" vendorpriv="1301"/>
</function>
- <function name="GetVertexAttribfv" es2="2.0" offset="assign">
+ <function name="GetVertexAttribfv" es2="2.0">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
@@ -5563,7 +5435,7 @@
<glx handcode="client" vendorpriv="1302"/>
</function>
- <function name="GetVertexAttribiv" es2="2.0" offset="assign">
+ <function name="GetVertexAttribiv" es2="2.0">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
@@ -5571,8 +5443,7 @@
<glx handcode="client" vendorpriv="1303"/>
</function>
- <function name="GetVertexAttribPointerv"
- es2="2.0" offset="assign">
+ <function name="GetVertexAttribPointerv" es2="2.0">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="pointer" type="GLvoid **" output="true"/>
@@ -5580,24 +5451,24 @@
<glx handcode="true"/>
</function>
- <function name="IsProgram" offset="assign" es2="2.0">
+ <function name="IsProgram" es2="2.0">
<param name="program" type="GLuint"/>
<return type="GLboolean"/>
<glx ignore="true"/>
</function>
- <function name="IsShader" offset="assign" es2="2.0">
+ <function name="IsShader" es2="2.0">
<param name="shader" type="GLuint"/>
<return type="GLboolean"/>
<glx ignore="true"/>
</function>
- <function name="LinkProgram" es2="2.0" offset="assign">
+ <function name="LinkProgram" es2="2.0">
<param name="program" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="ShaderSource" es2="2.0" offset="assign">
+ <function name="ShaderSource" es2="2.0">
<param name="shader" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="string" type="const GLchar * const *"/>
@@ -5605,30 +5476,30 @@
<glx ignore="true"/>
</function>
- <function name="UseProgram" es2="2.0" offset="assign">
+ <function name="UseProgram" es2="2.0">
<param name="program" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="Uniform1f" es2="2.0" offset="assign">
+ <function name="Uniform1f" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLfloat"/>
<glx ignore="true"/>
</function>
- <function name="Uniform2f" es2="2.0" offset="assign">
+ <function name="Uniform2f" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLfloat"/>
<param name="v1" type="GLfloat"/>
<glx ignore="true"/>
</function>
- <function name="Uniform3f" es2="2.0" offset="assign">
+ <function name="Uniform3f" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLfloat"/>
<param name="v1" type="GLfloat"/>
<param name="v2" type="GLfloat"/>
<glx ignore="true"/>
</function>
- <function name="Uniform4f" es2="2.0" offset="assign">
+ <function name="Uniform4f" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLfloat"/>
<param name="v1" type="GLfloat"/>
@@ -5637,25 +5508,25 @@
<glx ignore="true"/>
</function>
- <function name="Uniform1i" es2="2.0" offset="assign">
+ <function name="Uniform1i" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLint"/>
<glx ignore="true"/>
</function>
- <function name="Uniform2i" es2="2.0" offset="assign">
+ <function name="Uniform2i" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLint"/>
<param name="v1" type="GLint"/>
<glx ignore="true"/>
</function>
- <function name="Uniform3i" es2="2.0" offset="assign">
+ <function name="Uniform3i" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLint"/>
<param name="v1" type="GLint"/>
<param name="v2" type="GLint"/>
<glx ignore="true"/>
</function>
- <function name="Uniform4i" es2="2.0" offset="assign">
+ <function name="Uniform4i" es2="2.0">
<param name="location" type="GLint"/>
<param name="v0" type="GLint"/>
<param name="v1" type="GLint"/>
@@ -5664,71 +5535,71 @@
<glx ignore="true"/>
</function>
- <function name="Uniform1fv" es2="2.0" offset="assign">
+ <function name="Uniform1fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLfloat *" count="count"/>
<glx ignore="true"/>
</function>
- <function name="Uniform2fv" es2="2.0" offset="assign">
+ <function name="Uniform2fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLfloat *" count="count" count_scale="2"/>
<glx ignore="true"/>
</function>
- <function name="Uniform3fv" es2="2.0" offset="assign">
+ <function name="Uniform3fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLfloat *" count="count" count_scale="3"/>
<glx ignore="true"/>
</function>
- <function name="Uniform4fv" es2="2.0" offset="assign">
+ <function name="Uniform4fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLfloat *" count="count" count_scale="4"/>
<glx ignore="true"/>
</function>
- <function name="Uniform1iv" es2="2.0" offset="assign">
+ <function name="Uniform1iv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLint *" count="count"/>
<glx ignore="true"/>
</function>
- <function name="Uniform2iv" es2="2.0" offset="assign">
+ <function name="Uniform2iv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLint *" count="count" count_scale="2"/>
<glx ignore="true"/>
</function>
- <function name="Uniform3iv" es2="2.0" offset="assign">
+ <function name="Uniform3iv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLint *" count="count" count_scale="3"/>
<glx ignore="true"/>
</function>
- <function name="Uniform4iv" es2="2.0" offset="assign">
+ <function name="Uniform4iv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="value" type="const GLint *" count="count" count_scale="4"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix2fv" es2="2.0" offset="assign">
+ <function name="UniformMatrix2fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="4"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix3fv" es2="2.0" offset="assign">
+ <function name="UniformMatrix3fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="9"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix4fv" es2="2.0" offset="assign">
+ <function name="UniformMatrix4fv" es2="2.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
@@ -5736,16 +5607,16 @@
<glx ignore="true"/>
</function>
- <function name="ValidateProgram" es2="2.0" offset="assign">
+ <function name="ValidateProgram" es2="2.0">
<param name="program" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="VertexAttrib1d" offset="assign">
+ <function name="VertexAttrib1d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
</function>
- <function name="VertexAttrib1dv" offset="assign">
+ <function name="VertexAttrib1dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="1"/>
<glx rop="4197" doubles_in_order="true"/>
@@ -5758,22 +5629,22 @@
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *"/>
</function>
- <function name="VertexAttrib1s" offset="assign">
+ <function name="VertexAttrib1s">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
</function>
- <function name="VertexAttrib1sv" offset="assign">
+ <function name="VertexAttrib1sv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="1"/>
<glx rop="4189"/>
</function>
- <function name="VertexAttrib2d" offset="assign">
+ <function name="VertexAttrib2d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
</function>
- <function name="VertexAttrib2dv" offset="assign">
+ <function name="VertexAttrib2dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="2"/>
<glx rop="4198" doubles_in_order="true"/>
@@ -5787,24 +5658,24 @@
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *"/>
</function>
- <function name="VertexAttrib2s" offset="assign">
+ <function name="VertexAttrib2s">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
</function>
- <function name="VertexAttrib2sv" offset="assign">
+ <function name="VertexAttrib2sv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="2"/>
<glx rop="4190"/>
</function>
- <function name="VertexAttrib3d" offset="assign">
+ <function name="VertexAttrib3d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
</function>
- <function name="VertexAttrib3dv" offset="assign">
+ <function name="VertexAttrib3dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="4199" doubles_in_order="true"/>
@@ -5819,68 +5690,68 @@
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *"/>
</function>
- <function name="VertexAttrib3s" offset="assign">
+ <function name="VertexAttrib3s">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
</function>
- <function name="VertexAttrib3sv" offset="assign">
+ <function name="VertexAttrib3sv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="3"/>
<glx rop="4191"/>
</function>
- <function name="VertexAttrib4Nbv" offset="assign">
+ <function name="VertexAttrib4Nbv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLbyte *" count="4"/>
<glx rop="4235"/>
</function>
- <function name="VertexAttrib4Niv" offset="assign">
+ <function name="VertexAttrib4Niv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *" count="4"/>
<glx rop="4237"/>
</function>
- <function name="VertexAttrib4Nsv" offset="assign">
+ <function name="VertexAttrib4Nsv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="4"/>
<glx rop="4236"/>
</function>
- <function name="VertexAttrib4Nub" offset="assign">
+ <function name="VertexAttrib4Nub">
<param name="index" type="GLuint"/>
<param name="x" type="GLubyte"/>
<param name="y" type="GLubyte"/>
<param name="z" type="GLubyte"/>
<param name="w" type="GLubyte"/>
</function>
- <function name="VertexAttrib4Nubv" offset="assign">
+ <function name="VertexAttrib4Nubv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLubyte *" count="4"/>
<glx rop="4201"/>
</function>
- <function name="VertexAttrib4Nuiv" offset="assign">
+ <function name="VertexAttrib4Nuiv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLuint *" count="4"/>
<glx rop="4239"/>
</function>
- <function name="VertexAttrib4Nusv" offset="assign">
+ <function name="VertexAttrib4Nusv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLushort *" count="4"/>
<glx rop="4238"/>
</function>
- <function name="VertexAttrib4bv" offset="assign">
+ <function name="VertexAttrib4bv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLbyte *" count="4"/>
<glx rop="4230"/>
</function>
- <function name="VertexAttrib4d" offset="assign">
+ <function name="VertexAttrib4d">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
<param name="w" type="GLdouble"/>
</function>
- <function name="VertexAttrib4dv" offset="assign">
+ <function name="VertexAttrib4dv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="4200" doubles_in_order="true"/>
@@ -5896,41 +5767,40 @@
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *"/>
</function>
- <function name="VertexAttrib4iv" offset="assign">
+ <function name="VertexAttrib4iv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLint *" count="4"/>
<glx rop="4231"/>
</function>
- <function name="VertexAttrib4s" offset="assign">
+ <function name="VertexAttrib4s">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
<param name="w" type="GLshort"/>
</function>
- <function name="VertexAttrib4sv" offset="assign">
+ <function name="VertexAttrib4sv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="4"/>
<glx rop="4192"/>
</function>
- <function name="VertexAttrib4ubv" offset="assign">
+ <function name="VertexAttrib4ubv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLubyte *" count="4"/>
<glx rop="4232"/>
</function>
- <function name="VertexAttrib4uiv" offset="assign">
+ <function name="VertexAttrib4uiv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLuint *" count="4"/>
<glx rop="4234"/>
</function>
- <function name="VertexAttrib4usv" offset="assign">
+ <function name="VertexAttrib4usv">
<param name="index" type="GLuint"/>
<param name="v" type="const GLushort *" count="4"/>
<glx rop="4233"/>
</function>
- <function name="VertexAttribPointer"
- es2="2.0" offset="assign">
+ <function name="VertexAttribPointer" es2="2.0">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
@@ -5971,42 +5841,42 @@
<enum name="COMPRESSED_SLUMINANCE" value="0x8C4A"/>
<enum name="COMPRESSED_SLUMINANCE_ALPHA" value="0x8C4B"/>
- <function name="UniformMatrix2x3fv" offset="assign" es2="3.0">
+ <function name="UniformMatrix2x3fv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="6"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix3x2fv" offset="assign" es2="3.0">
+ <function name="UniformMatrix3x2fv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="6"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix2x4fv" offset="assign" es2="3.0">
+ <function name="UniformMatrix2x4fv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="6"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix4x2fv" offset="assign" es2="3.0">
+ <function name="UniformMatrix4x2fv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="8"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix3x4fv" offset="assign" es2="3.0">
+ <function name="UniformMatrix3x4fv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
<param name="value" type="const GLfloat *" count="count" count_scale="12"/>
<glx ignore="true"/>
</function>
- <function name="UniformMatrix4x3fv" offset="assign" es2="3.0">
+ <function name="UniformMatrix4x3fv" es2="3.0">
<param name="location" type="GLint"/>
<param name="count" type="GLsizei" counter="true"/>
<param name="transpose" type="GLboolean"/>
@@ -6081,13 +5951,13 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="MultiTexCoord1fARB" offset="378"
+ <function name="MultiTexCoord1fARB"
vectorequiv="MultiTexCoord1fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="s" type="GLfloat"/>
</function>
- <function name="MultiTexCoord1fvARB" offset="379" exec="dynamic">
+ <function name="MultiTexCoord1fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="v" type="const GLfloat *" count="1"/>
<glx rop="199"/>
@@ -6127,14 +5997,14 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="MultiTexCoord2fARB" offset="386"
+ <function name="MultiTexCoord2fARB"
vectorequiv="MultiTexCoord2fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="s" type="GLfloat"/>
<param name="t" type="GLfloat"/>
</function>
- <function name="MultiTexCoord2fvARB" offset="387" exec="dynamic">
+ <function name="MultiTexCoord2fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="v" type="const GLfloat *" count="2"/>
<glx rop="203"/>
@@ -6177,7 +6047,7 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="MultiTexCoord3fARB" offset="394"
+ <function name="MultiTexCoord3fARB"
vectorequiv="MultiTexCoord3fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="s" type="GLfloat"/>
@@ -6185,7 +6055,7 @@
<param name="r" type="GLfloat"/>
</function>
- <function name="MultiTexCoord3fvARB" offset="395" exec="dynamic">
+ <function name="MultiTexCoord3fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="207"/>
@@ -6231,7 +6101,7 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="MultiTexCoord4fARB" offset="402"
+ <function name="MultiTexCoord4fARB"
vectorequiv="MultiTexCoord4fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="s" type="GLfloat"/>
@@ -6240,7 +6110,7 @@
<param name="q" type="GLfloat"/>
</function>
- <function name="MultiTexCoord4fvARB" offset="403" exec="dynamic">
+ <function name="MultiTexCoord4fvARB" exec="dynamic">
<param name="target" type="GLenum"/>
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="211"/>
@@ -6672,7 +6542,7 @@
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
- <glx handcode="true"/>
+ <glx ignore="true" handcode="true"/>
</function>
<function name="VertexBlendARB" exec="skip">
@@ -6738,7 +6608,7 @@
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="pointer" type="const GLvoid *"/>
- <glx handcode="true"/>
+ <glx ignore="true" handcode="true"/>
</function>
</category>
@@ -7108,13 +6978,13 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttrib1fARB" offset="assign"
- vectorequiv="VertexAttrib1fvARB" exec="dynamic">
+ <function name="VertexAttrib1fARB"
+ vectorequiv="VertexAttrib1fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
</function>
- <function name="VertexAttrib1fvARB" offset="assign" exec="dynamic">
+ <function name="VertexAttrib1fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="1"/>
<glx rop="4193"/>
@@ -7143,14 +7013,14 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttrib2fARB" offset="assign"
+ <function name="VertexAttrib2fARB"
vectorequiv="VertexAttrib2fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
</function>
- <function name="VertexAttrib2fvARB" offset="assign" exec="dynamic">
+ <function name="VertexAttrib2fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="2"/>
<glx rop="4194"/>
@@ -7181,7 +7051,7 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttrib3fARB" offset="assign"
+ <function name="VertexAttrib3fARB"
vectorequiv="VertexAttrib3fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
@@ -7189,7 +7059,7 @@
<param name="z" type="GLfloat"/>
</function>
- <function name="VertexAttrib3fvARB" offset="assign" exec="dynamic">
+ <function name="VertexAttrib3fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="4195"/>
@@ -7222,7 +7092,7 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="VertexAttrib4fARB" offset="assign"
+ <function name="VertexAttrib4fARB"
vectorequiv="VertexAttrib4fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
@@ -7231,7 +7101,7 @@
<param name="w" type="GLfloat"/>
</function>
- <function name="VertexAttrib4fvARB" offset="assign" exec="dynamic">
+ <function name="VertexAttrib4fvARB" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="4196"/>
@@ -7332,7 +7202,7 @@
<param name="index" type="GLuint"/>
</function>
- <function name="ProgramStringARB" offset="assign" deprecated="3.1">
+ <function name="ProgramStringARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="len" type="GLsizei" counter="true"/>
@@ -7340,31 +7210,31 @@
<glx rop="4217" large="true"/>
</function>
- <function name="BindProgramARB" offset="assign">
+ <function name="BindProgramARB">
<param name="target" type="GLenum"/>
<param name="program" type="GLuint"/>
<glx rop="4180"/>
</function>
- <function name="DeleteProgramsARB" offset="assign">
+ <function name="DeleteProgramsARB">
<param name="n" type="GLsizei" counter="true"/>
<param name="programs" type="const GLuint *" count="n"/>
<glx vendorpriv="1294"/>
</function>
- <function name="GenProgramsARB" offset="assign">
+ <function name="GenProgramsARB">
<param name="n" type="GLsizei" counter="true"/>
<param name="programs" type="GLuint *" output="true" count="n"/>
<glx vendorpriv="1295" always_array="true"/>
</function>
- <function name="IsProgramARB" offset="assign">
+ <function name="IsProgramARB">
<param name="program" type="GLuint"/>
<return type="GLboolean"/>
<glx vendorpriv="1304"/>
</function>
- <function name="ProgramEnvParameter4dARB" offset="assign"
+ <function name="ProgramEnvParameter4dARB"
vectorequiv="ProgramEnvParameter4dvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7374,7 +7244,7 @@
<param name="w" type="GLdouble"/>
</function>
- <function name="ProgramEnvParameter4dvARB" offset="assign"
+ <function name="ProgramEnvParameter4dvARB"
deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7382,7 +7252,7 @@
<glx rop="4185" doubles_in_order="true"/>
</function>
- <function name="ProgramEnvParameter4fARB" offset="assign"
+ <function name="ProgramEnvParameter4fARB"
vectorequiv="ProgramEnvParameter4fvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7392,7 +7262,7 @@
<param name="w" type="GLfloat"/>
</function>
- <function name="ProgramEnvParameter4fvARB" offset="assign"
+ <function name="ProgramEnvParameter4fvARB"
deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7400,7 +7270,7 @@
<glx rop="4184"/>
</function>
- <function name="ProgramLocalParameter4dARB" offset="assign"
+ <function name="ProgramLocalParameter4dARB"
vectorequiv="ProgramLocalParameter4dvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7410,7 +7280,7 @@
<param name="w" type="GLdouble"/>
</function>
- <function name="ProgramLocalParameter4dvARB" offset="assign"
+ <function name="ProgramLocalParameter4dvARB"
deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7418,7 +7288,7 @@
<glx rop="4216" doubles_in_order="true"/>
</function>
- <function name="ProgramLocalParameter4fARB" offset="assign"
+ <function name="ProgramLocalParameter4fARB"
vectorequiv="ProgramLocalParameter4fvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
@@ -7428,8 +7298,7 @@
<param name="w" type="GLfloat"/>
</function>
- <function name="ProgramLocalParameter4fvARB" offset="assign"
- deprecated="3.1">
+ <function name="ProgramLocalParameter4fvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="params" type="const GLfloat *" count="4"/>
@@ -7448,32 +7317,28 @@
the ARB_vertex_program protocol to unused padding.
-->
- <function name="GetProgramEnvParameterdvARB" offset="assign"
- deprecated="3.1">
+ <function name="GetProgramEnvParameterdvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="params" type="GLdouble *" output="true" count="4"/>
<glx vendorpriv="1297" handcode="client" doubles_in_order="true"/>
</function>
- <function name="GetProgramEnvParameterfvARB" offset="assign"
- deprecated="3.1">
+ <function name="GetProgramEnvParameterfvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="params" type="GLfloat *" output="true" count="4"/>
<glx vendorpriv="1296" handcode="client"/>
</function>
- <function name="GetProgramLocalParameterdvARB" offset="assign"
- deprecated="3.1">
+ <function name="GetProgramLocalParameterdvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="params" type="GLdouble *" output="true" count="4"/>
<glx vendorpriv="1306" handcode="client" doubles_in_order="true"/>
</function>
- <function name="GetProgramLocalParameterfvARB" offset="assign"
- deprecated="3.1">
+ <function name="GetProgramLocalParameterfvARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="params" type="GLfloat *" output="true" count="4"/>
@@ -7481,14 +7346,14 @@
</function>
- <function name="GetProgramivARB" offset="assign" deprecated="3.1">
+ <function name="GetProgramivARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx vendorpriv="1307"/>
</function>
- <function name="GetProgramStringARB" offset="assign" deprecated="3.1">
+ <function name="GetProgramStringARB" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="string" type="GLvoid *" output="true"/>
@@ -7774,24 +7639,24 @@
<type name="charARB" size="1" glx_name="CARD8"/>
<type name="handleARB" size="4" glx_name="CARD32"/>
- <function name="DeleteObjectARB" offset="assign">
+ <function name="DeleteObjectARB">
<param name="obj" type="GLhandleARB"/>
<glx ignore="true"/>
</function>
- <function name="GetHandleARB" offset="assign">
+ <function name="GetHandleARB">
<param name="pname" type="GLenum"/>
<return type="GLhandleARB"/>
<glx ignore="true"/>
</function>
- <function name="DetachObjectARB" offset="assign">
+ <function name="DetachObjectARB">
<param name="containerObj" type="GLhandleARB"/>
<param name="attachedObj" type="GLhandleARB"/>
<glx ignore="true"/>
</function>
- <function name="CreateShaderObjectARB" offset="assign">
+ <function name="CreateShaderObjectARB">
<param name="shaderType" type="GLenum"/>
<return type="GLhandleARB"/>
<glx ignore="true"/>
@@ -7808,12 +7673,12 @@
<param name="shader" type="GLhandleARB"/>
</function>
- <function name="CreateProgramObjectARB" offset="assign">
+ <function name="CreateProgramObjectARB">
<return type="GLhandleARB"/>
<glx ignore="true"/>
</function>
- <function name="AttachObjectARB" offset="assign">
+ <function name="AttachObjectARB">
<param name="containerObj" type="GLhandleARB"/>
<param name="obj" type="GLhandleARB"/>
<glx ignore="true"/>
@@ -7952,21 +7817,21 @@
<param name="value" type="const GLfloat *"/>
</function>
- <function name="GetObjectParameterfvARB" offset="assign">
+ <function name="GetObjectParameterfvARB">
<param name="obj" type="GLhandleARB"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true"/>
<glx ignore="true"/>
</function>
- <function name="GetObjectParameterivARB" offset="assign">
+ <function name="GetObjectParameterivARB">
<param name="obj" type="GLhandleARB"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true"/>
<glx ignore="true"/>
</function>
- <function name="GetInfoLogARB" offset="assign">
+ <function name="GetInfoLogARB">
<param name="obj" type="GLhandleARB"/>
<param name="maxLength" type="GLsizei"/>
<param name="length" type="GLsizei *" output="true"/>
@@ -7974,7 +7839,7 @@
<glx ignore="true"/>
</function>
- <function name="GetAttachedObjectsARB" offset="assign">
+ <function name="GetAttachedObjectsARB">
<param name="containerObj" type="GLhandleARB"/>
<param name="maxLength" type="GLsizei"/>
<param name="length" type="GLsizei *" output="true"/>
@@ -8189,17 +8054,17 @@
<enum name="TIMESTAMP" value="0x8E28"/>
<type name="int64" size="8"/>
<type name="uint64" unsigned="true" size="8"/>
- <function name="GetQueryObjecti64v" static_dispatch="false" offset="assign">
+ <function name="GetQueryObjecti64v">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint64 *"/>
</function>
- <function name="GetQueryObjectui64v" static_dispatch="false" offset="assign">
+ <function name="GetQueryObjectui64v">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLuint64 *"/>
</function>
- <function name="QueryCounter" offset="assign" static_dispatch="false">
+ <function name="QueryCounter">
<param name="id" type="GLuint"/>
<param name="target" type="GLenum"/>
</function>
@@ -8219,25 +8084,24 @@
<enum name="MAX_TRANSFORM_FEEDBACK_BUFFERS" value="0x8E70"/>
<enum name="MAX_VERTEX_STREAMS" value="0x8E71"/>
- <function name="DrawTransformFeedbackStream" offset="assign"
- exec="dynamic">
+ <function name="DrawTransformFeedbackStream" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="stream" type="GLuint"/>
</function>
- <function name="BeginQueryIndexed" offset="assign">
+ <function name="BeginQueryIndexed">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="id" type="GLuint"/>
</function>
- <function name="EndQueryIndexed" offset="assign">
+ <function name="EndQueryIndexed">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
</function>
- <function name="GetQueryIndexediv" offset="assign">
+ <function name="GetQueryIndexediv">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
@@ -8268,15 +8132,13 @@
<xi:include href="ARB_base_instance.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<category name="GL_ARB_transform_feedback_instanced" number="109">
- <function name="DrawTransformFeedbackInstanced" offset="assign"
- exec="dynamic">
+ <function name="DrawTransformFeedbackInstanced" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="primcount" type="GLsizei"/>
</function>
- <function name="DrawTransformFeedbackStreamInstanced" offset="assign"
- exec="dynamic">
+ <function name="DrawTransformFeedbackStreamInstanced" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="stream" type="GLuint"/>
@@ -8360,7 +8222,7 @@
<enum name="BUFFER_STORAGE_FLAGS" value="0x8220" />
<enum name="CLIENT_MAPPED_BUFFER_BARRIER_BIT" value="0x4000" />
- <function name="BufferStorage" offset="assign">
+ <function name="BufferStorage">
<param name="target" type="GLenum"/>
<param name="size" type="GLsizeiptr"/>
<param name="data" type="const GLvoid *"/>
@@ -8420,7 +8282,7 @@
<category name="GL_EXT_polygon_offset" number="3">
<enum name="POLYGON_OFFSET_BIAS_EXT" value="0x8039"/>
- <function name="PolygonOffsetEXT" offset="assign" deprecated="3.1">
+ <function name="PolygonOffsetEXT" deprecated="3.1">
<param name="factor" type="GLfloat"/>
<param name="bias" type="GLfloat"/>
<glx rop="4098" ignore="true"/>
@@ -8669,7 +8531,7 @@
</enum>
<enum name="TABLE_TOO_LARGE_EXT" value="0x8031"/>
- <function name="GetHistogramEXT" alias="GetHistogram" static_dispatch="false">
+ <function name="GetHistogramEXT" alias="GetHistogram">
<param name="target" type="GLenum"/>
<param name="reset" type="GLboolean"/>
<param name="format" type="GLenum"/>
@@ -8678,21 +8540,21 @@
<glx vendorpriv="5" dimensions_in_reply="true" img_reset="reset"/>
</function>
- <function name="GetHistogramParameterfvEXT" alias="GetHistogramParameterfv" static_dispatch="false">
+ <function name="GetHistogramParameterfvEXT" alias="GetHistogramParameterfv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx vendorpriv="6"/>
</function>
- <function name="GetHistogramParameterivEXT" alias="GetHistogramParameteriv" static_dispatch="false">
+ <function name="GetHistogramParameterivEXT" alias="GetHistogramParameteriv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx vendorpriv="7"/>
</function>
- <function name="GetMinmaxEXT" alias="GetMinmax" static_dispatch="false">
+ <function name="GetMinmaxEXT" alias="GetMinmax">
<param name="target" type="GLenum"/>
<param name="reset" type="GLboolean"/>
<param name="format" type="GLenum"/>
@@ -8701,38 +8563,38 @@
<glx vendorpriv="8" img_reset="reset"/>
</function>
- <function name="GetMinmaxParameterfvEXT" alias="GetMinmaxParameterfv" static_dispatch="false">
+ <function name="GetMinmaxParameterfvEXT" alias="GetMinmaxParameterfv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx vendorpriv="9"/>
</function>
- <function name="GetMinmaxParameterivEXT" alias="GetMinmaxParameteriv" static_dispatch="false">
+ <function name="GetMinmaxParameterivEXT" alias="GetMinmaxParameteriv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx vendorpriv="10"/>
</function>
- <function name="HistogramEXT" alias="Histogram" static_dispatch="false">
+ <function name="HistogramEXT" alias="Histogram">
<param name="target" type="GLenum"/>
<param name="width" type="GLsizei"/>
<param name="internalformat" type="GLenum"/>
<param name="sink" type="GLboolean"/>
</function>
- <function name="MinmaxEXT" alias="Minmax" static_dispatch="false">
+ <function name="MinmaxEXT" alias="Minmax">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="sink" type="GLboolean"/>
</function>
- <function name="ResetHistogramEXT" alias="ResetHistogram" static_dispatch="false">
+ <function name="ResetHistogramEXT" alias="ResetHistogram">
<param name="target" type="GLenum"/>
</function>
- <function name="ResetMinmaxEXT" alias="ResetMinmax" static_dispatch="false">
+ <function name="ResetMinmaxEXT" alias="ResetMinmax">
<param name="target" type="GLenum"/>
</function>
</category>
@@ -8804,7 +8666,7 @@
<size name="Get" mode="get"/>
</enum>
- <function name="ConvolutionFilter1DEXT" alias="ConvolutionFilter1D" static_dispatch="false">
+ <function name="ConvolutionFilter1DEXT" alias="ConvolutionFilter1D">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -8813,7 +8675,7 @@
<param name="image" type="const GLvoid *"/>
</function>
- <function name="ConvolutionFilter2DEXT" alias="ConvolutionFilter2D" static_dispatch="false">
+ <function name="ConvolutionFilter2DEXT" alias="ConvolutionFilter2D">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -8823,31 +8685,31 @@
<param name="image" type="const GLvoid *"/>
</function>
- <function name="ConvolutionParameterfEXT" alias="ConvolutionParameterf" static_dispatch="false">
+ <function name="ConvolutionParameterfEXT" alias="ConvolutionParameterf">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat"/>
</function>
- <function name="ConvolutionParameterfvEXT" alias="ConvolutionParameterfv" static_dispatch="false">
+ <function name="ConvolutionParameterfvEXT" alias="ConvolutionParameterfv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *"/>
</function>
- <function name="ConvolutionParameteriEXT" alias="ConvolutionParameteri" static_dispatch="false">
+ <function name="ConvolutionParameteriEXT" alias="ConvolutionParameteri">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint"/>
</function>
- <function name="ConvolutionParameterivEXT" alias="ConvolutionParameteriv" static_dispatch="false">
+ <function name="ConvolutionParameterivEXT" alias="ConvolutionParameteriv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
</function>
- <function name="CopyConvolutionFilter1DEXT" alias="CopyConvolutionFilter1D" static_dispatch="false">
+ <function name="CopyConvolutionFilter1DEXT" alias="CopyConvolutionFilter1D">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="x" type="GLint"/>
@@ -8855,7 +8717,7 @@
<param name="width" type="GLsizei"/>
</function>
- <function name="CopyConvolutionFilter2DEXT" alias="CopyConvolutionFilter2D" static_dispatch="false">
+ <function name="CopyConvolutionFilter2DEXT" alias="CopyConvolutionFilter2D">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="x" type="GLint"/>
@@ -8864,7 +8726,7 @@
<param name="height" type="GLsizei"/>
</function>
- <function name="GetConvolutionFilterEXT" alias="GetConvolutionFilter" static_dispatch="false">
+ <function name="GetConvolutionFilterEXT" alias="GetConvolutionFilter">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -8872,21 +8734,21 @@
<glx vendorpriv="1" dimensions_in_reply="true"/>
</function>
- <function name="GetConvolutionParameterfvEXT" alias="GetConvolutionParameterfv" static_dispatch="false">
+ <function name="GetConvolutionParameterfvEXT" alias="GetConvolutionParameterfv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx vendorpriv="2"/>
</function>
- <function name="GetConvolutionParameterivEXT" alias="GetConvolutionParameteriv" static_dispatch="false">
+ <function name="GetConvolutionParameterivEXT" alias="GetConvolutionParameteriv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx vendorpriv="3"/>
</function>
- <function name="GetSeparableFilterEXT" alias="GetSeparableFilter" static_dispatch="false">
+ <function name="GetSeparableFilterEXT" alias="GetSeparableFilter">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -8896,7 +8758,7 @@
<glx vendorpriv="4" handcode="true"/>
</function>
- <function name="SeparableFilter2DEXT" alias="SeparableFilter2D" static_dispatch="false">
+ <function name="SeparableFilter2DEXT" alias="SeparableFilter2D">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -8968,7 +8830,7 @@
<size name="GetColorTableParameterivSGI" mode="get"/>
</enum>
- <function name="ColorTableSGI" alias="ColorTable" static_dispatch="false">
+ <function name="ColorTableSGI" alias="ColorTable">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="width" type="GLsizei"/>
@@ -8977,19 +8839,19 @@
<param name="table" type="const GLvoid *"/>
</function>
- <function name="ColorTableParameterfvSGI" alias="ColorTableParameterfv" static_dispatch="false">
+ <function name="ColorTableParameterfvSGI" alias="ColorTableParameterfv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *"/>
</function>
- <function name="ColorTableParameterivSGI" alias="ColorTableParameteriv" static_dispatch="false">
+ <function name="ColorTableParameterivSGI" alias="ColorTableParameteriv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLint *"/>
</function>
- <function name="CopyColorTableSGI" alias="CopyColorTable" static_dispatch="false">
+ <function name="CopyColorTableSGI" alias="CopyColorTable">
<param name="target" type="GLenum"/>
<param name="internalformat" type="GLenum"/>
<param name="x" type="GLint"/>
@@ -8997,7 +8859,7 @@
<param name="width" type="GLsizei"/>
</function>
- <function name="GetColorTableSGI" alias="GetColorTable" static_dispatch="false">
+ <function name="GetColorTableSGI" alias="GetColorTable">
<param name="target" type="GLenum"/>
<param name="format" type="GLenum"/>
<param name="type" type="GLenum"/>
@@ -9005,14 +8867,14 @@
<glx vendorpriv="4098" dimensions_in_reply="true"/>
</function>
- <function name="GetColorTableParameterfvSGI" alias="GetColorTableParameterfv" static_dispatch="false">
+ <function name="GetColorTableParameterfvSGI" alias="GetColorTableParameterfv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx vendorpriv="4099"/>
</function>
- <function name="GetColorTableParameterivSGI" alias="GetColorTableParameteriv" static_dispatch="false">
+ <function name="GetColorTableParameterivSGI" alias="GetColorTableParameteriv">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
@@ -9170,15 +9032,13 @@
</category>
<category name="GL_SGIS_multisample" number="25">
- <function name="SampleMaskSGIS" offset="assign" static_dispatch="false"
- exec="skip">
+ <function name="SampleMaskSGIS" exec="skip">
<param name="value" type="GLclampf"/>
<param name="invert" type="GLboolean"/>
<glx rop="2048"/>
</function>
- <function name="SamplePatternSGIS" offset="assign" static_dispatch="false"
- exec="skip">
+ <function name="SamplePatternSGIS" exec="skip">
<param name="pattern" type="GLenum"/>
<glx rop="2049"/>
</function>
@@ -9209,7 +9069,7 @@
<param name="i" type="GLint"/>
</function>
- <function name="ColorPointerEXT" offset="assign" deprecated="3.1">
+ <function name="ColorPointerEXT" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -9224,7 +9084,7 @@
<param name="count" type="GLsizei"/>
</function>
- <function name="EdgeFlagPointerEXT" offset="assign" deprecated="3.1">
+ <function name="EdgeFlagPointerEXT" deprecated="3.1">
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
<param name="pointer" type="const GLboolean *"/>
@@ -9236,7 +9096,7 @@
<param name="params" type="GLvoid **" output="true"/>
</function>
- <function name="IndexPointerEXT" offset="assign" deprecated="3.1">
+ <function name="IndexPointerEXT" deprecated="3.1">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
@@ -9244,7 +9104,7 @@
<glx handcode="true"/>
</function>
- <function name="NormalPointerEXT" offset="assign" deprecated="3.1">
+ <function name="NormalPointerEXT" deprecated="3.1">
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
<param name="count" type="GLsizei"/>
@@ -9252,7 +9112,7 @@
<glx handcode="true"/>
</function>
- <function name="TexCoordPointerEXT" offset="assign" deprecated="3.1">
+ <function name="TexCoordPointerEXT" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -9261,7 +9121,7 @@
<glx handcode="true"/>
</function>
- <function name="VertexPointerEXT" offset="assign" deprecated="3.1">
+ <function name="VertexPointerEXT" deprecated="3.1">
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
<param name="stride" type="GLsizei"/>
@@ -9589,7 +9449,7 @@
<!-- Extension number 73 is not listed in the extension registry. -->
<category name="GL_EXT_color_subtable" number="74">
- <function name="ColorSubTableEXT" alias="ColorSubTable" static_dispatch="false">
+ <function name="ColorSubTableEXT" alias="ColorSubTable">
<param name="target" type="GLenum"/>
<param name="start" type="GLsizei"/>
<param name="count" type="GLsizei"/>
@@ -9598,7 +9458,7 @@
<param name="data" type="const GLvoid *"/>
</function>
- <function name="CopyColorSubTableEXT" alias="CopyColorSubTable" static_dispatch="false">
+ <function name="CopyColorSubTableEXT" alias="CopyColorSubTable">
<param name="target" type="GLenum"/>
<param name="start" type="GLsizei"/>
<param name="x" type="GLint"/>
@@ -9800,13 +9660,13 @@
<enum name="ARRAY_ELEMENT_LOCK_FIRST_EXT" value="0x81A8"/>
<enum name="ARRAY_ELEMENT_LOCK_COUNT_EXT" value="0x81A9"/>
- <function name="LockArraysEXT" offset="assign" deprecated="3.1">
+ <function name="LockArraysEXT" deprecated="3.1">
<param name="first" type="GLint"/>
<param name="count" type="GLsizei"/>
<glx handcode="true" ignore="true"/>
</function>
- <function name="UnlockArraysEXT" offset="assign" deprecated="3.1">
+ <function name="UnlockArraysEXT" deprecated="3.1">
<glx handcode="true" ignore="true"/>
</function>
</category>
@@ -10148,13 +10008,13 @@
<param name="v" type="const GLdouble *"/>
</function>
- <function name="SecondaryColor3fEXT" offset="assign" vectorequiv="SecondaryColor3fvEXT">
+ <function name="SecondaryColor3fEXT" vectorequiv="SecondaryColor3fvEXT">
<param name="red" type="GLfloat"/>
<param name="green" type="GLfloat"/>
<param name="blue" type="GLfloat"/>
</function>
- <function name="SecondaryColor3fvEXT" offset="assign">
+ <function name="SecondaryColor3fvEXT">
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="4129"/>
</function>
@@ -10236,8 +10096,7 @@
<param name="primcount" type="GLsizei"/>
</function>
- <function name="MultiDrawElementsEXT" offset="assign" es1="1.0" es2="2.0"
- exec="dynamic">
+ <function name="MultiDrawElementsEXT" es1="1.0" es2="2.0" exec="dynamic">
<param name="mode" type="GLenum"/>
<param name="count" type="const GLsizei *"/>
<param name="type" type="GLenum"/>
@@ -10248,12 +10107,11 @@
</category>
<category name="GL_EXT_fog_coord" number="149">
- <function name="FogCoordfEXT" offset="assign" vectorequiv="FogCoordfvEXT"
- exec="dynamic">
+ <function name="FogCoordfEXT" vectorequiv="FogCoordfvEXT" exec="dynamic">
<param name="coord" type="GLfloat"/>
</function>
- <function name="FogCoordfvEXT" offset="assign" exec="dynamic">
+ <function name="FogCoordfvEXT" exec="dynamic">
<param name="coord" type="const GLfloat *" count="1"/>
<glx rop="4124"/>
</function>
@@ -11105,7 +10963,7 @@
</category>
<category name="GL_MESA_resize_buffers" number="196">
- <function name="ResizeBuffersMESA" offset="assign" exec="skip">
+ <function name="ResizeBuffersMESA" exec="skip">
<glx ignore="true"/>
</function>
</category>
@@ -11187,7 +11045,7 @@
<param name="v" type="const GLshort *"/>
</function>
- <function name="WindowPos4dMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4dMESA" deprecated="3.1">
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
<param name="z" type="GLdouble"/>
@@ -11195,12 +11053,12 @@
<glx ignore="true"/>
</function>
- <function name="WindowPos4dvMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4dvMESA" deprecated="3.1">
<param name="v" type="const GLdouble *"/>
<glx ignore="true"/>
</function>
- <function name="WindowPos4fMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4fMESA" deprecated="3.1">
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
@@ -11208,12 +11066,12 @@
<glx ignore="true"/>
</function>
- <function name="WindowPos4fvMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4fvMESA" deprecated="3.1">
<param name="v" type="const GLfloat *"/>
<glx ignore="true"/>
</function>
- <function name="WindowPos4iMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4iMESA" deprecated="3.1">
<param name="x" type="GLint"/>
<param name="y" type="GLint"/>
<param name="z" type="GLint"/>
@@ -11221,12 +11079,12 @@
<glx ignore="true"/>
</function>
- <function name="WindowPos4ivMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4ivMESA" deprecated="3.1">
<param name="v" type="const GLint *"/>
<glx ignore="true"/>
</function>
- <function name="WindowPos4sMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4sMESA" deprecated="3.1">
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
<param name="z" type="GLshort"/>
@@ -11234,7 +11092,7 @@
<glx ignore="true"/>
</function>
- <function name="WindowPos4svMESA" offset="assign" deprecated="3.1">
+ <function name="WindowPos4svMESA" deprecated="3.1">
<param name="v" type="const GLshort *"/>
<glx ignore="true"/>
</function>
@@ -11248,7 +11106,7 @@
</category>
<category name="GL_IBM_multimode_draw_arrays" number="200">
- <function name="MultiModeDrawArraysIBM" offset="assign" static_dispatch="false">
+ <function name="MultiModeDrawArraysIBM">
<param name="mode" type="const GLenum *"/>
<param name="first" type="const GLint *"/>
<param name="count" type="const GLsizei *"/>
@@ -11257,7 +11115,7 @@
<glx handcode="true" ignore="true"/>
</function>
- <function name="MultiModeDrawElementsIBM" offset="assign" static_dispatch="false">
+ <function name="MultiModeDrawElementsIBM">
<param name="mode" type="const GLenum *"/>
<param name="count" type="const GLsizei *"/>
<param name="type" type="GLenum"/>
@@ -11354,12 +11212,12 @@
</category>
<category name="GL_EXT_multisample" number="209">
- <function name="SampleMaskEXT" alias="SampleMaskSGIS" static_dispatch="false">
+ <function name="SampleMaskEXT" alias="SampleMaskSGIS">
<param name="value" type="GLclampf"/>
<param name="invert" type="GLboolean"/>
</function>
- <function name="SamplePatternEXT" alias="SamplePatternSGIS" static_dispatch="false">
+ <function name="SamplePatternEXT" alias="SamplePatternSGIS">
<param name="pattern" type="GLenum"/>
</function>
</category>
@@ -11656,8 +11514,7 @@
<enum name="MAP2_VERTEX_ATTRIB14_4_NV" value="0x867E"/>
<enum name="MAP2_VERTEX_ATTRIB15_4_NV" value="0x867F"/>
- <function name="AreProgramsResidentNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="AreProgramsResidentNV" deprecated="3.1" exec="skip">
<param name="n" type="GLsizei" counter="true"/>
<param name="ids" type="const GLuint *" count="n"/>
<param name="residences" type="GLboolean *" output="true" count="n"/>
@@ -11675,8 +11532,7 @@
<param name="programs" type="const GLuint *"/>
</function>
- <function name="ExecuteProgramNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="ExecuteProgramNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="params" type="const GLfloat *" count="4"/>
@@ -11694,8 +11550,7 @@
of these functions.
-->
- <function name="GetProgramParameterdvNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetProgramParameterdvNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
@@ -11703,8 +11558,7 @@
<glx vendorpriv="1297"/>
</function>
- <function name="GetProgramParameterfvNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetProgramParameterfvNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
@@ -11712,24 +11566,21 @@
<glx vendorpriv="1296"/>
</function>
- <function name="GetProgramivNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetProgramivNV" deprecated="3.1" exec="skip">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
<glx vendorpriv="1298"/>
</function>
- <function name="GetProgramStringNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetProgramStringNV" deprecated="3.1" exec="skip">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="program" type="GLubyte *" output="true"/>
<glx vendorpriv="1299" handcode="server" always_array="true"/>
</function>
- <function name="GetTrackMatrixivNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetTrackMatrixivNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="address" type="GLuint"/>
<param name="pname" type="GLenum"/>
@@ -11737,24 +11588,21 @@
<glx vendorpriv="1300"/>
</function>
- <function name="GetVertexAttribdvNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetVertexAttribdvNV" deprecated="3.1" exec="skip">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLdouble *" output="true" variable_param="pname"/>
<glx vendorpriv="1301"/>
</function>
- <function name="GetVertexAttribfvNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetVertexAttribfvNV" deprecated="3.1" exec="skip">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfloat *" output="true" variable_param="pname"/>
<glx vendorpriv="1302"/>
</function>
- <function name="GetVertexAttribivNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="GetVertexAttribivNV" deprecated="3.1" exec="skip">
<param name="index" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint *" output="true" variable_param="pname"/>
@@ -11772,8 +11620,7 @@
<return type="GLboolean"/>
</function>
- <function name="LoadProgramNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="LoadProgramNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="id" type="GLuint"/>
<param name="len" type="GLsizei" counter="true"/>
@@ -11811,8 +11658,7 @@
<param name="params" type="const GLfloat *"/>
</function>
- <function name="ProgramParameters4dvNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="ProgramParameters4dvNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="num" type="GLsizei" counter="true"/>
@@ -11820,8 +11666,7 @@
<glx rop="4187"/>
</function>
- <function name="ProgramParameters4fvNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="ProgramParameters4fvNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="num" type="GLsizei" counter="true"/>
@@ -11829,15 +11674,13 @@
<glx rop="4186"/>
</function>
- <function name="RequestResidentProgramsNV" offset="assign"
- deprecated="3.1" exec="skip">
+ <function name="RequestResidentProgramsNV" deprecated="3.1" exec="skip">
<param name="n" type="GLsizei" counter="true"/>
<param name="ids" type="const GLuint *" count="n"/>
<glx rop="4182"/>
</function>
- <function name="TrackMatrixNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="TrackMatrixNV" deprecated="3.1" exec="skip">
<param name="target" type="GLenum"/>
<param name="address" type="GLuint"/>
<param name="matrix" type="GLenum"/>
@@ -11845,8 +11688,7 @@
<glx rop="4188"/>
</function>
- <function name="VertexAttribPointerNV" offset="assign" deprecated="3.1"
- exec="skip">
+ <function name="VertexAttribPointerNV" deprecated="3.1" exec="skip">
<param name="index" type="GLuint"/>
<param name="size" type="GLint"/>
<param name="type" type="GLenum"/>
@@ -11855,32 +11697,32 @@
<glx handcode="true"/>
</function>
- <function name="VertexAttrib1sNV" offset="assign"
+ <function name="VertexAttrib1sNV"
vectorequiv="VertexAttrib1svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
</function>
- <function name="VertexAttrib1svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib1svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="1"/>
<glx rop="4265"/>
</function>
- <function name="VertexAttrib2sNV" offset="assign"
+ <function name="VertexAttrib2sNV"
vectorequiv="VertexAttrib2svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
<param name="y" type="GLshort"/>
</function>
- <function name="VertexAttrib2svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib2svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="2"/>
<glx rop="4266"/>
</function>
- <function name="VertexAttrib3sNV" offset="assign"
+ <function name="VertexAttrib3sNV"
vectorequiv="VertexAttrib3svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
@@ -11888,13 +11730,13 @@
<param name="z" type="GLshort"/>
</function>
- <function name="VertexAttrib3svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib3svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="3"/>
<glx rop="4267"/>
</function>
- <function name="VertexAttrib4sNV" offset="assign"
+ <function name="VertexAttrib4sNV"
vectorequiv="VertexAttrib4svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLshort"/>
@@ -11903,60 +11745,53 @@
<param name="w" type="GLshort"/>
</function>
- <function name="VertexAttrib4svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib4svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLshort *" count="4"/>
<glx rop="4268"/>
</function>
- <function name="VertexAttrib1fNV" offset="assign"
- vectorequiv="VertexAttrib1fvNV" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib1fNV"
+ vectorequiv="VertexAttrib1fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
</function>
- <function name="VertexAttrib1fvNV" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib1fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="1"/>
<glx rop="4269"/>
</function>
- <function name="VertexAttrib2fNV" offset="assign"
- vectorequiv="VertexAttrib2fvNV" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib2fNV"
+ vectorequiv="VertexAttrib2fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
</function>
- <function name="VertexAttrib2fvNV" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib2fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="2"/>
<glx rop="4270"/>
</function>
- <function name="VertexAttrib3fNV" offset="assign"
- vectorequiv="VertexAttrib3fvNV" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib3fNV"
+ vectorequiv="VertexAttrib3fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
<param name="z" type="GLfloat"/>
</function>
- <function name="VertexAttrib3fvNV" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib3fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="3"/>
<glx rop="4271"/>
</function>
- <function name="VertexAttrib4fNV" offset="assign"
- vectorequiv="VertexAttrib4fvNV" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib4fNV"
+ vectorequiv="VertexAttrib4fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="x" type="GLfloat"/>
<param name="y" type="GLfloat"/>
@@ -11964,39 +11799,38 @@
<param name="w" type="GLfloat"/>
</function>
- <function name="VertexAttrib4fvNV" offset="assign" deprecated="3.1"
- exec="dynamic">
+ <function name="VertexAttrib4fvNV" deprecated="3.1" exec="dynamic">
<param name="index" type="GLuint"/>
<param name="v" type="const GLfloat *" count="4"/>
<glx rop="4272"/>
</function>
- <function name="VertexAttrib1dNV" offset="assign"
+ <function name="VertexAttrib1dNV"
vectorequiv="VertexAttrib1dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
</function>
- <function name="VertexAttrib1dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib1dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="1"/>
<glx rop="4273" doubles_in_order="true"/>
</function>
- <function name="VertexAttrib2dNV" offset="assign"
+ <function name="VertexAttrib2dNV"
vectorequiv="VertexAttrib2dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
<param name="y" type="GLdouble"/>
</function>
- <function name="VertexAttrib2dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib2dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="2"/>
<glx rop="4274" doubles_in_order="true"/>
</function>
- <function name="VertexAttrib3dNV" offset="assign"
+ <function name="VertexAttrib3dNV"
vectorequiv="VertexAttrib3dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
@@ -12004,13 +11838,13 @@
<param name="z" type="GLdouble"/>
</function>
- <function name="VertexAttrib3dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib3dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="3"/>
<glx rop="4275" doubles_in_order="true"/>
</function>
- <function name="VertexAttrib4dNV" offset="assign"
+ <function name="VertexAttrib4dNV"
vectorequiv="VertexAttrib4dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLdouble"/>
@@ -12019,13 +11853,13 @@
<param name="w" type="GLdouble"/>
</function>
- <function name="VertexAttrib4dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib4dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLdouble *" count="4"/>
<glx rop="4276" doubles_in_order="true"/>
</function>
- <function name="VertexAttrib4ubNV" offset="assign"
+ <function name="VertexAttrib4ubNV"
vectorequiv="VertexAttrib4ubvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="x" type="GLubyte"/>
@@ -12034,97 +11868,97 @@
<param name="w" type="GLubyte"/>
</function>
- <function name="VertexAttrib4ubvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttrib4ubvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="v" type="const GLubyte *" count="4"/>
<glx rop="4277"/>
</function>
- <function name="VertexAttribs1svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs1svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLshort *" count="n"/>
<glx rop="4202"/>
</function>
- <function name="VertexAttribs2svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs2svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLshort *" count="n" count_scale="2"/>
<glx rop="4203"/>
</function>
- <function name="VertexAttribs3svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs3svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLshort *" count="n" count_scale="3"/>
<glx rop="4204"/>
</function>
- <function name="VertexAttribs4svNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs4svNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLshort *" count="n" count_scale="4"/>
<glx rop="4205"/>
</function>
- <function name="VertexAttribs1fvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs1fvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLfloat *" count="n"/>
<glx rop="4206"/>
</function>
- <function name="VertexAttribs2fvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs2fvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLfloat *" count="n" count_scale="2"/>
<glx rop="4207"/>
</function>
- <function name="VertexAttribs3fvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs3fvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLfloat *" count="n" count_scale="3"/>
<glx rop="4208"/>
</function>
- <function name="VertexAttribs4fvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs4fvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLfloat *" count="n" count_scale="4"/>
<glx rop="4209"/>
</function>
- <function name="VertexAttribs1dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs1dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLdouble *" count="n"/>
<glx rop="4210" doubles_in_order="true"/>
</function>
- <function name="VertexAttribs2dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs2dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLdouble *" count="n" count_scale="2"/>
<glx rop="4211" doubles_in_order="true"/>
</function>
- <function name="VertexAttribs3dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs3dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLdouble *" count="n" count_scale="3"/>
<glx rop="4212" doubles_in_order="true"/>
</function>
- <function name="VertexAttribs4dvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs4dvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLdouble *" count="n" count_scale="4"/>
<glx rop="4213" doubles_in_order="true"/>
</function>
- <function name="VertexAttribs4ubvNV" offset="assign" deprecated="3.1">
+ <function name="VertexAttribs4ubvNV" deprecated="3.1">
<param name="index" type="GLuint"/>
<param name="n" type="GLsizei" counter="true"/>
<param name="v" type="const GLubyte *" count="n" count_scale="4"/>
@@ -12193,22 +12027,22 @@
<size name="GetTexEnviv" mode="get"/>
<size name="GetTexEnvfv" mode="get"/>
</enum>
- <function name="TexBumpParameterfvATI" offset="assign" deprecated="3.1" exec="skip">
+ <function name="TexBumpParameterfvATI" deprecated="3.1" exec="skip">
<param name="pname" type="GLenum"/>
<param name="param" type="const GLfloat *" variable_param="pname"/>
<glx ignore="true"/>
</function>
- <function name="TexBumpParameterivATI" offset="assign" deprecated="3.1" exec="skip">
+ <function name="TexBumpParameterivATI" deprecated="3.1" exec="skip">
<param name="pname" type="GLenum"/>
<param name="param" type="const GLint *" variable_param="pname"/>
<glx ignore="true"/>
</function>
- <function name="GetTexBumpParameterfvATI" offset="assign" deprecated="3.1" exec="skip">
+ <function name="GetTexBumpParameterfvATI" deprecated="3.1" exec="skip">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat *" variable_param="pname"/>
<glx ignore="true"/>
</function>
- <function name="GetTexBumpParameterivATI" offset="assign" deprecated="3.1" exec="skip">
+ <function name="GetTexBumpParameterivATI" deprecated="3.1" exec="skip">
<param name="pname" type="GLenum"/>
<param name="param" type="GLint *" variable_param="pname"/>
<glx ignore="true"/>
@@ -12327,45 +12161,45 @@
redudndant garbage. There are a lot of enums with the value 0x00000001.
-->
- <function name="GenFragmentShadersATI" offset="assign" deprecated="3.1">
+ <function name="GenFragmentShadersATI" deprecated="3.1">
<return type="GLuint"/>
<param name="range" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="BindFragmentShaderATI" offset="assign" deprecated="3.1">
+ <function name="BindFragmentShaderATI" deprecated="3.1">
<param name="id" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="DeleteFragmentShaderATI" offset="assign" deprecated="3.1">
+ <function name="DeleteFragmentShaderATI" deprecated="3.1">
<param name="id" type="GLuint"/>
<glx ignore="true"/>
</function>
- <function name="BeginFragmentShaderATI" offset="assign" deprecated="3.1">
+ <function name="BeginFragmentShaderATI" deprecated="3.1">
<glx ignore="true"/>
</function>
- <function name="EndFragmentShaderATI" offset="assign" deprecated="3.1">
+ <function name="EndFragmentShaderATI" deprecated="3.1">
<glx ignore="true"/>
</function>
- <function name="PassTexCoordATI" offset="assign" deprecated="3.1">
+ <function name="PassTexCoordATI" deprecated="3.1">
<param name="dst" type="GLuint"/>
<param name="coord" type="GLuint"/>
<param name="swizzle" type="GLenum"/>
<glx ignore="true"/>
</function>
- <function name="SampleMapATI" offset="assign" deprecated="3.1">
+ <function name="SampleMapATI" deprecated="3.1">
<param name="dst" type="GLuint"/>
<param name="interp" type="GLuint"/>
<param name="swizzle" type="GLenum"/>
<glx ignore="true"/>
</function>
- <function name="ColorFragmentOp1ATI" offset="assign" deprecated="3.1">
+ <function name="ColorFragmentOp1ATI" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="dst" type="GLuint"/>
<param name="dstMask" type="GLuint"/>
@@ -12376,7 +12210,7 @@
<glx ignore="true"/>
</function>
- <function name="ColorFragmentOp2ATI" offset="assign" deprecated="3.1">
+ <function name="ColorFragmentOp2ATI" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="dst" type="GLuint"/>
<param name="dstMask" type="GLuint"/>
@@ -12390,7 +12224,7 @@
<glx ignore="true"/>
</function>
- <function name="ColorFragmentOp3ATI" offset="assign" deprecated="3.1">
+ <function name="ColorFragmentOp3ATI" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="dst" type="GLuint"/>
<param name="dstMask" type="GLuint"/>
@@ -12407,7 +12241,7 @@
<glx ignore="true"/>
</function>
- <function name="AlphaFragmentOp1ATI" offset="assign" deprecated="3.1">
+ <function name="AlphaFragmentOp1ATI" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="dst" type="GLuint"/>
<param name="dstMod" type="GLuint"/>
@@ -12417,7 +12251,7 @@
<glx ignore="true"/>
</function>
- <function name="AlphaFragmentOp2ATI" offset="assign" deprecated="3.1">
+ <function name="AlphaFragmentOp2ATI" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="dst" type="GLuint"/>
<param name="dstMod" type="GLuint"/>
@@ -12430,7 +12264,7 @@
<glx ignore="true"/>
</function>
- <function name="AlphaFragmentOp3ATI" offset="assign" deprecated="3.1">
+ <function name="AlphaFragmentOp3ATI" deprecated="3.1">
<param name="op" type="GLenum"/>
<param name="dst" type="GLuint"/>
<param name="dstMod" type="GLuint"/>
@@ -12446,8 +12280,7 @@
<glx ignore="true"/>
</function>
- <function name="SetFragmentShaderConstantATI" offset="assign"
- deprecated="3.1">
+ <function name="SetFragmentShaderConstantATI" deprecated="3.1">
<param name="dst" type="GLuint"/>
<param name="value" type="const GLfloat *"/>
<glx ignore="true"/>
@@ -12547,8 +12380,7 @@
<size name="Get" mode="get"/>
</enum>
- <function name="ActiveStencilFaceEXT" offset="assign"
- static_dispatch="false" deprecated="3.1">
+ <function name="ActiveStencilFaceEXT" deprecated="3.1">
<param name="face" type="GLenum"/>
<glx rop="4220"/>
</function>
@@ -12588,7 +12420,7 @@
<enum name="MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV" value="0x8868"/>
<enum name="PROGRAM_ERROR_STRING_NV" value="0x8874"/>
- <function name="ProgramNamedParameter4fNV" offset="assign"
+ <function name="ProgramNamedParameter4fNV"
vectorequiv="ProgramNamedParameter4fvNV" deprecated="3.1"
exec="skip">
<param name="id" type="GLuint"/>
@@ -12600,7 +12432,7 @@
<param name="w" type="GLfloat"/>
</function>
- <function name="ProgramNamedParameter4dNV" offset="assign"
+ <function name="ProgramNamedParameter4dNV"
vectorequiv="ProgramNamedParameter4dvNV" deprecated="3.1"
exec="skip">
<param name="id" type="GLuint"/>
@@ -12612,8 +12444,7 @@
<param name="w" type="GLdouble"/>
</function>
- <function name="ProgramNamedParameter4fvNV" offset="assign"
- deprecated="3.1" exec="skip">
+ <function name="ProgramNamedParameter4fvNV" deprecated="3.1" exec="skip">
<param name="id" type="GLuint"/>
<param name="len" type="GLsizei" counter="true"/>
<param name="name" type="const GLubyte *" count="len"/>
@@ -12621,8 +12452,7 @@
<glx rop="4218"/>
</function>
- <function name="ProgramNamedParameter4dvNV" offset="assign"
- deprecated="3.1" exec="skip">
+ <function name="ProgramNamedParameter4dvNV" deprecated="3.1" exec="skip">
<param name="id" type="GLuint"/>
<param name="len" type="GLsizei" counter="true"/>
<param name="name" type="const GLubyte *" count="len"/>
@@ -12630,8 +12460,7 @@
<glx rop="4219"/>
</function>
- <function name="GetProgramNamedParameterfvNV" offset="assign"
- deprecated="3.1" exec="skip">
+ <function name="GetProgramNamedParameterfvNV" deprecated="3.1" exec="skip">
<param name="id" type="GLuint"/>
<param name="len" type="GLsizei" counter="true"/>
<param name="name" type="const GLubyte *" count="len"/>
@@ -12639,8 +12468,7 @@
<glx vendorpriv="1310" always_array="true"/>
</function>
- <function name="GetProgramNamedParameterdvNV" offset="assign"
- deprecated="3.1" exec="skip">
+ <function name="GetProgramNamedParameterdvNV" deprecated="3.1" exec="skip">
<param name="id" type="GLuint"/>
<param name="len" type="GLsizei" counter="true"/>
<param name="name" type="const GLubyte *" count="len"/>
@@ -12684,7 +12512,7 @@
<size name="Get" mode="get"/>
</enum>
- <function name="DepthBoundsEXT" offset="assign" static_dispatch="false">
+ <function name="DepthBoundsEXT">
<param name="zmin" type="GLclampd"/>
<param name="zmax" type="GLclampd"/>
<glx rop="4229" ignore="true"/>
@@ -12705,7 +12533,7 @@
<size name="Get" mode="get"/>
</enum>
- <function name="BlendEquationSeparateEXT" static_dispatch="false" alias="BlendEquationSeparate">
+ <function name="BlendEquationSeparateEXT" alias="BlendEquationSeparate">
<param name="modeRGB" type="GLenum"/>
<param name="modeA" type="GLenum"/>
</function>
@@ -12789,14 +12617,12 @@
<enum name="BUFFER_FLUSHING_UNMAP_APPLE" count="1" value="0x8A13">
<size name="GetBufferParameteriv" mode="get"/>
</enum>
- <function name="BufferParameteriAPPLE" offset="assign"
- static_dispatch="false" exec="skip">
+ <function name="BufferParameteriAPPLE" exec="skip">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLint"/>
</function>
- <function name="FlushMappedBufferRangeAPPLE" offset="assign"
- static_dispatch="false" exec="skip">
+ <function name="FlushMappedBufferRangeAPPLE" exec="skip">
<param name="target" type="GLenum"/>
<param name="offset" type="GLintptr"/>
<param name="size" type="GLsizeiptr"/>
@@ -12875,7 +12701,7 @@
<enum name="POLYGON_OFFSET_CLAMP_EXT" value="0x8E1B">
<size name="Get" mode="get"/>
</enum>
- <function name="PolygonOffsetClampEXT" offset="assign">
+ <function name="PolygonOffsetClampEXT">
<param name="factor" type="GLfloat"/>
<param name="units" type="GLfloat"/>
<param name="clamp" type="GLfloat"/>
@@ -12885,7 +12711,7 @@
<!-- Unnumbered extensions sorted by name. -->
<category name="GL_ATI_blend_equation_separate">
- <function name="BlendEquationSeparateATI" alias="BlendEquationSeparate" static_dispatch="false">
+ <function name="BlendEquationSeparateATI" alias="BlendEquationSeparate">
<param name="modeRGB" type="GLenum"/>
<param name="modeA" type="GLenum"/>
</function>
@@ -12905,14 +12731,13 @@
<size name="Get" mode="get"/>
</enum>
- <function name="StencilOpSeparateATI" alias="StencilOpSeparate" static_dispatch="false">
+ <function name="StencilOpSeparateATI" alias="StencilOpSeparate">
<param name="face" type="GLenum"/>
<param name="sfail" type="GLenum"/>
<param name="zfail" type="GLenum"/>
<param name="zpass" type="GLenum"/>
</function>
- <function name="StencilFuncSeparateATI" offset="assign"
- static_dispatch="false" deprecated="3.1">
+ <function name="StencilFuncSeparateATI" deprecated="3.1">
<param name="frontfunc" type="GLenum"/>
<param name="backfunc" type="GLenum"/>
<param name="ref" type="GLint"/>
@@ -12922,16 +12747,14 @@
</category>
<category name="GL_EXT_gpu_program_parameters">
- <function name="ProgramEnvParameters4fvEXT" offset="assign"
- static_dispatch="false" deprecated="3.1">
+ <function name="ProgramEnvParameters4fvEXT" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="count" type="GLsizei"/>
<param name="params" type="const GLfloat *"/>
</function>
- <function name="ProgramLocalParameters4fvEXT" offset="assign"
- static_dispatch="false" deprecated="3.1">
+ <function name="ProgramLocalParameters4fvEXT" deprecated="3.1">
<param name="target" type="GLenum"/>
<param name="index" type="GLuint"/>
<param name="count" type="GLsizei"/>
@@ -12943,12 +12766,12 @@
<enum name="TIME_ELAPSED_EXT" value="0x88BF"/>
<type name="int64EXT" size="8"/>
<type name="uint64EXT" unsigned="true" size="8"/>
- <function name="GetQueryObjecti64vEXT" static_dispatch="false" alias="GetQueryObjecti64v">
+ <function name="GetQueryObjecti64vEXT" alias="GetQueryObjecti64v">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLint64EXT *"/>
</function>
- <function name="GetQueryObjectui64vEXT" static_dispatch="false" alias="GetQueryObjectui64v">
+ <function name="GetQueryObjectui64vEXT" alias="GetQueryObjectui64v">
<param name="id" type="GLuint"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLuint64EXT *"/>
@@ -12956,7 +12779,7 @@
</category>
<category name="GL_INGR_blend_func_separate">
- <function name="BlendFuncSeparateINGR" alias="BlendFuncSeparate" static_dispatch="false">
+ <function name="BlendFuncSeparateINGR" alias="BlendFuncSeparate">
<param name="sfactorRGB" type="GLenum"/>
<param name="dfactorRGB" type="GLenum"/>
<param name="sfactorAlpha" type="GLenum"/>
@@ -12984,12 +12807,12 @@
<size name="PointParameterfv" mode="get"/>
</enum>
- <function name="PointParameterfSGIS" alias="PointParameterf" static_dispatch="false">
+ <function name="PointParameterfSGIS" alias="PointParameterf">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfloat"/>
</function>
- <function name="PointParameterfvSGIS" alias="PointParameterfv" static_dispatch="false">
+ <function name="PointParameterfvSGIS" alias="PointParameterfv">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfloat *"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/gl_SPARC_asm.py b/mesalib/src/mapi/glapi/gen/gl_SPARC_asm.py
index 23e23295b..fa6217e1b 100644
--- a/mesalib/src/mapi/glapi/gen/gl_SPARC_asm.py
+++ b/mesalib/src/mapi/glapi/gen/gl_SPARC_asm.py
@@ -25,9 +25,10 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import license
import gl_XML, glX_XML
-import sys, getopt
class PrintGenericStubs(gl_XML.gl_print_base):
def __init__(self):
@@ -244,30 +245,24 @@ class PrintGenericStubs(gl_XML.gl_print_base):
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
- sys.exit(1)
+def _parser():
+ """Parse arguments and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_API.xml',
+ help='An XML description of an API.')
+ return parser.parse_args()
-if __name__ == '__main__':
- file_name = "gl_API.xml"
- mode = "generic"
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
- except Exception,e:
- show_usage()
+def main():
+ """Main function."""
+ args = _parser()
+ printer = PrintGenericStubs()
- for (arg,val) in args:
- if arg == '-m':
- mode = val
- elif arg == "-f":
- file_name = val
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
+ printer.Print(api)
- if mode == "generic":
- printer = PrintGenericStubs()
- else:
- print "ERROR: Invalid mode \"%s\" specified." % mode
- show_usage()
- api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
- printer.Print(api)
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_XML.py b/mesalib/src/mapi/glapi/gen/gl_XML.py
index c7b208907..b5e7b32d0 100644
--- a/mesalib/src/mapi/glapi/gen/gl_XML.py
+++ b/mesalib/src/mapi/glapi/gen/gl_XML.py
@@ -30,6 +30,7 @@ import xml.etree.ElementTree as ET
import re, sys, string
import os.path
import typeexpr
+import static_data
def parse_GL_API( file_name, factory = None ):
@@ -648,7 +649,7 @@ class gl_function( gl_item ):
# Decimal('1.1') }.
self.api_map = {}
- self.assign_offset = 0
+ self.assign_offset = False
self.static_entry_points = []
@@ -672,7 +673,7 @@ class gl_function( gl_item ):
name = element.get( "name" )
alias = element.get( "alias" )
- if is_attr_true(element, "static_dispatch", "true"):
+ if name in static_data.functions:
self.static_entry_points.append(name)
self.entry_points.append( name )
@@ -707,16 +708,11 @@ class gl_function( gl_item ):
# Only try to set the offset when a non-alias entry-point
# is being processed.
- offset = element.get( "offset" )
- if offset:
- try:
- o = int( offset )
- self.offset = o
- except Exception, e:
- self.offset = -1
- if offset == "assign":
- self.assign_offset = 1
-
+ if name in static_data.offsets:
+ self.offset = static_data.offsets[name]
+ else:
+ self.offset = -1
+ self.assign_offset = self.exec_flavor != "skip" or name in static_data.unused_functions
if not self.name:
self.name = true_name
diff --git a/mesalib/src/mapi/glapi/gen/gl_and_es_API.xml b/mesalib/src/mapi/glapi/gen/gl_and_es_API.xml
index d158a6b31..fc1528410 100644
--- a/mesalib/src/mapi/glapi/gen/gl_and_es_API.xml
+++ b/mesalib/src/mapi/glapi/gen/gl_and_es_API.xml
@@ -18,45 +18,45 @@
<type name="fixed" size="4" />
<type name="clampx" size="4" />
- <function name="AlphaFuncx" es1="1.0" desktop="false" offset="assign">
+ <function name="AlphaFuncx" es1="1.0" desktop="false">
<param name="func" type="GLenum"/>
<param name="ref" type="GLclampx"/>
</function>
- <function name="ClearColorx" es1="1.0" desktop="false" offset="assign">
+ <function name="ClearColorx" es1="1.0" desktop="false">
<param name="red" type="GLclampx"/>
<param name="green" type="GLclampx"/>
<param name="blue" type="GLclampx"/>
<param name="alpha" type="GLclampx"/>
</function>
- <function name="ClearDepthx" es1="1.0" desktop="false" offset="assign">
+ <function name="ClearDepthx" es1="1.0" desktop="false">
<param name="depth" type="GLclampx"/>
</function>
- <function name="Color4x" es1="1.0" desktop="false" offset="assign">
+ <function name="Color4x" es1="1.0" desktop="false">
<param name="red" type="GLfixed"/>
<param name="green" type="GLfixed"/>
<param name="blue" type="GLfixed"/>
<param name="alpha" type="GLfixed"/>
</function>
- <function name="DepthRangex" es1="1.0" desktop="false" offset="assign">
+ <function name="DepthRangex" es1="1.0" desktop="false">
<param name="zNear" type="GLclampx"/>
<param name="zFar" type="GLclampx"/>
</function>
- <function name="Fogx" es1="1.0" desktop="false" offset="assign">
+ <function name="Fogx" es1="1.0" desktop="false">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="Fogxv" es1="1.0" desktop="false" offset="assign">
+ <function name="Fogxv" es1="1.0" desktop="false">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
</function>
- <function name="Frustumx" es1="1.0" desktop="false" offset="assign">
+ <function name="Frustumx" es1="1.0" desktop="false">
<param name="left" type="GLfixed"/>
<param name="right" type="GLfixed"/>
<param name="bottom" type="GLfixed"/>
@@ -65,53 +65,53 @@
<param name="zFar" type="GLfixed"/>
</function>
- <function name="LightModelx" es1="1.0" desktop="false" offset="assign">
+ <function name="LightModelx" es1="1.0" desktop="false">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="LightModelxv" es1="1.0" desktop="false" offset="assign">
+ <function name="LightModelxv" es1="1.0" desktop="false">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
</function>
- <function name="Lightx" es1="1.0" desktop="false" offset="assign">
+ <function name="Lightx" es1="1.0" desktop="false">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="Lightxv" es1="1.0" desktop="false" offset="assign">
+ <function name="Lightxv" es1="1.0" desktop="false">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
</function>
- <function name="LineWidthx" es1="1.0" desktop="false" offset="assign">
+ <function name="LineWidthx" es1="1.0" desktop="false">
<param name="width" type="GLfixed"/>
</function>
- <function name="LoadMatrixx" es1="1.0" desktop="false" offset="assign">
+ <function name="LoadMatrixx" es1="1.0" desktop="false">
<param name="m" type="const GLfixed *" count="16"/>
</function>
- <function name="Materialx" es1="1.0" desktop="false" offset="assign">
+ <function name="Materialx" es1="1.0" desktop="false">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="Materialxv" es1="1.0" desktop="false" offset="assign">
+ <function name="Materialxv" es1="1.0" desktop="false">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
</function>
- <function name="MultMatrixx" es1="1.0" desktop="false" offset="assign">
+ <function name="MultMatrixx" es1="1.0" desktop="false">
<param name="m" type="const GLfixed *" count="16"/>
</function>
- <function name="MultiTexCoord4x" es1="1.0" desktop="false" offset="assign">
+ <function name="MultiTexCoord4x" es1="1.0" desktop="false">
<param name="target" type="GLenum"/>
<param name="s" type="GLfixed"/>
<param name="t" type="GLfixed"/>
@@ -119,13 +119,13 @@
<param name="q" type="GLfixed"/>
</function>
- <function name="Normal3x" es1="1.0" desktop="false" offset="assign">
+ <function name="Normal3x" es1="1.0" desktop="false">
<param name="nx" type="GLfixed"/>
<param name="ny" type="GLfixed"/>
<param name="nz" type="GLfixed"/>
</function>
- <function name="Orthox" es1="1.0" desktop="false" offset="assign">
+ <function name="Orthox" es1="1.0" desktop="false">
<param name="left" type="GLfixed"/>
<param name="right" type="GLfixed"/>
<param name="bottom" type="GLfixed"/>
@@ -134,59 +134,59 @@
<param name="zFar" type="GLfixed"/>
</function>
- <function name="PointSizex" es1="1.0" desktop="false" offset="assign">
+ <function name="PointSizex" es1="1.0" desktop="false">
<param name="size" type="GLfixed"/>
</function>
- <function name="PolygonOffsetx" es1="1.0" desktop="false" offset="assign">
+ <function name="PolygonOffsetx" es1="1.0" desktop="false">
<param name="factor" type="GLfixed"/>
<param name="units" type="GLfixed"/>
</function>
- <function name="Rotatex" es1="1.0" desktop="false" offset="assign">
+ <function name="Rotatex" es1="1.0" desktop="false">
<param name="angle" type="GLfixed"/>
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
</function>
- <function name="SampleCoveragex" es1="1.0" desktop="false" offset="assign">
+ <function name="SampleCoveragex" es1="1.0" desktop="false">
<param name="value" type="GLclampx"/>
<param name="invert" type="GLboolean"/>
</function>
- <function name="Scalex" es1="1.0" desktop="false" offset="assign">
+ <function name="Scalex" es1="1.0" desktop="false">
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
</function>
- <function name="TexEnvx" es1="1.0" desktop="false" offset="assign">
+ <function name="TexEnvx" es1="1.0" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="TexEnvxv" es1="1.0" desktop="false" offset="assign">
+ <function name="TexEnvxv" es1="1.0" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
</function>
- <function name="TexParameterx" es1="1.0" desktop="false" offset="assign">
+ <function name="TexParameterx" es1="1.0" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="Translatex" es1="1.0" desktop="false" offset="assign">
+ <function name="Translatex" es1="1.0" desktop="false">
<param name="x" type="GLfixed"/>
<param name="y" type="GLfixed"/>
<param name="z" type="GLfixed"/>
</function>
<!-- from GL_OES_single_precision -->
- <function name="Frustumf" es1="1.0" desktop="false" offset="assign">
+ <function name="Frustumf" es1="1.0" desktop="false">
<param name="left" type="GLfloat"/>
<param name="right" type="GLfloat"/>
<param name="bottom" type="GLfloat"/>
@@ -195,7 +195,7 @@
<param name="zFar" type="GLfloat"/>
</function>
- <function name="Orthof" es1="1.0" desktop="false" offset="assign">
+ <function name="Orthof" es1="1.0" desktop="false">
<param name="left" type="GLfloat"/>
<param name="right" type="GLfloat"/>
<param name="bottom" type="GLfloat"/>
@@ -207,68 +207,68 @@
<category name="es1.1">
<!-- from GL_OES_fixed_point -->
- <function name="ClipPlanex" es1="1.1" desktop="false" offset="assign">
+ <function name="ClipPlanex" es1="1.1" desktop="false">
<param name="plane" type="GLenum"/>
<param name="equation" type="const GLfixed *" count="4"/>
</function>
- <function name="GetClipPlanex" es1="1.1" offset="assign">
+ <function name="GetClipPlanex" es1="1.1">
<param name="plane" type="GLenum"/>
<param name="equation" type="GLfixed *" output="true" count="4"/>
</function>
- <function name="GetFixedv" es1="1.1" desktop="false" offset="assign">
+ <function name="GetFixedv" es1="1.1" desktop="false">
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *" output="true" variable_param="pname"/>
</function>
- <function name="GetLightxv" es1="1.1" desktop="false" offset="assign">
+ <function name="GetLightxv" es1="1.1" desktop="false">
<param name="light" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *" output="true" variable_param="pname"/>
</function>
- <function name="GetMaterialxv" es1="1.1" desktop="false" offset="assign">
+ <function name="GetMaterialxv" es1="1.1" desktop="false">
<param name="face" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *" output="true" variable_param="pname"/>
</function>
- <function name="GetTexEnvxv" es1="1.1" desktop="false" offset="assign">
+ <function name="GetTexEnvxv" es1="1.1" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *" output="true" variable_param="pname"/>
</function>
- <function name="GetTexParameterxv" es1="1.1" desktop="false" offset="assign">
+ <function name="GetTexParameterxv" es1="1.1" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="GLfixed *" output="true" variable_param="pname"/>
</function>
- <function name="PointParameterx" es1="1.1" desktop="false" offset="assign">
+ <function name="PointParameterx" es1="1.1" desktop="false">
<param name="pname" type="GLenum"/>
<param name="param" type="GLfixed"/>
</function>
- <function name="PointParameterxv" es1="1.1" desktop="false" offset="assign">
+ <function name="PointParameterxv" es1="1.1" desktop="false">
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *"/>
</function>
- <function name="TexParameterxv" es1="1.1" desktop="false" offset="assign">
+ <function name="TexParameterxv" es1="1.1" desktop="false">
<param name="target" type="GLenum"/>
<param name="pname" type="GLenum"/>
<param name="params" type="const GLfixed *" variable_param="pname"/>
</function>
<!-- from GL_OES_single_precision -->
- <function name="ClipPlanef" es1="1.1" desktop="false" offset="assign">
+ <function name="ClipPlanef" es1="1.1" desktop="false">
<param name="plane" type="GLenum"/>
<param name="equation" type="const GLfloat *" count="4"/>
</function>
- <function name="GetClipPlanef" es1="1.1" offset="assign">
+ <function name="GetClipPlanef" es1="1.1">
<param name="plane" type="GLenum"/>
<param name="equation" type="GLfloat *" output="true" count="4"/>
</function>
diff --git a/mesalib/src/mapi/glapi/gen/gl_apitemp.py b/mesalib/src/mapi/glapi/gen/gl_apitemp.py
index 4157032c5..5e985a2ec 100755
--- a/mesalib/src/mapi/glapi/gen/gl_apitemp.py
+++ b/mesalib/src/mapi/glapi/gen/gl_apitemp.py
@@ -25,9 +25,10 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import gl_XML, glX_XML
import license
-import sys, getopt
class PrintGlOffsets(gl_XML.gl_print_base):
def __init__(self, es=False):
@@ -301,27 +302,30 @@ _glapi_proc UNUSED_TABLE_NAME[] = {"""
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
- print "-c Enable compatibility with OpenGL ES."
- sys.exit(1)
-
-if __name__ == '__main__':
- file_name = "gl_API.xml"
+def _parser():
+ """Parser arguments and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ metavar='<input file name>',
+ dest='filename',
+ default="gl_API.xml",
+ help="An XML file describing the API.")
+ parser.add_argument('-c',
+ action='store_true',
+ dest='es',
+ help="Enable OpenGL ES compatibility")
+ return parser.parse_args()
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:c")
- except Exception,e:
- show_usage()
- es = False
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-c":
- es = True
+def main():
+ """Main function."""
+ args = _parser()
- api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
- printer = PrintGlOffsets(es)
+ printer = PrintGlOffsets(args.es)
printer.Print(api)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_enums.py b/mesalib/src/mapi/glapi/gen/gl_enums.py
index 7c55ee443..0d393e3be 100755
--- a/mesalib/src/mapi/glapi/gen/gl_enums.py
+++ b/mesalib/src/mapi/glapi/gen/gl_enums.py
@@ -1,8 +1,8 @@
#!/usr/bin/env python
# -*- Mode: Python; py-indent-offset: 8 -*-
-# (C) Copyright Zack Rusin 2005
-# All Rights Reserved.
+# (C) Copyright Zack Rusin 2005. All Rights Reserved.
+# Copyright (C) 2015 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
@@ -26,6 +26,8 @@
# Authors:
# Zack Rusin <zack@kde.org>
+import argparse
+
import license
import gl_XML
import sys, getopt
@@ -201,21 +203,21 @@ _mesa_lookup_prim_by_nr(GLuint nr)
enum.append( [name, priority] )
-def show_usage():
- print "Usage: %s [-f input_file_name]" % sys.argv[0]
- sys.exit(1)
+def _parser():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--input_file',
+ required=True,
+ help="Choose an xml file to parse.")
+ return parser.parse_args()
-if __name__ == '__main__':
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:")
- except Exception,e:
- show_usage()
- api_list = []
- for (arg,val) in args:
- if arg == "-f":
- api = gl_XML.parse_GL_API( val )
- api_list.append(api);
+def main():
+ args = _parser()
+ api_list = [gl_XML.parse_GL_API(args.input_file)]
printer = PrintGlEnums()
- printer.Print( api_list )
+ printer.Print(api_list)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_genexec.py b/mesalib/src/mapi/glapi/gen/gl_genexec.py
index 4e76fe3c2..26d8e7bfb 100644
--- a/mesalib/src/mapi/glapi/gen/gl_genexec.py
+++ b/mesalib/src/mapi/glapi/gen/gl_genexec.py
@@ -25,10 +25,12 @@
# _mesa_initialize_exec_table(). It is responsible for populating all
# entries in the "exec" dispatch table that aren't dynamic.
+import argparse
import collections
import license
import gl_XML
-import sys, getopt
+import sys
+import apiexec
exec_flavor_map = {
@@ -175,18 +177,49 @@ class PrintCode(gl_XML.gl_print_base):
raise Exception(
'Unrecognized exec flavor {0!r}'.format(f.exec_flavor))
condition_parts = []
- if f.desktop:
- if f.deprecated:
+ if f.name in apiexec.functions:
+ ex = apiexec.functions[f.name]
+ unconditional_count = 0
+
+ if ex.compatibility is not None:
condition_parts.append('ctx->API == API_OPENGL_COMPAT')
- else:
- condition_parts.append('_mesa_is_desktop_gl(ctx)')
- if 'es1' in f.api_map:
- condition_parts.append('ctx->API == API_OPENGLES')
- if 'es2' in f.api_map:
- if f.api_map['es2'] > 2.0:
- condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10)))
- else:
- condition_parts.append('ctx->API == API_OPENGLES2')
+ unconditional_count += 1
+
+ if ex.core is not None:
+ condition_parts.append('ctx->API == API_OPENGL_CORE')
+ unconditional_count += 1
+
+ if ex.es1 is not None:
+ condition_parts.append('ctx->API == API_OPENGLES')
+ unconditional_count += 1
+
+ if ex.es2 is not None:
+ if ex.es2 > 20:
+ condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(ex.es2))
+ else:
+ condition_parts.append('ctx->API == API_OPENGLES2')
+ unconditional_count += 1
+
+ # If the function is unconditionally available in all four
+ # APIs, then it is always available. Replace the complex
+ # tautology condition with "true" and let GCC do the right
+ # thing.
+ if unconditional_count == 4:
+ condition_parts = ['true']
+ else:
+ if f.desktop:
+ if f.deprecated:
+ condition_parts.append('ctx->API == API_OPENGL_COMPAT')
+ else:
+ condition_parts.append('_mesa_is_desktop_gl(ctx)')
+ if 'es1' in f.api_map:
+ condition_parts.append('ctx->API == API_OPENGLES')
+ if 'es2' in f.api_map:
+ if f.api_map['es2'] > 2.0:
+ condition_parts.append('(ctx->API == API_OPENGLES2 && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10)))
+ else:
+ condition_parts.append('ctx->API == API_OPENGLES2')
+
if not condition_parts:
# This function does not exist in any API.
continue
@@ -207,24 +240,23 @@ class PrintCode(gl_XML.gl_print_base):
print ' }'
-def show_usage():
- print "Usage: %s [-f input_file_name]" % sys.argv[0]
- sys.exit(1)
-
+def _parser():
+ """Parse arguments and return namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_and_es_API.xml',
+ help='an xml file describing an API')
+ return parser.parse_args()
-if __name__ == '__main__':
- file_name = "gl_and_es_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
- except Exception,e:
- show_usage()
-
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
+def main():
+ """Main function."""
+ args = _parser()
printer = PrintCode()
-
- api = gl_XML.parse_GL_API(file_name)
+ api = gl_XML.parse_GL_API(args.filename)
printer.Print(api)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_gentable.py b/mesalib/src/mapi/glapi/gen/gl_gentable.py
index efac46eaa..36ac86b8e 100755
--- a/mesalib/src/mapi/glapi/gen/gl_gentable.py
+++ b/mesalib/src/mapi/glapi/gen/gl_gentable.py
@@ -2,6 +2,7 @@
# (C) Copyright IBM Corporation 2004, 2005
# (C) Copyright Apple Inc. 2011
+# Copyright (C) 2015 Intel Corporation
# All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
@@ -29,9 +30,10 @@
# Based on code ogiginally by:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import license
import gl_XML, glX_XML
-import sys, getopt
header = """/* GLXEXT is the define used in the xserver when the GLX extension is being
* built. Hijack this to determine whether this file is being built for the
@@ -186,23 +188,27 @@ class PrintCode(gl_XML.gl_print_base):
print body_template % vars
return
-def show_usage():
- print "Usage: %s [-f input_file_name]" % sys.argv[0]
- sys.exit(1)
-if __name__ == '__main__':
- file_name = "gl_API.xml"
+def _parser():
+ """Parse arguments and return a namespace object."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_API.xml',
+ help='An XML file description of an API')
+
+ return parser.parse_args()
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
- except Exception,e:
- show_usage()
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
+def main():
+ """Main function."""
+ args = _parser()
printer = PrintCode()
- api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
printer.Print(api)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_procs.py b/mesalib/src/mapi/glapi/gen/gl_procs.py
index b1fffc4ca..685e2fac3 100755
--- a/mesalib/src/mapi/glapi/gen/gl_procs.py
+++ b/mesalib/src/mapi/glapi/gen/gl_procs.py
@@ -25,9 +25,12 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import license
-import gl_XML, glX_XML
-import sys, getopt
+import gl_XML
+import glX_XML
+
class PrintGlProcs(gl_XML.gl_print_base):
def __init__(self, es=False):
@@ -39,7 +42,6 @@ class PrintGlProcs(gl_XML.gl_print_base):
"""Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
(C) Copyright IBM Corporation 2004, 2006""", "BRIAN PAUL, IBM")
-
def printRealHeader(self):
print """
/* This file is only included by glapi.c and is used for
@@ -161,26 +163,28 @@ typedef struct {
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-c]" % sys.argv[0]
- print "-c Enable compatibility with OpenGL ES."
- sys.exit(1)
+def _parser():
+ """Parse arguments and return a namepsace."""
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--filename',
+ default='gl_API.xml',
+ metavar="input_file_name",
+ dest='file_name',
+ help="Path to an XML description of OpenGL API.")
+ parser.add_argument('-c', '--es-version',
+ dest='es',
+ action="store_true",
+ help="filter functions for es")
+ return parser.parse_args()
+
+
+def main():
+ """Main function."""
+ args = _parser()
+ api = gl_XML.parse_GL_API(args.file_name, glX_XML.glx_item_factory())
+ PrintGlProcs(args.es).Print(api)
+
if __name__ == '__main__':
- file_name = "gl_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:c")
- except Exception,e:
- show_usage()
-
- es = False
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-c":
- es = True
-
- api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
- printer = PrintGlProcs(es)
- printer.Print(api)
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_table.py b/mesalib/src/mapi/glapi/gen/gl_table.py
index 0c9c0b8a1..d7e2b9dce 100755
--- a/mesalib/src/mapi/glapi/gen/gl_table.py
+++ b/mesalib/src/mapi/glapi/gen/gl_table.py
@@ -2,6 +2,7 @@
# (C) Copyright IBM Corporation 2004
# All Rights Reserved.
+# Copyright (c) 2014 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
@@ -25,9 +26,11 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import gl_XML
import license
-import sys, getopt
+
class PrintGlTable(gl_XML.gl_print_base):
def __init__(self, es=False):
@@ -39,21 +42,20 @@ class PrintGlTable(gl_XML.gl_print_base):
self.license = license.bsd_license_template % ( \
"""Copyright (C) 1999-2003 Brian Paul All Rights Reserved.
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
- self.ifdef_emitted = False;
+ self.ifdef_emitted = False
return
-
def printBody(self, api):
for f in api.functionIterateByOffset():
if not f.is_abi() and not self.ifdef_emitted:
print '#if !defined HAVE_SHARED_GLAPI'
self.ifdef_emitted = True
arg_string = f.get_parameter_string()
- print ' %s (GLAPIENTRYP %s)(%s); /* %d */' % (f.return_type, f.name, arg_string, f.offset)
+ print ' %s (GLAPIENTRYP %s)(%s); /* %d */' % (
+ f.return_type, f.name, arg_string, f.offset)
print '#endif /* !defined HAVE_SHARED_GLAPI */'
-
def printRealHeader(self):
print '#ifndef GLAPIENTRYP'
print '# ifndef GLAPIENTRY'
@@ -68,7 +70,6 @@ class PrintGlTable(gl_XML.gl_print_base):
print '{'
return
-
def printRealFooter(self):
print '};'
return
@@ -81,7 +82,8 @@ class PrintRemapTable(gl_XML.gl_print_base):
self.es = es
self.header_tag = '_DISPATCH_H_'
self.name = "gl_table.py (from Mesa)"
- self.license = license.bsd_license_template % ("(C) Copyright IBM Corporation 2005", "IBM")
+ self.license = license.bsd_license_template % (
+ "(C) Copyright IBM Corporation 2005", "IBM")
return
@@ -101,6 +103,7 @@ class PrintRemapTable(gl_XML.gl_print_base):
"""
return
+
def printBody(self, api):
print '#ifdef _MSC_VER'
print '#ifndef INLINE'
@@ -130,10 +133,10 @@ class PrintRemapTable(gl_XML.gl_print_base):
count = 0
for f in api.functionIterateByOffset():
if not f.is_abi():
- functions.append( [f, count] )
+ functions.append([f, count])
count += 1
else:
- abi_functions.append( [f, -1] )
+ abi_functions.append([f, -1])
if self.es:
# remember functions with aliases
@@ -171,7 +174,7 @@ class PrintRemapTable(gl_XML.gl_print_base):
print ''
for f, index in abi_functions + functions:
- arg_string = gl_XML.create_parameter_string( f.parameters, 0 )
+ arg_string = gl_XML.create_parameter_string(f.parameters, 0)
print 'typedef %s (GLAPIENTRYP _glptr_%s)(%s);' % (f.return_type, f.name, arg_string)
print '#define CALL_%s(disp, parameters) \\' % (f.name)
@@ -205,40 +208,44 @@ class PrintRemapTable(gl_XML.gl_print_base):
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-m mode] [-c ver]" % sys.argv[0]
- print " -m mode Mode can be 'table' or 'remap_table'."
- print " -c ver Version can be 'es1' or 'es2'."
- sys.exit(1)
+def _parser():
+ """Parse arguments and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--filename',
+ default='gl_API.xml',
+ metavar="input_file_name",
+ dest='file_name',
+ help="Path to an XML description of OpenGL API.")
+ parser.add_argument('-m', '--mode',
+ choices=['table', 'remap_table'],
+ default='table',
+ metavar="mode",
+ help="Generate either a table or a remap_table")
+ parser.add_argument('-c', '--es-version',
+ choices=[None, 'es1', 'es2'],
+ default=None,
+ metavar="ver",
+ dest='es',
+ help="filter functions for es")
+ return parser.parse_args()
+
+
+def main():
+ """Main function."""
+ args = _parser()
+
+ api = gl_XML.parse_GL_API(args.file_name)
+
+ if args.mode == "table":
+ printer = PrintGlTable(args.es)
+ elif args.mode == "remap_table":
+ printer = PrintRemapTable(args.es)
+
+ if args.es is not None:
+ api.filter_functions_by_api(args.es)
+
+ printer.Print(api)
+
if __name__ == '__main__':
- file_name = "gl_API.xml"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:m:c:")
- except Exception,e:
- show_usage()
-
- mode = "table"
- es = None
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-m":
- mode = val
- elif arg == "-c":
- es = val
-
- if mode == "table":
- printer = PrintGlTable(es)
- elif mode == "remap_table":
- printer = PrintRemapTable(es)
- else:
- show_usage()
-
- api = gl_XML.parse_GL_API( file_name )
-
- if es is not None:
- api.filter_functions_by_api(es)
-
- printer.Print( api )
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py b/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py
index 7afc2b108..cf42371f8 100644
--- a/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py
+++ b/mesalib/src/mapi/glapi/gen/gl_x86-64_asm.py
@@ -25,9 +25,11 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+import copy
+
import license
import gl_XML, glX_XML
-import sys, getopt, copy
def should_use_push(registers):
for [reg, offset] in registers:
@@ -289,30 +291,25 @@ class PrintGenericStubs(gl_XML.gl_print_base):
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
- sys.exit(1)
-if __name__ == '__main__':
- file_name = "gl_API.xml"
- mode = "generic"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
- except Exception,e:
- show_usage()
-
- for (arg,val) in args:
- if arg == '-m':
- mode = val
- elif arg == "-f":
- file_name = val
-
- if mode == "generic":
- printer = PrintGenericStubs()
- else:
- print "ERROR: Invalid mode \"%s\" specified." % mode
- show_usage()
+def _parser():
+ """Parse arguments and return a namespace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ default='gl_API.xml',
+ dest='filename',
+ help='An XML file describing an API')
+ return parser.parse_args()
+
+
+def main():
+ """Main file."""
+ args = _parser()
+ printer = PrintGenericStubs()
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
- api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
printer.Print(api)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/gl_x86_asm.py b/mesalib/src/mapi/glapi/gen/gl_x86_asm.py
index f855dbaaa..c0c7941ce 100644
--- a/mesalib/src/mapi/glapi/gen/gl_x86_asm.py
+++ b/mesalib/src/mapi/glapi/gen/gl_x86_asm.py
@@ -25,9 +25,10 @@
# Authors:
# Ian Romanick <idr@us.ibm.com>
+import argparse
+
import license
import gl_XML, glX_XML
-import sys, getopt
class PrintGenericStubs(gl_XML.gl_print_base):
@@ -217,30 +218,22 @@ class PrintGenericStubs(gl_XML.gl_print_base):
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
- sys.exit(1)
+def _parser():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f',
+ dest='filename',
+ default='gl_API.xml',
+ help='An XML file describing an API.')
+ return parser.parse_args()
-if __name__ == '__main__':
- file_name = "gl_API.xml"
- mode = "generic"
-
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
- except Exception,e:
- show_usage()
-
- for (arg,val) in args:
- if arg == '-m':
- mode = val
- elif arg == "-f":
- file_name = val
-
- if mode == "generic":
- printer = PrintGenericStubs()
- else:
- print "ERROR: Invalid mode \"%s\" specified." % mode
- show_usage()
-
- api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+
+def main():
+ args = _parser()
+ printer = PrintGenericStubs()
+
+ api = gl_XML.parse_GL_API(args.filename, glX_XML.glx_item_factory())
printer.Print(api)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/remap_helper.py b/mesalib/src/mapi/glapi/gen/remap_helper.py
index 8ac047ccc..bd269b6a3 100755
--- a/mesalib/src/mapi/glapi/gen/remap_helper.py
+++ b/mesalib/src/mapi/glapi/gen/remap_helper.py
@@ -24,9 +24,11 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-import gl_XML
+import argparse
+
import license
-import sys, getopt, string
+import gl_XML
+
def get_function_spec(func):
sig = ""
@@ -54,6 +56,7 @@ def get_function_spec(func):
return spec
+
class PrintGlRemap(gl_XML.gl_print_base):
def __init__(self):
gl_XML.gl_print_base.__init__(self)
@@ -163,30 +166,34 @@ class PrintGlRemap(gl_XML.gl_print_base):
return
-def show_usage():
- print "Usage: %s [-f input_file_name] [-c ver]" % sys.argv[0]
- print " -c ver Version can be 'es1' or 'es2'."
- sys.exit(1)
+def _parser():
+ """Parse input options and return a namsepace."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--filename',
+ default="gl_API.xml",
+ metavar="input_file_name",
+ dest='file_name',
+ help="An xml description file.")
+ parser.add_argument('-c', '--es-version',
+ choices=[None, 'es1', 'es2'],
+ default=None,
+ metavar='ver',
+ dest='es',
+ help='A GLES version to support')
+ return parser.parse_args()
-if __name__ == '__main__':
- file_name = "gl_API.xml"
- try:
- (args, trail) = getopt.getopt(sys.argv[1:], "f:c:")
- except Exception,e:
- show_usage()
+def main():
+ """Main function."""
+ args = _parser()
- es = None
- for (arg,val) in args:
- if arg == "-f":
- file_name = val
- elif arg == "-c":
- es = val
+ api = gl_XML.parse_GL_API(args.file_name)
+ if args.es is not None:
+ api.filter_functions_by_api(args.es)
- api = gl_XML.parse_GL_API( file_name )
+ printer = PrintGlRemap()
+ printer.Print(api)
- if es is not None:
- api.filter_functions_by_api(es)
- printer = PrintGlRemap()
- printer.Print( api )
+if __name__ == '__main__':
+ main()
diff --git a/mesalib/src/mapi/glapi/gen/static_data.py b/mesalib/src/mapi/glapi/gen/static_data.py
new file mode 100644
index 000000000..142c503b0
--- /dev/null
+++ b/mesalib/src/mapi/glapi/gen/static_data.py
@@ -0,0 +1,1729 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2015 Intel Corporation
+#
+# 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, sublicense,
+# 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 NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS 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.
+
+"""Table of functions that have ABI-mandated offsets in the dispatch table.
+
+This list will never change."""
+offsets = {
+ "NewList": 0,
+ "EndList": 1,
+ "CallList": 2,
+ "CallLists": 3,
+ "DeleteLists": 4,
+ "GenLists": 5,
+ "ListBase": 6,
+ "Begin": 7,
+ "Bitmap": 8,
+ "Color3b": 9,
+ "Color3bv": 10,
+ "Color3d": 11,
+ "Color3dv": 12,
+ "Color3f": 13,
+ "Color3fv": 14,
+ "Color3i": 15,
+ "Color3iv": 16,
+ "Color3s": 17,
+ "Color3sv": 18,
+ "Color3ub": 19,
+ "Color3ubv": 20,
+ "Color3ui": 21,
+ "Color3uiv": 22,
+ "Color3us": 23,
+ "Color3usv": 24,
+ "Color4b": 25,
+ "Color4bv": 26,
+ "Color4d": 27,
+ "Color4dv": 28,
+ "Color4f": 29,
+ "Color4fv": 30,
+ "Color4i": 31,
+ "Color4iv": 32,
+ "Color4s": 33,
+ "Color4sv": 34,
+ "Color4ub": 35,
+ "Color4ubv": 36,
+ "Color4ui": 37,
+ "Color4uiv": 38,
+ "Color4us": 39,
+ "Color4usv": 40,
+ "EdgeFlag": 41,
+ "EdgeFlagv": 42,
+ "End": 43,
+ "Indexd": 44,
+ "Indexdv": 45,
+ "Indexf": 46,
+ "Indexfv": 47,
+ "Indexi": 48,
+ "Indexiv": 49,
+ "Indexs": 50,
+ "Indexsv": 51,
+ "Normal3b": 52,
+ "Normal3bv": 53,
+ "Normal3d": 54,
+ "Normal3dv": 55,
+ "Normal3f": 56,
+ "Normal3fv": 57,
+ "Normal3i": 58,
+ "Normal3iv": 59,
+ "Normal3s": 60,
+ "Normal3sv": 61,
+ "RasterPos2d": 62,
+ "RasterPos2dv": 63,
+ "RasterPos2f": 64,
+ "RasterPos2fv": 65,
+ "RasterPos2i": 66,
+ "RasterPos2iv": 67,
+ "RasterPos2s": 68,
+ "RasterPos2sv": 69,
+ "RasterPos3d": 70,
+ "RasterPos3dv": 71,
+ "RasterPos3f": 72,
+ "RasterPos3fv": 73,
+ "RasterPos3i": 74,
+ "RasterPos3iv": 75,
+ "RasterPos3s": 76,
+ "RasterPos3sv": 77,
+ "RasterPos4d": 78,
+ "RasterPos4dv": 79,
+ "RasterPos4f": 80,
+ "RasterPos4fv": 81,
+ "RasterPos4i": 82,
+ "RasterPos4iv": 83,
+ "RasterPos4s": 84,
+ "RasterPos4sv": 85,
+ "Rectd": 86,
+ "Rectdv": 87,
+ "Rectf": 88,
+ "Rectfv": 89,
+ "Recti": 90,
+ "Rectiv": 91,
+ "Rects": 92,
+ "Rectsv": 93,
+ "TexCoord1d": 94,
+ "TexCoord1dv": 95,
+ "TexCoord1f": 96,
+ "TexCoord1fv": 97,
+ "TexCoord1i": 98,
+ "TexCoord1iv": 99,
+ "TexCoord1s": 100,
+ "TexCoord1sv": 101,
+ "TexCoord2d": 102,
+ "TexCoord2dv": 103,
+ "TexCoord2f": 104,
+ "TexCoord2fv": 105,
+ "TexCoord2i": 106,
+ "TexCoord2iv": 107,
+ "TexCoord2s": 108,
+ "TexCoord2sv": 109,
+ "TexCoord3d": 110,
+ "TexCoord3dv": 111,
+ "TexCoord3f": 112,
+ "TexCoord3fv": 113,
+ "TexCoord3i": 114,
+ "TexCoord3iv": 115,
+ "TexCoord3s": 116,
+ "TexCoord3sv": 117,
+ "TexCoord4d": 118,
+ "TexCoord4dv": 119,
+ "TexCoord4f": 120,
+ "TexCoord4fv": 121,
+ "TexCoord4i": 122,
+ "TexCoord4iv": 123,
+ "TexCoord4s": 124,
+ "TexCoord4sv": 125,
+ "Vertex2d": 126,
+ "Vertex2dv": 127,
+ "Vertex2f": 128,
+ "Vertex2fv": 129,
+ "Vertex2i": 130,
+ "Vertex2iv": 131,
+ "Vertex2s": 132,
+ "Vertex2sv": 133,
+ "Vertex3d": 134,
+ "Vertex3dv": 135,
+ "Vertex3f": 136,
+ "Vertex3fv": 137,
+ "Vertex3i": 138,
+ "Vertex3iv": 139,
+ "Vertex3s": 140,
+ "Vertex3sv": 141,
+ "Vertex4d": 142,
+ "Vertex4dv": 143,
+ "Vertex4f": 144,
+ "Vertex4fv": 145,
+ "Vertex4i": 146,
+ "Vertex4iv": 147,
+ "Vertex4s": 148,
+ "Vertex4sv": 149,
+ "ClipPlane": 150,
+ "ColorMaterial": 151,
+ "CullFace": 152,
+ "Fogf": 153,
+ "Fogfv": 154,
+ "Fogi": 155,
+ "Fogiv": 156,
+ "FrontFace": 157,
+ "Hint": 158,
+ "Lightf": 159,
+ "Lightfv": 160,
+ "Lighti": 161,
+ "Lightiv": 162,
+ "LightModelf": 163,
+ "LightModelfv": 164,
+ "LightModeli": 165,
+ "LightModeliv": 166,
+ "LineStipple": 167,
+ "LineWidth": 168,
+ "Materialf": 169,
+ "Materialfv": 170,
+ "Materiali": 171,
+ "Materialiv": 172,
+ "PointSize": 173,
+ "PolygonMode": 174,
+ "PolygonStipple": 175,
+ "Scissor": 176,
+ "ShadeModel": 177,
+ "TexParameterf": 178,
+ "TexParameterfv": 179,
+ "TexParameteri": 180,
+ "TexParameteriv": 181,
+ "TexImage1D": 182,
+ "TexImage2D": 183,
+ "TexEnvf": 184,
+ "TexEnvfv": 185,
+ "TexEnvi": 186,
+ "TexEnviv": 187,
+ "TexGend": 188,
+ "TexGendv": 189,
+ "TexGenf": 190,
+ "TexGenfv": 191,
+ "TexGeni": 192,
+ "TexGeniv": 193,
+ "FeedbackBuffer": 194,
+ "SelectBuffer": 195,
+ "RenderMode": 196,
+ "InitNames": 197,
+ "LoadName": 198,
+ "PassThrough": 199,
+ "PopName": 200,
+ "PushName": 201,
+ "DrawBuffer": 202,
+ "Clear": 203,
+ "ClearAccum": 204,
+ "ClearIndex": 205,
+ "ClearColor": 206,
+ "ClearStencil": 207,
+ "ClearDepth": 208,
+ "StencilMask": 209,
+ "ColorMask": 210,
+ "DepthMask": 211,
+ "IndexMask": 212,
+ "Accum": 213,
+ "Disable": 214,
+ "Enable": 215,
+ "Finish": 216,
+ "Flush": 217,
+ "PopAttrib": 218,
+ "PushAttrib": 219,
+ "Map1d": 220,
+ "Map1f": 221,
+ "Map2d": 222,
+ "Map2f": 223,
+ "MapGrid1d": 224,
+ "MapGrid1f": 225,
+ "MapGrid2d": 226,
+ "MapGrid2f": 227,
+ "EvalCoord1d": 228,
+ "EvalCoord1dv": 229,
+ "EvalCoord1f": 230,
+ "EvalCoord1fv": 231,
+ "EvalCoord2d": 232,
+ "EvalCoord2dv": 233,
+ "EvalCoord2f": 234,
+ "EvalCoord2fv": 235,
+ "EvalMesh1": 236,
+ "EvalPoint1": 237,
+ "EvalMesh2": 238,
+ "EvalPoint2": 239,
+ "AlphaFunc": 240,
+ "BlendFunc": 241,
+ "LogicOp": 242,
+ "StencilFunc": 243,
+ "StencilOp": 244,
+ "DepthFunc": 245,
+ "PixelZoom": 246,
+ "PixelTransferf": 247,
+ "PixelTransferi": 248,
+ "PixelStoref": 249,
+ "PixelStorei": 250,
+ "PixelMapfv": 251,
+ "PixelMapuiv": 252,
+ "PixelMapusv": 253,
+ "ReadBuffer": 254,
+ "CopyPixels": 255,
+ "ReadPixels": 256,
+ "DrawPixels": 257,
+ "GetBooleanv": 258,
+ "GetClipPlane": 259,
+ "GetDoublev": 260,
+ "GetError": 261,
+ "GetFloatv": 262,
+ "GetIntegerv": 263,
+ "GetLightfv": 264,
+ "GetLightiv": 265,
+ "GetMapdv": 266,
+ "GetMapfv": 267,
+ "GetMapiv": 268,
+ "GetMaterialfv": 269,
+ "GetMaterialiv": 270,
+ "GetPixelMapfv": 271,
+ "GetPixelMapuiv": 272,
+ "GetPixelMapusv": 273,
+ "GetPolygonStipple": 274,
+ "GetString": 275,
+ "GetTexEnvfv": 276,
+ "GetTexEnviv": 277,
+ "GetTexGendv": 278,
+ "GetTexGenfv": 279,
+ "GetTexGeniv": 280,
+ "GetTexImage": 281,
+ "GetTexParameterfv": 282,
+ "GetTexParameteriv": 283,
+ "GetTexLevelParameterfv": 284,
+ "GetTexLevelParameteriv": 285,
+ "IsEnabled": 286,
+ "IsList": 287,
+ "DepthRange": 288,
+ "Frustum": 289,
+ "LoadIdentity": 290,
+ "LoadMatrixf": 291,
+ "LoadMatrixd": 292,
+ "MatrixMode": 293,
+ "MultMatrixf": 294,
+ "MultMatrixd": 295,
+ "Ortho": 296,
+ "PopMatrix": 297,
+ "PushMatrix": 298,
+ "Rotated": 299,
+ "Rotatef": 300,
+ "Scaled": 301,
+ "Scalef": 302,
+ "Translated": 303,
+ "Translatef": 304,
+ "Viewport": 305,
+ "ArrayElement": 306,
+ "ColorPointer": 308,
+ "DisableClientState": 309,
+ "DrawArrays": 310,
+ "DrawElements": 311,
+ "EdgeFlagPointer": 312,
+ "EnableClientState": 313,
+ "GetPointerv": 329,
+ "IndexPointer": 314,
+ "InterleavedArrays": 317,
+ "NormalPointer": 318,
+ "TexCoordPointer": 320,
+ "VertexPointer": 321,
+ "PolygonOffset": 319,
+ "CopyTexImage1D": 323,
+ "CopyTexImage2D": 324,
+ "CopyTexSubImage1D": 325,
+ "CopyTexSubImage2D": 326,
+ "TexSubImage1D": 332,
+ "TexSubImage2D": 333,
+ "AreTexturesResident": 322,
+ "BindTexture": 307,
+ "DeleteTextures": 327,
+ "GenTextures": 328,
+ "IsTexture": 330,
+ "PrioritizeTextures": 331,
+ "Indexub": 315,
+ "Indexubv": 316,
+ "PopClientAttrib": 334,
+ "PushClientAttrib": 335,
+ "BlendColor": 336,
+ "BlendEquation": 337,
+ "DrawRangeElements": 338,
+ "ColorTable": 339,
+ "ColorTableParameterfv": 340,
+ "ColorTableParameteriv": 341,
+ "CopyColorTable": 342,
+ "GetColorTable": 343,
+ "GetColorTableParameterfv": 344,
+ "GetColorTableParameteriv": 345,
+ "ColorSubTable": 346,
+ "CopyColorSubTable": 347,
+ "ConvolutionFilter1D": 348,
+ "ConvolutionFilter2D": 349,
+ "ConvolutionParameterf": 350,
+ "ConvolutionParameterfv": 351,
+ "ConvolutionParameteri": 352,
+ "ConvolutionParameteriv": 353,
+ "CopyConvolutionFilter1D": 354,
+ "CopyConvolutionFilter2D": 355,
+ "GetConvolutionFilter": 356,
+ "GetConvolutionParameterfv": 357,
+ "GetConvolutionParameteriv": 358,
+ "GetSeparableFilter": 359,
+ "SeparableFilter2D": 360,
+ "GetHistogram": 361,
+ "GetHistogramParameterfv": 362,
+ "GetHistogramParameteriv": 363,
+ "GetMinmax": 364,
+ "GetMinmaxParameterfv": 365,
+ "GetMinmaxParameteriv": 366,
+ "Histogram": 367,
+ "Minmax": 368,
+ "ResetHistogram": 369,
+ "ResetMinmax": 370,
+ "TexImage3D": 371,
+ "TexSubImage3D": 372,
+ "CopyTexSubImage3D": 373,
+ "ActiveTexture": 374,
+ "ClientActiveTexture": 375,
+ "MultiTexCoord1d": 376,
+ "MultiTexCoord1dv": 377,
+ "MultiTexCoord1fARB": 378,
+ "MultiTexCoord1fvARB": 379,
+ "MultiTexCoord1i": 380,
+ "MultiTexCoord1iv": 381,
+ "MultiTexCoord1s": 382,
+ "MultiTexCoord1sv": 383,
+ "MultiTexCoord2d": 384,
+ "MultiTexCoord2dv": 385,
+ "MultiTexCoord2fARB": 386,
+ "MultiTexCoord2fvARB": 387,
+ "MultiTexCoord2i": 388,
+ "MultiTexCoord2iv": 389,
+ "MultiTexCoord2s": 390,
+ "MultiTexCoord2sv": 391,
+ "MultiTexCoord3d": 392,
+ "MultiTexCoord3dv": 393,
+ "MultiTexCoord3fARB": 394,
+ "MultiTexCoord3fvARB": 395,
+ "MultiTexCoord3i": 396,
+ "MultiTexCoord3iv": 397,
+ "MultiTexCoord3s": 398,
+ "MultiTexCoord3sv": 399,
+ "MultiTexCoord4d": 400,
+ "MultiTexCoord4dv": 401,
+ "MultiTexCoord4fARB": 402,
+ "MultiTexCoord4fvARB": 403,
+ "MultiTexCoord4i": 404,
+ "MultiTexCoord4iv": 405,
+ "MultiTexCoord4s": 406,
+ "MultiTexCoord4sv": 407
+}
+
+functions = [
+ "Accum",
+ "ActiveTexture",
+ "ActiveTextureARB",
+ "AlphaFunc",
+ "AlphaFuncx",
+ "AreTexturesResident",
+ "AreTexturesResidentEXT",
+ "ArrayElement",
+ "ArrayElementEXT",
+ "AttachObjectARB",
+ "AttachShader",
+ "Begin",
+ "BeginConditionalRender",
+ "BeginConditionalRenderNV",
+ "BeginQuery",
+ "BeginQueryARB",
+ "BeginQueryIndexed",
+ "BeginTransformFeedback",
+ "BindAttribLocation",
+ "BindAttribLocationARB",
+ "BindBuffer",
+ "BindBufferARB",
+ "BindBufferBase",
+ "BindBufferRange",
+ "BindBuffersBase",
+ "BindBuffersRange",
+ "BindFragDataLocation",
+ "BindFragDataLocationEXT",
+ "BindFragDataLocationIndexed",
+ "BindFramebuffer",
+ "BindFramebufferEXT",
+ "BindImageTexture",
+ "BindImageTextures",
+ "BindProgramARB",
+ "BindRenderbuffer",
+ "BindRenderbufferEXT",
+ "BindSampler",
+ "BindSamplers",
+ "BindTexture",
+ "BindTextureEXT",
+ "BindTextures",
+ "BindTransformFeedback",
+ "BindVertexArray",
+ "BindVertexBuffer",
+ "BindVertexBuffers",
+ "Bitmap",
+ "BlendColor",
+ "BlendColorEXT",
+ "BlendEquation",
+ "BlendEquationEXT",
+ "BlendEquationiARB",
+ "BlendEquationSeparate",
+ "BlendEquationSeparateiARB",
+ "BlendFunc",
+ "BlendFunciARB",
+ "BlendFuncSeparate",
+ "BlendFuncSeparateEXT",
+ "BlendFuncSeparateiARB",
+ "BlitFramebuffer",
+ "BufferData",
+ "BufferDataARB",
+ "BufferStorage",
+ "BufferSubData",
+ "BufferSubDataARB",
+ "CallList",
+ "CallLists",
+ "CheckFramebufferStatus",
+ "CheckFramebufferStatusEXT",
+ "ClampColor",
+ "ClampColorARB",
+ "Clear",
+ "ClearAccum",
+ "ClearBufferData",
+ "ClearBufferfi",
+ "ClearBufferfv",
+ "ClearBufferiv",
+ "ClearBufferSubData",
+ "ClearBufferuiv",
+ "ClearColor",
+ "ClearColorIiEXT",
+ "ClearColorIuiEXT",
+ "ClearColorx",
+ "ClearDepth",
+ "ClearDepthf",
+ "ClearDepthx",
+ "ClearIndex",
+ "ClearStencil",
+ "ClearTexImage",
+ "ClearTexSubImage",
+ "ClientActiveTexture",
+ "ClientActiveTextureARB",
+ "ClientWaitSync",
+ "ClipPlane",
+ "ClipPlanef",
+ "ClipPlanex",
+ "Color3b",
+ "Color3bv",
+ "Color3d",
+ "Color3dv",
+ "Color3f",
+ "Color3fv",
+ "Color3i",
+ "Color3iv",
+ "Color3s",
+ "Color3sv",
+ "Color3ub",
+ "Color3ubv",
+ "Color3ui",
+ "Color3uiv",
+ "Color3us",
+ "Color3usv",
+ "Color4b",
+ "Color4bv",
+ "Color4d",
+ "Color4dv",
+ "Color4f",
+ "Color4fv",
+ "Color4i",
+ "Color4iv",
+ "Color4s",
+ "Color4sv",
+ "Color4ub",
+ "Color4ubv",
+ "Color4ui",
+ "Color4uiv",
+ "Color4us",
+ "Color4usv",
+ "Color4x",
+ "ColorMask",
+ "ColorMaski",
+ "ColorMaskIndexedEXT",
+ "ColorMaterial",
+ "ColorP3ui",
+ "ColorP3uiv",
+ "ColorP4ui",
+ "ColorP4uiv",
+ "ColorPointer",
+ "ColorPointerEXT",
+ "ColorSubTable",
+ "ColorTable",
+ "ColorTableParameterfv",
+ "ColorTableParameteriv",
+ "CompileShader",
+ "CompileShaderARB",
+ "CompressedTexImage1D",
+ "CompressedTexImage1DARB",
+ "CompressedTexImage2D",
+ "CompressedTexImage2DARB",
+ "CompressedTexImage3D",
+ "CompressedTexImage3DARB",
+ "CompressedTexSubImage1D",
+ "CompressedTexSubImage1DARB",
+ "CompressedTexSubImage2D",
+ "CompressedTexSubImage2DARB",
+ "CompressedTexSubImage3D",
+ "CompressedTexSubImage3DARB",
+ "ConvolutionFilter1D",
+ "ConvolutionFilter2D",
+ "ConvolutionParameterf",
+ "ConvolutionParameterfv",
+ "ConvolutionParameteri",
+ "ConvolutionParameteriv",
+ "CopyBufferSubData",
+ "CopyColorSubTable",
+ "CopyColorTable",
+ "CopyConvolutionFilter1D",
+ "CopyConvolutionFilter2D",
+ "CopyImageSubData",
+ "CopyPixels",
+ "CopyTexImage1D",
+ "CopyTexImage2D",
+ "CopyTexSubImage1D",
+ "CopyTexSubImage2D",
+ "CopyTexSubImage3D",
+ "CopyTexSubImage3DEXT",
+ "CreateProgram",
+ "CreateProgramObjectARB",
+ "CreateShader",
+ "CreateShaderObjectARB",
+ "CullFace",
+ "DebugMessageCallback",
+ "DebugMessageCallbackARB",
+ "DebugMessageControl",
+ "DebugMessageControlARB",
+ "DebugMessageInsert",
+ "DebugMessageInsertARB",
+ "DeleteBuffers",
+ "DeleteBuffersARB",
+ "DeleteFramebuffers",
+ "DeleteFramebuffersEXT",
+ "DeleteLists",
+ "DeleteObjectARB",
+ "DeleteProgram",
+ "DeleteProgramsARB",
+ "DeleteQueries",
+ "DeleteQueriesARB",
+ "DeleteRenderbuffers",
+ "DeleteRenderbuffersEXT",
+ "DeleteSamplers",
+ "DeleteShader",
+ "DeleteSync",
+ "DeleteTextures",
+ "DeleteTexturesEXT",
+ "DeleteTransformFeedbacks",
+ "DeleteVertexArrays",
+ "DepthFunc",
+ "DepthMask",
+ "DepthRange",
+ "DepthRangeArrayv",
+ "DepthRangef",
+ "DepthRangeIndexed",
+ "DepthRangex",
+ "DetachObjectARB",
+ "DetachShader",
+ "Disable",
+ "DisableClientState",
+ "Disablei",
+ "DisableIndexedEXT",
+ "DisableVertexAttribArray",
+ "DisableVertexAttribArrayARB",
+ "DispatchCompute",
+ "DispatchComputeIndirect",
+ "DrawArrays",
+ "DrawArraysEXT",
+ "DrawArraysIndirect",
+ "DrawArraysInstanced",
+ "DrawArraysInstancedARB",
+ "DrawArraysInstancedBaseInstance",
+ "DrawArraysInstancedEXT",
+ "DrawBuffer",
+ "DrawBuffers",
+ "DrawBuffersARB",
+ "DrawBuffersATI",
+ "DrawElements",
+ "DrawElementsBaseVertex",
+ "DrawElementsIndirect",
+ "DrawElementsInstanced",
+ "DrawElementsInstancedARB",
+ "DrawElementsInstancedBaseInstance",
+ "DrawElementsInstancedBaseVertex",
+ "DrawElementsInstancedBaseVertexBaseInstance",
+ "DrawElementsInstancedEXT",
+ "DrawPixels",
+ "DrawRangeElements",
+ "DrawRangeElementsBaseVertex",
+ "DrawRangeElementsEXT",
+ "DrawTransformFeedback",
+ "DrawTransformFeedbackInstanced",
+ "DrawTransformFeedbackStream",
+ "DrawTransformFeedbackStreamInstanced",
+ "EdgeFlag",
+ "EdgeFlagPointer",
+ "EdgeFlagPointerEXT",
+ "EdgeFlagv",
+ "Enable",
+ "EnableClientState",
+ "Enablei",
+ "EnableIndexedEXT",
+ "EnableVertexAttribArray",
+ "EnableVertexAttribArrayARB",
+ "End",
+ "EndConditionalRender",
+ "EndConditionalRenderNV",
+ "EndList",
+ "EndQuery",
+ "EndQueryARB",
+ "EndQueryIndexed",
+ "EndTransformFeedback",
+ "EvalCoord1d",
+ "EvalCoord1dv",
+ "EvalCoord1f",
+ "EvalCoord1fv",
+ "EvalCoord2d",
+ "EvalCoord2dv",
+ "EvalCoord2f",
+ "EvalCoord2fv",
+ "EvalMesh1",
+ "EvalMesh2",
+ "EvalPoint1",
+ "EvalPoint2",
+ "FeedbackBuffer",
+ "FenceSync",
+ "Finish",
+ "Flush",
+ "FlushMappedBufferRange",
+ "FogCoordd",
+ "FogCoorddEXT",
+ "FogCoorddv",
+ "FogCoorddvEXT",
+ "FogCoordf",
+ "FogCoordfEXT",
+ "FogCoordfv",
+ "FogCoordfvEXT",
+ "FogCoordPointer",
+ "FogCoordPointerEXT",
+ "Fogf",
+ "Fogfv",
+ "Fogi",
+ "Fogiv",
+ "Fogx",
+ "Fogxv",
+ "FramebufferRenderbuffer",
+ "FramebufferRenderbufferEXT",
+ "FramebufferTexture",
+ "FramebufferTexture1D",
+ "FramebufferTexture1DEXT",
+ "FramebufferTexture2D",
+ "FramebufferTexture2DEXT",
+ "FramebufferTexture3D",
+ "FramebufferTexture3DEXT",
+ "FramebufferTextureARB",
+ "FramebufferTextureLayer",
+ "FramebufferTextureLayerARB",
+ "FramebufferTextureLayerEXT",
+ "FrontFace",
+ "Frustum",
+ "Frustumf",
+ "Frustumx",
+ "GenBuffers",
+ "GenBuffersARB",
+ "GenerateMipmap",
+ "GenerateMipmapEXT",
+ "GenFramebuffers",
+ "GenFramebuffersEXT",
+ "GenLists",
+ "GenProgramsARB",
+ "GenQueries",
+ "GenQueriesARB",
+ "GenRenderbuffers",
+ "GenRenderbuffersEXT",
+ "GenSamplers",
+ "GenTextures",
+ "GenTexturesEXT",
+ "GenTransformFeedbacks",
+ "GenVertexArrays",
+ "GetActiveAtomicCounterBufferiv",
+ "GetActiveAttrib",
+ "GetActiveAttribARB",
+ "GetActiveUniform",
+ "GetActiveUniformARB",
+ "GetActiveUniformBlockiv",
+ "GetActiveUniformBlockName",
+ "GetActiveUniformName",
+ "GetActiveUniformsiv",
+ "GetAttachedObjectsARB",
+ "GetAttachedShaders",
+ "GetAttribLocation",
+ "GetAttribLocationARB",
+ "GetBooleanIndexedvEXT",
+ "GetBooleani_v",
+ "GetBooleanv",
+ "GetBufferParameteri64v",
+ "GetBufferParameteriv",
+ "GetBufferParameterivARB",
+ "GetBufferPointerv",
+ "GetBufferPointervARB",
+ "GetBufferSubData",
+ "GetBufferSubDataARB",
+ "GetClipPlane",
+ "GetClipPlanef",
+ "GetClipPlanex",
+ "GetColorTable",
+ "GetColorTableParameterfv",
+ "GetColorTableParameteriv",
+ "GetCompressedTexImage",
+ "GetCompressedTexImageARB",
+ "GetConvolutionFilter",
+ "GetConvolutionParameterfv",
+ "GetConvolutionParameteriv",
+ "GetDebugMessageLog",
+ "GetDebugMessageLogARB",
+ "GetDoublei_v",
+ "GetDoublev",
+ "GetError",
+ "GetFixedv",
+ "GetFloati_v",
+ "GetFloatv",
+ "GetFragDataIndex",
+ "GetFragDataLocation",
+ "GetFragDataLocationEXT",
+ "GetFramebufferAttachmentParameteriv",
+ "GetFramebufferAttachmentParameterivEXT",
+ "GetGraphicsResetStatusARB",
+ "GetHandleARB",
+ "GetHistogram",
+ "GetHistogramParameterfv",
+ "GetHistogramParameteriv",
+ "GetInfoLogARB",
+ "GetInteger64i_v",
+ "GetInteger64v",
+ "GetIntegerIndexedvEXT",
+ "GetIntegeri_v",
+ "GetIntegerv",
+ "GetLightfv",
+ "GetLightiv",
+ "GetLightxv",
+ "GetMapdv",
+ "GetMapfv",
+ "GetMapiv",
+ "GetMaterialfv",
+ "GetMaterialiv",
+ "GetMaterialxv",
+ "GetMinmax",
+ "GetMinmaxParameterfv",
+ "GetMinmaxParameteriv",
+ "GetMultisamplefv",
+ "GetnColorTableARB",
+ "GetnCompressedTexImageARB",
+ "GetnConvolutionFilterARB",
+ "GetnHistogramARB",
+ "GetnMapdvARB",
+ "GetnMapfvARB",
+ "GetnMapivARB",
+ "GetnMinmaxARB",
+ "GetnPixelMapfvARB",
+ "GetnPixelMapuivARB",
+ "GetnPixelMapusvARB",
+ "GetnPolygonStippleARB",
+ "GetnSeparableFilterARB",
+ "GetnTexImageARB",
+ "GetnUniformdvARB",
+ "GetnUniformfvARB",
+ "GetnUniformivARB",
+ "GetnUniformuivARB",
+ "GetObjectLabel",
+ "GetObjectParameterfvARB",
+ "GetObjectParameterivARB",
+ "GetObjectPtrLabel",
+ "GetPixelMapfv",
+ "GetPixelMapuiv",
+ "GetPixelMapusv",
+ "GetPointerv",
+ "GetPointervEXT",
+ "GetPolygonStipple",
+ "GetProgramBinary",
+ "GetProgramEnvParameterdvARB",
+ "GetProgramEnvParameterfvARB",
+ "GetProgramInfoLog",
+ "GetProgramiv",
+ "GetProgramivARB",
+ "GetProgramLocalParameterdvARB",
+ "GetProgramLocalParameterfvARB",
+ "GetProgramStringARB",
+ "GetQueryIndexediv",
+ "GetQueryiv",
+ "GetQueryivARB",
+ "GetQueryObjectiv",
+ "GetQueryObjectivARB",
+ "GetQueryObjectuiv",
+ "GetQueryObjectuivARB",
+ "GetRenderbufferParameteriv",
+ "GetRenderbufferParameterivEXT",
+ "GetSamplerParameterfv",
+ "GetSamplerParameterIiv",
+ "GetSamplerParameterIuiv",
+ "GetSamplerParameteriv",
+ "GetSeparableFilter",
+ "GetShaderInfoLog",
+ "GetShaderiv",
+ "GetShaderPrecisionFormat",
+ "GetShaderSource",
+ "GetShaderSourceARB",
+ "GetString",
+ "GetStringi",
+ "GetSynciv",
+ "GetTexEnvfv",
+ "GetTexEnviv",
+ "GetTexEnvxv",
+ "GetTexGendv",
+ "GetTexGenfv",
+ "GetTexGeniv",
+ "GetTexImage",
+ "GetTexLevelParameterfv",
+ "GetTexLevelParameteriv",
+ "GetTexParameterfv",
+ "GetTexParameterIiv",
+ "GetTexParameterIivEXT",
+ "GetTexParameterIuiv",
+ "GetTexParameterIuivEXT",
+ "GetTexParameteriv",
+ "GetTexParameterxv",
+ "GetTransformFeedbackVarying",
+ "GetUniformBlockIndex",
+ "GetUniformfv",
+ "GetUniformfvARB",
+ "GetUniformIndices",
+ "GetUniformiv",
+ "GetUniformivARB",
+ "GetUniformLocation",
+ "GetUniformLocationARB",
+ "GetUniformuiv",
+ "GetUniformuivEXT",
+ "GetVertexAttribdv",
+ "GetVertexAttribdvARB",
+ "GetVertexAttribfv",
+ "GetVertexAttribfvARB",
+ "GetVertexAttribIiv",
+ "GetVertexAttribIivEXT",
+ "GetVertexAttribIuiv",
+ "GetVertexAttribIuivEXT",
+ "GetVertexAttribiv",
+ "GetVertexAttribivARB",
+ "GetVertexAttribPointerv",
+ "GetVertexAttribPointervARB",
+ "Hint",
+ "Histogram",
+ "Indexd",
+ "Indexdv",
+ "Indexf",
+ "Indexfv",
+ "Indexi",
+ "Indexiv",
+ "IndexMask",
+ "IndexPointer",
+ "IndexPointerEXT",
+ "Indexs",
+ "Indexsv",
+ "Indexub",
+ "Indexubv",
+ "InitNames",
+ "InterleavedArrays",
+ "InvalidateBufferData",
+ "InvalidateBufferSubData",
+ "InvalidateFramebuffer",
+ "InvalidateSubFramebuffer",
+ "InvalidateTexImage",
+ "InvalidateTexSubImage",
+ "IsBuffer",
+ "IsBufferARB",
+ "IsEnabled",
+ "IsEnabledi",
+ "IsEnabledIndexedEXT",
+ "IsFramebuffer",
+ "IsFramebufferEXT",
+ "IsList",
+ "IsProgram",
+ "IsProgramARB",
+ "IsQuery",
+ "IsQueryARB",
+ "IsRenderbuffer",
+ "IsRenderbufferEXT",
+ "IsSampler",
+ "IsShader",
+ "IsSync",
+ "IsTexture",
+ "IsTextureEXT",
+ "IsTransformFeedback",
+ "IsVertexArray",
+ "Lightf",
+ "Lightfv",
+ "Lighti",
+ "Lightiv",
+ "LightModelf",
+ "LightModelfv",
+ "LightModeli",
+ "LightModeliv",
+ "LightModelx",
+ "LightModelxv",
+ "Lightx",
+ "Lightxv",
+ "LineStipple",
+ "LineWidth",
+ "LineWidthx",
+ "LinkProgram",
+ "LinkProgramARB",
+ "ListBase",
+ "LoadIdentity",
+ "LoadMatrixd",
+ "LoadMatrixf",
+ "LoadMatrixx",
+ "LoadName",
+ "LoadTransposeMatrixd",
+ "LoadTransposeMatrixdARB",
+ "LoadTransposeMatrixf",
+ "LoadTransposeMatrixfARB",
+ "LockArraysEXT",
+ "LogicOp",
+ "Map1d",
+ "Map1f",
+ "Map2d",
+ "Map2f",
+ "MapBuffer",
+ "MapBufferARB",
+ "MapBufferRange",
+ "MapGrid1d",
+ "MapGrid1f",
+ "MapGrid2d",
+ "MapGrid2f",
+ "Materialf",
+ "Materialfv",
+ "Materiali",
+ "Materialiv",
+ "Materialx",
+ "Materialxv",
+ "MatrixMode",
+ "MemoryBarrier",
+ "Minmax",
+ "MinSampleShading",
+ "MinSampleShadingARB",
+ "MultiDrawArrays",
+ "MultiDrawArraysEXT",
+ "MultiDrawArraysIndirect",
+ "MultiDrawElements",
+ "MultiDrawElementsBaseVertex",
+ "MultiDrawElementsEXT",
+ "MultiDrawElementsIndirect",
+ "MultiTexCoord1d",
+ "MultiTexCoord1dARB",
+ "MultiTexCoord1dv",
+ "MultiTexCoord1dvARB",
+ "MultiTexCoord1f",
+ "MultiTexCoord1fARB",
+ "MultiTexCoord1fv",
+ "MultiTexCoord1fvARB",
+ "MultiTexCoord1i",
+ "MultiTexCoord1iARB",
+ "MultiTexCoord1iv",
+ "MultiTexCoord1ivARB",
+ "MultiTexCoord1s",
+ "MultiTexCoord1sARB",
+ "MultiTexCoord1sv",
+ "MultiTexCoord1svARB",
+ "MultiTexCoord2d",
+ "MultiTexCoord2dARB",
+ "MultiTexCoord2dv",
+ "MultiTexCoord2dvARB",
+ "MultiTexCoord2f",
+ "MultiTexCoord2fARB",
+ "MultiTexCoord2fv",
+ "MultiTexCoord2fvARB",
+ "MultiTexCoord2i",
+ "MultiTexCoord2iARB",
+ "MultiTexCoord2iv",
+ "MultiTexCoord2ivARB",
+ "MultiTexCoord2s",
+ "MultiTexCoord2sARB",
+ "MultiTexCoord2sv",
+ "MultiTexCoord2svARB",
+ "MultiTexCoord3d",
+ "MultiTexCoord3dARB",
+ "MultiTexCoord3dv",
+ "MultiTexCoord3dvARB",
+ "MultiTexCoord3f",
+ "MultiTexCoord3fARB",
+ "MultiTexCoord3fv",
+ "MultiTexCoord3fvARB",
+ "MultiTexCoord3i",
+ "MultiTexCoord3iARB",
+ "MultiTexCoord3iv",
+ "MultiTexCoord3ivARB",
+ "MultiTexCoord3s",
+ "MultiTexCoord3sARB",
+ "MultiTexCoord3sv",
+ "MultiTexCoord3svARB",
+ "MultiTexCoord4d",
+ "MultiTexCoord4dARB",
+ "MultiTexCoord4dv",
+ "MultiTexCoord4dvARB",
+ "MultiTexCoord4f",
+ "MultiTexCoord4fARB",
+ "MultiTexCoord4fv",
+ "MultiTexCoord4fvARB",
+ "MultiTexCoord4i",
+ "MultiTexCoord4iARB",
+ "MultiTexCoord4iv",
+ "MultiTexCoord4ivARB",
+ "MultiTexCoord4s",
+ "MultiTexCoord4sARB",
+ "MultiTexCoord4sv",
+ "MultiTexCoord4svARB",
+ "MultiTexCoord4x",
+ "MultiTexCoordP1ui",
+ "MultiTexCoordP1uiv",
+ "MultiTexCoordP2ui",
+ "MultiTexCoordP2uiv",
+ "MultiTexCoordP3ui",
+ "MultiTexCoordP3uiv",
+ "MultiTexCoordP4ui",
+ "MultiTexCoordP4uiv",
+ "MultMatrixd",
+ "MultMatrixf",
+ "MultMatrixx",
+ "MultTransposeMatrixd",
+ "MultTransposeMatrixdARB",
+ "MultTransposeMatrixf",
+ "MultTransposeMatrixfARB",
+ "NewList",
+ "Normal3b",
+ "Normal3bv",
+ "Normal3d",
+ "Normal3dv",
+ "Normal3f",
+ "Normal3fv",
+ "Normal3i",
+ "Normal3iv",
+ "Normal3s",
+ "Normal3sv",
+ "Normal3x",
+ "NormalP3ui",
+ "NormalP3uiv",
+ "NormalPointer",
+ "NormalPointerEXT",
+ "ObjectLabel",
+ "ObjectPtrLabel",
+ "Ortho",
+ "Orthof",
+ "Orthox",
+ "PassThrough",
+ "PauseTransformFeedback",
+ "PixelMapfv",
+ "PixelMapuiv",
+ "PixelMapusv",
+ "PixelStoref",
+ "PixelStorei",
+ "PixelTransferf",
+ "PixelTransferi",
+ "PixelZoom",
+ "PointParameterf",
+ "PointParameterfARB",
+ "PointParameterfEXT",
+ "PointParameterfv",
+ "PointParameterfvARB",
+ "PointParameterfvEXT",
+ "PointParameteri",
+ "PointParameteriv",
+ "PointParameterx",
+ "PointParameterxv",
+ "PointSize",
+ "PointSizePointerOES",
+ "PointSizex",
+ "PolygonMode",
+ "PolygonOffset",
+ "PolygonOffsetx",
+ "PolygonStipple",
+ "PopAttrib",
+ "PopClientAttrib",
+ "PopDebugGroup",
+ "PopMatrix",
+ "PopName",
+ "PrimitiveRestartIndex",
+ "PrimitiveRestartIndexNV",
+ "PrimitiveRestartNV",
+ "PrioritizeTextures",
+ "PrioritizeTexturesEXT",
+ "ProgramBinary",
+ "ProgramEnvParameter4dARB",
+ "ProgramEnvParameter4dvARB",
+ "ProgramEnvParameter4fARB",
+ "ProgramEnvParameter4fvARB",
+ "ProgramLocalParameter4dARB",
+ "ProgramLocalParameter4dvARB",
+ "ProgramLocalParameter4fARB",
+ "ProgramLocalParameter4fvARB",
+ "ProgramParameteri",
+ "ProgramParameteriARB",
+ "ProgramStringARB",
+ "ProvokingVertex",
+ "ProvokingVertexEXT",
+ "PushAttrib",
+ "PushClientAttrib",
+ "PushDebugGroup",
+ "PushMatrix",
+ "PushName",
+ "RasterPos2d",
+ "RasterPos2dv",
+ "RasterPos2f",
+ "RasterPos2fv",
+ "RasterPos2i",
+ "RasterPos2iv",
+ "RasterPos2s",
+ "RasterPos2sv",
+ "RasterPos3d",
+ "RasterPos3dv",
+ "RasterPos3f",
+ "RasterPos3fv",
+ "RasterPos3i",
+ "RasterPos3iv",
+ "RasterPos3s",
+ "RasterPos3sv",
+ "RasterPos4d",
+ "RasterPos4dv",
+ "RasterPos4f",
+ "RasterPos4fv",
+ "RasterPos4i",
+ "RasterPos4iv",
+ "RasterPos4s",
+ "RasterPos4sv",
+ "ReadBuffer",
+ "ReadnPixelsARB",
+ "ReadPixels",
+ "Rectd",
+ "Rectdv",
+ "Rectf",
+ "Rectfv",
+ "Recti",
+ "Rectiv",
+ "Rects",
+ "Rectsv",
+ "ReleaseShaderCompiler",
+ "RenderbufferStorage",
+ "RenderbufferStorageEXT",
+ "RenderbufferStorageMultisample",
+ "RenderbufferStorageMultisampleEXT",
+ "RenderMode",
+ "ResetHistogram",
+ "ResetMinmax",
+ "ResumeTransformFeedback",
+ "Rotated",
+ "Rotatef",
+ "Rotatex",
+ "SampleCoverage",
+ "SampleCoverageARB",
+ "SampleCoveragex",
+ "SampleMaski",
+ "SamplerParameterf",
+ "SamplerParameterfv",
+ "SamplerParameteri",
+ "SamplerParameterIiv",
+ "SamplerParameterIuiv",
+ "SamplerParameteriv",
+ "Scaled",
+ "Scalef",
+ "Scalex",
+ "Scissor",
+ "ScissorArrayv",
+ "ScissorIndexed",
+ "ScissorIndexedv",
+ "SecondaryColor3b",
+ "SecondaryColor3bEXT",
+ "SecondaryColor3bv",
+ "SecondaryColor3bvEXT",
+ "SecondaryColor3d",
+ "SecondaryColor3dEXT",
+ "SecondaryColor3dv",
+ "SecondaryColor3dvEXT",
+ "SecondaryColor3f",
+ "SecondaryColor3fEXT",
+ "SecondaryColor3fv",
+ "SecondaryColor3fvEXT",
+ "SecondaryColor3i",
+ "SecondaryColor3iEXT",
+ "SecondaryColor3iv",
+ "SecondaryColor3ivEXT",
+ "SecondaryColor3s",
+ "SecondaryColor3sEXT",
+ "SecondaryColor3sv",
+ "SecondaryColor3svEXT",
+ "SecondaryColor3ub",
+ "SecondaryColor3ubEXT",
+ "SecondaryColor3ubv",
+ "SecondaryColor3ubvEXT",
+ "SecondaryColor3ui",
+ "SecondaryColor3uiEXT",
+ "SecondaryColor3uiv",
+ "SecondaryColor3uivEXT",
+ "SecondaryColor3us",
+ "SecondaryColor3usEXT",
+ "SecondaryColor3usv",
+ "SecondaryColor3usvEXT",
+ "SecondaryColorP3ui",
+ "SecondaryColorP3uiv",
+ "SecondaryColorPointer",
+ "SecondaryColorPointerEXT",
+ "SelectBuffer",
+ "SeparableFilter2D",
+ "ShadeModel",
+ "ShaderBinary",
+ "ShaderSource",
+ "ShaderSourceARB",
+ "StencilFunc",
+ "StencilFuncSeparate",
+ "StencilMask",
+ "StencilMaskSeparate",
+ "StencilOp",
+ "StencilOpSeparate",
+ "TexBuffer",
+ "TexBufferARB",
+ "TexBufferRange",
+ "TexCoord1d",
+ "TexCoord1dv",
+ "TexCoord1f",
+ "TexCoord1fv",
+ "TexCoord1i",
+ "TexCoord1iv",
+ "TexCoord1s",
+ "TexCoord1sv",
+ "TexCoord2d",
+ "TexCoord2dv",
+ "TexCoord2f",
+ "TexCoord2fv",
+ "TexCoord2i",
+ "TexCoord2iv",
+ "TexCoord2s",
+ "TexCoord2sv",
+ "TexCoord3d",
+ "TexCoord3dv",
+ "TexCoord3f",
+ "TexCoord3fv",
+ "TexCoord3i",
+ "TexCoord3iv",
+ "TexCoord3s",
+ "TexCoord3sv",
+ "TexCoord4d",
+ "TexCoord4dv",
+ "TexCoord4f",
+ "TexCoord4fv",
+ "TexCoord4i",
+ "TexCoord4iv",
+ "TexCoord4s",
+ "TexCoord4sv",
+ "TexCoordP1ui",
+ "TexCoordP1uiv",
+ "TexCoordP2ui",
+ "TexCoordP2uiv",
+ "TexCoordP3ui",
+ "TexCoordP3uiv",
+ "TexCoordP4ui",
+ "TexCoordP4uiv",
+ "TexCoordPointer",
+ "TexCoordPointerEXT",
+ "TexEnvf",
+ "TexEnvfv",
+ "TexEnvi",
+ "TexEnviv",
+ "TexEnvx",
+ "TexEnvxv",
+ "TexGend",
+ "TexGendv",
+ "TexGenf",
+ "TexGenfv",
+ "TexGeni",
+ "TexGeniv",
+ "TexImage1D",
+ "TexImage2D",
+ "TexImage2DMultisample",
+ "TexImage3D",
+ "TexImage3DEXT",
+ "TexImage3DMultisample",
+ "TexParameterf",
+ "TexParameterfv",
+ "TexParameteri",
+ "TexParameterIiv",
+ "TexParameterIivEXT",
+ "TexParameterIuiv",
+ "TexParameterIuivEXT",
+ "TexParameteriv",
+ "TexParameterx",
+ "TexParameterxv",
+ "TexStorage1D",
+ "TexStorage2D",
+ "TexStorage2DMultisample",
+ "TexStorage3D",
+ "TexStorage3DMultisample",
+ "TexSubImage1D",
+ "TexSubImage2D",
+ "TexSubImage3D",
+ "TexSubImage3DEXT",
+ "TextureBarrierNV",
+ "TextureStorage1DEXT",
+ "TextureStorage2DEXT",
+ "TextureStorage3DEXT",
+ "TextureView",
+ "TransformFeedbackVaryings",
+ "Translated",
+ "Translatef",
+ "Translatex",
+ "Uniform1f",
+ "Uniform1fARB",
+ "Uniform1fv",
+ "Uniform1fvARB",
+ "Uniform1i",
+ "Uniform1iARB",
+ "Uniform1iv",
+ "Uniform1ivARB",
+ "Uniform1ui",
+ "Uniform1uiEXT",
+ "Uniform1uiv",
+ "Uniform1uivEXT",
+ "Uniform2f",
+ "Uniform2fARB",
+ "Uniform2fv",
+ "Uniform2fvARB",
+ "Uniform2i",
+ "Uniform2iARB",
+ "Uniform2iv",
+ "Uniform2ivARB",
+ "Uniform2ui",
+ "Uniform2uiEXT",
+ "Uniform2uiv",
+ "Uniform2uivEXT",
+ "Uniform3f",
+ "Uniform3fARB",
+ "Uniform3fv",
+ "Uniform3fvARB",
+ "Uniform3i",
+ "Uniform3iARB",
+ "Uniform3iv",
+ "Uniform3ivARB",
+ "Uniform3ui",
+ "Uniform3uiEXT",
+ "Uniform3uiv",
+ "Uniform3uivEXT",
+ "Uniform4f",
+ "Uniform4fARB",
+ "Uniform4fv",
+ "Uniform4fvARB",
+ "Uniform4i",
+ "Uniform4iARB",
+ "Uniform4iv",
+ "Uniform4ivARB",
+ "Uniform4ui",
+ "Uniform4uiEXT",
+ "Uniform4uiv",
+ "Uniform4uivEXT",
+ "UniformBlockBinding",
+ "UniformMatrix2fv",
+ "UniformMatrix2fvARB",
+ "UniformMatrix2x3fv",
+ "UniformMatrix2x4fv",
+ "UniformMatrix3fv",
+ "UniformMatrix3fvARB",
+ "UniformMatrix3x2fv",
+ "UniformMatrix3x4fv",
+ "UniformMatrix4fv",
+ "UniformMatrix4fvARB",
+ "UniformMatrix4x2fv",
+ "UniformMatrix4x3fv",
+ "UnlockArraysEXT",
+ "UnmapBuffer",
+ "UnmapBufferARB",
+ "UseProgram",
+ "UseProgramObjectARB",
+ "ValidateProgram",
+ "ValidateProgramARB",
+ "Vertex2d",
+ "Vertex2dv",
+ "Vertex2f",
+ "Vertex2fv",
+ "Vertex2i",
+ "Vertex2iv",
+ "Vertex2s",
+ "Vertex2sv",
+ "Vertex3d",
+ "Vertex3dv",
+ "Vertex3f",
+ "Vertex3fv",
+ "Vertex3i",
+ "Vertex3iv",
+ "Vertex3s",
+ "Vertex3sv",
+ "Vertex4d",
+ "Vertex4dv",
+ "Vertex4f",
+ "Vertex4fv",
+ "Vertex4i",
+ "Vertex4iv",
+ "Vertex4s",
+ "Vertex4sv",
+ "VertexAttrib1d",
+ "VertexAttrib1dARB",
+ "VertexAttrib1dv",
+ "VertexAttrib1dvARB",
+ "VertexAttrib1f",
+ "VertexAttrib1fARB",
+ "VertexAttrib1fv",
+ "VertexAttrib1fvARB",
+ "VertexAttrib1s",
+ "VertexAttrib1sARB",
+ "VertexAttrib1sv",
+ "VertexAttrib1svARB",
+ "VertexAttrib2d",
+ "VertexAttrib2dARB",
+ "VertexAttrib2dv",
+ "VertexAttrib2dvARB",
+ "VertexAttrib2f",
+ "VertexAttrib2fARB",
+ "VertexAttrib2fv",
+ "VertexAttrib2fvARB",
+ "VertexAttrib2s",
+ "VertexAttrib2sARB",
+ "VertexAttrib2sv",
+ "VertexAttrib2svARB",
+ "VertexAttrib3d",
+ "VertexAttrib3dARB",
+ "VertexAttrib3dv",
+ "VertexAttrib3dvARB",
+ "VertexAttrib3f",
+ "VertexAttrib3fARB",
+ "VertexAttrib3fv",
+ "VertexAttrib3fvARB",
+ "VertexAttrib3s",
+ "VertexAttrib3sARB",
+ "VertexAttrib3sv",
+ "VertexAttrib3svARB",
+ "VertexAttrib4bv",
+ "VertexAttrib4bvARB",
+ "VertexAttrib4d",
+ "VertexAttrib4dARB",
+ "VertexAttrib4dv",
+ "VertexAttrib4dvARB",
+ "VertexAttrib4f",
+ "VertexAttrib4fARB",
+ "VertexAttrib4fv",
+ "VertexAttrib4fvARB",
+ "VertexAttrib4iv",
+ "VertexAttrib4ivARB",
+ "VertexAttrib4Nbv",
+ "VertexAttrib4NbvARB",
+ "VertexAttrib4Niv",
+ "VertexAttrib4NivARB",
+ "VertexAttrib4Nsv",
+ "VertexAttrib4NsvARB",
+ "VertexAttrib4Nub",
+ "VertexAttrib4NubARB",
+ "VertexAttrib4Nubv",
+ "VertexAttrib4NubvARB",
+ "VertexAttrib4Nuiv",
+ "VertexAttrib4NuivARB",
+ "VertexAttrib4Nusv",
+ "VertexAttrib4NusvARB",
+ "VertexAttrib4s",
+ "VertexAttrib4sARB",
+ "VertexAttrib4sv",
+ "VertexAttrib4svARB",
+ "VertexAttrib4ubv",
+ "VertexAttrib4ubvARB",
+ "VertexAttrib4uiv",
+ "VertexAttrib4uivARB",
+ "VertexAttrib4usv",
+ "VertexAttrib4usvARB",
+ "VertexAttribBinding",
+ "VertexAttribDivisor",
+ "VertexAttribDivisorARB",
+ "VertexAttribFormat",
+ "VertexAttribI1i",
+ "VertexAttribI1iEXT",
+ "VertexAttribI1iv",
+ "VertexAttribI1ivEXT",
+ "VertexAttribI1ui",
+ "VertexAttribI1uiEXT",
+ "VertexAttribI1uiv",
+ "VertexAttribI1uivEXT",
+ "VertexAttribI2i",
+ "VertexAttribI2iEXT",
+ "VertexAttribI2iv",
+ "VertexAttribI2ivEXT",
+ "VertexAttribI2ui",
+ "VertexAttribI2uiEXT",
+ "VertexAttribI2uiv",
+ "VertexAttribI2uivEXT",
+ "VertexAttribI3i",
+ "VertexAttribI3iEXT",
+ "VertexAttribI3iv",
+ "VertexAttribI3ivEXT",
+ "VertexAttribI3ui",
+ "VertexAttribI3uiEXT",
+ "VertexAttribI3uiv",
+ "VertexAttribI3uivEXT",
+ "VertexAttribI4bv",
+ "VertexAttribI4bvEXT",
+ "VertexAttribI4i",
+ "VertexAttribI4iEXT",
+ "VertexAttribI4iv",
+ "VertexAttribI4ivEXT",
+ "VertexAttribI4sv",
+ "VertexAttribI4svEXT",
+ "VertexAttribI4ubv",
+ "VertexAttribI4ubvEXT",
+ "VertexAttribI4ui",
+ "VertexAttribI4uiEXT",
+ "VertexAttribI4uiv",
+ "VertexAttribI4uivEXT",
+ "VertexAttribI4usv",
+ "VertexAttribI4usvEXT",
+ "VertexAttribIFormat",
+ "VertexAttribIPointer",
+ "VertexAttribIPointerEXT",
+ "VertexAttribLFormat",
+ "VertexAttribP1ui",
+ "VertexAttribP1uiv",
+ "VertexAttribP2ui",
+ "VertexAttribP2uiv",
+ "VertexAttribP3ui",
+ "VertexAttribP3uiv",
+ "VertexAttribP4ui",
+ "VertexAttribP4uiv",
+ "VertexAttribPointer",
+ "VertexAttribPointerARB",
+ "VertexBindingDivisor",
+ "VertexP2ui",
+ "VertexP2uiv",
+ "VertexP3ui",
+ "VertexP3uiv",
+ "VertexP4ui",
+ "VertexP4uiv",
+ "VertexPointer",
+ "VertexPointerEXT",
+ "Viewport",
+ "ViewportArrayv",
+ "ViewportIndexedf",
+ "ViewportIndexedfv",
+ "WaitSync",
+ "WindowPos2d",
+ "WindowPos2dARB",
+ "WindowPos2dv",
+ "WindowPos2dvARB",
+ "WindowPos2f",
+ "WindowPos2fARB",
+ "WindowPos2fv",
+ "WindowPos2fvARB",
+ "WindowPos2i",
+ "WindowPos2iARB",
+ "WindowPos2iv",
+ "WindowPos2ivARB",
+ "WindowPos2s",
+ "WindowPos2sARB",
+ "WindowPos2sv",
+ "WindowPos2svARB",
+ "WindowPos3d",
+ "WindowPos3dARB",
+ "WindowPos3dv",
+ "WindowPos3dvARB",
+ "WindowPos3f",
+ "WindowPos3fARB",
+ "WindowPos3fv",
+ "WindowPos3fvARB",
+ "WindowPos3i",
+ "WindowPos3iARB",
+ "WindowPos3iv",
+ "WindowPos3ivARB",
+ "WindowPos3s",
+ "WindowPos3sARB",
+ "WindowPos3sv",
+ "WindowPos3svARB",
+]
+
+"""Functions that need dispatch slots but are not used
+
+Some of these functions may have GLX protocol support (for
+indirect-rendering). Other were used in previous versions of Mesa. They keep
+slots in the dispatch table so that newer versions of libGL can still be used
+with older drivers."""
+unused_functions = [
+ # SGIS_multisample
+ "SampleMaskSGIS",
+ "SamplePatternSGIS",
+
+ # NV_vertex_program
+ "AreProgramsResidentNV",
+ "ExecuteProgramNV",
+ "GetProgramParameterdvNV",
+ "GetProgramParameterfvNV",
+ "GetProgramivNV",
+ "GetProgramStringNV",
+ "GetTrackMatrixivNV",
+ "GetVertexAttribdvNV",
+ "GetVertexAttribfvNV",
+ "GetVertexAttribivNV",
+ "LoadProgramNV",
+ "ProgramParameters4dvNV",
+ "ProgramParameters4fvNV",
+ "RequestResidentProgramsNV",
+ "TrackMatrixNV",
+ "VertexAttribPointerNV",
+
+ # MESA_resize_buffers
+ "ResizeBuffersMESA",
+
+ # ATI_envmap_bumpmap
+ "TexBumpParameterfvATI",
+ "TexBumpParameterivATI",
+ "GetTexBumpParameterfvATI",
+ "GetTexBumpParameterivATI",
+
+ # NV_fragment_program
+ "ProgramNamedParameter4fNV",
+ "ProgramNamedParameter4dNV",
+ "ProgramNamedParameter4fvNV",
+ "ProgramNamedParameter4dvNV",
+ "GetProgramNamedParameterfvNV",
+ "GetProgramNamedParameterdvNV",
+
+ # APPLE_flush_buffer_range
+ "BufferParameteriAPPLE",
+ "FlushMappedBufferRangeAPPLE",
+
+ # EXT_separate_shader_objects
+ "UseShaderProgramEXT",
+ "ActiveProgramEXT",
+ "CreateShaderProgramEXT",
+]
diff --git a/mesalib/src/mesa/Android.gen.mk b/mesalib/src/mesa/Android.gen.mk
index cc979547e..145f2594c 100644
--- a/mesalib/src/mesa/Android.gen.mk
+++ b/mesalib/src/mesa/Android.gen.mk
@@ -115,9 +115,11 @@ $(intermediates)/main/api_exec.c: $(dispatch_deps)
GET_HASH_GEN := $(LOCAL_PATH)/main/get_hash_generator.py
+$(intermediates)/main/get_hash.h: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(GET_HASH_GEN)
+$(intermediates)/main/get_hash.h: PRIVATE_XML := -f $(glapi)/gl_and_es_API.xml
$(intermediates)/main/get_hash.h: $(glapi)/gl_and_es_API.xml \
$(LOCAL_PATH)/main/get_hash_params.py $(GET_HASH_GEN)
- @$(MESA_PYTHON2) $(GET_HASH_GEN) -f $< > $@
+ $(call es-gen)
FORMAT_INFO := $(LOCAL_PATH)/main/format_info.py
format_info_deps := \
@@ -125,8 +127,10 @@ format_info_deps := \
$(LOCAL_PATH)/main/format_parser.py \
$(FORMAT_INFO)
+$(intermediates)/main/format_info.h: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(FORMAT_INFO)
+$(intermediates)/main/format_info.h: PRIVATE_XML :=
$(intermediates)/main/format_info.h: $(format_info_deps)
- @$(MESA_PYTHON2) $(FORMAT_INFO) $< > $@
+ $(call es-gen, $<)
FORMAT_PACK := $(LOCAL_PATH)/main/format_pack.py
format_pack_deps := \
@@ -134,8 +138,10 @@ format_pack_deps := \
$(LOCAL_PATH)/main/format_parser.py \
$(FORMAT_PACK)
+$(intermediates)/main/format_pack.c: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(FORMAT_PACK)
+$(intermediates)/main/format_pack.c: PRIVATE_XML :=
$(intermediates)/main/format_pack.c: $(format_pack_deps)
- $(hide) $(MESA_PYTHON2) $(FORMAT_PACK) $< > $@
+ $(call es-gen, $<)
FORMAT_UNPACK := $(LOCAL_PATH)/main/format_unpack.py
format_unpack_deps := \
@@ -143,5 +149,7 @@ format_unpack_deps := \
$(LOCAL_PATH)/main/format_parser.py \
$(FORMAT_UNPACK)
+$(intermediates)/main/format_unpack.c: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(FORMAT_UNPACK)
+$(intermediates)/main/format_unpack.c: PRIVATE_XML :=
$(intermediates)/main/format_unpack.c: $(format_unpack_deps)
- $(hide) $(MESA_PYTHON2) $(FORMAT_UNPACK) $< > $@
+ $(call es-gen, $<)
diff --git a/mesalib/src/mesa/Android.libmesa_glsl_utils.mk b/mesalib/src/mesa/Android.libmesa_glsl_utils.mk
index 3497377af..ed620ac64 100644
--- a/mesalib/src/mesa/Android.libmesa_glsl_utils.mk
+++ b/mesalib/src/mesa/Android.libmesa_glsl_utils.mk
@@ -44,7 +44,8 @@ LOCAL_C_INCLUDES := \
LOCAL_SRC_FILES := \
main/imports.c \
program/prog_hash_table.c \
- program/symbol_table.c
+ program/symbol_table.c \
+ program/dummy_errors.c
include $(MESA_COMMON_MK)
include $(BUILD_STATIC_LIBRARY)
@@ -68,7 +69,8 @@ LOCAL_C_INCLUDES := \
LOCAL_SRC_FILES := \
main/imports.c \
program/prog_hash_table.c \
- program/symbol_table.c
+ program/symbol_table.c \
+ program/dummy_errors.c
include $(MESA_COMMON_MK)
include $(BUILD_HOST_STATIC_LIBRARY)
diff --git a/mesalib/src/mesa/Makefile.am b/mesalib/src/mesa/Makefile.am
index 60114e4f6..71794b5da 100644
--- a/mesalib/src/mesa/Makefile.am
+++ b/mesalib/src/mesa/Makefile.am
@@ -60,7 +60,6 @@ main/git_sha1.h: main/git_sha1.h.tmp
include Makefile.sources
EXTRA_DIST = \
- drivers/haiku \
drivers/SConscript \
main/format_info.py \
main/format_pack.py \
diff --git a/mesalib/src/mesa/drivers/SConscript b/mesalib/src/mesa/drivers/SConscript
index db656780c..5d654f538 100644
--- a/mesalib/src/mesa/drivers/SConscript
+++ b/mesalib/src/mesa/drivers/SConscript
@@ -8,6 +8,3 @@ if env['dri']:
'dri/common/xmlpool/SConscript',
'dri/common/SConscript',
])
-
-if env['platform'] == 'haiku':
- SConscript('haiku/swrast/SConscript')
diff --git a/mesalib/src/mesa/drivers/common/meta_blit.c b/mesalib/src/mesa/drivers/common/meta_blit.c
index bb2164276..9cace2b24 100755
--- a/mesalib/src/mesa/drivers/common/meta_blit.c
+++ b/mesalib/src/mesa/drivers/common/meta_blit.c
@@ -82,7 +82,7 @@ setup_glsl_msaa_blit_scaled_shader(struct gl_context *ctx,
y_scale = samples * 0.5;
/* We expect only power of 2 samples in source multisample buffer. */
- assert(samples > 0 && (samples & (samples - 1)) == 0);
+ assert(samples > 0 && is_power_of_two(samples));
while (samples >> (shader_offset + 1)) {
shader_offset++;
}
@@ -263,7 +263,7 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
}
/* We expect only power of 2 samples in source multisample buffer. */
- assert(samples > 0 && (samples & (samples - 1)) == 0);
+ assert(samples > 0 && is_power_of_two(samples));
while (samples >> (shader_offset + 1)) {
shader_offset++;
}
@@ -434,7 +434,7 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
* (so the floating point exponent just gets increased), rather than
* doing a naive sum and dividing.
*/
- assert((samples & (samples - 1)) == 0);
+ assert(is_power_of_two(samples));
/* Fetch each individual sample. */
sample_resolve = rzalloc_size(mem_ctx, 1);
for (i = 0; i < samples; i++) {
diff --git a/mesalib/src/mesa/drivers/common/meta_tex_subimage.c b/mesalib/src/mesa/drivers/common/meta_tex_subimage.c
index ad6e7873e..d2474f527 100644
--- a/mesalib/src/mesa/drivers/common/meta_tex_subimage.c
+++ b/mesalib/src/mesa/drivers/common/meta_tex_subimage.c
@@ -34,6 +34,7 @@
#include "macros.h"
#include "meta.h"
#include "pbo.h"
+#include "readpix.h"
#include "shaderapi.h"
#include "state.h"
#include "teximage.h"
@@ -150,7 +151,8 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx, GLuint dims,
bool success = false;
int z;
- if (!_mesa_is_bufferobj(packing->BufferObj) && !create_pbo)
+ if (!_mesa_is_bufferobj(packing->BufferObj) &&
+ (!create_pbo || pixels == NULL))
return false;
if (format == GL_DEPTH_COMPONENT ||
@@ -257,6 +259,7 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims,
GLuint pbo = 0, pbo_tex = 0, fbos[2] = { 0, 0 };
int full_height, image_height;
struct gl_texture_image *pbo_tex_image;
+ struct gl_renderbuffer *rb = NULL;
GLenum status;
bool success = false;
int z;
@@ -273,6 +276,13 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims,
if (ctx->_ImageTransferState)
return false;
+
+ if (!tex_image) {
+ rb = ctx->ReadBuffer->_ColorReadBuffer;
+ if (_mesa_need_rgb_to_luminance_conversion(rb->Format, format))
+ return false;
+ }
+
/* For arrays, use a tall (height * depth) 2D texture but taking into
* account the inter-image padding specified with the image height packing
* property.
diff --git a/mesalib/src/mesa/drivers/dri/Makefile.am b/mesalib/src/mesa/drivers/dri/Makefile.am
index fa1de103b..08a8e6455 100644
--- a/mesalib/src/mesa/drivers/dri/Makefile.am
+++ b/mesalib/src/mesa/drivers/dri/Makefile.am
@@ -60,6 +60,7 @@ mesa_dri_drivers_la_LIBADD = \
../../libmesa.la \
common/libmegadriver_stub.la \
common/libdricommon.la \
+ common/libxmlconfig.la \
$(MEGADRIVERS_DEPS) \
$(DRI_LIB_DEPS) \
$()
diff --git a/mesalib/src/mesa/drivers/dri/common/Android.mk b/mesalib/src/mesa/drivers/dri/common/Android.mk
index a7fcd6d57..6986f5e8c 100644
--- a/mesalib/src/mesa/drivers/dri/common/Android.mk
+++ b/mesalib/src/mesa/drivers/dri/common/Android.mk
@@ -39,7 +39,9 @@ intermediates := $(call local-generated-sources-dir)
LOCAL_C_INCLUDES := \
$(MESA_DRI_C_INCLUDES)
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
+LOCAL_EXPORT_C_INCLUDE_DIRS := \
+ $(LOCAL_PATH) \
+ $(intermediates)
# swrast only
ifeq ($(MESA_GPU_DRIVERS),swrast)
@@ -48,7 +50,9 @@ else
LOCAL_SHARED_LIBRARIES := libdrm
endif
-LOCAL_SRC_FILES := $(DRI_COMMON_FILES)
+LOCAL_SRC_FILES := \
+ $(DRI_COMMON_FILES) \
+ $(XMLCONFIG_FILES)
MESA_DRI_OPTIONS_H := $(intermediates)/xmlpool/options.h
LOCAL_GENERATED_SOURCES := $(MESA_DRI_OPTIONS_H)
diff --git a/mesalib/src/mesa/drivers/dri/common/Makefile.am b/mesalib/src/mesa/drivers/dri/common/Makefile.am
index da8f97a98..ae19fcb35 100644
--- a/mesalib/src/mesa/drivers/dri/common/Makefile.am
+++ b/mesalib/src/mesa/drivers/dri/common/Makefile.am
@@ -33,16 +33,20 @@ AM_CFLAGS = \
-I$(top_srcdir)/src/gallium/include \
-I$(top_srcdir)/src/gallium/auxiliary \
$(DEFINES) \
- $(EXPAT_CFLAGS) \
$(VISIBILITY_CFLAGS)
noinst_LTLIBRARIES = \
libdricommon.la \
+ libxmlconfig.la \
libmegadriver_stub.la \
libdri_test_stubs.la
libdricommon_la_SOURCES = $(DRI_COMMON_FILES)
+libxmlconfig_la_SOURCES = $(XMLCONFIG_FILES)
+libxmlconfig_la_CFLAGS = $(AM_CFLAGS) $(EXPAT_CFLAGS)
+libxmlconfig_la_LIBADD = $(EXPAT_LIBS) -lm
+
libdri_test_stubs_la_SOURCES = $(test_stubs_FILES)
libdri_test_stubs_la_CFLAGS = $(AM_CFLAGS) -DNO_MAIN
diff --git a/mesalib/src/mesa/drivers/dri/common/Makefile.sources b/mesalib/src/mesa/drivers/dri/common/Makefile.sources
index d00ec5f73..d5d8da8fc 100644
--- a/mesalib/src/mesa/drivers/dri/common/Makefile.sources
+++ b/mesalib/src/mesa/drivers/dri/common/Makefile.sources
@@ -2,7 +2,9 @@ DRI_COMMON_FILES := \
utils.c \
utils.h \
dri_util.c \
- dri_util.h \
+ dri_util.h
+
+XMLCONFIG_FILES := \
xmlconfig.c \
xmlconfig.h
diff --git a/mesalib/src/mesa/drivers/dri/common/SConscript b/mesalib/src/mesa/drivers/dri/common/SConscript
index 0bee1b41f..b402736db 100644
--- a/mesalib/src/mesa/drivers/dri/common/SConscript
+++ b/mesalib/src/mesa/drivers/dri/common/SConscript
@@ -37,7 +37,7 @@ drienv.PkgUseModules('DRM')
# else
#env.Append(CPPDEFINES = ['__NOT_HAVE_DRM_H'])
-sources = drienv.ParseSourceList('Makefile.sources', 'DRI_COMMON_FILES')
+sources = drienv.ParseSourceList('Makefile.sources', ['DRI_COMMON_FILES', 'XMLCONFIG_FILES' ])
dri_common = drienv.ConvenienceLibrary(
target = 'dri_common',
diff --git a/mesalib/src/mesa/drivers/dri/common/dri_util.c b/mesalib/src/mesa/drivers/dri/common/dri_util.c
index 28923319d..a554a4ffa 100755
--- a/mesalib/src/mesa/drivers/dri/common/dri_util.c
+++ b/mesalib/src/mesa/drivers/dri/common/dri_util.c
@@ -116,8 +116,10 @@ driCreateNewScreen2(int scrn, int fd,
{
static const __DRIextension *emptyExtensionList[] = { NULL };
__DRIscreen *psp;
- int gl_version_override;
- int i;
+ struct gl_constants consts = { 0 };
+ gl_api api;
+ unsigned version;
+ int i;
psp = calloc(1, sizeof(*psp));
if (!psp)
@@ -164,13 +166,17 @@ driCreateNewScreen2(int scrn, int fd,
return NULL;
}
- gl_version_override = _mesa_get_gl_version_override();
- if (gl_version_override >= 31) {
- psp->max_gl_core_version = MAX2(psp->max_gl_core_version,
- gl_version_override);
- } else {
- psp->max_gl_compat_version = MAX2(psp->max_gl_compat_version,
- gl_version_override);
+ api = API_OPENGLES2;
+ if (_mesa_override_gl_version_contextless(&consts, &api, &version))
+ psp->max_gl_es2_version = version;
+
+ api = API_OPENGL_COMPAT;
+ if (_mesa_override_gl_version_contextless(&consts, &api, &version)) {
+ if (api == API_OPENGL_CORE) {
+ psp->max_gl_core_version = version;
+ } else {
+ psp->max_gl_compat_version = version;
+ }
}
psp->api_mask = (1 << __DRI_API_OPENGL);
diff --git a/mesalib/src/mesa/drivers/dri/swrast/swrast.c b/mesalib/src/mesa/drivers/dri/swrast/swrast.c
index edd0c00f0..1be420b6a 100755
--- a/mesalib/src/mesa/drivers/dri/swrast/swrast.c
+++ b/mesalib/src/mesa/drivers/dri/swrast/swrast.c
@@ -67,6 +67,9 @@
#include "swrast/s_context.h"
#include <sys/types.h>
+#ifdef HAVE_SYS_SYSCTL_H
+# include <sys/sysctl.h>
+#endif
PUBLIC const __DRIextension **__driDriverGetExtensions_swrast(void);
diff --git a/mesalib/src/mesa/drivers/haiku/swrast/SConscript b/mesalib/src/mesa/drivers/haiku/swrast/SConscript
deleted file mode 100644
index 907325e32..000000000
--- a/mesalib/src/mesa/drivers/haiku/swrast/SConscript
+++ /dev/null
@@ -1,33 +0,0 @@
-Import('*')
-
-env = env.Clone()
-
-env.Append(CPPPATH = [
- '#/src',
- '#/src/mapi',
- '#/src/mesa',
- '#/src/mesa/main',
- '#/include/HaikuGL',
- '/boot/system/develop/headers/private',
- Dir('../../../mapi'), # src/mapi build path for python-generated GL API files/headers
-])
-
-env.Prepend(LIBS = [
- mesautil,
- glsl,
- mesa,
-])
-
-env.Prepend(LIBS = [libgl])
-
-sources = [
- 'SoftwareRast.cpp'
-]
-
-# Disallow undefined symbols
-#env.Append(SHLINKFLAGS = ['-Wl,-z,defs'])
-
-libswrast = env.SharedLibrary(
- target = 'swrast',
- source = sources
-)
diff --git a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp b/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp
deleted file mode 100644
index 813ad1ff2..000000000
--- a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.cpp
+++ /dev/null
@@ -1,697 +0,0 @@
-/*
- * Copyright 2006-2012, Haiku, Inc. All rights reserved.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Jérôme Duval, korli@users.berlios.de
- * Philippe Houdoin, philippe.houdoin@free.fr
- * Artur Wyszynski, harakash@gmail.com
- * Alexander von Gluck, kallisti5@unixzen.com
- */
-
-
-#include <kernel/image.h>
-#include "SoftwareRast.h"
-
-#include <Autolock.h>
-#include <interface/DirectWindowPrivate.h>
-#include <GraphicsDefs.h>
-#include <Screen.h>
-#include <stdio.h>
-#include <string.h>
-
-extern "C" {
-#include "extensions.h"
-#include "drivers/common/driverfuncs.h"
-#include "drivers/common/meta.h"
-#include "main/api_exec.h"
-#include "main/colormac.h"
-#include "main/cpuinfo.h"
-#include "main/buffers.h"
-#include "main/formats.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "main/version.h"
-#include "main/vtxfmt.h"
-#include "swrast/swrast.h"
-#include "swrast/s_renderbuffer.h"
-#include "swrast_setup/swrast_setup.h"
-#include "tnl/tnl.h"
-#include "tnl/t_context.h"
-#include "tnl/t_pipeline.h"
-#include "vbo/vbo.h"
-
-
-#ifdef DEBUG
-# define TRACE(x...) printf("MesaSoftwareRast: " x)
-# define CALLED() printf("MesaSoftwareRast: %s\n", __PRETTY_FUNCTION__)
-#else
-# define TRACE(x...)
-# define CALLED()
-#endif
-
-#define ERROR(x...) printf("MesaSoftwareRast: " x)
-}
-
-
-extern const char* color_space_name(color_space space);
-
-
-extern "C" _EXPORT BGLRenderer*
-instantiate_gl_renderer(BGLView* view, ulong options,
- BGLDispatcher* dispatcher)
-{
- return new MesaSoftwareRast(view, options, dispatcher);
-}
-
-
-MesaSoftwareRast::MesaSoftwareRast(BGLView* view, ulong options,
- BGLDispatcher* dispatcher)
- : BGLRenderer(view, options, dispatcher),
- fBitmap(NULL),
- fDirectModeEnabled(false),
- fInfo(NULL),
- fInfoLocker("info locker"),
- fVisual(NULL),
- fFrameBuffer(NULL),
- fFrontRenderBuffer(NULL),
- fBackRenderBuffer(NULL),
- fColorSpace(B_NO_COLOR_SPACE)
-{
- CALLED();
-
- fColorSpace = BScreen(GLView()->Window()).ColorSpace();
-
- // We force single buffering for the time being
- options &= ~BGL_DOUBLE;
-
- const GLboolean rgbFlag = ((options & BGL_INDEX) == 0);
- const GLboolean alphaFlag = ((options & BGL_ALPHA) == BGL_ALPHA);
- const GLboolean dblFlag = ((options & BGL_DOUBLE) == BGL_DOUBLE);
- const GLboolean stereoFlag = false;
- const GLint depth = (options & BGL_DEPTH) ? 16 : 0;
- const GLint stencil = (options & BGL_STENCIL) ? 8 : 0;
- const GLint accum = (options & BGL_ACCUM) ? 16 : 0;
- const GLint red = rgbFlag ? 8 : 0;
- const GLint green = rgbFlag ? 8 : 0;
- const GLint blue = rgbFlag ? 8 : 0;
- const GLint alpha = alphaFlag ? 8 : 0;
-
- fOptions = options; // | BGL_INDIRECT;
- struct dd_function_table functions;
-
- fVisual = _mesa_create_visual(dblFlag, stereoFlag, red, green,
- blue, alpha, depth, stencil, accum, accum, accum,
- alpha ? accum : 0, 1);
-
- // Initialize device driver function table
- _mesa_init_driver_functions(&functions);
-
- functions.GetString = _GetString;
- functions.UpdateState = _UpdateState;
- functions.MapRenderbuffer = _RenderBufferMap;
- functions.Flush = _Flush;
-
- // create core context
- // We inherit gl_context to this class
- _mesa_initialize_context(this, API_OPENGL_COMPAT, fVisual, NULL,
- &functions);
-
- /* Initialize the software rasterizer and helper modules. */
- _swrast_CreateContext(this);
- _vbo_CreateContext(this);
- _tnl_CreateContext(this);
- _swsetup_CreateContext(this);
- _swsetup_Wakeup(this);
-
- // Use default TCL pipeline
- TNL_CONTEXT(this)->Driver.RunPipeline = _tnl_run_pipeline;
-
- _mesa_meta_init(this);
- _mesa_enable_sw_extensions(this);
-
- _mesa_compute_version(this);
-
- _mesa_initialize_dispatch_tables(this);
- _mesa_initialize_vbo_vtxfmt(this);
-
- // create core framebuffer
- fFrameBuffer = _mesa_create_framebuffer(fVisual);
- if (fFrameBuffer == NULL) {
- ERROR("%s: Unable to calloc GL FrameBuffer!\n", __func__);
- _mesa_destroy_visual(fVisual);
- return;
- }
-
- // Setup front render buffer
- fFrontRenderBuffer = _NewRenderBuffer(true);
- if (fFrontRenderBuffer == NULL) {
- ERROR("%s: FrontRenderBuffer is requested but unallocated!\n",
- __func__);
- _mesa_destroy_visual(fVisual);
- free(fFrameBuffer);
- return;
- }
- _mesa_add_renderbuffer(fFrameBuffer, BUFFER_FRONT_LEFT,
- &fFrontRenderBuffer->Base);
-
- // Setup back render buffer (if requested)
- if (fVisual->doubleBufferMode) {
- fBackRenderBuffer = _NewRenderBuffer(false);
- if (fBackRenderBuffer == NULL) {
- ERROR("%s: BackRenderBuffer is requested but unallocated!\n",
- __func__);
- _mesa_destroy_visual(fVisual);
- free(fFrameBuffer);
- return;
- }
- _mesa_add_renderbuffer(fFrameBuffer, BUFFER_BACK_LEFT,
- &fBackRenderBuffer->Base);
- }
-
- _swrast_add_soft_renderbuffers(fFrameBuffer, GL_FALSE,
- fVisual->haveDepthBuffer, fVisual->haveStencilBuffer,
- fVisual->haveAccumBuffer, alphaFlag, GL_FALSE);
-
- BRect bounds = view->Bounds();
- fWidth = (GLint)bounds.Width();
- fHeight = (GLint)bounds.Height();
-
- // some stupid applications (Quake2) don't even think about calling LockGL()
- // before using glGetString and its glGet*() friends...
- // so make sure there is at least a valid context.
-
- if (!_mesa_get_current_context()) {
- LockGL();
- // not needed, we don't have a looper yet: UnlockLooper();
- }
-}
-
-
-MesaSoftwareRast::~MesaSoftwareRast()
-{
- CALLED();
- _swsetup_DestroyContext(this);
- _swrast_DestroyContext(this);
- _tnl_DestroyContext(this);
- _vbo_DestroyContext(this);
- _mesa_destroy_visual(fVisual);
- _mesa_destroy_framebuffer(fFrameBuffer);
- _mesa_destroy_context(this);
-
- free(fInfo);
- free(fFrameBuffer);
-
- delete fBitmap;
-}
-
-
-void
-MesaSoftwareRast::LockGL()
-{
- CALLED();
- BGLRenderer::LockGL();
-
- _mesa_make_current(this, fFrameBuffer, fFrameBuffer);
-
- color_space colorSpace = BScreen(GLView()->Window()).ColorSpace();
-
- GLuint width = fWidth;
- GLuint height = fHeight;
-
- BAutolock lock(fInfoLocker);
- if (fDirectModeEnabled && fInfo != NULL) {
- width = fInfo->window_bounds.right
- - fInfo->window_bounds.left + 1;
- height = fInfo->window_bounds.bottom
- - fInfo->window_bounds.top + 1;
- }
-
- if (fColorSpace != colorSpace) {
- fColorSpace = colorSpace;
- _SetupRenderBuffer(&fFrontRenderBuffer->Base, fColorSpace);
- if (fVisual->doubleBufferMode)
- _SetupRenderBuffer(&fBackRenderBuffer->Base, fColorSpace);
- }
-
- _CheckResize(width, height);
-}
-
-
-void
-MesaSoftwareRast::UnlockGL()
-{
- CALLED();
- _mesa_make_current(this, NULL, NULL);
- BGLRenderer::UnlockGL();
-}
-
-
-void
-MesaSoftwareRast::SwapBuffers(bool VSync)
-{
- CALLED();
-
- if (!fBitmap)
- return;
-
- if (fVisual->doubleBufferMode)
- _mesa_notifySwapBuffers(this);
-
- if (!fDirectModeEnabled || fInfo == NULL) {
- if (GLView()->LockLooperWithTimeout(1000) == B_OK) {
- GLView()->DrawBitmap(fBitmap, B_ORIGIN);
- GLView()->UnlockLooper();
- }
- } else {
- // TODO: Here the BGLView needs to be drawlocked.
- _CopyToDirect();
- }
-
- if (VSync) {
- BScreen screen(GLView()->Window());
- screen.WaitForRetrace();
- }
-}
-
-
-void
-MesaSoftwareRast::Draw(BRect updateRect)
-{
- CALLED();
- if (fBitmap && (!fDirectModeEnabled || (fInfo == NULL)))
- GLView()->DrawBitmap(fBitmap, updateRect, updateRect);
-}
-
-
-status_t
-MesaSoftwareRast::CopyPixelsOut(BPoint location, BBitmap* bitmap)
-{
- CALLED();
- color_space scs = fBitmap->ColorSpace();
- color_space dcs = bitmap->ColorSpace();
-
- if (scs != dcs && (scs != B_RGBA32 || dcs != B_RGB32)) {
- fprintf(stderr, "CopyPixelsOut(): incompatible color space: %s != %s\n",
- color_space_name(scs),
- color_space_name(dcs));
- return B_BAD_TYPE;
- }
-
- BRect sr = fBitmap->Bounds();
- BRect dr = bitmap->Bounds();
-
- sr = sr & dr.OffsetBySelf(location);
- dr = sr.OffsetByCopy(-location.x, -location.y);
-
- uint8* ps = (uint8*)fBitmap->Bits();
- uint8* pd = (uint8*)bitmap->Bits();
- uint32* s;
- uint32* d;
- uint32 y;
- for (y = (uint32)sr.top; y <= (uint32)sr.bottom; y++) {
- s = (uint32*)(ps + y * fBitmap->BytesPerRow());
- s += (uint32)sr.left;
-
- d = (uint32*)(pd + (y + (uint32)(dr.top - sr.top))
- * bitmap->BytesPerRow());
- d += (uint32)dr.left;
-
- memcpy(d, s, dr.IntegerWidth() * 4);
- }
- return B_OK;
-}
-
-
-status_t
-MesaSoftwareRast::CopyPixelsIn(BBitmap* bitmap, BPoint location)
-{
- CALLED();
- color_space scs = bitmap->ColorSpace();
- color_space dcs = fBitmap->ColorSpace();
-
- if (scs != dcs && (dcs != B_RGBA32 || scs != B_RGB32)) {
- fprintf(stderr, "CopyPixelsIn(): incompatible color space: %s != %s\n",
- color_space_name(scs),
- color_space_name(dcs));
- return B_BAD_TYPE;
- }
-
- BRect sr = bitmap->Bounds();
- BRect dr = fBitmap->Bounds();
-
- sr = sr & dr.OffsetBySelf(location);
- dr = sr.OffsetByCopy(-location.x, -location.y);
-
- uint8* ps = (uint8*)bitmap->Bits();
- uint8* pd = (uint8*)fBitmap->Bits();
- uint32* s;
- uint32* d;
- uint32 y;
- for (y = (uint32)sr.top; y <= (uint32)sr.bottom; y++) {
- s = (uint32*)(ps + y * bitmap->BytesPerRow());
- s += (uint32)sr.left;
-
- d = (uint32*)(pd + (y + (uint32)(dr.top - sr.top))
- * fBitmap->BytesPerRow());
- d += (uint32)dr.left;
-
- memcpy(d, s, dr.IntegerWidth() * 4);
- }
- return B_OK;
-}
-
-
-void
-MesaSoftwareRast::EnableDirectMode(bool enabled)
-{
- fDirectModeEnabled = enabled;
-}
-
-
-void
-MesaSoftwareRast::DirectConnected(direct_buffer_info* info)
-{
- // TODO: I'm not sure we need to do this: BGLView already
- // keeps a local copy of the direct_buffer_info passed by
- // BDirectWindow::DirectConnected().
- BAutolock lock(fInfoLocker);
- if (info) {
- if (!fInfo) {
- fInfo = (direct_buffer_info*)malloc(DIRECT_BUFFER_INFO_AREA_SIZE);
- if (!fInfo)
- return;
- }
- memcpy(fInfo, info, DIRECT_BUFFER_INFO_AREA_SIZE);
- } else if (fInfo) {
- free(fInfo);
- fInfo = NULL;
- }
-}
-
-
-void
-MesaSoftwareRast::FrameResized(float width, float height)
-{
- BAutolock lock(fInfoLocker);
- _CheckResize((GLuint)width, (GLuint)height);
-}
-
-
-void
-MesaSoftwareRast::_CheckResize(GLuint newWidth, GLuint newHeight)
-{
- CALLED();
-
- if (fBitmap && newWidth == fWidth
- && newHeight == fHeight) {
- return;
- }
-
- _mesa_resize_framebuffer(this, fFrameBuffer, newWidth, newHeight);
- fHeight = newHeight;
- fWidth = newWidth;
-
- _AllocateBitmap();
-}
-
-
-void
-MesaSoftwareRast::_AllocateBitmap()
-{
- CALLED();
-
- // allocate new size of back buffer bitmap
- delete fBitmap;
- fBitmap = NULL;
-
- if (fWidth < 1 || fHeight < 1) {
- TRACE("%s: Cannot allocate bitmap < 1x1!\n", __func__);
- return;
- }
-
- BRect rect(0.0, 0.0, fWidth - 1, fHeight - 1);
- fBitmap = new BBitmap(rect, fColorSpace);
-
- #if 0
- // Used for platform optimized drawing
- for (uint i = 0; i < fHeight; i++) {
- fRowAddr[fHeight - i - 1] = (GLvoid *)((GLubyte *)fBitmap->Bits()
- + i * fBitmap->BytesPerRow());
- }
- #endif
-
- fFrameBuffer->Width = fWidth;
- fFrameBuffer->Height = fHeight;
- TRACE("%s: Bitmap Size: %" B_PRIu32 "\n", __func__, fBitmap->BitsLength());
-
- fFrontRenderBuffer->Buffer = (GLubyte*)fBitmap->Bits();
-}
-
-
-// #pragma mark - static
-
-
-const GLubyte*
-MesaSoftwareRast::_GetString(gl_context* ctx, GLenum name)
-{
- switch (name) {
- case GL_VENDOR:
- return (const GLubyte*) "Mesa Project";
- case GL_RENDERER:
- return (const GLubyte*) "Software Rasterizer";
- default:
- // Let core library handle all other cases
- return NULL;
- }
-}
-
-
-void
-MesaSoftwareRast::_UpdateState(gl_context* ctx, GLuint new_state)
-{
- if (!ctx)
- return;
-
- CALLED();
- _swrast_InvalidateState(ctx, new_state);
- _swsetup_InvalidateState(ctx, new_state);
- _vbo_InvalidateState(ctx, new_state);
- _tnl_InvalidateState(ctx, new_state);
-}
-
-
-GLboolean
-MesaSoftwareRast::_RenderBufferStorage(gl_context* ctx,
- struct gl_renderbuffer* render, GLenum internalFormat,
- GLuint width, GLuint height)
-{
- CALLED();
-
- render->Width = width;
- render->Height = height;
-
- struct swrast_renderbuffer *swRenderBuffer = swrast_renderbuffer(render);
-
- swRenderBuffer->RowStride = width * _mesa_get_format_bytes(render->Format);
-
- return GL_TRUE;
-}
-
-
-GLboolean
-MesaSoftwareRast::_RenderBufferStorageMalloc(gl_context* ctx,
- struct gl_renderbuffer* render, GLenum internalFormat,
- GLuint width, GLuint height)
-{
- CALLED();
-
- render->Width = width;
- render->Height = height;
-
- struct swrast_renderbuffer *swRenderBuffer = swrast_renderbuffer(render);
-
- if (swRenderBuffer != NULL) {
- free(swRenderBuffer->Buffer);
- swRenderBuffer->RowStride
- = width * _mesa_get_format_bytes(render->Format);
-
- uint32 size = swRenderBuffer->RowStride * height;
- TRACE("%s: Allocate %" B_PRIu32 " bytes for RenderBuffer\n",
- __func__, size);
- swRenderBuffer->Buffer = (GLubyte*)malloc(size);
- if (!swRenderBuffer->Buffer) {
- ERROR("%s: Memory allocation failure!\n", __func__);
- return GL_FALSE;
- }
- } else {
- ERROR("%s: Couldn't obtain software renderbuffer!\n",
- __func__);
- return GL_FALSE;
- }
-
- return GL_TRUE;
-}
-
-
-void
-MesaSoftwareRast::_Flush(gl_context* ctx)
-{
- CALLED();
- MesaSoftwareRast* driverContext = static_cast<MesaSoftwareRast*>(ctx);
-
- //MesaSoftwareRast* driverContext = (MesaSoftwareRast*)ctx->DriverCtx;
- if ((driverContext->fOptions & BGL_DOUBLE) == 0) {
- // TODO: SwapBuffers() can call _CopyToDirect(), which should
- // be always called with with the BGLView drawlocked.
- // This is not always the case if called from here.
- driverContext->SwapBuffers();
- }
-}
-
-
-struct swrast_renderbuffer*
-MesaSoftwareRast::_NewRenderBuffer(bool front)
-{
- CALLED();
- struct swrast_renderbuffer *swRenderBuffer
- = (struct swrast_renderbuffer*)calloc(1, sizeof *swRenderBuffer);
-
- if (!swRenderBuffer) {
- ERROR("%s: Failed calloc RenderBuffer\n", __func__);
- return NULL;
- }
-
- _mesa_init_renderbuffer(&swRenderBuffer->Base, 0);
-
- swRenderBuffer->Base.ClassID = HAIKU_SWRAST_RENDERBUFFER_CLASS;
- swRenderBuffer->Base.RefCount = 1;
- swRenderBuffer->Base.Delete = _RenderBufferDelete;
-
- if (!front)
- swRenderBuffer->Base.AllocStorage = _RenderBufferStorageMalloc;
- else
- swRenderBuffer->Base.AllocStorage = _RenderBufferStorage;
-
- if (_SetupRenderBuffer(&swRenderBuffer->Base, fColorSpace) != B_OK) {
- free(swRenderBuffer);
- return NULL;
- }
-
- return swRenderBuffer;
-}
-
-
-status_t
-MesaSoftwareRast::_SetupRenderBuffer(struct gl_renderbuffer* rb,
- color_space colorSpace)
-{
- CALLED();
-
- rb->InternalFormat = GL_RGBA;
-
- switch (colorSpace) {
- case B_RGBA32:
- rb->_BaseFormat = GL_RGBA;
- rb->Format = MESA_FORMAT_B8G8R8A8_UNORM;
- break;
- case B_RGB32:
- rb->_BaseFormat = GL_RGB;
- rb->Format = MESA_FORMAT_B8G8R8X8_UNORM;
- break;
- case B_RGB24:
- rb->_BaseFormat = GL_RGB;
- rb->Format = MESA_FORMAT_BGR_UNORM8;
- break;
- case B_RGB16:
- rb->_BaseFormat = GL_RGB;
- rb->Format = MESA_FORMAT_B5G6R5_UNORM;
- break;
- case B_RGB15:
- rb->_BaseFormat = GL_RGB;
- rb->Format = MESA_FORMAT_B5G5R5A1_UNORM;
- break;
- default:
- fprintf(stderr, "Unsupported screen color space %s\n",
- color_space_name(fColorSpace));
- debugger("Unsupported OpenGL color space");
- return B_ERROR;
- }
- return B_OK;
-}
-
-
-/*! Y inverted Map RenderBuffer function
- We use a BBitmap for storage which has Y inverted.
- If the Mesa provided Map function ever allows external
- control of this we can omit this function.
-*/
-void
-MesaSoftwareRast::_RenderBufferMap(gl_context *ctx,
- struct gl_renderbuffer *rb, GLuint x, GLuint y, GLuint w, GLuint h,
- GLbitfield mode, GLubyte **mapOut, GLint *rowStrideOut)
-{
- if (rb->ClassID == HAIKU_SWRAST_RENDERBUFFER_CLASS) {
- struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
- const GLuint bpp = _mesa_get_format_bytes(rb->Format);
- GLint rowStride = rb->Width * bpp; // in Bytes
-
- y = rb->Height - y - 1;
-
- *rowStrideOut = -rowStride;
- *mapOut = (GLubyte *) srb->Buffer + y * rowStride + x * bpp;
- } else {
- _swrast_map_soft_renderbuffer(ctx, rb, x, y, w, h, mode,
- mapOut, rowStrideOut);
- }
-}
-
-
-void
-MesaSoftwareRast::_RenderBufferDelete(struct gl_context *ctx,
- struct gl_renderbuffer* rb)
-{
- CALLED();
- if (rb != NULL) {
- struct swrast_renderbuffer *swRenderBuffer
- = swrast_renderbuffer(rb);
- if (swRenderBuffer != NULL)
- free(swRenderBuffer->Buffer);
- }
- free(rb);
-}
-
-
-void
-MesaSoftwareRast::_CopyToDirect()
-{
- BAutolock lock(fInfoLocker);
-
- // check the bitmap size still matches the size
- if (fInfo->window_bounds.bottom - fInfo->window_bounds.top
- != fBitmap->Bounds().IntegerHeight()
- || fInfo->window_bounds.right - fInfo->window_bounds.left
- != fBitmap->Bounds().IntegerWidth())
- return;
-
- uint8 bytesPerPixel = fInfo->bits_per_pixel / 8;
- uint32 bytesPerRow = fBitmap->BytesPerRow();
- for (uint32 i = 0; i < fInfo->clip_list_count; i++) {
- clipping_rect *clip = &fInfo->clip_list[i];
- int32 height = clip->bottom - clip->top + 1;
- int32 bytesWidth
- = (clip->right - clip->left + 1) * bytesPerPixel;
- uint8* p = (uint8*)fInfo->bits + clip->top
- * fInfo->bytes_per_row + clip->left * bytesPerPixel;
- uint8* b = (uint8*)fBitmap->Bits()
- + (clip->top - fInfo->window_bounds.top) * bytesPerRow
- + (clip->left - fInfo->window_bounds.left)
- * bytesPerPixel;
-
- for (int y = 0; y < height; y++) {
- memcpy(p, b, bytesWidth);
- p += fInfo->bytes_per_row;
- b += bytesPerRow;
- }
- }
-}
diff --git a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.h b/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.h
deleted file mode 100644
index 8f0f01848..000000000
--- a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2006-2012, Haiku, Inc. All rights reserved.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Jérôme Duval, korli@users.berlios.de
- * Philippe Houdoin, philippe.houdoin@free.fr
- * Artur Wyszynski, harakash@gmail.com
- */
-#ifndef MESASOFTWARERENDERER_H
-#define MESASOFTWARERENDERER_H
-
-
-#define HAIKU_SWRAST_RENDERBUFFER_CLASS 0x737752 // swR
-
-
-#include "GLRenderer.h"
-
-extern "C" {
-#include "context.h"
-#include "main/version.h"
-#include "swrast/s_chan.h"
-#include "swrast/s_context.h"
-}
-
-
-class MesaSoftwareRast : public BGLRenderer, public gl_context {
-public:
- MesaSoftwareRast(BGLView* view,
- ulong bgl_options,
- BGLDispatcher* dispatcher);
- virtual ~MesaSoftwareRast();
-
- virtual void LockGL();
- virtual void UnlockGL();
-
- virtual void SwapBuffers(bool VSync = false);
- virtual void Draw(BRect updateRect);
- virtual status_t CopyPixelsOut(BPoint source, BBitmap* dest);
- virtual status_t CopyPixelsIn(BBitmap* source, BPoint dest);
- virtual void FrameResized(float width, float height);
-
- virtual void EnableDirectMode(bool enabled);
- virtual void DirectConnected(direct_buffer_info* info);
-
-private:
- static const GLubyte* _GetString(gl_context* ctx, GLenum name);
- void _CheckResize(GLuint newWidth, GLuint newHeight);
- static void _UpdateState(gl_context* ctx, GLuint newState);
- static void _Flush(gl_context *ctx);
-
- struct swrast_renderbuffer* _NewRenderBuffer(bool front);
- status_t _SetupRenderBuffer(struct gl_renderbuffer* rb,
- color_space colorSpace);
-
-/* Mesa callbacks */
- static void _RenderBufferDelete(struct gl_context *ctx,
- struct gl_renderbuffer* rb);
- static GLboolean _RenderBufferStorage(gl_context* ctx,
- struct gl_renderbuffer* render,
- GLenum internalFormat,
- GLuint width, GLuint height);
- static GLboolean _RenderBufferStorageMalloc(gl_context* ctx,
- struct gl_renderbuffer* render,
- GLenum internalFormat,
- GLuint width, GLuint height);
- static void _RenderBufferMap(gl_context *ctx,
- struct gl_renderbuffer *rb,
- GLuint x, GLuint y, GLuint w, GLuint h,
- GLbitfield mode, GLubyte **mapOut,
- GLint *rowStrideOut);
-
- void _AllocateBitmap();
- void _CopyToDirect();
-
- BBitmap* fBitmap;
- bool fDirectModeEnabled;
- direct_buffer_info* fInfo;
- BLocker fInfoLocker;
- ulong fOptions;
-
- gl_config* fVisual;
-
- struct gl_framebuffer* fFrameBuffer;
- struct swrast_renderbuffer* fFrontRenderBuffer;
- struct swrast_renderbuffer* fBackRenderBuffer;
-
- GLuint fWidth;
- GLuint fHeight;
- color_space fColorSpace;
-
- void* fRowAddr[SWRAST_MAX_HEIGHT];
-};
-
-#endif // MESASOFTWARERENDERER_H
diff --git a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.rdef b/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.rdef
deleted file mode 100644
index cb6033210..000000000
--- a/mesalib/src/mesa/drivers/haiku/swrast/SoftwareRast.rdef
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2012, Haiku, Inc. All rights reserved.
- * Distributed under the terms of the MIT License.
- */
-
-resource app_signature "application/x-vnd.Haiku-swrast";
-
-resource app_version {
- major = 9,
- middle = 0,
- minor = 0,
- variety = 0,
- internal = 0,
- short_info = "Software Rasterizer",
- long_info = "Haiku Mesa Software GL Rasterizer"
-};
-
-resource vector_icon {
- $"6E6369660A0200140294A9FF18020014028DFFFF97058C0500020006023B10B7"
- $"37F036BA1A993D466848C719BEBE2000919292FFD5D5D5020016023900000000"
- $"000000003EE0004AE00048E0005EF884C702000203392E8D383001BAD97F3C12"
- $"8B4786BD48B8AD0D97BBFFFF7B4168DBE9FF4168DB97020002023A0C1238D099"
- $"BE44203F4BD14B38844678240DF56A7D9FE1EA064CC704016B0500090A044024"
- $"2438404C5C380A044028243C40505C3C0A042438243B5C3C5C380608BFBE4D59"
- $"4D59515957575659585560406044603C5E3A5C3CCB4FBFBA5E3ECA9DC11F564B"
- $"584A544C504C0606AF0F2F3D2F3D393D4034BF593542324130432F42364432C0"
- $"3FBC5A2F48354A2F480608AE9A22303EB5BD3AB42542B755422E412F3C29322D"
- $"32223C0204263726372538263F253E263F304430443143303C313D303C02043D"
- $"423D423C433D4A3C493D4A495049504A4F49474A484947060DAEAAAE014E445A"
- $"3456365E325E3D5D3F5A3A5542544E4D573A4E364439463342324A2242310A0A"
- $"0002020102403CA00C88888C8CC1401673C40D6544F2950A01010002403CA000"
- $"0000000000401673C40D65446CF80A08020304023EC16A0000000000003EC16A"
- $"45DD1844C6550A030105123EC16A0000000000003EC16A45DD1844C655011784"
- $"22040A040105023EC16A0000000000003EC16A45DD1844C6550A030108123EC1"
- $"6A0000000000003EC16A45DD1844C65501178422040A0503080706023EC16A00"
- $"00000000003EC16A45DD1844C6550A030206071A3EC16A0000000000003EC16A"
- $"45DD1844C65510FF0215810004178222040A060106023EC16A0000000000003E"
- $"C16A45DD1844C6550A070107023EC16A0000000000003EC16A45DD1844C655"
-};
diff --git a/mesalib/src/mesa/main/api_exec.h b/mesalib/src/mesa/main/api_exec.h
index 12249fec2..655cb32d0 100644
--- a/mesalib/src/mesa/main/api_exec.h
+++ b/mesalib/src/mesa/main/api_exec.h
@@ -38,6 +38,9 @@ _mesa_initialize_exec_table(struct gl_context *ctx);
extern void
_mesa_initialize_dispatch_tables(struct gl_context *ctx);
+extern struct _glapi_table *
+_mesa_new_nop_table(unsigned numEntries);
+
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/mesalib/src/mesa/main/api_loopback.c b/mesalib/src/mesa/main/api_loopback.c
index 9932a8373..a7fd82c53 100644
--- a/mesalib/src/mesa/main/api_loopback.c
+++ b/mesalib/src/mesa/main/api_loopback.c
@@ -1772,7 +1772,9 @@ _mesa_loopback_init_api_table(const struct gl_context *ctx,
SET_VertexAttribI4sv(dest, _mesa_VertexAttribI4sv);
SET_VertexAttribI4ubv(dest, _mesa_VertexAttribI4ubv);
SET_VertexAttribI4usv(dest, _mesa_VertexAttribI4usv);
+ }
+ if (ctx->API == API_OPENGL_CORE) {
/* GL 4.1 / GL_ARB_vertex_attrib_64bit */
SET_VertexAttribL1d(dest, _mesa_VertexAttribL1d);
SET_VertexAttribL2d(dest, _mesa_VertexAttribL2d);
diff --git a/mesalib/src/mesa/main/arrayobj.c b/mesalib/src/mesa/main/arrayobj.c
index 320f435ea..7c4004043 100644
--- a/mesalib/src/mesa/main/arrayobj.c
+++ b/mesalib/src/mesa/main/arrayobj.c
@@ -617,14 +617,6 @@ void GLAPIENTRY
_mesa_CreateVertexArrays(GLsizei n, GLuint *arrays)
{
GET_CURRENT_CONTEXT(ctx);
-
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCreateVertexArrays(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
gen_vertex_arrays(ctx, n, arrays, true, "glCreateVertexArrays");
}
@@ -667,13 +659,6 @@ _mesa_VertexArrayElementBuffer(GLuint vaobj, GLuint buffer)
struct gl_vertex_array_object *vao;
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glVertexArrayElementBuffer(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
ASSERT_OUTSIDE_BEGIN_END(ctx);
/* The GL_ARB_direct_state_access specification says:
@@ -710,13 +695,6 @@ _mesa_GetVertexArrayiv(GLuint vaobj, GLenum pname, GLint *param)
ASSERT_OUTSIDE_BEGIN_END(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetVertexArrayiv(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The GL_ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated if <vaobj> is not
diff --git a/mesalib/src/mesa/main/attrib.c b/mesalib/src/mesa/main/attrib.c
index b163c0aa6..53626e38b 100644
--- a/mesalib/src/mesa/main/attrib.c
+++ b/mesalib/src/mesa/main/attrib.c
@@ -177,6 +177,10 @@ struct texture_state
};
+/** An unused GL_*_BIT value */
+#define DUMMY_BIT 0x10000000
+
+
/**
* Allocate new attribute node of given type/kind. Attach payload data.
* Insert it into the linked list named by 'head'.
@@ -253,6 +257,15 @@ _mesa_PushAttrib(GLbitfield mask)
/* groups specified by the mask. */
head = NULL;
+ if (mask == 0) {
+ /* if mask is zero we still need to push something so that we
+ * don't get a GL_STACK_UNDERFLOW error in glPopAttrib().
+ */
+ GLuint dummy = 0;
+ if (!push_attrib(ctx, &head, DUMMY_BIT, sizeof(dummy), &dummy))
+ goto end;
+ }
+
if (mask & GL_ACCUM_BUFFER_BIT) {
if (!push_attrib(ctx, &head, GL_ACCUM_BUFFER_BIT,
sizeof(struct gl_accum_attrib),
@@ -928,6 +941,10 @@ _mesa_PopAttrib(void)
}
switch (attr->kind) {
+ case DUMMY_BIT:
+ /* do nothing */
+ break;
+
case GL_ACCUM_BUFFER_BIT:
{
const struct gl_accum_attrib *accum;
@@ -1074,6 +1091,11 @@ _mesa_PopAttrib(void)
_mesa_ClearDepth(depth->Clear);
_mesa_set_enable(ctx, GL_DEPTH_TEST, depth->Test);
_mesa_DepthMask(depth->Mask);
+ if (ctx->Extensions.EXT_depth_bounds_test) {
+ _mesa_set_enable(ctx, GL_DEPTH_BOUNDS_TEST_EXT,
+ depth->BoundsTest);
+ _mesa_DepthBoundsEXT(depth->BoundsMin, depth->BoundsMax);
+ }
}
break;
case GL_ENABLE_BIT:
diff --git a/mesalib/src/mesa/main/blit.c b/mesalib/src/mesa/main/blit.c
index fac972450..db8fee5a4 100644
--- a/mesalib/src/mesa/main/blit.c
+++ b/mesalib/src/mesa/main/blit.c
@@ -540,13 +540,6 @@ _mesa_BlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer,
GET_CURRENT_CONTEXT(ctx);
struct gl_framebuffer *readFb, *drawFb;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glBlitNamedFramebuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx,
"glBlitNamedFramebuffer(%u %u %d, %d, %d, %d, "
diff --git a/mesalib/src/mesa/main/bufferobj.c b/mesalib/src/mesa/main/bufferobj.c
index 34d43943f..4a116acfe 100755
--- a/mesalib/src/mesa/main/bufferobj.c
+++ b/mesalib/src/mesa/main/bufferobj.c
@@ -1303,12 +1303,6 @@ create_buffers(GLsizei n, GLuint *buffers, bool dsa)
const char *func = dsa ? "glCreateBuffers" : "glGenBuffers";
- if (dsa && !ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", func);
- return;
- }
-
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "%s(%d)\n", func, n);
@@ -1483,13 +1477,6 @@ _mesa_NamedBufferStorage(GLuint buffer, GLsizeiptr size, const GLvoid *data,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedBufferStorage(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glNamedBufferStorage");
if (!bufObj)
return;
@@ -1616,13 +1603,6 @@ _mesa_NamedBufferData(GLuint buffer, GLsizeiptr size, const GLvoid *data,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedBufferData(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glNamedBufferData");
if (!bufObj)
return;
@@ -1693,13 +1673,6 @@ _mesa_NamedBufferSubData(GLuint buffer, GLintptr offset,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedBufferSubData(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glNamedBufferSubData");
if (!bufObj)
return;
@@ -1737,13 +1710,6 @@ _mesa_GetNamedBufferSubData(GLuint buffer, GLintptr offset,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetNamedBufferSubData(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
"glGetNamedBufferSubData");
if (!bufObj)
@@ -1839,13 +1805,6 @@ _mesa_ClearNamedBufferData(GLuint buffer, GLenum internalformat,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glClearNamedBufferData(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glClearNamedBufferData");
if (!bufObj)
return;
@@ -1883,13 +1842,6 @@ _mesa_ClearNamedBufferSubData(GLuint buffer, GLenum internalformat,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glClearNamedBufferSubData(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
"glClearNamedBufferSubData");
if (!bufObj)
@@ -1978,13 +1930,6 @@ _mesa_UnmapNamedBuffer(GLuint buffer)
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glUnmapNamedBuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return GL_FALSE;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glUnmapNamedBuffer");
if (!bufObj)
return GL_FALSE;
@@ -2094,13 +2039,6 @@ _mesa_GetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint *params)
struct gl_buffer_object *bufObj;
GLint64 parameter;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetNamedBufferParameteriv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
"glGetNamedBufferParameteriv");
if (!bufObj)
@@ -2121,13 +2059,6 @@ _mesa_GetNamedBufferParameteri64v(GLuint buffer, GLenum pname,
struct gl_buffer_object *bufObj;
GLint64 parameter;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetNamedBufferParameteri64v(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
"glGetNamedBufferParameteri64v");
if (!bufObj)
@@ -2167,13 +2098,6 @@ _mesa_GetNamedBufferPointerv(GLuint buffer, GLenum pname, GLvoid **params)
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetNamedBufferPointerv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (pname != GL_BUFFER_MAP_POINTER) {
_mesa_error(ctx, GL_INVALID_ENUM, "glGetNamedBufferPointerv(pname != "
"GL_BUFFER_MAP_POINTER)");
@@ -2288,13 +2212,6 @@ _mesa_CopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *src, *dst;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCopyNamedBufferSubData(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
src = _mesa_lookup_bufferobj_err(ctx, readBuffer,
"glCopyNamedBufferSubData");
if (!src)
@@ -2513,13 +2430,6 @@ _mesa_MapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glMapNamedBufferRange(GL_ARB_direct_state_access "
- "is not supported)");
- return NULL;
- }
-
if (!ctx->Extensions.ARB_map_buffer_range) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glMapNamedBufferRange("
@@ -2587,13 +2497,6 @@ _mesa_MapNamedBuffer(GLuint buffer, GLenum access)
struct gl_buffer_object *bufObj;
GLbitfield accessFlags;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glMapNamedBuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return NULL;
- }
-
if (!get_map_buffer_access_flags(ctx, access, &accessFlags)) {
_mesa_error(ctx, GL_INVALID_ENUM, "glMapNamedBuffer(invalid access)");
return NULL;
@@ -2684,14 +2587,6 @@ _mesa_FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset,
GET_CURRENT_CONTEXT(ctx);
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glFlushMappedNamedBufferRange(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
-
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
"glFlushMappedNamedBufferRange");
if (!bufObj)
diff --git a/mesalib/src/mesa/main/buffers.c b/mesalib/src/mesa/main/buffers.c
index c83459add..0536266d7 100644
--- a/mesalib/src/mesa/main/buffers.c
+++ b/mesalib/src/mesa/main/buffers.c
@@ -303,13 +303,6 @@ _mesa_NamedFramebufferDrawBuffer(GLuint framebuffer, GLenum buf)
GET_CURRENT_CONTEXT(ctx);
struct gl_framebuffer *fb;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedFramebufferDrawBuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (framebuffer) {
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
"glNamedFramebufferDrawBuffer");
@@ -520,13 +513,6 @@ _mesa_NamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n,
GET_CURRENT_CONTEXT(ctx);
struct gl_framebuffer *fb;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedFramebufferDrawBuffers(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (framebuffer) {
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
"glNamedFramebufferDrawBuffers");
@@ -764,13 +750,6 @@ _mesa_NamedFramebufferReadBuffer(GLuint framebuffer, GLenum src)
GET_CURRENT_CONTEXT(ctx);
struct gl_framebuffer *fb;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedFramebufferReadBuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (framebuffer) {
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
"glNamedFramebufferReadBuffer");
diff --git a/mesalib/src/mesa/main/clear.c b/mesalib/src/mesa/main/clear.c
index c6999f7fd..426caea47 100644
--- a/mesalib/src/mesa/main/clear.c
+++ b/mesalib/src/mesa/main/clear.c
@@ -412,14 +412,6 @@ _mesa_ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer,
{
GLint oldfb;
- GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glClearNamedFramebufferiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
_mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
_mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
_mesa_ClearBufferiv(buffer, drawbuffer, value);
@@ -510,14 +502,6 @@ _mesa_ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer,
{
GLint oldfb;
- GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glClearNamedFramebufferuiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
_mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
_mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
_mesa_ClearBufferuiv(buffer, drawbuffer, value);
@@ -629,14 +613,6 @@ _mesa_ClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer,
{
GLint oldfb;
- GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glClearNamedFramebufferfv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
_mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
_mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
_mesa_ClearBufferfv(buffer, drawbuffer, value);
@@ -719,14 +695,6 @@ _mesa_ClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer,
{
GLint oldfb;
- GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glClearNamedFramebufferfi(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
_mesa_GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldfb);
_mesa_BindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
_mesa_ClearBufferfi(buffer, 0, depth, stencil);
diff --git a/mesalib/src/mesa/main/config.h b/mesalib/src/mesa/main/config.h
index a011319b9..cb6e0112c 100644
--- a/mesalib/src/mesa/main/config.h
+++ b/mesalib/src/mesa/main/config.h
@@ -217,19 +217,10 @@
/** For GL_ARB_fragment_program */
/*@{*/
#define MAX_FRAGMENT_PROGRAM_ADDRESS_REGS 0
+#define MAX_FRAGMENT_PROGRAM_PARAMS 64
+#define MAX_FRAGMENT_PROGRAM_INPUTS 12
/*@}*/
-/** For GL_NV_fragment_program */
-/*@{*/
-#define MAX_NV_FRAGMENT_PROGRAM_INSTRUCTIONS 1024 /* 72 for GL_ARB_f_p */
-#define MAX_NV_FRAGMENT_PROGRAM_TEMPS 96
-#define MAX_NV_FRAGMENT_PROGRAM_PARAMS 64
-#define MAX_NV_FRAGMENT_PROGRAM_INPUTS 12
-#define MAX_NV_FRAGMENT_PROGRAM_OUTPUTS 3
-#define MAX_NV_FRAGMENT_PROGRAM_WRITE_ONLYS 2
-/*@}*/
-
-
/** For GL_ARB_vertex_shader */
/*@{*/
#define MAX_VERTEX_GENERIC_ATTRIBS 16
diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c
index 544cc142f..79fa01849 100644
--- a/mesalib/src/mesa/main/context.c
+++ b/mesalib/src/mesa/main/context.c
@@ -489,8 +489,8 @@ init_program_limits(struct gl_constants *consts, gl_shader_stage stage,
prog->MaxOutputComponents = 16 * 4; /* old limit not to break tnl and swrast */
break;
case MESA_SHADER_FRAGMENT:
- prog->MaxParameters = MAX_NV_FRAGMENT_PROGRAM_PARAMS;
- prog->MaxAttribs = MAX_NV_FRAGMENT_PROGRAM_INPUTS;
+ prog->MaxParameters = MAX_FRAGMENT_PROGRAM_PARAMS;
+ prog->MaxAttribs = MAX_FRAGMENT_PROGRAM_INPUTS;
prog->MaxAddressRegs = MAX_FRAGMENT_PROGRAM_ADDRESS_REGS;
prog->MaxUniformComponents = 4 * MAX_UNIFORMS;
prog->MaxInputComponents = 16 * 4; /* old limit not to break tnl and swrast */
@@ -883,6 +883,19 @@ update_default_objects(struct gl_context *ctx)
}
+/* XXX this is temporary and should be removed at some point in the
+ * future when there's a reasonable expectation that the libGL library
+ * contains the _glapi_new_nop_table() and _glapi_set_nop_handler()
+ * functions which were added in Mesa 10.6.
+ */
+#if !defined(_WIN32)
+/* Avoid libGL / driver ABI break */
+#define USE_GLAPI_NOP_FEATURES 0
+#else
+#define USE_GLAPI_NOP_FEATURES 1
+#endif
+
+
/**
* This function is called by the glapi no-op functions. For each OpenGL
* function/entrypoint there's a simple no-op function. These "no-op"
@@ -898,6 +911,7 @@ update_default_objects(struct gl_context *ctx)
*
* \param name the name of the OpenGL function
*/
+#if USE_GLAPI_NOP_FEATURES
static void
nop_handler(const char *name)
{
@@ -914,6 +928,7 @@ nop_handler(const char *name)
}
#endif
}
+#endif
/**
@@ -923,12 +938,52 @@ nop_handler(const char *name)
static void GLAPIENTRY
nop_glFlush(void)
{
- /* don't record an error like we do in _mesa_generic_nop() */
+ /* don't record an error like we do in nop_handler() */
+}
+#endif
+
+
+#if !USE_GLAPI_NOP_FEATURES
+static int
+generic_nop(void)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "unsupported function called "
+ "(unsupported extension or deprecated function?)");
+ return 0;
}
#endif
/**
+ * Create a new API dispatch table in which all entries point to the
+ * generic_nop() function. This will not work on Windows because of
+ * the __stdcall convention which requires the callee to clean up the
+ * call stack. That's impossible with one generic no-op function.
+ */
+struct _glapi_table *
+_mesa_new_nop_table(unsigned numEntries)
+{
+ struct _glapi_table *table;
+
+#if !USE_GLAPI_NOP_FEATURES
+ table = malloc(numEntries * sizeof(_glapi_proc));
+ if (table) {
+ _glapi_proc *entry = (_glapi_proc *) table;
+ unsigned i;
+ for (i = 0; i < numEntries; i++) {
+ entry[i] = (_glapi_proc) generic_nop;
+ }
+ }
+#else
+ table = _glapi_new_nop_table(numEntries);
+#endif
+ return table;
+}
+
+
+/**
* Allocate and initialize a new dispatch table. The table will be
* populated with pointers to "no-op" functions. In turn, the no-op
* functions will call nop_handler() above.
@@ -941,8 +996,9 @@ alloc_dispatch_table(void)
* Mesa we do this to accommodate different versions of libGL and various
* DRI drivers.
*/
- GLint numEntries = MAX2(_glapi_get_dispatch_table_size(), _gloffset_COUNT);
- struct _glapi_table *table = _glapi_new_nop_table(numEntries);
+ int numEntries = MAX2(_glapi_get_dispatch_table_size(), _gloffset_COUNT);
+
+ struct _glapi_table *table = _mesa_new_nop_table(numEntries);
#if defined(_WIN32)
if (table) {
@@ -966,7 +1022,9 @@ alloc_dispatch_table(void)
}
#endif
+#if USE_GLAPI_NOP_FEATURES
_glapi_set_nop_handler(nop_handler);
+#endif
return table;
}
@@ -1111,9 +1169,7 @@ _mesa_initialize_context(struct gl_context *ctx,
ctx->HasConfig = GL_FALSE;
}
- if (_mesa_is_desktop_gl(ctx)) {
- _mesa_override_gl_version(ctx);
- }
+ _mesa_override_gl_version(ctx);
/* misc one-time initializations */
one_time_init(ctx);
@@ -1275,7 +1331,6 @@ _mesa_free_context_data( struct gl_context *ctx )
_mesa_reference_vertprog(ctx, &ctx->VertexProgram._Current, NULL);
_mesa_reference_vertprog(ctx, &ctx->VertexProgram._TnlProgram, NULL);
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL);
_mesa_reference_geomprog(ctx, &ctx->GeometryProgram._Current, NULL);
_mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL);
diff --git a/mesalib/src/mesa/main/copyimage.c b/mesalib/src/mesa/main/copyimage.c
index fd22f2889..e8732c617 100644
--- a/mesalib/src/mesa/main/copyimage.c
+++ b/mesalib/src/mesa/main/copyimage.c
@@ -40,14 +40,25 @@ enum mesa_block_class {
BLOCK_CLASS_64_BITS
};
+/**
+ * Prepare the source or destination resource, including:
+ * - Error checking
+ * - Creating texture wrappers for renderbuffers
+ * \param name the texture or renderbuffer name
+ * \param target GL_TEXTURE target or GL_RENDERBUFFER. For the later, will
+ * be changed to a compatible GL_TEXTURE target.
+ * \param level mipmap level
+ * \param tex_obj returns a pointer to a texture object
+ * \param tex_image returns a pointer to a texture image
+ * \param tmp_tex returns temporary texture object name
+ * \return true if success, false if error
+ */
static bool
prepare_target(struct gl_context *ctx, GLuint name, GLenum *target, int level,
struct gl_texture_object **tex_obj,
struct gl_texture_image **tex_image, GLuint *tmp_tex,
const char *dbg_prefix)
{
- struct gl_renderbuffer *rb;
-
if (name == 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glCopyImageSubData(%sName = %d)", dbg_prefix, name);
@@ -87,7 +98,7 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum *target, int level,
}
if (*target == GL_RENDERBUFFER) {
- rb = _mesa_lookup_renderbuffer(ctx, name);
+ struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, name);
if (!rb) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glCopyImageSubData(%sName = %u)", dbg_prefix, name);
@@ -169,8 +180,15 @@ prepare_target(struct gl_context *ctx, GLuint name, GLenum *target, int level,
return true;
}
+
+/**
+ * Check that the x,y,z,width,height,region is within the texture image
+ * dimensions.
+ * \return true if bounds OK, false if regions is out of bounds
+ */
static bool
-check_region_bounds(struct gl_context *ctx, struct gl_texture_image *tex_image,
+check_region_bounds(struct gl_context *ctx,
+ const struct gl_texture_image *tex_image,
int x, int y, int z, int width, int height, int depth,
const char *dbg_prefix)
{
@@ -188,6 +206,7 @@ check_region_bounds(struct gl_context *ctx, struct gl_texture_image *tex_image,
return false;
}
+ /* Check X direction */
if (x + width > tex_image->Width) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glCopyImageSubData(%sX or %sWidth exceeds image bounds)",
@@ -195,6 +214,7 @@ check_region_bounds(struct gl_context *ctx, struct gl_texture_image *tex_image,
return false;
}
+ /* Check Y direction */
switch (tex_image->TexObject->Target) {
case GL_TEXTURE_1D:
case GL_TEXTURE_1D_ARRAY:
@@ -215,6 +235,7 @@ check_region_bounds(struct gl_context *ctx, struct gl_texture_image *tex_image,
break;
}
+ /* Check Z direction */
switch (tex_image->TexObject->Target) {
case GL_TEXTURE_1D:
case GL_TEXTURE_2D:
@@ -260,7 +281,7 @@ check_region_bounds(struct gl_context *ctx, struct gl_texture_image *tex_image,
}
static bool
-compressed_format_compatible(struct gl_context *ctx,
+compressed_format_compatible(const struct gl_context *ctx,
GLenum compressedFormat, GLenum otherFormat)
{
enum mesa_block_class compressedClass, otherClass;
@@ -348,8 +369,8 @@ compressed_format_compatible(struct gl_context *ctx,
}
static bool
-copy_format_compatible(struct gl_context *ctx,
- GLenum srcFormat, GLenum dstFormat)
+copy_format_compatible(const struct gl_context *ctx,
+ GLenum srcFormat, GLenum dstFormat)
{
/*
* From ARB_copy_image spec:
@@ -389,7 +410,7 @@ _mesa_CopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel,
struct gl_texture_object *srcTexObj, *dstTexObj;
struct gl_texture_image *srcTexImage, *dstTexImage;
GLuint src_bw, src_bh, dst_bw, dst_bh;
- int i, srcNewZ, dstNewZ;
+ int i;
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glCopyImageSubData(%u, %s, %d, %d, %d, %d, "
@@ -447,6 +468,8 @@ _mesa_CopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel,
}
for (i = 0; i < srcDepth; ++i) {
+ int srcNewZ, dstNewZ;
+
if (srcTexObj->Target == GL_TEXTURE_CUBE_MAP) {
srcTexImage = srcTexObj->Image[i + srcZ][srcLevel];
srcNewZ = 0;
diff --git a/mesalib/src/mesa/main/depth.c b/mesalib/src/mesa/main/depth.c
index 29851ecb8..bb4591cf1 100644
--- a/mesalib/src/mesa/main/depth.c
+++ b/mesalib/src/mesa/main/depth.c
@@ -65,6 +65,9 @@ _mesa_DepthFunc( GLenum func )
if (MESA_VERBOSE & VERBOSE_API)
_mesa_debug(ctx, "glDepthFunc %s\n", _mesa_lookup_enum_by_nr(func));
+ if (ctx->Depth.Func == func)
+ return;
+
switch (func) {
case GL_LESS: /* (default) pass if incoming z < stored z */
case GL_GEQUAL:
@@ -80,9 +83,6 @@ _mesa_DepthFunc( GLenum func )
return;
}
- if (ctx->Depth.Func == func)
- return;
-
FLUSH_VERTICES(ctx, _NEW_DEPTH);
ctx->Depth.Func = func;
diff --git a/mesalib/src/mesa/main/dlist.c b/mesalib/src/mesa/main/dlist.c
index 431c4b48b..aafe486fb 100644
--- a/mesalib/src/mesa/main/dlist.c
+++ b/mesalib/src/mesa/main/dlist.c
@@ -7592,28 +7592,6 @@ save_FramebufferTexture(GLenum target, GLenum attachment,
}
}
-static void GLAPIENTRY
-save_FramebufferTextureFace(GLenum target, GLenum attachment,
- GLuint texture, GLint level, GLenum face)
-{
- Node *n;
- GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
- n = alloc_instruction(ctx, OPCODE_FRAMEBUFFER_TEXTURE_FACE, 5);
- if (n) {
- n[1].e = target;
- n[2].e = attachment;
- n[3].ui = texture;
- n[4].i = level;
- n[5].e = face;
- }
- if (ctx->ExecuteFlag) {
- CALL_FramebufferTextureFaceARB(ctx->Exec, (target, attachment, texture,
- level, face));
- }
-}
-
-
static void GLAPIENTRY
save_WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
@@ -8873,11 +8851,6 @@ execute_list(struct gl_context *ctx, GLuint list)
CALL_FramebufferTexture(ctx->Exec, (n[1].e, n[2].e,
n[3].ui, n[4].i));
break;
- case OPCODE_FRAMEBUFFER_TEXTURE_FACE:
- CALL_FramebufferTextureFaceARB(ctx->Exec, (n[1].e, n[2].e,
- n[3].ui, n[4].i, n[5].e));
- break;
-
/* GL_ARB_sync */
case OPCODE_WAIT_SYNC:
{
@@ -9644,10 +9617,9 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
SET_BlendEquationiARB(table, save_BlendEquationi);
SET_BlendEquationSeparateiARB(table, save_BlendEquationSeparatei);
- /* GL_ARB_geometry_shader4 */
+ /* OpenGL 3.2 */
SET_ProgramParameteri(table, save_ProgramParameteri);
SET_FramebufferTexture(table, save_FramebufferTexture);
- SET_FramebufferTextureFaceARB(table, save_FramebufferTextureFace);
/* GL_NV_conditional_render */
SET_BeginConditionalRender(table, save_BeginConditionalRender);
diff --git a/mesalib/src/mesa/main/errors.c b/mesalib/src/mesa/main/errors.c
index 2aa1deb63..16f10ddb6 100644
--- a/mesalib/src/mesa/main/errors.c
+++ b/mesalib/src/mesa/main/errors.c
@@ -39,6 +39,7 @@
#include "mtypes.h"
#include "version.h"
#include "util/hash_table.h"
+#include "util/simple_list.h"
static mtx_t DynamicIDMutex = _MTX_INITIALIZER_NP;
static GLuint NextDynamicID = 1;
diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c
index c82416aa0..f9bf503a0 100644
--- a/mesalib/src/mesa/main/extensions.c
+++ b/mesalib/src/mesa/main/extensions.c
@@ -104,7 +104,7 @@ static const struct extension extension_table[] = {
{ "GL_ARB_depth_clamp", o(ARB_depth_clamp), GL, 2003 },
{ "GL_ARB_depth_texture", o(ARB_depth_texture), GLL, 2001 },
{ "GL_ARB_derivative_control", o(ARB_derivative_control), GL, 2014 },
- { "GL_ARB_direct_state_access", o(ARB_direct_state_access), GL, 2014 },
+ { "GL_ARB_direct_state_access", o(dummy_true), GLC, 2014 },
{ "GL_ARB_draw_buffers", o(dummy_true), GL, 2002 },
{ "GL_ARB_draw_buffers_blend", o(ARB_draw_buffers_blend), GL, 2009 },
{ "GL_ARB_draw_elements_base_vertex", o(ARB_draw_elements_base_vertex), GL, 2009 },
diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c
index 8db651ca2..c5a702636 100644
--- a/mesalib/src/mesa/main/fbobject.c
+++ b/mesalib/src/mesa/main/fbobject.c
@@ -1489,14 +1489,6 @@ void GLAPIENTRY
_mesa_CreateRenderbuffers(GLsizei n, GLuint *renderbuffers)
{
GET_CURRENT_CONTEXT(ctx);
-
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCreateRenderbuffers(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
create_render_buffers(ctx, n, renderbuffers, true);
}
@@ -1937,12 +1929,6 @@ renderbuffer_storage_named(GLuint renderbuffer, GLenum internalFormat,
{
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", func);
- return;
- }
-
if (MESA_VERBOSE & VERBOSE_API) {
if (samples == NO_SAMPLES)
_mesa_debug(ctx, "%s(%u, %s, %d, %d)\n",
@@ -2197,13 +2183,6 @@ _mesa_GetNamedRenderbufferParameteriv(GLuint renderbuffer, GLenum pname,
{
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetNamedRenderbufferParameteriv("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, renderbuffer);
if (!rb || rb == &DummyRenderbuffer) {
/* ID was reserved, but no real renderbuffer object made yet */
@@ -2475,12 +2454,6 @@ create_framebuffers(GLsizei n, GLuint *framebuffers, bool dsa)
const char *func = dsa ? "glCreateFramebuffers" : "glGenFramebuffers";
- if (dsa && !ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", func);
- return;
- }
-
if (n < 0) {
_mesa_error(ctx, GL_INVALID_VALUE, "%s(n < 0)", func);
return;
@@ -2579,13 +2552,6 @@ _mesa_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target)
struct gl_framebuffer *fb;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCheckNamedFramebufferStatus(GL_ARB_direct_state_access "
- "is not supported)");
- return 0;
- }
-
/* Validate the target (for conformance's sake) and grab a reference to the
* default framebuffer in case framebuffer = 0.
* Section 9.4 Framebuffer Completeness of the OpenGL 4.5 core spec
@@ -2741,6 +2707,10 @@ check_texture_target(struct gl_context *ctx, GLenum target,
/* We're being called by glFramebufferTextureLayer().
* The only legal texture types for that function are 3D,
* cube-map, and 1D/2D/cube-map array textures.
+ *
+ * We don't need to check for GL_ARB_texture_cube_map_array because the
+ * application wouldn't have been able to create a texture with a
+ * GL_TEXTURE_CUBE_MAP_ARRAY target if the extension were not enabled.
*/
switch (target) {
case GL_TEXTURE_3D:
@@ -2750,10 +2720,13 @@ check_texture_target(struct gl_context *ctx, GLenum target,
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
return true;
case GL_TEXTURE_CUBE_MAP:
- /* This target is valid in TextureLayer when ARB_direct_state_access
- * or OpenGL 4.5 is supported.
+ /* We don't need to check the extension (GL_ARB_direct_state_access) or
+ * GL version (4.5) for GL_TEXTURE_CUBE_MAP because DSA is always
+ * enabled in core profile. This can be called from
+ * _mesa_FramebufferTextureLayer in compatibility profile (OpenGL 3.0),
+ * so we do have to check the profile.
*/
- return ctx->Extensions.ARB_direct_state_access;
+ return ctx->API == API_OPENGL_CORE;
}
_mesa_error(ctx, GL_INVALID_OPERATION,
@@ -3131,12 +3104,6 @@ _mesa_NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment,
const char *func = "glNamedFramebufferTextureLayer";
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", func);
- return;
- }
-
/* Get the framebuffer object */
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer, func);
if (!fb)
@@ -3222,12 +3189,6 @@ _mesa_NamedFramebufferTexture(GLuint framebuffer, GLenum attachment,
const char *func = "glNamedFramebufferTexture";
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", func);
- return;
- }
-
if (!_mesa_has_geometry_shaders(ctx)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"unsupported function (glNamedFramebufferTexture) called");
@@ -3353,15 +3314,10 @@ _mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
struct gl_renderbuffer *rb;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedFramebufferRenderbuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
"glNamedFramebufferRenderbuffer");
+ if (!fb)
+ return;
if (renderbuffertarget != GL_RENDERBUFFER) {
_mesa_error(ctx, GL_INVALID_ENUM,
@@ -3692,13 +3648,6 @@ _mesa_GetNamedFramebufferAttachmentParameteriv(GLuint framebuffer,
GET_CURRENT_CONTEXT(ctx);
struct gl_framebuffer *buffer;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetNamedFramebufferAttachmentParameteriv("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
if (framebuffer) {
buffer = _mesa_lookup_framebuffer_err(ctx, framebuffer,
"glGetNamedFramebufferAttachmentParameteriv");
@@ -3731,13 +3680,6 @@ _mesa_NamedFramebufferParameteri(GLuint framebuffer, GLenum pname,
(void) pname;
(void) param;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedFramebufferParameteri("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
_mesa_error(ctx, GL_INVALID_OPERATION,
"glNamedFramebufferParameteri not supported "
"(ARB_framebuffer_no_attachments not implemented)");
@@ -3754,13 +3696,6 @@ _mesa_GetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname,
(void) pname;
(void) param;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glNamedFramebufferParameteriv("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
_mesa_error(ctx, GL_INVALID_OPERATION,
"glGetNamedFramebufferParameteriv not supported "
"(ARB_framebuffer_no_attachments not implemented)");
@@ -3929,13 +3864,6 @@ _mesa_InvalidateNamedFramebufferSubData(GLuint framebuffer,
struct gl_framebuffer *fb;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glInvalidateNamedFramebufferSubData("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
/* The OpenGL 4.5 core spec (02.02.2015) says (in Section 17.4 Whole
* Framebuffer Operations, PDF page 522): "If framebuffer is zero, the
* default draw framebuffer is affected."
@@ -3997,13 +3925,6 @@ _mesa_InvalidateNamedFramebufferData(GLuint framebuffer,
struct gl_framebuffer *fb;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glInvalidateNamedFramebufferData("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
/* The OpenGL 4.5 core spec (02.02.2015) says (in Section 17.4 Whole
* Framebuffer Operations, PDF page 522): "If framebuffer is zero, the
* default draw framebuffer is affected."
diff --git a/mesalib/src/mesa/main/formats.c b/mesalib/src/mesa/main/formats.c
index 8af44e905..baeb1bfe5 100644
--- a/mesalib/src/mesa/main/formats.c
+++ b/mesalib/src/mesa/main/formats.c
@@ -397,6 +397,11 @@ format_array_format_table_init(void)
format_array_format_table = _mesa_hash_table_create(NULL, NULL,
array_formats_equal);
+ if (!format_array_format_table) {
+ _mesa_error_no_memory(__func__);
+ return;
+ }
+
for (f = 1; f < MESA_FORMAT_COUNT; ++f) {
info = _mesa_get_format_info(f);
if (!info->ArrayFormat)
@@ -432,6 +437,12 @@ _mesa_format_from_array_format(uint32_t array_format)
call_once(&format_array_format_table_exists, format_array_format_table_init);
+ if (!format_array_format_table) {
+ static const once_flag once_flag_init = ONCE_FLAG_INIT;
+ format_array_format_table_exists = once_flag_init;
+ return MESA_FORMAT_NONE;
+ }
+
entry = _mesa_hash_table_search_pre_hashed(format_array_format_table,
array_format,
(void *)(intptr_t)array_format);
diff --git a/mesalib/src/mesa/main/genmipmap.c b/mesalib/src/mesa/main/genmipmap.c
index 32b9460ad..9aef09019 100644
--- a/mesalib/src/mesa/main/genmipmap.c
+++ b/mesalib/src/mesa/main/genmipmap.c
@@ -158,13 +158,6 @@ _mesa_GenerateTextureMipmap(GLuint texture)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGenerateTextureMipmap(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture, "glGenerateTextureMipmap");
if (!texObj)
return;
diff --git a/mesalib/src/mesa/main/get.c b/mesalib/src/mesa/main/get.c
index 8a6c81aff..1bc9b5d82 100644
--- a/mesalib/src/mesa/main/get.c
+++ b/mesalib/src/mesa/main/get.c
@@ -138,6 +138,7 @@ enum value_extra {
EXTRA_API_GL_CORE,
EXTRA_API_ES2,
EXTRA_API_ES3,
+ EXTRA_API_ES31,
EXTRA_NEW_BUFFERS,
EXTRA_NEW_FRAG_CLAMP,
EXTRA_VALID_DRAW_BUFFER,
@@ -348,6 +349,12 @@ static const int extra_ARB_shader_image_load_store_and_geometry_shader[] = {
EXTRA_END
};
+static const int extra_ARB_draw_indirect_es31[] = {
+ EXT(ARB_draw_indirect),
+ EXTRA_API_ES31,
+ EXTRA_END
+};
+
EXTRA_EXT(ARB_texture_cube_map);
EXTRA_EXT(EXT_texture_array);
EXTRA_EXT(NV_fog_distance);
@@ -1078,6 +1085,11 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d
if (_mesa_is_gles3(ctx))
api_found = GL_TRUE;
break;
+ case EXTRA_API_ES31:
+ api_check = GL_TRUE;
+ if (_mesa_is_gles31(ctx))
+ api_found = GL_TRUE;
+ break;
case EXTRA_API_GL:
api_check = GL_TRUE;
if (_mesa_is_desktop_gl(ctx))
diff --git a/mesalib/src/mesa/main/get_hash_params.py b/mesalib/src/mesa/main/get_hash_params.py
index 41cb2c17b..513d5d21b 100644
--- a/mesalib/src/mesa/main/get_hash_params.py
+++ b/mesalib/src/mesa/main/get_hash_params.py
@@ -409,6 +409,12 @@ descriptor=[
[ "SAMPLER_BINDING", "LOC_CUSTOM, TYPE_INT, GL_SAMPLER_BINDING, NO_EXTRA" ],
]},
+# Enums in OpenGL Core profile and ES 3.1
+{ "apis": ["GL_CORE", "GLES3"], "params": [
+# GL_ARB_draw_indirect / GLES 3.1
+ [ "DRAW_INDIRECT_BUFFER_BINDING", "LOC_CUSTOM, TYPE_INT, 0, extra_ARB_draw_indirect_es31" ],
+]},
+
# Remaining enums are only in OpenGL
{ "apis": ["GL", "GL_CORE"], "params": [
[ "ACCUM_RED_BITS", "BUFFER_INT(Visual.accumRedBits), NO_EXTRA" ],
@@ -804,8 +810,6 @@ descriptor=[
{ "apis": ["GL_CORE"], "params": [
# GL_ARB_texture_buffer_range
[ "TEXTURE_BUFFER_OFFSET_ALIGNMENT", "CONTEXT_INT(Const.TextureBufferOffsetAlignment), extra_ARB_texture_buffer_range" ],
-# GL_ARB_draw_indirect
- [ "DRAW_INDIRECT_BUFFER_BINDING", "LOC_CUSTOM, TYPE_INT, 0, extra_ARB_draw_indirect" ],
# GL_ARB_viewport_array
[ "MAX_VIEWPORTS", "CONTEXT_INT(Const.MaxViewports), extra_ARB_viewport_array" ],
diff --git a/mesalib/src/mesa/main/getstring.c b/mesalib/src/mesa/main/getstring.c
index 1b2c7f054..72d99ca4e 100644
--- a/mesalib/src/mesa/main/getstring.c
+++ b/mesalib/src/mesa/main/getstring.c
@@ -72,10 +72,18 @@ shading_language_version(struct gl_context *ctx)
break;
case API_OPENGLES2:
- return (ctx->Version < 30)
- ? (const GLubyte *) "OpenGL ES GLSL ES 1.0.16"
- : (const GLubyte *) "OpenGL ES GLSL ES 3.00";
-
+ switch (ctx->Version) {
+ case 20:
+ return (const GLubyte *) "OpenGL ES GLSL ES 1.0.16";
+ case 30:
+ return (const GLubyte *) "OpenGL ES GLSL ES 3.00";
+ case 31:
+ return (const GLubyte *) "OpenGL ES GLSL ES 3.10";
+ default:
+ _mesa_problem(ctx,
+ "Invalid OpenGL ES version in shading_language_version()");
+ return (const GLubyte *) 0;
+ }
case API_OPENGLES:
/* fall-through */
diff --git a/mesalib/src/mesa/main/glformats.c b/mesalib/src/mesa/main/glformats.c
index 8ced57949..ac69fabcc 100644
--- a/mesalib/src/mesa/main/glformats.c
+++ b/mesalib/src/mesa/main/glformats.c
@@ -1200,7 +1200,7 @@ _mesa_is_depth_or_stencil_format(GLenum format)
* \return GL_TRUE if compressed, GL_FALSE if uncompressed
*/
GLboolean
-_mesa_is_compressed_format(struct gl_context *ctx, GLenum format)
+_mesa_is_compressed_format(const struct gl_context *ctx, GLenum format)
{
switch (format) {
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
@@ -1678,6 +1678,10 @@ _mesa_error_check_format_and_type(const struct gl_context *ctx,
case GL_LUMINANCE:
case GL_ALPHA:
return GL_NO_ERROR;
+ case GL_RG:
+ case GL_RED:
+ if (_mesa_is_gles3(ctx) || ctx->Extensions.ARB_texture_rg)
+ return GL_NO_ERROR;
default:
return GL_INVALID_OPERATION;
}
@@ -2292,8 +2296,18 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
break;
case GL_HALF_FLOAT:
- if (internalFormat != GL_RG16F)
- return GL_INVALID_OPERATION;
+ case GL_HALF_FLOAT_OES:
+ switch (internalFormat) {
+ case GL_RG16F:
+ break;
+ case GL_RG:
+ if (ctx->Extensions.ARB_texture_rg &&
+ ctx->Extensions.OES_texture_half_float)
+ break;
+ /* fallthrough */
+ default:
+ return GL_INVALID_OPERATION;
+ }
break;
case GL_FLOAT:
@@ -2301,6 +2315,11 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
case GL_RG16F:
case GL_RG32F:
break;
+ case GL_RG:
+ if (ctx->Extensions.ARB_texture_rg &&
+ ctx->Extensions.OES_texture_float)
+ break;
+ /* fallthrough */
default:
return GL_INVALID_OPERATION;
}
@@ -2361,8 +2380,19 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
break;
case GL_HALF_FLOAT:
- if (internalFormat != GL_R16F)
+ case GL_HALF_FLOAT_OES:
+ switch (internalFormat) {
+ case GL_R16F:
+ break;
+ case GL_RG:
+ case GL_RED:
+ if (ctx->Extensions.ARB_texture_rg &&
+ ctx->Extensions.OES_texture_half_float)
+ break;
+ /* fallthrough */
+ default:
return GL_INVALID_OPERATION;
+ }
break;
case GL_FLOAT:
@@ -2370,6 +2400,11 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
case GL_R16F:
case GL_R32F:
break;
+ case GL_RED:
+ if (ctx->Extensions.ARB_texture_rg &&
+ ctx->Extensions.OES_texture_float)
+ break;
+ /* fallthrough */
default:
return GL_INVALID_OPERATION;
}
diff --git a/mesalib/src/mesa/main/glformats.h b/mesalib/src/mesa/main/glformats.h
index e1ecd64d5..8881cb7d8 100644
--- a/mesalib/src/mesa/main/glformats.h
+++ b/mesalib/src/mesa/main/glformats.h
@@ -96,7 +96,7 @@ extern GLboolean
_mesa_is_depth_or_stencil_format(GLenum format);
extern GLboolean
-_mesa_is_compressed_format(struct gl_context *ctx, GLenum format);
+_mesa_is_compressed_format(const struct gl_context *ctx, GLenum format);
extern GLenum
_mesa_base_format_to_integer_format(GLenum format);
diff --git a/mesalib/src/mesa/main/glheader.h b/mesalib/src/mesa/main/glheader.h
index 7f7f9a39b..a2d98d4dd 100644
--- a/mesalib/src/mesa/main/glheader.h
+++ b/mesalib/src/mesa/main/glheader.h
@@ -135,12 +135,6 @@ typedef void *GLeglImageOES;
#define GL_SHADER_PROGRAM_MESA 0x9999
-/**
- * Internal token for geometry programs.
- * Use the value for GL_GEOMETRY_PROGRAM_NV for now.
- */
-#define MESA_GEOMETRY_PROGRAM 0x8c26
-
/* Several fields of struct gl_config can take these as values. Since
* GLX header files may not be available everywhere they need to be used,
* redefine them here.
diff --git a/mesalib/src/mesa/main/hash.c b/mesalib/src/mesa/main/hash.c
index d04cccd94..315b5d640 100644
--- a/mesalib/src/mesa/main/hash.c
+++ b/mesalib/src/mesa/main/hash.c
@@ -389,34 +389,6 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table,
/**
- * Clone all entries in a hash table, into a new table.
- *
- * \param table the hash table to clone
- */
-struct _mesa_HashTable *
-_mesa_HashClone(const struct _mesa_HashTable *table)
-{
- /* cast-away const */
- struct _mesa_HashTable *table2 = (struct _mesa_HashTable *) table;
- struct hash_entry *entry;
- struct _mesa_HashTable *clonetable;
-
- assert(table);
- mtx_lock(&table2->Mutex);
-
- clonetable = _mesa_NewHashTable();
- assert(clonetable);
- hash_table_foreach(table->ht, entry) {
- _mesa_HashInsert(clonetable, (GLint)(uintptr_t)entry->key, entry->data);
- }
-
- mtx_unlock(&table2->Mutex);
-
- return clonetable;
-}
-
-
-/**
* Walk over all entries in a hash table, calling callback function for each.
* Note: we use a separate mutex in this function to avoid a recursive
* locking deadlock (in case the callback calls _mesa_HashRemove()) and to
diff --git a/mesalib/src/mesa/main/hash.h b/mesalib/src/mesa/main/hash.h
index e3e8f492e..da3b9973d 100644
--- a/mesalib/src/mesa/main/hash.h
+++ b/mesalib/src/mesa/main/hash.h
@@ -59,9 +59,6 @@ _mesa_HashDeleteAll(struct _mesa_HashTable *table,
void (*callback)(GLuint key, void *data, void *userData),
void *userData);
-extern struct _mesa_HashTable *
-_mesa_HashClone(const struct _mesa_HashTable *table);
-
extern void
_mesa_HashWalk(const struct _mesa_HashTable *table,
void (*callback)(GLuint key, void *data, void *userData),
diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h
index 83425176a..e67e8074a 100644
--- a/mesalib/src/mesa/main/mtypes.h
+++ b/mesalib/src/mesa/main/mtypes.h
@@ -43,7 +43,6 @@
#include "glapi/glapi.h"
#include "math/m_matrix.h" /* GLmatrix */
#include "glsl/shader_enums.h"
-#include "util/simple_list.h" /* struct simple_node */
#include "main/formats.h" /* MESA_FORMAT_COUNT */
@@ -398,7 +397,6 @@ struct gl_config
{
GLboolean rgbMode;
GLboolean floatMode;
- GLboolean colorIndexMode; /* XXX is this used anywhere? */
GLuint doubleBufferMode;
GLuint stereoMode;
@@ -2275,16 +2273,10 @@ struct gl_vertex_program_state
*/
struct gl_geometry_program_state
{
- GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */
- GLboolean _Enabled; /**< Enabled and valid program? */
- struct gl_geometry_program *Current; /**< user-bound geometry program */
-
/** Currently enabled and valid program (including internal programs
* and compiled shader programs).
*/
struct gl_geometry_program *_Current;
-
- GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
};
/**
@@ -2320,8 +2312,6 @@ struct gl_fragment_program_state
*/
struct gl_compute_program_state
{
- struct gl_compute_program *Current; /**< user-bound compute program */
-
/** Currently enabled and valid program (including internal programs
* and compiled shader programs).
*/
@@ -2728,7 +2718,7 @@ struct gl_shader_program
} Comp;
/* post-link info: */
- unsigned NumUserUniformStorage;
+ unsigned NumUniformStorage;
unsigned NumHiddenUniforms;
struct gl_uniform_storage *UniformStorage;
@@ -3004,7 +2994,6 @@ struct gl_shared_state
struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */
struct gl_vertex_program *DefaultVertexProgram;
struct gl_fragment_program *DefaultFragmentProgram;
- struct gl_geometry_program *DefaultGeometryProgram;
/*@}*/
/* GL_ATI_fragment_shader */
@@ -3621,7 +3610,6 @@ struct gl_extensions
GLboolean ARB_depth_clamp;
GLboolean ARB_depth_texture;
GLboolean ARB_derivative_control;
- GLboolean ARB_direct_state_access;
GLboolean ARB_draw_buffers_blend;
GLboolean ARB_draw_elements_base_vertex;
GLboolean ARB_draw_indirect;
diff --git a/mesalib/src/mesa/main/pipelineobj.c b/mesalib/src/mesa/main/pipelineobj.c
index a33cdd139..0fefa7d56 100644
--- a/mesalib/src/mesa/main/pipelineobj.c
+++ b/mesalib/src/mesa/main/pipelineobj.c
@@ -553,12 +553,6 @@ _mesa_CreateProgramPipelines(GLsizei n, GLuint *pipelines)
{
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glCreateProgramPipelines("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
create_program_pipelines(ctx, n, pipelines, true);
}
diff --git a/mesalib/src/mesa/main/program_resource.c b/mesalib/src/mesa/main/program_resource.c
index b15a13210..d857b84e6 100644
--- a/mesalib/src/mesa/main/program_resource.c
+++ b/mesalib/src/mesa/main/program_resource.c
@@ -220,12 +220,12 @@ _mesa_GetProgramResourceIndex(GLuint program, GLenum programInterface,
case GL_PROGRAM_INPUT:
case GL_PROGRAM_OUTPUT:
case GL_UNIFORM:
- case GL_UNIFORM_BLOCK:
case GL_TRANSFORM_FEEDBACK_VARYING:
- /* Validate name syntax for arrays. */
+ /* Validate name syntax for array variables */
if (!valid_program_resource_index_name(name))
return GL_INVALID_INDEX;
-
+ /* fall-through */
+ case GL_UNIFORM_BLOCK:
res = _mesa_program_resource_find_name(shProg, programInterface, name);
if (!res)
return GL_INVALID_INDEX;
diff --git a/mesalib/src/mesa/main/queryobj.c b/mesalib/src/mesa/main/queryobj.c
index e20a37d79..7b6cbbc77 100755
--- a/mesalib/src/mesa/main/queryobj.c
+++ b/mesalib/src/mesa/main/queryobj.c
@@ -284,13 +284,6 @@ _mesa_CreateQueries(GLenum target, GLsizei n, GLuint *ids)
{
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCreateQueries(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
switch (target) {
case GL_SAMPLES_PASSED:
case GL_ANY_SAMPLES_PASSED:
diff --git a/mesalib/src/mesa/main/readpix.c b/mesalib/src/mesa/main/readpix.c
index df46f8361..a3357cd64 100644
--- a/mesalib/src/mesa/main/readpix.c
+++ b/mesalib/src/mesa/main/readpix.c
@@ -46,15 +46,18 @@
/**
* Return true if the conversion L=R+G+B is needed.
*/
-static GLboolean
-need_rgb_to_luminance_conversion(mesa_format texFormat, GLenum format)
+GLboolean
+_mesa_need_rgb_to_luminance_conversion(mesa_format texFormat, GLenum format)
{
GLenum baseTexFormat = _mesa_get_format_base_format(texFormat);
return (baseTexFormat == GL_RG ||
baseTexFormat == GL_RGB ||
baseTexFormat == GL_RGBA) &&
- (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA);
+ (format == GL_LUMINANCE ||
+ format == GL_LUMINANCE_ALPHA ||
+ format == GL_LUMINANCE_INTEGER_EXT ||
+ format == GL_LUMINANCE_ALPHA_INTEGER_EXT);
}
@@ -102,7 +105,7 @@ get_readpixels_transfer_ops(const struct gl_context *ctx, mesa_format texFormat,
* have any effect anyway.
*/
if (_mesa_get_format_datatype(texFormat) == GL_UNSIGNED_NORMALIZED &&
- !need_rgb_to_luminance_conversion(texFormat, format)) {
+ !_mesa_need_rgb_to_luminance_conversion(texFormat, format)) {
transferOps &= ~IMAGE_CLAMP_BIT;
}
@@ -146,7 +149,7 @@ _mesa_readpixels_needs_slow_path(const struct gl_context *ctx, GLenum format,
default:
/* Color formats. */
- if (need_rgb_to_luminance_conversion(rb->Format, format)) {
+ if (_mesa_need_rgb_to_luminance_conversion(rb->Format, format)) {
return GL_TRUE;
}
@@ -418,7 +421,7 @@ read_rgba_pixels( struct gl_context *ctx,
const struct gl_pixelstore_attrib *packing )
{
GLbitfield transferOps;
- bool dst_is_integer, dst_is_luminance, needs_rebase;
+ bool dst_is_integer, convert_rgb_to_lum, needs_rebase;
int dst_stride, src_stride, rb_stride;
uint32_t dst_format, src_format;
GLubyte *dst, *map;
@@ -439,10 +442,8 @@ read_rgba_pixels( struct gl_context *ctx,
dst_is_integer = _mesa_is_enum_format_integer(format);
dst_stride = _mesa_image_row_stride(packing, width, format, type);
dst_format = _mesa_format_from_format_and_type(format, type);
- dst_is_luminance = format == GL_LUMINANCE ||
- format == GL_LUMINANCE_ALPHA ||
- format == GL_LUMINANCE_INTEGER_EXT ||
- format == GL_LUMINANCE_ALPHA_INTEGER_EXT;
+ convert_rgb_to_lum =
+ _mesa_need_rgb_to_luminance_conversion(rb->Format, format);
dst = (GLubyte *) _mesa_image_address2d(packing, pixels, width, height,
format, type, 0, 0);
@@ -490,7 +491,7 @@ read_rgba_pixels( struct gl_context *ctx,
*/
assert(!transferOps || (transferOps && !dst_is_integer));
- needs_rgba = transferOps || dst_is_luminance;
+ needs_rgba = transferOps || convert_rgb_to_lum;
rgba = NULL;
if (needs_rgba) {
uint32_t rgba_format;
@@ -563,7 +564,7 @@ read_rgba_pixels( struct gl_context *ctx,
* If the dst format is Luminance, we need to do the conversion by computing
* L=R+G+B values.
*/
- if (!dst_is_luminance) {
+ if (!convert_rgb_to_lum) {
_mesa_format_convert(dst, dst_format, dst_stride,
src, src_format, src_stride,
width, height,
diff --git a/mesalib/src/mesa/main/readpix.h b/mesalib/src/mesa/main/readpix.h
index 4bb35e17e..1636dd9ce 100644
--- a/mesalib/src/mesa/main/readpix.h
+++ b/mesalib/src/mesa/main/readpix.h
@@ -37,6 +37,9 @@ extern GLboolean
_mesa_readpixels_needs_slow_path(const struct gl_context *ctx, GLenum format,
GLenum type, GLboolean uses_blit);
+extern GLboolean
+_mesa_need_rgb_to_luminance_conversion(mesa_format texFormat, GLenum format);
+
extern void
_mesa_readpixels(struct gl_context *ctx,
GLint x, GLint y, GLsizei width, GLsizei height,
diff --git a/mesalib/src/mesa/main/samplerobj.c b/mesalib/src/mesa/main/samplerobj.c
index 60711a5b5..a3aacc66a 100644
--- a/mesalib/src/mesa/main/samplerobj.c
+++ b/mesalib/src/mesa/main/samplerobj.c
@@ -221,13 +221,6 @@ void GLAPIENTRY
_mesa_CreateSamplers(GLsizei count, GLuint *samplers)
{
GET_CURRENT_CONTEXT(ctx);
-
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glCreateSamplers("
- "GL_ARB_direct_state_access is not supported)");
- return;
- }
-
create_samplers(ctx, count, samplers, "glCreateSamplers");
}
diff --git a/mesalib/src/mesa/main/shader_query.cpp b/mesalib/src/mesa/main/shader_query.cpp
index 3445f89a3..a6246a39a 100644
--- a/mesalib/src/mesa/main/shader_query.cpp
+++ b/mesalib/src/mesa/main/shader_query.cpp
@@ -479,12 +479,20 @@ _mesa_GetFragDataLocation(GLuint program, const GLchar *name)
const char*
_mesa_program_resource_name(struct gl_program_resource *res)
{
+ const ir_variable *var;
switch (res->Type) {
case GL_UNIFORM_BLOCK:
return RESOURCE_UBO(res)->Name;
case GL_TRANSFORM_FEEDBACK_VARYING:
return RESOURCE_XFB(res)->Name;
case GL_PROGRAM_INPUT:
+ var = RESOURCE_VAR(res);
+ /* Special case gl_VertexIDMESA -> gl_VertexID. */
+ if (var->data.mode == ir_var_system_value &&
+ var->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) {
+ return "gl_VertexID";
+ }
+ /* fallthrough */
case GL_PROGRAM_OUTPUT:
return RESOURCE_VAR(res)->name;
case GL_UNIFORM:
@@ -539,6 +547,17 @@ struct gl_program_resource *
_mesa_program_resource_find_name(struct gl_shader_program *shProg,
GLenum programInterface, const char *name)
{
+ GET_CURRENT_CONTEXT(ctx);
+ const char *full_name = name;
+
+ /* When context has 'VertexID_is_zero_based' set, gl_VertexID has been
+ * lowered to gl_VertexIDMESA.
+ */
+ if (name && ctx->Const.VertexID_is_zero_based) {
+ if (strcmp(name, "gl_VertexID") == 0)
+ full_name = "gl_VertexIDMESA";
+ }
+
struct gl_program_resource *res = shProg->ProgramResourceList;
for (unsigned i = 0; i < shProg->NumProgramResourceList; i++, res++) {
if (res->Type != programInterface)
@@ -563,7 +582,7 @@ _mesa_program_resource_find_name(struct gl_shader_program *shProg,
break;
case GL_PROGRAM_INPUT:
case GL_PROGRAM_OUTPUT:
- if (array_index_of_resource(res, name) >= 0)
+ if (array_index_of_resource(res, full_name) >= 0)
return res;
break;
default:
@@ -728,6 +747,10 @@ program_resource_location(struct gl_shader_program *shProg,
return -1;
}
+ /* Built-in locations should report GL_INVALID_INDEX. */
+ if (is_gl_identifier(name))
+ return GL_INVALID_INDEX;
+
/* VERT_ATTRIB_GENERIC0 and FRAG_RESULT_DATA0 are decremented as these
* offsets are used internally to differentiate between built-in attributes
* and user-defined attributes.
diff --git a/mesalib/src/mesa/main/shaderapi.c b/mesalib/src/mesa/main/shaderapi.c
index a04b28711..a4296adf7 100644
--- a/mesalib/src/mesa/main/shaderapi.c
+++ b/mesalib/src/mesa/main/shaderapi.c
@@ -532,7 +532,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname,
/* True if geometry shaders (of the form that was adopted into GLSL 1.50
* and GL 3.2) are available in this context
*/
- const bool has_core_gs = _mesa_is_desktop_gl(ctx) && ctx->Version >= 32;
+ const bool has_core_gs = _mesa_has_geometry_shaders(ctx);
/* Are uniform buffer objects available in this context?
*/
@@ -569,13 +569,13 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname,
*params = _mesa_longest_attribute_name_length(shProg);
return;
case GL_ACTIVE_UNIFORMS:
- *params = shProg->NumUserUniformStorage - shProg->NumHiddenUniforms;
+ *params = shProg->NumUniformStorage - shProg->NumHiddenUniforms;
return;
case GL_ACTIVE_UNIFORM_MAX_LENGTH: {
unsigned i;
GLint max_len = 0;
const unsigned num_uniforms =
- shProg->NumUserUniformStorage - shProg->NumHiddenUniforms;
+ shProg->NumUniformStorage - shProg->NumHiddenUniforms;
for (i = 0; i < num_uniforms; i++) {
/* Add one for the terminating NUL character for a non-array, and
diff --git a/mesalib/src/mesa/main/shaderobj.c b/mesalib/src/mesa/main/shaderobj.c
index e42896036..110a18e1e 100644
--- a/mesalib/src/mesa/main/shaderobj.c
+++ b/mesalib/src/mesa/main/shaderobj.c
@@ -282,10 +282,10 @@ _mesa_clear_shader_program_data(struct gl_shader_program *shProg)
unsigned i;
if (shProg->UniformStorage) {
- for (i = 0; i < shProg->NumUserUniformStorage; ++i)
+ for (i = 0; i < shProg->NumUniformStorage; ++i)
_mesa_uniform_detach_all_driver_storage(&shProg->UniformStorage[i]);
ralloc_free(shProg->UniformStorage);
- shProg->NumUserUniformStorage = 0;
+ shProg->NumUniformStorage = 0;
shProg->UniformStorage = NULL;
}
diff --git a/mesalib/src/mesa/main/shared.c b/mesalib/src/mesa/main/shared.c
index 0b76cc012..d5ac9f1fb 100644
--- a/mesalib/src/mesa/main/shared.c
+++ b/mesalib/src/mesa/main/shared.c
@@ -313,7 +313,6 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
_mesa_DeleteHashTable(shared->Programs);
_mesa_reference_vertprog(ctx, &shared->DefaultVertexProgram, NULL);
- _mesa_reference_geomprog(ctx, &shared->DefaultGeometryProgram, NULL);
_mesa_reference_fragprog(ctx, &shared->DefaultFragmentProgram, NULL);
_mesa_HashDeleteAll(shared->ATIShaders, delete_fragshader_cb, ctx);
diff --git a/mesalib/src/mesa/main/state.c b/mesalib/src/mesa/main/state.c
index 2657c532f..5b970081a 100644
--- a/mesalib/src/mesa/main/state.c
+++ b/mesalib/src/mesa/main/state.c
@@ -225,7 +225,7 @@ update_program(struct gl_context *ctx)
if (ctx->GeometryProgram._Current != prevGP) {
new_state |= _NEW_PROGRAM;
if (ctx->Driver.BindProgram) {
- ctx->Driver.BindProgram(ctx, MESA_GEOMETRY_PROGRAM,
+ ctx->Driver.BindProgram(ctx, GL_GEOMETRY_PROGRAM_NV,
(struct gl_program *) ctx->GeometryProgram._Current);
}
}
diff --git a/mesalib/src/mesa/main/texgetimage.c b/mesalib/src/mesa/main/texgetimage.c
index f582a7f78..92b4d6795 100644
--- a/mesalib/src/mesa/main/texgetimage.c
+++ b/mesalib/src/mesa/main/texgetimage.c
@@ -1108,13 +1108,6 @@ _mesa_GetTextureImage(GLuint texture, GLint level, GLenum format,
GLenum err;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureImage(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
/*
* This has been moved here because a format/type mismatch can cause a NULL
* texImage object, which in turn causes the mismatch error to be
@@ -1351,13 +1344,6 @@ _mesa_GetCompressedTextureImage(GLuint texture, GLint level,
GLint image_stride;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetCompressedTextureImage(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glGetCompressedTextureImage");
if (!texObj)
diff --git a/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c
index 7616fd7ce..3d85615fa 100644
--- a/mesalib/src/mesa/main/teximage.c
+++ b/mesalib/src/mesa/main/teximage.c
@@ -222,7 +222,7 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
}
}
- if (ctx->Extensions.ARB_stencil_texturing) {
+ if (ctx->Extensions.ARB_texture_stencil8) {
switch (internalFormat) {
case GL_STENCIL_INDEX:
case GL_STENCIL_INDEX1:
@@ -3624,13 +3624,6 @@ texturesubimage(struct gl_context *ctx, GLuint dims,
_mesa_lookup_enum_by_nr(format),
_mesa_lookup_enum_by_nr(type), pixels);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureSubImage%uD(GL_ARB_direct_state_access "
- "is not supported)", dims);
- return;
- }
-
/* Get the texture object by Name. */
texObj = _mesa_lookup_texture(ctx, texture);
if (!texObj) {
@@ -4190,12 +4183,6 @@ _mesa_CopyTextureSubImage1D(GLuint texture, GLint level,
const char *self = "glCopyTextureSubImage1D";
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", self);
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture, self);
if (!texObj)
return;
@@ -4220,12 +4207,6 @@ _mesa_CopyTextureSubImage2D(GLuint texture, GLint level,
const char *self = "glCopyTextureSubImage2D";
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", self);
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture, self);
if (!texObj)
return;
@@ -4253,12 +4234,6 @@ _mesa_CopyTextureSubImage3D(GLuint texture, GLint level,
const char *self = "glCopyTextureSubImage3D";
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported)", self);
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture, self);
if (!texObj)
return;
@@ -4854,13 +4829,6 @@ _mesa_CompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset,
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCompressedTextureSubImage1D(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glCompressedTextureSubImage1D");
if (!texObj)
@@ -4939,13 +4907,6 @@ _mesa_CompressedTextureSubImage2D(GLuint texture, GLint level, GLint xoffset,
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCompressedTextureSubImage2D(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glCompressedTextureSubImage2D");
if (!texObj)
@@ -5024,13 +4985,6 @@ _mesa_CompressedTextureSubImage3D(GLuint texture, GLint level, GLint xoffset,
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCompressedTextureSubImage3D(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glCompressedTextureSubImage3D");
if (!texObj)
@@ -5515,13 +5469,6 @@ _mesa_TextureBuffer(GLuint texture, GLenum internalFormat, GLuint buffer)
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureBuffer(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (buffer) {
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer, "glTextureBuffer");
if (!bufObj)
@@ -5550,13 +5497,6 @@ _mesa_TextureBufferRange(GLuint texture, GLenum internalFormat, GLuint buffer,
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureBufferRange(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
if (buffer) {
bufObj = _mesa_lookup_bufferobj_err(ctx, buffer,
"glTextureBufferRange");
@@ -5861,13 +5801,6 @@ _mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureStorage2DMultisample(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glTextureStorage2DMultisample");
if (!texObj)
@@ -5888,13 +5821,6 @@ _mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureStorage3DMultisample(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
/* Get the texture object by Name. */
texObj = _mesa_lookup_texture_err(ctx, texture,
"glTextureStorage3DMultisample");
diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c
index d51e6954b..c563f1e74 100644
--- a/mesalib/src/mesa/main/texobj.c
+++ b/mesalib/src/mesa/main/texobj.c
@@ -1317,13 +1317,6 @@ _mesa_CreateTextures(GLenum target, GLsizei n, GLuint *textures)
GLint targetIndex;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCreateTextures(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
/*
* The 4.5 core profile spec (30.10.2014) doesn't specify what
* glCreateTextures should do with invalid targets, which was probably an
@@ -1815,13 +1808,6 @@ _mesa_BindTextureUnit(GLuint unit, GLuint texture)
_mesa_debug(ctx, "glBindTextureUnit %s %d\n",
_mesa_lookup_enum_by_nr(GL_TEXTURE0+unit), (GLint) texture);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glBindTextureUnit(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
/* Section 8.1 (Texture Objects) of the OpenGL 4.5 core profile spec
* (20141030) says:
* "When texture is zero, each of the targets enumerated at the
diff --git a/mesalib/src/mesa/main/texparam.c b/mesalib/src/mesa/main/texparam.c
index 1fa583002..d74134f41 100644
--- a/mesalib/src/mesa/main/texparam.c
+++ b/mesalib/src/mesa/main/texparam.c
@@ -1108,13 +1108,6 @@ _mesa_TextureParameterfv(GLuint texture, GLenum pname, const GLfloat *params)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureParameterfv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -1131,13 +1124,6 @@ _mesa_TextureParameterf(GLuint texture, GLenum pname, GLfloat param)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureParameterf(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -1154,13 +1140,6 @@ _mesa_TextureParameteri(GLuint texture, GLenum pname, GLint param)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureParameteri(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -1178,13 +1157,6 @@ _mesa_TextureParameteriv(GLuint texture, GLenum pname,
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureParameteriv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -1202,13 +1174,6 @@ _mesa_TextureParameterIiv(GLuint texture, GLenum pname, const GLint *params)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureParameterIiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -1226,13 +1191,6 @@ _mesa_TextureParameterIuiv(GLuint texture, GLenum pname, const GLuint *params)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureParameterIuiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_FALSE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -1692,13 +1650,6 @@ _mesa_GetTextureLevelParameterfv(GLuint texture, GLint level,
GLint iparam;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureLevelParameterfv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glGetTextureLevelParameterfv");
if (!texObj)
@@ -1717,13 +1668,6 @@ _mesa_GetTextureLevelParameteriv(GLuint texture, GLint level,
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureLevelParameteriv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = _mesa_lookup_texture_err(ctx, texture,
"glGetTextureLevelParameteriv");
if (!texObj)
@@ -2283,13 +2227,6 @@ _mesa_GetTextureParameterfv(GLuint texture, GLenum pname, GLfloat *params)
struct gl_texture_object *obj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureParameterfv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = get_texobj_by_name(ctx, texture, GL_TRUE);
if (!obj) {
/* User passed a non-generated name. */
@@ -2307,13 +2244,6 @@ _mesa_GetTextureParameteriv(GLuint texture, GLenum pname, GLint *params)
struct gl_texture_object *obj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureParameteriv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = get_texobj_by_name(ctx, texture, GL_TRUE);
if (!obj) {
/* User passed a non-generated name. */
@@ -2331,13 +2261,6 @@ _mesa_GetTextureParameterIiv(GLuint texture, GLenum pname, GLint *params)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureParameterIiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_TRUE);
if (!texObj) {
/* User passed a non-generated name. */
@@ -2356,13 +2279,6 @@ _mesa_GetTextureParameterIuiv(GLuint texture, GLenum pname, GLuint *params)
struct gl_texture_object *texObj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTextureParameterIuiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
texObj = get_texobj_by_name(ctx, texture, GL_TRUE);
if (!texObj) {
/* User passed a non-generated name. */
diff --git a/mesalib/src/mesa/main/texstorage.c b/mesalib/src/mesa/main/texstorage.c
index dee74a825..53cb2c091 100644
--- a/mesalib/src/mesa/main/texstorage.c
+++ b/mesalib/src/mesa/main/texstorage.c
@@ -507,13 +507,6 @@ texturestorage(GLuint dims, GLuint texture, GLsizei levels,
_mesa_lookup_enum_by_nr(internalformat),
width, height, depth);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureStorage%uD(GL_ARB_direct_state_access "
- "is not supported)", dims);
- return;
- }
-
/* Check the format to make sure it is sized. */
if (!_mesa_is_legal_tex_storage_format(ctx, internalformat)) {
_mesa_error(ctx, GL_INVALID_ENUM,
diff --git a/mesalib/src/mesa/main/textureview.c b/mesalib/src/mesa/main/textureview.c
index cd87a27d2..6b0aed4ea 100644
--- a/mesalib/src/mesa/main/textureview.c
+++ b/mesalib/src/mesa/main/textureview.c
@@ -167,7 +167,7 @@ static const struct internal_format_class_info s3tc_compatible_internal_formats[
* \return VIEW_CLASS if internalformat found in table, false otherwise.
*/
static GLenum
-lookup_view_class(struct gl_context *ctx, GLenum internalformat)
+lookup_view_class(const struct gl_context *ctx, GLenum internalformat)
{
GLuint i;
@@ -176,9 +176,11 @@ lookup_view_class(struct gl_context *ctx, GLenum internalformat)
return compatible_internal_formats[i].view_class;
}
- if (ctx->Extensions.EXT_texture_compression_s3tc && ctx->Extensions.EXT_texture_sRGB) {
+ if (ctx->Extensions.EXT_texture_compression_s3tc &&
+ ctx->Extensions.EXT_texture_sRGB) {
for (i = 0; i < ARRAY_SIZE(s3tc_compatible_internal_formats); i++) {
- if (s3tc_compatible_internal_formats[i].internal_format == internalformat)
+ if (s3tc_compatible_internal_formats[i].internal_format
+ == internalformat)
return s3tc_compatible_internal_formats[i].view_class;
}
}
@@ -226,7 +228,8 @@ initialize_texture_fields(struct gl_context *ctx,
0, internalFormat, texFormat);
}
- _mesa_next_mipmap_level_size(target, 0, levelWidth, levelHeight, levelDepth,
+ _mesa_next_mipmap_level_size(target, 0,
+ levelWidth, levelHeight, levelDepth,
&levelWidth, &levelHeight, &levelDepth);
}
@@ -320,8 +323,8 @@ target_valid(struct gl_context *ctx, GLenum origTarget, GLenum newTarget)
* If an error is found, record it with _mesa_error()
* \return false if any error, true otherwise.
*/
-GLboolean
-_mesa_texture_view_compatible_format(struct gl_context *ctx,
+bool
+_mesa_texture_view_compatible_format(const struct gl_context *ctx,
GLenum origInternalFormat,
GLenum newInternalFormat)
{
@@ -334,15 +337,16 @@ _mesa_texture_view_compatible_format(struct gl_context *ctx,
* or an INVALID_OPERATION error is generated.
*/
if (origInternalFormat == newInternalFormat)
- return GL_TRUE;
+ return true;
origViewClass = lookup_view_class(ctx, origInternalFormat);
newViewClass = lookup_view_class(ctx, newInternalFormat);
if ((origViewClass == newViewClass) && origViewClass != false)
- return GL_TRUE;
+ return true;
- return GL_FALSE;
+ return false;
}
+
/**
* Helper function for TexStorage and teximagemultisample to set immutable
* texture state needed by ARB_texture_view.
@@ -357,17 +361,19 @@ _mesa_set_texture_view_state(struct gl_context *ctx,
/* Get a reference to what will become this View's base level */
texImage = _mesa_select_tex_image(texObj, target, 0);
- /* When an immutable texture is created via glTexStorage or glTexImageMultisample,
+ /* When an immutable texture is created via glTexStorage or
+ * glTexImageMultisample,
* TEXTURE_IMMUTABLE_FORMAT becomes TRUE.
* TEXTURE_IMMUTABLE_LEVELS and TEXTURE_VIEW_NUM_LEVELS become levels.
* If the texture target is TEXTURE_1D_ARRAY then
* TEXTURE_VIEW_NUM_LAYERS becomes height.
* If the texture target is TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY,
- * or TEXTURE_2D_MULTISAMPLE_ARRAY then TEXTURE_VIEW_NUM_LAYERS becomes depth.
+ * or TEXTURE_2D_MULTISAMPLE_ARRAY then TEXTURE_VIEW_NUM_LAYERS becomes
+ * depth.
* If the texture target is TEXTURE_CUBE_MAP, then
* TEXTURE_VIEW_NUM_LAYERS becomes 6.
* For any other texture target, TEXTURE_VIEW_NUM_LAYERS becomes 1.
- *
+ *
* ARB_texture_multisample: Multisample textures do
* not have multiple image levels.
*/
@@ -401,7 +407,6 @@ _mesa_set_texture_view_state(struct gl_context *ctx,
case GL_TEXTURE_CUBE_MAP:
texObj->NumLayers = 6;
break;
-
}
}
@@ -435,16 +440,20 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
minlevel, numlevels, minlayer, numlayers);
if (origtexture == 0) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(origtexture = %u)", origtexture);
+ _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(origtexture = %u)",
+ origtexture);
return;
}
/* Need original texture information to validate arguments */
origTexObj = _mesa_lookup_texture(ctx, origtexture);
- /* If <origtexture> is not the name of a texture, INVALID_VALUE is generated. */
+ /* If <origtexture> is not the name of a texture, INVALID_VALUE
+ * is generated.
+ */
if (!origTexObj) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(origtexture = %u)", origtexture);
+ _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(origtexture = %u)",
+ origtexture);
return;
}
@@ -452,7 +461,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
* INVALID_OPERATION is generated.
*/
if (!origTexObj->Immutable) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTextureView(origtexture not immutable)");
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTextureView(origtexture not immutable)");
return;
}
@@ -467,7 +477,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
*/
texObj = _mesa_lookup_texture(ctx, texture);
if (texObj == NULL) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTextureView(texture = %u non-gen name)", texture);
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTextureView(texture = %u non-gen name)", texture);
return;
}
@@ -475,7 +486,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
* the error INVALID_OPERATION is generated.
*/
if (texObj->Target) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTextureView(texture = %u already bound)", texture);
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTextureView(texture = %u already bound)", texture);
return;
}
@@ -484,33 +496,35 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
return; /* error was recorded */
}
- /* minlevel and minlayer are relative to the view of origtexture
+ /* minlevel and minlayer are relative to the view of origtexture.
* If minlevel or minlayer is greater than level or layer, respectively,
- * of origtexture return INVALID_VALUE.
+ * return INVALID_VALUE.
*/
newViewMinLevel = origTexObj->MinLevel + minlevel;
newViewMinLayer = origTexObj->MinLayer + minlayer;
if (newViewMinLevel >= (origTexObj->MinLevel + origTexObj->NumLevels)) {
_mesa_error(ctx, GL_INVALID_VALUE,
- "glTextureView(new minlevel (%d) > orig minlevel (%d) + orig numlevels (%d))",
+ "glTextureView(new minlevel (%d) > orig minlevel (%d)"
+ " + orig numlevels (%d))",
newViewMinLevel, origTexObj->MinLevel, origTexObj->NumLevels);
return;
}
if (newViewMinLayer >= (origTexObj->MinLayer + origTexObj->NumLayers)) {
_mesa_error(ctx, GL_INVALID_VALUE,
- "glTextureView(new minlayer (%d) > orig minlayer (%d) + orig numlayers (%d))",
+ "glTextureView(new minlayer (%d) > orig minlayer (%d)"
+ " + orig numlayers (%d))",
newViewMinLayer, origTexObj->MinLayer, origTexObj->NumLayers);
return;
}
if (!_mesa_texture_view_compatible_format(ctx,
- origTexObj->Image[0][0]->InternalFormat,
- internalformat)) {
+ origTexObj->Image[0][0]->InternalFormat,
+ internalformat)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
- "glTextureView(internalformat %s not compatible with origtexture %s)",
- _mesa_lookup_enum_by_nr(internalformat),
- _mesa_lookup_enum_by_nr(origTexObj->Image[0][0]->InternalFormat));
+ "glTextureView(internalformat %s not compatible with origtexture %s)",
+ _mesa_lookup_enum_by_nr(internalformat),
+ _mesa_lookup_enum_by_nr(origTexObj->Image[0][0]->InternalFormat));
return;
}
@@ -569,14 +583,16 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
dimensionsOK = _mesa_legal_texture_dimensions(ctx, target, 0,
width, height, depth, 0);
if (!dimensionsOK) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTextureView(invalid width or height or depth)");
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTextureView(invalid width or height or depth)");
return;
}
sizeOK = ctx->Driver.TestProxyTexImage(ctx, target, 0, texFormat,
width, height, depth, 0);
if (!sizeOK) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTextureView(invalid texture size)");
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTextureView(invalid texture size)");
return;
}
@@ -591,17 +607,19 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
case GL_TEXTURE_RECTANGLE:
case GL_TEXTURE_2D_MULTISAMPLE:
if (numlayers != 1) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(numlayers %d != 1)", numlayers);
+ _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(numlayers %d != 1)",
+ numlayers);
return;
}
break;
case GL_TEXTURE_CUBE_MAP:
- /* If the new texture's target is TEXTURE_CUBE_MAP, the clamped <numlayers>
- * must be equal to 6.
+ /* If the new texture's target is TEXTURE_CUBE_MAP, the clamped
+ * <numlayers> must be equal to 6.
*/
if (newViewNumLayers != 6) {
- _mesa_error(ctx, GL_INVALID_VALUE, "glTextureView(clamped numlayers %d != 6)",
+ _mesa_error(ctx, GL_INVALID_VALUE,
+ "glTextureView(clamped numlayers %d != 6)",
newViewNumLayers);
return;
}
@@ -615,7 +633,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
*/
if ((newViewNumLayers % 6) != 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
- "glTextureView(clamped numlayers %d is not a multiple of 6)",
+ "glTextureView(clamped numlayers %d is not"
+ " a multiple of 6)",
newViewNumLayers);
return;
}
@@ -628,7 +647,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
*/
if ((target == GL_TEXTURE_CUBE_MAP || target == GL_TEXTURE_CUBE_MAP_ARRAY) &&
(origTexImage->Width != origTexImage->Height)) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "glTextureView(origtexture width (%d) != height (%d))",
+ _mesa_error(ctx, GL_INVALID_OPERATION,
+ "glTextureView(origtexture width (%d) != height (%d))",
origTexImage->Width, origTexImage->Height);
return;
}
@@ -662,7 +682,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
texObj->ImmutableLevels = origTexObj->ImmutableLevels;
texObj->Target = target;
- if (ctx->Driver.TextureView != NULL && !ctx->Driver.TextureView(ctx, texObj, origTexObj)) {
+ if (ctx->Driver.TextureView != NULL &&
+ !ctx->Driver.TextureView(ctx, texObj, origTexObj)) {
return; /* driver recorded error */
}
}
diff --git a/mesalib/src/mesa/main/textureview.h b/mesalib/src/mesa/main/textureview.h
index 549a13cd8..59e24b68d 100644
--- a/mesalib/src/mesa/main/textureview.h
+++ b/mesalib/src/mesa/main/textureview.h
@@ -29,8 +29,8 @@
#ifndef TEXTUREVIEW_H
#define TEXTUREVIEW_H
-GLboolean
-_mesa_texture_view_compatible_format(struct gl_context *ctx,
+bool
+_mesa_texture_view_compatible_format(const struct gl_context *ctx,
GLenum origInternalFormat,
GLenum newInternalFormat);
@@ -41,7 +41,8 @@ _mesa_TextureView(GLuint texture, GLenum target, GLuint origtexture,
GLuint minlayer, GLuint numlayers);
extern void
-_mesa_set_texture_view_state(struct gl_context *ctx, struct gl_texture_object *texObj,
- GLenum target, GLuint levels);
+_mesa_set_texture_view_state(struct gl_context *ctx,
+ struct gl_texture_object *texObj,
+ GLenum target, GLuint levels);
#endif /* TEXTUREVIEW_H */
diff --git a/mesalib/src/mesa/main/transformfeedback.c b/mesalib/src/mesa/main/transformfeedback.c
index 642fa9647..103011ce5 100644
--- a/mesalib/src/mesa/main/transformfeedback.c
+++ b/mesalib/src/mesa/main/transformfeedback.c
@@ -706,13 +706,6 @@ _mesa_TransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer)
struct gl_transform_feedback_object *obj;
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTransformFeedbackBufferBase(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = lookup_transform_feedback_object_err(ctx, xfb,
"glTransformFeedbackBufferBase");
if(!obj) {
@@ -736,13 +729,6 @@ _mesa_TransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer,
struct gl_transform_feedback_object *obj;
struct gl_buffer_object *bufObj;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glTransformFeedbackBufferRange(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = lookup_transform_feedback_object_err(ctx, xfb,
"glTransformFeedbackBufferRange");
if(!obj) {
@@ -1059,13 +1045,6 @@ _mesa_CreateTransformFeedbacks(GLsizei n, GLuint *names)
{
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glCreateTransformFeedbacks(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
create_transform_feedbacks(ctx, n, names, true);
}
@@ -1236,13 +1215,6 @@ _mesa_GetTransformFeedbackiv(GLuint xfb, GLenum pname, GLint *param)
struct gl_transform_feedback_object *obj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTransformFeedbackiv(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = lookup_transform_feedback_object_err(ctx, xfb,
"glGetTransformFeedbackiv");
if(!obj) {
@@ -1269,13 +1241,6 @@ _mesa_GetTransformFeedbacki_v(GLuint xfb, GLenum pname, GLuint index,
struct gl_transform_feedback_object *obj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTransformFeedbacki_v(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = lookup_transform_feedback_object_err(ctx, xfb,
"glGetTransformFeedbacki_v");
if(!obj) {
@@ -1305,13 +1270,6 @@ _mesa_GetTransformFeedbacki64_v(GLuint xfb, GLenum pname, GLuint index,
struct gl_transform_feedback_object *obj;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetTransformFeedbacki64_v(GL_ARB_direct_state_access "
- "is not supported)");
- return;
- }
-
obj = lookup_transform_feedback_object_err(ctx, xfb,
"glGetTransformFeedbacki64_v");
if(!obj) {
diff --git a/mesalib/src/mesa/main/uniform_query.cpp b/mesalib/src/mesa/main/uniform_query.cpp
index 728bd1bac..cab5083e8 100644
--- a/mesalib/src/mesa/main/uniform_query.cpp
+++ b/mesalib/src/mesa/main/uniform_query.cpp
@@ -237,6 +237,13 @@ validate_uniform_parameters(struct gl_context *ctx,
struct gl_uniform_storage *const uni = shProg->UniformRemapTable[location];
+ /* Even though no location is assigned to a built-in uniform and this
+ * function should already have returned NULL, this test makes it explicit
+ * that we are not allowing to update the value of a built-in.
+ */
+ if (uni->builtin)
+ return NULL;
+
if (uni->array_elements == 0) {
if (count > 1) {
_mesa_error(ctx, GL_INVALID_OPERATION,
@@ -1028,6 +1035,10 @@ _mesa_get_uniform_location(struct gl_shader_program *shProg,
if (!found)
return GL_INVALID_INDEX;
+ /* If the uniform is built-in, fail. */
+ if (shProg->UniformStorage[location].builtin)
+ return GL_INVALID_INDEX;
+
/* If the uniform is an array, fail if the index is out of bounds.
* (A negative index is caught above.) This also fails if the uniform
* is not an array, but the user is trying to index it, because
@@ -1047,7 +1058,7 @@ _mesa_sampler_uniforms_are_valid(const struct gl_shader_program *shProg,
char *errMsg, size_t errMsgLength)
{
/* Shader does not have samplers. */
- if (shProg->NumUserUniformStorage == 0)
+ if (shProg->NumUniformStorage == 0)
return true;
if (!shProg->SamplersValidated) {
@@ -1087,7 +1098,7 @@ _mesa_sampler_uniforms_pipeline_are_valid(struct gl_pipeline_object *pipeline)
if (!shProg[idx])
continue;
- for (unsigned i = 0; i < shProg[idx]->NumUserUniformStorage; i++) {
+ for (unsigned i = 0; i < shProg[idx]->NumUniformStorage; i++) {
const struct gl_uniform_storage *const storage =
&shProg[idx]->UniformStorage[i];
const glsl_type *const t = (storage->type->is_array())
diff --git a/mesalib/src/mesa/main/uniforms.h b/mesalib/src/mesa/main/uniforms.h
index 55fa2357e..bd7b05e20 100644
--- a/mesalib/src/mesa/main/uniforms.h
+++ b/mesalib/src/mesa/main/uniforms.h
@@ -343,10 +343,6 @@ void GLAPIENTRY
_mesa_ProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count,
GLboolean transpose, const GLdouble *value);
-long
-_mesa_parse_program_resource_name(const GLchar *name,
- const GLchar **out_base_name_end);
-
unsigned
_mesa_get_uniform_location(struct gl_shader_program *shProg,
const GLchar *name, unsigned *offset);
diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c
index da6bbce52..7389037ae 100644
--- a/mesalib/src/mesa/main/varray.c
+++ b/mesalib/src/mesa/main/varray.c
@@ -777,13 +777,6 @@ _mesa_EnableVertexArrayAttrib(GLuint vaobj, GLuint index)
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glEnableVertexArrayAttrib(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated by EnableVertexArrayAttrib
@@ -837,13 +830,6 @@ _mesa_DisableVertexArrayAttrib(GLuint vaobj, GLuint index)
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glDisableVertexArrayAttrib(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated by EnableVertexArrayAttrib
@@ -1108,13 +1094,6 @@ _mesa_GetVertexArrayIndexediv(GLuint vaobj, GLuint index,
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetVertexArrayIndexediv(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated if <vaobj> is not
@@ -1178,14 +1157,6 @@ _mesa_GetVertexArrayIndexed64iv(GLuint vaobj, GLuint index,
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetVertexArrayIndexed64iv(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated if <vaobj> is not
@@ -1774,13 +1745,6 @@ _mesa_VertexArrayVertexBuffer(GLuint vaobj, GLuint bindingIndex, GLuint buffer,
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glVertexArrayVertexBuffer(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated by VertexArrayVertexBuffer
@@ -1946,14 +1910,6 @@ _mesa_VertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count,
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glVertexArrayVertexBuffers(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated by VertexArrayVertexBuffer
@@ -2062,12 +2018,6 @@ vertex_array_attrib_format(GLuint vaobj, GLuint attribIndex, GLint size,
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "%s(GL_ARB_direct_state_access is not supported", func);
- return;
- }
-
ASSERT_OUTSIDE_BEGIN_END(ctx);
/* The ARB_direct_state_access spec says:
@@ -2205,13 +2155,6 @@ _mesa_VertexArrayAttribBinding(GLuint vaobj, GLuint attribIndex, GLuint bindingI
GET_CURRENT_CONTEXT(ctx);
struct gl_vertex_array_object *vao;
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glVertexArrayAttribBinding(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated by VertexArrayAttribBinding
@@ -2286,13 +2229,6 @@ _mesa_VertexArrayBindingDivisor(GLuint vaobj, GLuint bindingIndex, GLuint diviso
struct gl_vertex_array_object *vao;
GET_CURRENT_CONTEXT(ctx);
- if (!ctx->Extensions.ARB_direct_state_access) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glVertexArrayBindingDivisor(GL_ARB_direct_state_access "
- "is not supported");
- return;
- }
-
/* The ARB_direct_state_access specification says:
*
* "An INVALID_OPERATION error is generated by VertexArrayBindingDivisor
diff --git a/mesalib/src/mesa/main/version.c b/mesalib/src/mesa/main/version.c
index eb0b136a8..43357df85 100644
--- a/mesalib/src/mesa/main/version.c
+++ b/mesalib/src/mesa/main/version.c
@@ -51,15 +51,20 @@ check_for_ending(const char *string, const char *ending)
* fwd_context is only valid if version > 0
*/
static void
-get_gl_override(int *version, bool *fwd_context, bool *compat_context)
+get_gl_override(gl_api api, int *version, bool *fwd_context,
+ bool *compat_context)
{
- const char *env_var = "MESA_GL_VERSION_OVERRIDE";
+ const char *env_var = (api == API_OPENGL_CORE || api == API_OPENGL_COMPAT)
+ ? "MESA_GL_VERSION_OVERRIDE" : "MESA_GLES_VERSION_OVERRIDE";
const char *version_str;
int major, minor, n;
static int override_version = -1;
static bool fc_suffix = false;
static bool compat_suffix = false;
+ if (api == API_OPENGLES)
+ goto exit;
+
if (override_version < 0) {
override_version = 0;
@@ -75,7 +80,12 @@ get_gl_override(int *version, bool *fwd_context, bool *compat_context)
override_version = 0;
} else {
override_version = major * 10 + minor;
- if (override_version < 30 && fc_suffix) {
+
+ /* There is no such thing as compatibility or forward-compatible for
+ * OpenGL ES 2.0 or 3.x APIs.
+ */
+ if ((override_version < 30 && fc_suffix) ||
+ (api == API_OPENGLES2 && (fc_suffix || compat_suffix))) {
fprintf(stderr, "error: invalid value for %s: %s\n",
env_var, version_str);
}
@@ -83,6 +93,7 @@ get_gl_override(int *version, bool *fwd_context, bool *compat_context)
}
}
+exit:
*version = override_version;
*fwd_context = fc_suffix;
*compat_context = compat_suffix;
@@ -130,18 +141,26 @@ _mesa_override_gl_version_contextless(struct gl_constants *consts,
int version;
bool fwd_context, compat_context;
- get_gl_override(&version, &fwd_context, &compat_context);
+ get_gl_override(*apiOut, &version, &fwd_context, &compat_context);
if (version > 0) {
*versionOut = version;
- if (version >= 30 && fwd_context) {
- *apiOut = API_OPENGL_CORE;
- consts->ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
- } else if (version >= 31 && !compat_context) {
- *apiOut = API_OPENGL_CORE;
- } else {
- *apiOut = API_OPENGL_COMPAT;
+
+ /* If the API is a desktop API, adjust the context flags. We may also
+ * need to modify the API depending on the version. For example, Mesa
+ * does not support a GL 3.3 compatibility profile.
+ */
+ if (*apiOut == API_OPENGL_CORE || *apiOut == API_OPENGL_COMPAT) {
+ if (version >= 30 && fwd_context) {
+ *apiOut = API_OPENGL_CORE;
+ consts->ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
+ } else if (version >= 31 && !compat_context) {
+ *apiOut = API_OPENGL_CORE;
+ } else {
+ *apiOut = API_OPENGL_COMPAT;
+ }
}
+
return true;
}
return false;
@@ -157,22 +176,6 @@ _mesa_override_gl_version(struct gl_context *ctx)
}
/**
- * Returns the gl override value
- *
- * version > 0 indicates there is an override requested
- */
-int
-_mesa_get_gl_version_override(void)
-{
- int version;
- bool fwd_context, compat_context;
-
- get_gl_override(&version, &fwd_context, &compat_context);
-
- return version;
-}
-
-/**
* Override the context's GLSL version if the environment variable
* MESA_GLSL_VERSION_OVERRIDE is set. Valid values for
* MESA_GLSL_VERSION_OVERRIDE are integers, such as "130".
@@ -433,7 +436,23 @@ compute_version_es2(const struct gl_extensions *extensions)
extensions->EXT_texture_snorm &&
extensions->NV_primitive_restart &&
extensions->OES_depth_texture_cube_map);
- if (ver_3_0) {
+ const bool ver_3_1 = (ver_3_0 &&
+ extensions->ARB_arrays_of_arrays &&
+ extensions->ARB_compute_shader &&
+ extensions->ARB_draw_indirect &&
+ false /*extensions->ARB_framebuffer_no_attachments*/ &&
+ extensions->ARB_shader_atomic_counters &&
+ extensions->ARB_shader_image_load_store &&
+ false /*extensions->ARB_shader_image_size*/ &&
+ false /*extensions->ARB_shader_storage_buffer_object*/ &&
+ extensions->ARB_shading_language_packing &&
+ extensions->ARB_stencil_texturing &&
+ extensions->ARB_gpu_shader5 &&
+ extensions->EXT_shader_integer_mix);
+
+ if (ver_3_1) {
+ return 31;
+ } else if (ver_3_0) {
return 30;
} else if (ver_2_0) {
return 20;
diff --git a/mesalib/src/mesa/main/version.h b/mesalib/src/mesa/main/version.h
index 450a0e31d..ee7cb7501 100644
--- a/mesalib/src/mesa/main/version.h
+++ b/mesalib/src/mesa/main/version.h
@@ -47,7 +47,4 @@ _mesa_override_gl_version(struct gl_context *ctx);
extern void
_mesa_override_glsl_version(struct gl_constants *consts);
-extern int
-_mesa_get_gl_version_override(void);
-
#endif /* VERSION_H */
diff --git a/mesalib/src/mesa/main/vtxfmt.c b/mesalib/src/mesa/main/vtxfmt.c
index d7ef7e278..81bf4c589 100644
--- a/mesalib/src/mesa/main/vtxfmt.c
+++ b/mesalib/src/mesa/main/vtxfmt.c
@@ -207,7 +207,7 @@ install_vtxfmt(struct gl_context *ctx, struct _glapi_table *tab,
SET_VertexAttribP4uiv(tab, vfmt->VertexAttribP4uiv);
}
- if (_mesa_is_desktop_gl(ctx)) {
+ if (ctx->API == API_OPENGL_CORE) {
SET_VertexAttribL1d(tab, vfmt->VertexAttribL1d);
SET_VertexAttribL2d(tab, vfmt->VertexAttribL2d);
SET_VertexAttribL3d(tab, vfmt->VertexAttribL3d);
diff --git a/mesalib/src/mesa/program/dummy_errors.c b/mesalib/src/mesa/program/dummy_errors.c
new file mode 100644
index 000000000..d69f54d1d
--- /dev/null
+++ b/mesalib/src/mesa/program/dummy_errors.c
@@ -0,0 +1,30 @@
+/*
+ * Copyright © 2014 Intel Corporation
+ *
+ * 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, sublicense,
+ * 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 NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS 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.
+ */
+#include <stdio.h>
+#include "main/errors.h"
+
+void
+_mesa_error_no_memory(const char *caller)
+{
+ fprintf(stderr, "Mesa error: out of memory in %s", caller);
+}
diff --git a/mesalib/src/mesa/program/ir_to_mesa.cpp b/mesalib/src/mesa/program/ir_to_mesa.cpp
index 3dcb53702..18e3bc5d5 100644
--- a/mesalib/src/mesa/program/ir_to_mesa.cpp
+++ b/mesalib/src/mesa/program/ir_to_mesa.cpp
@@ -262,6 +262,7 @@ public:
virtual void visit(ir_if *);
virtual void visit(ir_emit_vertex *);
virtual void visit(ir_end_primitive *);
+ virtual void visit(ir_barrier *);
/*@}*/
src_reg result;
@@ -405,7 +406,7 @@ ir_to_mesa_visitor::emit_dp(ir_instruction *ir,
dst_reg dst, src_reg src0, src_reg src1,
unsigned elements)
{
- static const gl_inst_opcode dot_opcodes[] = {
+ static const enum prog_opcode dot_opcodes[] = {
OPCODE_DP2, OPCODE_DP3, OPCODE_DP4
};
@@ -2117,6 +2118,12 @@ ir_to_mesa_visitor::visit(ir_end_primitive *)
assert(!"Geometry shaders not supported.");
}
+void
+ir_to_mesa_visitor::visit(ir_barrier *)
+{
+ unreachable("GLSL barrier() not supported.");
+}
+
ir_to_mesa_visitor::ir_to_mesa_visitor()
{
result.file = PROGRAM_UNDEFINED;
@@ -2406,9 +2413,14 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
if (!found)
continue;
+ struct gl_uniform_storage *storage =
+ &shader_program->UniformStorage[location];
+
+ /* Do not associate any uniform storage to built-in uniforms */
+ if (storage->builtin)
+ continue;
+
if (location != last_location) {
- struct gl_uniform_storage *storage =
- &shader_program->UniformStorage[location];
enum gl_uniform_driver_format format = uniform_native;
unsigned columns = 0;
@@ -2720,7 +2732,7 @@ get_mesa_program(struct gl_context *ctx,
mesa_inst->Opcode = inst->op;
mesa_inst->CondUpdate = inst->cond_update;
if (inst->saturate)
- mesa_inst->SaturateMode = SATURATE_ZERO_ONE;
+ mesa_inst->Saturate = GL_TRUE;
mesa_inst->DstReg.File = inst->dst.file;
mesa_inst->DstReg.Index = inst->dst.index;
mesa_inst->DstReg.CondMask = inst->dst.cond_mask;
diff --git a/mesalib/src/mesa/program/prog_execute.c b/mesalib/src/mesa/program/prog_execute.c
index 16e8e340d..46260b548 100644
--- a/mesalib/src/mesa/program/prog_execute.c
+++ b/mesalib/src/mesa/program/prog_execute.c
@@ -397,7 +397,7 @@ store_vector4(const struct prog_instruction *inst,
struct gl_program_machine *machine, const GLfloat value[4])
{
const struct prog_dst_register *dstReg = &(inst->DstReg);
- const GLboolean clamp = inst->SaturateMode == SATURATE_ZERO_ONE;
+ const GLboolean clamp = inst->Saturate;
GLuint writeMask = dstReg->WriteMask;
GLfloat clampedValue[4];
GLfloat *dst = get_dst_register_pointer(dstReg, machine);
diff --git a/mesalib/src/mesa/program/prog_instruction.c b/mesalib/src/mesa/program/prog_instruction.c
index f9ebe4e8f..21ef35337 100644
--- a/mesalib/src/mesa/program/prog_instruction.c
+++ b/mesalib/src/mesa/program/prog_instruction.c
@@ -55,7 +55,7 @@ _mesa_init_instructions(struct prog_instruction *inst, GLuint count)
inst[i].DstReg.CondMask = COND_TR;
inst[i].DstReg.CondSwizzle = SWIZZLE_NOOP;
- inst[i].SaturateMode = SATURATE_OFF;
+ inst[i].Saturate = GL_FALSE;
inst[i].Precision = FLOAT32;
}
}
@@ -114,7 +114,7 @@ _mesa_free_instructions(struct prog_instruction *inst, GLuint count)
*/
struct instruction_info
{
- gl_inst_opcode Opcode;
+ enum prog_opcode Opcode;
const char *Name;
GLuint NumSrcRegs;
GLuint NumDstRegs;
@@ -198,7 +198,7 @@ static const struct instruction_info InstInfo[MAX_OPCODE] = {
* Return the number of src registers for the given instruction/opcode.
*/
GLuint
-_mesa_num_inst_src_regs(gl_inst_opcode opcode)
+_mesa_num_inst_src_regs(enum prog_opcode opcode)
{
assert(opcode < MAX_OPCODE);
assert(opcode == InstInfo[opcode].Opcode);
@@ -211,7 +211,7 @@ _mesa_num_inst_src_regs(gl_inst_opcode opcode)
* Return the number of dst registers for the given instruction/opcode.
*/
GLuint
-_mesa_num_inst_dst_regs(gl_inst_opcode opcode)
+_mesa_num_inst_dst_regs(enum prog_opcode opcode)
{
assert(opcode < MAX_OPCODE);
assert(opcode == InstInfo[opcode].Opcode);
@@ -221,7 +221,7 @@ _mesa_num_inst_dst_regs(gl_inst_opcode opcode)
GLboolean
-_mesa_is_tex_instruction(gl_inst_opcode opcode)
+_mesa_is_tex_instruction(enum prog_opcode opcode)
{
return (opcode == OPCODE_TEX ||
opcode == OPCODE_TXB ||
@@ -285,7 +285,7 @@ _mesa_check_soa_dependencies(const struct prog_instruction *inst)
* Return string name for given program opcode.
*/
const char *
-_mesa_opcode_string(gl_inst_opcode opcode)
+_mesa_opcode_string(enum prog_opcode opcode)
{
if (opcode < MAX_OPCODE)
return InstInfo[opcode].Name;
diff --git a/mesalib/src/mesa/program/prog_instruction.h b/mesalib/src/mesa/program/prog_instruction.h
index 96da198f8..d56f96cfa 100644
--- a/mesalib/src/mesa/program/prog_instruction.h
+++ b/mesalib/src/mesa/program/prog_instruction.h
@@ -118,15 +118,6 @@
/**
- * Saturation modes when storing values.
- */
-/*@{*/
-#define SATURATE_OFF 0
-#define SATURATE_ZERO_ONE 1
-/*@}*/
-
-
-/**
* Per-component negation masks
*/
/*@{*/
@@ -143,7 +134,7 @@
/**
* Program instruction opcodes for vertex, fragment and geometry programs.
*/
-typedef enum prog_opcode {
+enum prog_opcode {
/* ARB_vp ARB_fp NV_vp NV_fp GLSL */
/*------------------------------------------*/
OPCODE_NOP = 0, /* X */
@@ -213,7 +204,7 @@ typedef enum prog_opcode {
OPCODE_TRUNC, /* X */
OPCODE_XPD, /* X X */
MAX_OPCODE
-} gl_inst_opcode;
+};
/**
@@ -300,7 +291,7 @@ struct prog_dst_register
*/
struct prog_instruction
{
- gl_inst_opcode Opcode;
+ enum prog_opcode Opcode;
struct prog_src_register SrcReg[3];
struct prog_dst_register DstReg;
@@ -327,15 +318,12 @@ struct prog_instruction
GLuint CondDst:1;
/**
- * Saturate each value of the vectored result to the range [0,1] or the
- * range [-1,1]. \c SSAT mode (i.e., saturation to the range [-1,1]) is
- * only available in NV_fragment_program2 mode.
- * Value is one of the SATURATE_* tokens.
+ * Saturate each value of the vectored result to the range [0,1].
*
* \since
* NV_fragment_program_option, NV_vertex_program3.
*/
- GLuint SaturateMode:2;
+ GLuint Saturate:1;
/**
* Per-instruction selectable precision: FLOAT32, FLOAT16, FIXED12.
@@ -368,9 +356,6 @@ struct prog_instruction
*/
GLint BranchTarget;
- /** for driver use (try to remove someday) */
- GLint Aux;
-
/** for debugging purposes */
const char *Comment;
};
@@ -394,19 +379,19 @@ extern void
_mesa_free_instructions(struct prog_instruction *inst, GLuint count);
extern GLuint
-_mesa_num_inst_src_regs(gl_inst_opcode opcode);
+_mesa_num_inst_src_regs(enum prog_opcode opcode);
extern GLuint
-_mesa_num_inst_dst_regs(gl_inst_opcode opcode);
+_mesa_num_inst_dst_regs(enum prog_opcode opcode);
extern GLboolean
-_mesa_is_tex_instruction(gl_inst_opcode opcode);
+_mesa_is_tex_instruction(enum prog_opcode opcode);
extern GLboolean
_mesa_check_soa_dependencies(const struct prog_instruction *inst);
extern const char *
-_mesa_opcode_string(gl_inst_opcode opcode);
+_mesa_opcode_string(enum prog_opcode opcode);
#ifdef __cplusplus
diff --git a/mesalib/src/mesa/program/prog_optimize.c b/mesalib/src/mesa/program/prog_optimize.c
index 6d4485acb..f9e9035fc 100644
--- a/mesalib/src/mesa/program/prog_optimize.c
+++ b/mesalib/src/mesa/program/prog_optimize.c
@@ -478,7 +478,7 @@ can_upward_mov_be_modifed(const struct prog_instruction *mov)
return
can_downward_mov_be_modifed(mov) &&
mov->DstReg.File == PROGRAM_TEMPORARY &&
- mov->SaturateMode == SATURATE_OFF;
+ !mov->Saturate;
}
@@ -653,7 +653,7 @@ _mesa_merge_mov_into_inst(struct prog_instruction *inst,
if (mask != (inst->DstReg.WriteMask & mask))
return GL_FALSE;
- inst->SaturateMode |= mov->SaturateMode;
+ inst->Saturate |= mov->Saturate;
/* Depending on the instruction, we may need to recompute the swizzles.
* Also, some other instructions (like TEX) are not linear. We will only
diff --git a/mesalib/src/mesa/program/prog_print.c b/mesalib/src/mesa/program/prog_print.c
index d588d07ff..e4faa63c0 100644
--- a/mesalib/src/mesa/program/prog_print.c
+++ b/mesalib/src/mesa/program/prog_print.c
@@ -600,7 +600,7 @@ _mesa_fprint_alu_instruction(FILE *f,
fprintf(f, ".C");
/* frag prog only */
- if (inst->SaturateMode == SATURATE_ZERO_ONE)
+ if (inst->Saturate)
fprintf(f, "_SAT");
fprintf(f, " ");
@@ -658,7 +658,7 @@ _mesa_fprint_instruction_opt(FILE *f,
switch (inst->Opcode) {
case OPCODE_SWZ:
fprintf(f, "SWZ");
- if (inst->SaturateMode == SATURATE_ZERO_ONE)
+ if (inst->Saturate)
fprintf(f, "_SAT");
fprintf(f, " ");
fprint_dst_reg(f, &inst->DstReg, mode, prog);
@@ -675,7 +675,7 @@ _mesa_fprint_instruction_opt(FILE *f,
case OPCODE_TXB:
case OPCODE_TXD:
fprintf(f, "%s", _mesa_opcode_string(inst->Opcode));
- if (inst->SaturateMode == SATURATE_ZERO_ONE)
+ if (inst->Saturate)
fprintf(f, "_SAT");
fprintf(f, " ");
fprint_dst_reg(f, &inst->DstReg, mode, prog);
@@ -864,7 +864,7 @@ _mesa_fprint_program_opt(FILE *f,
else
fprintf(f, "# Fragment Program/Shader %u\n", prog->Id);
break;
- case MESA_GEOMETRY_PROGRAM:
+ case GL_GEOMETRY_PROGRAM_NV:
fprintf(f, "# Geometry Shader\n");
}
diff --git a/mesalib/src/mesa/program/prog_to_nir.c b/mesalib/src/mesa/program/prog_to_nir.c
index 6c5fa51ec..d54f93424 100644
--- a/mesalib/src/mesa/program/prog_to_nir.c
+++ b/mesalib/src/mesa/program/prog_to_nir.c
@@ -47,6 +47,7 @@ struct ptn_compile {
nir_builder build;
bool error;
+ nir_variable *parameters;
nir_variable *input_vars[VARYING_SLOT_MAX];
nir_variable *output_vars[VARYING_SLOT_MAX];
nir_register **output_regs;
@@ -112,21 +113,6 @@ ptn_get_dest(struct ptn_compile *c, const struct prog_dst_register *prog_dst)
return dest;
}
-/**
- * Multiply the contents of the ADDR register by 4 to convert from the number
- * of vec4s to the number of floating point components.
- */
-static nir_ssa_def *
-ptn_addr_reg_value(struct ptn_compile *c)
-{
- nir_builder *b = &c->build;
- nir_alu_src src;
- memset(&src, 0, sizeof(src));
- src.src = nir_src_for_reg(c->addr_reg);
-
- return nir_imul(b, nir_fmov_alu(b, src, 1), nir_imm_int(b, 4));
-}
-
static nir_ssa_def *
ptn_get_src(struct ptn_compile *c, const struct prog_src_register *prog_src)
{
@@ -180,27 +166,38 @@ ptn_get_src(struct ptn_compile *c, const struct prog_src_register *prog_src)
}
/* FALLTHROUGH */
case PROGRAM_STATE_VAR: {
- nir_intrinsic_op load_op =
- prog_src->RelAddr ? nir_intrinsic_load_uniform_indirect :
- nir_intrinsic_load_uniform;
- nir_intrinsic_instr *load = nir_intrinsic_instr_create(b->shader, load_op);
+ nir_intrinsic_instr *load =
+ nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_var);
nir_ssa_dest_init(&load->instr, &load->dest, 4, NULL);
load->num_components = 4;
- /* Multiply src->Index by 4 to scale from # of vec4s to components. */
- load->const_index[0] = 4 * prog_src->Index;
- load->const_index[1] = 1;
+ load->variables[0] = nir_deref_var_create(load, c->parameters);
+ nir_deref_array *deref_arr =
+ nir_deref_array_create(load->variables[0]);
+ deref_arr->deref.type = glsl_vec4_type();
+ load->variables[0]->deref.child = &deref_arr->deref;
if (prog_src->RelAddr) {
- nir_ssa_def *reladdr = ptn_addr_reg_value(c);
+ deref_arr->deref_array_type = nir_deref_array_type_indirect;
+
+ nir_alu_src addr_src = { NIR_SRC_INIT };
+ addr_src.src = nir_src_for_reg(c->addr_reg);
+ nir_ssa_def *reladdr = nir_imov_alu(b, addr_src, 1);
+
if (prog_src->Index < 0) {
/* This is a negative offset which should be added to the address
* register's value.
*/
- reladdr = nir_iadd(b, reladdr, nir_imm_int(b, load->const_index[0]));
- load->const_index[0] = 0;
+ reladdr = nir_iadd(b, reladdr, nir_imm_int(b, prog_src->Index));
+
+ deref_arr->base_offset = 0;
+ } else {
+ deref_arr->base_offset = prog_src->Index;
}
- load->src[0] = nir_src_for_ssa(reladdr);
+ deref_arr->indirect = nir_src_for_ssa(reladdr);
+ } else {
+ deref_arr->deref_array_type = nir_deref_array_type_direct;
+ deref_arr->base_offset = prog_src->Index;
}
nir_instr_insert_after_cf_list(b->cf_node_list, &load->instr);
@@ -700,7 +697,7 @@ static const nir_op op_trans[MAX_OPCODE] = {
[OPCODE_ADD] = nir_op_fadd,
[OPCODE_ARL] = 0,
[OPCODE_CMP] = 0,
- [OPCODE_COS] = nir_op_fcos,
+ [OPCODE_COS] = 0,
[OPCODE_DDX] = nir_op_fddx,
[OPCODE_DDY] = nir_op_fddy,
[OPCODE_DP2] = 0,
@@ -709,11 +706,11 @@ static const nir_op op_trans[MAX_OPCODE] = {
[OPCODE_DPH] = 0,
[OPCODE_DST] = 0,
[OPCODE_END] = 0,
- [OPCODE_EX2] = nir_op_fexp2,
+ [OPCODE_EX2] = 0,
[OPCODE_EXP] = 0,
[OPCODE_FLR] = nir_op_ffloor,
[OPCODE_FRC] = nir_op_ffract,
- [OPCODE_LG2] = nir_op_flog2,
+ [OPCODE_LG2] = 0,
[OPCODE_LIT] = 0,
[OPCODE_LOG] = 0,
[OPCODE_LRP] = 0,
@@ -722,15 +719,15 @@ static const nir_op op_trans[MAX_OPCODE] = {
[OPCODE_MIN] = nir_op_fmin,
[OPCODE_MOV] = nir_op_fmov,
[OPCODE_MUL] = nir_op_fmul,
- [OPCODE_POW] = nir_op_fpow,
- [OPCODE_RCP] = nir_op_frcp,
+ [OPCODE_POW] = 0,
+ [OPCODE_RCP] = 0,
- [OPCODE_RSQ] = nir_op_frsq,
+ [OPCODE_RSQ] = 0,
[OPCODE_SCS] = 0,
[OPCODE_SEQ] = 0,
[OPCODE_SGE] = 0,
[OPCODE_SGT] = 0,
- [OPCODE_SIN] = nir_op_fsin,
+ [OPCODE_SIN] = 0,
[OPCODE_SLE] = 0,
[OPCODE_SLT] = 0,
[OPCODE_SNE] = 0,
@@ -767,7 +764,8 @@ ptn_emit_instruction(struct ptn_compile *c, struct prog_instruction *prog_inst)
switch (op) {
case OPCODE_RSQ:
- ptn_move_dest(b, dest, nir_frsq(b, ptn_channel(b, src[0], X)));
+ ptn_move_dest(b, dest,
+ nir_frsq(b, nir_fabs(b, ptn_channel(b, src[0], X))));
break;
case OPCODE_RCP:
@@ -894,7 +892,7 @@ ptn_emit_instruction(struct ptn_compile *c, struct prog_instruction *prog_inst)
break;
default:
- if (op_trans[op] != 0 || op == OPCODE_MOV) {
+ if (op_trans[op] != 0) {
ptn_alu(b, op_trans[op], dest, src);
} else {
fprintf(stderr, "unknown opcode: %s\n", _mesa_opcode_string(op));
@@ -903,8 +901,8 @@ ptn_emit_instruction(struct ptn_compile *c, struct prog_instruction *prog_inst)
break;
}
- if (prog_inst->SaturateMode) {
- assert(prog_inst->SaturateMode == SATURATE_ZERO_ONE);
+ if (prog_inst->Saturate) {
+ assert(prog_inst->Saturate);
assert(!dest.dest.is_ssa);
ptn_move_dest(b, dest, nir_fsat(b, ptn_src_for_dest(c, &dest)));
}
@@ -926,10 +924,23 @@ ptn_add_output_stores(struct ptn_compile *c)
foreach_list_typed(nir_variable, var, node, &b->shader->outputs) {
nir_intrinsic_instr *store =
nir_intrinsic_instr_create(b->shader, nir_intrinsic_store_var);
- store->num_components = 4;
+ store->num_components = glsl_get_vector_elements(var->type);
store->variables[0] =
nir_deref_var_create(store, c->output_vars[var->data.location]);
- store->src[0].reg.reg = c->output_regs[var->data.location];
+
+ if (c->prog->Target == GL_FRAGMENT_PROGRAM_ARB &&
+ var->data.location == FRAG_RESULT_DEPTH) {
+ /* result.depth has this strange convention of being the .z component of
+ * a vec4 with undefined .xyw components. We resolve it to a scalar, to
+ * match GLSL's gl_FragDepth and the expectations of most backends.
+ */
+ nir_alu_src alu_src = { NIR_SRC_INIT };
+ alu_src.src = nir_src_for_reg(c->output_regs[FRAG_RESULT_DEPTH]);
+ alu_src.swizzle[0] = SWIZZLE_Z;
+ store->src[0] = nir_src_for_ssa(nir_fmov_alu(b, alu_src, 1));
+ } else {
+ store->src[0].reg.reg = c->output_regs[var->data.location];
+ }
nir_instr_insert_after_cf_list(c->build.cf_node_list, &store->instr);
}
}
@@ -1022,7 +1033,10 @@ setup_registers_and_variables(struct ptn_compile *c)
reg->num_components = 4;
nir_variable *var = rzalloc(shader, nir_variable);
- var->type = glsl_vec4_type();
+ if (c->prog->Target == GL_FRAGMENT_PROGRAM_ARB && i == FRAG_RESULT_DEPTH)
+ var->type = glsl_float_type();
+ else
+ var->type = glsl_vec4_type();
var->data.mode = nir_var_shader_out;
var->name = ralloc_asprintf(var, "out_%d", i);
@@ -1057,13 +1071,11 @@ setup_registers_and_variables(struct ptn_compile *c)
}
reg->num_components = 1;
c->addr_reg = reg;
-
- /* Set the number of uniforms */
- shader->num_uniforms = 4 * c->prog->Parameters->NumParameters;
}
struct nir_shader *
-prog_to_nir(const struct gl_program *prog, const nir_shader_compiler_options *options)
+prog_to_nir(const struct gl_program *prog,
+ const nir_shader_compiler_options *options)
{
struct ptn_compile *c;
struct nir_shader *s;
@@ -1076,6 +1088,14 @@ prog_to_nir(const struct gl_program *prog, const nir_shader_compiler_options *op
goto fail;
c->prog = prog;
+ c->parameters = rzalloc(s, nir_variable);
+ c->parameters->type = glsl_array_type(glsl_vec4_type(),
+ prog->Parameters->NumParameters);
+ c->parameters->name = "parameters";
+ c->parameters->data.read_only = true;
+ c->parameters->data.mode = nir_var_uniform;
+ exec_list_push_tail(&s->uniforms, &c->parameters->node);
+
nir_function *func = nir_function_create(s, "main");
nir_function_overload *overload = nir_function_overload_create(func);
nir_function_impl *impl = nir_function_impl_create(overload);
diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c
index fb61f4d36..c13e61b16 100644
--- a/mesalib/src/mesa/program/program.c
+++ b/mesalib/src/mesa/program/program.c
@@ -97,13 +97,6 @@ _mesa_init_program(struct gl_context *ctx)
assert(ctx->FragmentProgram.Current);
ctx->FragmentProgram.Cache = _mesa_new_program_cache();
- ctx->GeometryProgram.Enabled = GL_FALSE;
- /* right now by default we don't have a geometry program */
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current,
- NULL);
-
- _mesa_reference_compprog(ctx, &ctx->ComputeProgram.Current, NULL);
-
/* XXX probably move this stuff */
ctx->ATIFragmentShader.Enabled = GL_FALSE;
ctx->ATIFragmentShader.Current = ctx->Shared->DefaultFragmentShader;
@@ -122,8 +115,6 @@ _mesa_free_program_data(struct gl_context *ctx)
_mesa_delete_program_cache(ctx, ctx->VertexProgram.Cache);
_mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL);
_mesa_delete_shader_cache(ctx, ctx->FragmentProgram.Cache);
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL);
- _mesa_reference_compprog(ctx, &ctx->ComputeProgram.Current, NULL);
/* XXX probably move this stuff */
if (ctx->ATIFragmentShader.Current) {
@@ -153,9 +144,6 @@ _mesa_update_default_objects_program(struct gl_context *ctx)
ctx->Shared->DefaultFragmentProgram);
assert(ctx->FragmentProgram.Current);
- _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current,
- ctx->Shared->DefaultGeometryProgram);
-
/* XXX probably move this stuff */
if (ctx->ATIFragmentShader.Current) {
ctx->ATIFragmentShader.Current->RefCount--;
@@ -340,7 +328,7 @@ _mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id)
CALLOC_STRUCT(gl_fragment_program),
target, id );
break;
- case MESA_GEOMETRY_PROGRAM:
+ case GL_GEOMETRY_PROGRAM_NV:
prog = _mesa_init_geometry_program(ctx,
CALLOC_STRUCT(gl_geometry_program),
target, id);
@@ -426,8 +414,8 @@ _mesa_reference_program_(struct gl_context *ctx,
else if ((*ptr)->Target == GL_FRAGMENT_PROGRAM_ARB)
assert(prog->Target == GL_FRAGMENT_PROGRAM_ARB ||
prog->Target == GL_FRAGMENT_PROGRAM_NV);
- else if ((*ptr)->Target == MESA_GEOMETRY_PROGRAM)
- assert(prog->Target == MESA_GEOMETRY_PROGRAM);
+ else if ((*ptr)->Target == GL_GEOMETRY_PROGRAM_NV)
+ assert(prog->Target == GL_GEOMETRY_PROGRAM_NV);
}
#endif
@@ -439,7 +427,7 @@ _mesa_reference_program_(struct gl_context *ctx,
printf("Program %p ID=%u Target=%s Refcount-- to %d\n",
*ptr, (*ptr)->Id,
((*ptr)->Target == GL_VERTEX_PROGRAM_ARB ? "VP" :
- ((*ptr)->Target == MESA_GEOMETRY_PROGRAM ? "GP" : "FP")),
+ ((*ptr)->Target == GL_GEOMETRY_PROGRAM_NV ? "GP" : "FP")),
(*ptr)->RefCount - 1);
#endif
assert((*ptr)->RefCount > 0);
@@ -464,7 +452,7 @@ _mesa_reference_program_(struct gl_context *ctx,
printf("Program %p ID=%u Target=%s Refcount++ to %d\n",
prog, prog->Id,
(prog->Target == GL_VERTEX_PROGRAM_ARB ? "VP" :
- (prog->Target == MESA_GEOMETRY_PROGRAM ? "GP" : "FP")),
+ (prog->Target == GL_GEOMETRY_PROGRAM_NV ? "GP" : "FP")),
prog->RefCount);
#endif
/*mtx_unlock(&prog->Mutex);*/
@@ -554,7 +542,7 @@ _mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog)
fpc->PixelCenterInteger = fp->PixelCenterInteger;
}
break;
- case MESA_GEOMETRY_PROGRAM:
+ case GL_GEOMETRY_PROGRAM_NV:
{
const struct gl_geometry_program *gp = gl_geometry_program_const(prog);
struct gl_geometry_program *gpc = gl_geometry_program(clone);
diff --git a/mesalib/src/mesa/program/program_parse.y b/mesalib/src/mesa/program/program_parse.y
index 716b83d2d..635f5d09d 100644
--- a/mesalib/src/mesa/program/program_parse.y
+++ b/mesalib/src/mesa/program/program_parse.y
@@ -84,7 +84,7 @@ static void asm_instruction_set_operands(struct asm_instruction *inst,
const struct prog_dst_register *dst, const struct asm_src_register *src0,
const struct asm_src_register *src1, const struct asm_src_register *src2);
-static struct asm_instruction *asm_instruction_ctor(gl_inst_opcode op,
+static struct asm_instruction *asm_instruction_ctor(enum prog_opcode op,
const struct prog_dst_register *dst, const struct asm_src_register *src0,
const struct asm_src_register *src1, const struct asm_src_register *src2);
@@ -139,7 +139,7 @@ static struct asm_instruction *asm_instruction_copy_ctor(
gl_state_index state[STATE_LENGTH];
int negate;
struct asm_vector vector;
- gl_inst_opcode opcode;
+ enum prog_opcode opcode;
struct {
unsigned swz;
@@ -2275,7 +2275,7 @@ asm_instruction_set_operands(struct asm_instruction *inst,
struct asm_instruction *
-asm_instruction_ctor(gl_inst_opcode op,
+asm_instruction_ctor(enum prog_opcode op,
const struct prog_dst_register *dst,
const struct asm_src_register *src0,
const struct asm_src_register *src1,
@@ -2308,7 +2308,7 @@ asm_instruction_copy_ctor(const struct prog_instruction *base,
inst->Base.Opcode = base->Opcode;
inst->Base.CondUpdate = base->CondUpdate;
inst->Base.CondDst = base->CondDst;
- inst->Base.SaturateMode = base->SaturateMode;
+ inst->Base.Saturate = base->Saturate;
inst->Base.Precision = base->Precision;
asm_instruction_set_operands(inst, dst, src0, src1, src2);
diff --git a/mesalib/src/mesa/program/program_parse_extra.c b/mesalib/src/mesa/program/program_parse_extra.c
index a9e364045..32b54afc5 100644
--- a/mesalib/src/mesa/program/program_parse_extra.c
+++ b/mesalib/src/mesa/program/program_parse_extra.c
@@ -40,7 +40,7 @@ _mesa_parse_instruction_suffix(const struct asm_parser_state *state,
{
inst->CondUpdate = 0;
inst->CondDst = 0;
- inst->SaturateMode = SATURATE_OFF;
+ inst->Saturate = GL_FALSE;
inst->Precision = FLOAT32;
@@ -82,7 +82,7 @@ _mesa_parse_instruction_suffix(const struct asm_parser_state *state,
*/
if (state->mode == ARB_fragment) {
if (strcmp(suffix, "_SAT") == 0) {
- inst->SaturateMode = SATURATE_ZERO_ONE;
+ inst->Saturate = GL_TRUE;
suffix += 4;
}
}
diff --git a/mesalib/src/mesa/program/programopt.c b/mesalib/src/mesa/program/programopt.c
index e82c68a53..af78150d5 100644
--- a/mesalib/src/mesa/program/programopt.c
+++ b/mesalib/src/mesa/program/programopt.c
@@ -305,7 +305,7 @@ _mesa_append_fog_code(struct gl_context *ctx,
/* change the instruction to write to colorTemp w/ clamping */
inst->DstReg.File = PROGRAM_TEMPORARY;
inst->DstReg.Index = colorTemp;
- inst->SaturateMode = saturate;
+ inst->Saturate = saturate;
/* don't break (may be several writes to result.color) */
}
inst++;
@@ -331,7 +331,7 @@ _mesa_append_fog_code(struct gl_context *ctx,
inst->SrcReg[2].File = PROGRAM_STATE_VAR;
inst->SrcReg[2].Index = fogPRefOpt;
inst->SrcReg[2].Swizzle = SWIZZLE_YYYY;
- inst->SaturateMode = SATURATE_ZERO_ONE;
+ inst->Saturate = GL_TRUE;
inst++;
}
else {
@@ -374,7 +374,7 @@ _mesa_append_fog_code(struct gl_context *ctx,
inst->SrcReg[0].Index = fogFactorTemp;
inst->SrcReg[0].Negate = NEGATE_XYZW;
inst->SrcReg[0].Swizzle = SWIZZLE_XXXX;
- inst->SaturateMode = SATURATE_ZERO_ONE;
+ inst->Saturate = GL_TRUE;
inst++;
}
/* LRP result.color.xyz, fogFactorTemp.xxxx, colorTemp, fogColorRef; */
diff --git a/mesalib/src/mesa/state_tracker/st_atom_shader.c b/mesalib/src/mesa/state_tracker/st_atom_shader.c
index 629f54f25..ad8d2624f 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_shader.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_shader.c
@@ -189,7 +189,7 @@ update_gp( struct st_context *st )
}
stgp = st_geometry_program(st->ctx->GeometryProgram._Current);
- assert(stgp->Base.Base.Target == MESA_GEOMETRY_PROGRAM);
+ assert(stgp->Base.Base.Target == GL_GEOMETRY_PROGRAM_NV);
memset(&key, 0, sizeof(key));
key.st = st;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_bitmap.c b/mesalib/src/mesa/state_tracker/st_cb_bitmap.c
index 2107ab167..c881e194f 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_bitmap.c
@@ -452,6 +452,8 @@ draw_bitmap_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
cso_save_fragment_shader(cso);
cso_save_stream_outputs(cso);
cso_save_vertex_shader(cso);
+ cso_save_tessctrl_shader(cso);
+ cso_save_tesseval_shader(cso);
cso_save_geometry_shader(cso);
cso_save_vertex_elements(cso);
cso_save_aux_vertex_buffer_slot(cso);
@@ -466,7 +468,9 @@ draw_bitmap_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
/* vertex shader state: position + texcoord pass-through */
cso_set_vertex_shader_handle(cso, st->bitmap.vs);
- /* geometry shader state: disabled */
+ /* disable other shaders */
+ cso_set_tessctrl_shader_handle(cso, NULL);
+ cso_set_tesseval_shader_handle(cso, NULL);
cso_set_geometry_shader_handle(cso, NULL);
/* user samplers, plus our bitmap sampler */
@@ -536,6 +540,8 @@ draw_bitmap_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
cso_restore_viewport(cso);
cso_restore_fragment_shader(cso);
cso_restore_vertex_shader(cso);
+ cso_restore_tessctrl_shader(cso);
+ cso_restore_tesseval_shader(cso);
cso_restore_geometry_shader(cso);
cso_restore_vertex_elements(cso);
cso_restore_aux_vertex_buffer_slot(cso);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_blit.c b/mesalib/src/mesa/state_tracker/st_cb_blit.c
index bbaedd108..6d9371852 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_blit.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_blit.c
@@ -36,6 +36,7 @@
#include "st_context.h"
#include "st_texture.h"
+#include "st_cb_bitmap.h"
#include "st_cb_blit.h"
#include "st_cb_fbo.h"
#include "st_atom.h"
@@ -93,6 +94,9 @@ st_BlitFramebuffer(struct gl_context *ctx,
st_validate_state(st);
+ /* Make sure bitmap rendering has landed in the framebuffers */
+ st_flush_bitmap_cache(st);
+
clip.srcX0 = srcX0;
clip.srcY0 = srcY0;
clip.srcX1 = srcX1;
diff --git a/mesalib/src/mesa/state_tracker/st_cb_clear.c b/mesalib/src/mesa/state_tracker/st_cb_clear.c
index f10e9063a..137fac8a9 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_clear.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_clear.c
@@ -265,6 +265,8 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
cso_save_fragment_shader(st->cso_context);
cso_save_stream_outputs(st->cso_context);
cso_save_vertex_shader(st->cso_context);
+ cso_save_tessctrl_shader(st->cso_context);
+ cso_save_tesseval_shader(st->cso_context);
cso_save_geometry_shader(st->cso_context);
cso_save_vertex_elements(st->cso_context);
cso_save_aux_vertex_buffer_slot(st->cso_context);
@@ -347,6 +349,8 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
}
set_fragment_shader(st);
+ cso_set_tessctrl_shader_handle(st->cso_context, NULL);
+ cso_set_tesseval_shader_handle(st->cso_context, NULL);
if (num_layers > 1)
set_vertex_shader_layered(st);
@@ -371,6 +375,8 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
cso_restore_viewport(st->cso_context);
cso_restore_fragment_shader(st->cso_context);
cso_restore_vertex_shader(st->cso_context);
+ cso_restore_tessctrl_shader(st->cso_context);
+ cso_restore_tesseval_shader(st->cso_context);
cso_restore_geometry_shader(st->cso_context);
cso_restore_vertex_elements(st->cso_context);
cso_restore_aux_vertex_buffer_slot(st->cso_context);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
index 3edf31bad..a6a98c83a 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -693,6 +693,8 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
cso_save_fragment_shader(cso);
cso_save_stream_outputs(cso);
cso_save_vertex_shader(cso);
+ cso_save_tessctrl_shader(cso);
+ cso_save_tesseval_shader(cso);
cso_save_geometry_shader(cso);
cso_save_vertex_elements(cso);
cso_save_aux_vertex_buffer_slot(cso);
@@ -746,7 +748,9 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
/* vertex shader state: position + texcoord pass-through */
cso_set_vertex_shader_handle(cso, driver_vp);
- /* geometry shader state: disabled */
+ /* disable other shaders */
+ cso_set_tessctrl_shader_handle(cso, NULL);
+ cso_set_tesseval_shader_handle(cso, NULL);
cso_set_geometry_shader_handle(cso, NULL);
/* texture sampling state: */
@@ -816,6 +820,8 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
cso_restore_sampler_views(cso, PIPE_SHADER_FRAGMENT);
cso_restore_fragment_shader(cso);
cso_restore_vertex_shader(cso);
+ cso_restore_tessctrl_shader(cso);
+ cso_restore_tesseval_shader(cso);
cso_restore_geometry_shader(cso);
cso_restore_vertex_elements(cso);
cso_restore_aux_vertex_buffer_slot(cso);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_drawtex.c b/mesalib/src/mesa/state_tracker/st_cb_drawtex.c
index 1420b96e5..2af4f6d4c 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_drawtex.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_drawtex.c
@@ -229,6 +229,8 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
cso_save_viewport(cso);
cso_save_stream_outputs(cso);
cso_save_vertex_shader(cso);
+ cso_save_tessctrl_shader(cso);
+ cso_save_tesseval_shader(cso);
cso_save_geometry_shader(cso);
cso_save_vertex_elements(cso);
cso_save_aux_vertex_buffer_slot(cso);
@@ -238,6 +240,8 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
semantic_names, semantic_indexes);
cso_set_vertex_shader_handle(cso, vs);
}
+ cso_set_tessctrl_shader_handle(cso, NULL);
+ cso_set_tesseval_shader_handle(cso, NULL);
cso_set_geometry_shader_handle(cso, NULL);
for (i = 0; i < numAttribs; i++) {
@@ -279,6 +283,8 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
/* restore state */
cso_restore_viewport(cso);
cso_restore_vertex_shader(cso);
+ cso_restore_tessctrl_shader(cso);
+ cso_restore_tesseval_shader(cso);
cso_restore_geometry_shader(cso);
cso_restore_vertex_elements(cso);
cso_restore_aux_vertex_buffer_slot(cso);
diff --git a/mesalib/src/mesa/state_tracker/st_cb_program.c b/mesalib/src/mesa/state_tracker/st_cb_program.c
index c382d7d2c..6aa7d5796 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_program.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_program.c
@@ -65,7 +65,7 @@ st_bind_program(struct gl_context *ctx, GLenum target, struct gl_program *prog)
case GL_FRAGMENT_PROGRAM_ARB:
st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
break;
- case MESA_GEOMETRY_PROGRAM:
+ case GL_GEOMETRY_PROGRAM_NV:
st->dirty.st |= ST_NEW_GEOMETRY_PROGRAM;
break;
}
@@ -105,7 +105,7 @@ st_new_program(struct gl_context *ctx, GLenum target, GLuint id)
return _mesa_init_fragment_program(ctx, &prog->Base, target, id);
}
- case MESA_GEOMETRY_PROGRAM: {
+ case GL_GEOMETRY_PROGRAM_NV: {
struct st_geometry_program *prog = ST_CALLOC_STRUCT(st_geometry_program);
return _mesa_init_geometry_program(ctx, &prog->Base, target, id);
}
@@ -135,7 +135,7 @@ st_delete_program(struct gl_context *ctx, struct gl_program *prog)
free_glsl_to_tgsi_visitor(stvp->glsl_to_tgsi);
}
break;
- case MESA_GEOMETRY_PROGRAM:
+ case GL_GEOMETRY_PROGRAM_NV:
{
struct st_geometry_program *stgp =
(struct st_geometry_program *) prog;
@@ -198,7 +198,7 @@ st_program_string_notify( struct gl_context *ctx,
if (st->fp == stfp)
st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
}
- else if (target == MESA_GEOMETRY_PROGRAM) {
+ else if (target == GL_GEOMETRY_PROGRAM_NV) {
struct st_geometry_program *stgp = (struct st_geometry_program *) prog;
st_release_gp_variants(st, stgp);
diff --git a/mesalib/src/mesa/state_tracker/st_context.c b/mesalib/src/mesa/state_tracker/st_context.c
index 69e0f929d..ed9ed0f1b 100644
--- a/mesalib/src/mesa/state_tracker/st_context.c
+++ b/mesalib/src/mesa/state_tracker/st_context.c
@@ -376,12 +376,6 @@ void st_destroy_context( struct st_context *st )
}
pipe_surface_reference(&st->state.framebuffer.zsbuf, NULL);
- pipe->set_index_buffer(pipe, NULL);
-
- for (i = 0; i < PIPE_SHADER_TYPES; i++) {
- pipe->set_constant_buffer(pipe, i, 0, NULL);
- }
-
_mesa_delete_program_cache(st->ctx, st->pixel_xfer.cache);
_vbo_DestroyContext(st->ctx);
diff --git a/mesalib/src/mesa/state_tracker/st_draw.c b/mesalib/src/mesa/state_tracker/st_draw.c
index 488f6ead2..8b43582c1 100644
--- a/mesalib/src/mesa/state_tracker/st_draw.c
+++ b/mesalib/src/mesa/state_tracker/st_draw.c
@@ -141,7 +141,7 @@ check_uniforms(struct gl_context *ctx)
if (shProg[j] == NULL || !shProg[j]->LinkStatus)
continue;
- for (i = 0; i < shProg[j]->NumUserUniformStorage; i++) {
+ for (i = 0; i < shProg[j]->NumUniformStorage; i++) {
const struct gl_uniform_storage *u = &shProg[j]->UniformStorage[i];
if (!u->initialized) {
_mesa_warning(ctx,
diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c
index 23a45883d..b1057f3ea 100644
--- a/mesalib/src/mesa/state_tracker/st_extensions.c
+++ b/mesalib/src/mesa/state_tracker/st_extensions.c
@@ -650,12 +650,6 @@ void st_init_extensions(struct pipe_screen *screen,
ARRAY_SIZE(vertex_mapping), PIPE_BUFFER,
PIPE_BIND_VERTEX_BUFFER);
- /* ARB_direct_state_access requires OpenGL 2.0. Assume that all drivers
- * that support NPOT textures are able to support GL 2.0.
- */
- if (extensions->ARB_texture_non_power_of_two)
- extensions->ARB_direct_state_access = GL_TRUE;
-
if (extensions->ARB_stencil_texturing)
extensions->ARB_texture_stencil8 = GL_TRUE;
diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index f0f2a77d0..03834b69a 100644
--- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -57,11 +57,6 @@
(1 << PROGRAM_CONSTANT) | \
(1 << PROGRAM_UNIFORM))
-/**
- * Maximum number of arrays
- */
-#define MAX_ARRAYS 256
-
#define MAX_GLSL_TEXTURE_OFFSET 4
class st_src_reg;
@@ -89,6 +84,7 @@ public:
this->reladdr2 = NULL;
this->has_index2 = false;
this->double_reg2 = false;
+ this->array_id = 0;
}
st_src_reg(gl_register_file file, int index, int type)
@@ -103,6 +99,7 @@ public:
this->reladdr2 = NULL;
this->has_index2 = false;
this->double_reg2 = false;
+ this->array_id = 0;
}
st_src_reg(gl_register_file file, int index, int type, int index2D)
@@ -117,6 +114,7 @@ public:
this->reladdr2 = NULL;
this->has_index2 = false;
this->double_reg2 = false;
+ this->array_id = 0;
}
st_src_reg()
@@ -131,6 +129,7 @@ public:
this->reladdr2 = NULL;
this->has_index2 = false;
this->double_reg2 = false;
+ this->array_id = 0;
}
explicit st_src_reg(st_dst_reg reg);
@@ -150,6 +149,7 @@ public:
* currently used for input mapping only.
*/
bool double_reg2;
+ unsigned array_id;
};
class st_dst_reg {
@@ -162,6 +162,7 @@ public:
this->cond_mask = COND_TR;
this->reladdr = NULL;
this->type = type;
+ this->array_id = 0;
}
st_dst_reg(gl_register_file file, int writemask, int type)
@@ -172,6 +173,7 @@ public:
this->cond_mask = COND_TR;
this->reladdr = NULL;
this->type = type;
+ this->array_id = 0;
}
st_dst_reg()
@@ -182,6 +184,7 @@ public:
this->writemask = 0;
this->cond_mask = COND_TR;
this->reladdr = NULL;
+ this->array_id = 0;
}
explicit st_dst_reg(st_src_reg reg);
@@ -193,6 +196,7 @@ public:
int type; /** GLSL_TYPE_* from GLSL IR (enum glsl_base_type) */
/** Register index should be offset by the integer in this reg. */
st_src_reg *reladdr;
+ unsigned array_id;
};
st_src_reg::st_src_reg(st_dst_reg reg)
@@ -207,6 +211,7 @@ st_src_reg::st_src_reg(st_dst_reg reg)
this->reladdr2 = NULL;
this->has_index2 = false;
this->double_reg2 = false;
+ this->array_id = reg.array_id;
}
st_dst_reg::st_dst_reg(st_src_reg reg)
@@ -217,6 +222,7 @@ st_dst_reg::st_dst_reg(st_src_reg reg)
this->writemask = WRITEMASK_XYZW;
this->cond_mask = COND_TR;
this->reladdr = reg.reladdr;
+ this->array_id = reg.array_id;
}
class glsl_to_tgsi_instruction : public exec_node {
@@ -244,8 +250,9 @@ public:
class variable_storage : public exec_node {
public:
- variable_storage(ir_variable *var, gl_register_file file, int index)
- : file(file), index(index), var(var)
+ variable_storage(ir_variable *var, gl_register_file file, int index,
+ unsigned array_id = 0)
+ : file(file), index(index), var(var), array_id(array_id)
{
/* empty */
}
@@ -253,6 +260,7 @@ public:
gl_register_file file;
int index;
ir_variable *var; /* variable that maps to this, if any */
+ unsigned array_id;
};
class immediate_storage : public exec_node {
@@ -302,6 +310,15 @@ public:
st_src_reg return_reg;
};
+static st_src_reg undef_src = st_src_reg(PROGRAM_UNDEFINED, 0, GLSL_TYPE_ERROR);
+static st_dst_reg undef_dst = st_dst_reg(PROGRAM_UNDEFINED, SWIZZLE_NOOP, GLSL_TYPE_ERROR);
+
+struct array_decl {
+ unsigned mesa_index;
+ unsigned array_id;
+ unsigned array_size;
+};
+
struct glsl_to_tgsi_visitor : public ir_visitor {
public:
glsl_to_tgsi_visitor();
@@ -317,9 +334,15 @@ public:
int next_temp;
- unsigned array_sizes[MAX_ARRAYS];
+ unsigned *array_sizes;
+ unsigned max_num_arrays;
unsigned next_array;
+ struct array_decl input_arrays[PIPE_MAX_SHADER_INPUTS];
+ unsigned num_input_arrays;
+ struct array_decl output_arrays[PIPE_MAX_SHADER_OUTPUTS];
+ unsigned num_output_arrays;
+
int num_address_regs;
int samplers_used;
bool indirect_addr_consts;
@@ -372,6 +395,7 @@ public:
virtual void visit(ir_if *);
virtual void visit(ir_emit_vertex *);
virtual void visit(ir_end_primitive *);
+ virtual void visit(ir_barrier *);
/*@}*/
st_src_reg result;
@@ -390,31 +414,19 @@ public:
/** List of glsl_to_tgsi_instruction */
exec_list instructions;
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op);
-
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_src_reg src0);
+ glsl_to_tgsi_instruction *emit_asm(ir_instruction *ir, unsigned op,
+ st_dst_reg dst = undef_dst,
+ st_src_reg src0 = undef_src,
+ st_src_reg src1 = undef_src,
+ st_src_reg src2 = undef_src,
+ st_src_reg src3 = undef_src);
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_dst_reg dst1,
- st_src_reg src0);
-
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_src_reg src0, st_src_reg src1);
-
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst,
- st_src_reg src0, st_src_reg src1, st_src_reg src2);
-
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst,
- st_src_reg src0, st_src_reg src1,
- st_src_reg src2, st_src_reg src3);
-
- glsl_to_tgsi_instruction *emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_dst_reg dst1,
- st_src_reg src0, st_src_reg src1,
- st_src_reg src2, st_src_reg src3);
+ glsl_to_tgsi_instruction *emit_asm(ir_instruction *ir, unsigned op,
+ st_dst_reg dst, st_dst_reg dst1,
+ st_src_reg src0 = undef_src,
+ st_src_reg src1 = undef_src,
+ st_src_reg src2 = undef_src,
+ st_src_reg src3 = undef_src);
unsigned get_opcode(ir_instruction *ir, unsigned op,
st_dst_reg dst,
@@ -468,10 +480,6 @@ public:
void *mem_ctx;
};
-static st_src_reg undef_src = st_src_reg(PROGRAM_UNDEFINED, 0, GLSL_TYPE_ERROR);
-
-static st_dst_reg undef_dst = st_dst_reg(PROGRAM_UNDEFINED, SWIZZLE_NOOP, GLSL_TYPE_ERROR);
-
static st_dst_reg address_reg = st_dst_reg(PROGRAM_ADDRESS, WRITEMASK_X, GLSL_TYPE_FLOAT, 0);
static st_dst_reg address_reg2 = st_dst_reg(PROGRAM_ADDRESS, WRITEMASK_X, GLSL_TYPE_FLOAT, 1);
static st_dst_reg sampler_reladdr = st_dst_reg(PROGRAM_ADDRESS, WRITEMASK_X, GLSL_TYPE_FLOAT, 2);
@@ -526,10 +534,10 @@ num_inst_src_regs(unsigned opcode)
}
glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_dst_reg dst1,
- st_src_reg src0, st_src_reg src1,
- st_src_reg src2, st_src_reg src3)
+glsl_to_tgsi_visitor::emit_asm(ir_instruction *ir, unsigned op,
+ st_dst_reg dst, st_dst_reg dst1,
+ st_src_reg src0, st_src_reg src1,
+ st_src_reg src2, st_src_reg src3)
{
glsl_to_tgsi_instruction *inst = new(mem_ctx) glsl_to_tgsi_instruction();
int num_reladdr = 0, i, j;
@@ -716,48 +724,12 @@ glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
}
glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst,
- st_src_reg src0, st_src_reg src1,
- st_src_reg src2, st_src_reg src3)
-{
- return emit(ir, op, dst, undef_dst, src0, src1, src2, src3);
-}
-
-glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_src_reg src0,
- st_src_reg src1, st_src_reg src2)
-{
- return emit(ir, op, dst, undef_dst, src0, src1, src2, undef_src);
-}
-
-glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_src_reg src0, st_src_reg src1)
-{
- return emit(ir, op, dst, undef_dst, src0, src1, undef_src, undef_src);
-}
-
-glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_src_reg src0)
-{
- assert(dst.writemask != 0);
- return emit(ir, op, dst, undef_dst, src0, undef_src, undef_src, undef_src);
-}
-
-glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op,
- st_dst_reg dst, st_dst_reg dst1, st_src_reg src0)
-{
- return emit(ir, op, dst, dst1, src0, undef_src, undef_src, undef_src);
-}
-
-glsl_to_tgsi_instruction *
-glsl_to_tgsi_visitor::emit(ir_instruction *ir, unsigned op)
+glsl_to_tgsi_visitor::emit_asm(ir_instruction *ir, unsigned op,
+ st_dst_reg dst,
+ st_src_reg src0, st_src_reg src1,
+ st_src_reg src2, st_src_reg src3)
{
- return emit(ir, op, undef_dst, undef_dst, undef_src, undef_src, undef_src, undef_src);
+ return emit_asm(ir, op, dst, undef_dst, src0, src1, src2, src3);
}
/**
@@ -879,7 +851,7 @@ glsl_to_tgsi_visitor::emit_dp(ir_instruction *ir,
TGSI_OPCODE_DP2, TGSI_OPCODE_DP3, TGSI_OPCODE_DP4
};
- return emit(ir, dot_opcodes[elements - 2], dst, src0, src1);
+ return emit_asm(ir, dot_opcodes[elements - 2], dst, src0, src1);
}
/**
@@ -929,7 +901,7 @@ glsl_to_tgsi_visitor::emit_scalar(ir_instruction *ir, unsigned op,
src1_swiz, src1_swiz);
dst.writemask = this_mask;
- emit(ir, op, dst, src0, src1);
+ emit_asm(ir, op, dst, src0, src1);
done_mask |= this_mask;
}
}
@@ -958,7 +930,7 @@ glsl_to_tgsi_visitor::emit_arl(ir_instruction *ir,
if (dst.index >= this->num_address_regs)
this->num_address_regs = dst.index + 1;
- emit(NULL, op, dst, src0);
+ emit_asm(NULL, op, dst, src0);
}
int
@@ -1142,6 +1114,12 @@ glsl_to_tgsi_visitor::get_temp(const glsl_type *type)
if (!options->EmitNoIndirectTemp &&
(type->is_array() || type->is_matrix())) {
+ if (next_array >= max_num_arrays) {
+ max_num_arrays += 32;
+ array_sizes = (unsigned*)
+ realloc(array_sizes, sizeof(array_sizes[0]) * max_num_arrays);
+ }
+
src.file = PROGRAM_ARRAY;
src.index = next_array << 16 | 0x8000;
array_sizes[next_array] = type_size(type);
@@ -1242,7 +1220,7 @@ glsl_to_tgsi_visitor::visit(ir_variable *ir)
*/
st_src_reg src(PROGRAM_STATE_VAR, index, GLSL_TYPE_FLOAT);
src.swizzle = slots[i].swizzle;
- emit(ir, TGSI_OPCODE_MOV, dst, src);
+ emit_asm(ir, TGSI_OPCODE_MOV, dst, src);
/* even a float takes up a whole vec4 reg in a struct/array. */
dst.index++;
}
@@ -1261,11 +1239,11 @@ glsl_to_tgsi_visitor::visit(ir_variable *ir)
void
glsl_to_tgsi_visitor::visit(ir_loop *ir)
{
- emit(NULL, TGSI_OPCODE_BGNLOOP);
+ emit_asm(NULL, TGSI_OPCODE_BGNLOOP);
visit_exec_list(&ir->body_instructions, this);
- emit(NULL, TGSI_OPCODE_ENDLOOP);
+ emit_asm(NULL, TGSI_OPCODE_ENDLOOP);
}
void
@@ -1273,10 +1251,10 @@ glsl_to_tgsi_visitor::visit(ir_loop_jump *ir)
{
switch (ir->mode) {
case ir_loop_jump::jump_break:
- emit(NULL, TGSI_OPCODE_BRK);
+ emit_asm(NULL, TGSI_OPCODE_BRK);
break;
case ir_loop_jump::jump_continue:
- emit(NULL, TGSI_OPCODE_CONT);
+ emit_asm(NULL, TGSI_OPCODE_CONT);
break;
}
}
@@ -1330,7 +1308,7 @@ glsl_to_tgsi_visitor::try_emit_mad(ir_expression *ir, int mul_operand)
this->result = get_temp(ir->type);
result_dst = st_dst_reg(this->result);
result_dst.writemask = (1 << ir->type->vector_elements) - 1;
- emit(ir, TGSI_OPCODE_MAD, result_dst, a, b, c);
+ emit_asm(ir, TGSI_OPCODE_MAD, result_dst, a, b, c);
return true;
}
@@ -1370,7 +1348,7 @@ glsl_to_tgsi_visitor::try_emit_mad_for_and_not(ir_expression *ir, int try_operan
b.negate = ~b.negate;
this->result = get_temp(ir->type);
- emit(ir, TGSI_OPCODE_MAD, st_dst_reg(this->result), a, b, a);
+ emit_asm(ir, TGSI_OPCODE_MAD, st_dst_reg(this->result), a, b, a);
return true;
}
@@ -1388,7 +1366,7 @@ glsl_to_tgsi_visitor::reladdr_to_temp(ir_instruction *ir,
if (*num_reladdr != 1) {
st_src_reg temp = get_temp(glsl_type::vec4_type);
- emit(ir, TGSI_OPCODE_MOV, st_dst_reg(temp), *reg);
+ emit_asm(ir, TGSI_OPCODE_MOV, st_dst_reg(temp), *reg);
*reg = temp;
}
@@ -1464,7 +1442,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
switch (ir->operation) {
case ir_unop_logic_not:
if (result_dst.type != GLSL_TYPE_FLOAT)
- emit(ir, TGSI_OPCODE_NOT, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_NOT, result_dst, op[0]);
else {
/* Previously 'SEQ dst, src, 0.0' was used for this. However, many
* older GPUs implement SEQ using multiple instructions (i915 uses two
@@ -1472,24 +1450,24 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
* 0.0 and 1.0, 1-x also implements !x.
*/
op[0].negate = ~op[0].negate;
- emit(ir, TGSI_OPCODE_ADD, result_dst, op[0], st_src_reg_for_float(1.0));
+ emit_asm(ir, TGSI_OPCODE_ADD, result_dst, op[0], st_src_reg_for_float(1.0));
}
break;
case ir_unop_neg:
if (result_dst.type == GLSL_TYPE_INT || result_dst.type == GLSL_TYPE_UINT)
- emit(ir, TGSI_OPCODE_INEG, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_INEG, result_dst, op[0]);
else if (result_dst.type == GLSL_TYPE_DOUBLE)
- emit(ir, TGSI_OPCODE_DNEG, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_DNEG, result_dst, op[0]);
else {
op[0].negate = ~op[0].negate;
result_src = op[0];
}
break;
case ir_unop_abs:
- emit(ir, TGSI_OPCODE_ABS, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_ABS, result_dst, op[0]);
break;
case ir_unop_sign:
- emit(ir, TGSI_OPCODE_SSG, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_SSG, result_dst, op[0]);
break;
case ir_unop_rcp:
emit_scalar(ir, TGSI_OPCODE_RCP, result_dst, op[0]);
@@ -1513,17 +1491,17 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
break;
case ir_unop_saturate: {
glsl_to_tgsi_instruction *inst;
- inst = emit(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
+ inst = emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
inst->saturate = true;
break;
}
case ir_unop_dFdx:
case ir_unop_dFdx_coarse:
- emit(ir, TGSI_OPCODE_DDX, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_DDX, result_dst, op[0]);
break;
case ir_unop_dFdx_fine:
- emit(ir, TGSI_OPCODE_DDX_FINE, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_DDX_FINE, result_dst, op[0]);
break;
case ir_unop_dFdy:
case ir_unop_dFdy_coarse:
@@ -1547,18 +1525,18 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
st_src_reg temp = get_temp(glsl_type::vec4_type);
- emit(ir, TGSI_OPCODE_MUL, st_dst_reg(temp), transform_y, op[0]);
- emit(ir, ir->operation == ir_unop_dFdy_fine ?
+ emit_asm(ir, TGSI_OPCODE_MUL, st_dst_reg(temp), transform_y, op[0]);
+ emit_asm(ir, ir->operation == ir_unop_dFdy_fine ?
TGSI_OPCODE_DDY_FINE : TGSI_OPCODE_DDY, result_dst, temp);
break;
}
case ir_unop_frexp_sig:
- emit(ir, TGSI_OPCODE_DFRACEXP, result_dst, undef_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_DFRACEXP, result_dst, undef_dst, op[0]);
break;
case ir_unop_frexp_exp:
- emit(ir, TGSI_OPCODE_DFRACEXP, undef_dst, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_DFRACEXP, undef_dst, result_dst, op[0]);
break;
case ir_unop_noise: {
@@ -1568,50 +1546,50 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
* place to do this is in the GL state tracker, not the poor
* driver.
*/
- emit(ir, TGSI_OPCODE_MOV, result_dst, st_src_reg_for_float(0.5));
+ emit_asm(ir, TGSI_OPCODE_MOV, result_dst, st_src_reg_for_float(0.5));
break;
}
case ir_binop_add:
- emit(ir, TGSI_OPCODE_ADD, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_ADD, result_dst, op[0], op[1]);
break;
case ir_binop_sub:
- emit(ir, TGSI_OPCODE_SUB, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SUB, result_dst, op[0], op[1]);
break;
case ir_binop_mul:
- emit(ir, TGSI_OPCODE_MUL, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_MUL, result_dst, op[0], op[1]);
break;
case ir_binop_div:
if (result_dst.type == GLSL_TYPE_FLOAT || result_dst.type == GLSL_TYPE_DOUBLE)
assert(!"not reached: should be handled by ir_div_to_mul_rcp");
else
- emit(ir, TGSI_OPCODE_DIV, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_DIV, result_dst, op[0], op[1]);
break;
case ir_binop_mod:
if (result_dst.type == GLSL_TYPE_FLOAT)
assert(!"ir_binop_mod should have been converted to b * fract(a/b)");
else
- emit(ir, TGSI_OPCODE_MOD, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_MOD, result_dst, op[0], op[1]);
break;
case ir_binop_less:
- emit(ir, TGSI_OPCODE_SLT, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SLT, result_dst, op[0], op[1]);
break;
case ir_binop_greater:
- emit(ir, TGSI_OPCODE_SLT, result_dst, op[1], op[0]);
+ emit_asm(ir, TGSI_OPCODE_SLT, result_dst, op[1], op[0]);
break;
case ir_binop_lequal:
- emit(ir, TGSI_OPCODE_SGE, result_dst, op[1], op[0]);
+ emit_asm(ir, TGSI_OPCODE_SGE, result_dst, op[1], op[0]);
break;
case ir_binop_gequal:
- emit(ir, TGSI_OPCODE_SGE, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SGE, result_dst, op[0], op[1]);
break;
case ir_binop_equal:
- emit(ir, TGSI_OPCODE_SEQ, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SEQ, result_dst, op[0], op[1]);
break;
case ir_binop_nequal:
- emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, op[0], op[1]);
break;
case ir_binop_all_equal:
/* "==" operator producing a scalar boolean. */
@@ -1625,7 +1603,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
st_dst_reg temp_dst = st_dst_reg(temp);
st_src_reg temp1 = st_src_reg(temp), temp2 = st_src_reg(temp);
- emit(ir, TGSI_OPCODE_SEQ, st_dst_reg(temp), op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SEQ, st_dst_reg(temp), op[0], op[1]);
/* Emit 1-3 AND operations to combine the SEQ results. */
switch (ir->operands[0]->type->vector_elements) {
@@ -1635,24 +1613,24 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
temp_dst.writemask = WRITEMASK_Y;
temp1.swizzle = SWIZZLE_YYYY;
temp2.swizzle = SWIZZLE_ZZZZ;
- emit(ir, TGSI_OPCODE_AND, temp_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_AND, temp_dst, temp1, temp2);
break;
case 4:
temp_dst.writemask = WRITEMASK_X;
temp1.swizzle = SWIZZLE_XXXX;
temp2.swizzle = SWIZZLE_YYYY;
- emit(ir, TGSI_OPCODE_AND, temp_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_AND, temp_dst, temp1, temp2);
temp_dst.writemask = WRITEMASK_Y;
temp1.swizzle = SWIZZLE_ZZZZ;
temp2.swizzle = SWIZZLE_WWWW;
- emit(ir, TGSI_OPCODE_AND, temp_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_AND, temp_dst, temp1, temp2);
}
temp1.swizzle = SWIZZLE_XXXX;
temp2.swizzle = SWIZZLE_YYYY;
- emit(ir, TGSI_OPCODE_AND, result_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_AND, result_dst, temp1, temp2);
} else {
- emit(ir, TGSI_OPCODE_SNE, st_dst_reg(temp), op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SNE, st_dst_reg(temp), op[0], op[1]);
/* After the dot-product, the value will be an integer on the
* range [0,4]. Zero becomes 1.0, and positive values become zero.
@@ -1665,10 +1643,10 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
*/
st_src_reg sge_src = result_src;
sge_src.negate = ~sge_src.negate;
- emit(ir, TGSI_OPCODE_SGE, result_dst, sge_src, st_src_reg_for_float(0.0));
+ emit_asm(ir, TGSI_OPCODE_SGE, result_dst, sge_src, st_src_reg_for_float(0.0));
}
} else {
- emit(ir, TGSI_OPCODE_SEQ, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SEQ, result_dst, op[0], op[1]);
}
break;
case ir_binop_any_nequal:
@@ -1678,7 +1656,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
st_src_reg temp = get_temp(native_integers ?
glsl_type::uvec4_type :
glsl_type::vec4_type);
- emit(ir, TGSI_OPCODE_SNE, st_dst_reg(temp), op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SNE, st_dst_reg(temp), op[0], op[1]);
if (native_integers) {
st_dst_reg temp_dst = st_dst_reg(temp);
@@ -1692,22 +1670,22 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
temp_dst.writemask = WRITEMASK_Y;
temp1.swizzle = SWIZZLE_YYYY;
temp2.swizzle = SWIZZLE_ZZZZ;
- emit(ir, TGSI_OPCODE_OR, temp_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_OR, temp_dst, temp1, temp2);
break;
case 4:
temp_dst.writemask = WRITEMASK_X;
temp1.swizzle = SWIZZLE_XXXX;
temp2.swizzle = SWIZZLE_YYYY;
- emit(ir, TGSI_OPCODE_OR, temp_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_OR, temp_dst, temp1, temp2);
temp_dst.writemask = WRITEMASK_Y;
temp1.swizzle = SWIZZLE_ZZZZ;
temp2.swizzle = SWIZZLE_WWWW;
- emit(ir, TGSI_OPCODE_OR, temp_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_OR, temp_dst, temp1, temp2);
}
temp1.swizzle = SWIZZLE_XXXX;
temp2.swizzle = SWIZZLE_YYYY;
- emit(ir, TGSI_OPCODE_OR, result_dst, temp1, temp2);
+ emit_asm(ir, TGSI_OPCODE_OR, result_dst, temp1, temp2);
} else {
/* After the dot-product, the value will be an integer on the
* range [0,4]. Zero stays zero, and positive values become 1.0.
@@ -1726,11 +1704,11 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
*/
st_src_reg slt_src = result_src;
slt_src.negate = ~slt_src.negate;
- emit(ir, TGSI_OPCODE_SLT, result_dst, slt_src, st_src_reg_for_float(0.0));
+ emit_asm(ir, TGSI_OPCODE_SLT, result_dst, slt_src, st_src_reg_for_float(0.0));
}
}
} else {
- emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, op[0], op[1]);
}
break;
@@ -1763,7 +1741,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
GET_SWZ(op0_swizzle, 3),
GET_SWZ(op0_swizzle, 3),
GET_SWZ(op0_swizzle, 3));
- emit(ir, TGSI_OPCODE_OR, result_dst, accum, op[0]);
+ emit_asm(ir, TGSI_OPCODE_OR, result_dst, accum, op[0]);
accum = st_src_reg(result_dst);
accum.swizzle = dst_swizzle;
/* fallthrough */
@@ -1772,7 +1750,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
GET_SWZ(op0_swizzle, 2),
GET_SWZ(op0_swizzle, 2),
GET_SWZ(op0_swizzle, 2));
- emit(ir, TGSI_OPCODE_OR, result_dst, accum, op[0]);
+ emit_asm(ir, TGSI_OPCODE_OR, result_dst, accum, op[0]);
accum = st_src_reg(result_dst);
accum.swizzle = dst_swizzle;
/* fallthrough */
@@ -1781,7 +1759,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
GET_SWZ(op0_swizzle, 1),
GET_SWZ(op0_swizzle, 1),
GET_SWZ(op0_swizzle, 1));
- emit(ir, TGSI_OPCODE_OR, result_dst, accum, op[0]);
+ emit_asm(ir, TGSI_OPCODE_OR, result_dst, accum, op[0]);
break;
default:
assert(!"Unexpected vector size");
@@ -1807,11 +1785,11 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
*/
st_src_reg slt_src = result_src;
slt_src.negate = ~slt_src.negate;
- emit(ir, TGSI_OPCODE_SLT, result_dst, slt_src, st_src_reg_for_float(0.0));
+ emit_asm(ir, TGSI_OPCODE_SLT, result_dst, slt_src, st_src_reg_for_float(0.0));
}
else {
/* Use SNE 0 if integers are being used as boolean values. */
- emit(ir, TGSI_OPCODE_SNE, result_dst, result_src, st_src_reg_for_int(0));
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, result_src, st_src_reg_for_int(0));
}
}
break;
@@ -1819,9 +1797,9 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
case ir_binop_logic_xor:
if (native_integers)
- emit(ir, TGSI_OPCODE_XOR, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_XOR, result_dst, op[0], op[1]);
else
- emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, op[0], op[1]);
break;
case ir_binop_logic_or: {
@@ -1830,13 +1808,13 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
* instruction.
*/
assert(native_integers);
- emit(ir, TGSI_OPCODE_OR, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_OR, result_dst, op[0], op[1]);
} else {
/* After the addition, the value will be an integer on the
* range [0,2]. Zero stays zero, and positive values become 1.0.
*/
glsl_to_tgsi_instruction *add =
- emit(ir, TGSI_OPCODE_ADD, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_ADD, result_dst, op[0], op[1]);
if (this->prog->Target == GL_FRAGMENT_PROGRAM_ARB) {
/* The clamping to [0,1] can be done for free in the fragment
* shader with a saturate if floats are being used as boolean values.
@@ -1849,7 +1827,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
*/
st_src_reg slt_src = result_src;
slt_src.negate = ~slt_src.negate;
- emit(ir, TGSI_OPCODE_SLT, result_dst, slt_src, st_src_reg_for_float(0.0));
+ emit_asm(ir, TGSI_OPCODE_SLT, result_dst, slt_src, st_src_reg_for_float(0.0));
}
}
break;
@@ -1861,9 +1839,9 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
* actual AND opcode.
*/
if (native_integers)
- emit(ir, TGSI_OPCODE_AND, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_AND, result_dst, op[0], op[1]);
else
- emit(ir, TGSI_OPCODE_MUL, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_MUL, result_dst, op[0], op[1]);
break;
case ir_binop_dot:
@@ -1879,10 +1857,10 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
} else {
/* sqrt(x) = x * rsq(x). */
emit_scalar(ir, TGSI_OPCODE_RSQ, result_dst, op[0]);
- emit(ir, TGSI_OPCODE_MUL, result_dst, result_src, op[0]);
+ emit_asm(ir, TGSI_OPCODE_MUL, result_dst, result_src, op[0]);
/* For incoming channels <= 0, set the result to 0. */
op[0].negate = ~op[0].negate;
- emit(ir, TGSI_OPCODE_CMP, result_dst,
+ emit_asm(ir, TGSI_OPCODE_CMP, result_dst,
op[0], result_src, st_src_reg_for_float(0.0));
}
break;
@@ -1891,13 +1869,13 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
break;
case ir_unop_i2f:
if (native_integers) {
- emit(ir, TGSI_OPCODE_I2F, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_I2F, result_dst, op[0]);
break;
}
/* fallthrough to next case otherwise */
case ir_unop_b2f:
if (native_integers) {
- emit(ir, TGSI_OPCODE_AND, result_dst, op[0], st_src_reg_for_float(1.0));
+ emit_asm(ir, TGSI_OPCODE_AND, result_dst, op[0], st_src_reg_for_float(1.0));
break;
}
/* fallthrough to next case otherwise */
@@ -1912,7 +1890,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
* GLSL requires that int(bool) return 1 for true and 0 for false.
* This conversion is done with AND, but it could be done with NEG.
*/
- emit(ir, TGSI_OPCODE_AND, result_dst, op[0], st_src_reg_for_int(1));
+ emit_asm(ir, TGSI_OPCODE_AND, result_dst, op[0], st_src_reg_for_int(1));
} else {
/* Booleans and integers are both stored as floats when native
* integers are disabled.
@@ -1922,15 +1900,15 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
break;
case ir_unop_f2i:
if (native_integers)
- emit(ir, TGSI_OPCODE_F2I, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_F2I, result_dst, op[0]);
else
- emit(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
break;
case ir_unop_f2u:
if (native_integers)
- emit(ir, TGSI_OPCODE_F2U, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_F2U, result_dst, op[0]);
else
- emit(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
break;
case ir_unop_bitcast_f2i:
result_src = op[0];
@@ -1946,38 +1924,38 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
result_src.type = GLSL_TYPE_FLOAT;
break;
case ir_unop_f2b:
- emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_float(0.0));
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_float(0.0));
break;
case ir_unop_d2b:
- emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_double(0.0));
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_double(0.0));
break;
case ir_unop_i2b:
if (native_integers)
- emit(ir, TGSI_OPCODE_USNE, result_dst, op[0], st_src_reg_for_int(0));
+ emit_asm(ir, TGSI_OPCODE_USNE, result_dst, op[0], st_src_reg_for_int(0));
else
- emit(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_float(0.0));
+ emit_asm(ir, TGSI_OPCODE_SNE, result_dst, op[0], st_src_reg_for_float(0.0));
break;
case ir_unop_trunc:
- emit(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
break;
case ir_unop_ceil:
- emit(ir, TGSI_OPCODE_CEIL, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_CEIL, result_dst, op[0]);
break;
case ir_unop_floor:
- emit(ir, TGSI_OPCODE_FLR, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_FLR, result_dst, op[0]);
break;
case ir_unop_round_even:
- emit(ir, TGSI_OPCODE_ROUND, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_ROUND, result_dst, op[0]);
break;
case ir_unop_fract:
- emit(ir, TGSI_OPCODE_FRC, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_FRC, result_dst, op[0]);
break;
case ir_binop_min:
- emit(ir, TGSI_OPCODE_MIN, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_MIN, result_dst, op[0], op[1]);
break;
case ir_binop_max:
- emit(ir, TGSI_OPCODE_MAX, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_MAX, result_dst, op[0], op[1]);
break;
case ir_binop_pow:
emit_scalar(ir, TGSI_OPCODE_POW, result_dst, op[0], op[1]);
@@ -1985,37 +1963,37 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
case ir_unop_bit_not:
if (native_integers) {
- emit(ir, TGSI_OPCODE_NOT, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_NOT, result_dst, op[0]);
break;
}
case ir_unop_u2f:
if (native_integers) {
- emit(ir, TGSI_OPCODE_U2F, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_U2F, result_dst, op[0]);
break;
}
case ir_binop_lshift:
if (native_integers) {
- emit(ir, TGSI_OPCODE_SHL, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_SHL, result_dst, op[0], op[1]);
break;
}
case ir_binop_rshift:
if (native_integers) {
- emit(ir, TGSI_OPCODE_ISHR, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_ISHR, result_dst, op[0], op[1]);
break;
}
case ir_binop_bit_and:
if (native_integers) {
- emit(ir, TGSI_OPCODE_AND, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_AND, result_dst, op[0], op[1]);
break;
}
case ir_binop_bit_xor:
if (native_integers) {
- emit(ir, TGSI_OPCODE_XOR, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_XOR, result_dst, op[0], op[1]);
break;
}
case ir_binop_bit_or:
if (native_integers) {
- emit(ir, TGSI_OPCODE_OR, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_OR, result_dst, op[0], op[1]);
break;
}
@@ -2045,7 +2023,7 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
}
else {
/* Relative/variable index into constant buffer */
- emit(ir, TGSI_OPCODE_USHR, st_dst_reg(index_reg), op[1],
+ emit_asm(ir, TGSI_OPCODE_USHR, st_dst_reg(index_reg), op[1],
st_src_reg_for_int(4));
cbuf.reladdr = ralloc(mem_ctx, st_src_reg);
memcpy(cbuf.reladdr, &index_reg, sizeof(index_reg));
@@ -2078,88 +2056,88 @@ glsl_to_tgsi_visitor::visit(ir_expression *ir)
const_offset % 16 / 4);
if (ir->type->base_type == GLSL_TYPE_BOOL) {
- emit(ir, TGSI_OPCODE_USNE, result_dst, cbuf, st_src_reg_for_int(0));
+ emit_asm(ir, TGSI_OPCODE_USNE, result_dst, cbuf, st_src_reg_for_int(0));
} else {
- emit(ir, TGSI_OPCODE_MOV, result_dst, cbuf);
+ emit_asm(ir, TGSI_OPCODE_MOV, result_dst, cbuf);
}
break;
}
case ir_triop_lrp:
/* note: we have to reorder the three args here */
- emit(ir, TGSI_OPCODE_LRP, result_dst, op[2], op[1], op[0]);
+ emit_asm(ir, TGSI_OPCODE_LRP, result_dst, op[2], op[1], op[0]);
break;
case ir_triop_csel:
if (this->ctx->Const.NativeIntegers)
- emit(ir, TGSI_OPCODE_UCMP, result_dst, op[0], op[1], op[2]);
+ emit_asm(ir, TGSI_OPCODE_UCMP, result_dst, op[0], op[1], op[2]);
else {
op[0].negate = ~op[0].negate;
- emit(ir, TGSI_OPCODE_CMP, result_dst, op[0], op[1], op[2]);
+ emit_asm(ir, TGSI_OPCODE_CMP, result_dst, op[0], op[1], op[2]);
}
break;
case ir_triop_bitfield_extract:
- emit(ir, TGSI_OPCODE_IBFE, result_dst, op[0], op[1], op[2]);
+ emit_asm(ir, TGSI_OPCODE_IBFE, result_dst, op[0], op[1], op[2]);
break;
case ir_quadop_bitfield_insert:
- emit(ir, TGSI_OPCODE_BFI, result_dst, op[0], op[1], op[2], op[3]);
+ emit_asm(ir, TGSI_OPCODE_BFI, result_dst, op[0], op[1], op[2], op[3]);
break;
case ir_unop_bitfield_reverse:
- emit(ir, TGSI_OPCODE_BREV, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_BREV, result_dst, op[0]);
break;
case ir_unop_bit_count:
- emit(ir, TGSI_OPCODE_POPC, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_POPC, result_dst, op[0]);
break;
case ir_unop_find_msb:
- emit(ir, TGSI_OPCODE_IMSB, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_IMSB, result_dst, op[0]);
break;
case ir_unop_find_lsb:
- emit(ir, TGSI_OPCODE_LSB, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_LSB, result_dst, op[0]);
break;
case ir_binop_imul_high:
- emit(ir, TGSI_OPCODE_IMUL_HI, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_IMUL_HI, result_dst, op[0], op[1]);
break;
case ir_triop_fma:
/* In theory, MAD is incorrect here. */
if (have_fma)
- emit(ir, TGSI_OPCODE_FMA, result_dst, op[0], op[1], op[2]);
+ emit_asm(ir, TGSI_OPCODE_FMA, result_dst, op[0], op[1], op[2]);
else
- emit(ir, TGSI_OPCODE_MAD, result_dst, op[0], op[1], op[2]);
+ emit_asm(ir, TGSI_OPCODE_MAD, result_dst, op[0], op[1], op[2]);
break;
case ir_unop_interpolate_at_centroid:
- emit(ir, TGSI_OPCODE_INTERP_CENTROID, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_INTERP_CENTROID, result_dst, op[0]);
break;
case ir_binop_interpolate_at_offset:
- emit(ir, TGSI_OPCODE_INTERP_OFFSET, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_INTERP_OFFSET, result_dst, op[0], op[1]);
break;
case ir_binop_interpolate_at_sample:
- emit(ir, TGSI_OPCODE_INTERP_SAMPLE, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_INTERP_SAMPLE, result_dst, op[0], op[1]);
break;
case ir_unop_d2f:
- emit(ir, TGSI_OPCODE_D2F, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_D2F, result_dst, op[0]);
break;
case ir_unop_f2d:
- emit(ir, TGSI_OPCODE_F2D, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_F2D, result_dst, op[0]);
break;
case ir_unop_d2i:
- emit(ir, TGSI_OPCODE_D2I, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_D2I, result_dst, op[0]);
break;
case ir_unop_i2d:
- emit(ir, TGSI_OPCODE_I2D, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_I2D, result_dst, op[0]);
break;
case ir_unop_d2u:
- emit(ir, TGSI_OPCODE_D2U, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_D2U, result_dst, op[0]);
break;
case ir_unop_u2d:
- emit(ir, TGSI_OPCODE_U2D, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_U2D, result_dst, op[0]);
break;
case ir_unop_unpack_double_2x32:
case ir_unop_pack_double_2x32:
- emit(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
+ emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
break;
case ir_binop_ldexp:
if (ir->operands[0]->type->base_type == GLSL_TYPE_DOUBLE) {
- emit(ir, TGSI_OPCODE_DLDEXP, result_dst, op[0], op[1]);
+ emit_asm(ir, TGSI_OPCODE_DLDEXP, result_dst, op[0], op[1]);
} else {
assert(!"Invalid ldexp for non-double opcode in glsl_to_tgsi_visitor::visit()");
}
@@ -2243,11 +2221,38 @@ glsl_to_tgsi_visitor::visit(ir_swizzle *ir)
this->result = src;
}
+/* Test if the variable is an array. Note that geometry and
+ * tessellation shader inputs are outputs are always arrays (except
+ * for patch inputs), so only the array element type is considered.
+ */
+static bool
+is_inout_array(unsigned stage, ir_variable *var, bool *is_2d)
+{
+ const glsl_type *type = var->type;
+
+ if ((stage == MESA_SHADER_VERTEX && var->data.mode == ir_var_shader_in) ||
+ (stage == MESA_SHADER_FRAGMENT && var->data.mode == ir_var_shader_out))
+ return false;
+
+ *is_2d = false;
+
+ if (stage == MESA_SHADER_GEOMETRY && var->data.mode == ir_var_shader_in) {
+ if (!var->type->is_array())
+ return false; /* a system value probably */
+
+ type = var->type->fields.array;
+ *is_2d = true;
+ }
+
+ return type->is_array() || type->is_matrix();
+}
+
void
glsl_to_tgsi_visitor::visit(ir_dereference_variable *ir)
{
variable_storage *entry = find_variable_storage(ir->var);
ir_variable *var = ir->var;
+ bool is_2d;
if (!entry) {
switch (var->data.mode) {
@@ -2263,16 +2268,56 @@ glsl_to_tgsi_visitor::visit(ir_dereference_variable *ir)
* user-defined varyings.
*/
assert(var->data.location != -1);
- entry = new(mem_ctx) variable_storage(var,
- PROGRAM_INPUT,
- var->data.location);
+
+ if (is_inout_array(shader->Stage, var, &is_2d)) {
+ struct array_decl *decl = &input_arrays[num_input_arrays];
+
+ decl->mesa_index = var->data.location;
+ decl->array_id = num_input_arrays + 1;
+ if (is_2d)
+ decl->array_size = type_size(var->type->fields.array);
+ else
+ decl->array_size = type_size(var->type);
+ num_input_arrays++;
+
+ entry = new(mem_ctx) variable_storage(var,
+ PROGRAM_INPUT,
+ var->data.location,
+ decl->array_id);
+ }
+ else {
+ entry = new(mem_ctx) variable_storage(var,
+ PROGRAM_INPUT,
+ var->data.location);
+ }
+ this->variables.push_tail(entry);
break;
case ir_var_shader_out:
assert(var->data.location != -1);
- entry = new(mem_ctx) variable_storage(var,
- PROGRAM_OUTPUT,
- var->data.location
- + var->data.index);
+
+ if (is_inout_array(shader->Stage, var, &is_2d)) {
+ struct array_decl *decl = &output_arrays[num_output_arrays];
+
+ decl->mesa_index = var->data.location;
+ decl->array_id = num_output_arrays + 1;
+ if (is_2d)
+ decl->array_size = type_size(var->type->fields.array);
+ else
+ decl->array_size = type_size(var->type);
+ num_output_arrays++;
+
+ entry = new(mem_ctx) variable_storage(var,
+ PROGRAM_OUTPUT,
+ var->data.location,
+ decl->array_id);
+ }
+ else {
+ entry = new(mem_ctx) variable_storage(var,
+ PROGRAM_OUTPUT,
+ var->data.location
+ + var->data.index);
+ }
+ this->variables.push_tail(entry);
break;
case ir_var_system_value:
entry = new(mem_ctx) variable_storage(var,
@@ -2296,10 +2341,43 @@ glsl_to_tgsi_visitor::visit(ir_dereference_variable *ir)
}
this->result = st_src_reg(entry->file, entry->index, var->type);
+ this->result.array_id = entry->array_id;
if (!native_integers)
this->result.type = GLSL_TYPE_FLOAT;
}
+static void
+shrink_array_declarations(struct array_decl *arrays, unsigned count,
+ GLbitfield64 usage_mask)
+{
+ unsigned i, j;
+
+ /* Fix array declarations by removing unused array elements at both ends
+ * of the arrays. For example, mat4[3] where only mat[1] is used.
+ */
+ for (i = 0; i < count; i++) {
+ struct array_decl *decl = &arrays[i];
+
+ /* Shrink the beginning. */
+ for (j = 0; j < decl->array_size; j++) {
+ if (usage_mask & BITFIELD64_BIT(decl->mesa_index+j))
+ break;
+
+ decl->mesa_index++;
+ decl->array_size--;
+ j--;
+ }
+
+ /* Shrink the end. */
+ for (j = decl->array_size-1; j >= 0; j--) {
+ if (usage_mask & BITFIELD64_BIT(decl->mesa_index+j))
+ break;
+
+ decl->array_size--;
+ }
+ }
+}
+
void
glsl_to_tgsi_visitor::visit(ir_dereference_array *ir)
{
@@ -2341,7 +2419,7 @@ glsl_to_tgsi_visitor::visit(ir_dereference_array *ir)
index_reg = get_temp(native_integers ?
glsl_type::int_type : glsl_type::float_type);
- emit(ir, TGSI_OPCODE_MUL, st_dst_reg(index_reg),
+ emit_asm(ir, TGSI_OPCODE_MUL, st_dst_reg(index_reg),
this->result, st_src_reg_for_type(index_reg.type, element_size));
}
@@ -2352,7 +2430,7 @@ glsl_to_tgsi_visitor::visit(ir_dereference_array *ir)
st_src_reg accum_reg = get_temp(native_integers ?
glsl_type::int_type : glsl_type::float_type);
- emit(ir, TGSI_OPCODE_ADD, st_dst_reg(accum_reg),
+ emit_asm(ir, TGSI_OPCODE_ADD, st_dst_reg(accum_reg),
index_reg, *src.reladdr);
index_reg = accum_reg;
@@ -2589,16 +2667,16 @@ glsl_to_tgsi_visitor::emit_block_mov(ir_assignment *ir, const struct glsl_type *
l_src.swizzle = swizzle_for_size(type->vector_elements);
if (native_integers) {
- emit(ir, TGSI_OPCODE_UCMP, *l, *cond,
+ emit_asm(ir, TGSI_OPCODE_UCMP, *l, *cond,
cond_swap ? l_src : *r,
cond_swap ? *r : l_src);
} else {
- emit(ir, TGSI_OPCODE_CMP, *l, *cond,
+ emit_asm(ir, TGSI_OPCODE_CMP, *l, *cond,
cond_swap ? l_src : *r,
cond_swap ? *r : l_src);
}
} else {
- emit(ir, TGSI_OPCODE_MOV, *l, *r);
+ emit_asm(ir, TGSI_OPCODE_MOV, *l, *r);
}
l->index++;
r->index++;
@@ -2679,7 +2757,7 @@ glsl_to_tgsi_visitor::visit(ir_assignment *ir)
*/
glsl_to_tgsi_instruction *inst, *new_inst;
inst = (glsl_to_tgsi_instruction *)this->instructions.get_tail();
- new_inst = emit(ir, inst->op, l, inst->src[0], inst->src[1], inst->src[2]);
+ new_inst = emit_asm(ir, inst->op, l, inst->src[0], inst->src[1], inst->src[2]);
new_inst->saturate = inst->saturate;
inst->dead_mask = inst->dst[0].writemask;
} else {
@@ -2717,7 +2795,7 @@ glsl_to_tgsi_visitor::visit(ir_constant *ir)
src = this->result;
for (i = 0; i < (unsigned int)size; i++) {
- emit(ir, TGSI_OPCODE_MOV, temp, src);
+ emit_asm(ir, TGSI_OPCODE_MOV, temp, src);
src.index++;
temp.index++;
@@ -2739,7 +2817,7 @@ glsl_to_tgsi_visitor::visit(ir_constant *ir)
ir->array_elements[i]->accept(this);
src = this->result;
for (int j = 0; j < size; j++) {
- emit(ir, TGSI_OPCODE_MOV, temp, src);
+ emit_asm(ir, TGSI_OPCODE_MOV, temp, src);
src.index++;
temp.index++;
@@ -2764,7 +2842,7 @@ glsl_to_tgsi_visitor::visit(ir_constant *ir)
ir->type->vector_elements,
GL_FLOAT,
&src.swizzle);
- emit(ir, TGSI_OPCODE_MOV, mat_column, src);
+ emit_asm(ir, TGSI_OPCODE_MOV, mat_column, src);
mat_column.index++;
}
@@ -2889,7 +2967,7 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
l.cond_mask = COND_TR;
for (i = 0; i < type_size(param->type); i++) {
- emit(ir, TGSI_OPCODE_MOV, l, r);
+ emit_asm(ir, TGSI_OPCODE_MOV, l, r);
l.index++;
r.index++;
}
@@ -2897,7 +2975,7 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
}
/* Emit call instruction */
- call_inst = emit(ir, TGSI_OPCODE_CAL);
+ call_inst = emit_asm(ir, TGSI_OPCODE_CAL);
call_inst->function = entry;
/* Process out parameters. */
@@ -2922,7 +3000,7 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
st_dst_reg l = st_dst_reg(this->result);
for (i = 0; i < type_size(param->type); i++) {
- emit(ir, TGSI_OPCODE_MOV, l, r);
+ emit_asm(ir, TGSI_OPCODE_MOV, l, r);
l.index++;
r.index++;
}
@@ -2965,7 +3043,7 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
coord = get_temp(glsl_type::vec4_type);
coord_dst = st_dst_reg(coord);
coord_dst.writemask = (1 << ir->coordinate->type->vector_elements) - 1;
- emit(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
+ emit_asm(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
}
if (ir->projector) {
@@ -3074,7 +3152,7 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
if (opcode == TGSI_OPCODE_TEX) {
/* Slot the projector in as the last component of the coord. */
coord_dst.writemask = WRITEMASK_W;
- emit(ir, TGSI_OPCODE_MOV, coord_dst, projector);
+ emit_asm(ir, TGSI_OPCODE_MOV, coord_dst, projector);
coord_dst.writemask = WRITEMASK_XYZW;
opcode = TGSI_OPCODE_TXP;
} else {
@@ -3086,7 +3164,7 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
* projective divide now.
*/
coord_dst.writemask = WRITEMASK_W;
- emit(ir, TGSI_OPCODE_RCP, coord_dst, projector);
+ emit_asm(ir, TGSI_OPCODE_RCP, coord_dst, projector);
/* In the case where we have to project the coordinates "by hand,"
* the shadow comparator value must also be projected.
@@ -3105,14 +3183,14 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
assert(!sampler_type->sampler_array);
tmp_dst.writemask = WRITEMASK_Z;
- emit(ir, TGSI_OPCODE_MOV, tmp_dst, this->result);
+ emit_asm(ir, TGSI_OPCODE_MOV, tmp_dst, this->result);
tmp_dst.writemask = WRITEMASK_XY;
- emit(ir, TGSI_OPCODE_MOV, tmp_dst, coord);
+ emit_asm(ir, TGSI_OPCODE_MOV, tmp_dst, coord);
}
coord_dst.writemask = WRITEMASK_XYZ;
- emit(ir, TGSI_OPCODE_MUL, coord_dst, tmp_src, coord_w);
+ emit_asm(ir, TGSI_OPCODE_MUL, coord_dst, tmp_src, coord_w);
coord_dst.writemask = WRITEMASK_XYZW;
coord.swizzle = SWIZZLE_XYZW;
@@ -3133,7 +3211,7 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
cube_sc = get_temp(glsl_type::float_type);
cube_sc_dst = st_dst_reg(cube_sc);
cube_sc_dst.writemask = WRITEMASK_X;
- emit(ir, TGSI_OPCODE_MOV, cube_sc_dst, this->result);
+ emit_asm(ir, TGSI_OPCODE_MOV, cube_sc_dst, this->result);
cube_sc_dst.writemask = WRITEMASK_X;
}
else {
@@ -3144,20 +3222,20 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
} else {
coord_dst.writemask = WRITEMASK_Z;
}
- emit(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
+ emit_asm(ir, TGSI_OPCODE_MOV, coord_dst, this->result);
coord_dst.writemask = WRITEMASK_XYZW;
}
}
if (ir->op == ir_txf_ms) {
coord_dst.writemask = WRITEMASK_W;
- emit(ir, TGSI_OPCODE_MOV, coord_dst, sample_index);
+ emit_asm(ir, TGSI_OPCODE_MOV, coord_dst, sample_index);
coord_dst.writemask = WRITEMASK_XYZW;
} else if (opcode == TGSI_OPCODE_TXL || opcode == TGSI_OPCODE_TXB ||
opcode == TGSI_OPCODE_TXF) {
/* TGSI stores LOD or LOD bias in the last channel of the coords. */
coord_dst.writemask = WRITEMASK_W;
- emit(ir, TGSI_OPCODE_MOV, coord_dst, lod_info);
+ emit_asm(ir, TGSI_OPCODE_MOV, coord_dst, lod_info);
coord_dst.writemask = WRITEMASK_XYZW;
}
@@ -3167,30 +3245,30 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
}
if (opcode == TGSI_OPCODE_TXD)
- inst = emit(ir, opcode, result_dst, coord, dx, dy);
+ inst = emit_asm(ir, opcode, result_dst, coord, dx, dy);
else if (opcode == TGSI_OPCODE_TXQ) {
if (ir->op == ir_query_levels) {
/* the level is stored in W */
- inst = emit(ir, opcode, st_dst_reg(levels_src), lod_info);
+ inst = emit_asm(ir, opcode, st_dst_reg(levels_src), lod_info);
result_dst.writemask = WRITEMASK_X;
levels_src.swizzle = SWIZZLE_WWWW;
- emit(ir, TGSI_OPCODE_MOV, result_dst, levels_src);
+ emit_asm(ir, TGSI_OPCODE_MOV, result_dst, levels_src);
} else
- inst = emit(ir, opcode, result_dst, lod_info);
+ inst = emit_asm(ir, opcode, result_dst, lod_info);
} else if (opcode == TGSI_OPCODE_TXF) {
- inst = emit(ir, opcode, result_dst, coord);
+ inst = emit_asm(ir, opcode, result_dst, coord);
} else if (opcode == TGSI_OPCODE_TXL2 || opcode == TGSI_OPCODE_TXB2) {
- inst = emit(ir, opcode, result_dst, coord, lod_info);
+ inst = emit_asm(ir, opcode, result_dst, coord, lod_info);
} else if (opcode == TGSI_OPCODE_TEX2) {
- inst = emit(ir, opcode, result_dst, coord, cube_sc);
+ inst = emit_asm(ir, opcode, result_dst, coord, cube_sc);
} else if (opcode == TGSI_OPCODE_TG4) {
if (is_cube_array && ir->shadow_comparitor) {
- inst = emit(ir, opcode, result_dst, coord, cube_sc);
+ inst = emit_asm(ir, opcode, result_dst, coord, cube_sc);
} else {
- inst = emit(ir, opcode, result_dst, coord, component);
+ inst = emit_asm(ir, opcode, result_dst, coord, component);
}
} else
- inst = emit(ir, opcode, result_dst, coord);
+ inst = emit_asm(ir, opcode, result_dst, coord);
if (ir->shadow_comparitor)
inst->tex_shadow = GL_TRUE;
@@ -3264,13 +3342,13 @@ glsl_to_tgsi_visitor::visit(ir_return *ir)
l = st_dst_reg(current_function->return_reg);
for (i = 0; i < type_size(current_function->sig->return_type); i++) {
- emit(ir, TGSI_OPCODE_MOV, l, r);
+ emit_asm(ir, TGSI_OPCODE_MOV, l, r);
l.index++;
r.index++;
}
}
- emit(ir, TGSI_OPCODE_RET);
+ emit_asm(ir, TGSI_OPCODE_RET);
}
void
@@ -3283,16 +3361,16 @@ glsl_to_tgsi_visitor::visit(ir_discard *ir)
/* Convert the bool condition to a float so we can negate. */
if (native_integers) {
st_src_reg temp = get_temp(ir->condition->type);
- emit(ir, TGSI_OPCODE_AND, st_dst_reg(temp),
+ emit_asm(ir, TGSI_OPCODE_AND, st_dst_reg(temp),
condition, st_src_reg_for_float(1.0));
condition = temp;
}
condition.negate = ~condition.negate;
- emit(ir, TGSI_OPCODE_KILL_IF, undef_dst, condition);
+ emit_asm(ir, TGSI_OPCODE_KILL_IF, undef_dst, condition);
} else {
/* unconditional kil */
- emit(ir, TGSI_OPCODE_KILL);
+ emit_asm(ir, TGSI_OPCODE_KILL);
}
}
@@ -3307,18 +3385,18 @@ glsl_to_tgsi_visitor::visit(ir_if *ir)
if_opcode = native_integers ? TGSI_OPCODE_UIF : TGSI_OPCODE_IF;
- if_inst = emit(ir->condition, if_opcode, undef_dst, this->result);
+ if_inst = emit_asm(ir->condition, if_opcode, undef_dst, this->result);
this->instructions.push_tail(if_inst);
visit_exec_list(&ir->then_instructions, this);
if (!ir->else_instructions.is_empty()) {
- emit(ir->condition, TGSI_OPCODE_ELSE);
+ emit_asm(ir->condition, TGSI_OPCODE_ELSE);
visit_exec_list(&ir->else_instructions, this);
}
- if_inst = emit(ir->condition, TGSI_OPCODE_ENDIF);
+ if_inst = emit_asm(ir->condition, TGSI_OPCODE_ENDIF);
}
@@ -3328,7 +3406,7 @@ glsl_to_tgsi_visitor::visit(ir_emit_vertex *ir)
assert(this->prog->Target == GL_GEOMETRY_PROGRAM_NV);
ir->stream->accept(this);
- emit(ir, TGSI_OPCODE_EMIT, undef_dst, this->result);
+ emit_asm(ir, TGSI_OPCODE_EMIT, undef_dst, this->result);
}
void
@@ -3337,14 +3415,24 @@ glsl_to_tgsi_visitor::visit(ir_end_primitive *ir)
assert(this->prog->Target == GL_GEOMETRY_PROGRAM_NV);
ir->stream->accept(this);
- emit(ir, TGSI_OPCODE_ENDPRIM, undef_dst, this->result);
+ emit_asm(ir, TGSI_OPCODE_ENDPRIM, undef_dst, this->result);
+}
+
+void
+glsl_to_tgsi_visitor::visit(ir_barrier *ir)
+{
+ unreachable("Not implemented!");
}
glsl_to_tgsi_visitor::glsl_to_tgsi_visitor()
{
result.file = PROGRAM_UNDEFINED;
next_temp = 1;
+ array_sizes = NULL;
+ max_num_arrays = 0;
next_array = 0;
+ num_input_arrays = 0;
+ num_output_arrays = 0;
next_signature_id = 1;
num_immediates = 0;
current_function = NULL;
@@ -3366,6 +3454,7 @@ glsl_to_tgsi_visitor::glsl_to_tgsi_visitor()
glsl_to_tgsi_visitor::~glsl_to_tgsi_visitor()
{
+ free(array_sizes);
ralloc_free(mem_ctx);
}
@@ -3734,6 +3823,7 @@ glsl_to_tgsi_visitor::copy_propagate(void)
inst->src[r].index2D = first->src[0].index2D;
inst->src[r].has_index2 = first->src[0].has_index2;
inst->src[r].double_reg2 = first->src[0].double_reg2;
+ inst->src[r].array_id = first->src[0].array_id;
int swizzle = 0;
for (int i = 0; i < 4; i++) {
@@ -4177,7 +4267,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
coord = st_src_reg(PROGRAM_INPUT, VARYING_SLOT_TEX0, glsl_type::vec2_type);
src0 = v->get_temp(glsl_type::vec4_type);
dst0 = st_dst_reg(src0);
- inst = v->emit(NULL, TGSI_OPCODE_TEX, dst0, coord);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_TEX, dst0, coord);
inst->sampler_array_size = 1;
inst->tex_target = TEXTURE_2D_INDEX;
@@ -4201,7 +4291,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
/* MAD colorTemp, colorTemp, scale, bias; */
scale = st_src_reg(PROGRAM_STATE_VAR, scale_p, GLSL_TYPE_FLOAT);
bias = st_src_reg(PROGRAM_STATE_VAR, bias_p, GLSL_TYPE_FLOAT);
- inst = v->emit(NULL, TGSI_OPCODE_MAD, dst0, src0, scale, bias);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_MAD, dst0, src0, scale, bias);
}
if (pixel_maps) {
@@ -4209,6 +4299,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
st_dst_reg temp_dst = st_dst_reg(temp);
assert(st->pixel_xfer.pixelmap_texture);
+ (void) st;
/* With a little effort, we can do four pixel map look-ups with
* two TEX instructions:
@@ -4216,7 +4307,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
/* TEX temp.rg, colorTemp.rgba, texture[1], 2D; */
temp_dst.writemask = WRITEMASK_XY; /* write R,G */
- inst = v->emit(NULL, TGSI_OPCODE_TEX, temp_dst, src0);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_TEX, temp_dst, src0);
inst->sampler.index = 1;
inst->sampler_array_size = 1;
inst->tex_target = TEXTURE_2D_INDEX;
@@ -4224,7 +4315,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
/* TEX temp.ba, colorTemp.baba, texture[1], 2D; */
src0.swizzle = MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_Z, SWIZZLE_W);
temp_dst.writemask = WRITEMASK_ZW; /* write B,A */
- inst = v->emit(NULL, TGSI_OPCODE_TEX, temp_dst, src0);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_TEX, temp_dst, src0);
inst->sampler.index = 1;
inst->sampler_array_size = 1;
inst->tex_target = TEXTURE_2D_INDEX;
@@ -4233,7 +4324,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
v->samplers_used |= (1 << 1);
/* MOV colorTemp, temp; */
- inst = v->emit(NULL, TGSI_OPCODE_MOV, dst0, temp);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_MOV, dst0, temp);
}
/* Now copy the instructions from the original glsl_to_tgsi_visitor into the
@@ -4256,7 +4347,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp,
prog->InputsRead |= BITFIELD64_BIT(src_regs[i].index);
}
- newinst = v->emit(NULL, inst->op, inst->dst[0], src_regs[0], src_regs[1], src_regs[2]);
+ newinst = v->emit_asm(NULL, inst->op, inst->dst[0], src_regs[0], src_regs[1], src_regs[2]);
newinst->tex_target = inst->tex_target;
newinst->sampler_array_size = inst->sampler_array_size;
}
@@ -4306,7 +4397,7 @@ get_bitmap_visitor(struct st_fragment_program *fp,
coord = st_src_reg(PROGRAM_INPUT, VARYING_SLOT_TEX0, glsl_type::vec2_type);
src0 = v->get_temp(glsl_type::vec4_type);
dst0 = st_dst_reg(src0);
- inst = v->emit(NULL, TGSI_OPCODE_TEX, dst0, coord);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_TEX, dst0, coord);
inst->sampler.index = samplerIndex;
inst->sampler_array_size = 1;
inst->tex_target = TEXTURE_2D_INDEX;
@@ -4319,7 +4410,7 @@ get_bitmap_visitor(struct st_fragment_program *fp,
src0.negate = NEGATE_XYZW;
if (st->bitmap.tex_format == PIPE_FORMAT_L8_UNORM)
src0.swizzle = SWIZZLE_XXXX;
- inst = v->emit(NULL, TGSI_OPCODE_KILL_IF, undef_dst, src0);
+ inst = v->emit_asm(NULL, TGSI_OPCODE_KILL_IF, undef_dst, src0);
/* Now copy the instructions from the original glsl_to_tgsi_visitor into the
* new visitor. */
@@ -4336,7 +4427,7 @@ get_bitmap_visitor(struct st_fragment_program *fp,
prog->InputsRead |= BITFIELD64_BIT(src_regs[i].index);
}
- newinst = v->emit(NULL, inst->op, inst->dst[0], src_regs[0], src_regs[1], src_regs[2]);
+ newinst = v->emit_asm(NULL, inst->op, inst->dst[0], src_regs[0], src_regs[1], src_regs[2]);
newinst->tex_target = inst->tex_target;
newinst->sampler_array_size = inst->sampler_array_size;
}
@@ -4362,7 +4453,8 @@ struct st_translate {
unsigned temps_size;
struct ureg_dst *temps;
- struct ureg_dst arrays[MAX_ARRAYS];
+ struct ureg_dst *arrays;
+ unsigned num_temp_arrays;
struct ureg_src *constants;
int num_constants;
struct ureg_src *immediates;
@@ -4373,7 +4465,9 @@ struct st_translate {
struct ureg_src samplers[PIPE_MAX_SAMPLERS];
struct ureg_src systemValues[SYSTEM_VALUE_MAX];
struct tgsi_texture_offset tex_offsets[MAX_GLSL_TEXTURE_OFFSET];
- unsigned array_sizes[MAX_ARRAYS];
+ unsigned *array_sizes;
+ struct array_decl *input_arrays;
+ struct array_decl *output_arrays;
const GLuint *inputMapping;
const GLuint *outputMapping;
@@ -4497,9 +4591,8 @@ emit_immediate(struct st_translate *t,
* Map a glsl_to_tgsi dst register to a TGSI ureg_dst register.
*/
static struct ureg_dst
-dst_register(struct st_translate *t,
- gl_register_file file,
- GLuint index)
+dst_register(struct st_translate *t, gl_register_file file, unsigned index,
+ unsigned array_id)
{
unsigned array;
@@ -4530,7 +4623,7 @@ dst_register(struct st_translate *t,
case PROGRAM_ARRAY:
array = index >> 16;
- assert(array < ARRAY_SIZE(t->arrays));
+ assert(array < t->num_temp_arrays);
if (ureg_dst_is_undef(t->arrays[array]))
t->arrays[array] = ureg_DECL_array_temporary(
@@ -4540,16 +4633,25 @@ dst_register(struct st_translate *t,
(int)(index & 0xFFFF) - 0x8000);
case PROGRAM_OUTPUT:
- if (t->procType == TGSI_PROCESSOR_VERTEX)
- assert(index < VARYING_SLOT_MAX);
- else if (t->procType == TGSI_PROCESSOR_FRAGMENT)
- assert(index < FRAG_RESULT_MAX);
- else
- assert(index < VARYING_SLOT_MAX);
+ if (!array_id) {
+ if (t->procType == TGSI_PROCESSOR_FRAGMENT)
+ assert(index < FRAG_RESULT_MAX);
+ else
+ assert(index < VARYING_SLOT_MAX);
- assert(t->outputMapping[index] < ARRAY_SIZE(t->outputs));
+ assert(t->outputMapping[index] < ARRAY_SIZE(t->outputs));
+ assert(t->outputs[t->outputMapping[index]].File != TGSI_FILE_NULL);
+ return t->outputs[t->outputMapping[index]];
+ }
+ else {
+ struct array_decl *decl = &t->output_arrays[array_id-1];
+ unsigned mesa_index = decl->mesa_index;
+ int slot = t->outputMapping[mesa_index];
- return t->outputs[t->outputMapping[index]];
+ assert(slot != -1 && t->outputs[slot].File == TGSI_FILE_OUTPUT);
+ assert(t->outputs[slot].ArrayID == array_id);
+ return ureg_dst_array_offset(t->outputs[slot], index - mesa_index);
+ }
case PROGRAM_ADDRESS:
return t->address[index];
@@ -4575,7 +4677,8 @@ src_register(struct st_translate *t, const st_src_reg *reg)
case PROGRAM_TEMPORARY:
case PROGRAM_ARRAY:
- return ureg_src(dst_register(t, reg->file, reg->index));
+ case PROGRAM_OUTPUT:
+ return ureg_src(dst_register(t, reg->file, reg->index, reg->array_id));
case PROGRAM_UNIFORM:
assert(reg->index >= 0);
@@ -4598,12 +4701,20 @@ src_register(struct st_translate *t, const st_src_reg *reg)
* map back to the original index and add the offset after
* mapping. */
index -= double_reg2;
- assert(t->inputMapping[index] < ARRAY_SIZE(t->inputs));
- return t->inputs[t->inputMapping[index] + double_reg2];
+ if (!reg->array_id) {
+ assert(t->inputMapping[index] < ARRAY_SIZE(t->inputs));
+ assert(t->inputs[t->inputMapping[index]].File != TGSI_FILE_NULL);
+ return t->inputs[t->inputMapping[index]];
+ }
+ else {
+ struct array_decl *decl = &t->input_arrays[reg->array_id-1];
+ unsigned mesa_index = decl->mesa_index;
+ int slot = t->inputMapping[mesa_index];
- case PROGRAM_OUTPUT:
- assert(t->outputMapping[reg->index] < ARRAY_SIZE(t->outputs));
- return ureg_src(t->outputs[t->outputMapping[reg->index]]); /* not needed? */
+ assert(slot != -1 && t->inputs[slot].File == TGSI_FILE_INPUT);
+ assert(t->inputs[slot].ArrayID == reg->array_id);
+ return ureg_src_array_offset(t->inputs[slot], index - mesa_index);
+ }
case PROGRAM_ADDRESS:
return ureg_src(t->address[reg->index]);
@@ -4626,9 +4737,8 @@ translate_dst(struct st_translate *t,
const st_dst_reg *dst_reg,
bool saturate, bool clamp_color)
{
- struct ureg_dst dst = dst_register(t,
- dst_reg->file,
- dst_reg->index);
+ struct ureg_dst dst = dst_register(t, dst_reg->file, dst_reg->index,
+ dst_reg->array_id);
if (dst.File == TGSI_FILE_NULL)
return dst;
@@ -4738,7 +4848,7 @@ translate_tex_offset(struct st_translate *t,
array = in_offset->index >> 16;
assert(array >= 0);
- assert(array < (int) ARRAY_SIZE(t->arrays));
+ assert(array < (int)t->num_temp_arrays);
dst = t->arrays[array];
offset.File = dst.File;
@@ -5060,6 +5170,25 @@ emit_edgeflags(struct st_translate *t)
ureg_MOV(ureg, edge_dst, edge_src);
}
+static bool
+find_array(unsigned attr, struct array_decl *arrays, unsigned count,
+ unsigned *array_id, unsigned *array_size)
+{
+ unsigned i;
+
+ for (i = 0; i < count; i++) {
+ struct array_decl *decl = &arrays[i];
+
+ if (attr == decl->mesa_index) {
+ *array_id = decl->array_id;
+ *array_size = decl->array_size;
+ assert(*array_size);
+ return true;
+ }
+ }
+ return false;
+}
+
/**
* Translate intermediate IR (glsl_to_tgsi_instruction) to TGSI format.
* \param program the program to translate
@@ -5089,12 +5218,14 @@ st_translate_program(
const struct gl_program *proginfo,
GLuint numInputs,
const GLuint inputMapping[],
+ const GLuint inputSlotToAttr[],
const ubyte inputSemanticName[],
const ubyte inputSemanticIndex[],
const GLuint interpMode[],
const GLuint interpLocation[],
GLuint numOutputs,
const GLuint outputMapping[],
+ const GLuint outputSlotToAttr[],
const ubyte outputSemanticName[],
const ubyte outputSemanticIndex[],
boolean passthrough_edgeflags,
@@ -5132,25 +5263,101 @@ st_translate_program(
goto out;
}
- memset(t, 0, sizeof *t);
-
t->procType = procType;
t->inputMapping = inputMapping;
t->outputMapping = outputMapping;
t->ureg = ureg;
+ t->num_temp_arrays = program->next_array;
+ if (t->num_temp_arrays)
+ t->arrays = (struct ureg_dst*)
+ calloc(1, sizeof(t->arrays[0]) * t->num_temp_arrays);
/*
* Declare input attributes.
*/
- if (procType == TGSI_PROCESSOR_FRAGMENT) {
+ switch (procType) {
+ case TGSI_PROCESSOR_FRAGMENT:
for (i = 0; i < numInputs; i++) {
- t->inputs[i] = ureg_DECL_fs_input_cyl_centroid(ureg,
- inputSemanticName[i],
- inputSemanticIndex[i],
- interpMode[i], 0,
- interpLocation[i]);
+ unsigned array_id = 0;
+ unsigned array_size;
+
+ if (find_array(inputSlotToAttr[i], program->input_arrays,
+ program->num_input_arrays, &array_id, &array_size)) {
+ /* We've found an array. Declare it so. */
+ t->inputs[i] = ureg_DECL_fs_input_cyl_centroid(ureg,
+ inputSemanticName[i], inputSemanticIndex[i],
+ interpMode[i], 0, interpLocation[i],
+ array_id, array_size);
+ i += array_size - 1;
+ }
+ else {
+ t->inputs[i] = ureg_DECL_fs_input_cyl_centroid(ureg,
+ inputSemanticName[i], inputSemanticIndex[i],
+ interpMode[i], 0, interpLocation[i], 0, 1);
+ }
}
+ break;
+ case TGSI_PROCESSOR_GEOMETRY:
+ for (i = 0; i < numInputs; i++) {
+ unsigned array_id = 0;
+ unsigned array_size;
+
+ if (find_array(inputSlotToAttr[i], program->input_arrays,
+ program->num_input_arrays, &array_id, &array_size)) {
+ /* We've found an array. Declare it so. */
+ t->inputs[i] = ureg_DECL_input(ureg, inputSemanticName[i],
+ inputSemanticIndex[i],
+ array_id, array_size);
+ i += array_size - 1;
+ }
+ else {
+ t->inputs[i] = ureg_DECL_input(ureg, inputSemanticName[i],
+ inputSemanticIndex[i], 0, 1);
+ }
+ }
+ break;
+ case TGSI_PROCESSOR_VERTEX:
+ for (i = 0; i < numInputs; i++) {
+ t->inputs[i] = ureg_DECL_vs_input(ureg, i);
+ }
+ break;
+ default:
+ assert(0);
+ }
+ /*
+ * Declare output attributes.
+ */
+ switch (procType) {
+ case TGSI_PROCESSOR_FRAGMENT:
+ break;
+ case TGSI_PROCESSOR_GEOMETRY:
+ case TGSI_PROCESSOR_VERTEX:
+ for (i = 0; i < numOutputs; i++) {
+ unsigned array_id = 0;
+ unsigned array_size;
+
+ if (find_array(outputSlotToAttr[i], program->output_arrays,
+ program->num_output_arrays, &array_id, &array_size)) {
+ /* We've found an array. Declare it so. */
+ t->outputs[i] = ureg_DECL_output_array(ureg,
+ outputSemanticName[i],
+ outputSemanticIndex[i],
+ array_id, array_size);
+ i += array_size - 1;
+ }
+ else {
+ t->outputs[i] = ureg_DECL_output(ureg,
+ outputSemanticName[i],
+ outputSemanticIndex[i]);
+ }
+ }
+ break;
+ default:
+ assert(0);
+ }
+
+ if (procType == TGSI_PROCESSOR_FRAGMENT) {
if (proginfo->InputsRead & VARYING_BIT_POS) {
/* Must do this after setting up t->inputs. */
emit_wpos(st_context(ctx), t, proginfo, ureg,
@@ -5160,9 +5367,6 @@ st_translate_program(
if (proginfo->InputsRead & VARYING_BIT_FACE)
emit_face_var(ctx, t);
- /*
- * Declare output attributes.
- */
for (i = 0; i < numOutputs; i++) {
switch (outputSemanticName[i]) {
case TGSI_SEMANTIC_POSITION:
@@ -5198,31 +5402,8 @@ st_translate_program(
}
}
}
- else if (procType == TGSI_PROCESSOR_GEOMETRY) {
- for (i = 0; i < numInputs; i++) {
- t->inputs[i] = ureg_DECL_gs_input(ureg,
- i,
- inputSemanticName[i],
- inputSemanticIndex[i]);
- }
-
+ else if (procType == TGSI_PROCESSOR_VERTEX) {
for (i = 0; i < numOutputs; i++) {
- t->outputs[i] = ureg_DECL_output(ureg,
- outputSemanticName[i],
- outputSemanticIndex[i]);
- }
- }
- else {
- assert(procType == TGSI_PROCESSOR_VERTEX);
-
- for (i = 0; i < numInputs; i++) {
- t->inputs[i] = ureg_DECL_vs_input(ureg, i);
- }
-
- for (i = 0; i < numOutputs; i++) {
- t->outputs[i] = ureg_DECL_output(ureg,
- outputSemanticName[i],
- outputSemanticIndex[i]);
if (outputSemanticName[i] == TGSI_SEMANTIC_FOG) {
/* force register to contain a fog coordinate in the form (F, 0, 0, 1). */
ureg_MOV(ureg,
@@ -5277,9 +5458,9 @@ st_translate_program(
}
}
- /* Copy over array sizes
- */
- memcpy(t->array_sizes, program->array_sizes, sizeof(unsigned) * program->next_array);
+ t->array_sizes = program->array_sizes;
+ t->input_arrays = program->input_arrays;
+ t->output_arrays = program->output_arrays;
/* Emit constants and uniforms. TGSI uses a single index space for these,
* so we put all the translated regs in t->constants.
@@ -5375,6 +5556,7 @@ st_translate_program(
out:
if (t) {
+ free(t->arrays);
free(t->temps);
free(t->insn);
free(t->labels);
@@ -5470,7 +5652,7 @@ get_mesa_program(struct gl_context *ctx,
if (!entry->bgn_inst) {
v->current_function = entry;
- entry->bgn_inst = v->emit(NULL, TGSI_OPCODE_BGNSUB);
+ entry->bgn_inst = v->emit_asm(NULL, TGSI_OPCODE_BGNSUB);
entry->bgn_inst->function = entry;
visit_exec_list(&entry->sig->body, v);
@@ -5478,10 +5660,10 @@ get_mesa_program(struct gl_context *ctx,
glsl_to_tgsi_instruction *last;
last = (glsl_to_tgsi_instruction *)v->instructions.get_tail();
if (last->op != TGSI_OPCODE_RET)
- v->emit(NULL, TGSI_OPCODE_RET);
+ v->emit_asm(NULL, TGSI_OPCODE_RET);
glsl_to_tgsi_instruction *end;
- end = v->emit(NULL, TGSI_OPCODE_ENDSUB);
+ end = v->emit_asm(NULL, TGSI_OPCODE_ENDSUB);
end->function = entry;
progress = GL_TRUE;
@@ -5513,7 +5695,7 @@ get_mesa_program(struct gl_context *ctx,
v->renumber_registers();
/* Write the END instruction. */
- v->emit(NULL, TGSI_OPCODE_END);
+ v->emit_asm(NULL, TGSI_OPCODE_END);
if (ctx->_Shader->Flags & GLSL_DUMP) {
_mesa_log("\n");
@@ -5528,6 +5710,10 @@ get_mesa_program(struct gl_context *ctx,
prog->NumInstructions = 0;
do_set_program_inouts(shader->ir, prog, shader->Stage);
+ shrink_array_declarations(v->input_arrays, v->num_input_arrays,
+ prog->InputsRead);
+ shrink_array_declarations(v->output_arrays, v->num_output_arrays,
+ prog->OutputsWritten);
count_resources(v, prog);
/* This must be done before the uniform storage is associated. */
@@ -5549,6 +5735,7 @@ get_mesa_program(struct gl_context *ctx,
*/
_mesa_associate_uniform_storage(ctx, shader_program, prog->Parameters);
if (!shader_program->LinkStatus) {
+ free_glsl_to_tgsi_visitor(v);
return NULL;
}
diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.h b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.h
index 2cb80bcf9..4af747fa9 100644
--- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.h
+++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.h
@@ -43,12 +43,14 @@ enum pipe_error st_translate_program(
const struct gl_program *proginfo,
GLuint numInputs,
const GLuint inputMapping[],
+ const GLuint inputSlotToAttr[],
const ubyte inputSemanticName[],
const ubyte inputSemanticIndex[],
const GLuint interpMode[],
const GLuint interpLocation[],
GLuint numOutputs,
const GLuint outputMapping[],
+ const GLuint outputSlotToAttr[],
const ubyte outputSemanticName[],
const ubyte outputSemanticIndex[],
boolean passthrough_edgeflags,
diff --git a/mesalib/src/mesa/state_tracker/st_manager.c b/mesalib/src/mesa/state_tracker/st_manager.c
index 0376954f7..a2dee6298 100644
--- a/mesalib/src/mesa/state_tracker/st_manager.c
+++ b/mesalib/src/mesa/state_tracker/st_manager.c
@@ -924,8 +924,7 @@ static unsigned get_version(struct pipe_screen *screen,
struct gl_extensions extensions = {0};
GLuint version;
- if ((api == API_OPENGL_COMPAT || api == API_OPENGL_CORE) &&
- _mesa_override_gl_version_contextless(&consts, &api, &version)) {
+ if (_mesa_override_gl_version_contextless(&consts, &api, &version)) {
return version;
}
diff --git a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 98d525c86..896e239ee 100644
--- a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -665,7 +665,7 @@ compile_instruction(
if (num_dst)
dst[0] = translate_dst( t,
&inst->DstReg,
- inst->SaturateMode,
+ inst->Saturate,
clamp_dst_color_output);
for (i = 0; i < num_src; i++)
@@ -1095,10 +1095,9 @@ st_translate_mesa_program(
}
else if (procType == TGSI_PROCESSOR_GEOMETRY) {
for (i = 0; i < numInputs; i++) {
- t->inputs[i] = ureg_DECL_gs_input(ureg,
- i,
- inputSemanticName[i],
- inputSemanticIndex[i]);
+ t->inputs[i] = ureg_DECL_input(ureg,
+ inputSemanticName[i],
+ inputSemanticIndex[i], 0, 1);
}
for (i = 0; i < numOutputs; i++) {
diff --git a/mesalib/src/mesa/state_tracker/st_program.c b/mesalib/src/mesa/state_tracker/st_program.c
index a9110d3c6..d5a124f21 100644
--- a/mesalib/src/mesa/state_tracker/st_program.c
+++ b/mesalib/src/mesa/state_tracker/st_program.c
@@ -215,6 +215,7 @@ st_prepare_vertex_program(struct gl_context *ctx,
unsigned slot = stvp->num_outputs++;
stvp->result_to_output[attr] = slot;
+ stvp->output_slot_to_attr[slot] = attr;
switch (attr) {
case VARYING_SLOT_POS:
@@ -321,7 +322,7 @@ st_translate_vertex_program(struct st_context *st,
_mesa_remove_output_reads(&stvp->Base.Base, PROGRAM_OUTPUT);
}
- ureg = ureg_create( TGSI_PROCESSOR_VERTEX );
+ ureg = ureg_create_with_screen(TGSI_PROCESSOR_VERTEX, st->pipe->screen);
if (ureg == NULL) {
free(vpv);
return NULL;
@@ -351,6 +352,7 @@ st_translate_vertex_program(struct st_context *st,
/* inputs */
vpv->num_inputs,
stvp->input_to_index,
+ NULL, /* inputSlotToAttr */
NULL, /* input semantic name */
NULL, /* input semantic index */
NULL, /* interp mode */
@@ -358,6 +360,7 @@ st_translate_vertex_program(struct st_context *st,
/* outputs */
num_outputs,
stvp->result_to_output,
+ stvp->output_slot_to_attr,
stvp->output_semantic_name,
stvp->output_semantic_index,
key->passthrough_edgeflags,
@@ -482,6 +485,7 @@ st_translate_fragment_program(struct st_context *st,
GLuint outputMapping[FRAG_RESULT_MAX];
GLuint inputMapping[VARYING_SLOT_MAX];
+ GLuint inputSlotToAttr[VARYING_SLOT_MAX];
GLuint interpMode[PIPE_MAX_SHADER_INPUTS]; /* XXX size? */
GLuint interpLocation[PIPE_MAX_SHADER_INPUTS];
GLuint attr;
@@ -502,6 +506,7 @@ st_translate_fragment_program(struct st_context *st,
return NULL;
assert(!(key->bitmap && key->drawpixels));
+ memset(inputSlotToAttr, ~0, sizeof(inputSlotToAttr));
if (key->bitmap) {
/* glBitmap drawing */
@@ -543,6 +548,7 @@ st_translate_fragment_program(struct st_context *st,
const GLuint slot = fs_num_inputs++;
inputMapping[attr] = slot;
+ inputSlotToAttr[slot] = attr;
if (stfp->Base.IsCentroid & BITFIELD64_BIT(attr))
interpLocation[slot] = TGSI_INTERPOLATE_LOC_CENTROID;
else if (stfp->Base.IsSample & BITFIELD64_BIT(attr))
@@ -732,7 +738,7 @@ st_translate_fragment_program(struct st_context *st,
}
}
- ureg = ureg_create( TGSI_PROCESSOR_FRAGMENT );
+ ureg = ureg_create_with_screen(TGSI_PROCESSOR_FRAGMENT, st->pipe->screen);
if (ureg == NULL) {
free(variant);
return NULL;
@@ -778,6 +784,7 @@ st_translate_fragment_program(struct st_context *st,
/* inputs */
fs_num_inputs,
inputMapping,
+ inputSlotToAttr,
input_semantic_name,
input_semantic_index,
interpMode,
@@ -785,6 +792,7 @@ st_translate_fragment_program(struct st_context *st,
/* outputs */
fs_num_outputs,
outputMapping,
+ NULL,
fs_output_semantic_name,
fs_output_semantic_index, FALSE,
key->clamp_color );
@@ -867,7 +875,9 @@ st_translate_geometry_program(struct st_context *st,
struct st_geometry_program *stgp,
const struct st_gp_variant_key *key)
{
+ GLuint inputSlotToAttr[VARYING_SLOT_MAX];
GLuint inputMapping[VARYING_SLOT_MAX];
+ GLuint outputSlotToAttr[VARYING_SLOT_MAX];
GLuint outputMapping[VARYING_SLOT_MAX];
struct pipe_context *pipe = st->pipe;
GLuint attr;
@@ -890,13 +900,15 @@ st_translate_geometry_program(struct st_context *st,
if (!gpv)
return NULL;
- ureg = ureg_create(TGSI_PROCESSOR_GEOMETRY);
+ ureg = ureg_create_with_screen(TGSI_PROCESSOR_GEOMETRY, st->pipe->screen);
if (ureg == NULL) {
free(gpv);
return NULL;
}
+ memset(inputSlotToAttr, 0, sizeof(inputSlotToAttr));
memset(inputMapping, 0, sizeof(inputMapping));
+ memset(outputSlotToAttr, 0, sizeof(outputSlotToAttr));
memset(outputMapping, 0, sizeof(outputMapping));
/*
@@ -907,6 +919,7 @@ st_translate_geometry_program(struct st_context *st,
const GLuint slot = gs_num_inputs++;
inputMapping[attr] = slot;
+ inputSlotToAttr[slot] = attr;
switch (attr) {
case VARYING_SLOT_PRIMITIVE_ID:
@@ -985,6 +998,7 @@ st_translate_geometry_program(struct st_context *st,
GLuint slot = gs_num_outputs++;
outputMapping[attr] = slot;
+ outputSlotToAttr[slot] = attr;
switch (attr) {
case VARYING_SLOT_POS:
@@ -1080,6 +1094,7 @@ st_translate_geometry_program(struct st_context *st,
/* inputs */
gs_num_inputs,
inputMapping,
+ inputSlotToAttr,
input_semantic_name,
input_semantic_index,
NULL,
@@ -1087,6 +1102,7 @@ st_translate_geometry_program(struct st_context *st,
/* outputs */
gs_num_outputs,
outputMapping,
+ outputSlotToAttr,
gs_output_semantic_name,
gs_output_semantic_index,
FALSE,
@@ -1201,7 +1217,7 @@ destroy_program_variants(struct st_context *st, struct gl_program *program)
}
}
break;
- case MESA_GEOMETRY_PROGRAM:
+ case GL_GEOMETRY_PROGRAM_NV:
{
struct st_geometry_program *stgp =
(struct st_geometry_program *) program;
diff --git a/mesalib/src/mesa/state_tracker/st_program.h b/mesalib/src/mesa/state_tracker/st_program.h
index a2c56062d..bb77eb6ed 100644
--- a/mesalib/src/mesa/state_tracker/st_program.h
+++ b/mesalib/src/mesa/state_tracker/st_program.h
@@ -163,6 +163,7 @@ struct st_vertex_program
/** Maps VARYING_SLOT_x to slot */
GLuint result_to_output[VARYING_SLOT_MAX];
+ GLuint output_slot_to_attr[VARYING_SLOT_MAX];
ubyte output_semantic_name[VARYING_SLOT_MAX];
ubyte output_semantic_index[VARYING_SLOT_MAX];
GLuint num_outputs;
diff --git a/mesalib/src/mesa/tnl/t_context.c b/mesalib/src/mesa/tnl/t_context.c
index 5b9dd54d7..bc77ba8bf 100644
--- a/mesalib/src/mesa/tnl/t_context.c
+++ b/mesalib/src/mesa/tnl/t_context.c
@@ -36,6 +36,7 @@
#include "math/m_xform.h"
#include "main/state.h"
#include "main/viewport.h"
+#include "util/simple_list.h"
#include "tnl.h"
#include "t_context.h"
diff --git a/mesalib/src/mesa/vbo/vbo_exec_array.c b/mesalib/src/mesa/vbo/vbo_exec_array.c
index 3ea775c0e..72b8206ec 100644
--- a/mesalib/src/mesa/vbo/vbo_exec_array.c
+++ b/mesalib/src/mesa/vbo/vbo_exec_array.c
@@ -1817,9 +1817,12 @@ vbo_initialize_exec_dispatch(const struct gl_context *ctx,
SET_DrawElementsInstancedBaseVertexBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseVertexBaseInstance);
}
- if (ctx->API == API_OPENGL_CORE) {
+ if (ctx->API == API_OPENGL_CORE || _mesa_is_gles31(ctx)) {
SET_DrawArraysIndirect(exec, vbo_exec_DrawArraysIndirect);
SET_DrawElementsIndirect(exec, vbo_exec_DrawElementsIndirect);
+ }
+
+ if (ctx->API == API_OPENGL_CORE) {
SET_MultiDrawArraysIndirect(exec, vbo_exec_MultiDrawArraysIndirect);
SET_MultiDrawElementsIndirect(exec, vbo_exec_MultiDrawElementsIndirect);
}
diff --git a/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj b/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj
index b0c4d73a7..75bb220e6 100644
--- a/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj
+++ b/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj
@@ -262,6 +262,7 @@
<ClCompile Include="..\..\..\..\src\glsl\standalone_scaffolding.cpp" />
<ClCompile Include="..\..\..\..\src\glsl\s_expression.cpp" />
<ClCompile Include="..\..\..\..\src\mesa\main\imports.c" />
+ <ClCompile Include="..\..\..\..\src\mesa\program\dummy_errors.c" />
<ClCompile Include="..\..\..\..\src\mesa\program\prog_hash_table.c" />
<ClCompile Include="..\..\..\..\src\mesa\program\symbol_table.c" />
<ClCompile Include="..\..\..\..\src\util\hash_table.c" />
diff --git a/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj.filters b/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj.filters
index 19aa387f8..531c5e54f 100644
--- a/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj.filters
+++ b/mesalib/windows/VC8/mesa/glsl_apps_compile/glsl_apps_compile.vcxproj.filters
@@ -321,6 +321,9 @@
<ClCompile Include="..\..\..\..\src\glsl\opt_conditional_discard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\..\src\mesa\program\dummy_errors.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\..\src\glsl\glsl_lexer.ll">
diff --git a/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj b/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj
index 8147b4605..97f9e8410 100644
--- a/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj
+++ b/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj
@@ -373,6 +373,7 @@
<ClCompile Include="..\..\..\..\src\mesa\main\get.c" />
<ClCompile Include="..\..\..\..\src\mesa\main\getstring.c" />
<ClCompile Include="..\..\..\..\src\mesa\main\hash.c" />
+ <ClCompile Include="..\..\..\..\src\mesa\program\dummy_errors.c" />
<ClCompile Include="..\..\..\..\src\mesa\program\ir_to_mesa.cpp" />
<ClCompile Include="..\..\..\..\src\mesa\program\prog_hash_table.c" />
<ClCompile Include="..\..\..\..\src\mesa\program\string_to_uint_map.cpp" />
diff --git a/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj.filters b/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj.filters
index be9f6098f..6151b2ab0 100644
--- a/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj.filters
+++ b/mesalib/windows/VC8/mesa/mesa/mesa.vcxproj.filters
@@ -830,6 +830,9 @@
<ClCompile Include="..\..\..\..\src\mesa\main\program_resource.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\..\src\mesa\program\dummy_errors.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="..\..\..\..\src\mesa\program\program_lexer.l">
diff --git a/openssl/CHANGES b/openssl/CHANGES
index 3044aa7dd..4cbf61ddf 100644
--- a/openssl/CHANGES
+++ b/openssl/CHANGES
@@ -2,6 +2,96 @@
OpenSSL CHANGES
_______________
+ Changes between 1.0.2b and 1.0.2c [12 Jun 2015]
+
+ *) Fix HMAC ABI incompatibility. The previous version introduced an ABI
+ incompatibility in the handling of HMAC. The previous ABI has now been
+ restored.
+
+ Changes between 1.0.2a and 1.0.2b [11 Jun 2015]
+
+ *) Malformed ECParameters causes infinite loop
+
+ When processing an ECParameters structure OpenSSL enters an infinite loop
+ if the curve specified is over a specially malformed binary polynomial
+ field.
+
+ This can be used to perform denial of service against any
+ system which processes public keys, certificate requests or
+ certificates. This includes TLS clients and TLS servers with
+ client authentication enabled.
+
+ This issue was reported to OpenSSL by Joseph Barr-Pixton.
+ (CVE-2015-1788)
+ [Andy Polyakov]
+
+ *) Exploitable out-of-bounds read in X509_cmp_time
+
+ X509_cmp_time does not properly check the length of the ASN1_TIME
+ string and can read a few bytes out of bounds. In addition,
+ X509_cmp_time accepts an arbitrary number of fractional seconds in the
+ time string.
+
+ An attacker can use this to craft malformed certificates and CRLs of
+ various sizes and potentially cause a segmentation fault, resulting in
+ a DoS on applications that verify certificates or CRLs. TLS clients
+ that verify CRLs are affected. TLS clients and servers with client
+ authentication enabled may be affected if they use custom verification
+ callbacks.
+
+ This issue was reported to OpenSSL by Robert Swiecki (Google), and
+ independently by Hanno Bck.
+ (CVE-2015-1789)
+ [Emilia Ksper]
+
+ *) PKCS7 crash with missing EnvelopedContent
+
+ The PKCS#7 parsing code does not handle missing inner EncryptedContent
+ correctly. An attacker can craft malformed ASN.1-encoded PKCS#7 blobs
+ with missing content and trigger a NULL pointer dereference on parsing.
+
+ Applications that decrypt PKCS#7 data or otherwise parse PKCS#7
+ structures from untrusted sources are affected. OpenSSL clients and
+ servers are not affected.
+
+ This issue was reported to OpenSSL by Michal Zalewski (Google).
+ (CVE-2015-1790)
+ [Emilia Ksper]
+
+ *) CMS verify infinite loop with unknown hash function
+
+ When verifying a signedData message the CMS code can enter an infinite loop
+ if presented with an unknown hash function OID. This can be used to perform
+ denial of service against any system which verifies signedData messages using
+ the CMS code.
+ This issue was reported to OpenSSL by Johannes Bauer.
+ (CVE-2015-1792)
+ [Stephen Henson]
+
+ *) Race condition handling NewSessionTicket
+
+ If a NewSessionTicket is received by a multi-threaded client when attempting to
+ reuse a previous ticket then a race condition can occur potentially leading to
+ a double free of the ticket data.
+ (CVE-2015-1791)
+ [Matt Caswell]
+
+ *) Removed support for the two export grade static DH ciphersuites
+ EXP-DH-RSA-DES-CBC-SHA and EXP-DH-DSS-DES-CBC-SHA. These two ciphersuites
+ were newly added (along with a number of other static DH ciphersuites) to
+ 1.0.2. However the two export ones have *never* worked since they were
+ introduced. It seems strange in any case to be adding new export
+ ciphersuites, and given "logjam" it also does not seem correct to fix them.
+ [Matt Caswell]
+
+ *) Only support 256-bit or stronger elliptic curves with the
+ 'ecdh_auto' setting (server) or by default (client). Of supported
+ curves, prefer P-256 (both).
+ [Emilia Kasper]
+
+ *) Reject DH handshakes with parameters shorter than 768 bits.
+ [Kurt Roeckx and Emilia Kasper]
+
Changes between 1.0.2 and 1.0.2a [19 Mar 2015]
*) ClientHello sigalgs DoS fix
diff --git a/openssl/Configure b/openssl/Configure
index 81a171df4..e8dabd26b 100755
--- a/openssl/Configure
+++ b/openssl/Configure
@@ -105,7 +105,24 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
-my $clang_disabled_warnings = "-Wno-language-extension-token -Wno-extended-offsetof -Wno-padded -Wno-shorten-64-to-32 -Wno-format-nonliteral -Wno-missing-noreturn -Wno-unused-parameter -Wno-sign-conversion -Wno-unreachable-code -Wno-conversion -Wno-documentation -Wno-missing-variable-declarations -Wno-cast-align -Wno-incompatible-pointer-types-discards-qualifiers -Wno-missing-variable-declarations -Wno-missing-field-initializers -Wno-unused-macros -Wno-disabled-macro-expansion -Wno-conditional-uninitialized -Wno-switch-enum";
+# TODO(openssl-team): fix problems and investigate if (at least) the following
+# warnings can also be enabled:
+# -Wconditional-uninitialized, -Wswitch-enum, -Wunused-macros,
+# -Wmissing-field-initializers, -Wmissing-variable-declarations,
+# -Wincompatible-pointer-types-discards-qualifiers, -Wcast-align,
+# -Wunreachable-code -Wunused-parameter -Wlanguage-extension-token
+# -Wextended-offsetof
+my $clang_disabled_warnings = "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Wno-extended-offsetof";
+
+# These are used in addition to $gcc_devteam_warn when the compiler is clang.
+# TODO(openssl-team): fix problems and investigate if (at least) the
+# following warnings can also be enabled: -Wconditional-uninitialized,
+# -Wswitch-enum, -Wunused-macros, -Wmissing-field-initializers,
+# -Wmissing-variable-declarations,
+# -Wincompatible-pointer-types-discards-qualifiers, -Wcast-align,
+# -Wunreachable-code -Wunused-parameter -Wlanguage-extension-token
+# -Wextended-offsetof
+my $clang_devteam_warn = "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Wno-extended-offsetof -Qunused-arguments";
my $strict_warnings = 0;
@@ -233,12 +250,12 @@ my %table=(
#### SPARC Solaris with GNU C setups
"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris-sparcv8-gcc","gcc:-mcpu=v8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
####
-"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mcpu=v8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
#### SPARC Solaris with Sun C setups
@@ -255,7 +272,7 @@ my %table=(
#### SunOS configs, assuming sparc for the gcc one.
#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
-"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
+"sunos-gcc","gcc:-O3 -mcpu=v8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
#### IRIX 5.x configs
# -mips2 flag is added by ./config when appropriate.
@@ -398,7 +415,7 @@ my %table=(
"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-ia64-icc","icc:-DL_ENDIAN -O2 -Wall::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-x86_64", "gcc:-m64 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
-"linux-x86_64-clang", "clang: -m64 -DL_ENDIAN -O3 -Weverything $clang_disabled_warnings -Qunused-arguments::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
+"linux-x86_64-clang", "clang: -m64 -DL_ENDIAN -O3 -Wall -Wextra $clang_disabled_warnings -Qunused-arguments::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
"linux-x86_64-icc", "icc:-DL_ENDIAN -O2::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
"linux-x32", "gcc:-mx32 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-mx32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::x32",
"linux64-s390x", "gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
@@ -419,7 +436,7 @@ my %table=(
#### SPARC Linux setups
# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
# assisted with debugging of following two configs.
-"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-sparcv8","gcc:-mcpu=v8 -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# it's a real mess with -mcpu=ultrasparc option under Linux, but
# -Wa,-Av8plus should do the trick no matter what.
"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -454,7 +471,7 @@ my %table=(
"BSD-x86", "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"BSD-x86-elf", "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-BSD-x86-elf", "gcc:-DL_ENDIAN -O3 -Wall -g::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"BSD-sparcv8", "gcc:-DB_ENDIAN -O3 -mv8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${sparcv8_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"BSD-sparcv8", "gcc:-DB_ENDIAN -O3 -mcpu=v8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${sparcv8_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"BSD-generic64","gcc:-O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
@@ -462,7 +479,7 @@ my %table=(
# triggered by RIPEMD160 code.
"BSD-sparc64", "gcc:-DB_ENDIAN -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"BSD-ia64", "gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"BSD-x86_64", "gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"BSD-x86_64", "cc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"bsdi-elf-gcc", "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -1195,6 +1212,7 @@ my $cc = $fields[$idx_cc];
if($ENV{CC}) {
$cc = $ENV{CC};
}
+
my $cflags = $fields[$idx_cflags];
my $unistd = $fields[$idx_unistd];
my $thread_cflag = $fields[$idx_thread_cflag];
@@ -1630,12 +1648,21 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
if ($strict_warnings)
{
+ my $ecc = $cc;
+ $ecc = "clang" if `$cc --version 2>&1` =~ /clang/;
my $wopt;
- die "ERROR --strict-warnings requires gcc or clang" unless ($cc =~ /gcc$/ or $cc =~ /clang$/);
+ die "ERROR --strict-warnings requires gcc or clang" unless ($ecc =~ /gcc$/ or $ecc =~ /clang$/);
foreach $wopt (split /\s+/, $gcc_devteam_warn)
{
$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
}
+ if ($ecc eq "clang")
+ {
+ foreach $wopt (split /\s+/, $clang_devteam_warn)
+ {
+ $cflags .= " $wopt" unless ($cflags =~ /$wopt/)
+ }
+ }
}
open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
diff --git a/openssl/Makefile.org b/openssl/Makefile.org
index b7a3f96c9..9f4faae2d 100644
--- a/openssl/Makefile.org
+++ b/openssl/Makefile.org
@@ -185,7 +185,7 @@ WTARFILE= $(NAME)-win.tar
EXHEADER= e_os2.h
HEADER= e_os.h
-all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
+all: Makefile build_all
# as we stick to -e, CLEARENV ensures that local variables in lower
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
@@ -271,7 +271,10 @@ reflect:
sub_all: build_all
build_all: build_libs build_apps build_tests build_tools
-build_libs: build_crypto build_ssl build_engines
+build_libs: build_libcrypto build_libssl openssl.pc
+
+build_libcrypto: build_crypto build_engines libcrypto.pc
+build_libssl: build_ssl libssl.pc
build_crypto:
@dir=crypto; target=all; $(BUILD_ONE_CMD)
@@ -457,6 +460,9 @@ tests: rehash
report:
@$(PERL) util/selftest.pl
+update: errors stacks util/libeay.num util/ssleay.num TABLE
+ @set -e; target=update; $(RECURSIVE_BUILD_CMD)
+
depend:
@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
@@ -481,26 +487,10 @@ util/libeay.num::
util/ssleay.num::
$(PERL) util/mkdef.pl ssl update
-crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
- $(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
-crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
- $(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
-crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
- $(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
-
-apps/openssl-vms.cnf: apps/openssl.cnf
- $(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
-
-crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
- $(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
-
-
TABLE: Configure
(echo 'Output of `Configure TABLE'"':"; \
$(PERL) Configure TABLE) > TABLE
-update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
-
# Build distribution tar-file. As the list of files returned by "find" is
# pretty long, on several platforms a "too many arguments" error or similar
# would occur. Therefore the list of files is temporarily stored into a file
diff --git a/openssl/NEWS b/openssl/NEWS
index 682c583da..f3574cf4c 100644
--- a/openssl/NEWS
+++ b/openssl/NEWS
@@ -5,6 +5,18 @@
This file gives a brief overview of the major changes between each OpenSSL
release. For more details please read the CHANGES file.
+ Major changes between OpenSSL 1.0.2b and OpenSSL 1.0.2c [12 Jun 2015]
+
+ o Fix HMAC ABI incompatibility
+
+ Major changes between OpenSSL 1.0.2a and OpenSSL 1.0.2b [11 Jun 2015]
+
+ o Malformed ECParameters causes infinite loop (CVE-2015-1788)
+ o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
+ o PKCS7 crash with missing EnvelopedContent (CVE-2015-1790)
+ o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
+ o Race condition handling NewSessionTicket (CVE-2015-1791)
+
Major changes between OpenSSL 1.0.2 and OpenSSL 1.0.2a [19 Mar 2015]
o OpenSSL 1.0.2 ClientHello sigalgs DoS fix (CVE-2015-0291)
diff --git a/openssl/README b/openssl/README
index 8ce093dd4..ae0443199 100644
--- a/openssl/README
+++ b/openssl/README
@@ -1,5 +1,5 @@
- OpenSSL 1.0.2a 19 Mar 2015
+ OpenSSL 1.0.2c 12 Jun 2015
Copyright (c) 1998-2011 The OpenSSL Project
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
diff --git a/openssl/apps/Makefile b/openssl/apps/Makefile
index 72657ea65..cafe55458 100644
--- a/openssl/apps/Makefile
+++ b/openssl/apps/Makefile
@@ -94,6 +94,9 @@ req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
sreq.o: req.c
$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
+openssl-vms.cnf: openssl.cnf
+ $(PERL) $(TOP)/VMS/VMSify-conf.pl < openssl.cnf > openssl-vms.cnf
+
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -127,12 +130,12 @@ links:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
-depend:
- @if [ -z "$(THIS)" ]; then \
- $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
- else \
- $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
- fi
+update: openssl-vms.cnf local_depend
+
+depend: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+local_depend:
+ @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
dclean:
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
@@ -144,10 +147,10 @@ clean:
rm -f req
$(DLIBSSL):
- (cd ..; $(MAKE) DIRS=ssl all)
+ (cd ..; $(MAKE) build_libssl)
$(DLIBCRYPTO):
- (cd ..; $(MAKE) DIRS=crypto all)
+ (cd ..; $(MAKE) build_libcrypto)
$(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
$(RM) $(EXE)
diff --git a/openssl/apps/apps.c b/openssl/apps/apps.c
index b0acbc7c1..7478fc379 100644
--- a/openssl/apps/apps.c
+++ b/openssl/apps/apps.c
@@ -574,7 +574,7 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
char *prompt = NULL;
prompt = UI_construct_prompt(ui, "pass phrase", prompt_info);
- if(!prompt) {
+ if (!prompt) {
BIO_printf(bio_err, "Out of memory\n");
UI_free(ui);
return 0;
@@ -588,7 +588,7 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
PW_MIN_LENGTH, bufsiz - 1);
if (ok >= 0 && verify) {
buff = (char *)OPENSSL_malloc(bufsiz);
- if(!buff) {
+ if (!buff) {
BIO_printf(bio_err, "Out of memory\n");
UI_free(ui);
OPENSSL_free(prompt);
@@ -2371,6 +2371,8 @@ int args_verify(char ***pargs, int *pargc,
flags |= X509_V_FLAG_SUITEB_192_LOS;
else if (!strcmp(arg, "-partial_chain"))
flags |= X509_V_FLAG_PARTIAL_CHAIN;
+ else if (!strcmp(arg, "-no_alt_chains"))
+ flags |= X509_V_FLAG_NO_ALT_CHAINS;
else
return 0;
diff --git a/openssl/apps/asn1pars.c b/openssl/apps/asn1pars.c
index 7a0f16943..11b078759 100644
--- a/openssl/apps/asn1pars.c
+++ b/openssl/apps/asn1pars.c
@@ -375,7 +375,7 @@ static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
{
CONF *cnf = NULL;
int len;
- long errline;
+ long errline = 0;
unsigned char *p;
ASN1_TYPE *atyp = NULL;
diff --git a/openssl/apps/ca.c b/openssl/apps/ca.c
index d64ec4f14..3b7336c04 100644
--- a/openssl/apps/ca.c
+++ b/openssl/apps/ca.c
@@ -563,7 +563,7 @@ int MAIN(int argc, char **argv)
#ifdef OPENSSL_SYS_VMS
len = strlen(s) + sizeof(CONFIG_FILE);
tofree = OPENSSL_malloc(len);
- if(!tofree) {
+ if (!tofree) {
BIO_printf(bio_err, "Out of memory\n");
goto err;
}
@@ -571,7 +571,7 @@ int MAIN(int argc, char **argv)
#else
len = strlen(s) + sizeof(CONFIG_FILE) + 1;
tofree = OPENSSL_malloc(len);
- if(!tofree) {
+ if (!tofree) {
BIO_printf(bio_err, "Out of memory\n");
goto err;
}
@@ -2821,7 +2821,7 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
ASN1_GENERALIZEDTIME *comp_time = NULL;
tmp = BUF_strdup(str);
- if(!tmp) {
+ if (!tmp) {
BIO_printf(bio_err, "memory allocation failure\n");
goto err;
}
@@ -2843,7 +2843,7 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
if (prevtm) {
*prevtm = ASN1_UTCTIME_new();
- if(!*prevtm) {
+ if (!*prevtm) {
BIO_printf(bio_err, "memory allocation failure\n");
goto err;
}
@@ -2887,7 +2887,7 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
goto err;
}
comp_time = ASN1_GENERALIZEDTIME_new();
- if(!comp_time) {
+ if (!comp_time) {
BIO_printf(bio_err, "memory allocation failure\n");
goto err;
}
diff --git a/openssl/apps/cms.c b/openssl/apps/cms.c
index 2c922537c..60479374c 100644
--- a/openssl/apps/cms.c
+++ b/openssl/apps/cms.c
@@ -463,7 +463,7 @@ int MAIN(int argc, char **argv)
if (key_param == NULL || key_param->idx != keyidx) {
cms_key_param *nparam;
nparam = OPENSSL_malloc(sizeof(cms_key_param));
- if(!nparam) {
+ if (!nparam) {
BIO_printf(bio_err, "Out of memory\n");
goto argerr;
}
@@ -646,6 +646,8 @@ int MAIN(int argc, char **argv)
"-CApath dir trusted certificates directory\n");
BIO_printf(bio_err, "-CAfile file trusted certificates file\n");
BIO_printf(bio_err,
+ "-no_alt_chains only ever use the first certificate chain found\n");
+ BIO_printf(bio_err,
"-crl_check check revocation status of signer's certificate using CRLs\n");
BIO_printf(bio_err,
"-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
diff --git a/openssl/apps/enc.c b/openssl/apps/enc.c
index 5c2cf7a4a..7b7c70b13 100644
--- a/openssl/apps/enc.c
+++ b/openssl/apps/enc.c
@@ -548,9 +548,14 @@ int MAIN(int argc, char **argv)
else
OPENSSL_cleanse(str, strlen(str));
}
- if ((hiv != NULL) && !set_hex(hiv, iv, sizeof iv)) {
- BIO_printf(bio_err, "invalid hex iv value\n");
- goto end;
+ if (hiv != NULL) {
+ int siz = EVP_CIPHER_iv_length(cipher);
+ if (siz == 0) {
+ BIO_printf(bio_err, "warning: iv not use by this cipher\n");
+ } else if (!set_hex(hiv, iv, sizeof iv)) {
+ BIO_printf(bio_err, "invalid hex iv value\n");
+ goto end;
+ }
}
if ((hiv == NULL) && (str == NULL)
&& EVP_CIPHER_iv_length(cipher) != 0) {
@@ -562,7 +567,7 @@ int MAIN(int argc, char **argv)
BIO_printf(bio_err, "iv undefined\n");
goto end;
}
- if ((hkey != NULL) && !set_hex(hkey, key, sizeof key)) {
+ if ((hkey != NULL) && !set_hex(hkey, key, EVP_CIPHER_key_length(cipher))) {
BIO_printf(bio_err, "invalid hex key value\n");
goto end;
}
diff --git a/openssl/apps/ocsp.c b/openssl/apps/ocsp.c
index ebb3732cd..b858b8d3e 100644
--- a/openssl/apps/ocsp.c
+++ b/openssl/apps/ocsp.c
@@ -536,6 +536,8 @@ int MAIN(int argc, char **argv)
BIO_printf(bio_err,
"-CAfile file trusted certificates file\n");
BIO_printf(bio_err,
+ "-no_alt_chains only ever use the first certificate chain found\n");
+ BIO_printf(bio_err,
"-VAfile file validator certificates file\n");
BIO_printf(bio_err,
"-validity_period n maximum validity discrepancy in seconds\n");
diff --git a/openssl/apps/s_cb.c b/openssl/apps/s_cb.c
index f6e6bcd76..dd3aa74e0 100644
--- a/openssl/apps/s_cb.c
+++ b/openssl/apps/s_cb.c
@@ -111,6 +111,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h> /* for memcpy() and strcmp() */
#define USE_SOCKETS
#define NON_MAIN
#include "apps.h"
@@ -456,7 +457,7 @@ int ssl_print_curves(BIO *out, SSL *s, int noshared)
if (ncurves <= 0)
return 1;
curves = OPENSSL_malloc(ncurves * sizeof(int));
- if(!curves) {
+ if (!curves) {
BIO_puts(out, "Malloc error getting supported curves\n");
return 0;
}
@@ -1012,7 +1013,7 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
/* Initialize a random secret */
if (!cookie_initialized) {
- if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH)) {
+ if (RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH) <= 0) {
BIO_printf(bio_err, "error setting random cookie secret\n");
return 0;
}
diff --git a/openssl/apps/s_client.c b/openssl/apps/s_client.c
index 8fa2b737a..e55f2c5ab 100644
--- a/openssl/apps/s_client.c
+++ b/openssl/apps/s_client.c
@@ -332,6 +332,8 @@ static void sc_usage(void)
BIO_printf(bio_err, " -CApath arg - PEM format directory of CA's\n");
BIO_printf(bio_err, " -CAfile arg - PEM format file of CA's\n");
BIO_printf(bio_err,
+ " -no_alt_chains - only ever use the first certificate chain found\n");
+ BIO_printf(bio_err,
" -reconnect - Drop and re-make the connection with the same Session-ID\n");
BIO_printf(bio_err,
" -pause - sleep(1) after each read(2) and write(2) system call\n");
@@ -560,7 +562,7 @@ static char *MS_CALLBACK ssl_give_srp_client_pwd_cb(SSL *s, void *arg)
PW_CB_DATA cb_tmp;
int l;
- if(!pass) {
+ if (!pass) {
BIO_printf(bio_err, "Malloc failure\n");
return NULL;
}
@@ -1336,13 +1338,12 @@ int MAIN(int argc, char **argv)
SSL_CTX_set_verify(ctx, verify, verify_callback);
- if ((!SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) ||
- (!SSL_CTX_set_default_verify_paths(ctx))) {
- /*
- * BIO_printf(bio_err,"error setting default verify locations\n");
- */
+ if ((CAfile || CApath)
+ && !SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) {
+ ERR_print_errors(bio_err);
+ }
+ if (!SSL_CTX_set_default_verify_paths(ctx)) {
ERR_print_errors(bio_err);
- /* goto end; */
}
ssl_ctx_add_crls(ctx, crls, crl_download);
diff --git a/openssl/apps/s_server.c b/openssl/apps/s_server.c
index a8491acfd..acef382c2 100644
--- a/openssl/apps/s_server.c
+++ b/openssl/apps/s_server.c
@@ -222,7 +222,7 @@ static void init_session_cache_ctx(SSL_CTX *sctx);
static void free_sessions(void);
#ifndef OPENSSL_NO_DH
static DH *load_dh_param(const char *dhfile);
-static DH *get_dh512(void);
+static DH *get_dh2048(void);
#endif
#ifdef MONOLITH
@@ -230,30 +230,48 @@ static void s_server_init(void);
#endif
#ifndef OPENSSL_NO_DH
-static unsigned char dh512_p[] = {
- 0xDA, 0x58, 0x3C, 0x16, 0xD9, 0x85, 0x22, 0x89, 0xD0, 0xE4, 0xAF, 0x75,
- 0x6F, 0x4C, 0xCA, 0x92, 0xDD, 0x4B, 0xE5, 0x33, 0xB8, 0x04, 0xFB, 0x0F,
- 0xED, 0x94, 0xEF, 0x9C, 0x8A, 0x44, 0x03, 0xED, 0x57, 0x46, 0x50, 0xD3,
- 0x69, 0x99, 0xDB, 0x29, 0xD7, 0x76, 0x27, 0x6B, 0xA2, 0xD3, 0xD4, 0x12,
- 0xE2, 0x18, 0xF4, 0xDD, 0x1E, 0x08, 0x4C, 0xF6, 0xD8, 0x00, 0x3E, 0x7C,
- 0x47, 0x74, 0xE8, 0x33,
+static unsigned char dh2048_p[] = {
+ 0xF6,0x42,0x57,0xB7,0x08,0x7F,0x08,0x17,0x72,0xA2,0xBA,0xD6,
+ 0xA9,0x42,0xF3,0x05,0xE8,0xF9,0x53,0x11,0x39,0x4F,0xB6,0xF1,
+ 0x6E,0xB9,0x4B,0x38,0x20,0xDA,0x01,0xA7,0x56,0xA3,0x14,0xE9,
+ 0x8F,0x40,0x55,0xF3,0xD0,0x07,0xC6,0xCB,0x43,0xA9,0x94,0xAD,
+ 0xF7,0x4C,0x64,0x86,0x49,0xF8,0x0C,0x83,0xBD,0x65,0xE9,0x17,
+ 0xD4,0xA1,0xD3,0x50,0xF8,0xF5,0x59,0x5F,0xDC,0x76,0x52,0x4F,
+ 0x3D,0x3D,0x8D,0xDB,0xCE,0x99,0xE1,0x57,0x92,0x59,0xCD,0xFD,
+ 0xB8,0xAE,0x74,0x4F,0xC5,0xFC,0x76,0xBC,0x83,0xC5,0x47,0x30,
+ 0x61,0xCE,0x7C,0xC9,0x66,0xFF,0x15,0xF9,0xBB,0xFD,0x91,0x5E,
+ 0xC7,0x01,0xAA,0xD3,0x5B,0x9E,0x8D,0xA0,0xA5,0x72,0x3A,0xD4,
+ 0x1A,0xF0,0xBF,0x46,0x00,0x58,0x2B,0xE5,0xF4,0x88,0xFD,0x58,
+ 0x4E,0x49,0xDB,0xCD,0x20,0xB4,0x9D,0xE4,0x91,0x07,0x36,0x6B,
+ 0x33,0x6C,0x38,0x0D,0x45,0x1D,0x0F,0x7C,0x88,0xB3,0x1C,0x7C,
+ 0x5B,0x2D,0x8E,0xF6,0xF3,0xC9,0x23,0xC0,0x43,0xF0,0xA5,0x5B,
+ 0x18,0x8D,0x8E,0xBB,0x55,0x8C,0xB8,0x5D,0x38,0xD3,0x34,0xFD,
+ 0x7C,0x17,0x57,0x43,0xA3,0x1D,0x18,0x6C,0xDE,0x33,0x21,0x2C,
+ 0xB5,0x2A,0xFF,0x3C,0xE1,0xB1,0x29,0x40,0x18,0x11,0x8D,0x7C,
+ 0x84,0xA7,0x0A,0x72,0xD6,0x86,0xC4,0x03,0x19,0xC8,0x07,0x29,
+ 0x7A,0xCA,0x95,0x0C,0xD9,0x96,0x9F,0xAB,0xD0,0x0A,0x50,0x9B,
+ 0x02,0x46,0xD3,0x08,0x3D,0x66,0xA4,0x5D,0x41,0x9F,0x9C,0x7C,
+ 0xBD,0x89,0x4B,0x22,0x19,0x26,0xBA,0xAB,0xA2,0x5E,0xC3,0x55,
+ 0xE9,0x32,0x0B,0x3B,
};
-static unsigned char dh512_g[] = {
+static unsigned char dh2048_g[] = {
0x02,
};
-static DH *get_dh512(void)
+DH *get_dh2048()
{
- DH *dh = NULL;
+ DH *dh;
if ((dh = DH_new()) == NULL)
- return (NULL);
- dh->p = BN_bin2bn(dh512_p, sizeof(dh512_p), NULL);
- dh->g = BN_bin2bn(dh512_g, sizeof(dh512_g), NULL);
- if ((dh->p == NULL) || (dh->g == NULL))
- return (NULL);
- return (dh);
+ return NULL;
+ dh->p=BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL);
+ dh->g=BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL);
+ if (dh->p == NULL || dh->g == NULL) {
+ DH_free(dh);
+ return NULL;
+ }
+ return dh;
}
#endif
@@ -554,6 +572,8 @@ static void sv_usage(void)
BIO_printf(bio_err, " -CApath arg - PEM format directory of CA's\n");
BIO_printf(bio_err, " -CAfile arg - PEM format file of CA's\n");
BIO_printf(bio_err,
+ " -no_alt_chains - only ever use the first certificate chain found\n");
+ BIO_printf(bio_err,
" -nocert - Don't use any certificates (Anon-DH)\n");
BIO_printf(bio_err,
" -cipher arg - play with 'openssl ciphers' to see what goes here\n");
@@ -754,7 +774,7 @@ static int ebcdic_write(BIO *b, const char *in, int inl)
num = inl;
wbuf =
(EBCDIC_OUTBUFF *) OPENSSL_malloc(sizeof(EBCDIC_OUTBUFF) + num);
- if(!wbuf)
+ if (!wbuf)
return 0;
OPENSSL_free(b->ptr);
@@ -1865,7 +1885,11 @@ int MAIN(int argc, char *argv[])
BIO_printf(bio_s_out, "Setting temp DH parameters\n");
} else {
BIO_printf(bio_s_out, "Using default temp DH parameters\n");
- dh = get_dh512();
+ dh = get_dh2048();
+ if (dh == NULL) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
}
(void)BIO_flush(bio_s_out);
@@ -2453,8 +2477,10 @@ static int sv_body(char *hostname, int s, int stype, unsigned char *context)
ret = 1;
goto err;
}
- l += k;
- i -= k;
+ if (k > 0) {
+ l += k;
+ i -= k;
+ }
if (i <= 0)
break;
}
@@ -3281,7 +3307,8 @@ static int generate_session_id(const SSL *ssl, unsigned char *id,
{
unsigned int count = 0;
do {
- RAND_pseudo_bytes(id, *id_len);
+ if (RAND_pseudo_bytes(id, *id_len) < 0)
+ return 0;
/*
* Prefix the session_id with the required prefix. NB: If our prefix
* is too long, clip it - but there will be worse effects anyway, eg.
@@ -3323,7 +3350,7 @@ static int add_session(SSL *ssl, SSL_SESSION *session)
unsigned char *p;
sess = OPENSSL_malloc(sizeof(simple_ssl_session));
- if(!sess) {
+ if (!sess) {
BIO_printf(bio_err, "Out of memory adding session to external cache\n");
return 0;
}
@@ -3334,12 +3361,12 @@ static int add_session(SSL *ssl, SSL_SESSION *session)
sess->id = BUF_memdup(SSL_SESSION_get_id(session, NULL), sess->idlen);
sess->der = OPENSSL_malloc(sess->derlen);
- if(!sess->id || !sess->der) {
+ if (!sess->id || !sess->der) {
BIO_printf(bio_err, "Out of memory adding session to external cache\n");
- if(sess->id)
+ if (sess->id)
OPENSSL_free(sess->id);
- if(sess->der)
+ if (sess->der)
OPENSSL_free(sess->der);
OPENSSL_free(sess);
return 0;
diff --git a/openssl/apps/s_time.c b/openssl/apps/s_time.c
index a40997a22..38788f713 100644
--- a/openssl/apps/s_time.c
+++ b/openssl/apps/s_time.c
@@ -302,7 +302,7 @@ static int parseArgs(int argc, char **argv)
if (--argc < 1)
goto bad;
maxTime = atoi(*(++argv));
- if(maxTime <= 0) {
+ if (maxTime <= 0) {
BIO_printf(bio_err, "time must be > 0\n");
badop = 1;
}
diff --git a/openssl/apps/smime.c b/openssl/apps/smime.c
index 764509f23..6044ccf5f 100644
--- a/openssl/apps/smime.c
+++ b/openssl/apps/smime.c
@@ -442,6 +442,8 @@ int MAIN(int argc, char **argv)
"-CApath dir trusted certificates directory\n");
BIO_printf(bio_err, "-CAfile file trusted certificates file\n");
BIO_printf(bio_err,
+ "-no_alt_chains only ever use the first certificate chain found\n");
+ BIO_printf(bio_err,
"-crl_check check revocation status of signer's certificate using CRLs\n");
BIO_printf(bio_err,
"-crl_check_all check revocation status of signer's certificate chain using CRLs\n");
diff --git a/openssl/apps/speed.c b/openssl/apps/speed.c
index 7b1acc189..3697b71ec 100644
--- a/openssl/apps/speed.c
+++ b/openssl/apps/speed.c
@@ -2775,7 +2775,7 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher)
inp = OPENSSL_malloc(mblengths[num - 1]);
out = OPENSSL_malloc(mblengths[num - 1] + 1024);
- if(!inp || !out) {
+ if (!inp || !out) {
BIO_printf(bio_err,"Out of memory\n");
goto end;
}
@@ -2791,7 +2791,7 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher)
print_message(alg_name, 0, mblengths[j]);
Time_F(START);
for (count = 0, run = 1; run && count < 0x7fffffff; count++) {
- unsigned char aad[13];
+ unsigned char aad[EVP_AEAD_TLS1_AAD_LEN];
EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
size_t len = mblengths[j];
int packlen;
@@ -2826,7 +2826,8 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher)
aad[11] = len >> 8;
aad[12] = len;
pad = EVP_CIPHER_CTX_ctrl(&ctx,
- EVP_CTRL_AEAD_TLS1_AAD, 13, aad);
+ EVP_CTRL_AEAD_TLS1_AAD,
+ EVP_AEAD_TLS1_AAD_LEN, aad);
EVP_Cipher(&ctx, out, inp, len + pad);
}
}
@@ -2865,9 +2866,9 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher)
}
end:
- if(inp)
+ if (inp)
OPENSSL_free(inp);
- if(out)
+ if (out)
OPENSSL_free(out);
}
#endif
diff --git a/openssl/apps/srp.c b/openssl/apps/srp.c
index c679448ee..c0ff4171c 100644
--- a/openssl/apps/srp.c
+++ b/openssl/apps/srp.c
@@ -435,7 +435,7 @@ int MAIN(int argc, char **argv)
# ifdef OPENSSL_SYS_VMS
len = strlen(s) + sizeof(CONFIG_FILE);
tofree = OPENSSL_malloc(len);
- if(!tofree) {
+ if (!tofree) {
BIO_printf(bio_err, "Out of memory\n");
goto err;
}
@@ -443,7 +443,7 @@ int MAIN(int argc, char **argv)
# else
len = strlen(s) + sizeof(CONFIG_FILE) + 1;
tofree = OPENSSL_malloc(len);
- if(!tofree) {
+ if (!tofree) {
BIO_printf(bio_err, "Out of memory\n");
goto err;
}
diff --git a/openssl/apps/verify.c b/openssl/apps/verify.c
index b3ba53d97..78e729fc8 100644
--- a/openssl/apps/verify.c
+++ b/openssl/apps/verify.c
@@ -232,7 +232,7 @@ int MAIN(int argc, char **argv)
if (ret == 1) {
BIO_printf(bio_err,
"usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
- BIO_printf(bio_err, " [-attime timestamp]");
+ BIO_printf(bio_err, " [-no_alt_chains] [-attime timestamp]");
#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err, " [-engine e]");
#endif
diff --git a/openssl/crypto/Makefile b/openssl/crypto/Makefile
index 9a39e934a..7869996a9 100644
--- a/openssl/crypto/Makefile
+++ b/openssl/crypto/Makefile
@@ -125,12 +125,17 @@ install:
lint:
@target=lint; $(RECURSIVE_MAKE)
-depend:
+update: local_depend
+ @[ -z "$(THIS)" ] || (set -e; target=update; $(RECURSIVE_MAKE) )
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+
+depend: local_depend
+ @[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+local_depend:
@[ -z "$(THIS)" -o -f buildinf.h ] || touch buildinf.h # fake buildinf.h if it does not exist
@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
@[ -z "$(THIS)" -o -s buildinf.h ] || rm buildinf.h
- @[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
- @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
clean:
rm -f buildinf.h *.s *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
diff --git a/openssl/crypto/aes/Makefile b/openssl/crypto/aes/Makefile
index b94ca72a4..e825c1401 100644
--- a/openssl/crypto/aes/Makefile
+++ b/openssl/crypto/aes/Makefile
@@ -122,6 +122,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl b/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
index c1fce8983..19b0433b3 100755
--- a/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
+++ b/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
@@ -1499,13 +1499,13 @@ ___
# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
# CONTEXT *context,DISPATCHER_CONTEXT *disp)
-if ($win64) {
+if ($win64 && $avx) {
$rec="%rcx";
$frame="%rdx";
$context="%r8";
$disp="%r9";
-$code.=<<___ if ($avx);
+$code.=<<___;
.extern __imp_RtlVirtualUnwind
.type se_handler,\@abi-omnipotent
.align 16
@@ -1643,7 +1643,7 @@ $code.=<<___ if ($shaext);
.rva .LSEH_end_${func}_shaext
.rva .LSEH_info_${func}_shaext
___
-$code.=<<___ if ($avx);
+$code.=<<___;
.section .xdata
.align 8
.LSEH_info_${func}_xop:
diff --git a/openssl/crypto/aes/asm/aesni-x86.pl b/openssl/crypto/aes/asm/aesni-x86.pl
index 3deb86aed..f67df8cf1 100644
--- a/openssl/crypto/aes/asm/aesni-x86.pl
+++ b/openssl/crypto/aes/asm/aesni-x86.pl
@@ -51,7 +51,7 @@
# Westmere 3.77/1.37 1.37 1.52 1.27
# * Bridge 5.07/0.98 0.99 1.09 0.91
# Haswell 4.44/0.80 0.97 1.03 0.72
-# Atom 5.77/3.56 3.67 4.03 3.46
+# Silvermont 5.77/3.56 3.67 4.03 3.46
# Bulldozer 5.80/0.98 1.05 1.24 0.93
$PREFIX="aesni"; # if $PREFIX is set to "AES", the script
@@ -65,6 +65,9 @@ require "x86asm.pl";
&asm_init($ARGV[0],$0);
+&external_label("OPENSSL_ia32cap_P");
+&static_label("key_const");
+
if ($PREFIX eq "aesni") { $movekey=\&movups; }
else { $movekey=\&movups; }
@@ -181,7 +184,10 @@ sub aesni_generate1 # fully unrolled loop
{ &aesni_inline_generate1("enc"); }
else
{ &call ("_aesni_encrypt1"); }
+ &pxor ($rndkey0,$rndkey0); # clear register bank
+ &pxor ($rndkey1,$rndkey1);
&movups (&QWP(0,"eax"),$inout0);
+ &pxor ($inout0,$inout0);
&ret ();
&function_end_B("${PREFIX}_encrypt");
@@ -197,7 +203,10 @@ sub aesni_generate1 # fully unrolled loop
{ &aesni_inline_generate1("dec"); }
else
{ &call ("_aesni_decrypt1"); }
+ &pxor ($rndkey0,$rndkey0); # clear register bank
+ &pxor ($rndkey1,$rndkey1);
&movups (&QWP(0,"eax"),$inout0);
+ &pxor ($inout0,$inout0);
&ret ();
&function_end_B("${PREFIX}_decrypt");
@@ -349,17 +358,15 @@ sub aesni_generate6
&neg ($rounds);
eval"&aes${p} ($inout2,$rndkey1)";
&pxor ($inout5,$rndkey0);
+ &$movekey ($rndkey0,&QWP(0,$key,$rounds));
&add ($rounds,16);
- eval"&aes${p} ($inout3,$rndkey1)";
- eval"&aes${p} ($inout4,$rndkey1)";
- eval"&aes${p} ($inout5,$rndkey1)";
- &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
- &jmp (&label("_aesni_${p}rypt6_enter"));
+ &jmp (&label("_aesni_${p}rypt6_inner"));
&set_label("${p}6_loop",16);
eval"&aes${p} ($inout0,$rndkey1)";
eval"&aes${p} ($inout1,$rndkey1)";
eval"&aes${p} ($inout2,$rndkey1)";
+ &set_label("_aesni_${p}rypt6_inner");
eval"&aes${p} ($inout3,$rndkey1)";
eval"&aes${p} ($inout4,$rndkey1)";
eval"&aes${p} ($inout5,$rndkey1)";
@@ -615,6 +622,14 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0x30,$out),$inout3);
&set_label("ecb_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &pxor ("xmm6","xmm6");
+ &pxor ("xmm7","xmm7");
&function_end("aesni_ecb_encrypt");
######################################################################
@@ -704,6 +719,15 @@ if ($PREFIX eq "aesni") {
&mov ("esp",&DWP(48,"esp"));
&mov ($out,&wparam(5));
&movups (&QWP(0,$out),$cmac);
+
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &pxor ("xmm6","xmm6");
+ &pxor ("xmm7","xmm7");
&function_end("aesni_ccm64_encrypt_blocks");
&function_begin("aesni_ccm64_decrypt_blocks");
@@ -804,6 +828,15 @@ if ($PREFIX eq "aesni") {
&mov ("esp",&DWP(48,"esp"));
&mov ($out,&wparam(5));
&movups (&QWP(0,$out),$cmac);
+
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &pxor ("xmm6","xmm6");
+ &pxor ("xmm7","xmm7");
&function_end("aesni_ccm64_decrypt_blocks");
}
@@ -1053,6 +1086,17 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0x30,$out),$inout3);
&set_label("ctr32_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &movdqa (&QWP(32,"esp"),"xmm0"); # clear stack
+ &pxor ("xmm5","xmm5");
+ &movdqa (&QWP(48,"esp"),"xmm0");
+ &pxor ("xmm6","xmm6");
+ &movdqa (&QWP(64,"esp"),"xmm0");
+ &pxor ("xmm7","xmm7");
&mov ("esp",&DWP(80,"esp"));
&function_end("aesni_ctr32_encrypt_blocks");
@@ -1394,6 +1438,20 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(-16,$out),$inout0); # write output
&set_label("xts_enc_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &movdqa (&QWP(16*0,"esp"),"xmm0"); # clear stack
+ &pxor ("xmm3","xmm3");
+ &movdqa (&QWP(16*1,"esp"),"xmm0");
+ &pxor ("xmm4","xmm4");
+ &movdqa (&QWP(16*2,"esp"),"xmm0");
+ &pxor ("xmm5","xmm5");
+ &movdqa (&QWP(16*3,"esp"),"xmm0");
+ &pxor ("xmm6","xmm6");
+ &movdqa (&QWP(16*4,"esp"),"xmm0");
+ &pxor ("xmm7","xmm7");
+ &movdqa (&QWP(16*5,"esp"),"xmm0");
&mov ("esp",&DWP(16*7+4,"esp")); # restore %esp
&function_end("aesni_xts_encrypt");
@@ -1756,6 +1814,20 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0,$out),$inout0); # write output
&set_label("xts_dec_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &movdqa (&QWP(16*0,"esp"),"xmm0"); # clear stack
+ &pxor ("xmm3","xmm3");
+ &movdqa (&QWP(16*1,"esp"),"xmm0");
+ &pxor ("xmm4","xmm4");
+ &movdqa (&QWP(16*2,"esp"),"xmm0");
+ &pxor ("xmm5","xmm5");
+ &movdqa (&QWP(16*3,"esp"),"xmm0");
+ &pxor ("xmm6","xmm6");
+ &movdqa (&QWP(16*4,"esp"),"xmm0");
+ &pxor ("xmm7","xmm7");
+ &movdqa (&QWP(16*5,"esp"),"xmm0");
&mov ("esp",&DWP(16*7+4,"esp")); # restore %esp
&function_end("aesni_xts_decrypt");
}
@@ -1808,6 +1880,7 @@ if ($PREFIX eq "aesni") {
&add ($len,16);
&jnz (&label("cbc_enc_tail"));
&movaps ($ivec,$inout0);
+ &pxor ($inout0,$inout0);
&jmp (&label("cbc_ret"));
&set_label("cbc_enc_tail");
@@ -1871,7 +1944,7 @@ if ($PREFIX eq "aesni") {
&movaps ($inout0,$inout5);
&movaps ($ivec,$rndkey0);
&add ($len,0x50);
- &jle (&label("cbc_dec_tail_collected"));
+ &jle (&label("cbc_dec_clear_tail_collected"));
&movups (&QWP(0,$out),$inout0);
&lea ($out,&DWP(0x10,$out));
&set_label("cbc_dec_tail");
@@ -1910,10 +1983,14 @@ if ($PREFIX eq "aesni") {
&xorps ($inout4,$rndkey0);
&movups (&QWP(0,$out),$inout0);
&movups (&QWP(0x10,$out),$inout1);
+ &pxor ($inout1,$inout1);
&movups (&QWP(0x20,$out),$inout2);
+ &pxor ($inout2,$inout2);
&movups (&QWP(0x30,$out),$inout3);
+ &pxor ($inout3,$inout3);
&lea ($out,&DWP(0x40,$out));
&movaps ($inout0,$inout4);
+ &pxor ($inout4,$inout4);
&sub ($len,0x50);
&jmp (&label("cbc_dec_tail_collected"));
@@ -1933,6 +2010,7 @@ if ($PREFIX eq "aesni") {
&xorps ($inout1,$in0);
&movups (&QWP(0,$out),$inout0);
&movaps ($inout0,$inout1);
+ &pxor ($inout1,$inout1);
&lea ($out,&DWP(0x10,$out));
&movaps ($ivec,$in1);
&sub ($len,0x20);
@@ -1945,7 +2023,9 @@ if ($PREFIX eq "aesni") {
&xorps ($inout2,$in1);
&movups (&QWP(0,$out),$inout0);
&movaps ($inout0,$inout2);
+ &pxor ($inout2,$inout2);
&movups (&QWP(0x10,$out),$inout1);
+ &pxor ($inout1,$inout1);
&lea ($out,&DWP(0x20,$out));
&movups ($ivec,&QWP(0x20,$inp));
&sub ($len,0x30);
@@ -1961,29 +2041,44 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0,$out),$inout0);
&xorps ($inout2,$rndkey1);
&movups (&QWP(0x10,$out),$inout1);
+ &pxor ($inout1,$inout1);
&xorps ($inout3,$rndkey0);
&movups (&QWP(0x20,$out),$inout2);
+ &pxor ($inout2,$inout2);
&lea ($out,&DWP(0x30,$out));
&movaps ($inout0,$inout3);
+ &pxor ($inout3,$inout3);
&sub ($len,0x40);
+ &jmp (&label("cbc_dec_tail_collected"));
+&set_label("cbc_dec_clear_tail_collected",16);
+ &pxor ($inout1,$inout1);
+ &pxor ($inout2,$inout2);
+ &pxor ($inout3,$inout3);
+ &pxor ($inout4,$inout4);
&set_label("cbc_dec_tail_collected");
&and ($len,15);
&jnz (&label("cbc_dec_tail_partial"));
&movups (&QWP(0,$out),$inout0);
+ &pxor ($rndkey0,$rndkey0);
&jmp (&label("cbc_ret"));
&set_label("cbc_dec_tail_partial",16);
&movaps (&QWP(0,"esp"),$inout0);
+ &pxor ($rndkey0,$rndkey0);
&mov ("ecx",16);
&mov ($inp,"esp");
&sub ("ecx",$len);
&data_word(0xA4F3F689); # rep movsb
+ &movdqa (&QWP(0,"esp"),$inout0);
&set_label("cbc_ret");
&mov ("esp",&DWP(16,"esp")); # pull original %esp
&mov ($key_,&wparam(4));
+ &pxor ($inout0,$inout0);
+ &pxor ($rndkey1,$rndkey1);
&movups (&QWP(0,$key_),$ivec); # output IV
+ &pxor ($ivec,$ivec);
&set_label("cbc_abort");
&function_end("${PREFIX}_cbc_encrypt");
@@ -2000,14 +2095,24 @@ if ($PREFIX eq "aesni") {
# $round rounds
&function_begin_B("_aesni_set_encrypt_key");
+ &push ("ebp");
+ &push ("ebx");
&test ("eax","eax");
&jz (&label("bad_pointer"));
&test ($key,$key);
&jz (&label("bad_pointer"));
+ &call (&label("pic"));
+&set_label("pic");
+ &blindpop("ebx");
+ &lea ("ebx",&DWP(&label("key_const")."-".&label("pic"),"ebx"));
+
+ &picmeup("ebp","OPENSSL_ia32cap_P","ebx",&label("key_const"));
&movups ("xmm0",&QWP(0,"eax")); # pull first 128 bits of *userKey
&xorps ("xmm4","xmm4"); # low dword of xmm4 is assumed 0
+ &mov ("ebp",&DWP(4,"ebp"));
&lea ($key,&DWP(16,$key));
+ &and ("ebp",1<<28|1<<11); # AVX and XOP bits
&cmp ($rounds,256);
&je (&label("14rounds"));
&cmp ($rounds,192);
@@ -2016,6 +2121,9 @@ if ($PREFIX eq "aesni") {
&jne (&label("bad_keybits"));
&set_label("10rounds",16);
+ &cmp ("ebp",1<<28);
+ &je (&label("10rounds_alt"));
+
&mov ($rounds,9);
&$movekey (&QWP(-16,$key),"xmm0"); # round 0
&aeskeygenassist("xmm1","xmm0",0x01); # round 1
@@ -2040,8 +2148,8 @@ if ($PREFIX eq "aesni") {
&call (&label("key_128"));
&$movekey (&QWP(0,$key),"xmm0");
&mov (&DWP(80,$key),$rounds);
- &xor ("eax","eax");
- &ret();
+
+ &jmp (&label("good_key"));
&set_label("key_128",16);
&$movekey (&QWP(0,$key),"xmm0");
@@ -2055,8 +2163,76 @@ if ($PREFIX eq "aesni") {
&xorps ("xmm0","xmm1");
&ret();
+&set_label("10rounds_alt",16);
+ &movdqa ("xmm5",&QWP(0x00,"ebx"));
+ &mov ($rounds,8);
+ &movdqa ("xmm4",&QWP(0x20,"ebx"));
+ &movdqa ("xmm2","xmm0");
+ &movdqu (&QWP(-16,$key),"xmm0");
+
+&set_label("loop_key128");
+ &pshufb ("xmm0","xmm5");
+ &aesenclast ("xmm0","xmm4");
+ &pslld ("xmm4",1);
+ &lea ($key,&DWP(16,$key));
+
+ &movdqa ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm2","xmm3");
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(-16,$key),"xmm0");
+ &movdqa ("xmm2","xmm0");
+
+ &dec ($rounds);
+ &jnz (&label("loop_key128"));
+
+ &movdqa ("xmm4",&QWP(0x30,"ebx"));
+
+ &pshufb ("xmm0","xmm5");
+ &aesenclast ("xmm0","xmm4");
+ &pslld ("xmm4",1);
+
+ &movdqa ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm2","xmm3");
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(0,$key),"xmm0");
+
+ &movdqa ("xmm2","xmm0");
+ &pshufb ("xmm0","xmm5");
+ &aesenclast ("xmm0","xmm4");
+
+ &movdqa ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm2","xmm3");
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(16,$key),"xmm0");
+
+ &mov ($rounds,9);
+ &mov (&DWP(96,$key),$rounds);
+
+ &jmp (&label("good_key"));
+
&set_label("12rounds",16);
&movq ("xmm2",&QWP(16,"eax")); # remaining 1/3 of *userKey
+ &cmp ("ebp",1<<28);
+ &je (&label("12rounds_alt"));
+
&mov ($rounds,11);
&$movekey (&QWP(-16,$key),"xmm0"); # round 0
&aeskeygenassist("xmm1","xmm2",0x01); # round 1,2
@@ -2077,8 +2253,8 @@ if ($PREFIX eq "aesni") {
&call (&label("key_192b"));
&$movekey (&QWP(0,$key),"xmm0");
&mov (&DWP(48,$key),$rounds);
- &xor ("eax","eax");
- &ret();
+
+ &jmp (&label("good_key"));
&set_label("key_192a",16);
&$movekey (&QWP(0,$key),"xmm0");
@@ -2108,10 +2284,52 @@ if ($PREFIX eq "aesni") {
&lea ($key,&DWP(32,$key));
&jmp (&label("key_192b_warm"));
+&set_label("12rounds_alt",16);
+ &movdqa ("xmm5",&QWP(0x10,"ebx"));
+ &movdqa ("xmm4",&QWP(0x20,"ebx"));
+ &mov ($rounds,8);
+ &movdqu (&QWP(-16,$key),"xmm0");
+
+&set_label("loop_key192");
+ &movq (&QWP(0,$key),"xmm2");
+ &movdqa ("xmm1","xmm2");
+ &pshufb ("xmm2","xmm5");
+ &aesenclast ("xmm2","xmm4");
+ &pslld ("xmm4",1);
+ &lea ($key,&DWP(24,$key));
+
+ &movdqa ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm0","xmm3");
+
+ &pshufd ("xmm3","xmm0",0xff);
+ &pxor ("xmm3","xmm1");
+ &pslldq ("xmm1",4);
+ &pxor ("xmm3","xmm1");
+
+ &pxor ("xmm0","xmm2");
+ &pxor ("xmm2","xmm3");
+ &movdqu (&QWP(-16,$key),"xmm0");
+
+ &dec ($rounds);
+ &jnz (&label("loop_key192"));
+
+ &mov ($rounds,11);
+ &mov (&DWP(32,$key),$rounds);
+
+ &jmp (&label("good_key"));
+
&set_label("14rounds",16);
&movups ("xmm2",&QWP(16,"eax")); # remaining half of *userKey
- &mov ($rounds,13);
&lea ($key,&DWP(16,$key));
+ &cmp ("ebp",1<<28);
+ &je (&label("14rounds_alt"));
+
+ &mov ($rounds,13);
&$movekey (&QWP(-32,$key),"xmm0"); # round 0
&$movekey (&QWP(-16,$key),"xmm2"); # round 1
&aeskeygenassist("xmm1","xmm2",0x01); # round 2
@@ -2143,7 +2361,8 @@ if ($PREFIX eq "aesni") {
&$movekey (&QWP(0,$key),"xmm0");
&mov (&DWP(16,$key),$rounds);
&xor ("eax","eax");
- &ret();
+
+ &jmp (&label("good_key"));
&set_label("key_256a",16);
&$movekey (&QWP(0,$key),"xmm2");
@@ -2169,11 +2388,77 @@ if ($PREFIX eq "aesni") {
&xorps ("xmm2","xmm1");
&ret();
+&set_label("14rounds_alt",16);
+ &movdqa ("xmm5",&QWP(0x00,"ebx"));
+ &movdqa ("xmm4",&QWP(0x20,"ebx"));
+ &mov ($rounds,7);
+ &movdqu (&QWP(-32,$key),"xmm0");
+ &movdqa ("xmm1","xmm2");
+ &movdqu (&QWP(-16,$key),"xmm2");
+
+&set_label("loop_key256");
+ &pshufb ("xmm2","xmm5");
+ &aesenclast ("xmm2","xmm4");
+
+ &movdqa ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm0","xmm3");
+ &pslld ("xmm4",1);
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(0,$key),"xmm0");
+
+ &dec ($rounds);
+ &jz (&label("done_key256"));
+
+ &pshufd ("xmm2","xmm0",0xff);
+ &pxor ("xmm3","xmm3");
+ &aesenclast ("xmm2","xmm3");
+
+ &movdqa ("xmm3","xmm1")
+ &pslldq ("xmm1",4);
+ &pxor ("xmm3","xmm1");
+ &pslldq ("xmm1",4);
+ &pxor ("xmm3","xmm1");
+ &pslldq ("xmm1",4);
+ &pxor ("xmm1","xmm3");
+
+ &pxor ("xmm2","xmm1");
+ &movdqu (&QWP(16,$key),"xmm2");
+ &lea ($key,&DWP(32,$key));
+ &movdqa ("xmm1","xmm2");
+ &jmp (&label("loop_key256"));
+
+&set_label("done_key256");
+ &mov ($rounds,13);
+ &mov (&DWP(16,$key),$rounds);
+
+&set_label("good_key");
+ &pxor ("xmm0","xmm0");
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &xor ("eax","eax");
+ &pop ("ebx");
+ &pop ("ebp");
+ &ret ();
+
&set_label("bad_pointer",4);
&mov ("eax",-1);
+ &pop ("ebx");
+ &pop ("ebp");
&ret ();
&set_label("bad_keybits",4);
+ &pxor ("xmm0","xmm0");
&mov ("eax",-2);
+ &pop ("ebx");
+ &pop ("ebp");
&ret ();
&function_end_B("_aesni_set_encrypt_key");
@@ -2223,10 +2508,18 @@ if ($PREFIX eq "aesni") {
&aesimc ("xmm0","xmm0");
&$movekey (&QWP(0,$key),"xmm0");
+ &pxor ("xmm0","xmm0");
+ &pxor ("xmm1","xmm1");
&xor ("eax","eax"); # return success
&set_label("dec_key_ret");
&ret ();
&function_end_B("${PREFIX}_set_decrypt_key");
+
+&set_label("key_const",64);
+&data_word(0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d);
+&data_word(0x04070605,0x04070605,0x04070605,0x04070605);
+&data_word(1,1,1,1);
+&data_word(0x1b,0x1b,0x1b,0x1b);
&asciz("AES for Intel AES-NI, CRYPTOGAMS by <appro\@openssl.org>");
&asm_finish();
diff --git a/openssl/crypto/aes/asm/aesni-x86_64.pl b/openssl/crypto/aes/asm/aesni-x86_64.pl
index 5f6174635..25ca574f6 100644
--- a/openssl/crypto/aes/asm/aesni-x86_64.pl
+++ b/openssl/crypto/aes/asm/aesni-x86_64.pl
@@ -165,11 +165,11 @@
# Westmere 3.77/1.25 1.25 1.25 1.26
# * Bridge 5.07/0.74 0.75 0.90 0.85
# Haswell 4.44/0.63 0.63 0.73 0.63
-# Atom 5.75/3.54 3.56 4.12 3.87(*)
+# Silvermont 5.75/3.54 3.56 4.12 3.87(*)
# Bulldozer 5.77/0.70 0.72 0.90 0.70
#
-# (*) Atom ECB result is suboptimal because of penalties incurred
-# by operations on %xmm8-15. As ECB is not considered
+# (*) Atom Silvermont ECB result is suboptimal because of penalties
+# incurred by operations on %xmm8-15. As ECB is not considered
# critical, nothing was done to mitigate the problem.
$PREFIX="aesni"; # if $PREFIX is set to "AES", the script
@@ -263,7 +263,10 @@ ${PREFIX}_encrypt:
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
movups $inout0,($out) # output
+ pxor $inout0,$inout0
ret
.size ${PREFIX}_encrypt,.-${PREFIX}_encrypt
@@ -276,7 +279,10 @@ ${PREFIX}_decrypt:
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
movups $inout0,($out) # output
+ pxor $inout0,$inout0
ret
.size ${PREFIX}_decrypt, .-${PREFIX}_decrypt
___
@@ -445,21 +451,18 @@ _aesni_${dir}rypt6:
pxor $rndkey0,$inout4
aes${dir} $rndkey1,$inout2
pxor $rndkey0,$inout5
+ $movkey ($key,%rax),$rndkey0
add \$16,%rax
- aes${dir} $rndkey1,$inout3
- aes${dir} $rndkey1,$inout4
- aes${dir} $rndkey1,$inout5
- $movkey -16($key,%rax),$rndkey0
jmp .L${dir}_loop6_enter
.align 16
.L${dir}_loop6:
aes${dir} $rndkey1,$inout0
aes${dir} $rndkey1,$inout1
aes${dir} $rndkey1,$inout2
+.L${dir}_loop6_enter:
aes${dir} $rndkey1,$inout3
aes${dir} $rndkey1,$inout4
aes${dir} $rndkey1,$inout5
-.L${dir}_loop6_enter:
$movkey ($key,%rax),$rndkey1
add \$32,%rax
aes${dir} $rndkey0,$inout0
@@ -506,23 +509,18 @@ _aesni_${dir}rypt8:
lea 32($key,$rounds),$key
neg %rax # $rounds
aes${dir} $rndkey1,$inout0
- add \$16,%rax
pxor $rndkey0,$inout5
- aes${dir} $rndkey1,$inout1
pxor $rndkey0,$inout6
+ aes${dir} $rndkey1,$inout1
pxor $rndkey0,$inout7
- aes${dir} $rndkey1,$inout2
- aes${dir} $rndkey1,$inout3
- aes${dir} $rndkey1,$inout4
- aes${dir} $rndkey1,$inout5
- aes${dir} $rndkey1,$inout6
- aes${dir} $rndkey1,$inout7
- $movkey -16($key,%rax),$rndkey0
- jmp .L${dir}_loop8_enter
+ $movkey ($key,%rax),$rndkey0
+ add \$16,%rax
+ jmp .L${dir}_loop8_inner
.align 16
.L${dir}_loop8:
aes${dir} $rndkey1,$inout0
aes${dir} $rndkey1,$inout1
+.L${dir}_loop8_inner:
aes${dir} $rndkey1,$inout2
aes${dir} $rndkey1,$inout3
aes${dir} $rndkey1,$inout4
@@ -587,15 +585,15 @@ aesni_ecb_encrypt:
___
$code.=<<___ if ($win64);
lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
+ movaps %xmm6,(%rsp) # offload $inout4..7
movaps %xmm7,0x10(%rsp)
movaps %xmm8,0x20(%rsp)
movaps %xmm9,0x30(%rsp)
.Lecb_enc_body:
___
$code.=<<___;
- and \$-16,$len
- jz .Lecb_ret
+ and \$-16,$len # if ($len<16)
+ jz .Lecb_ret # return
mov 240($key),$rounds # key->rounds
$movkey ($key),$rndkey0
@@ -604,10 +602,10 @@ $code.=<<___;
test %r8d,%r8d # 5th argument
jz .Lecb_decrypt
#--------------------------- ECB ENCRYPT ------------------------------#
- cmp \$0x80,$len
- jb .Lecb_enc_tail
+ cmp \$0x80,$len # if ($len<8*16)
+ jb .Lecb_enc_tail # short input
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
movdqu 0x10($inp),$inout1
movdqu 0x20($inp),$inout2
movdqu 0x30($inp),$inout3
@@ -615,14 +613,14 @@ $code.=<<___;
movdqu 0x50($inp),$inout5
movdqu 0x60($inp),$inout6
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
- sub \$0x80,$len
+ lea 0x80($inp),$inp # $inp+=8*16
+ sub \$0x80,$len # $len-=8*16 (can be zero)
jmp .Lecb_enc_loop8_enter
.align 16
.Lecb_enc_loop8:
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
mov $key_,$key # restore $key
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
mov $rnds_,$rounds # restore $rounds
movups $inout1,0x10($out)
movdqu 0x10($inp),$inout1
@@ -637,17 +635,17 @@ $code.=<<___;
movups $inout6,0x60($out)
movdqu 0x60($inp),$inout6
movups $inout7,0x70($out)
- lea 0x80($out),$out
+ lea 0x80($out),$out # $out+=8*16
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
+ lea 0x80($inp),$inp # $inp+=8*16
.Lecb_enc_loop8_enter:
call _aesni_encrypt8
sub \$0x80,$len
- jnc .Lecb_enc_loop8
+ jnc .Lecb_enc_loop8 # loop if $len-=8*16 didn't borrow
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
mov $key_,$key # restore $key
movups $inout1,0x10($out)
mov $rnds_,$rounds # restore $rounds
@@ -657,11 +655,11 @@ $code.=<<___;
movups $inout5,0x50($out)
movups $inout6,0x60($out)
movups $inout7,0x70($out)
- lea 0x80($out),$out
- add \$0x80,$len
- jz .Lecb_ret
+ lea 0x80($out),$out # $out+=8*16
+ add \$0x80,$len # restore real remaining $len
+ jz .Lecb_ret # done if ($len==0)
-.Lecb_enc_tail:
+.Lecb_enc_tail: # $len is less than 8*16
movups ($inp),$inout0
cmp \$0x20,$len
jb .Lecb_enc_one
@@ -678,8 +676,9 @@ $code.=<<___;
movups 0x50($inp),$inout5
je .Lecb_enc_six
movdqu 0x60($inp),$inout6
+ xorps $inout7,$inout7
call _aesni_encrypt8
- movups $inout0,($out)
+ movups $inout0,($out) # store 7 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -692,25 +691,25 @@ $code.=<<___;
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
- movups $inout0,($out)
+ movups $inout0,($out) # store one output block
jmp .Lecb_ret
.align 16
.Lecb_enc_two:
call _aesni_encrypt2
- movups $inout0,($out)
+ movups $inout0,($out) # store 2 output blocks
movups $inout1,0x10($out)
jmp .Lecb_ret
.align 16
.Lecb_enc_three:
call _aesni_encrypt3
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
jmp .Lecb_ret
.align 16
.Lecb_enc_four:
call _aesni_encrypt4
- movups $inout0,($out)
+ movups $inout0,($out) # store 4 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -719,7 +718,7 @@ $code.=<<___;
.Lecb_enc_five:
xorps $inout5,$inout5
call _aesni_encrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 5 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -728,7 +727,7 @@ $code.=<<___;
.align 16
.Lecb_enc_six:
call _aesni_encrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 6 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -738,10 +737,10 @@ $code.=<<___;
#--------------------------- ECB DECRYPT ------------------------------#
.align 16
.Lecb_decrypt:
- cmp \$0x80,$len
- jb .Lecb_dec_tail
+ cmp \$0x80,$len # if ($len<8*16)
+ jb .Lecb_dec_tail # short input
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
movdqu 0x10($inp),$inout1
movdqu 0x20($inp),$inout2
movdqu 0x30($inp),$inout3
@@ -749,14 +748,14 @@ $code.=<<___;
movdqu 0x50($inp),$inout5
movdqu 0x60($inp),$inout6
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
- sub \$0x80,$len
+ lea 0x80($inp),$inp # $inp+=8*16
+ sub \$0x80,$len # $len-=8*16 (can be zero)
jmp .Lecb_dec_loop8_enter
.align 16
.Lecb_dec_loop8:
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
mov $key_,$key # restore $key
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
mov $rnds_,$rounds # restore $rounds
movups $inout1,0x10($out)
movdqu 0x10($inp),$inout1
@@ -771,30 +770,38 @@ $code.=<<___;
movups $inout6,0x60($out)
movdqu 0x60($inp),$inout6
movups $inout7,0x70($out)
- lea 0x80($out),$out
+ lea 0x80($out),$out # $out+=8*16
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
+ lea 0x80($inp),$inp # $inp+=8*16
.Lecb_dec_loop8_enter:
call _aesni_decrypt8
$movkey ($key_),$rndkey0
sub \$0x80,$len
- jnc .Lecb_dec_loop8
+ jnc .Lecb_dec_loop8 # loop if $len-=8*16 didn't borrow
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
+ pxor $inout0,$inout0 # clear register bank
mov $key_,$key # restore $key
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
mov $rnds_,$rounds # restore $rounds
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
movups $inout5,0x50($out)
+ pxor $inout5,$inout5
movups $inout6,0x60($out)
+ pxor $inout6,$inout6
movups $inout7,0x70($out)
- lea 0x80($out),$out
- add \$0x80,$len
- jz .Lecb_ret
+ pxor $inout7,$inout7
+ lea 0x80($out),$out # $out+=8*16
+ add \$0x80,$len # restore real remaining $len
+ jz .Lecb_ret # done if ($len==0)
.Lecb_dec_tail:
movups ($inp),$inout0
@@ -814,70 +821,107 @@ $code.=<<___;
je .Lecb_dec_six
movups 0x60($inp),$inout6
$movkey ($key),$rndkey0
+ xorps $inout7,$inout7
call _aesni_decrypt8
- movups $inout0,($out)
+ movups $inout0,($out) # store 7 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
movups $inout5,0x50($out)
+ pxor $inout5,$inout5
movups $inout6,0x60($out)
+ pxor $inout6,$inout6
+ pxor $inout7,$inout7
jmp .Lecb_ret
.align 16
.Lecb_dec_one:
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
- movups $inout0,($out)
+ movups $inout0,($out) # store one output block
+ pxor $inout0,$inout0 # clear register bank
jmp .Lecb_ret
.align 16
.Lecb_dec_two:
call _aesni_decrypt2
- movups $inout0,($out)
+ movups $inout0,($out) # store 2 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
jmp .Lecb_ret
.align 16
.Lecb_dec_three:
call _aesni_decrypt3
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
jmp .Lecb_ret
.align 16
.Lecb_dec_four:
call _aesni_decrypt4
- movups $inout0,($out)
+ movups $inout0,($out) # store 4 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
jmp .Lecb_ret
.align 16
.Lecb_dec_five:
xorps $inout5,$inout5
call _aesni_decrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 5 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
+ pxor $inout5,$inout5
jmp .Lecb_ret
.align 16
.Lecb_dec_six:
call _aesni_decrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 6 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
movups $inout5,0x50($out)
+ pxor $inout5,$inout5
.Lecb_ret:
+ xorps $rndkey0,$rndkey0 # %xmm0
+ pxor $rndkey1,$rndkey1
___
$code.=<<___ if ($win64);
movaps (%rsp),%xmm6
+ movaps %xmm0,(%rsp) # clear stack
movaps 0x10(%rsp),%xmm7
+ movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm8
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm9
+ movaps %xmm0,0x30(%rsp)
lea 0x58(%rsp),%rsp
.Lecb_enc_ret:
___
@@ -911,10 +955,10 @@ aesni_ccm64_encrypt_blocks:
___
$code.=<<___ if ($win64);
lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
- movaps %xmm7,0x10(%rsp)
- movaps %xmm8,0x20(%rsp)
- movaps %xmm9,0x30(%rsp)
+ movaps %xmm6,(%rsp) # $iv
+ movaps %xmm7,0x10(%rsp) # $bswap_mask
+ movaps %xmm8,0x20(%rsp) # $in0
+ movaps %xmm9,0x30(%rsp) # $increment
.Lccm64_enc_body:
___
$code.=<<___;
@@ -956,7 +1000,7 @@ $code.=<<___;
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
paddq $increment,$iv
- dec $len
+ dec $len # $len-- ($len is in blocks)
aesenclast $rndkey0,$inout0
aesenclast $rndkey0,$inout1
@@ -965,16 +1009,26 @@ $code.=<<___;
movdqa $iv,$inout0
movups $in0,($out) # save output
pshufb $bswap_mask,$inout0
- lea 16($out),$out
- jnz .Lccm64_enc_outer
+ lea 16($out),$out # $out+=16
+ jnz .Lccm64_enc_outer # loop if ($len!=0)
- movups $inout1,($cmac)
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ pxor $inout0,$inout0
+ movups $inout1,($cmac) # store resulting mac
+ pxor $inout1,$inout1
+ pxor $in0,$in0
+ pxor $iv,$iv
___
$code.=<<___ if ($win64);
movaps (%rsp),%xmm6
+ movaps %xmm0,(%rsp) # clear stack
movaps 0x10(%rsp),%xmm7
+ movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm8
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm9
+ movaps %xmm0,0x30(%rsp)
lea 0x58(%rsp),%rsp
.Lccm64_enc_ret:
___
@@ -991,10 +1045,10 @@ aesni_ccm64_decrypt_blocks:
___
$code.=<<___ if ($win64);
lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
- movaps %xmm7,0x10(%rsp)
- movaps %xmm8,0x20(%rsp)
- movaps %xmm9,0x30(%rsp)
+ movaps %xmm6,(%rsp) # $iv
+ movaps %xmm7,0x10(%rsp) # $bswap_mask
+ movaps %xmm8,0x20(%rsp) # $in8
+ movaps %xmm9,0x30(%rsp) # $increment
.Lccm64_dec_body:
___
$code.=<<___;
@@ -1015,7 +1069,7 @@ $code.=<<___;
mov \$16,$rounds
movups ($inp),$in0 # load inp
paddq $increment,$iv
- lea 16($inp),$inp
+ lea 16($inp),$inp # $inp+=16
sub %r10,%rax # twisted $rounds
lea 32($key_,$rnds_),$key # end of key schedule
mov %rax,%r10
@@ -1025,11 +1079,11 @@ $code.=<<___;
xorps $inout0,$in0 # inp ^= E(iv)
movdqa $iv,$inout0
movups $in0,($out) # save output
- lea 16($out),$out
+ lea 16($out),$out # $out+=16
pshufb $bswap_mask,$inout0
- sub \$1,$len
- jz .Lccm64_dec_break
+ sub \$1,$len # $len-- ($len is in blocks)
+ jz .Lccm64_dec_break # if ($len==0) break
$movkey ($key_),$rndkey0
mov %r10,%rax
@@ -1049,13 +1103,13 @@ $code.=<<___;
aesenc $rndkey0,$inout1
$movkey -16($key,%rax),$rndkey0
jnz .Lccm64_dec2_loop
- movups ($inp),$in0 # load inp
+ movups ($inp),$in0 # load input
paddq $increment,$iv
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
aesenclast $rndkey0,$inout0
aesenclast $rndkey0,$inout1
- lea 16($inp),$inp
+ lea 16($inp),$inp # $inp+=16
jmp .Lccm64_dec_outer
.align 16
@@ -1065,13 +1119,23 @@ $code.=<<___;
___
&aesni_generate1("enc",$key_,$rounds,$inout1,$in0);
$code.=<<___;
- movups $inout1,($cmac)
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ pxor $inout0,$inout0
+ movups $inout1,($cmac) # store resulting mac
+ pxor $inout1,$inout1
+ pxor $in0,$in0
+ pxor $iv,$iv
___
$code.=<<___ if ($win64);
movaps (%rsp),%xmm6
+ movaps %xmm0,(%rsp) # clear stack
movaps 0x10(%rsp),%xmm7
+ movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm8
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm9
+ movaps %xmm0,0x30(%rsp)
lea 0x58(%rsp),%rsp
.Lccm64_dec_ret:
___
@@ -1102,13 +1166,34 @@ $code.=<<___;
.type aesni_ctr32_encrypt_blocks,\@function,5
.align 16
aesni_ctr32_encrypt_blocks:
+ cmp \$1,$len
+ jne .Lctr32_bulk
+
+ # handle single block without allocating stack frame,
+ # useful when handling edges
+ movups ($ivp),$inout0
+ movups ($inp),$inout1
+ mov 240($key),%edx # key->rounds
+___
+ &aesni_generate1("enc",$key,"%edx");
+$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ xorps $inout1,$inout0
+ pxor $inout1,$inout1
+ movups $inout0,($out)
+ xorps $inout0,$inout0
+ jmp .Lctr32_epilogue
+
+.align 16
+.Lctr32_bulk:
lea (%rsp),%rax
push %rbp
sub \$$frame_size,%rsp
and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- movaps %xmm6,-0xa8(%rax)
+ movaps %xmm6,-0xa8(%rax) # offload everything
movaps %xmm7,-0x98(%rax)
movaps %xmm8,-0x88(%rax)
movaps %xmm9,-0x78(%rax)
@@ -1123,8 +1208,8 @@ ___
$code.=<<___;
lea -8(%rax),%rbp
- cmp \$1,$len
- je .Lctr32_one_shortcut
+ # 8 16-byte words on top of stack are counter values
+ # xor-ed with zero-round key
movdqu ($ivp),$inout0
movdqu ($key),$rndkey0
@@ -1139,7 +1224,7 @@ $code.=<<___;
movdqa $inout0,0x40(%rsp)
movdqa $inout0,0x50(%rsp)
movdqa $inout0,0x60(%rsp)
- mov %rdx,%r10 # borrow %rdx
+ mov %rdx,%r10 # about to borrow %rdx
movdqa $inout0,0x70(%rsp)
lea 1($ctr),%rax
@@ -1183,15 +1268,15 @@ $code.=<<___;
movdqa 0x40(%rsp),$inout4
movdqa 0x50(%rsp),$inout5
- cmp \$8,$len
- jb .Lctr32_tail
+ cmp \$8,$len # $len is in blocks
+ jb .Lctr32_tail # short input if ($len<8)
- sub \$6,$len
+ sub \$6,$len # $len is biased by -6
cmp \$`1<<22`,%r10d # check for MOVBE without XSAVE
- je .Lctr32_6x
+ je .Lctr32_6x # [which denotes Atom Silvermont]
lea 0x80($key),$key # size optimization
- sub \$2,$len
+ sub \$2,$len # $len is biased by -8
jmp .Lctr32_loop8
.align 16
@@ -1205,13 +1290,13 @@ $code.=<<___;
.align 16
.Lctr32_loop6:
- add \$6,$ctr
+ add \$6,$ctr # next counter value
$movkey -48($key,$rnds_),$rndkey0
aesenc $rndkey1,$inout0
mov $ctr,%eax
xor $key0,%eax
aesenc $rndkey1,$inout1
- movbe %eax,`0x00+12`(%rsp)
+ movbe %eax,`0x00+12`(%rsp) # store next counter value
lea 1($ctr),%eax
aesenc $rndkey1,$inout2
xor $key0,%eax
@@ -1244,16 +1329,16 @@ $code.=<<___;
call .Lenc_loop6
- movdqu ($inp),$inout6
+ movdqu ($inp),$inout6 # load 6 input blocks
movdqu 0x10($inp),$inout7
movdqu 0x20($inp),$in0
movdqu 0x30($inp),$in1
movdqu 0x40($inp),$in2
movdqu 0x50($inp),$in3
- lea 0x60($inp),$inp
+ lea 0x60($inp),$inp # $inp+=6*16
$movkey -64($key,$rnds_),$rndkey1
- pxor $inout0,$inout6
- movaps 0x00(%rsp),$inout0
+ pxor $inout0,$inout6 # inp^=E(ctr)
+ movaps 0x00(%rsp),$inout0 # load next counter [xor-ed with 0 round]
pxor $inout1,$inout7
movaps 0x10(%rsp),$inout1
pxor $inout2,$in0
@@ -1264,19 +1349,19 @@ $code.=<<___;
movaps 0x40(%rsp),$inout4
pxor $inout5,$in3
movaps 0x50(%rsp),$inout5
- movdqu $inout6,($out)
+ movdqu $inout6,($out) # store 6 output blocks
movdqu $inout7,0x10($out)
movdqu $in0,0x20($out)
movdqu $in1,0x30($out)
movdqu $in2,0x40($out)
movdqu $in3,0x50($out)
- lea 0x60($out),$out
-
+ lea 0x60($out),$out # $out+=6*16
+
sub \$6,$len
- jnc .Lctr32_loop6
+ jnc .Lctr32_loop6 # loop if $len-=6 didn't borrow
- add \$6,$len
- jz .Lctr32_done
+ add \$6,$len # restore real remaining $len
+ jz .Lctr32_done # done if ($len==0)
lea -48($rnds_),$rounds
lea -80($key,$rnds_),$key # restore $key
@@ -1286,7 +1371,7 @@ $code.=<<___;
.align 32
.Lctr32_loop8:
- add \$8,$ctr
+ add \$8,$ctr # next counter value
movdqa 0x60(%rsp),$inout6
aesenc $rndkey1,$inout0
mov $ctr,%r9d
@@ -1298,7 +1383,7 @@ $code.=<<___;
xor $key0,%r9d
nop
aesenc $rndkey1,$inout3
- mov %r9d,0x00+12(%rsp)
+ mov %r9d,0x00+12(%rsp) # store next counter value
lea 1($ctr),%r9
aesenc $rndkey1,$inout4
aesenc $rndkey1,$inout5
@@ -1331,7 +1416,7 @@ $code.=<<___;
aesenc $rndkey0,$inout1
aesenc $rndkey0,$inout2
xor $key0,%r9d
- movdqu 0x00($inp),$in0
+ movdqu 0x00($inp),$in0 # start loading input
aesenc $rndkey0,$inout3
mov %r9d,0x70+12(%rsp)
cmp \$11,$rounds
@@ -1388,7 +1473,7 @@ $code.=<<___;
.align 16
.Lctr32_enc_done:
movdqu 0x10($inp),$in1
- pxor $rndkey0,$in0
+ pxor $rndkey0,$in0 # input^=round[last]
movdqu 0x20($inp),$in2
pxor $rndkey0,$in1
movdqu 0x30($inp),$in3
@@ -1406,11 +1491,11 @@ $code.=<<___;
aesenc $rndkey1,$inout5
aesenc $rndkey1,$inout6
aesenc $rndkey1,$inout7
- movdqu 0x60($inp),$rndkey1
- lea 0x80($inp),$inp
+ movdqu 0x60($inp),$rndkey1 # borrow $rndkey1 for inp[6]
+ lea 0x80($inp),$inp # $inp+=8*16
- aesenclast $in0,$inout0
- pxor $rndkey0,$rndkey1
+ aesenclast $in0,$inout0 # $inN is inp[N]^round[last]
+ pxor $rndkey0,$rndkey1 # borrowed $rndkey
movdqu 0x70-0x80($inp),$in0
aesenclast $in1,$inout1
pxor $rndkey0,$in0
@@ -1425,10 +1510,10 @@ $code.=<<___;
movdqa 0x40(%rsp),$in5
aesenclast $rndkey1,$inout6
movdqa 0x50(%rsp),$rndkey0
- $movkey 0x10-0x80($key),$rndkey1
+ $movkey 0x10-0x80($key),$rndkey1#real 1st-round key
aesenclast $in0,$inout7
- movups $inout0,($out) # store output
+ movups $inout0,($out) # store 8 output blocks
movdqa $in1,$inout0
movups $inout1,0x10($out)
movdqa $in2,$inout1
@@ -1442,21 +1527,24 @@ $code.=<<___;
movdqa $rndkey0,$inout5
movups $inout6,0x60($out)
movups $inout7,0x70($out)
- lea 0x80($out),$out
-
+ lea 0x80($out),$out # $out+=8*16
+
sub \$8,$len
- jnc .Lctr32_loop8
+ jnc .Lctr32_loop8 # loop if $len-=8 didn't borrow
- add \$8,$len
- jz .Lctr32_done
+ add \$8,$len # restore real remainig $len
+ jz .Lctr32_done # done if ($len==0)
lea -0x80($key),$key
.Lctr32_tail:
+ # note that at this point $inout0..5 are populated with
+ # counter values xor-ed with 0-round key
lea 16($key),$key
cmp \$4,$len
jb .Lctr32_loop3
je .Lctr32_loop4
+ # if ($len>4) compute 7 E(counter)
shl \$4,$rounds
movdqa 0x60(%rsp),$inout6
pxor $inout7,$inout7
@@ -1464,14 +1552,14 @@ $code.=<<___;
$movkey 16($key),$rndkey0
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
- lea 32-16($key,$rounds),$key
+ lea 32-16($key,$rounds),$key# prepare for .Lenc_loop8_enter
neg %rax
aesenc $rndkey1,$inout2
- add \$16,%rax
+ add \$16,%rax # prepare for .Lenc_loop8_enter
movups ($inp),$in0
aesenc $rndkey1,$inout3
aesenc $rndkey1,$inout4
- movups 0x10($inp),$in1
+ movups 0x10($inp),$in1 # pre-load input
movups 0x20($inp),$in2
aesenc $rndkey1,$inout5
aesenc $rndkey1,$inout6
@@ -1482,7 +1570,7 @@ $code.=<<___;
pxor $in0,$inout0
movdqu 0x40($inp),$in0
pxor $in1,$inout1
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store output
pxor $in2,$inout2
movdqu $inout1,0x10($out)
pxor $in3,$inout3
@@ -1491,17 +1579,17 @@ $code.=<<___;
movdqu $inout3,0x30($out)
movdqu $inout4,0x40($out)
cmp \$6,$len
- jb .Lctr32_done
+ jb .Lctr32_done # $len was 5, stop store
movups 0x50($inp),$in1
xorps $in1,$inout5
movups $inout5,0x50($out)
- je .Lctr32_done
+ je .Lctr32_done # $len was 6, stop store
movups 0x60($inp),$in2
xorps $in2,$inout6
movups $inout6,0x60($out)
- jmp .Lctr32_done
+ jmp .Lctr32_done # $len was 7, stop store
.align 32
.Lctr32_loop4:
@@ -1515,7 +1603,7 @@ $code.=<<___;
jnz .Lctr32_loop4
aesenclast $rndkey1,$inout0
aesenclast $rndkey1,$inout1
- movups ($inp),$in0
+ movups ($inp),$in0 # load input
movups 0x10($inp),$in1
aesenclast $rndkey1,$inout2
aesenclast $rndkey1,$inout3
@@ -1523,14 +1611,14 @@ $code.=<<___;
movups 0x30($inp),$in3
xorps $in0,$inout0
- movups $inout0,($out)
+ movups $inout0,($out) # store output
xorps $in1,$inout1
movups $inout1,0x10($out)
pxor $in2,$inout2
movdqu $inout2,0x20($out)
pxor $in3,$inout3
movdqu $inout3,0x30($out)
- jmp .Lctr32_done
+ jmp .Lctr32_done # $len was 4, stop store
.align 32
.Lctr32_loop3:
@@ -1545,48 +1633,79 @@ $code.=<<___;
aesenclast $rndkey1,$inout1
aesenclast $rndkey1,$inout2
- movups ($inp),$in0
+ movups ($inp),$in0 # load input
xorps $in0,$inout0
- movups $inout0,($out)
+ movups $inout0,($out) # store output
cmp \$2,$len
- jb .Lctr32_done
+ jb .Lctr32_done # $len was 1, stop store
movups 0x10($inp),$in1
xorps $in1,$inout1
movups $inout1,0x10($out)
- je .Lctr32_done
+ je .Lctr32_done # $len was 2, stop store
movups 0x20($inp),$in2
xorps $in2,$inout2
- movups $inout2,0x20($out)
- jmp .Lctr32_done
-
-.align 16
-.Lctr32_one_shortcut:
- movups ($ivp),$inout0
- movups ($inp),$in0
- mov 240($key),$rounds # key->rounds
-___
- &aesni_generate1("enc",$key,$rounds);
-$code.=<<___;
- xorps $in0,$inout0
- movups $inout0,($out)
- jmp .Lctr32_done
+ movups $inout2,0x20($out) # $len was 3, stop store
-.align 16
.Lctr32_done:
+ xorps %xmm0,%xmm0 # clear regiser bank
+ xor $key0,$key0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+___
+$code.=<<___ if (!$win64);
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0x00(%rsp) # clear stack
+ pxor %xmm8,%xmm8
+ movaps %xmm0,0x10(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,0x20(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,0x30(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,0x40(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,0x50(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,0x60(%rsp)
+ pxor %xmm14,%xmm14
+ movaps %xmm0,0x70(%rsp)
+ pxor %xmm15,%xmm15
___
$code.=<<___ if ($win64);
movaps -0xa0(%rbp),%xmm6
+ movaps %xmm0,-0xa0(%rbp) # clear stack
movaps -0x90(%rbp),%xmm7
+ movaps %xmm0,-0x90(%rbp)
movaps -0x80(%rbp),%xmm8
+ movaps %xmm0,-0x80(%rbp)
movaps -0x70(%rbp),%xmm9
+ movaps %xmm0,-0x70(%rbp)
movaps -0x60(%rbp),%xmm10
+ movaps %xmm0,-0x60(%rbp)
movaps -0x50(%rbp),%xmm11
+ movaps %xmm0,-0x50(%rbp)
movaps -0x40(%rbp),%xmm12
+ movaps %xmm0,-0x40(%rbp)
movaps -0x30(%rbp),%xmm13
+ movaps %xmm0,-0x30(%rbp)
movaps -0x20(%rbp),%xmm14
+ movaps %xmm0,-0x20(%rbp)
movaps -0x10(%rbp),%xmm15
+ movaps %xmm0,-0x10(%rbp)
+ movaps %xmm0,0x00(%rsp)
+ movaps %xmm0,0x10(%rsp)
+ movaps %xmm0,0x20(%rsp)
+ movaps %xmm0,0x30(%rsp)
+ movaps %xmm0,0x40(%rsp)
+ movaps %xmm0,0x50(%rsp)
+ movaps %xmm0,0x60(%rsp)
+ movaps %xmm0,0x70(%rsp)
___
$code.=<<___;
lea (%rbp),%rsp
@@ -1619,7 +1738,7 @@ aesni_xts_encrypt:
and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- movaps %xmm6,-0xa8(%rax)
+ movaps %xmm6,-0xa8(%rax) # offload everything
movaps %xmm7,-0x98(%rax)
movaps %xmm8,-0x88(%rax)
movaps %xmm9,-0x78(%rax)
@@ -1679,7 +1798,7 @@ $code.=<<___;
movaps $rndkey1,0x60(%rsp) # save round[0]^round[last]
sub \$16*6,$len
- jc .Lxts_enc_short
+ jc .Lxts_enc_short # if $len-=6*16 borrowed
mov \$16+96,$rounds
lea 32($key_,$rnds_),$key # end of key schedule
@@ -1694,7 +1813,7 @@ $code.=<<___;
movdqu `16*0`($inp),$inout0 # load input
movdqa $rndkey0,$twmask
movdqu `16*1`($inp),$inout1
- pxor @tweak[0],$inout0
+ pxor @tweak[0],$inout0 # input^=tweak^round[0]
movdqu `16*2`($inp),$inout2
pxor @tweak[1],$inout1
aesenc $rndkey1,$inout0
@@ -1713,10 +1832,10 @@ $code.=<<___;
lea `16*6`($inp),$inp
pxor $twmask,$inout5
- pxor $twres,@tweak[0]
+ pxor $twres,@tweak[0] # calclulate tweaks^round[last]
aesenc $rndkey1,$inout4
pxor $twres,@tweak[1]
- movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^last round key
+ movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^round[last]
aesenc $rndkey1,$inout5
$movkey 48($key_),$rndkey1
pxor $twres,@tweak[2]
@@ -1757,7 +1876,7 @@ $code.=<<___;
$movkey -80($key,%rax),$rndkey0
jnz .Lxts_enc_loop6
- movdqa (%r8),$twmask
+ movdqa (%r8),$twmask # start calculating next tweak
movdqa $twres,$twtmp
paddd $twres,$twres
aesenc $rndkey1,$inout0
@@ -1851,15 +1970,15 @@ $code.=<<___;
aesenclast `16*5`(%rsp),$inout5
pxor $twres,@tweak[5]
- lea `16*6`($out),$out
- movups $inout0,`-16*6`($out) # write output
+ lea `16*6`($out),$out # $out+=6*16
+ movups $inout0,`-16*6`($out) # store 6 output blocks
movups $inout1,`-16*5`($out)
movups $inout2,`-16*4`($out)
movups $inout3,`-16*3`($out)
movups $inout4,`-16*2`($out)
movups $inout5,`-16*1`($out)
sub \$16*6,$len
- jnc .Lxts_enc_grandloop
+ jnc .Lxts_enc_grandloop # loop if $len-=6*16 didn't borrow
mov \$16+96,$rounds
sub $rnds_,$rounds
@@ -1867,34 +1986,36 @@ $code.=<<___;
shr \$4,$rounds # restore original value
.Lxts_enc_short:
+ # at the point @tweak[0..5] are populated with tweak values
mov $rounds,$rnds_ # backup $rounds
pxor $rndkey0,@tweak[0]
- add \$16*6,$len
- jz .Lxts_enc_done
+ add \$16*6,$len # restore real remaining $len
+ jz .Lxts_enc_done # done if ($len==0)
pxor $rndkey0,@tweak[1]
cmp \$0x20,$len
- jb .Lxts_enc_one
+ jb .Lxts_enc_one # $len is 1*16
pxor $rndkey0,@tweak[2]
- je .Lxts_enc_two
+ je .Lxts_enc_two # $len is 2*16
pxor $rndkey0,@tweak[3]
cmp \$0x40,$len
- jb .Lxts_enc_three
+ jb .Lxts_enc_three # $len is 3*16
pxor $rndkey0,@tweak[4]
- je .Lxts_enc_four
+ je .Lxts_enc_four # $len is 4*16
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # $len is 5*16
movdqu 16*1($inp),$inout1
movdqu 16*2($inp),$inout2
pxor @tweak[0],$inout0
movdqu 16*3($inp),$inout3
pxor @tweak[1],$inout1
movdqu 16*4($inp),$inout4
- lea 16*5($inp),$inp
+ lea 16*5($inp),$inp # $inp+=5*16
pxor @tweak[2],$inout2
pxor @tweak[3],$inout3
pxor @tweak[4],$inout4
+ pxor $inout5,$inout5
call _aesni_encrypt6
@@ -1902,35 +2023,35 @@ $code.=<<___;
movdqa @tweak[5],@tweak[0]
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store 5 output blocks
xorps @tweak[3],$inout3
movdqu $inout1,16*1($out)
xorps @tweak[4],$inout4
movdqu $inout2,16*2($out)
movdqu $inout3,16*3($out)
movdqu $inout4,16*4($out)
- lea 16*5($out),$out
+ lea 16*5($out),$out # $out+=5*16
jmp .Lxts_enc_done
.align 16
.Lxts_enc_one:
movups ($inp),$inout0
- lea 16*1($inp),$inp
+ lea 16*1($inp),$inp # inp+=1*16
xorps @tweak[0],$inout0
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
xorps @tweak[0],$inout0
movdqa @tweak[1],@tweak[0]
- movups $inout0,($out)
- lea 16*1($out),$out
+ movups $inout0,($out) # store one output block
+ lea 16*1($out),$out # $out+=1*16
jmp .Lxts_enc_done
.align 16
.Lxts_enc_two:
movups ($inp),$inout0
movups 16($inp),$inout1
- lea 32($inp),$inp
+ lea 32($inp),$inp # $inp+=2*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
@@ -1939,9 +2060,9 @@ $code.=<<___;
xorps @tweak[0],$inout0
movdqa @tweak[2],@tweak[0]
xorps @tweak[1],$inout1
- movups $inout0,($out)
+ movups $inout0,($out) # store 2 output blocks
movups $inout1,16*1($out)
- lea 16*2($out),$out
+ lea 16*2($out),$out # $out+=2*16
jmp .Lxts_enc_done
.align 16
@@ -1949,7 +2070,7 @@ $code.=<<___;
movups ($inp),$inout0
movups 16*1($inp),$inout1
movups 16*2($inp),$inout2
- lea 16*3($inp),$inp
+ lea 16*3($inp),$inp # $inp+=3*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
@@ -1960,10 +2081,10 @@ $code.=<<___;
movdqa @tweak[3],@tweak[0]
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
movups $inout1,16*1($out)
movups $inout2,16*2($out)
- lea 16*3($out),$out
+ lea 16*3($out),$out # $out+=3*16
jmp .Lxts_enc_done
.align 16
@@ -1973,7 +2094,7 @@ $code.=<<___;
movups 16*2($inp),$inout2
xorps @tweak[0],$inout0
movups 16*3($inp),$inout3
- lea 16*4($inp),$inp
+ lea 16*4($inp),$inp # $inp+=4*16
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
xorps @tweak[3],$inout3
@@ -1984,17 +2105,17 @@ $code.=<<___;
movdqa @tweak[4],@tweak[0]
pxor @tweak[1],$inout1
pxor @tweak[2],$inout2
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store 4 output blocks
pxor @tweak[3],$inout3
movdqu $inout1,16*1($out)
movdqu $inout2,16*2($out)
movdqu $inout3,16*3($out)
- lea 16*4($out),$out
+ lea 16*4($out),$out # $out+=4*16
jmp .Lxts_enc_done
.align 16
.Lxts_enc_done:
- and \$15,$len_
+ and \$15,$len_ # see if $len%16 is 0
jz .Lxts_enc_ret
mov $len_,$len
@@ -2021,18 +2142,60 @@ $code.=<<___;
movups $inout0,-16($out)
.Lxts_enc_ret:
+ xorps %xmm0,%xmm0 # clear register bank
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+___
+$code.=<<___ if (!$win64);
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0x00(%rsp) # clear stack
+ pxor %xmm8,%xmm8
+ movaps %xmm0,0x10(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,0x20(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,0x30(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,0x40(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,0x50(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,0x60(%rsp)
+ pxor %xmm14,%xmm14
+ pxor %xmm15,%xmm15
___
$code.=<<___ if ($win64);
movaps -0xa0(%rbp),%xmm6
+ movaps %xmm0,-0xa0(%rbp) # clear stack
movaps -0x90(%rbp),%xmm7
+ movaps %xmm0,-0x90(%rbp)
movaps -0x80(%rbp),%xmm8
+ movaps %xmm0,-0x80(%rbp)
movaps -0x70(%rbp),%xmm9
+ movaps %xmm0,-0x70(%rbp)
movaps -0x60(%rbp),%xmm10
+ movaps %xmm0,-0x60(%rbp)
movaps -0x50(%rbp),%xmm11
+ movaps %xmm0,-0x50(%rbp)
movaps -0x40(%rbp),%xmm12
+ movaps %xmm0,-0x40(%rbp)
movaps -0x30(%rbp),%xmm13
+ movaps %xmm0,-0x30(%rbp)
movaps -0x20(%rbp),%xmm14
+ movaps %xmm0,-0x20(%rbp)
movaps -0x10(%rbp),%xmm15
+ movaps %xmm0,-0x10(%rbp)
+ movaps %xmm0,0x00(%rsp)
+ movaps %xmm0,0x10(%rsp)
+ movaps %xmm0,0x20(%rsp)
+ movaps %xmm0,0x30(%rsp)
+ movaps %xmm0,0x40(%rsp)
+ movaps %xmm0,0x50(%rsp)
+ movaps %xmm0,0x60(%rsp)
___
$code.=<<___;
lea (%rbp),%rsp
@@ -2053,7 +2216,7 @@ aesni_xts_decrypt:
and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- movaps %xmm6,-0xa8(%rax)
+ movaps %xmm6,-0xa8(%rax) # offload everything
movaps %xmm7,-0x98(%rax)
movaps %xmm8,-0x88(%rax)
movaps %xmm9,-0x78(%rax)
@@ -2116,7 +2279,7 @@ $code.=<<___;
movaps $rndkey1,0x60(%rsp) # save round[0]^round[last]
sub \$16*6,$len
- jc .Lxts_dec_short
+ jc .Lxts_dec_short # if $len-=6*16 borrowed
mov \$16+96,$rounds
lea 32($key_,$rnds_),$key # end of key schedule
@@ -2131,7 +2294,7 @@ $code.=<<___;
movdqu `16*0`($inp),$inout0 # load input
movdqa $rndkey0,$twmask
movdqu `16*1`($inp),$inout1
- pxor @tweak[0],$inout0
+ pxor @tweak[0],$inout0 # intput^=tweak^round[0]
movdqu `16*2`($inp),$inout2
pxor @tweak[1],$inout1
aesdec $rndkey1,$inout0
@@ -2150,7 +2313,7 @@ $code.=<<___;
lea `16*6`($inp),$inp
pxor $twmask,$inout5
- pxor $twres,@tweak[0]
+ pxor $twres,@tweak[0] # calclulate tweaks^round[last]
aesdec $rndkey1,$inout4
pxor $twres,@tweak[1]
movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^last round key
@@ -2194,7 +2357,7 @@ $code.=<<___;
$movkey -80($key,%rax),$rndkey0
jnz .Lxts_dec_loop6
- movdqa (%r8),$twmask
+ movdqa (%r8),$twmask # start calculating next tweak
movdqa $twres,$twtmp
paddd $twres,$twres
aesdec $rndkey1,$inout0
@@ -2288,15 +2451,15 @@ $code.=<<___;
aesdeclast `16*5`(%rsp),$inout5
pxor $twres,@tweak[5]
- lea `16*6`($out),$out
- movups $inout0,`-16*6`($out) # write output
+ lea `16*6`($out),$out # $out+=6*16
+ movups $inout0,`-16*6`($out) # store 6 output blocks
movups $inout1,`-16*5`($out)
movups $inout2,`-16*4`($out)
movups $inout3,`-16*3`($out)
movups $inout4,`-16*2`($out)
movups $inout5,`-16*1`($out)
sub \$16*6,$len
- jnc .Lxts_dec_grandloop
+ jnc .Lxts_dec_grandloop # loop if $len-=6*16 didn't borrow
mov \$16+96,$rounds
sub $rnds_,$rounds
@@ -2304,31 +2467,32 @@ $code.=<<___;
shr \$4,$rounds # restore original value
.Lxts_dec_short:
+ # at the point @tweak[0..5] are populated with tweak values
mov $rounds,$rnds_ # backup $rounds
pxor $rndkey0,@tweak[0]
pxor $rndkey0,@tweak[1]
- add \$16*6,$len
- jz .Lxts_dec_done
+ add \$16*6,$len # restore real remaining $len
+ jz .Lxts_dec_done # done if ($len==0)
pxor $rndkey0,@tweak[2]
cmp \$0x20,$len
- jb .Lxts_dec_one
+ jb .Lxts_dec_one # $len is 1*16
pxor $rndkey0,@tweak[3]
- je .Lxts_dec_two
+ je .Lxts_dec_two # $len is 2*16
pxor $rndkey0,@tweak[4]
cmp \$0x40,$len
- jb .Lxts_dec_three
- je .Lxts_dec_four
+ jb .Lxts_dec_three # $len is 3*16
+ je .Lxts_dec_four # $len is 4*16
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # $len is 5*16
movdqu 16*1($inp),$inout1
movdqu 16*2($inp),$inout2
pxor @tweak[0],$inout0
movdqu 16*3($inp),$inout3
pxor @tweak[1],$inout1
movdqu 16*4($inp),$inout4
- lea 16*5($inp),$inp
+ lea 16*5($inp),$inp # $inp+=5*16
pxor @tweak[2],$inout2
pxor @tweak[3],$inout3
pxor @tweak[4],$inout4
@@ -2338,7 +2502,7 @@ $code.=<<___;
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store 5 output blocks
xorps @tweak[3],$inout3
movdqu $inout1,16*1($out)
xorps @tweak[4],$inout4
@@ -2347,7 +2511,7 @@ $code.=<<___;
movdqu $inout3,16*3($out)
pcmpgtd @tweak[5],$twtmp
movdqu $inout4,16*4($out)
- lea 16*5($out),$out
+ lea 16*5($out),$out # $out+=5*16
pshufd \$0x13,$twtmp,@tweak[1] # $twres
and \$15,$len_
jz .Lxts_dec_ret
@@ -2361,23 +2525,23 @@ $code.=<<___;
.align 16
.Lxts_dec_one:
movups ($inp),$inout0
- lea 16*1($inp),$inp
+ lea 16*1($inp),$inp # $inp+=1*16
xorps @tweak[0],$inout0
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
xorps @tweak[0],$inout0
movdqa @tweak[1],@tweak[0]
- movups $inout0,($out)
+ movups $inout0,($out) # store one output block
movdqa @tweak[2],@tweak[1]
- lea 16*1($out),$out
+ lea 16*1($out),$out # $out+=1*16
jmp .Lxts_dec_done
.align 16
.Lxts_dec_two:
movups ($inp),$inout0
movups 16($inp),$inout1
- lea 32($inp),$inp
+ lea 32($inp),$inp # $inp+=2*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
@@ -2387,9 +2551,9 @@ $code.=<<___;
movdqa @tweak[2],@tweak[0]
xorps @tweak[1],$inout1
movdqa @tweak[3],@tweak[1]
- movups $inout0,($out)
+ movups $inout0,($out) # store 2 output blocks
movups $inout1,16*1($out)
- lea 16*2($out),$out
+ lea 16*2($out),$out # $out+=2*16
jmp .Lxts_dec_done
.align 16
@@ -2397,7 +2561,7 @@ $code.=<<___;
movups ($inp),$inout0
movups 16*1($inp),$inout1
movups 16*2($inp),$inout2
- lea 16*3($inp),$inp
+ lea 16*3($inp),$inp # $inp+=3*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
@@ -2409,10 +2573,10 @@ $code.=<<___;
xorps @tweak[1],$inout1
movdqa @tweak[4],@tweak[1]
xorps @tweak[2],$inout2
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
movups $inout1,16*1($out)
movups $inout2,16*2($out)
- lea 16*3($out),$out
+ lea 16*3($out),$out # $out+=3*16
jmp .Lxts_dec_done
.align 16
@@ -2422,7 +2586,7 @@ $code.=<<___;
movups 16*2($inp),$inout2
xorps @tweak[0],$inout0
movups 16*3($inp),$inout3
- lea 16*4($inp),$inp
+ lea 16*4($inp),$inp # $inp+=4*16
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
xorps @tweak[3],$inout3
@@ -2434,17 +2598,17 @@ $code.=<<___;
pxor @tweak[1],$inout1
movdqa @tweak[5],@tweak[1]
pxor @tweak[2],$inout2
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store 4 output blocks
pxor @tweak[3],$inout3
movdqu $inout1,16*1($out)
movdqu $inout2,16*2($out)
movdqu $inout3,16*3($out)
- lea 16*4($out),$out
+ lea 16*4($out),$out # $out+=4*16
jmp .Lxts_dec_done
.align 16
.Lxts_dec_done:
- and \$15,$len_
+ and \$15,$len_ # see if $len%16 is 0
jz .Lxts_dec_ret
.Lxts_dec_done2:
mov $len_,$len
@@ -2482,18 +2646,60 @@ $code.=<<___;
movups $inout0,($out)
.Lxts_dec_ret:
+ xorps %xmm0,%xmm0 # clear register bank
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+___
+$code.=<<___ if (!$win64);
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0x00(%rsp) # clear stack
+ pxor %xmm8,%xmm8
+ movaps %xmm0,0x10(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,0x20(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,0x30(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,0x40(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,0x50(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,0x60(%rsp)
+ pxor %xmm14,%xmm14
+ pxor %xmm15,%xmm15
___
$code.=<<___ if ($win64);
movaps -0xa0(%rbp),%xmm6
+ movaps %xmm0,-0xa0(%rbp) # clear stack
movaps -0x90(%rbp),%xmm7
+ movaps %xmm0,-0x90(%rbp)
movaps -0x80(%rbp),%xmm8
+ movaps %xmm0,-0x80(%rbp)
movaps -0x70(%rbp),%xmm9
+ movaps %xmm0,-0x70(%rbp)
movaps -0x60(%rbp),%xmm10
+ movaps %xmm0,-0x60(%rbp)
movaps -0x50(%rbp),%xmm11
+ movaps %xmm0,-0x50(%rbp)
movaps -0x40(%rbp),%xmm12
+ movaps %xmm0,-0x40(%rbp)
movaps -0x30(%rbp),%xmm13
+ movaps %xmm0,-0x30(%rbp)
movaps -0x20(%rbp),%xmm14
+ movaps %xmm0,-0x20(%rbp)
movaps -0x10(%rbp),%xmm15
+ movaps %xmm0,-0x10(%rbp)
+ movaps %xmm0,0x00(%rsp)
+ movaps %xmm0,0x10(%rsp)
+ movaps %xmm0,0x20(%rsp)
+ movaps %xmm0,0x30(%rsp)
+ movaps %xmm0,0x40(%rsp)
+ movaps %xmm0,0x50(%rsp)
+ movaps %xmm0,0x60(%rsp)
___
$code.=<<___;
lea (%rbp),%rsp
@@ -2548,7 +2754,11 @@ $code.=<<___;
jnc .Lcbc_enc_loop
add \$16,$len
jnz .Lcbc_enc_tail
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
movups $inout0,($ivp)
+ pxor $inout0,$inout0
+ pxor $inout1,$inout1
jmp .Lcbc_ret
.Lcbc_enc_tail:
@@ -2568,6 +2778,27 @@ $code.=<<___;
#--------------------------- CBC DECRYPT ------------------------------#
.align 16
.Lcbc_decrypt:
+ cmp \$16,$len
+ jne .Lcbc_decrypt_bulk
+
+ # handle single block without allocating stack frame,
+ # useful in ciphertext stealing mode
+ movdqu ($inp),$inout0 # load input
+ movdqu ($ivp),$inout1 # load iv
+ movdqa $inout0,$inout2 # future iv
+___
+ &aesni_generate1("dec",$key,$rnds_);
+$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ movdqu $inout2,($ivp) # store iv
+ xorps $inout1,$inout0 # ^=iv
+ pxor $inout1,$inout1
+ movups $inout0,($out) # store output
+ pxor $inout0,$inout0
+ jmp .Lcbc_ret
+.align 16
+.Lcbc_decrypt_bulk:
lea (%rsp),%rax
push %rbp
sub \$$frame_size,%rsp
@@ -2609,11 +2840,11 @@ $code.=<<___;
cmp \$0x70,$len
jbe .Lcbc_dec_six_or_seven
- and \$`1<<26|1<<22`,%r9d # isolate XSAVE+MOVBE
- sub \$0x50,$len
+ and \$`1<<26|1<<22`,%r9d # isolate XSAVE+MOVBE
+ sub \$0x50,$len # $len is biased by -5*16
cmp \$`1<<22`,%r9d # check for MOVBE without XSAVE
- je .Lcbc_dec_loop6_enter
- sub \$0x20,$len
+ je .Lcbc_dec_loop6_enter # [which denotes Atom Silvermont]
+ sub \$0x20,$len # $len is biased by -7*16
lea 0x70($key),$key # size optimization
jmp .Lcbc_dec_loop8_enter
.align 16
@@ -2740,7 +2971,7 @@ $code.=<<___;
movaps $inout7,$inout0
lea -0x70($key),$key
add \$0x70,$len
- jle .Lcbc_dec_tail_collected
+ jle .Lcbc_dec_clear_tail_collected
movups $inout7,($out)
lea 0x10($out),$out
cmp \$0x50,$len
@@ -2759,14 +2990,19 @@ $code.=<<___;
movdqu $inout0,($out)
pxor $in1,$inout2
movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
pxor $in2,$inout3
movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
pxor $in3,$inout4
movdqu $inout3,0x30($out)
+ pxor $inout3,$inout3
pxor $in4,$inout5
movdqu $inout4,0x40($out)
+ pxor $inout4,$inout4
lea 0x50($out),$out
movdqa $inout5,$inout0
+ pxor $inout5,$inout5
jmp .Lcbc_dec_tail_collected
.align 16
@@ -2781,16 +3017,23 @@ $code.=<<___;
movdqu $inout0,($out)
pxor $in1,$inout2
movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
pxor $in2,$inout3
movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
pxor $in3,$inout4
movdqu $inout3,0x30($out)
+ pxor $inout3,$inout3
pxor $in4,$inout5
movdqu $inout4,0x40($out)
+ pxor $inout4,$inout4
pxor $inout7,$inout6
movdqu $inout5,0x50($out)
+ pxor $inout5,$inout5
lea 0x60($out),$out
movdqa $inout6,$inout0
+ pxor $inout6,$inout6
+ pxor $inout7,$inout7
jmp .Lcbc_dec_tail_collected
.align 16
@@ -2834,31 +3077,31 @@ $code.=<<___;
movdqa $inout5,$inout0
add \$0x50,$len
- jle .Lcbc_dec_tail_collected
+ jle .Lcbc_dec_clear_tail_collected
movups $inout5,($out)
lea 0x10($out),$out
.Lcbc_dec_tail:
movups ($inp),$inout0
sub \$0x10,$len
- jbe .Lcbc_dec_one
+ jbe .Lcbc_dec_one # $len is 1*16 or less
movups 0x10($inp),$inout1
movaps $inout0,$in0
sub \$0x10,$len
- jbe .Lcbc_dec_two
+ jbe .Lcbc_dec_two # $len is 2*16 or less
movups 0x20($inp),$inout2
movaps $inout1,$in1
sub \$0x10,$len
- jbe .Lcbc_dec_three
+ jbe .Lcbc_dec_three # $len is 3*16 or less
movups 0x30($inp),$inout3
movaps $inout2,$in2
sub \$0x10,$len
- jbe .Lcbc_dec_four
+ jbe .Lcbc_dec_four # $len is 4*16 or less
- movups 0x40($inp),$inout4
+ movups 0x40($inp),$inout4 # $len is 5*16 or less
movaps $inout3,$in3
movaps $inout4,$in4
xorps $inout5,$inout5
@@ -2869,12 +3112,17 @@ $code.=<<___;
movdqu $inout0,($out)
pxor $in1,$inout2
movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
pxor $in2,$inout3
movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
pxor $in3,$inout4
movdqu $inout3,0x30($out)
+ pxor $inout3,$inout3
lea 0x40($out),$out
movdqa $inout4,$inout0
+ pxor $inout4,$inout4
+ pxor $inout5,$inout5
sub \$0x10,$len
jmp .Lcbc_dec_tail_collected
@@ -2896,6 +3144,7 @@ $code.=<<___;
pxor $in0,$inout1
movdqu $inout0,($out)
movdqa $inout1,$inout0
+ pxor $inout1,$inout1 # clear register bank
lea 0x10($out),$out
jmp .Lcbc_dec_tail_collected
.align 16
@@ -2908,7 +3157,9 @@ $code.=<<___;
movdqu $inout0,($out)
pxor $in1,$inout2
movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
movdqa $inout2,$inout0
+ pxor $inout2,$inout2
lea 0x20($out),$out
jmp .Lcbc_dec_tail_collected
.align 16
@@ -2921,41 +3172,71 @@ $code.=<<___;
movdqu $inout0,($out)
pxor $in1,$inout2
movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
pxor $in2,$inout3
movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
movdqa $inout3,$inout0
+ pxor $inout3,$inout3
lea 0x30($out),$out
jmp .Lcbc_dec_tail_collected
.align 16
+.Lcbc_dec_clear_tail_collected:
+ pxor $inout1,$inout1 # clear register bank
+ pxor $inout2,$inout2
+ pxor $inout3,$inout3
+___
+$code.=<<___ if (!$win64);
+ pxor $inout4,$inout4 # %xmm6..9
+ pxor $inout5,$inout5
+ pxor $inout6,$inout6
+ pxor $inout7,$inout7
+___
+$code.=<<___;
.Lcbc_dec_tail_collected:
movups $iv,($ivp)
and \$15,$len
jnz .Lcbc_dec_tail_partial
movups $inout0,($out)
+ pxor $inout0,$inout0
jmp .Lcbc_dec_ret
.align 16
.Lcbc_dec_tail_partial:
movaps $inout0,(%rsp)
+ pxor $inout0,$inout0
mov \$16,%rcx
mov $out,%rdi
sub $len,%rcx
lea (%rsp),%rsi
- .long 0x9066A4F3 # rep movsb
+ .long 0x9066A4F3 # rep movsb
+ movdqa $inout0,(%rsp)
.Lcbc_dec_ret:
+ xorps $rndkey0,$rndkey0 # %xmm0
+ pxor $rndkey1,$rndkey1
___
$code.=<<___ if ($win64);
movaps 0x10(%rsp),%xmm6
+ movaps %xmm0,0x10(%rsp) # clear stack
movaps 0x20(%rsp),%xmm7
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm8
+ movaps %xmm0,0x30(%rsp)
movaps 0x40(%rsp),%xmm9
+ movaps %xmm0,0x40(%rsp)
movaps 0x50(%rsp),%xmm10
+ movaps %xmm0,0x50(%rsp)
movaps 0x60(%rsp),%xmm11
+ movaps %xmm0,0x60(%rsp)
movaps 0x70(%rsp),%xmm12
+ movaps %xmm0,0x70(%rsp)
movaps 0x80(%rsp),%xmm13
+ movaps %xmm0,0x80(%rsp)
movaps 0x90(%rsp),%xmm14
+ movaps %xmm0,0x90(%rsp)
movaps 0xa0(%rsp),%xmm15
+ movaps %xmm0,0xa0(%rsp)
___
$code.=<<___;
lea (%rbp),%rsp
@@ -2965,8 +3246,15 @@ $code.=<<___;
.size ${PREFIX}_cbc_encrypt,.-${PREFIX}_cbc_encrypt
___
}
-# int $PREFIX_set_[en|de]crypt_key (const unsigned char *userKey,
+# int ${PREFIX}_set_decrypt_key(const unsigned char *inp,
# int bits, AES_KEY *key)
+#
+# input: $inp user-supplied key
+# $bits $inp length in bits
+# $key pointer to key schedule
+# output: %eax 0 denoting success, -1 or -2 - failure (see C)
+# *$key key schedule
+#
{ my ($inp,$bits,$key) = @_4args;
$bits =~ s/%r/%e/;
@@ -3003,7 +3291,9 @@ ${PREFIX}_set_decrypt_key:
$movkey ($key),%xmm0 # inverse middle
aesimc %xmm0,%xmm0
+ pxor %xmm1,%xmm1
$movkey %xmm0,($inp)
+ pxor %xmm0,%xmm0
.Ldec_key_ret:
add \$8,%rsp
ret
@@ -3020,6 +3310,22 @@ ___
# Agressively optimized in respect to aeskeygenassist's critical path
# and is contained in %xmm0-5 to meet Win64 ABI requirement.
#
+# int ${PREFIX}_set_encrypt_key(const unsigned char *inp,
+# int bits, AES_KEY * const key);
+#
+# input: $inp user-supplied key
+# $bits $inp length in bits
+# $key pointer to key schedule
+# output: %eax 0 denoting success, -1 or -2 - failure (see C)
+# $bits rounds-1 (used in aesni_set_decrypt_key)
+# *$key key schedule
+# $key pointer to key schedule (used in
+# aesni_set_decrypt_key)
+#
+# Subroutine is frame-less, which means that only volatile registers
+# are used. Note that it's declared "abi-omnipotent", which means that
+# amount of volatile registers is smaller on Windows.
+#
$code.=<<___;
.globl ${PREFIX}_set_encrypt_key
.type ${PREFIX}_set_encrypt_key,\@abi-omnipotent
@@ -3033,9 +3339,11 @@ __aesni_set_encrypt_key:
test $key,$key
jz .Lenc_key_ret
+ mov \$`1<<28|1<<11`,%r10d # AVX and XOP bits
movups ($inp),%xmm0 # pull first 128 bits of *userKey
xorps %xmm4,%xmm4 # low dword of xmm4 is assumed 0
- lea 16($key),%rax
+ and OPENSSL_ia32cap_P+4(%rip),%r10d
+ lea 16($key),%rax # %rax is used as modifiable copy of $key
cmp \$256,$bits
je .L14rounds
cmp \$192,$bits
@@ -3045,6 +3353,9 @@ __aesni_set_encrypt_key:
.L10rounds:
mov \$9,$bits # 10 rounds for 128-bit key
+ cmp \$`1<<28`,%r10d # AVX, bit no XOP
+ je .L10rounds_alt
+
$movkey %xmm0,($key) # round 0
aeskeygenassist \$0x1,%xmm0,%xmm1 # round 1
call .Lkey_expansion_128_cold
@@ -3072,9 +3383,79 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L10rounds_alt:
+ movdqa .Lkey_rotate(%rip),%xmm5
+ mov \$8,%r10d
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ movdqa %xmm0,%xmm2
+ movdqu %xmm0,($key)
+ jmp .Loop_key128
+
+.align 16
+.Loop_key128:
+ pshufb %xmm5,%xmm0
+ aesenclast %xmm4,%xmm0
+ pslld \$1,%xmm4
+ lea 16(%rax),%rax
+
+ movdqa %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,-16(%rax)
+ movdqa %xmm0,%xmm2
+
+ dec %r10d
+ jnz .Loop_key128
+
+ movdqa .Lkey_rcon1b(%rip),%xmm4
+
+ pshufb %xmm5,%xmm0
+ aesenclast %xmm4,%xmm0
+ pslld \$1,%xmm4
+
+ movdqa %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%rax)
+
+ movdqa %xmm0,%xmm2
+ pshufb %xmm5,%xmm0
+ aesenclast %xmm4,%xmm0
+
+ movdqa %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,16(%rax)
+
+ mov $bits,96(%rax) # 240($key)
+ xor %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.L12rounds:
movq 16($inp),%xmm2 # remaining 1/3 of *userKey
mov \$11,$bits # 12 rounds for 192
+ cmp \$`1<<28`,%r10d # AVX, but no XOP
+ je .L12rounds_alt
+
$movkey %xmm0,($key) # round 0
aeskeygenassist \$0x1,%xmm2,%xmm1 # round 1,2
call .Lkey_expansion_192a_cold
@@ -3098,10 +3479,54 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L12rounds_alt:
+ movdqa .Lkey_rotate192(%rip),%xmm5
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ mov \$8,%r10d
+ movdqu %xmm0,($key)
+ jmp .Loop_key192
+
+.align 16
+.Loop_key192:
+ movq %xmm2,0(%rax)
+ movdqa %xmm2,%xmm1
+ pshufb %xmm5,%xmm2
+ aesenclast %xmm4,%xmm2
+ pslld \$1, %xmm4
+ lea 24(%rax),%rax
+
+ movdqa %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm3,%xmm0
+
+ pshufd \$0xff,%xmm0,%xmm3
+ pxor %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm1,%xmm3
+
+ pxor %xmm2,%xmm0
+ pxor %xmm3,%xmm2
+ movdqu %xmm0,-16(%rax)
+
+ dec %r10d
+ jnz .Loop_key192
+
+ mov $bits,32(%rax) # 240($key)
+ xor %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.L14rounds:
movups 16($inp),%xmm2 # remaning half of *userKey
mov \$13,$bits # 14 rounds for 256
lea 16(%rax),%rax
+ cmp \$`1<<28`,%r10d # AVX, but no XOP
+ je .L14rounds_alt
+
$movkey %xmm0,($key) # round 0
$movkey %xmm2,16($key) # round 1
aeskeygenassist \$0x1,%xmm2,%xmm1 # round 2
@@ -3136,9 +3561,69 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L14rounds_alt:
+ movdqa .Lkey_rotate(%rip),%xmm5
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ mov \$7,%r10d
+ movdqu %xmm0,0($key)
+ movdqa %xmm2,%xmm1
+ movdqu %xmm2,16($key)
+ jmp .Loop_key256
+
+.align 16
+.Loop_key256:
+ pshufb %xmm5,%xmm2
+ aesenclast %xmm4,%xmm2
+
+ movdqa %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm3,%xmm0
+ pslld \$1,%xmm4
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%rax)
+
+ dec %r10d
+ jz .Ldone_key256
+
+ pshufd \$0xff,%xmm0,%xmm2
+ pxor %xmm3,%xmm3
+ aesenclast %xmm3,%xmm2
+
+ movdqa %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm3,%xmm1
+
+ pxor %xmm1,%xmm2
+ movdqu %xmm2,16(%rax)
+ lea 32(%rax),%rax
+ movdqa %xmm2,%xmm1
+
+ jmp .Loop_key256
+
+.Ldone_key256:
+ mov $bits,16(%rax) # 240($key)
+ xor %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.Lbad_keybits:
mov \$-2,%rax
.Lenc_key_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
add \$8,%rsp
ret
.LSEH_end_set_encrypt_key:
@@ -3228,6 +3713,14 @@ $code.=<<___;
.long 0x87,0,1,0
.Lincrement1:
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+.Lkey_rotate:
+ .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
+.Lkey_rotate192:
+ .long 0x04070605,0x04070605,0x04070605,0x04070605
+.Lkey_rcon1:
+ .long 1,1,1,1
+.Lkey_rcon1b:
+ .long 0x1b,0x1b,0x1b,0x1b
.asciz "AES for Intel AES-NI, CRYPTOGAMS by <appro\@openssl.org>"
.align 64
@@ -3345,7 +3838,7 @@ cbc_se_handler:
mov 152($context),%rax # pull context->Rsp
mov 248($context),%rbx # pull context->Rip
- lea .Lcbc_decrypt(%rip),%r10
+ lea .Lcbc_decrypt_bulk(%rip),%r10
cmp %r10,%rbx # context->Rip<"prologue" label
jb .Lcommon_seh_tail
diff --git a/openssl/crypto/aes/asm/aesv8-armx.pl b/openssl/crypto/aes/asm/aesv8-armx.pl
index 1e93f8685..95ebae3be 100755
--- a/openssl/crypto/aes/asm/aesv8-armx.pl
+++ b/openssl/crypto/aes/asm/aesv8-armx.pl
@@ -24,8 +24,12 @@
#
# CBC enc CBC dec CTR
# Apple A7 2.39 1.20 1.20
-# Cortex-A53 2.45 1.87 1.94
-# Cortex-A57 3.64 1.34 1.32
+# Cortex-A53 1.32 1.29 1.46
+# Cortex-A57(*) 1.95 0.85 0.93
+# Denver 1.96 0.86 0.80
+#
+# (*) original 3.64/1.34/1.32 results were for r0p0 revision
+# and are still same even for updated module;
$flavour = shift;
open STDOUT,">".shift;
@@ -308,17 +312,17 @@ ${prefix}_${dir}crypt:
.Loop_${dir}c:
aes$e $inout,$rndkey0
- vld1.32 {$rndkey0},[$key],#16
aes$mc $inout,$inout
+ vld1.32 {$rndkey0},[$key],#16
subs $rounds,$rounds,#2
aes$e $inout,$rndkey1
- vld1.32 {$rndkey1},[$key],#16
aes$mc $inout,$inout
+ vld1.32 {$rndkey1},[$key],#16
b.gt .Loop_${dir}c
aes$e $inout,$rndkey0
- vld1.32 {$rndkey0},[$key]
aes$mc $inout,$inout
+ vld1.32 {$rndkey0},[$key]
aes$e $inout,$rndkey1
veor $inout,$inout,$rndkey0
@@ -336,6 +340,7 @@ my ($rounds,$cnt,$key_,$step,$step1)=($enc,"w6","x7","x8","x12");
my ($dat0,$dat1,$in0,$in1,$tmp0,$tmp1,$ivec,$rndlast)=map("q$_",(0..7));
my ($dat,$tmp,$rndzero_n_last)=($dat0,$tmp0,$tmp1);
+my ($key4,$key5,$key6,$key7)=("x6","x12","x14",$key);
### q8-q15 preloaded key schedule
@@ -385,16 +390,42 @@ $code.=<<___;
veor $rndzero_n_last,q8,$rndlast
b.eq .Lcbc_enc128
+ vld1.32 {$in0-$in1},[$key_]
+ add $key_,$key,#16
+ add $key4,$key,#16*4
+ add $key5,$key,#16*5
+ aese $dat,q8
+ aesmc $dat,$dat
+ add $key6,$key,#16*6
+ add $key7,$key,#16*7
+ b .Lenter_cbc_enc
+
+.align 4
.Loop_cbc_enc:
aese $dat,q8
- vld1.32 {q8},[$key_],#16
aesmc $dat,$dat
- subs $cnt,$cnt,#2
+ vst1.8 {$ivec},[$out],#16
+.Lenter_cbc_enc:
aese $dat,q9
- vld1.32 {q9},[$key_],#16
aesmc $dat,$dat
- b.gt .Loop_cbc_enc
+ aese $dat,$in0
+ aesmc $dat,$dat
+ vld1.32 {q8},[$key4]
+ cmp $rounds,#4
+ aese $dat,$in1
+ aesmc $dat,$dat
+ vld1.32 {q9},[$key5]
+ b.eq .Lcbc_enc192
+
+ aese $dat,q8
+ aesmc $dat,$dat
+ vld1.32 {q8},[$key6]
+ aese $dat,q9
+ aesmc $dat,$dat
+ vld1.32 {q9},[$key7]
+ nop
+.Lcbc_enc192:
aese $dat,q8
aesmc $dat,$dat
subs $len,$len,#16
@@ -403,7 +434,6 @@ $code.=<<___;
cclr $step,eq
aese $dat,q10
aesmc $dat,$dat
- add $key_,$key,#16
aese $dat,q11
aesmc $dat,$dat
vld1.8 {q8},[$inp],$step
@@ -412,16 +442,14 @@ $code.=<<___;
veor q8,q8,$rndzero_n_last
aese $dat,q13
aesmc $dat,$dat
- vld1.32 {q9},[$key_],#16 // re-pre-load rndkey[1]
+ vld1.32 {q9},[$key_] // re-pre-load rndkey[1]
aese $dat,q14
aesmc $dat,$dat
aese $dat,q15
-
- mov $cnt,$rounds
veor $ivec,$dat,$rndlast
- vst1.8 {$ivec},[$out],#16
b.hs .Loop_cbc_enc
+ vst1.8 {$ivec},[$out],#16
b .Lcbc_done
.align 5
@@ -483,79 +511,78 @@ $code.=<<___;
.Loop3x_cbc_dec:
aesd $dat0,q8
- aesd $dat1,q8
- aesd $dat2,q8
- vld1.32 {q8},[$key_],#16
aesimc $dat0,$dat0
+ aesd $dat1,q8
aesimc $dat1,$dat1
+ aesd $dat2,q8
aesimc $dat2,$dat2
+ vld1.32 {q8},[$key_],#16
subs $cnt,$cnt,#2
aesd $dat0,q9
- aesd $dat1,q9
- aesd $dat2,q9
- vld1.32 {q9},[$key_],#16
aesimc $dat0,$dat0
+ aesd $dat1,q9
aesimc $dat1,$dat1
+ aesd $dat2,q9
aesimc $dat2,$dat2
+ vld1.32 {q9},[$key_],#16
b.gt .Loop3x_cbc_dec
aesd $dat0,q8
- aesd $dat1,q8
- aesd $dat2,q8
- veor $tmp0,$ivec,$rndlast
aesimc $dat0,$dat0
+ aesd $dat1,q8
aesimc $dat1,$dat1
+ aesd $dat2,q8
aesimc $dat2,$dat2
+ veor $tmp0,$ivec,$rndlast
+ subs $len,$len,#0x30
veor $tmp1,$in0,$rndlast
+ mov.lo x6,$len // x6, $cnt, is zero at this point
aesd $dat0,q9
- aesd $dat1,q9
- aesd $dat2,q9
- veor $tmp2,$in1,$rndlast
- subs $len,$len,#0x30
aesimc $dat0,$dat0
+ aesd $dat1,q9
aesimc $dat1,$dat1
+ aesd $dat2,q9
aesimc $dat2,$dat2
- vorr $ivec,$in2,$in2
- mov.lo x6,$len // x6, $cnt, is zero at this point
- aesd $dat0,q12
- aesd $dat1,q12
- aesd $dat2,q12
+ veor $tmp2,$in1,$rndlast
add $inp,$inp,x6 // $inp is adjusted in such way that
// at exit from the loop $dat1-$dat2
// are loaded with last "words"
+ vorr $ivec,$in2,$in2
+ mov $key_,$key
+ aesd $dat0,q12
aesimc $dat0,$dat0
+ aesd $dat1,q12
aesimc $dat1,$dat1
+ aesd $dat2,q12
aesimc $dat2,$dat2
- mov $key_,$key
- aesd $dat0,q13
- aesd $dat1,q13
- aesd $dat2,q13
vld1.8 {$in0},[$inp],#16
+ aesd $dat0,q13
aesimc $dat0,$dat0
+ aesd $dat1,q13
aesimc $dat1,$dat1
+ aesd $dat2,q13
aesimc $dat2,$dat2
vld1.8 {$in1},[$inp],#16
aesd $dat0,q14
- aesd $dat1,q14
- aesd $dat2,q14
- vld1.8 {$in2},[$inp],#16
aesimc $dat0,$dat0
+ aesd $dat1,q14
aesimc $dat1,$dat1
+ aesd $dat2,q14
aesimc $dat2,$dat2
- vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0]
+ vld1.8 {$in2},[$inp],#16
aesd $dat0,q15
aesd $dat1,q15
aesd $dat2,q15
-
+ vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0]
add $cnt,$rounds,#2
veor $tmp0,$tmp0,$dat0
veor $tmp1,$tmp1,$dat1
veor $dat2,$dat2,$tmp2
vld1.32 {q9},[$key_],#16 // re-pre-load rndkey[1]
- vorr $dat0,$in0,$in0
vst1.8 {$tmp0},[$out],#16
- vorr $dat1,$in1,$in1
+ vorr $dat0,$in0,$in0
vst1.8 {$tmp1},[$out],#16
+ vorr $dat1,$in1,$in1
vst1.8 {$dat2},[$out],#16
vorr $dat2,$in2,$in2
b.hs .Loop3x_cbc_dec
@@ -566,39 +593,39 @@ $code.=<<___;
.Lcbc_dec_tail:
aesd $dat1,q8
- aesd $dat2,q8
- vld1.32 {q8},[$key_],#16
aesimc $dat1,$dat1
+ aesd $dat2,q8
aesimc $dat2,$dat2
+ vld1.32 {q8},[$key_],#16
subs $cnt,$cnt,#2
aesd $dat1,q9
- aesd $dat2,q9
- vld1.32 {q9},[$key_],#16
aesimc $dat1,$dat1
+ aesd $dat2,q9
aesimc $dat2,$dat2
+ vld1.32 {q9},[$key_],#16
b.gt .Lcbc_dec_tail
aesd $dat1,q8
- aesd $dat2,q8
aesimc $dat1,$dat1
+ aesd $dat2,q8
aesimc $dat2,$dat2
aesd $dat1,q9
- aesd $dat2,q9
aesimc $dat1,$dat1
+ aesd $dat2,q9
aesimc $dat2,$dat2
aesd $dat1,q12
- aesd $dat2,q12
aesimc $dat1,$dat1
+ aesd $dat2,q12
aesimc $dat2,$dat2
cmn $len,#0x20
aesd $dat1,q13
- aesd $dat2,q13
aesimc $dat1,$dat1
+ aesd $dat2,q13
aesimc $dat2,$dat2
veor $tmp1,$ivec,$rndlast
aesd $dat1,q14
- aesd $dat2,q14
aesimc $dat1,$dat1
+ aesd $dat2,q14
aesimc $dat2,$dat2
veor $tmp2,$in1,$rndlast
aesd $dat1,q15
@@ -699,70 +726,69 @@ $code.=<<___;
.align 4
.Loop3x_ctr32:
aese $dat0,q8
- aese $dat1,q8
- aese $dat2,q8
- vld1.32 {q8},[$key_],#16
aesmc $dat0,$dat0
+ aese $dat1,q8
aesmc $dat1,$dat1
+ aese $dat2,q8
aesmc $dat2,$dat2
+ vld1.32 {q8},[$key_],#16
subs $cnt,$cnt,#2
aese $dat0,q9
- aese $dat1,q9
- aese $dat2,q9
- vld1.32 {q9},[$key_],#16
aesmc $dat0,$dat0
+ aese $dat1,q9
aesmc $dat1,$dat1
+ aese $dat2,q9
aesmc $dat2,$dat2
+ vld1.32 {q9},[$key_],#16
b.gt .Loop3x_ctr32
aese $dat0,q8
- aese $dat1,q8
- aese $dat2,q8
- mov $key_,$key
aesmc $tmp0,$dat0
- vld1.8 {$in0},[$inp],#16
+ aese $dat1,q8
aesmc $tmp1,$dat1
- aesmc $dat2,$dat2
+ vld1.8 {$in0},[$inp],#16
vorr $dat0,$ivec,$ivec
- aese $tmp0,q9
+ aese $dat2,q8
+ aesmc $dat2,$dat2
vld1.8 {$in1},[$inp],#16
- aese $tmp1,q9
- aese $dat2,q9
vorr $dat1,$ivec,$ivec
+ aese $tmp0,q9
aesmc $tmp0,$tmp0
- vld1.8 {$in2},[$inp],#16
+ aese $tmp1,q9
aesmc $tmp1,$tmp1
+ vld1.8 {$in2},[$inp],#16
+ mov $key_,$key
+ aese $dat2,q9
aesmc $tmp2,$dat2
vorr $dat2,$ivec,$ivec
add $tctr0,$ctr,#1
aese $tmp0,q12
+ aesmc $tmp0,$tmp0
aese $tmp1,q12
- aese $tmp2,q12
+ aesmc $tmp1,$tmp1
veor $in0,$in0,$rndlast
add $tctr1,$ctr,#2
- aesmc $tmp0,$tmp0
- aesmc $tmp1,$tmp1
+ aese $tmp2,q12
aesmc $tmp2,$tmp2
veor $in1,$in1,$rndlast
add $ctr,$ctr,#3
aese $tmp0,q13
+ aesmc $tmp0,$tmp0
aese $tmp1,q13
- aese $tmp2,q13
+ aesmc $tmp1,$tmp1
veor $in2,$in2,$rndlast
rev $tctr0,$tctr0
- aesmc $tmp0,$tmp0
- vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0]
- aesmc $tmp1,$tmp1
+ aese $tmp2,q13
aesmc $tmp2,$tmp2
vmov.32 ${dat0}[3], $tctr0
rev $tctr1,$tctr1
aese $tmp0,q14
+ aesmc $tmp0,$tmp0
aese $tmp1,q14
- aese $tmp2,q14
+ aesmc $tmp1,$tmp1
vmov.32 ${dat1}[3], $tctr1
rev $tctr2,$ctr
- aesmc $tmp0,$tmp0
- aesmc $tmp1,$tmp1
+ aese $tmp2,q14
aesmc $tmp2,$tmp2
vmov.32 ${dat2}[3], $tctr2
subs $len,$len,#3
@@ -770,13 +796,14 @@ $code.=<<___;
aese $tmp1,q15
aese $tmp2,q15
- mov $cnt,$rounds
veor $in0,$in0,$tmp0
+ vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0]
+ vst1.8 {$in0},[$out],#16
veor $in1,$in1,$tmp1
+ mov $cnt,$rounds
+ vst1.8 {$in1},[$out],#16
veor $in2,$in2,$tmp2
vld1.32 {q9},[$key_],#16 // re-pre-load rndkey[1]
- vst1.8 {$in0},[$out],#16
- vst1.8 {$in1},[$out],#16
vst1.8 {$in2},[$out],#16
b.hs .Loop3x_ctr32
@@ -788,40 +815,40 @@ $code.=<<___;
.Lctr32_tail:
aese $dat0,q8
- aese $dat1,q8
- vld1.32 {q8},[$key_],#16
aesmc $dat0,$dat0
+ aese $dat1,q8
aesmc $dat1,$dat1
+ vld1.32 {q8},[$key_],#16
subs $cnt,$cnt,#2
aese $dat0,q9
- aese $dat1,q9
- vld1.32 {q9},[$key_],#16
aesmc $dat0,$dat0
+ aese $dat1,q9
aesmc $dat1,$dat1
+ vld1.32 {q9},[$key_],#16
b.gt .Lctr32_tail
aese $dat0,q8
- aese $dat1,q8
aesmc $dat0,$dat0
+ aese $dat1,q8
aesmc $dat1,$dat1
aese $dat0,q9
- aese $dat1,q9
aesmc $dat0,$dat0
+ aese $dat1,q9
aesmc $dat1,$dat1
vld1.8 {$in0},[$inp],$step
aese $dat0,q12
- aese $dat1,q12
- vld1.8 {$in1},[$inp]
aesmc $dat0,$dat0
+ aese $dat1,q12
aesmc $dat1,$dat1
+ vld1.8 {$in1},[$inp]
aese $dat0,q13
- aese $dat1,q13
aesmc $dat0,$dat0
+ aese $dat1,q13
aesmc $dat1,$dat1
- aese $dat0,q14
- aese $dat1,q14
veor $in0,$in0,$rndlast
+ aese $dat0,q14
aesmc $dat0,$dat0
+ aese $dat1,q14
aesmc $dat1,$dat1
veor $in1,$in1,$rndlast
aese $dat0,q15
diff --git a/openssl/crypto/asn1/Makefile b/openssl/crypto/asn1/Makefile
index 2e2a09739..330fe81b7 100644
--- a/openssl/crypto/asn1/Makefile
+++ b/openssl/crypto/asn1/Makefile
@@ -93,6 +93,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by top Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/asn1/a_int.c b/openssl/crypto/asn1/a_int.c
index 70c2b8e62..7e26704a5 100644
--- a/openssl/crypto/asn1/a_int.c
+++ b/openssl/crypto/asn1/a_int.c
@@ -124,6 +124,8 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
else {
ret = a->length;
i = a->data[0];
+ if (ret == 1 && i == 0)
+ neg = 0;
if (!neg && (i > 127)) {
pad = 1;
pb = 0;
@@ -162,7 +164,7 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
p += a->length - 1;
i = a->length;
/* Copy zeros to destination as long as source is zero */
- while (!*n) {
+ while (!*n && i > 1) {
*(p--) = 0;
n--;
i--;
@@ -419,7 +421,7 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai)
ASN1err(ASN1_F_BN_TO_ASN1_INTEGER, ERR_R_NESTED_ASN1_ERROR);
goto err;
}
- if (BN_is_negative(bn))
+ if (BN_is_negative(bn) && !BN_is_zero(bn))
ret->type = V_ASN1_NEG_INTEGER;
else
ret->type = V_ASN1_INTEGER;
diff --git a/openssl/crypto/asn1/ameth_lib.c b/openssl/crypto/asn1/ameth_lib.c
index 02300dfed..5389c0434 100644
--- a/openssl/crypto/asn1/ameth_lib.c
+++ b/openssl/crypto/asn1/ameth_lib.c
@@ -464,3 +464,21 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
{
ameth->pkey_ctrl = pkey_ctrl;
}
+
+void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
+ int (*item_verify) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *a,
+ ASN1_BIT_STRING *sig,
+ EVP_PKEY *pkey),
+ int (*item_sign) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *alg1,
+ X509_ALGOR *alg2,
+ ASN1_BIT_STRING *sig))
+{
+ ameth->item_sign = item_sign;
+ ameth->item_verify = item_verify;
+}
diff --git a/openssl/crypto/asn1/asn1_gen.c b/openssl/crypto/asn1/asn1_gen.c
index 11b582dd3..65749239b 100644
--- a/openssl/crypto/asn1/asn1_gen.c
+++ b/openssl/crypto/asn1/asn1_gen.c
@@ -74,6 +74,8 @@
#define ASN1_GEN_STR(str,val) {str, sizeof(str) - 1, val}
#define ASN1_FLAG_EXP_MAX 20
+/* Maximum number of nested sequences */
+#define ASN1_GEN_SEQ_MAX_DEPTH 50
/* Input formats */
@@ -110,13 +112,16 @@ typedef struct {
int exp_count;
} tag_exp_arg;
+static ASN1_TYPE *generate_v3(char *str, X509V3_CTX *cnf, int depth,
+ int *perr);
static int bitstr_cb(const char *elem, int len, void *bitstr);
static int asn1_cb(const char *elem, int len, void *bitstr);
static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class,
int exp_constructed, int exp_pad, int imp_ok);
static int parse_tagging(const char *vstart, int vlen, int *ptag,
int *pclass);
-static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf);
+static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf,
+ int depth, int *perr);
static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype);
static int asn1_str2tag(const char *tagstr, int len);
@@ -133,6 +138,16 @@ ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf)
ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
{
+ int err = 0;
+ ASN1_TYPE *ret = generate_v3(str, cnf, 0, &err);
+ if (err)
+ ASN1err(ASN1_F_ASN1_GENERATE_V3, err);
+ return ret;
+}
+
+static ASN1_TYPE *generate_v3(char *str, X509V3_CTX *cnf, int depth,
+ int *perr)
+{
ASN1_TYPE *ret;
tag_exp_arg asn1_tags;
tag_exp_type *etmp;
@@ -152,17 +167,22 @@ ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
asn1_tags.imp_class = -1;
asn1_tags.format = ASN1_GEN_FORMAT_ASCII;
asn1_tags.exp_count = 0;
- if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0)
+ if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0) {
+ *perr = ASN1_R_UNKNOWN_TAG;
return NULL;
+ }
if ((asn1_tags.utype == V_ASN1_SEQUENCE)
|| (asn1_tags.utype == V_ASN1_SET)) {
if (!cnf) {
- ASN1err(ASN1_F_ASN1_GENERATE_V3,
- ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
+ *perr = ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG;
return NULL;
}
- ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf);
+ if (depth >= ASN1_GEN_SEQ_MAX_DEPTH) {
+ *perr = ASN1_R_ILLEGAL_NESTED_TAGGING;
+ return NULL;
+ }
+ ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf, depth, perr);
} else
ret = asn1_str2type(asn1_tags.str, asn1_tags.format, asn1_tags.utype);
@@ -280,7 +300,7 @@ static int asn1_cb(const char *elem, int len, void *bitstr)
int tmp_tag, tmp_class;
if (elem == NULL)
- return 0;
+ return -1;
for (i = 0, p = elem; i < len; p++, i++) {
/* Look for the ':' in name value pairs */
@@ -353,7 +373,7 @@ static int asn1_cb(const char *elem, int len, void *bitstr)
break;
case ASN1_GEN_FLAG_FORMAT:
- if(!vstart) {
+ if (!vstart) {
ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKNOWN_FORMAT);
return -1;
}
@@ -435,7 +455,8 @@ static int parse_tagging(const char *vstart, int vlen, int *ptag, int *pclass)
/* Handle multiple types: SET and SEQUENCE */
-static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
+static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf,
+ int depth, int *perr)
{
ASN1_TYPE *ret = NULL;
STACK_OF(ASN1_TYPE) *sk = NULL;
@@ -454,7 +475,8 @@ static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
goto bad;
for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
ASN1_TYPE *typ =
- ASN1_generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf);
+ generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf,
+ depth + 1, perr);
if (!typ)
goto bad;
if (!sk_ASN1_TYPE_push(sk, typ))
diff --git a/openssl/crypto/asn1/asn_mime.c b/openssl/crypto/asn1/asn_mime.c
index 7e2f28e6d..96110c540 100644
--- a/openssl/crypto/asn1/asn_mime.c
+++ b/openssl/crypto/asn1/asn_mime.c
@@ -289,7 +289,8 @@ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
if ((flags & SMIME_DETACHED) && data) {
/* We want multipart/signed */
/* Generate a random boundary */
- RAND_pseudo_bytes((unsigned char *)bound, 32);
+ if (RAND_pseudo_bytes((unsigned char *)bound, 32) < 0)
+ return 0;
for (i = 0; i < 32; i++) {
c = bound[i] & 0xf;
if (c < 10)
diff --git a/openssl/crypto/asn1/bio_ndef.c b/openssl/crypto/asn1/bio_ndef.c
index 4a73ca9ea..31949b879 100644
--- a/openssl/crypto/asn1/bio_ndef.c
+++ b/openssl/crypto/asn1/bio_ndef.c
@@ -162,7 +162,7 @@ static int ndef_prefix(BIO *b, unsigned char **pbuf, int *plen, void *parg)
derlen = ASN1_item_ndef_i2d(ndef_aux->val, NULL, ndef_aux->it);
p = OPENSSL_malloc(derlen);
- if(!p)
+ if (!p)
return 0;
ndef_aux->derbuf = p;
@@ -232,7 +232,7 @@ static int ndef_suffix(BIO *b, unsigned char **pbuf, int *plen, void *parg)
derlen = ASN1_item_ndef_i2d(ndef_aux->val, NULL, ndef_aux->it);
p = OPENSSL_malloc(derlen);
- if(!p)
+ if (!p)
return 0;
ndef_aux->derbuf = p;
diff --git a/openssl/crypto/asn1/tasn_new.c b/openssl/crypto/asn1/tasn_new.c
index 7d2964f02..b0c73beeb 100644
--- a/openssl/crypto/asn1/tasn_new.c
+++ b/openssl/crypto/asn1/tasn_new.c
@@ -100,9 +100,6 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it,
else
asn1_cb = 0;
- if (!combine)
- *pval = NULL;
-
#ifdef CRYPTO_MDEBUG
if (it->sname)
CRYPTO_push_info(it->sname);
diff --git a/openssl/crypto/asn1/tasn_prn.c b/openssl/crypto/asn1/tasn_prn.c
index 7c54f9d1d..5e7d53e98 100644
--- a/openssl/crypto/asn1/tasn_prn.c
+++ b/openssl/crypto/asn1/tasn_prn.c
@@ -290,7 +290,7 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent,
for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
const ASN1_TEMPLATE *seqtt;
seqtt = asn1_do_adb(fld, tt, 1);
- if(!seqtt)
+ if (!seqtt)
return 0;
tmpfld = asn1_get_field_ptr(fld, seqtt);
if (!asn1_template_print_ctx(out, tmpfld,
diff --git a/openssl/crypto/asn1/x_x509.c b/openssl/crypto/asn1/x_x509.c
index 55319acf9..5f266a26b 100644
--- a/openssl/crypto/asn1/x_x509.c
+++ b/openssl/crypto/asn1/x_x509.c
@@ -177,7 +177,7 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length)
/* Save start position */
q = *pp;
- if(!a || *a == NULL) {
+ if (!a || *a == NULL) {
freeret = 1;
}
ret = d2i_X509(a, pp, length);
@@ -192,7 +192,7 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length)
goto err;
return ret;
err:
- if(freeret) {
+ if (freeret) {
X509_free(ret);
if (a)
*a = NULL;
diff --git a/openssl/crypto/bf/Makefile b/openssl/crypto/bf/Makefile
index d01bfaa31..6dd201553 100644
--- a/openssl/crypto/bf/Makefile
+++ b/openssl/crypto/bf/Makefile
@@ -72,6 +72,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/bio/Makefile b/openssl/crypto/bio/Makefile
index c395d8049..ef526f6be 100644
--- a/openssl/crypto/bio/Makefile
+++ b/openssl/crypto/bio/Makefile
@@ -73,6 +73,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/bio/b_print.c b/openssl/crypto/bio/b_print.c
index c2cf6e619..7c81e25d4 100644
--- a/openssl/crypto/bio/b_print.c
+++ b/openssl/crypto/bio/b_print.c
@@ -704,32 +704,29 @@ doapr_outch(char **sbuffer,
/* If we haven't at least one buffer, someone has doe a big booboo */
assert(*sbuffer != NULL || buffer != NULL);
- if (buffer) {
- while (*currlen >= *maxlen) {
- if (*buffer == NULL) {
- if (*maxlen == 0)
- *maxlen = 1024;
- *buffer = OPENSSL_malloc(*maxlen);
- if(!*buffer) {
- /* Panic! Can't really do anything sensible. Just return */
- return;
- }
- if (*currlen > 0) {
- assert(*sbuffer != NULL);
- memcpy(*buffer, *sbuffer, *currlen);
- }
- *sbuffer = NULL;
- } else {
- *maxlen += 1024;
- *buffer = OPENSSL_realloc(*buffer, *maxlen);
- if(!*buffer) {
- /* Panic! Can't really do anything sensible. Just return */
- return;
- }
+ /* |currlen| must always be <= |*maxlen| */
+ assert(*currlen <= *maxlen);
+
+ if (buffer && *currlen == *maxlen) {
+ *maxlen += 1024;
+ if (*buffer == NULL) {
+ *buffer = OPENSSL_malloc(*maxlen);
+ if (!*buffer) {
+ /* Panic! Can't really do anything sensible. Just return */
+ return;
+ }
+ if (*currlen > 0) {
+ assert(*sbuffer != NULL);
+ memcpy(*buffer, *sbuffer, *currlen);
+ }
+ *sbuffer = NULL;
+ } else {
+ *buffer = OPENSSL_realloc(*buffer, *maxlen);
+ if (!*buffer) {
+ /* Panic! Can't really do anything sensible. Just return */
+ return;
}
}
- /* What to do if *buffer is NULL? */
- assert(*sbuffer != NULL || *buffer != NULL);
}
if (*currlen < *maxlen) {
diff --git a/openssl/crypto/bio/bf_nbio.c b/openssl/crypto/bio/bf_nbio.c
index da88a8a1b..a04f32a00 100644
--- a/openssl/crypto/bio/bf_nbio.c
+++ b/openssl/crypto/bio/bf_nbio.c
@@ -139,7 +139,8 @@ static int nbiof_read(BIO *b, char *out, int outl)
BIO_clear_retry_flags(b);
#if 1
- RAND_pseudo_bytes(&n, 1);
+ if (RAND_pseudo_bytes(&n, 1) < 0)
+ return -1;
num = (n & 0x07);
if (outl > num)
@@ -178,7 +179,8 @@ static int nbiof_write(BIO *b, const char *in, int inl)
num = nt->lwn;
nt->lwn = 0;
} else {
- RAND_pseudo_bytes(&n, 1);
+ if (RAND_pseudo_bytes(&n, 1) < 0)
+ return -1;
num = (n & 7);
}
diff --git a/openssl/crypto/bio/bio_lib.c b/openssl/crypto/bio/bio_lib.c
index 5267010cb..07934f8a6 100644
--- a/openssl/crypto/bio/bio_lib.c
+++ b/openssl/crypto/bio/bio_lib.c
@@ -536,8 +536,10 @@ BIO *BIO_dup_chain(BIO *in)
/* copy app data */
if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_BIO, &new_bio->ex_data,
- &bio->ex_data))
+ &bio->ex_data)) {
+ BIO_free(new_bio);
goto err;
+ }
if (ret == NULL) {
eoc = new_bio;
@@ -549,8 +551,8 @@ BIO *BIO_dup_chain(BIO *in)
}
return (ret);
err:
- if (ret != NULL)
- BIO_free(ret);
+ BIO_free_all(ret);
+
return (NULL);
}
diff --git a/openssl/crypto/bio/bss_dgram.c b/openssl/crypto/bio/bss_dgram.c
index 388d90d02..7fcd831da 100644
--- a/openssl/crypto/bio/bss_dgram.c
+++ b/openssl/crypto/bio/bss_dgram.c
@@ -303,16 +303,17 @@ static void dgram_adjust_rcv_timeout(BIO *b)
/* Calculate time left until timer expires */
memcpy(&timeleft, &(data->next_timeout), sizeof(struct timeval));
- timeleft.tv_sec -= timenow.tv_sec;
- timeleft.tv_usec -= timenow.tv_usec;
- if (timeleft.tv_usec < 0) {
+ if (timeleft.tv_usec < timenow.tv_usec) {
+ timeleft.tv_usec = 1000000 - timenow.tv_usec + timeleft.tv_usec;
timeleft.tv_sec--;
- timeleft.tv_usec += 1000000;
+ } else {
+ timeleft.tv_usec -= timenow.tv_usec;
}
-
- if (timeleft.tv_sec < 0) {
+ if (timeleft.tv_sec < timenow.tv_sec) {
timeleft.tv_sec = 0;
timeleft.tv_usec = 1;
+ } else {
+ timeleft.tv_sec -= timenow.tv_sec;
}
/*
@@ -896,7 +897,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
perror("setsockopt");
ret = -1;
}
-# elif defined(OPENSSL_SYS_LINUX) && defined(IP_MTUDISCOVER)
+# elif defined(OPENSSL_SYS_LINUX) && defined(IP_MTU_DISCOVER) && defined (IP_PMTUDISC_PROBE)
if ((sockopt_val = num ? IP_PMTUDISC_PROBE : IP_PMTUDISC_DONT),
(ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER,
&sockopt_val, sizeof(sockopt_val))) < 0) {
@@ -1012,7 +1013,7 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag)
*/
sockopt_len = (socklen_t) (sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
authchunks = OPENSSL_malloc(sockopt_len);
- if(!authchunks) {
+ if (!authchunks) {
BIO_vfree(bio);
return (NULL);
}
@@ -1352,7 +1353,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
(socklen_t) (sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
authchunks = OPENSSL_malloc(optlen);
if (!authchunks) {
- BIOerr(BIO_F_DGRAM_SCTP_READ, ERR_R_MALLOC_ERROR);
+ BIOerr(BIO_F_DGRAM_SCTP_READ, ERR_R_MALLOC_FAILURE);
return -1;
}
memset(authchunks, 0, sizeof(optlen));
@@ -1423,8 +1424,8 @@ static int dgram_sctp_write(BIO *b, const char *in, int inl)
if (data->save_shutdown && !BIO_dgram_sctp_wait_for_dry(b)) {
char *tmp;
data->saved_message.bio = b;
- if(!(tmp = OPENSSL_malloc(inl))) {
- BIOerr(BIO_F_DGRAM_SCTP_WRITE, ERR_R_MALLOC_ERROR);
+ if (!(tmp = OPENSSL_malloc(inl))) {
+ BIOerr(BIO_F_DGRAM_SCTP_WRITE, ERR_R_MALLOC_FAILURE);
return -1;
}
if (data->saved_message.data)
diff --git a/openssl/crypto/bn/Makefile b/openssl/crypto/bn/Makefile
index 5361dc827..61dce05ad 100644
--- a/openssl/crypto/bn/Makefile
+++ b/openssl/crypto/bn/Makefile
@@ -176,6 +176,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: bn_prime.h depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/bn/asm/vis3-mont.pl b/openssl/crypto/bn/asm/vis3-mont.pl
index a1357de0e..263ac02b6 100755
--- a/openssl/crypto/bn/asm/vis3-mont.pl
+++ b/openssl/crypto/bn/asm/vis3-mont.pl
@@ -100,7 +100,7 @@ $code.=<<___;
ld [$ap+12], $t3
or $t0, $aj, $aj
add $ap, 16, $ap
- stxa $aj, [$anp]0xe2 ! converted ap[0]
+ stx $aj, [$anp] ! converted ap[0]
mulx $aj, $m0, $lo0 ! ap[0]*bp[0]
umulxhi $aj, $m0, $hi0
@@ -150,7 +150,7 @@ $code.=<<___;
sllx $t1, 32, $aj
add $ap, 8, $ap
or $t0, $aj, $aj
- stxa $aj, [$anp]0xe2 ! converted ap[j]
+ stx $aj, [$anp] ! converted ap[j]
ld [$np+0], $t2 ! np[j]
addcc $nlo, $hi1, $lo1
@@ -169,7 +169,7 @@ $code.=<<___;
addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
umulxhi $nj, $m1, $nj ! nhi=nj
addxc %g0, $hi1, $hi1
- stxa $lo1, [$tp]0xe2 ! tp[j-1]
+ stx $lo1, [$tp] ! tp[j-1]
add $tp, 8, $tp ! tp++
brnz,pt $cnt, .L1st
@@ -182,12 +182,12 @@ $code.=<<___;
addxc $nj, %g0, $hi1
addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
addxc %g0, $hi1, $hi1
- stxa $lo1, [$tp]0xe2 ! tp[j-1]
+ stx $lo1, [$tp] ! tp[j-1]
add $tp, 8, $tp
addcc $hi0, $hi1, $hi1
addxc %g0, %g0, $ovf ! upmost overflow bit
- stxa $hi1, [$tp]0xe2
+ stx $hi1, [$tp]
add $tp, 8, $tp
ba .Louter
diff --git a/openssl/crypto/bn/asm/x86_64-mont5.pl b/openssl/crypto/bn/asm/x86_64-mont5.pl
index fa22c30b1..820de3d6f 100644
--- a/openssl/crypto/bn/asm/x86_64-mont5.pl
+++ b/openssl/crypto/bn/asm/x86_64-mont5.pl
@@ -3226,11 +3226,16 @@ $code.=<<___;
.type bn_get_bits5,\@abi-omnipotent
.align 16
bn_get_bits5:
- mov $inp,%r10
+ lea 0($inp),%r10
+ lea 1($inp),%r11
mov $num,%ecx
- shr \$3,$num
- movzw (%r10,$num),%eax
- and \$7,%ecx
+ shr \$4,$num
+ and \$15,%ecx
+ lea -8(%ecx),%eax
+ cmp \$11,%ecx
+ cmova %r11,%r10
+ cmova %eax,%ecx
+ movzw (%r10,$num,2),%eax
shrl %cl,%eax
and \$31,%eax
ret
diff --git a/openssl/crypto/bn/bn.h b/openssl/crypto/bn/bn.h
index 78709d384..5696965e9 100644
--- a/openssl/crypto/bn/bn.h
+++ b/openssl/crypto/bn/bn.h
@@ -779,6 +779,7 @@ int RAND_pseudo_bytes(unsigned char *buf, int num);
* wouldn't be constructed with top!=dmax. */ \
BN_ULONG *_not_const; \
memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \
+ /* Debug only - safe to ignore error return */ \
RAND_pseudo_bytes(&_tmp_char, 1); \
memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \
(_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \
@@ -892,6 +893,7 @@ void ERR_load_BN_strings(void);
# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135
# define BN_F_BN_GF2M_MOD_SQR 136
# define BN_F_BN_GF2M_MOD_SQRT 137
+# define BN_F_BN_LSHIFT 145
# define BN_F_BN_MOD_EXP2_MONT 118
# define BN_F_BN_MOD_EXP_MONT 109
# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124
@@ -907,12 +909,14 @@ void ERR_load_BN_strings(void);
# define BN_F_BN_NEW 113
# define BN_F_BN_RAND 114
# define BN_F_BN_RAND_RANGE 122
+# define BN_F_BN_RSHIFT 146
# define BN_F_BN_USUB 115
/* Reason codes. */
# define BN_R_ARG2_LT_ARG3 100
# define BN_R_BAD_RECIPROCAL 101
# define BN_R_BIGNUM_TOO_LONG 114
+# define BN_R_BITS_TOO_SMALL 118
# define BN_R_CALLED_WITH_EVEN_MODULUS 102
# define BN_R_DIV_BY_ZERO 103
# define BN_R_ENCODING_ERROR 104
@@ -920,6 +924,7 @@ void ERR_load_BN_strings(void);
# define BN_R_INPUT_NOT_REDUCED 110
# define BN_R_INVALID_LENGTH 106
# define BN_R_INVALID_RANGE 115
+# define BN_R_INVALID_SHIFT 119
# define BN_R_NOT_A_SQUARE 111
# define BN_R_NOT_INITIALIZED 107
# define BN_R_NO_INVERSE 108
diff --git a/openssl/crypto/bn/bn_err.c b/openssl/crypto/bn/bn_err.c
index faa7e226b..e7a703826 100644
--- a/openssl/crypto/bn/bn_err.c
+++ b/openssl/crypto/bn/bn_err.c
@@ -1,6 +1,6 @@
/* crypto/bn/bn_err.c */
/* ====================================================================
- * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -94,6 +94,7 @@ static ERR_STRING_DATA BN_str_functs[] = {
{ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR), "BN_GF2m_mod_solve_quad_arr"},
{ERR_FUNC(BN_F_BN_GF2M_MOD_SQR), "BN_GF2m_mod_sqr"},
{ERR_FUNC(BN_F_BN_GF2M_MOD_SQRT), "BN_GF2m_mod_sqrt"},
+ {ERR_FUNC(BN_F_BN_LSHIFT), "BN_lshift"},
{ERR_FUNC(BN_F_BN_MOD_EXP2_MONT), "BN_mod_exp2_mont"},
{ERR_FUNC(BN_F_BN_MOD_EXP_MONT), "BN_mod_exp_mont"},
{ERR_FUNC(BN_F_BN_MOD_EXP_MONT_CONSTTIME), "BN_mod_exp_mont_consttime"},
@@ -109,6 +110,7 @@ static ERR_STRING_DATA BN_str_functs[] = {
{ERR_FUNC(BN_F_BN_NEW), "BN_new"},
{ERR_FUNC(BN_F_BN_RAND), "BN_rand"},
{ERR_FUNC(BN_F_BN_RAND_RANGE), "BN_rand_range"},
+ {ERR_FUNC(BN_F_BN_RSHIFT), "BN_rshift"},
{ERR_FUNC(BN_F_BN_USUB), "BN_usub"},
{0, NULL}
};
@@ -117,6 +119,7 @@ static ERR_STRING_DATA BN_str_reasons[] = {
{ERR_REASON(BN_R_ARG2_LT_ARG3), "arg2 lt arg3"},
{ERR_REASON(BN_R_BAD_RECIPROCAL), "bad reciprocal"},
{ERR_REASON(BN_R_BIGNUM_TOO_LONG), "bignum too long"},
+ {ERR_REASON(BN_R_BITS_TOO_SMALL), "bits too small"},
{ERR_REASON(BN_R_CALLED_WITH_EVEN_MODULUS), "called with even modulus"},
{ERR_REASON(BN_R_DIV_BY_ZERO), "div by zero"},
{ERR_REASON(BN_R_ENCODING_ERROR), "encoding error"},
@@ -125,6 +128,7 @@ static ERR_STRING_DATA BN_str_reasons[] = {
{ERR_REASON(BN_R_INPUT_NOT_REDUCED), "input not reduced"},
{ERR_REASON(BN_R_INVALID_LENGTH), "invalid length"},
{ERR_REASON(BN_R_INVALID_RANGE), "invalid range"},
+ {ERR_REASON(BN_R_INVALID_SHIFT), "invalid shift"},
{ERR_REASON(BN_R_NOT_A_SQUARE), "not a square"},
{ERR_REASON(BN_R_NOT_INITIALIZED), "not initialized"},
{ERR_REASON(BN_R_NO_INVERSE), "no inverse"},
diff --git a/openssl/crypto/bn/bn_gf2m.c b/openssl/crypto/bn/bn_gf2m.c
index aeee49a01..cfa1c7ce1 100644
--- a/openssl/crypto/bn/bn_gf2m.c
+++ b/openssl/crypto/bn/bn_gf2m.c
@@ -450,8 +450,7 @@ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[])
d0 = p[k] % BN_BITS2;
d1 = BN_BITS2 - d0;
z[n] ^= (zz << d0);
- tmp_ulong = zz >> d1;
- if (d0 && tmp_ulong)
+ if (d0 && (tmp_ulong = zz >> d1))
z[n + 1] ^= tmp_ulong;
}
@@ -694,9 +693,10 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
}
# else
{
- int i, ubits = BN_num_bits(u), vbits = BN_num_bits(v), /* v is copy
- * of p */
- top = p->top;
+ int i;
+ int ubits = BN_num_bits(u);
+ int vbits = BN_num_bits(v); /* v is copy of p */
+ int top = p->top;
BN_ULONG *udp, *bdp, *vdp, *cdp;
bn_wexpand(u, top);
@@ -740,8 +740,12 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
ubits--;
}
- if (ubits <= BN_BITS2 && udp[0] == 1)
- break;
+ if (ubits <= BN_BITS2) {
+ if (udp[0] == 0) /* poly was reducible */
+ goto err;
+ if (udp[0] == 1)
+ break;
+ }
if (ubits < vbits) {
i = ubits;
diff --git a/openssl/crypto/bn/bn_lcl.h b/openssl/crypto/bn/bn_lcl.h
index 7cd58830e..00f4f0994 100644
--- a/openssl/crypto/bn/bn_lcl.h
+++ b/openssl/crypto/bn/bn_lcl.h
@@ -294,7 +294,7 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b,
# endif
# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
# if defined(__GNUC__) && __GNUC__>=2
-# if __GNUC__>=4 && __GNUC_MINOR__>=4
+# if __GNUC__>4 || (__GNUC__>=4 && __GNUC_MINOR__>=4)
/* "h" constraint is no more since 4.4 */
# define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64)
# define BN_UMULT_LOHI(low,high,a,b) ({ \
diff --git a/openssl/crypto/bn/bn_print.c b/openssl/crypto/bn/bn_print.c
index 4dcaae32b..ab10b957b 100644
--- a/openssl/crypto/bn/bn_print.c
+++ b/openssl/crypto/bn/bn_print.c
@@ -71,7 +71,12 @@ char *BN_bn2hex(const BIGNUM *a)
char *buf;
char *p;
- buf = (char *)OPENSSL_malloc(a->top * BN_BYTES * 2 + 2);
+ if (a->neg && BN_is_zero(a)) {
+ /* "-0" == 3 bytes including NULL terminator */
+ buf = OPENSSL_malloc(3);
+ } else {
+ buf = OPENSSL_malloc(a->top * BN_BYTES * 2 + 2);
+ }
if (buf == NULL) {
BNerr(BN_F_BN_BN2HEX, ERR_R_MALLOC_FAILURE);
goto err;
diff --git a/openssl/crypto/bn/bn_rand.c b/openssl/crypto/bn/bn_rand.c
index 7ac71ec8e..f9fb2e9e4 100644
--- a/openssl/crypto/bn/bn_rand.c
+++ b/openssl/crypto/bn/bn_rand.c
@@ -121,6 +121,11 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
int ret = 0, bit, bytes, mask;
time_t tim;
+ if (bits < 0 || (bits == 1 && top > 0)) {
+ BNerr(BN_F_BNRAND, BN_R_BITS_TOO_SMALL);
+ return 0;
+ }
+
if (bits == 0) {
BN_zero(rnd);
return 1;
@@ -157,7 +162,8 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
unsigned char c;
for (i = 0; i < bytes; i++) {
- RAND_pseudo_bytes(&c, 1);
+ if (RAND_pseudo_bytes(&c, 1) < 0)
+ goto err;
if (c >= 128 && i > 0)
buf[i] = buf[i - 1];
else if (c < 42)
@@ -168,7 +174,7 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
}
#endif
- if (top != -1) {
+ if (top >= 0) {
if (top) {
if (bit == 0) {
buf[0] = 1;
diff --git a/openssl/crypto/bn/bn_shift.c b/openssl/crypto/bn/bn_shift.c
index 4f3e8ffed..9673d9a30 100644
--- a/openssl/crypto/bn/bn_shift.c
+++ b/openssl/crypto/bn/bn_shift.c
@@ -137,6 +137,11 @@ int BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
bn_check_top(r);
bn_check_top(a);
+ if (n < 0) {
+ BNerr(BN_F_BN_LSHIFT, BN_R_INVALID_SHIFT);
+ return 0;
+ }
+
r->neg = a->neg;
nw = n / BN_BITS2;
if (bn_wexpand(r, a->top + nw + 1) == NULL)
@@ -174,6 +179,11 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
bn_check_top(r);
bn_check_top(a);
+ if (n < 0) {
+ BNerr(BN_F_BN_RSHIFT, BN_R_INVALID_SHIFT);
+ return 0;
+ }
+
nw = n / BN_BITS2;
rb = n % BN_BITS2;
lb = BN_BITS2 - rb;
diff --git a/openssl/crypto/buffer/Makefile b/openssl/crypto/buffer/Makefile
index 2efba47f0..352efb841 100644
--- a/openssl/crypto/buffer/Makefile
+++ b/openssl/crypto/buffer/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/buffer/buffer.c b/openssl/crypto/buffer/buffer.c
index d287e340a..eff3e0815 100644
--- a/openssl/crypto/buffer/buffer.c
+++ b/openssl/crypto/buffer/buffer.c
@@ -88,7 +88,7 @@ void BUF_MEM_free(BUF_MEM *a)
return;
if (a->data != NULL) {
- memset(a->data, 0, (unsigned int)a->max);
+ OPENSSL_cleanse(a->data, a->max);
OPENSSL_free(a->data);
}
OPENSSL_free(a);
diff --git a/openssl/crypto/camellia/Makefile b/openssl/crypto/camellia/Makefile
index 60e896054..ab1225e7d 100644
--- a/openssl/crypto/camellia/Makefile
+++ b/openssl/crypto/camellia/Makefile
@@ -75,6 +75,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/cast/Makefile b/openssl/crypto/cast/Makefile
index f3f485988..4c4b5e9ba 100644
--- a/openssl/crypto/cast/Makefile
+++ b/openssl/crypto/cast/Makefile
@@ -69,6 +69,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/cmac/Makefile b/openssl/crypto/cmac/Makefile
index 54e7cc39d..6a2840867 100644
--- a/openssl/crypto/cmac/Makefile
+++ b/openssl/crypto/cmac/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/cmac/cmac.c b/openssl/crypto/cmac/cmac.c
index c5597a3f7..774e6dc91 100644
--- a/openssl/crypto/cmac/cmac.c
+++ b/openssl/crypto/cmac/cmac.c
@@ -126,6 +126,8 @@ EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx)
void CMAC_CTX_free(CMAC_CTX *ctx)
{
+ if (!ctx)
+ return;
CMAC_CTX_cleanup(ctx);
OPENSSL_free(ctx);
}
diff --git a/openssl/crypto/cms/Makefile b/openssl/crypto/cms/Makefile
index 644fef399..6f3a83202 100644
--- a/openssl/crypto/cms/Makefile
+++ b/openssl/crypto/cms/Makefile
@@ -67,6 +67,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/cms/cms_kari.c b/openssl/crypto/cms/cms_kari.c
index f8a6cbadb..2cfcdb29c 100755
--- a/openssl/crypto/cms/cms_kari.c
+++ b/openssl/crypto/cms/cms_kari.c
@@ -66,6 +66,7 @@
DECLARE_ASN1_ITEM(CMS_KeyAgreeRecipientInfo)
DECLARE_ASN1_ITEM(CMS_RecipientEncryptedKey)
DECLARE_ASN1_ITEM(CMS_OriginatorPublicKey)
+DECLARE_ASN1_ITEM(CMS_RecipientKeyIdentifier)
/* Key Agreement Recipient Info (KARI) routines */
@@ -362,6 +363,9 @@ int cms_RecipientInfo_kari_init(CMS_RecipientInfo *ri, X509 *recip,
if (flags & CMS_USE_KEYID) {
rek->rid->type = CMS_REK_KEYIDENTIFIER;
+ rek->rid->d.rKeyId = M_ASN1_new_of(CMS_RecipientKeyIdentifier);
+ if (rek->rid->d.rKeyId == NULL)
+ return 0;
if (!cms_set1_keyid(&rek->rid->d.rKeyId->subjectKeyIdentifier, recip))
return 0;
} else {
diff --git a/openssl/crypto/cms/cms_pwri.c b/openssl/crypto/cms/cms_pwri.c
index 076b54578..a8322dcdf 100644
--- a/openssl/crypto/cms/cms_pwri.c
+++ b/openssl/crypto/cms/cms_pwri.c
@@ -231,7 +231,7 @@ static int kek_unwrap_key(unsigned char *out, size_t *outlen,
return 0;
}
tmp = OPENSSL_malloc(inlen);
- if(!tmp)
+ if (!tmp)
return 0;
/* setup IV by decrypting last two blocks */
EVP_DecryptUpdate(ctx, tmp + inlen - 2 * blocklen, &outl,
@@ -297,8 +297,9 @@ static int kek_wrap_key(unsigned char *out, size_t *outlen,
out[3] = in[2] ^ 0xFF;
memcpy(out + 4, in, inlen);
/* Add random padding to end */
- if (olen > inlen + 4)
- RAND_pseudo_bytes(out + 4 + inlen, olen - 4 - inlen);
+ if (olen > inlen + 4
+ && RAND_pseudo_bytes(out + 4 + inlen, olen - 4 - inlen) < 0)
+ return 0;
/* Encrypt twice */
EVP_EncryptUpdate(ctx, out, &dummy, out, olen);
EVP_EncryptUpdate(ctx, out, &dummy, out, olen);
diff --git a/openssl/crypto/cms/cms_smime.c b/openssl/crypto/cms/cms_smime.c
index 8729e3f9c..b39ed4899 100644
--- a/openssl/crypto/cms/cms_smime.c
+++ b/openssl/crypto/cms/cms_smime.c
@@ -132,7 +132,7 @@ static void do_free_upto(BIO *f, BIO *upto)
BIO_free(f);
f = tbio;
}
- while (f != upto);
+ while (f && f != upto);
} else
BIO_free_all(f);
}
diff --git a/openssl/crypto/comp/Makefile b/openssl/crypto/comp/Makefile
index efda832dc..a1e9464a1 100644
--- a/openssl/crypto/comp/Makefile
+++ b/openssl/crypto/comp/Makefile
@@ -64,6 +64,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/conf/Makefile b/openssl/crypto/conf/Makefile
index 78bb32410..d5f5c5824 100644
--- a/openssl/crypto/conf/Makefile
+++ b/openssl/crypto/conf/Makefile
@@ -64,6 +64,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/cryptlib.c b/openssl/crypto/cryptlib.c
index 78ee0c51f..0cb3d3d91 100755
--- a/openssl/crypto/cryptlib.c
+++ b/openssl/crypto/cryptlib.c
@@ -825,8 +825,6 @@ int OPENSSL_isservice(void)
if (_OPENSSL_isservice.p != (void *)-1)
return (*_OPENSSL_isservice.f) ();
- (void)GetDesktopWindow(); /* return value is ignored */
-
h = GetProcessWindowStation();
if (h == NULL)
return -1;
diff --git a/openssl/crypto/des/Makefile b/openssl/crypto/des/Makefile
index 060c64795..8b5166ca9 100644
--- a/openssl/crypto/des/Makefile
+++ b/openssl/crypto/des/Makefile
@@ -96,6 +96,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/des/des.c b/openssl/crypto/des/des.c
index 2bff28125..586aed723 100644
--- a/openssl/crypto/des/des.c
+++ b/openssl/crypto/des/des.c
@@ -455,8 +455,10 @@ void doencryption(void)
rem = l % 8;
len = l - rem;
if (feof(DES_IN)) {
- for (i = 7 - rem; i > 0; i--)
- RAND_pseudo_bytes(buf + l++, 1);
+ for (i = 7 - rem; i > 0; i--) {
+ if (RAND_pseudo_bytes(buf + l++, 1) < 0)
+ goto problems;
+ }
buf[l++] = rem;
ex = 1;
len += rem;
diff --git a/openssl/crypto/des/enc_writ.c b/openssl/crypto/des/enc_writ.c
index b4eecc381..bfaabde51 100644
--- a/openssl/crypto/des/enc_writ.c
+++ b/openssl/crypto/des/enc_writ.c
@@ -96,6 +96,9 @@ int DES_enc_write(int fd, const void *_buf, int len,
const unsigned char *cp;
static int start = 1;
+ if (len < 0)
+ return -1;
+
if (outbuf == NULL) {
outbuf = OPENSSL_malloc(BSIZE + HDRSIZE);
if (outbuf == NULL)
@@ -132,7 +135,9 @@ int DES_enc_write(int fd, const void *_buf, int len,
if (len < 8) {
cp = shortbuf;
memcpy(shortbuf, buf, len);
- RAND_pseudo_bytes(shortbuf + len, 8 - len);
+ if (RAND_pseudo_bytes(shortbuf + len, 8 - len) < 0) {
+ return -1;
+ }
rnum = 8;
} else {
cp = buf;
diff --git a/openssl/crypto/dh/Makefile b/openssl/crypto/dh/Makefile
index f44790782..46fa5ac57 100644
--- a/openssl/crypto/dh/Makefile
+++ b/openssl/crypto/dh/Makefile
@@ -63,6 +63,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/dh/dh_ameth.c b/openssl/crypto/dh/dh_ameth.c
index c6bfc2d3f..ac72468bd 100644
--- a/openssl/crypto/dh/dh_ameth.c
+++ b/openssl/crypto/dh/dh_ameth.c
@@ -160,7 +160,7 @@ static int dh_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
dh = pkey->pkey.dh;
str = ASN1_STRING_new();
- if(!str) {
+ if (!str) {
DHerr(DH_F_DH_PUB_ENCODE, ERR_R_MALLOC_FAILURE);
goto err;
}
diff --git a/openssl/crypto/dh/dh_pmeth.c b/openssl/crypto/dh/dh_pmeth.c
index b3a31472a..b58e3fa86 100644
--- a/openssl/crypto/dh/dh_pmeth.c
+++ b/openssl/crypto/dh/dh_pmeth.c
@@ -462,7 +462,7 @@ static int pkey_dh_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
ret = 0;
Zlen = DH_size(dh);
Z = OPENSSL_malloc(Zlen);
- if(!Z) {
+ if (!Z) {
goto err;
}
if (DH_compute_key_padded(Z, dhpub, dh) <= 0)
diff --git a/openssl/crypto/dsa/Makefile b/openssl/crypto/dsa/Makefile
index 5fef4ca5a..810920137 100644
--- a/openssl/crypto/dsa/Makefile
+++ b/openssl/crypto/dsa/Makefile
@@ -63,6 +63,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/dsa/dsa_gen.c b/openssl/crypto/dsa/dsa_gen.c
index 892003693..5a328aaab 100644
--- a/openssl/crypto/dsa/dsa_gen.c
+++ b/openssl/crypto/dsa/dsa_gen.c
@@ -204,7 +204,8 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits,
goto err;
if (!seed_len) {
- RAND_pseudo_bytes(seed, qsize);
+ if (RAND_pseudo_bytes(seed, qsize) < 0)
+ goto err;
seed_is_random = 1;
} else {
seed_is_random = 0;
diff --git a/openssl/crypto/dsa/dsa_ossl.c b/openssl/crypto/dsa/dsa_ossl.c
index 665f40a77..f0ec8faa8 100644
--- a/openssl/crypto/dsa/dsa_ossl.c
+++ b/openssl/crypto/dsa/dsa_ossl.c
@@ -106,23 +106,23 @@ static DSA_METHOD openssl_dsa_meth = {
#define DSA_MOD_EXP(err_instr,dsa,rr,a1,p1,a2,p2,m,ctx,in_mont) \
do { \
int _tmp_res53; \
- if((dsa)->meth->dsa_mod_exp) \
+ if ((dsa)->meth->dsa_mod_exp) \
_tmp_res53 = (dsa)->meth->dsa_mod_exp((dsa), (rr), (a1), (p1), \
(a2), (p2), (m), (ctx), (in_mont)); \
else \
_tmp_res53 = BN_mod_exp2_mont((rr), (a1), (p1), (a2), (p2), \
(m), (ctx), (in_mont)); \
- if(!_tmp_res53) err_instr; \
+ if (!_tmp_res53) err_instr; \
} while(0)
#define DSA_BN_MOD_EXP(err_instr,dsa,r,a,p,m,ctx,m_ctx) \
do { \
int _tmp_res53; \
- if((dsa)->meth->bn_mod_exp) \
+ if ((dsa)->meth->bn_mod_exp) \
_tmp_res53 = (dsa)->meth->bn_mod_exp((dsa), (r), (a), (p), \
(m), (ctx), (m_ctx)); \
else \
_tmp_res53 = BN_mod_exp_mont((r), (a), (p), (m), (ctx), (m_ctx)); \
- if(!_tmp_res53) err_instr; \
+ if (!_tmp_res53) err_instr; \
} while(0)
const DSA_METHOD *DSA_OpenSSL(void)
diff --git a/openssl/crypto/dso/Makefile b/openssl/crypto/dso/Makefile
index fb2709ed6..36b8ead04 100644
--- a/openssl/crypto/dso/Makefile
+++ b/openssl/crypto/dso/Makefile
@@ -63,6 +63,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/dso/dso_lib.c b/openssl/crypto/dso/dso_lib.c
index d2a48bb66..09b8eafcc 100644
--- a/openssl/crypto/dso/dso_lib.c
+++ b/openssl/crypto/dso/dso_lib.c
@@ -285,7 +285,7 @@ DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname)
* honest. For one thing, I think I have to return a negative value for any
* error because possible DSO_ctrl() commands may return values such as
* "size"s that can legitimately be zero (making the standard
- * "if(DSO_cmd(...))" form that works almost everywhere else fail at odd
+ * "if (DSO_cmd(...))" form that works almost everywhere else fail at odd
* times. I'd prefer "output" values to be passed by reference and the return
* value as success/failure like usual ... but we conform when we must... :-)
*/
diff --git a/openssl/crypto/dso/dso_vms.c b/openssl/crypto/dso/dso_vms.c
index 0eff96ec2..d0794b8fb 100644
--- a/openssl/crypto/dso/dso_vms.c
+++ b/openssl/crypto/dso/dso_vms.c
@@ -539,7 +539,7 @@ static char *vms_name_converter(DSO *dso, const char *filename)
{
int len = strlen(filename);
char *not_translated = OPENSSL_malloc(len + 1);
- if(not_translated)
+ if (not_translated)
strcpy(not_translated, filename);
return (not_translated);
}
diff --git a/openssl/crypto/ebcdic.c b/openssl/crypto/ebcdic.c
index 4b7652c0e..fd6df92b4 100644
--- a/openssl/crypto/ebcdic.c
+++ b/openssl/crypto/ebcdic.c
@@ -3,7 +3,7 @@
#ifndef CHARSET_EBCDIC
# include <openssl/e_os2.h>
-# if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX)
+# if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX) || defined(__clang__)
static void *dummy = &dummy;
# endif
diff --git a/openssl/crypto/ec/Makefile b/openssl/crypto/ec/Makefile
index 0d9f3ab25..359ef4e40 100644
--- a/openssl/crypto/ec/Makefile
+++ b/openssl/crypto/ec/Makefile
@@ -78,6 +78,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl b/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
index 5b21574a2..84379fce1 100755
--- a/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
+++ b/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
@@ -30,20 +30,24 @@
# Further optimization by <appro@openssl.org>:
#
-# this/original
-# Opteron +12-49%
-# Bulldozer +14-45%
-# P4 +18-46%
-# Westmere +12-34%
-# Sandy Bridge +9-35%
-# Ivy Bridge +9-35%
-# Haswell +8-37%
-# Broadwell +18-58%
-# Atom +15-50%
-# VIA Nano +43-160%
+# this/original with/without -DECP_NISTZ256_ASM(*)
+# Opteron +12-49% +110-150%
+# Bulldozer +14-45% +175-210%
+# P4 +18-46% n/a :-(
+# Westmere +12-34% +80-87%
+# Sandy Bridge +9-35% +110-120%
+# Ivy Bridge +9-35% +110-125%
+# Haswell +8-37% +140-160%
+# Broadwell +18-58% +145-210%
+# Atom +15-50% +130-180%
+# VIA Nano +43-160% +300-480%
+#
+# (*) "without -DECP_NISTZ256_ASM" refers to build with
+# "enable-ec_nistp_64_gcc_128";
#
# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark.
+# on benchmark. Lower coefficients are for ECDSA sign, relatively fastest
+# server-side operation. Keep in mind that +100% means 2x improvement.
$flavour = shift;
$output = shift;
diff --git a/openssl/crypto/ec/ec.h b/openssl/crypto/ec/ec.h
index 98edfdf8b..6d3178f60 100644
--- a/openssl/crypto/ec/ec.h
+++ b/openssl/crypto/ec/ec.h
@@ -1097,6 +1097,12 @@ void ERR_load_EC_strings(void);
# define EC_F_ECPARAMETERS_PRINT_FP 148
# define EC_F_ECPKPARAMETERS_PRINT 149
# define EC_F_ECPKPARAMETERS_PRINT_FP 150
+# define EC_F_ECP_NISTZ256_GET_AFFINE 240
+# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243
+# define EC_F_ECP_NISTZ256_POINTS_MUL 241
+# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244
+# define EC_F_ECP_NISTZ256_SET_WORDS 245
+# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242
# define EC_F_ECP_NIST_MOD_192 203
# define EC_F_ECP_NIST_MOD_224 204
# define EC_F_ECP_NIST_MOD_256 205
@@ -1208,11 +1214,6 @@ void ERR_load_EC_strings(void);
# define EC_F_NISTP224_PRE_COMP_NEW 227
# define EC_F_NISTP256_PRE_COMP_NEW 236
# define EC_F_NISTP521_PRE_COMP_NEW 237
-# define EC_F_ECP_NISTZ256_GET_AFFINE 240
-# define EC_F_ECP_NISTZ256_POINTS_MUL 241
-# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242
-# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243
-# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244
# define EC_F_O2I_ECPUBLICKEY 152
# define EC_F_OLD_EC_PRIV_DECODE 222
# define EC_F_PKEY_EC_CTRL 197
diff --git a/openssl/crypto/ec/ec2_oct.c b/openssl/crypto/ec/ec2_oct.c
index c245d886d..0d04cc692 100644
--- a/openssl/crypto/ec/ec2_oct.c
+++ b/openssl/crypto/ec/ec2_oct.c
@@ -387,7 +387,7 @@ int ec_GF2m_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
}
/* test required by X9.62 */
- if (!EC_POINT_is_on_curve(group, point, ctx)) {
+ if (EC_POINT_is_on_curve(group, point, ctx) <= 0) {
ECerr(EC_F_EC_GF2M_SIMPLE_OCT2POINT, EC_R_POINT_IS_NOT_ON_CURVE);
goto err;
}
diff --git a/openssl/crypto/ec/ec_asn1.c b/openssl/crypto/ec/ec_asn1.c
index b4b0e9f3b..4ad849498 100644
--- a/openssl/crypto/ec/ec_asn1.c
+++ b/openssl/crypto/ec/ec_asn1.c
@@ -1114,7 +1114,7 @@ int i2d_ECPrivateKey(EC_KEY *a, unsigned char **out)
{
int ret = 0, ok = 0;
unsigned char *buffer = NULL;
- size_t buf_len = 0, tmp_len;
+ size_t buf_len = 0, tmp_len, bn_len;
EC_PRIVATEKEY *priv_key = NULL;
if (a == NULL || a->group == NULL || a->priv_key == NULL ||
@@ -1130,18 +1130,32 @@ int i2d_ECPrivateKey(EC_KEY *a, unsigned char **out)
priv_key->version = a->version;
- buf_len = (size_t)BN_num_bytes(a->priv_key);
+ bn_len = (size_t)BN_num_bytes(a->priv_key);
+
+ /* Octetstring may need leading zeros if BN is to short */
+
+ buf_len = (EC_GROUP_get_degree(a->group) + 7) / 8;
+
+ if (bn_len > buf_len) {
+ ECerr(EC_F_I2D_ECPRIVATEKEY, EC_R_BUFFER_TOO_SMALL);
+ goto err;
+ }
+
buffer = OPENSSL_malloc(buf_len);
if (buffer == NULL) {
ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_MALLOC_FAILURE);
goto err;
}
- if (!BN_bn2bin(a->priv_key, buffer)) {
+ if (!BN_bn2bin(a->priv_key, buffer + buf_len - bn_len)) {
ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_BN_LIB);
goto err;
}
+ if (buf_len - bn_len > 0) {
+ memset(buffer, 0, buf_len - bn_len);
+ }
+
if (!M_ASN1_OCTET_STRING_set(priv_key->privateKey, buffer, buf_len)) {
ECerr(EC_F_I2D_ECPRIVATEKEY, ERR_R_ASN1_LIB);
goto err;
diff --git a/openssl/crypto/ec/ec_check.c b/openssl/crypto/ec/ec_check.c
index d3f534999..dd6f0ac40 100644
--- a/openssl/crypto/ec/ec_check.c
+++ b/openssl/crypto/ec/ec_check.c
@@ -85,7 +85,7 @@ int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx)
ECerr(EC_F_EC_GROUP_CHECK, EC_R_UNDEFINED_GENERATOR);
goto err;
}
- if (!EC_POINT_is_on_curve(group, group->generator, ctx)) {
+ if (EC_POINT_is_on_curve(group, group->generator, ctx) <= 0) {
ECerr(EC_F_EC_GROUP_CHECK, EC_R_POINT_IS_NOT_ON_CURVE);
goto err;
}
diff --git a/openssl/crypto/ec/ec_err.c b/openssl/crypto/ec/ec_err.c
index 13b32c78a..6fe5baafd 100644
--- a/openssl/crypto/ec/ec_err.c
+++ b/openssl/crypto/ec/ec_err.c
@@ -1,6 +1,6 @@
/* crypto/ec/ec_err.c */
/* ====================================================================
- * Copyright (c) 1999-2014 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -89,6 +89,13 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_ECPARAMETERS_PRINT_FP), "ECParameters_print_fp"},
{ERR_FUNC(EC_F_ECPKPARAMETERS_PRINT), "ECPKParameters_print"},
{ERR_FUNC(EC_F_ECPKPARAMETERS_PRINT_FP), "ECPKParameters_print_fp"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_GET_AFFINE), "ecp_nistz256_get_affine"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE),
+ "ecp_nistz256_mult_precompute"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_POINTS_MUL), "ecp_nistz256_points_mul"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_PRE_COMP_NEW), "ecp_nistz256_pre_comp_new"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_SET_WORDS), "ecp_nistz256_set_words"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_WINDOWED_MUL), "ecp_nistz256_windowed_mul"},
{ERR_FUNC(EC_F_ECP_NIST_MOD_192), "ECP_NIST_MOD_192"},
{ERR_FUNC(EC_F_ECP_NIST_MOD_224), "ECP_NIST_MOD_224"},
{ERR_FUNC(EC_F_ECP_NIST_MOD_256), "ECP_NIST_MOD_256"},
@@ -239,12 +246,6 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_NISTP224_PRE_COMP_NEW), "NISTP224_PRE_COMP_NEW"},
{ERR_FUNC(EC_F_NISTP256_PRE_COMP_NEW), "NISTP256_PRE_COMP_NEW"},
{ERR_FUNC(EC_F_NISTP521_PRE_COMP_NEW), "NISTP521_PRE_COMP_NEW"},
- {ERR_FUNC(EC_F_ECP_NISTZ256_GET_AFFINE), "ecp_nistz256_get_affine"},
- {ERR_FUNC(EC_F_ECP_NISTZ256_POINTS_MUL), "ecp_nistz256_points_mul"},
- {ERR_FUNC(EC_F_ECP_NISTZ256_WINDOWED_MUL), "ecp_nistz256_windowed_mul"},
- {ERR_FUNC(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE),
- "ecp_nistz256_mult_precompute"},
- {ERR_FUNC(EC_F_ECP_NISTZ256_PRE_COMP_NEW), "ecp_nistz256_pre_comp_new"},
{ERR_FUNC(EC_F_O2I_ECPUBLICKEY), "o2i_ECPublicKey"},
{ERR_FUNC(EC_F_OLD_EC_PRIV_DECODE), "OLD_EC_PRIV_DECODE"},
{ERR_FUNC(EC_F_PKEY_EC_CTRL), "PKEY_EC_CTRL"},
diff --git a/openssl/crypto/ec/ec_key.c b/openssl/crypto/ec/ec_key.c
index ebdffc821..55ce3fe9b 100644
--- a/openssl/crypto/ec/ec_key.c
+++ b/openssl/crypto/ec/ec_key.c
@@ -314,7 +314,7 @@ int EC_KEY_check_key(const EC_KEY *eckey)
goto err;
/* testing whether the pub_key is on the elliptic curve */
- if (!EC_POINT_is_on_curve(eckey->group, eckey->pub_key, ctx)) {
+ if (EC_POINT_is_on_curve(eckey->group, eckey->pub_key, ctx) <= 0) {
ECerr(EC_F_EC_KEY_CHECK_KEY, EC_R_POINT_IS_NOT_ON_CURVE);
goto err;
}
diff --git a/openssl/crypto/ec/ec_lcl.h b/openssl/crypto/ec/ec_lcl.h
index 697eeb528..969fd147e 100644
--- a/openssl/crypto/ec/ec_lcl.h
+++ b/openssl/crypto/ec/ec_lcl.h
@@ -459,14 +459,6 @@ int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r,
int ec_GF2m_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
int ec_GF2m_have_precompute_mult(const EC_GROUP *group);
-/* method functions in ec2_mult.c */
-int ec_GF2m_simple_mul(const EC_GROUP *group, EC_POINT *r,
- const BIGNUM *scalar, size_t num,
- const EC_POINT *points[], const BIGNUM *scalars[],
- BN_CTX *);
-int ec_GF2m_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
-int ec_GF2m_have_precompute_mult(const EC_GROUP *group);
-
#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
/* method functions in ecp_nistp224.c */
int ec_GFp_nistp224_group_init(EC_GROUP *group);
diff --git a/openssl/crypto/ec/ec_lib.c b/openssl/crypto/ec/ec_lib.c
index 6ffd9fc16..3ffa112cc 100644
--- a/openssl/crypto/ec/ec_lib.c
+++ b/openssl/crypto/ec/ec_lib.c
@@ -970,6 +970,13 @@ int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *point)
return group->meth->is_at_infinity(group, point);
}
+/*
+ * Check whether an EC_POINT is on the curve or not. Note that the return
+ * value for this function should NOT be treated as a boolean. Return values:
+ * 1: The point is on the curve
+ * 0: The point is not on the curve
+ * -1: An error occurred
+ */
int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
BN_CTX *ctx)
{
diff --git a/openssl/crypto/ec/eck_prn.c b/openssl/crypto/ec/eck_prn.c
index 515b26238..df9b37a75 100644
--- a/openssl/crypto/ec/eck_prn.c
+++ b/openssl/crypto/ec/eck_prn.c
@@ -346,12 +346,14 @@ static int print_bin(BIO *fp, const char *name, const unsigned char *buf,
if (buf == NULL)
return 1;
- if (off) {
+ if (off > 0) {
if (off > 128)
off = 128;
memset(str, ' ', off);
if (BIO_write(fp, str, off) <= 0)
return 0;
+ } else {
+ off = 0;
}
if (BIO_printf(fp, "%s", name) <= 0)
diff --git a/openssl/crypto/ec/ecp_nistz256.c b/openssl/crypto/ec/ecp_nistz256.c
index 2cd6599d8..ca44d0aae 100755
--- a/openssl/crypto/ec/ecp_nistz256.c
+++ b/openssl/crypto/ec/ecp_nistz256.c
@@ -222,6 +222,18 @@ static BN_ULONG is_one(const BN_ULONG a[P256_LIMBS])
return is_zero(res);
}
+static int ecp_nistz256_set_words(BIGNUM *a, BN_ULONG words[P256_LIMBS])
+ {
+ if (bn_wexpand(a, P256_LIMBS) == NULL) {
+ ECerr(EC_F_ECP_NISTZ256_SET_WORDS, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ memcpy(a->d, words, sizeof(BN_ULONG) * P256_LIMBS);
+ a->top = P256_LIMBS;
+ bn_correct_top(a);
+ return 1;
+}
+
#ifndef ECP_NISTZ256_REFERENCE_IMPLEMENTATION
void ecp_nistz256_point_double(P256_POINT *r, const P256_POINT *a);
void ecp_nistz256_point_add(P256_POINT *r,
@@ -557,13 +569,14 @@ static int ecp_nistz256_bignum_to_field_elem(BN_ULONG out[P256_LIMBS],
}
/* r = sum(scalar[i]*point[i]) */
-static void ecp_nistz256_windowed_mul(const EC_GROUP *group,
+static int ecp_nistz256_windowed_mul(const EC_GROUP *group,
P256_POINT *r,
const BIGNUM **scalar,
const EC_POINT **point,
int num, BN_CTX *ctx)
{
- int i, j;
+
+ int i, j, ret = 0;
unsigned int index;
unsigned char (*p_str)[33] = NULL;
const unsigned int window_size = 5;
@@ -589,6 +602,7 @@ static void ecp_nistz256_windowed_mul(const EC_GROUP *group,
for (i = 0; i < num; i++) {
P256_POINT *row = table[i];
+ /* This is an unusual input, we don't guarantee constant-timeness. */
if ((BN_num_bits(scalar[i]) > 256) || BN_is_negative(scalar[i])) {
BIGNUM *mod;
@@ -697,6 +711,7 @@ static void ecp_nistz256_windowed_mul(const EC_GROUP *group,
ecp_nistz256_point_add(r, r, &h);
}
+ ret = 1;
err:
if (table_storage)
OPENSSL_free(table_storage);
@@ -704,6 +719,7 @@ static void ecp_nistz256_windowed_mul(const EC_GROUP *group,
OPENSSL_free(p_str);
if (scalars)
OPENSSL_free(scalars);
+ return ret;
}
/* Coordinates of G, for which we have precomputed tables */
@@ -742,6 +758,7 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
EC_POINT *P = NULL, *T = NULL;
const EC_POINT *generator;
EC_PRE_COMP *pre_comp;
+ BN_CTX *new_ctx = NULL;
int i, j, k, ret = 0;
size_t w;
@@ -771,7 +788,7 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
return 0;
if (ctx == NULL) {
- ctx = BN_CTX_new();
+ ctx = new_ctx = BN_CTX_new();
if (ctx == NULL)
goto err;
}
@@ -802,30 +819,41 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
P = EC_POINT_new(group);
T = EC_POINT_new(group);
+ if (P == NULL || T == NULL)
+ goto err;
/*
* The zero entry is implicitly infinity, and we skip it, storing other
* values with -1 offset.
*/
- EC_POINT_copy(T, generator);
+ if (!EC_POINT_copy(T, generator))
+ goto err;
for (k = 0; k < 64; k++) {
- EC_POINT_copy(P, T);
+ if (!EC_POINT_copy(P, T))
+ goto err;
for (j = 0; j < 37; j++) {
/*
- * It would be faster to use
- * ec_GFp_simple_points_make_affine and make multiple
- * points affine at the same time.
+ * It would be faster to use EC_POINTs_make_affine and
+ * make multiple points affine at the same time.
*/
- ec_GFp_simple_make_affine(group, P, ctx);
- ecp_nistz256_bignum_to_field_elem(preComputedTable[j]
- [k].X, &P->X);
- ecp_nistz256_bignum_to_field_elem(preComputedTable[j]
- [k].Y, &P->Y);
- for (i = 0; i < 7; i++)
- ec_GFp_simple_dbl(group, P, P, ctx);
+ if (!EC_POINT_make_affine(group, P, ctx))
+ goto err;
+ if (!ecp_nistz256_bignum_to_field_elem(preComputedTable[j][k].X,
+ &P->X) ||
+ !ecp_nistz256_bignum_to_field_elem(preComputedTable[j][k].Y,
+ &P->Y)) {
+ ECerr(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE,
+ EC_R_COORDINATES_OUT_OF_RANGE);
+ goto err;
+ }
+ for (i = 0; i < 7; i++) {
+ if (!EC_POINT_dbl(group, P, P, ctx))
+ goto err;
+ }
}
- ec_GFp_simple_add(group, T, T, generator, ctx);
+ if (!EC_POINT_add(group, T, T, generator, ctx))
+ goto err;
}
pre_comp->group = group;
@@ -849,6 +877,8 @@ static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
err:
if (ctx != NULL)
BN_CTX_end(ctx);
+ BN_CTX_free(new_ctx);
+
if (pre_comp)
ecp_nistz256_pre_comp_free(pre_comp);
if (precomp_storage)
@@ -1102,6 +1132,9 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group,
const EC_PRE_COMP *pre_comp = NULL;
const EC_POINT *generator = NULL;
unsigned int index = 0;
+ BN_CTX *new_ctx = NULL;
+ const BIGNUM **new_scalars = NULL;
+ const EC_POINT **new_points = NULL;
const unsigned int window_size = 7;
const unsigned int mask = (1 << (window_size + 1)) - 1;
unsigned int wvalue;
@@ -1115,6 +1148,7 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group,
ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, EC_R_INCOMPATIBLE_OBJECTS);
return 0;
}
+
if ((scalar == NULL) && (num == 0))
return EC_POINT_set_to_infinity(group, r);
@@ -1125,13 +1159,13 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group,
}
}
- /* Need 256 bits for space for all coordinates. */
- bn_wexpand(&r->X, P256_LIMBS);
- bn_wexpand(&r->Y, P256_LIMBS);
- bn_wexpand(&r->Z, P256_LIMBS);
- r->X.top = P256_LIMBS;
- r->Y.top = P256_LIMBS;
- r->Z.top = P256_LIMBS;
+ if (ctx == NULL) {
+ ctx = new_ctx = BN_CTX_new();
+ if (ctx == NULL)
+ goto err;
+ }
+
+ BN_CTX_start(ctx);
if (scalar) {
generator = EC_GROUP_get0_generator(group);
@@ -1156,8 +1190,10 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group,
goto err;
if (!ecp_nistz256_set_from_affine
- (pre_comp_generator, group, pre_comp->precomp[0], ctx))
+ (pre_comp_generator, group, pre_comp->precomp[0], ctx)) {
+ EC_POINT_free(pre_comp_generator);
goto err;
+ }
if (0 == EC_POINT_cmp(group, generator, pre_comp_generator, ctx))
preComputedTable = (const PRECOMP256_ROW *)pre_comp->precomp;
@@ -1255,20 +1291,16 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group,
* Without a precomputed table for the generator, it has to be
* handled like a normal point.
*/
- const BIGNUM **new_scalars;
- const EC_POINT **new_points;
-
new_scalars = OPENSSL_malloc((num + 1) * sizeof(BIGNUM *));
if (!new_scalars) {
ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, ERR_R_MALLOC_FAILURE);
- return 0;
+ goto err;
}
new_points = OPENSSL_malloc((num + 1) * sizeof(EC_POINT *));
if (!new_points) {
- OPENSSL_free(new_scalars);
ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, ERR_R_MALLOC_FAILURE);
- return 0;
+ goto err;
}
memcpy(new_scalars, scalars, num * sizeof(BIGNUM *));
@@ -1286,27 +1318,31 @@ static int ecp_nistz256_points_mul(const EC_GROUP *group,
if (p_is_infinity)
out = &p.p;
- ecp_nistz256_windowed_mul(group, out, scalars, points, num, ctx);
+ if (!ecp_nistz256_windowed_mul(group, out, scalars, points, num, ctx))
+ goto err;
if (!p_is_infinity)
ecp_nistz256_point_add(&p.p, &p.p, out);
}
- if (no_precomp_for_generator) {
- OPENSSL_free(points);
- OPENSSL_free(scalars);
+ /* Not constant-time, but we're only operating on the public output. */
+ if (!ecp_nistz256_set_words(&r->X, p.p.X) ||
+ !ecp_nistz256_set_words(&r->Y, p.p.Y) ||
+ !ecp_nistz256_set_words(&r->Z, p.p.Z)) {
+ goto err;
}
-
- memcpy(r->X.d, p.p.X, sizeof(p.p.X));
- memcpy(r->Y.d, p.p.Y, sizeof(p.p.Y));
- memcpy(r->Z.d, p.p.Z, sizeof(p.p.Z));
- bn_correct_top(&r->X);
- bn_correct_top(&r->Y);
- bn_correct_top(&r->Z);
+ r->Z_is_one = is_one(p.p.Z) & 1;
ret = 1;
- err:
+err:
+ if (ctx)
+ BN_CTX_end(ctx);
+ BN_CTX_free(new_ctx);
+ if (new_points)
+ OPENSSL_free(new_points);
+ if (new_scalars)
+ OPENSSL_free(new_scalars);
return ret;
}
@@ -1319,6 +1355,7 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group,
BN_ULONG x_aff[P256_LIMBS];
BN_ULONG y_aff[P256_LIMBS];
BN_ULONG point_x[P256_LIMBS], point_y[P256_LIMBS], point_z[P256_LIMBS];
+ BN_ULONG x_ret[P256_LIMBS], y_ret[P256_LIMBS];
if (EC_POINT_is_at_infinity(group, point)) {
ECerr(EC_F_ECP_NISTZ256_GET_AFFINE, EC_R_POINT_AT_INFINITY);
@@ -1337,19 +1374,17 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group,
ecp_nistz256_mul_mont(x_aff, z_inv2, point_x);
if (x != NULL) {
- bn_wexpand(x, P256_LIMBS);
- x->top = P256_LIMBS;
- ecp_nistz256_from_mont(x->d, x_aff);
- bn_correct_top(x);
+ ecp_nistz256_from_mont(x_ret, x_aff);
+ if (!ecp_nistz256_set_words(x, x_ret))
+ return 0;
}
if (y != NULL) {
ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2);
ecp_nistz256_mul_mont(y_aff, z_inv3, point_y);
- bn_wexpand(y, P256_LIMBS);
- y->top = P256_LIMBS;
- ecp_nistz256_from_mont(y->d, y_aff);
- bn_correct_top(y);
+ ecp_nistz256_from_mont(y_ret, y_aff);
+ if (!ecp_nistz256_set_words(y, y_ret))
+ return 0;
}
return 1;
diff --git a/openssl/crypto/ec/ecp_oct.c b/openssl/crypto/ec/ecp_oct.c
index e5cec8be8..1bc3f39ad 100644
--- a/openssl/crypto/ec/ecp_oct.c
+++ b/openssl/crypto/ec/ecp_oct.c
@@ -413,7 +413,7 @@ int ec_GFp_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
}
/* test required by X9.62 */
- if (!EC_POINT_is_on_curve(group, point, ctx)) {
+ if (EC_POINT_is_on_curve(group, point, ctx) <= 0) {
ECerr(EC_F_EC_GFP_SIMPLE_OCT2POINT, EC_R_POINT_IS_NOT_ON_CURVE);
goto err;
}
diff --git a/openssl/crypto/ec/ectest.c b/openssl/crypto/ec/ectest.c
index a18b32761..fede530bc 100644
--- a/openssl/crypto/ec/ectest.c
+++ b/openssl/crypto/ec/ectest.c
@@ -412,7 +412,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_compressed_coordinates_GFp(group, Q, x, 1, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, Q, ctx)) {
+ if (EC_POINT_is_on_curve(group, Q, ctx) <= 0) {
if (!EC_POINT_get_affine_coordinates_GFp(group, Q, x, y, ctx))
ABORT;
fprintf(stderr, "Point is not on curve: x = 0x");
@@ -544,7 +544,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!BN_hex2bn(&z, "0100000000000000000001F4C8F927AED3CA752257"))
ABORT;
@@ -593,7 +593,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"))
ABORT;
@@ -646,7 +646,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!BN_hex2bn
(&z, "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"))
@@ -705,7 +705,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!BN_hex2bn(&z, "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E"
"84F3B9CAC2FC632551"))
@@ -761,7 +761,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"))
@@ -820,7 +820,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!BN_hex2bn(&z, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5"
@@ -864,7 +864,7 @@ static void prime_field_tests(void)
ABORT;
if (!EC_POINT_dbl(group, P, P, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!EC_POINT_invert(group, Q, ctx))
ABORT; /* P = -2Q */
@@ -1008,7 +1008,7 @@ static void prime_field_tests(void)
# define CHAR2_CURVE_TEST_INTERNAL(_name, _p, _a, _b, _x, _y, _y_bit, _order, _cof, _degree, _variable) \
if (!BN_hex2bn(&x, _x)) ABORT; \
if (!EC_POINT_set_compressed_coordinates_GF2m(group, P, x, _y_bit, ctx)) ABORT; \
- if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; \
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0) ABORT; \
if (!BN_hex2bn(&z, _order)) ABORT; \
if (!BN_hex2bn(&cof, _cof)) ABORT; \
if (!EC_GROUP_set_generator(group, P, z, cof)) ABORT; \
@@ -1026,7 +1026,7 @@ static void prime_field_tests(void)
if (!BN_hex2bn(&x, _x)) ABORT; \
if (!BN_hex2bn(&y, _y)) ABORT; \
if (!EC_POINT_set_affine_coordinates_GF2m(group, P, x, y, ctx)) ABORT; \
- if (!EC_POINT_is_on_curve(group, P, ctx)) ABORT; \
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0) ABORT; \
if (!BN_hex2bn(&z, _order)) ABORT; \
if (!BN_hex2bn(&cof, _cof)) ABORT; \
if (!EC_GROUP_set_generator(group, P, z, cof)) ABORT; \
@@ -1157,7 +1157,7 @@ static void char2_field_tests(void)
if (!EC_POINT_set_affine_coordinates_GF2m(group, Q, x, y, ctx))
ABORT;
# endif
- if (!EC_POINT_is_on_curve(group, Q, ctx)) {
+ if (EC_POINT_is_on_curve(group, Q, ctx) <= 0) {
/* Change test based on whether binary point compression is enabled or not. */
# ifdef OPENSSL_EC_BIN_PT_COMP
if (!EC_POINT_get_affine_coordinates_GF2m(group, Q, x, y, ctx))
@@ -1378,7 +1378,7 @@ static void char2_field_tests(void)
ABORT;
if (!EC_POINT_dbl(group, P, P, ctx))
ABORT;
- if (!EC_POINT_is_on_curve(group, P, ctx))
+ if (EC_POINT_is_on_curve(group, P, ctx) <= 0)
ABORT;
if (!EC_POINT_invert(group, Q, ctx))
ABORT; /* P = -2Q */
diff --git a/openssl/crypto/ecdh/Makefile b/openssl/crypto/ecdh/Makefile
index df1b03adb..1b31ba1f0 100644
--- a/openssl/crypto/ecdh/Makefile
+++ b/openssl/crypto/ecdh/Makefile
@@ -62,6 +62,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/ecdsa/Makefile b/openssl/crypto/ecdsa/Makefile
index e89e0c010..4ce00e8f9 100644
--- a/openssl/crypto/ecdsa/Makefile
+++ b/openssl/crypto/ecdsa/Makefile
@@ -62,6 +62,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/ecdsa/ecdsatest.c b/openssl/crypto/ecdsa/ecdsatest.c
index b2d78f3d5..0f301f86d 100644
--- a/openssl/crypto/ecdsa/ecdsatest.c
+++ b/openssl/crypto/ecdsa/ecdsatest.c
@@ -296,8 +296,8 @@ int test_builtin(BIO *out)
int nid, ret = 0;
/* fill digest values with some random data */
- if (!RAND_pseudo_bytes(digest, 20) ||
- !RAND_pseudo_bytes(wrong_digest, 20)) {
+ if (RAND_pseudo_bytes(digest, 20) <= 0 ||
+ RAND_pseudo_bytes(wrong_digest, 20) <= 0) {
BIO_printf(out, "ERROR: unable to get random data\n");
goto builtin_err;
}
diff --git a/openssl/crypto/engine/Makefile b/openssl/crypto/engine/Makefile
index 2ee6c7236..426388e9b 100644
--- a/openssl/crypto/engine/Makefile
+++ b/openssl/crypto/engine/Makefile
@@ -71,6 +71,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/err/Makefile b/openssl/crypto/err/Makefile
index 862b23ba1..b6f3ef177 100644
--- a/openssl/crypto/err/Makefile
+++ b/openssl/crypto/err/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/evp/Makefile b/openssl/crypto/evp/Makefile
index c9afca7cb..aaaad986e 100644
--- a/openssl/crypto/evp/Makefile
+++ b/openssl/crypto/evp/Makefile
@@ -86,6 +86,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/evp/bio_ok.c b/openssl/crypto/evp/bio_ok.c
index a4550349b..5c32e35e1 100644
--- a/openssl/crypto/evp/bio_ok.c
+++ b/openssl/crypto/evp/bio_ok.c
@@ -491,7 +491,8 @@ static int sig_out(BIO *b)
* FIXME: there's absolutely no guarantee this makes any sense at all,
* particularly now EVP_MD_CTX has been restructured.
*/
- RAND_pseudo_bytes(md->md_data, md->digest->md_size);
+ if (RAND_pseudo_bytes(md->md_data, md->digest->md_size) < 0)
+ goto berr;
memcpy(&(ctx->buf[ctx->buf_len]), md->md_data, md->digest->md_size);
longswap(&(ctx->buf[ctx->buf_len]), md->digest->md_size);
ctx->buf_len += md->digest->md_size;
diff --git a/openssl/crypto/evp/e_aes.c b/openssl/crypto/evp/e_aes.c
index 8161b2632..33cbed87f 100644
--- a/openssl/crypto/evp/e_aes.c
+++ b/openssl/crypto/evp/e_aes.c
@@ -50,6 +50,7 @@
#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_AES
+#include <openssl/crypto.h>
# include <openssl/evp.h>
# include <openssl/err.h>
# include <string.h>
@@ -1227,7 +1228,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
case EVP_CTRL_AEAD_TLS1_AAD:
/* Save the AAD for later use */
- if (arg != 13)
+ if (arg != EVP_AEAD_TLS1_AAD_LEN)
return 0;
memcpy(c->buf, ptr, arg);
gctx->tls_aad_len = arg;
@@ -1455,7 +1456,7 @@ static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
/* Retrieve tag */
CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, EVP_GCM_TLS_TAG_LEN);
/* If tag mismatch wipe buffer */
- if (memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) {
+ if (CRYPTO_memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) {
OPENSSL_cleanse(out, len);
goto err;
}
@@ -1895,7 +1896,7 @@ static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
!CRYPTO_ccm128_decrypt(ccm, in, out, len)) {
unsigned char tag[16];
if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) {
- if (!memcmp(tag, ctx->buf, cctx->M))
+ if (!CRYPTO_memcmp(tag, ctx->buf, cctx->M))
rv = len;
}
}
diff --git a/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c b/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
index e0127a9bb..8330964ee 100644
--- a/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
+++ b/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
@@ -94,7 +94,7 @@ typedef struct {
defined(_M_AMD64) || defined(_M_X64) || \
defined(__INTEL__) )
-extern unsigned int OPENSSL_ia32cap_P[3];
+extern unsigned int OPENSSL_ia32cap_P[];
# define AESNI_CAPABLE (1<<(57-32))
int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
@@ -845,7 +845,12 @@ static int aesni_cbc_hmac_sha1_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
case EVP_CTRL_AEAD_TLS1_AAD:
{
unsigned char *p = ptr;
- unsigned int len = p[arg - 2] << 8 | p[arg - 1];
+ unsigned int len;
+
+ if (arg != EVP_AEAD_TLS1_AAD_LEN)
+ return -1;
+
+ len = p[arg - 2] << 8 | p[arg - 1];
if (ctx->encrypt) {
key->payload_length = len;
@@ -862,8 +867,6 @@ static int aesni_cbc_hmac_sha1_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
AES_BLOCK_SIZE) & -AES_BLOCK_SIZE)
- len);
} else {
- if (arg > 13)
- arg = 13;
memcpy(key->aux.tls_aad, ptr, arg);
key->payload_length = arg;
diff --git a/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c b/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c
index 30398c7ca..b1c586e6f 100755
--- a/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c
+++ b/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c
@@ -94,7 +94,7 @@ typedef struct {
defined(_M_AMD64) || defined(_M_X64) || \
defined(__INTEL__) )
-extern unsigned int OPENSSL_ia32cap_P[3];
+extern unsigned int OPENSSL_ia32cap_P[];
# define AESNI_CAPABLE (1<<(57-32))
int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
@@ -813,6 +813,11 @@ static int aesni_cbc_hmac_sha256_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
unsigned char *p = ptr;
unsigned int len = p[arg - 2] << 8 | p[arg - 1];
+ if (arg != EVP_AEAD_TLS1_AAD_LEN)
+ return -1;
+
+ len = p[arg - 2] << 8 | p[arg - 1];
+
if (ctx->encrypt) {
key->payload_length = len;
if ((key->aux.tls_ver =
@@ -828,8 +833,6 @@ static int aesni_cbc_hmac_sha256_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
AES_BLOCK_SIZE) & -AES_BLOCK_SIZE)
- len);
} else {
- if (arg > 13)
- arg = 13;
memcpy(key->aux.tls_aad, ptr, arg);
key->payload_length = arg;
diff --git a/openssl/crypto/evp/e_des3.c b/openssl/crypto/evp/e_des3.c
index 301d93e13..96f272eb8 100644
--- a/openssl/crypto/evp/e_des3.c
+++ b/openssl/crypto/evp/e_des3.c
@@ -447,7 +447,8 @@ static int des_ede3_wrap(EVP_CIPHER_CTX *ctx, unsigned char *out,
memcpy(out + inl + 8, sha1tmp, 8);
OPENSSL_cleanse(sha1tmp, SHA_DIGEST_LENGTH);
/* Generate random IV */
- RAND_bytes(ctx->iv, 8);
+ if (RAND_bytes(ctx->iv, 8) <= 0)
+ return -1;
memcpy(out, ctx->iv, 8);
/* Encrypt everything after IV in place */
des_ede_cbc_cipher(ctx, out + 8, out + 8, inl + 8);
diff --git a/openssl/crypto/evp/e_rc4_hmac_md5.c b/openssl/crypto/evp/e_rc4_hmac_md5.c
index 80735d345..2da111782 100644
--- a/openssl/crypto/evp/e_rc4_hmac_md5.c
+++ b/openssl/crypto/evp/e_rc4_hmac_md5.c
@@ -54,6 +54,7 @@
#if !defined(OPENSSL_NO_RC4) && !defined(OPENSSL_NO_MD5)
+# include <openssl/crypto.h>
# include <openssl/evp.h>
# include <openssl/objects.h>
# include <openssl/rc4.h>
@@ -210,7 +211,7 @@ static int rc4_hmac_md5_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
MD5_Update(&key->md, mac, MD5_DIGEST_LENGTH);
MD5_Final(mac, &key->md);
- if (memcmp(out + plen, mac, MD5_DIGEST_LENGTH))
+ if (CRYPTO_memcmp(out + plen, mac, MD5_DIGEST_LENGTH))
return 0;
} else {
MD5_Update(&key->md, out + md5_off, len - md5_off);
@@ -258,7 +259,12 @@ static int rc4_hmac_md5_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
case EVP_CTRL_AEAD_TLS1_AAD:
{
unsigned char *p = ptr;
- unsigned int len = p[arg - 2] << 8 | p[arg - 1];
+ unsigned int len;
+
+ if (arg != EVP_AEAD_TLS1_AAD_LEN)
+ return -1;
+
+ len = p[arg - 2] << 8 | p[arg - 1];
if (!ctx->encrypt) {
len -= MD5_DIGEST_LENGTH;
diff --git a/openssl/crypto/evp/encode.c b/openssl/crypto/evp/encode.c
index d1d8a07c1..c361d1f01 100644
--- a/openssl/crypto/evp/encode.c
+++ b/openssl/crypto/evp/encode.c
@@ -137,7 +137,7 @@ void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
unsigned int total = 0;
*outl = 0;
- if (inl == 0)
+ if (inl <= 0)
return;
OPENSSL_assert(ctx->length <= (int)sizeof(ctx->enc_data));
if ((ctx->num + inl) < ctx->length) {
@@ -248,7 +248,7 @@ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
/* We parse the input data */
for (i = 0; i < inl; i++) {
- /* If the current line is > 80 characters, scream alot */
+ /* If the current line is > 80 characters, scream a lot */
if (ln >= 80) {
rv = -1;
goto end;
diff --git a/openssl/crypto/evp/evp.h b/openssl/crypto/evp/evp.h
index 47abbac4a..39ab7937d 100644
--- a/openssl/crypto/evp/evp.h
+++ b/openssl/crypto/evp/evp.h
@@ -103,7 +103,6 @@
# define EVP_PKS_RSA 0x0100
# define EVP_PKS_DSA 0x0200
# define EVP_PKS_EC 0x0400
-# define EVP_PKT_EXP 0x1000 /* <= 512 bit key */
# define EVP_PKEY_NONE NID_undef
# define EVP_PKEY_RSA NID_rsaEncryption
@@ -424,6 +423,9 @@ struct evp_cipher_st {
# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b
# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c
+/* RFC 5246 defines additional data to be 13 bytes in length */
+# define EVP_AEAD_TLS1_AAD_LEN 13
+
typedef struct {
unsigned char *out;
const unsigned char *inp;
@@ -1121,6 +1123,19 @@ void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
int (*pkey_ctrl) (EVP_PKEY *pkey, int op,
long arg1, void *arg2));
+void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
+ int (*item_verify) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *a,
+ ASN1_BIT_STRING *sig,
+ EVP_PKEY *pkey),
+ int (*item_sign) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *alg1,
+ X509_ALGOR *alg2,
+ ASN1_BIT_STRING *sig));
# define EVP_PKEY_OP_UNDEFINED 0
# define EVP_PKEY_OP_PARAMGEN (1<<1)
diff --git a/openssl/crypto/evp/p_seal.c b/openssl/crypto/evp/p_seal.c
index caabbf406..ba9dfff21 100644
--- a/openssl/crypto/evp/p_seal.c
+++ b/openssl/crypto/evp/p_seal.c
@@ -82,8 +82,9 @@ int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
return 1;
if (EVP_CIPHER_CTX_rand_key(ctx, key) <= 0)
return 0;
- if (EVP_CIPHER_CTX_iv_length(ctx))
- RAND_pseudo_bytes(iv, EVP_CIPHER_CTX_iv_length(ctx));
+ if (EVP_CIPHER_CTX_iv_length(ctx)
+ && RAND_bytes(iv, EVP_CIPHER_CTX_iv_length(ctx)) <= 0)
+ return 0;
if (!EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv))
return 0;
diff --git a/openssl/crypto/hmac/Makefile b/openssl/crypto/hmac/Makefile
index 0e91709f6..52e39e586 100644
--- a/openssl/crypto/hmac/Makefile
+++ b/openssl/crypto/hmac/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/hmac/hmac.c b/openssl/crypto/hmac/hmac.c
index 1fc9e2c3f..51a0a3efc 100644
--- a/openssl/crypto/hmac/hmac.c
+++ b/openssl/crypto/hmac/hmac.c
@@ -97,12 +97,18 @@ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
return FIPS_hmac_init_ex(ctx, key, len, md, NULL);
}
#endif
+ /* If we are changing MD then we must have a key */
+ if (md != NULL && md != ctx->md && (key == NULL || len < 0))
+ return 0;
if (md != NULL) {
reset = 1;
ctx->md = md;
- } else
+ } else if (ctx->md) {
md = ctx->md;
+ } else {
+ return 0;
+ }
if (key != NULL) {
reset = 1;
@@ -117,7 +123,8 @@ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
&ctx->key_length))
goto err;
} else {
- OPENSSL_assert(len >= 0 && len <= (int)sizeof(ctx->key));
+ if (len < 0 || len > (int)sizeof(ctx->key))
+ return 0;
memcpy(ctx->key, key, len);
ctx->key_length = len;
}
@@ -161,6 +168,9 @@ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len)
if (FIPS_mode() && !ctx->i_ctx.engine)
return FIPS_hmac_update(ctx, data, len);
#endif
+ if (!ctx->md)
+ return 0;
+
return EVP_DigestUpdate(&ctx->md_ctx, data, len);
}
@@ -173,6 +183,9 @@ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len)
return FIPS_hmac_final(ctx, md, len);
#endif
+ if (!ctx->md)
+ goto err;
+
if (!EVP_DigestFinal_ex(&ctx->md_ctx, buf, &i))
goto err;
if (!EVP_MD_CTX_copy_ex(&ctx->md_ctx, &ctx->o_ctx))
@@ -191,6 +204,7 @@ void HMAC_CTX_init(HMAC_CTX *ctx)
EVP_MD_CTX_init(&ctx->i_ctx);
EVP_MD_CTX_init(&ctx->o_ctx);
EVP_MD_CTX_init(&ctx->md_ctx);
+ ctx->md = NULL;
}
int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx)
@@ -242,6 +256,7 @@ unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
HMAC_CTX_cleanup(&c);
return md;
err:
+ HMAC_CTX_cleanup(&c);
return NULL;
}
diff --git a/openssl/crypto/hmac/hmactest.c b/openssl/crypto/hmac/hmactest.c
index 3d130a03e..271d0ebf2 100644
--- a/openssl/crypto/hmac/hmactest.c
+++ b/openssl/crypto/hmac/hmactest.c
@@ -85,7 +85,7 @@ static struct test_st {
unsigned char data[64];
int data_len;
unsigned char *digest;
-} test[4] = {
+} test[8] = {
{
"", 0, "More text test vectors to stuff up EBCDIC machines :-)", 54,
(unsigned char *)"e9139d1e6ee064ef8cf514fc7dc83e86",
@@ -113,10 +113,27 @@ static struct test_st {
0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd
}, 50, (unsigned char *)"56be34521d144c88dbb8c733f0e8b3f6",
},
+ {
+ "", 0, "My test data", 12,
+ (unsigned char *)"61afdecb95429ef494d61fdee15990cabf0826fc"
+ },
+ {
+ "", 0, "My test data", 12,
+ (unsigned char *)"2274b195d90ce8e03406f4b526a47e0787a88a65479938f1a5baa3ce0f079776"
+ },
+ {
+ "123456", 6, "My test data", 12,
+ (unsigned char *)"bab53058ae861a7f191abe2d0145cbb123776a6369ee3f9d79ce455667e411dd"
+ },
+ {
+ "12345", 5, "My test data again", 12,
+ (unsigned char *)"7dbe8c764c068e3bcd6e6b0fbcd5e6fc197b15bb"
+ }
};
# endif
-static char *pt(unsigned char *md);
+static char *pt(unsigned char *md, unsigned int len);
+
int main(int argc, char *argv[])
{
# ifndef OPENSSL_NO_MD5
@@ -124,6 +141,9 @@ int main(int argc, char *argv[])
char *p;
# endif
int err = 0;
+ HMAC_CTX ctx, ctx2;
+ unsigned char buf[EVP_MAX_MD_SIZE];
+ unsigned int len;
# ifdef OPENSSL_NO_MD5
printf("test skipped: MD5 disabled\n");
@@ -139,27 +159,172 @@ int main(int argc, char *argv[])
for (i = 0; i < 4; i++) {
p = pt(HMAC(EVP_md5(),
test[i].key, test[i].key_len,
- test[i].data, test[i].data_len, NULL, NULL));
+ test[i].data, test[i].data_len, NULL, NULL),
+ MD5_DIGEST_LENGTH);
if (strcmp(p, (char *)test[i].digest) != 0) {
- printf("error calculating HMAC on %d entry'\n", i);
+ printf("Error calculating HMAC on %d entry'\n", i);
printf("got %s instead of %s\n", p, test[i].digest);
err++;
} else
printf("test %d ok\n", i);
}
# endif /* OPENSSL_NO_MD5 */
+
+/* test4 */
+ HMAC_CTX_init(&ctx);
+ if (HMAC_Init_ex(&ctx, NULL, 0, NULL, NULL)) {
+ printf("Should fail to initialise HMAC with empty MD and key (test 4)\n");
+ err++;
+ goto test5;
+ }
+ if (HMAC_Update(&ctx, test[4].data, test[4].data_len)) {
+ printf("Should fail HMAC_Update with ctx not set up (test 4)\n");
+ err++;
+ goto test5;
+ }
+ if (HMAC_Init_ex(&ctx, NULL, 0, EVP_sha1(), NULL)) {
+ printf("Should fail to initialise HMAC with empty key (test 4)\n");
+ err++;
+ goto test5;
+ }
+ if (HMAC_Update(&ctx, test[4].data, test[4].data_len)) {
+ printf("Should fail HMAC_Update with ctx not set up (test 4)\n");
+ err++;
+ goto test5;
+ }
+ printf("test 4 ok\n");
+test5:
+ HMAC_CTX_init(&ctx);
+ if (HMAC_Init_ex(&ctx, test[4].key, test[4].key_len, NULL, NULL)) {
+ printf("Should fail to initialise HMAC with empty MD (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (HMAC_Update(&ctx, test[4].data, test[4].data_len)) {
+ printf("Should fail HMAC_Update with ctx not set up (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (HMAC_Init_ex(&ctx, test[4].key, -1, EVP_sha1(), NULL)) {
+ printf("Should fail to initialise HMAC with invalid key len(test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Init_ex(&ctx, test[4].key, test[4].key_len, EVP_sha1(), NULL)) {
+ printf("Failed to initialise HMAC (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Update(&ctx, test[4].data, test[4].data_len)) {
+ printf("Error updating HMAC with data (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Final(&ctx, buf, &len)) {
+ printf("Error finalising data (test 5)\n");
+ err++;
+ goto test6;
+ }
+ p = pt(buf, len);
+ if (strcmp(p, (char *)test[4].digest) != 0) {
+ printf("Error calculating interim HMAC on test 5\n");
+ printf("got %s instead of %s\n", p, test[4].digest);
+ err++;
+ goto test6;
+ }
+ if (HMAC_Init_ex(&ctx, NULL, 0, EVP_sha256(), NULL)) {
+ printf("Should disallow changing MD without a new key (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Init_ex(&ctx, test[4].key, test[4].key_len, EVP_sha256(), NULL)) {
+ printf("Failed to reinitialise HMAC (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Update(&ctx, test[5].data, test[5].data_len)) {
+ printf("Error updating HMAC with data (sha256) (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Final(&ctx, buf, &len)) {
+ printf("Error finalising data (sha256) (test 5)\n");
+ err++;
+ goto test6;
+ }
+ p = pt(buf, len);
+ if (strcmp(p, (char *)test[5].digest) != 0) {
+ printf("Error calculating 2nd interim HMAC on test 5\n");
+ printf("got %s instead of %s\n", p, test[5].digest);
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Init_ex(&ctx, test[6].key, test[6].key_len, NULL, NULL)) {
+ printf("Failed to reinitialise HMAC with key (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Update(&ctx, test[6].data, test[6].data_len)) {
+ printf("Error updating HMAC with data (new key) (test 5)\n");
+ err++;
+ goto test6;
+ }
+ if (!HMAC_Final(&ctx, buf, &len)) {
+ printf("Error finalising data (new key) (test 5)\n");
+ err++;
+ goto test6;
+ }
+ p = pt(buf, len);
+ if (strcmp(p, (char *)test[6].digest) != 0) {
+ printf("error calculating HMAC on test 5\n");
+ printf("got %s instead of %s\n", p, test[6].digest);
+ err++;
+ } else {
+ printf("test 5 ok\n");
+ }
+test6:
+ HMAC_CTX_init(&ctx);
+ if (!HMAC_Init_ex(&ctx, test[7].key, test[7].key_len, EVP_sha1(), NULL)) {
+ printf("Failed to initialise HMAC (test 6)\n");
+ err++;
+ goto end;
+ }
+ if (!HMAC_Update(&ctx, test[7].data, test[7].data_len)) {
+ printf("Error updating HMAC with data (test 6)\n");
+ err++;
+ goto end;
+ }
+ if (!HMAC_CTX_copy(&ctx2, &ctx)) {
+ printf("Failed to copy HMAC_CTX (test 6)\n");
+ err++;
+ goto end;
+ }
+ if (!HMAC_Final(&ctx2, buf, &len)) {
+ printf("Error finalising data (test 6)\n");
+ err++;
+ goto end;
+ }
+ p = pt(buf, len);
+ if (strcmp(p, (char *)test[7].digest) != 0) {
+ printf("Error calculating HMAC on test 6\n");
+ printf("got %s instead of %s\n", p, test[7].digest);
+ err++;
+ } else {
+ printf("test 6 ok\n");
+ }
+end:
EXIT(err);
return (0);
}
# ifndef OPENSSL_NO_MD5
-static char *pt(unsigned char *md)
+static char *pt(unsigned char *md, unsigned int len)
{
- int i;
+ unsigned int i;
static char buf[80];
- for (i = 0; i < MD5_DIGEST_LENGTH; i++)
+ for (i = 0; i < len; i++)
sprintf(&(buf[i * 2]), "%02x", md[i]);
return (buf);
}
diff --git a/openssl/crypto/idea/Makefile b/openssl/crypto/idea/Makefile
index 8af0acdad..3dc23e48d 100644
--- a/openssl/crypto/idea/Makefile
+++ b/openssl/crypto/idea/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/jpake/Makefile b/openssl/crypto/jpake/Makefile
index 110c49ce0..5193fd983 100644
--- a/openssl/crypto/jpake/Makefile
+++ b/openssl/crypto/jpake/Makefile
@@ -32,6 +32,8 @@ install:
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
done;
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/krb5/Makefile b/openssl/crypto/krb5/Makefile
index 14077390d..8b9a01a29 100644
--- a/openssl/crypto/krb5/Makefile
+++ b/openssl/crypto/krb5/Makefile
@@ -62,6 +62,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/lhash/Makefile b/openssl/crypto/lhash/Makefile
index 82bddac47..c7f4365f0 100644
--- a/openssl/crypto/lhash/Makefile
+++ b/openssl/crypto/lhash/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/md2/Makefile b/openssl/crypto/md2/Makefile
index 17f878aeb..b63011085 100644
--- a/openssl/crypto/md2/Makefile
+++ b/openssl/crypto/md2/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/md4/Makefile b/openssl/crypto/md4/Makefile
index e6f1e4478..3ee436176 100644
--- a/openssl/crypto/md4/Makefile
+++ b/openssl/crypto/md4/Makefile
@@ -62,6 +62,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/md5/Makefile b/openssl/crypto/md5/Makefile
index 390e5f1c7..f5240da74 100644
--- a/openssl/crypto/md5/Makefile
+++ b/openssl/crypto/md5/Makefile
@@ -79,6 +79,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/mdc2/Makefile b/openssl/crypto/mdc2/Makefile
index 141553149..c2d0c5b7c 100644
--- a/openssl/crypto/mdc2/Makefile
+++ b/openssl/crypto/mdc2/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/mem.c b/openssl/crypto/mem.c
index 2ce3e8948..fdad49b76 100644
--- a/openssl/crypto/mem.c
+++ b/openssl/crypto/mem.c
@@ -365,6 +365,9 @@ char *CRYPTO_strdup(const char *str, const char *file, int line)
{
char *ret = CRYPTO_malloc(strlen(str) + 1, file, line);
+ if (ret == NULL)
+ return NULL;
+
strcpy(ret, str);
return ret;
}
diff --git a/openssl/crypto/modes/Makefile b/openssl/crypto/modes/Makefile
index cbcbfad4b..a7863d98b 100644
--- a/openssl/crypto/modes/Makefile
+++ b/openssl/crypto/modes/Makefile
@@ -95,6 +95,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/modes/asm/ghashv8-armx.pl b/openssl/crypto/modes/asm/ghashv8-armx.pl
index 54a1ac4db..0b9cd7359 100755
--- a/openssl/crypto/modes/asm/ghashv8-armx.pl
+++ b/openssl/crypto/modes/asm/ghashv8-armx.pl
@@ -16,12 +16,17 @@
# other assembly modules. Just like aesv8-armx.pl this module
# supports both AArch32 and AArch64 execution modes.
#
+# July 2014
+#
+# Implement 2x aggregated reduction [see ghash-x86.pl for background
+# information].
+#
# Current performance in cycles per processed byte:
#
# PMULL[2] 32-bit NEON(*)
-# Apple A7 1.76 5.62
-# Cortex-A53 1.45 8.39
-# Cortex-A57 2.22 7.61
+# Apple A7 0.92 5.62
+# Cortex-A53 1.01 8.39
+# Cortex-A57 1.17 7.61
#
# (*) presented for reference/comparison purposes;
@@ -37,7 +42,7 @@ $inc="x12";
{
my ($Xl,$Xm,$Xh,$IN)=map("q$_",(0..3));
-my ($t0,$t1,$t2,$t3,$H,$Hhl)=map("q$_",(8..14));
+my ($t0,$t1,$t2,$xC2,$H,$Hhl,$H2)=map("q$_",(8..14));
$code=<<___;
#include "arm_arch.h"
@@ -47,114 +52,277 @@ ___
$code.=".arch armv8-a+crypto\n" if ($flavour =~ /64/);
$code.=".fpu neon\n.code 32\n" if ($flavour !~ /64/);
+################################################################################
+# void gcm_init_v8(u128 Htable[16],const u64 H[2]);
+#
+# input: 128-bit H - secret parameter E(K,0^128)
+# output: precomputed table filled with degrees of twisted H;
+# H is twisted to handle reverse bitness of GHASH;
+# only few of 16 slots of Htable[16] are used;
+# data is opaque to outside world (which allows to
+# optimize the code independently);
+#
$code.=<<___;
.global gcm_init_v8
.type gcm_init_v8,%function
.align 4
gcm_init_v8:
- vld1.64 {$t1},[x1] @ load H
- vmov.i8 $t0,#0xe1
+ vld1.64 {$t1},[x1] @ load input H
+ vmov.i8 $xC2,#0xe1
+ vshl.i64 $xC2,$xC2,#57 @ 0xc2.0
vext.8 $IN,$t1,$t1,#8
- vshl.i64 $t0,$t0,#57
- vshr.u64 $t2,$t0,#63
- vext.8 $t0,$t2,$t0,#8 @ t0=0xc2....01
+ vshr.u64 $t2,$xC2,#63
vdup.32 $t1,${t1}[1]
- vshr.u64 $t3,$IN,#63
+ vext.8 $t0,$t2,$xC2,#8 @ t0=0xc2....01
+ vshr.u64 $t2,$IN,#63
vshr.s32 $t1,$t1,#31 @ broadcast carry bit
- vand $t3,$t3,$t0
+ vand $t2,$t2,$t0
vshl.i64 $IN,$IN,#1
- vext.8 $t3,$t3,$t3,#8
+ vext.8 $t2,$t2,$t2,#8
vand $t0,$t0,$t1
- vorr $IN,$IN,$t3 @ H<<<=1
- veor $IN,$IN,$t0 @ twisted H
- vst1.64 {$IN},[x0]
+ vorr $IN,$IN,$t2 @ H<<<=1
+ veor $H,$IN,$t0 @ twisted H
+ vst1.64 {$H},[x0],#16 @ store Htable[0]
+
+ @ calculate H^2
+ vext.8 $t0,$H,$H,#8 @ Karatsuba pre-processing
+ vpmull.p64 $Xl,$H,$H
+ veor $t0,$t0,$H
+ vpmull2.p64 $Xh,$H,$H
+ vpmull.p64 $Xm,$t0,$t0
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase
+
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ veor $Xl,$Xm,$t2
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $t2,$t2,$Xh
+ veor $H2,$Xl,$t2
+
+ vext.8 $t1,$H2,$H2,#8 @ Karatsuba pre-processing
+ veor $t1,$t1,$H2
+ vext.8 $Hhl,$t0,$t1,#8 @ pack Karatsuba pre-processed
+ vst1.64 {$Hhl-$H2},[x0] @ store Htable[1..2]
ret
.size gcm_init_v8,.-gcm_init_v8
-
+___
+################################################################################
+# void gcm_gmult_v8(u64 Xi[2],const u128 Htable[16]);
+#
+# input: Xi - current hash value;
+# Htable - table precomputed in gcm_init_v8;
+# output: Xi - next hash value Xi;
+#
+$code.=<<___;
.global gcm_gmult_v8
.type gcm_gmult_v8,%function
.align 4
gcm_gmult_v8:
vld1.64 {$t1},[$Xi] @ load Xi
- vmov.i8 $t3,#0xe1
- vld1.64 {$H},[$Htbl] @ load twisted H
- vshl.u64 $t3,$t3,#57
+ vmov.i8 $xC2,#0xe1
+ vld1.64 {$H-$Hhl},[$Htbl] @ load twisted H, ...
+ vshl.u64 $xC2,$xC2,#57
#ifndef __ARMEB__
vrev64.8 $t1,$t1
#endif
- vext.8 $Hhl,$H,$H,#8
- mov $len,#0
vext.8 $IN,$t1,$t1,#8
- mov $inc,#0
- veor $Hhl,$Hhl,$H @ Karatsuba pre-processing
- mov $inp,$Xi
- b .Lgmult_v8
-.size gcm_gmult_v8,.-gcm_gmult_v8
+ vpmull.p64 $Xl,$H,$IN @ H.loXi.lo
+ veor $t1,$t1,$IN @ Karatsuba pre-processing
+ vpmull2.p64 $Xh,$H,$IN @ H.hiXi.hi
+ vpmull.p64 $Xm,$Hhl,$t1 @ (H.lo+H.hi)(Xi.lo+Xi.hi)
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction
+
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ veor $Xl,$Xm,$t2
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $t2,$t2,$Xh
+ veor $Xl,$Xl,$t2
+
+#ifndef __ARMEB__
+ vrev64.8 $Xl,$Xl
+#endif
+ vext.8 $Xl,$Xl,$Xl,#8
+ vst1.64 {$Xl},[$Xi] @ write out Xi
+
+ ret
+.size gcm_gmult_v8,.-gcm_gmult_v8
+___
+################################################################################
+# void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp,size_t len);
+#
+# input: table precomputed in gcm_init_v8;
+# current hash value Xi;
+# pointer to input data;
+# length of input data in bytes, but divisible by block size;
+# output: next hash value Xi;
+#
+$code.=<<___;
.global gcm_ghash_v8
.type gcm_ghash_v8,%function
.align 4
gcm_ghash_v8:
+___
+$code.=<<___ if ($flavour !~ /64/);
+ vstmdb sp!,{d8-d15} @ 32-bit ABI says so
+___
+$code.=<<___;
vld1.64 {$Xl},[$Xi] @ load [rotated] Xi
- subs $len,$len,#16
- vmov.i8 $t3,#0xe1
- mov $inc,#16
- vld1.64 {$H},[$Htbl] @ load twisted H
- cclr $inc,eq
- vext.8 $Xl,$Xl,$Xl,#8
- vshl.u64 $t3,$t3,#57
- vld1.64 {$t1},[$inp],$inc @ load [rotated] inp
- vext.8 $Hhl,$H,$H,#8
+ @ "[rotated]" means that
+ @ loaded value would have
+ @ to be rotated in order to
+ @ make it appear as in
+ @ alorithm specification
+ subs $len,$len,#32 @ see if $len is 32 or larger
+ mov $inc,#16 @ $inc is used as post-
+ @ increment for input pointer;
+ @ as loop is modulo-scheduled
+ @ $inc is zeroed just in time
+ @ to preclude oversteping
+ @ inp[len], which means that
+ @ last block[s] are actually
+ @ loaded twice, but last
+ @ copy is not processed
+ vld1.64 {$H-$Hhl},[$Htbl],#32 @ load twisted H, ..., H^2
+ vmov.i8 $xC2,#0xe1
+ vld1.64 {$H2},[$Htbl]
+ cclr $inc,eq @ is it time to zero $inc?
+ vext.8 $Xl,$Xl,$Xl,#8 @ rotate Xi
+ vld1.64 {$t0},[$inp],#16 @ load [rotated] I[0]
+ vshl.u64 $xC2,$xC2,#57 @ compose 0xc2.0 constant
#ifndef __ARMEB__
+ vrev64.8 $t0,$t0
vrev64.8 $Xl,$Xl
+#endif
+ vext.8 $IN,$t0,$t0,#8 @ rotate I[0]
+ b.lo .Lodd_tail_v8 @ $len was less than 32
+___
+{ my ($Xln,$Xmn,$Xhn,$In) = map("q$_",(4..7));
+ #######
+ # Xi+2 =[H*(Ii+1 + Xi+1)] mod P =
+ # [(H*Ii+1) + (H*Xi+1)] mod P =
+ # [(H*Ii+1) + H^2*(Ii+Xi)] mod P
+ #
+$code.=<<___;
+ vld1.64 {$t1},[$inp],$inc @ load [rotated] I[1]
+#ifndef __ARMEB__
vrev64.8 $t1,$t1
#endif
- veor $Hhl,$Hhl,$H @ Karatsuba pre-processing
- vext.8 $IN,$t1,$t1,#8
- b .Loop_v8
+ vext.8 $In,$t1,$t1,#8
+ veor $IN,$IN,$Xl @ I[i]^=Xi
+ vpmull.p64 $Xln,$H,$In @ HIi+1
+ veor $t1,$t1,$In @ Karatsuba pre-processing
+ vpmull2.p64 $Xhn,$H,$In
+ b .Loop_mod2x_v8
.align 4
-.Loop_v8:
+.Loop_mod2x_v8:
+ vext.8 $t2,$IN,$IN,#8
+ subs $len,$len,#32 @ is there more data?
+ vpmull.p64 $Xl,$H2,$IN @ H^2.loXi.lo
+ cclr $inc,lo @ is it time to zero $inc?
+
+ vpmull.p64 $Xmn,$Hhl,$t1
+ veor $t2,$t2,$IN @ Karatsuba pre-processing
+ vpmull2.p64 $Xh,$H2,$IN @ H^2.hiXi.hi
+ veor $Xl,$Xl,$Xln @ accumulate
+ vpmull2.p64 $Xm,$Hhl,$t2 @ (H^2.lo+H^2.hi)(Xi.lo+Xi.hi)
+ vld1.64 {$t0},[$inp],$inc @ load [rotated] I[i+2]
+
+ veor $Xh,$Xh,$Xhn
+ cclr $inc,eq @ is it time to zero $inc?
+ veor $Xm,$Xm,$Xmn
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ vld1.64 {$t1},[$inp],$inc @ load [rotated] I[i+3]
+#ifndef __ARMEB__
+ vrev64.8 $t0,$t0
+#endif
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction
+
+#ifndef __ARMEB__
+ vrev64.8 $t1,$t1
+#endif
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ vext.8 $In,$t1,$t1,#8
+ vext.8 $IN,$t0,$t0,#8
+ veor $Xl,$Xm,$t2
+ vpmull.p64 $Xln,$H,$In @ HIi+1
+ veor $IN,$IN,$Xh @ accumulate $IN early
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $IN,$IN,$t2
+ veor $t1,$t1,$In @ Karatsuba pre-processing
+ veor $IN,$IN,$Xl
+ vpmull2.p64 $Xhn,$H,$In
+ b.hs .Loop_mod2x_v8 @ there was at least 32 more bytes
+
+ veor $Xh,$Xh,$t2
+ vext.8 $IN,$t0,$t0,#8 @ re-construct $IN
+ adds $len,$len,#32 @ re-construct $len
+ veor $Xl,$Xl,$Xh @ re-construct $Xl
+ b.eq .Ldone_v8 @ is $len zero?
+___
+}
+$code.=<<___;
+.Lodd_tail_v8:
vext.8 $t2,$Xl,$Xl,#8
veor $IN,$IN,$Xl @ inp^=Xi
- veor $t1,$t1,$t2 @ $t1 is rotated inp^Xi
+ veor $t1,$t0,$t2 @ $t1 is rotated inp^Xi
-.Lgmult_v8:
vpmull.p64 $Xl,$H,$IN @ H.loXi.lo
veor $t1,$t1,$IN @ Karatsuba pre-processing
vpmull2.p64 $Xh,$H,$IN @ H.hiXi.hi
- subs $len,$len,#16
vpmull.p64 $Xm,$Hhl,$t1 @ (H.lo+H.hi)(Xi.lo+Xi.hi)
- cclr $inc,eq
vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
veor $t2,$Xl,$Xh
veor $Xm,$Xm,$t1
- vld1.64 {$t1},[$inp],$inc @ load [rotated] inp
veor $Xm,$Xm,$t2
- vpmull.p64 $t2,$Xl,$t3 @ 1st phase
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction
vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
-#ifndef __ARMEB__
- vrev64.8 $t1,$t1
-#endif
veor $Xl,$Xm,$t2
- vext.8 $IN,$t1,$t1,#8
- vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase
- vpmull.p64 $Xl,$Xl,$t3
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction
+ vpmull.p64 $Xl,$Xl,$xC2
veor $t2,$t2,$Xh
veor $Xl,$Xl,$t2
- b.hs .Loop_v8
+.Ldone_v8:
#ifndef __ARMEB__
vrev64.8 $Xl,$Xl
#endif
vext.8 $Xl,$Xl,$Xl,#8
vst1.64 {$Xl},[$Xi] @ write out Xi
+___
+$code.=<<___ if ($flavour !~ /64/);
+ vldmia sp!,{d8-d15} @ 32-bit ABI says so
+___
+$code.=<<___;
ret
.size gcm_ghash_v8,.-gcm_ghash_v8
___
@@ -222,7 +390,7 @@ if ($flavour =~ /64/) { ######## 64-bit code
foreach(split("\n",$code)) {
s/\b[wx]([0-9]+)\b/r$1/go; # new->old registers
s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers
- s/\/\/\s?/@ /o; # new->old style commentary
+ s/\/\/\s?/@ /o; # new->old style commentary
# fix up remainig new-style suffixes
s/\],#[0-9]+/]!/o;
@@ -234,7 +402,7 @@ if ($flavour =~ /64/) { ######## 64-bit code
s/^(\s+)b\./$1b/o or
s/^(\s+)ret/$1bx\tlr/o;
- print $_,"\n";
+ print $_,"\n";
}
}
diff --git a/openssl/crypto/modes/gcm128.c b/openssl/crypto/modes/gcm128.c
index 24a84a7ae..e299131c1 100644
--- a/openssl/crypto/modes/gcm128.c
+++ b/openssl/crypto/modes/gcm128.c
@@ -694,7 +694,7 @@ static void gcm_gmult_1bit(u64 Xi[2], const u64 H[2])
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
# define GHASH_ASM_X86_OR_64
# define GCM_FUNCREF_4BIT
-extern unsigned int OPENSSL_ia32cap_P[2];
+extern unsigned int OPENSSL_ia32cap_P[];
void gcm_init_clmul(u128 Htable[16], const u64 Xi[2]);
void gcm_gmult_clmul(u64 Xi[2], const u128 Htable[16]);
@@ -1704,7 +1704,7 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,
ctx->Xi.u[1] ^= ctx->EK0.u[1];
if (tag && len <= sizeof(ctx->Xi))
- return memcmp(ctx->Xi.c, tag, len);
+ return CRYPTO_memcmp(ctx->Xi.c, tag, len);
else
return -1;
}
diff --git a/openssl/crypto/modes/modes_lcl.h b/openssl/crypto/modes/modes_lcl.h
index 900f54ca2..fe14ec700 100644
--- a/openssl/crypto/modes/modes_lcl.h
+++ b/openssl/crypto/modes/modes_lcl.h
@@ -38,36 +38,36 @@ typedef unsigned char u8;
#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
# if defined(__GNUC__) && __GNUC__>=2
# if defined(__x86_64) || defined(__x86_64__)
-# define BSWAP8(x) ({ u64 ret=(x); \
+# define BSWAP8(x) ({ u64 ret_=(x); \
asm ("bswapq %0" \
- : "+r"(ret)); ret; })
-# define BSWAP4(x) ({ u32 ret=(x); \
+ : "+r"(ret_)); ret_; })
+# define BSWAP4(x) ({ u32 ret_=(x); \
asm ("bswapl %0" \
- : "+r"(ret)); ret; })
+ : "+r"(ret_)); ret_; })
# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)
-# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
+# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \
asm ("bswapl %0; bswapl %1" \
- : "+r"(hi),"+r"(lo)); \
- (u64)hi<<32|lo; })
-# define BSWAP4(x) ({ u32 ret=(x); \
+ : "+r"(hi_),"+r"(lo_)); \
+ (u64)hi_<<32|lo_; })
+# define BSWAP4(x) ({ u32 ret_=(x); \
asm ("bswapl %0" \
- : "+r"(ret)); ret; })
+ : "+r"(ret_)); ret_; })
# elif defined(__aarch64__)
-# define BSWAP8(x) ({ u64 ret; \
+# define BSWAP8(x) ({ u64 ret_; \
asm ("rev %0,%1" \
- : "=r"(ret) : "r"(x)); ret; })
-# define BSWAP4(x) ({ u32 ret; \
+ : "=r"(ret_) : "r"(x)); ret_; })
+# define BSWAP4(x) ({ u32 ret_; \
asm ("rev %w0,%w1" \
- : "=r"(ret) : "r"(x)); ret; })
+ : "=r"(ret_) : "r"(x)); ret_; })
# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT)
-# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
+# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \
asm ("rev %0,%0; rev %1,%1" \
- : "+r"(hi),"+r"(lo)); \
- (u64)hi<<32|lo; })
-# define BSWAP4(x) ({ u32 ret; \
+ : "+r"(hi_),"+r"(lo_)); \
+ (u64)hi_<<32|lo_; })
+# define BSWAP4(x) ({ u32 ret_; \
asm ("rev %0,%1" \
- : "=r"(ret) : "r"((u32)(x))); \
- ret; })
+ : "=r"(ret_) : "r"((u32)(x))); \
+ ret_; })
# endif
# elif defined(_MSC_VER)
# if _MSC_VER>=1300
diff --git a/openssl/crypto/objects/Makefile b/openssl/crypto/objects/Makefile
index a8aedbd42..f93d2f9d2 100644
--- a/openssl/crypto/objects/Makefile
+++ b/openssl/crypto/objects/Makefile
@@ -74,6 +74,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: obj_dat.h obj_mac.h obj_xref.h depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/objects/o_names.c b/openssl/crypto/objects/o_names.c
index c6774f457..24859926a 100644
--- a/openssl/crypto/objects/o_names.c
+++ b/openssl/crypto/objects/o_names.c
@@ -313,7 +313,7 @@ void OBJ_NAME_do_all_sorted(int type,
d.names =
OPENSSL_malloc(lh_OBJ_NAME_num_items(names_lh) * sizeof *d.names);
/* Really should return an error if !d.names...but its a void function! */
- if(d.names) {
+ if (d.names) {
d.n = 0;
OBJ_NAME_do_all(type, do_all_sorted_fn, &d);
diff --git a/openssl/crypto/objects/obj_dat.c b/openssl/crypto/objects/obj_dat.c
index 5cd755d77..aca382a6e 100644
--- a/openssl/crypto/objects/obj_dat.c
+++ b/openssl/crypto/objects/obj_dat.c
@@ -400,6 +400,8 @@ static int obj_cmp(const ASN1_OBJECT *const *ap, const unsigned int *bp)
j = (a->length - b->length);
if (j)
return (j);
+ if (a->length == 0)
+ return 0;
return (memcmp(a->data, b->data, a->length));
}
@@ -415,6 +417,9 @@ int OBJ_obj2nid(const ASN1_OBJECT *a)
if (a->nid != 0)
return (a->nid);
+ if (a->length == 0)
+ return NID_undef;
+
if (added != NULL) {
ad.type = ADDED_DATA;
ad.obj = (ASN1_OBJECT *)a; /* XXX: ugly but harmless */
diff --git a/openssl/crypto/objects/objects.README b/openssl/crypto/objects/objects.README
index 4d745508d..cb1d216ce 100644
--- a/openssl/crypto/objects/objects.README
+++ b/openssl/crypto/objects/objects.README
@@ -8,9 +8,9 @@ The basic syntax for adding an object is as follows:
1 2 3 4 : shortName : Long Name
- If the long name doesn't contain spaces, or no short name
- exists, the long name is used as basis for the base name
- in C. Otherwise, the short name is used.
+ If Long Name contains only word characters and hyphen-minus
+ (0x2D) or full stop (0x2E) then Long Name is used as basis
+ for the base name in C. Otherwise, the shortName is used.
The base name (let's call it 'base') will then be used to
create the C macros SN_base, LN_base, NID_base and OBJ_base.
@@ -22,7 +22,7 @@ Then there are some extra commands:
!Alias foo 1 2 3 4
- This juts makes a name foo for an OID. The C macro
+ This just makes a name foo for an OID. The C macro
OBJ_foo will be created as a result.
!Cname foo
diff --git a/openssl/crypto/objects/objects.pl b/openssl/crypto/objects/objects.pl
index d0ed459d3..389dc3483 100644
--- a/openssl/crypto/objects/objects.pl
+++ b/openssl/crypto/objects/objects.pl
@@ -67,7 +67,7 @@ while (<IN>)
$myoid = &process_oid($myoid);
}
- if ($Cname eq "" && !($myln =~ / /))
+ if ($Cname eq "" && ($myln =~ /^[_A-Za-z][\w.-]*$/ ))
{
$Cname = $myln;
$Cname =~ s/\./_/g;
diff --git a/openssl/crypto/ocsp/Makefile b/openssl/crypto/ocsp/Makefile
index 60c414cf4..96a1b156b 100644
--- a/openssl/crypto/ocsp/Makefile
+++ b/openssl/crypto/ocsp/Makefile
@@ -64,6 +64,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/ocsp/ocsp_ext.c b/openssl/crypto/ocsp/ocsp_ext.c
index 849cb2f76..c19648c73 100644
--- a/openssl/crypto/ocsp/ocsp_ext.c
+++ b/openssl/crypto/ocsp/ocsp_ext.c
@@ -361,8 +361,8 @@ static int ocsp_add1_nonce(STACK_OF(X509_EXTENSION) **exts,
ASN1_put_object(&tmpval, 0, len, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL);
if (val)
memcpy(tmpval, val, len);
- else
- RAND_pseudo_bytes(tmpval, len);
+ else if (RAND_pseudo_bytes(tmpval, len) < 0)
+ goto err;
if (!X509V3_add1_i2d(exts, NID_id_pkix_OCSP_Nonce,
&os, 0, X509V3_ADD_REPLACE))
goto err;
diff --git a/openssl/crypto/ocsp/ocsp_vfy.c b/openssl/crypto/ocsp/ocsp_vfy.c
index 6c0ccb565..d4a257c33 100644
--- a/openssl/crypto/ocsp/ocsp_vfy.c
+++ b/openssl/crypto/ocsp/ocsp_vfy.c
@@ -83,6 +83,7 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
{
X509 *signer, *x;
STACK_OF(X509) *chain = NULL;
+ STACK_OF(X509) *untrusted = NULL;
X509_STORE_CTX ctx;
int i, ret = 0;
ret = ocsp_find_signer(&signer, bs, certs, st, flags);
@@ -107,10 +108,20 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
}
if (!(flags & OCSP_NOVERIFY)) {
int init_res;
- if (flags & OCSP_NOCHAIN)
- init_res = X509_STORE_CTX_init(&ctx, st, signer, NULL);
- else
- init_res = X509_STORE_CTX_init(&ctx, st, signer, bs->certs);
+ if (flags & OCSP_NOCHAIN) {
+ untrusted = NULL;
+ } else if (bs->certs && certs) {
+ untrusted = sk_X509_dup(bs->certs);
+ for (i = 0; i < sk_X509_num(certs); i++) {
+ if (!sk_X509_push(untrusted, sk_X509_value(certs, i))) {
+ OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, ERR_R_MALLOC_FAILURE);
+ goto end;
+ }
+ }
+ } else {
+ untrusted = bs->certs;
+ }
+ init_res = X509_STORE_CTX_init(&ctx, st, signer, untrusted);
if (!init_res) {
ret = -1;
OCSPerr(OCSP_F_OCSP_BASIC_VERIFY, ERR_R_X509_LIB);
@@ -161,6 +172,8 @@ int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,
end:
if (chain)
sk_X509_pop_free(chain, X509_free);
+ if (bs->certs && certs)
+ sk_X509_free(untrusted);
return ret;
}
diff --git a/openssl/crypto/opensslv.h b/openssl/crypto/opensslv.h
index 4f20b97a8..7cc19dc51 100644
--- a/openssl/crypto/opensslv.h
+++ b/openssl/crypto/opensslv.h
@@ -30,11 +30,11 @@ extern "C" {
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
* major minor fix final patch/beta)
*/
-# define OPENSSL_VERSION_NUMBER 0x1000201fL
+# define OPENSSL_VERSION_NUMBER 0x1000203fL
# ifdef OPENSSL_FIPS
-# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2a-fips 19 Mar 2015"
+# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2c-fips 12 Jun 2015"
# else
-# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2a 19 Mar 2015"
+# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2c 12 Jun 2015"
# endif
# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
diff --git a/openssl/crypto/pem/Makefile b/openssl/crypto/pem/Makefile
index 7691f83f6..65de60e2a 100644
--- a/openssl/crypto/pem/Makefile
+++ b/openssl/crypto/pem/Makefile
@@ -64,6 +64,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/pem/pem_pk8.c b/openssl/crypto/pem/pem_pk8.c
index b98c76c4a..5747c7366 100644
--- a/openssl/crypto/pem/pem_pk8.c
+++ b/openssl/crypto/pem/pem_pk8.c
@@ -138,6 +138,8 @@ static int do_pk8pkey(BIO *bp, EVP_PKEY *x, int isder, int nid,
if (kstr == buf)
OPENSSL_cleanse(buf, klen);
PKCS8_PRIV_KEY_INFO_free(p8inf);
+ if (p8 == NULL)
+ return 0;
if (isder)
ret = i2d_PKCS8_bio(bp, p8);
else
diff --git a/openssl/crypto/pkcs12/Makefile b/openssl/crypto/pkcs12/Makefile
index 3a7498fe7..be5f8c5d2 100644
--- a/openssl/crypto/pkcs12/Makefile
+++ b/openssl/crypto/pkcs12/Makefile
@@ -67,6 +67,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/pkcs12/p12_mutl.c b/openssl/crypto/pkcs12/p12_mutl.c
index 256b210cc..5ab4bf290 100644
--- a/openssl/crypto/pkcs12/p12_mutl.c
+++ b/openssl/crypto/pkcs12/p12_mutl.c
@@ -60,6 +60,7 @@
#ifndef OPENSSL_NO_HMAC
# include <stdio.h>
# include "cryptlib.h"
+# include <openssl/crypto.h>
# include <openssl/hmac.h>
# include <openssl/rand.h>
# include <openssl/pkcs12.h>
@@ -123,7 +124,7 @@ int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen)
return 0;
}
if ((maclen != (unsigned int)p12->mac->dinfo->digest->length)
- || memcmp(mac, p12->mac->dinfo->digest->data, maclen))
+ || CRYPTO_memcmp(mac, p12->mac->dinfo->digest->data, maclen))
return 0;
return 1;
}
diff --git a/openssl/crypto/pkcs7/Makefile b/openssl/crypto/pkcs7/Makefile
index effe05fc0..decf5e020 100644
--- a/openssl/crypto/pkcs7/Makefile
+++ b/openssl/crypto/pkcs7/Makefile
@@ -68,6 +68,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/pkcs7/pk7_doit.c b/openssl/crypto/pkcs7/pk7_doit.c
index 31a1b983f..c8d7db01b 100644
--- a/openssl/crypto/pkcs7/pk7_doit.c
+++ b/openssl/crypto/pkcs7/pk7_doit.c
@@ -445,6 +445,12 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
switch (i) {
case NID_pkcs7_signed:
+ /*
+ * p7->d.sign->contents is a PKCS7 structure consisting of a contentType
+ * field and optional content.
+ * data_body is NULL if that structure has no (=detached) content
+ * or if the contentType is wrong (i.e., not "data").
+ */
data_body = PKCS7_get_octet_string(p7->d.sign->contents);
if (!PKCS7_is_detached(p7) && data_body == NULL) {
PKCS7err(PKCS7_F_PKCS7_DATADECODE,
@@ -456,6 +462,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
case NID_pkcs7_signedAndEnveloped:
rsk = p7->d.signed_and_enveloped->recipientinfo;
md_sk = p7->d.signed_and_enveloped->md_algs;
+ /* data_body is NULL if the optional EncryptedContent is missing. */
data_body = p7->d.signed_and_enveloped->enc_data->enc_data;
enc_alg = p7->d.signed_and_enveloped->enc_data->algorithm;
evp_cipher = EVP_get_cipherbyobj(enc_alg->algorithm);
@@ -468,6 +475,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
case NID_pkcs7_enveloped:
rsk = p7->d.enveloped->recipientinfo;
enc_alg = p7->d.enveloped->enc_data->algorithm;
+ /* data_body is NULL if the optional EncryptedContent is missing. */
data_body = p7->d.enveloped->enc_data->enc_data;
evp_cipher = EVP_get_cipherbyobj(enc_alg->algorithm);
if (evp_cipher == NULL) {
@@ -481,6 +489,12 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
goto err;
}
+ /* Detached content must be supplied via in_bio instead. */
+ if (data_body == NULL && in_bio == NULL) {
+ PKCS7err(PKCS7_F_PKCS7_DATADECODE, PKCS7_R_NO_CONTENT);
+ goto err;
+ }
+
/* We will be checking the signature */
if (md_sk != NULL) {
for (i = 0; i < sk_X509_ALGOR_num(md_sk); i++) {
@@ -623,7 +637,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert)
etmp = NULL;
}
#if 1
- if (PKCS7_is_detached(p7) || (in_bio != NULL)) {
+ if (in_bio != NULL) {
bio = in_bio;
} else {
# if 0
diff --git a/openssl/crypto/pqueue/Makefile b/openssl/crypto/pqueue/Makefile
index fb36a0c87..a59b5a939 100644
--- a/openssl/crypto/pqueue/Makefile
+++ b/openssl/crypto/pqueue/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/rand/Makefile b/openssl/crypto/rand/Makefile
index 27694aa66..df44369a0 100644
--- a/openssl/crypto/rand/Makefile
+++ b/openssl/crypto/rand/Makefile
@@ -63,6 +63,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/rand/rand_os2.c b/openssl/crypto/rand/rand_os2.c
index 02148d5bf..706ab1e81 100644
--- a/openssl/crypto/rand/rand_os2.c
+++ b/openssl/crypto/rand/rand_os2.c
@@ -149,7 +149,7 @@ int RAND_poll(void)
if (DosQuerySysState) {
char *buffer = OPENSSL_malloc(256 * 1024);
- if(!buffer)
+ if (!buffer)
return 0;
if (DosQuerySysState(0x1F, 0, 0, 0, buffer, 256 * 1024) == 0) {
diff --git a/openssl/crypto/rc2/Makefile b/openssl/crypto/rc2/Makefile
index 8a9d49ab5..b3727a4a6 100644
--- a/openssl/crypto/rc2/Makefile
+++ b/openssl/crypto/rc2/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/rc4/Makefile b/openssl/crypto/rc4/Makefile
index 76860aeb4..7434ff737 100644
--- a/openssl/crypto/rc4/Makefile
+++ b/openssl/crypto/rc4/Makefile
@@ -89,6 +89,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/rc5/Makefile b/openssl/crypto/rc5/Makefile
index 8a8b00eb8..6ca0037c6 100644
--- a/openssl/crypto/rc5/Makefile
+++ b/openssl/crypto/rc5/Makefile
@@ -69,6 +69,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/ripemd/Makefile b/openssl/crypto/ripemd/Makefile
index 25140b2a7..1c3f094bb 100644
--- a/openssl/crypto/ripemd/Makefile
+++ b/openssl/crypto/ripemd/Makefile
@@ -69,6 +69,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/rsa/Makefile b/openssl/crypto/rsa/Makefile
index af487b600..e292e84db 100644
--- a/openssl/crypto/rsa/Makefile
+++ b/openssl/crypto/rsa/Makefile
@@ -67,6 +67,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/rsa/rsa_pmeth.c b/openssl/crypto/rsa/rsa_pmeth.c
index ddda0ddc4..203635595 100644
--- a/openssl/crypto/rsa/rsa_pmeth.c
+++ b/openssl/crypto/rsa/rsa_pmeth.c
@@ -254,8 +254,14 @@ static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, unsigned char *sig,
return ret;
ret = sltmp;
} else if (rctx->pad_mode == RSA_X931_PADDING) {
- if (!setup_tbuf(rctx, ctx))
+ if ((size_t)EVP_PKEY_size(ctx->pkey) < tbslen + 1) {
+ RSAerr(RSA_F_PKEY_RSA_SIGN, RSA_R_KEY_SIZE_TOO_SMALL);
+ return -1;
+ }
+ if (!setup_tbuf(rctx, ctx)) {
+ RSAerr(RSA_F_PKEY_RSA_SIGN, ERR_R_MALLOC_FAILURE);
return -1;
+ }
memcpy(rctx->tbuf, tbs, tbslen);
rctx->tbuf[tbslen] = RSA_X931_hash_id(EVP_MD_type(rctx->md));
ret = RSA_private_encrypt(tbslen + 1, rctx->tbuf,
diff --git a/openssl/crypto/seed/Makefile b/openssl/crypto/seed/Makefile
index 4bc55e491..70d3d45a2 100644
--- a/openssl/crypto/seed/Makefile
+++ b/openssl/crypto/seed/Makefile
@@ -62,6 +62,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/sha/Makefile b/openssl/crypto/sha/Makefile
index a8c0cf785..de6cdde58 100644
--- a/openssl/crypto/sha/Makefile
+++ b/openssl/crypto/sha/Makefile
@@ -124,6 +124,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/sha/asm/sha1-armv8.pl b/openssl/crypto/sha/asm/sha1-armv8.pl
index deb1238d3..c04432a54 100755
--- a/openssl/crypto/sha/asm/sha1-armv8.pl
+++ b/openssl/crypto/sha/asm/sha1-armv8.pl
@@ -14,10 +14,14 @@
#
# hardware-assisted software(*)
# Apple A7 2.31 4.13 (+14%)
-# Cortex-A53 2.19 8.73 (+108%)
+# Cortex-A53 2.24 8.03 (+97%)
# Cortex-A57 2.35 7.88 (+74%)
+# Denver 2.13 3.97 (+0%)(**)
+# X-Gene 8.80 (+200%)
#
# (*) Software results are presented mostly for reference purposes.
+# (**) Keep in mind that Denver relies on binary translation, which
+# optimizes compiler output at run-time.
$flavour = shift;
open STDOUT,">".shift;
diff --git a/openssl/crypto/sha/asm/sha256-armv4.pl b/openssl/crypto/sha/asm/sha256-armv4.pl
index f14c9c3cb..4fee74d83 100644
--- a/openssl/crypto/sha/asm/sha256-armv4.pl
+++ b/openssl/crypto/sha/asm/sha256-armv4.pl
@@ -5,6 +5,8 @@
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
+#
+# Permission to use under GPL terms is granted.
# ====================================================================
# SHA256 block procedure for ARMv4. May 2007.
@@ -151,10 +153,24 @@ ___
}
$code=<<___;
-#include "arm_arch.h"
+#ifndef __KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ 7
+#endif
.text
+#if __ARM_ARCH__<7
.code 32
+#else
+.syntax unified
+# ifdef __thumb2__
+.thumb
+# else
+.code 32
+# endif
+#endif
.type K256,%object
.align 5
@@ -177,7 +193,7 @@ K256:
.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.size K256,.-K256
.word 0 @ terminator
-#if __ARM_MAX_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
.LOPENSSL_armcap:
.word OPENSSL_armcap_P-sha256_block_data_order
#endif
@@ -186,9 +202,12 @@ K256:
.global sha256_block_data_order
.type sha256_block_data_order,%function
sha256_block_data_order:
+#if __ARM_ARCH__<7
sub r3,pc,#8 @ sha256_block_data_order
- add $len,$inp,$len,lsl#6 @ len to point at the end of inp
-#if __ARM_MAX_ARCH__>=7
+#else
+ adr r3,sha256_block_data_order
+#endif
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
ldr r12,.LOPENSSL_armcap
ldr r12,[r3,r12] @ OPENSSL_armcap_P
tst r12,#ARMV8_SHA256
@@ -196,6 +215,7 @@ sha256_block_data_order:
tst r12,#ARMV7_NEON
bne .LNEON
#endif
+ add $len,$inp,$len,lsl#6 @ len to point at the end of inp
stmdb sp!,{$ctx,$inp,$len,r4-r11,lr}
ldmia $ctx,{$A,$B,$C,$D,$E,$F,$G,$H}
sub $Ktbl,r3,#256+32 @ K256
@@ -213,6 +233,9 @@ for($i=0;$i<16;$i++) { &BODY_00_15($i,@V); unshift(@V,pop(@V)); }
$code.=".Lrounds_16_xx:\n";
for (;$i<32;$i++) { &BODY_16_XX($i,@V); unshift(@V,pop(@V)); }
$code.=<<___;
+#if __ARM_ARCH__>=7
+ ite eq @ Thumb2 thing, sanity check in ARM
+#endif
ldreq $t3,[sp,#16*4] @ pull ctx
bne .Lrounds_16_xx
@@ -429,16 +452,19 @@ $code.=<<___;
.arch armv7-a
.fpu neon
+.global sha256_block_data_order_neon
.type sha256_block_data_order_neon,%function
.align 4
sha256_block_data_order_neon:
.LNEON:
stmdb sp!,{r4-r12,lr}
+ sub $H,sp,#16*4+16
+ adr $Ktbl,K256
+ bic $H,$H,#15 @ align for 128-bit stores
mov $t2,sp
- sub sp,sp,#16*4+16 @ alloca
- sub $Ktbl,r3,#256+32 @ K256
- bic sp,sp,#15 @ align for 128-bit stores
+ mov sp,$H @ alloca
+ add $len,$inp,$len,lsl#6 @ len to point at the end of inp
vld1.8 {@X[0]},[$inp]!
vld1.8 {@X[1]},[$inp]!
@@ -490,11 +516,13 @@ $code.=<<___;
ldr $t0,[sp,#72]
sub $Ktbl,$Ktbl,#256 @ rewind $Ktbl
teq $inp,$t0
+ it eq
subeq $inp,$inp,#64 @ avoid SEGV
vld1.8 {@X[0]},[$inp]! @ load next input block
vld1.8 {@X[1]},[$inp]!
vld1.8 {@X[2]},[$inp]!
vld1.8 {@X[3]},[$inp]!
+ it ne
strne $inp,[sp,#68]
mov $Xfer,sp
___
@@ -526,10 +554,12 @@ $code.=<<___;
str $D,[$t1],#4
stmia $t1,{$E-$H}
+ ittte ne
movne $Xfer,sp
ldrne $t1,[sp,#0]
eorne $t2,$t2,$t2
ldreq sp,[sp,#76] @ restore original sp
+ itt ne
eorne $t3,$B,$C
bne .L_00_48
@@ -548,13 +578,26 @@ my ($W0,$W1,$ABCD_SAVE,$EFGH_SAVE)=map("q$_",(12..15));
my $Ktbl="r3";
$code.=<<___;
-#if __ARM_MAX_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+
+# ifdef __thumb2__
+# define INST(a,b,c,d) .byte c,d|0xc,a,b
+# else
+# define INST(a,b,c,d) .byte a,b,c,d
+# endif
+
.type sha256_block_data_order_armv8,%function
.align 5
sha256_block_data_order_armv8:
.LARMv8:
vld1.32 {$ABCD,$EFGH},[$ctx]
- sub $Ktbl,r3,#sha256_block_data_order-K256
+# ifdef __thumb2__
+ adr $Ktbl,.LARMv8
+ sub $Ktbl,$Ktbl,#.LARMv8-K256
+# else
+ adrl $Ktbl,K256
+# endif
+ add $len,$inp,$len,lsl#6 @ len to point at the end of inp
.Loop_v8:
vld1.8 {@MSG[0]-@MSG[1]},[$inp]!
@@ -607,6 +650,7 @@ $code.=<<___;
vadd.i32 $ABCD,$ABCD,$ABCD_SAVE
vadd.i32 $EFGH,$EFGH,$EFGH_SAVE
+ it ne
bne .Loop_v8
vst1.32 {$ABCD,$EFGH},[$ctx]
@@ -619,11 +663,19 @@ ___
$code.=<<___;
.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
.align 2
-#if __ARM_MAX_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
.comm OPENSSL_armcap_P,4,4
#endif
___
+open SELF,$0;
+while(<SELF>) {
+ next if (/^#!/);
+ last if (!s/^#/@/ and !/^$/);
+ print;
+}
+close SELF;
+
{ my %opcode = (
"sha256h" => 0xf3000c40, "sha256h2" => 0xf3100c40,
"sha256su0" => 0xf3ba03c0, "sha256su1" => 0xf3200c40 );
@@ -638,7 +690,7 @@ ___
# since ARMv7 instructions are always encoded little-endian.
# correct solution is to use .inst directive, but older
# assemblers don't implement it:-(
- sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s",
+ sprintf "INST(0x%02x,0x%02x,0x%02x,0x%02x)\t@ %s %s",
$word&0xff,($word>>8)&0xff,
($word>>16)&0xff,($word>>24)&0xff,
$mnemonic,$arg;
diff --git a/openssl/crypto/sha/asm/sha512-armv8.pl b/openssl/crypto/sha/asm/sha512-armv8.pl
index bd7a0a566..f7b36b986 100755
--- a/openssl/crypto/sha/asm/sha512-armv8.pl
+++ b/openssl/crypto/sha/asm/sha512-armv8.pl
@@ -14,8 +14,10 @@
#
# SHA256-hw SHA256(*) SHA512
# Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**))
-# Cortex-A53 2.38 15.6 (+110%) 10.1 (+190%(***))
+# Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***))
# Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***))
+# Denver 2.01 10.5 (+26%) 6.70 (+8%)
+# X-Gene 20.0 (+100%) 12.8 (+300%(***))
#
# (*) Software SHA256 results are of lesser relevance, presented
# mostly for informational purposes.
@@ -25,7 +27,7 @@
# (***) Super-impressive coefficients over gcc-generated code are
# indication of some compiler "pathology", most notably code
# generated with -mgeneral-regs-only is significanty faster
-# and lags behind assembly only by 50-90%.
+# and the gap is only 40-90%.
$flavour=shift;
$output=shift;
diff --git a/openssl/crypto/srp/Makefile b/openssl/crypto/srp/Makefile
index ddf674864..414af7bc6 100644
--- a/openssl/crypto/srp/Makefile
+++ b/openssl/crypto/srp/Makefile
@@ -64,6 +64,8 @@ srptest: top srptest.c $(LIB)
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/srp/srp_vfy.c b/openssl/crypto/srp/srp_vfy.c
index 701b5cd01..50f75d7e4 100644
--- a/openssl/crypto/srp/srp_vfy.c
+++ b/openssl/crypto/srp/srp_vfy.c
@@ -497,7 +497,8 @@ SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)
if (!SRP_user_pwd_set_ids(user, username, NULL))
goto err;
- RAND_pseudo_bytes(digv, SHA_DIGEST_LENGTH);
+ if (RAND_pseudo_bytes(digv, SHA_DIGEST_LENGTH) < 0)
+ goto err;
EVP_MD_CTX_init(&ctxt);
EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
EVP_DigestUpdate(&ctxt, vb->seed_key, strlen(vb->seed_key));
@@ -549,7 +550,8 @@ char *SRP_create_verifier(const char *user, const char *pass, char **salt,
}
if (*salt == NULL) {
- RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN);
+ if (RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN) < 0)
+ goto err;
s = BN_bin2bn(tmp2, SRP_RANDOM_SALT_LEN, NULL);
} else {
@@ -609,7 +611,8 @@ int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt,
srp_bn_print(g);
if (*salt == NULL) {
- RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN);
+ if (RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN) < 0)
+ goto err;
*salt = BN_bin2bn(tmp2, SRP_RANDOM_SALT_LEN, NULL);
}
diff --git a/openssl/crypto/stack/Makefile b/openssl/crypto/stack/Makefile
index 5327692ac..b069c9323 100644
--- a/openssl/crypto/stack/Makefile
+++ b/openssl/crypto/stack/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/store/Makefile b/openssl/crypto/store/Makefile
index 0dcfd7857..5bc7ca71f 100644
--- a/openssl/crypto/store/Makefile
+++ b/openssl/crypto/store/Makefile
@@ -63,6 +63,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/threads/th-lock.c b/openssl/crypto/threads/th-lock.c
index 28884c2d4..cc8cf2581 100644
--- a/openssl/crypto/threads/th-lock.c
+++ b/openssl/crypto/threads/th-lock.c
@@ -117,7 +117,7 @@ void CRYPTO_thread_setup(void)
int i;
lock_cs = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(HANDLE));
- if(!lock_cs) {
+ if (!lock_cs) {
/* Nothing we can do about this...void function! */
return;
}
@@ -172,7 +172,7 @@ void CRYPTO_thread_setup(void)
# else
lock_cs = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(rwlock_t));
# endif
- if(!lock_cs) {
+ if (!lock_cs) {
/* Nothing we can do about this...void function! */
return;
}
@@ -260,7 +260,7 @@ void CRYPTO_thread_setup(void)
char filename[20];
lock_cs = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(usema_t *));
- if(!lock_cs) {
+ if (!lock_cs) {
/* Nothing we can do about this...void function! */
return;
}
@@ -328,11 +328,11 @@ void CRYPTO_thread_setup(void)
lock_cs = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(pthread_mutex_t));
lock_count = OPENSSL_malloc(CRYPTO_num_locks() * sizeof(long));
- if(!lock_cs || !lock_count) {
+ if (!lock_cs || !lock_count) {
/* Nothing we can do about this...void function! */
- if(lock_cs)
+ if (lock_cs)
OPENSSL_free(lock_cs);
- if(lock_count)
+ if (lock_count)
OPENSSL_free(lock_count);
return;
}
diff --git a/openssl/crypto/ts/Makefile b/openssl/crypto/ts/Makefile
index c18234555..cf991efe4 100644
--- a/openssl/crypto/ts/Makefile
+++ b/openssl/crypto/ts/Makefile
@@ -73,6 +73,8 @@ tags:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(LIBSRC)
diff --git a/openssl/crypto/txt_db/Makefile b/openssl/crypto/txt_db/Makefile
index e6f30331d..4f70b199a 100644
--- a/openssl/crypto/txt_db/Makefile
+++ b/openssl/crypto/txt_db/Makefile
@@ -61,6 +61,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by top Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/ui/Makefile b/openssl/crypto/ui/Makefile
index a685659fb..b28fcca6d 100644
--- a/openssl/crypto/ui/Makefile
+++ b/openssl/crypto/ui/Makefile
@@ -65,6 +65,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/whrlpool/Makefile b/openssl/crypto/whrlpool/Makefile
index f4d46e4d1..befd6d6f3 100644
--- a/openssl/crypto/whrlpool/Makefile
+++ b/openssl/crypto/whrlpool/Makefile
@@ -74,6 +74,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/x509/Makefile b/openssl/crypto/x509/Makefile
index cfbb59c37..01aa3bf38 100644
--- a/openssl/crypto/x509/Makefile
+++ b/openssl/crypto/x509/Makefile
@@ -71,6 +71,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
diff --git a/openssl/crypto/x509/x509_lu.c b/openssl/crypto/x509/x509_lu.c
index ff1fa975f..b0d653903 100644
--- a/openssl/crypto/x509/x509_lu.c
+++ b/openssl/crypto/x509/x509_lu.c
@@ -216,6 +216,8 @@ X509_STORE *X509_STORE_new(void)
static void cleanup(X509_OBJECT *a)
{
+ if (!a)
+ return;
if (a->type == X509_LU_X509) {
X509_free(a->data.x509);
} else if (a->type == X509_LU_CRL) {
diff --git a/openssl/crypto/x509/x509_vfy.c b/openssl/crypto/x509/x509_vfy.c
index 1196a2ada..8ce41f9c9 100644
--- a/openssl/crypto/x509/x509_vfy.c
+++ b/openssl/crypto/x509/x509_vfy.c
@@ -187,11 +187,11 @@ static X509 *lookup_cert_match(X509_STORE_CTX *ctx, X509 *x)
int X509_verify_cert(X509_STORE_CTX *ctx)
{
- X509 *x, *xtmp, *chain_ss = NULL;
+ X509 *x, *xtmp, *xtmp2, *chain_ss = NULL;
int bad_chain = 0;
X509_VERIFY_PARAM *param = ctx->param;
int depth, i, ok = 0;
- int num;
+ int num, j, retry;
int (*cb) (int xok, X509_STORE_CTX *xctx);
STACK_OF(X509) *sktmp = NULL;
if (ctx->cert == NULL) {
@@ -276,91 +276,128 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
break;
}
+ /* Remember how many untrusted certs we have */
+ j = num;
/*
* at this point, chain should contain a list of untrusted certificates.
* We now need to add at least one trusted one, if possible, otherwise we
* complain.
*/
- /*
- * Examine last certificate in chain and see if it is self signed.
- */
-
- i = sk_X509_num(ctx->chain);
- x = sk_X509_value(ctx->chain, i - 1);
- if (cert_self_signed(x)) {
- /* we have a self signed certificate */
- if (sk_X509_num(ctx->chain) == 1) {
- /*
- * We have a single self signed certificate: see if we can find
- * it in the store. We must have an exact match to avoid possible
- * impersonation.
- */
- ok = ctx->get_issuer(&xtmp, ctx, x);
- if ((ok <= 0) || X509_cmp(x, xtmp)) {
- ctx->error = X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT;
- ctx->current_cert = x;
- ctx->error_depth = i - 1;
- if (ok == 1)
- X509_free(xtmp);
- bad_chain = 1;
- ok = cb(0, ctx);
- if (!ok)
- goto end;
+ do {
+ /*
+ * Examine last certificate in chain and see if it is self signed.
+ */
+ i = sk_X509_num(ctx->chain);
+ x = sk_X509_value(ctx->chain, i - 1);
+ if (cert_self_signed(x)) {
+ /* we have a self signed certificate */
+ if (sk_X509_num(ctx->chain) == 1) {
+ /*
+ * We have a single self signed certificate: see if we can
+ * find it in the store. We must have an exact match to avoid
+ * possible impersonation.
+ */
+ ok = ctx->get_issuer(&xtmp, ctx, x);
+ if ((ok <= 0) || X509_cmp(x, xtmp)) {
+ ctx->error = X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT;
+ ctx->current_cert = x;
+ ctx->error_depth = i - 1;
+ if (ok == 1)
+ X509_free(xtmp);
+ bad_chain = 1;
+ ok = cb(0, ctx);
+ if (!ok)
+ goto end;
+ } else {
+ /*
+ * We have a match: replace certificate with store
+ * version so we get any trust settings.
+ */
+ X509_free(x);
+ x = xtmp;
+ (void)sk_X509_set(ctx->chain, i - 1, x);
+ ctx->last_untrusted = 0;
+ }
} else {
/*
- * We have a match: replace certificate with store version so
- * we get any trust settings.
+ * extract and save self signed certificate for later use
*/
- X509_free(x);
- x = xtmp;
- (void)sk_X509_set(ctx->chain, i - 1, x);
- ctx->last_untrusted = 0;
+ chain_ss = sk_X509_pop(ctx->chain);
+ ctx->last_untrusted--;
+ num--;
+ j--;
+ x = sk_X509_value(ctx->chain, num - 1);
}
- } else {
- /*
- * extract and save self signed certificate for later use
- */
- chain_ss = sk_X509_pop(ctx->chain);
- ctx->last_untrusted--;
- num--;
- x = sk_X509_value(ctx->chain, num - 1);
}
- }
-
- /* We now lookup certs from the certificate store */
- for (;;) {
- /* If we have enough, we break */
- if (depth < num)
- break;
+ /* We now lookup certs from the certificate store */
+ for (;;) {
+ /* If we have enough, we break */
+ if (depth < num)
+ break;
+ /* If we are self signed, we break */
+ if (cert_self_signed(x))
+ break;
+ ok = ctx->get_issuer(&xtmp, ctx, x);
- /* If we are self signed, we break */
- if (cert_self_signed(x))
- break;
+ if (ok < 0)
+ return ok;
+ if (ok == 0)
+ break;
+ x = xtmp;
+ if (!sk_X509_push(ctx->chain, x)) {
+ X509_free(xtmp);
+ X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ num++;
+ }
- ok = ctx->get_issuer(&xtmp, ctx, x);
+ /* we now have our chain, lets check it... */
+ i = check_trust(ctx);
- if (ok < 0)
- return ok;
- if (ok == 0)
- break;
+ /* If explicitly rejected error */
+ if (i == X509_TRUST_REJECTED)
+ goto end;
+ /*
+ * If it's not explicitly trusted then check if there is an alternative
+ * chain that could be used. We only do this if we haven't already
+ * checked via TRUSTED_FIRST and the user hasn't switched off alternate
+ * chain checking
+ */
+ retry = 0;
+ if (i != X509_TRUST_TRUSTED
+ && !(ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST)
+ && !(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS)) {
+ while (j-- > 1) {
+ xtmp2 = sk_X509_value(ctx->chain, j - 1);
+ ok = ctx->get_issuer(&xtmp, ctx, xtmp2);
+ if (ok < 0)
+ goto end;
+ /* Check if we found an alternate chain */
+ if (ok > 0) {
+ /*
+ * Free up the found cert we'll add it again later
+ */
+ X509_free(xtmp);
- x = xtmp;
- if (!sk_X509_push(ctx->chain, x)) {
- X509_free(xtmp);
- X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
- return 0;
+ /*
+ * Dump all the certs above this point - we've found an
+ * alternate chain
+ */
+ while (num > j) {
+ xtmp = sk_X509_pop(ctx->chain);
+ X509_free(xtmp);
+ num--;
+ ctx->last_untrusted--;
+ }
+ retry = 1;
+ break;
+ }
+ }
}
- num++;
- }
+ } while (retry);
- /* we now have our chain, lets check it... */
-
- i = check_trust(ctx);
-
- /* If explicitly rejected error */
- if (i == X509_TRUST_REJECTED)
- goto end;
/*
* If not explicitly trusted then indicate error unless it's a single
* self signed certificate in which case we've indicated an error already
@@ -1751,47 +1788,84 @@ int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
ASN1_TIME atm;
long offset;
char buff1[24], buff2[24], *p;
- int i, j;
+ int i, j, remaining;
p = buff1;
- i = ctm->length;
+ remaining = ctm->length;
str = (char *)ctm->data;
+ /*
+ * Note that the following (historical) code allows much more slack in the
+ * time format than RFC5280. In RFC5280, the representation is fixed:
+ * UTCTime: YYMMDDHHMMSSZ
+ * GeneralizedTime: YYYYMMDDHHMMSSZ
+ */
if (ctm->type == V_ASN1_UTCTIME) {
- if ((i < 11) || (i > 17))
+ /* YYMMDDHHMM[SS]Z or YYMMDDHHMM[SS](+-)hhmm */
+ int min_length = sizeof("YYMMDDHHMMZ") - 1;
+ int max_length = sizeof("YYMMDDHHMMSS+hhmm") - 1;
+ if (remaining < min_length || remaining > max_length)
return 0;
memcpy(p, str, 10);
p += 10;
str += 10;
+ remaining -= 10;
} else {
- if (i < 13)
+ /* YYYYMMDDHHMM[SS[.fff]]Z or YYYYMMDDHHMM[SS[.f[f[f]]]](+-)hhmm */
+ int min_length = sizeof("YYYYMMDDHHMMZ") - 1;
+ int max_length = sizeof("YYYYMMDDHHMMSS.fff+hhmm") - 1;
+ if (remaining < min_length || remaining > max_length)
return 0;
memcpy(p, str, 12);
p += 12;
str += 12;
+ remaining -= 12;
}
if ((*str == 'Z') || (*str == '-') || (*str == '+')) {
*(p++) = '0';
*(p++) = '0';
} else {
+ /* SS (seconds) */
+ if (remaining < 2)
+ return 0;
*(p++) = *(str++);
*(p++) = *(str++);
- /* Skip any fractional seconds... */
- if (*str == '.') {
+ remaining -= 2;
+ /*
+ * Skip any (up to three) fractional seconds...
+ * TODO(emilia): in RFC5280, fractional seconds are forbidden.
+ * Can we just kill them altogether?
+ */
+ if (remaining && *str == '.') {
str++;
- while ((*str >= '0') && (*str <= '9'))
- str++;
+ remaining--;
+ for (i = 0; i < 3 && remaining; i++, str++, remaining--) {
+ if (*str < '0' || *str > '9')
+ break;
+ }
}
}
*(p++) = 'Z';
*(p++) = '\0';
- if (*str == 'Z')
+ /* We now need either a terminating 'Z' or an offset. */
+ if (!remaining)
+ return 0;
+ if (*str == 'Z') {
+ if (remaining != 1)
+ return 0;
offset = 0;
- else {
+ } else {
+ /* (+-)HHMM */
if ((*str != '+') && (*str != '-'))
return 0;
+ /* Historical behaviour: the (+-)hhmm offset is forbidden in RFC5280. */
+ if (remaining != 5)
+ return 0;
+ if (str[1] < '0' || str[1] > '9' || str[2] < '0' || str[2] > '9' ||
+ str[3] < '0' || str[3] > '9' || str[4] < '0' || str[4] > '9')
+ return 0;
offset = ((str[1] - '0') * 10 + (str[2] - '0')) * 60;
offset += (str[3] - '0') * 10 + (str[4] - '0');
if (*str == '-')
@@ -2169,6 +2243,8 @@ X509_STORE_CTX *X509_STORE_CTX_new(void)
void X509_STORE_CTX_free(X509_STORE_CTX *ctx)
{
+ if (!ctx)
+ return;
X509_STORE_CTX_cleanup(ctx);
OPENSSL_free(ctx);
}
diff --git a/openssl/crypto/x509/x509_vfy.h b/openssl/crypto/x509/x509_vfy.h
index a6f0df54c..bd8613c62 100644
--- a/openssl/crypto/x509/x509_vfy.h
+++ b/openssl/crypto/x509/x509_vfy.h
@@ -432,6 +432,12 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
/* Allow partial chains if at least one certificate is in trusted store */
# define X509_V_FLAG_PARTIAL_CHAIN 0x80000
+/*
+ * If the initial chain is not trusted, do not attempt to build an alternative
+ * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag
+ * will force the behaviour to match that of previous versions.
+ */
+# define X509_V_FLAG_NO_ALT_CHAINS 0x100000
# define X509_VP_FLAG_DEFAULT 0x1
# define X509_VP_FLAG_OVERWRITE 0x2
diff --git a/openssl/crypto/x509/x509_vpm.c b/openssl/crypto/x509/x509_vpm.c
index 322239401..1ea0c69f5 100644
--- a/openssl/crypto/x509/x509_vpm.c
+++ b/openssl/crypto/x509/x509_vpm.c
@@ -172,16 +172,17 @@ X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void)
{
X509_VERIFY_PARAM *param;
X509_VERIFY_PARAM_ID *paramid;
- param = OPENSSL_malloc(sizeof(X509_VERIFY_PARAM));
+
+ param = OPENSSL_malloc(sizeof *param);
if (!param)
return NULL;
- paramid = OPENSSL_malloc(sizeof(X509_VERIFY_PARAM));
+ paramid = OPENSSL_malloc(sizeof *paramid);
if (!paramid) {
OPENSSL_free(param);
return NULL;
}
- memset(param, 0, sizeof(X509_VERIFY_PARAM));
- memset(paramid, 0, sizeof(X509_VERIFY_PARAM_ID));
+ memset(param, 0, sizeof *param);
+ memset(paramid, 0, sizeof *paramid);
param->id = paramid;
x509_verify_param_zero(param);
return param;
@@ -189,6 +190,8 @@ X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void)
void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param)
{
+ if (param == NULL)
+ return;
x509_verify_param_zero(param);
OPENSSL_free(param->id);
OPENSSL_free(param);
diff --git a/openssl/crypto/x509/x509type.c b/openssl/crypto/x509/x509type.c
index 033175257..9219f753b 100644
--- a/openssl/crypto/x509/x509type.c
+++ b/openssl/crypto/x509/x509type.c
@@ -121,9 +121,6 @@ int X509_certificate_type(X509 *x, EVP_PKEY *pkey)
}
}
- /* /8 because it's 1024 bits we look for, not bytes */
- if (EVP_PKEY_size(pk) <= 1024 / 8)
- ret |= EVP_PKT_EXP;
if (pkey == NULL)
EVP_PKEY_free(pk);
return (ret);
diff --git a/openssl/crypto/x509v3/Makefile b/openssl/crypto/x509v3/Makefile
index cdbfd5240..9791b77a0 100644
--- a/openssl/crypto/x509v3/Makefile
+++ b/openssl/crypto/x509v3/Makefile
@@ -71,6 +71,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
+update: depend
+
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
@@ -535,26 +537,18 @@ v3_purp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
v3_purp.o: ../cryptlib.h v3_purp.c
v3_scts.o: ../../e_os.h ../../include/openssl/asn1.h
v3_scts.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
-v3_scts.o: ../../include/openssl/comp.h ../../include/openssl/conf.h
-v3_scts.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
-v3_scts.o: ../../include/openssl/dtls1.h ../../include/openssl/e_os2.h
-v3_scts.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-v3_scts.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
-v3_scts.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h
-v3_scts.o: ../../include/openssl/kssl.h ../../include/openssl/lhash.h
-v3_scts.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
-v3_scts.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-v3_scts.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
-v3_scts.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
-v3_scts.o: ../../include/openssl/pqueue.h ../../include/openssl/rsa.h
-v3_scts.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
-v3_scts.o: ../../include/openssl/srtp.h ../../include/openssl/ssl.h
-v3_scts.o: ../../include/openssl/ssl2.h ../../include/openssl/ssl23.h
-v3_scts.o: ../../include/openssl/ssl3.h ../../include/openssl/stack.h
-v3_scts.o: ../../include/openssl/symhacks.h ../../include/openssl/tls1.h
-v3_scts.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-v3_scts.o: ../../include/openssl/x509v3.h ../../ssl/ssl_locl.h ../cryptlib.h
-v3_scts.o: v3_scts.c
+v3_scts.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+v3_scts.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+v3_scts.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+v3_scts.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+v3_scts.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+v3_scts.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+v3_scts.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+v3_scts.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
+v3_scts.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+v3_scts.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
+v3_scts.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+v3_scts.o: ../cryptlib.h v3_scts.c
v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h
v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
diff --git a/openssl/crypto/x509v3/v3_alt.c b/openssl/crypto/x509v3/v3_alt.c
index 807867b91..22ec20284 100644
--- a/openssl/crypto/x509v3/v3_alt.c
+++ b/openssl/crypto/x509v3/v3_alt.c
@@ -584,24 +584,26 @@ static int do_othername(GENERAL_NAME *gen, char *value, X509V3_CTX *ctx)
static int do_dirname(GENERAL_NAME *gen, char *value, X509V3_CTX *ctx)
{
- int ret;
- STACK_OF(CONF_VALUE) *sk;
- X509_NAME *nm;
+ int ret = 0;
+ STACK_OF(CONF_VALUE) *sk = NULL;
+ X509_NAME *nm = NULL;
if (!(nm = X509_NAME_new()))
- return 0;
+ goto err;
sk = X509V3_get_section(ctx, value);
if (!sk) {
X509V3err(X509V3_F_DO_DIRNAME, X509V3_R_SECTION_NOT_FOUND);
ERR_add_error_data(2, "section=", value);
- X509_NAME_free(nm);
- return 0;
+ goto err;
}
/* FIXME: should allow other character types... */
ret = X509V3_NAME_from_section(nm, sk, MBSTRING_ASC);
if (!ret)
- X509_NAME_free(nm);
+ goto err;
gen->d.dirn = nm;
- X509V3_section_free(ctx, sk);
+err:
+ if (ret == 0)
+ X509_NAME_free(nm);
+ X509V3_section_free(ctx, sk);
return ret;
}
diff --git a/openssl/crypto/x509v3/v3_cpols.c b/openssl/crypto/x509v3/v3_cpols.c
index dca6ab2ec..0febc1b3e 100644
--- a/openssl/crypto/x509v3/v3_cpols.c
+++ b/openssl/crypto/x509v3/v3_cpols.c
@@ -230,11 +230,11 @@ static POLICYINFO *policy_section(X509V3_CTX *ctx,
goto merr;
if (!sk_POLICYQUALINFO_push(pol->qualifiers, qual))
goto merr;
- if(!(qual->pqualid = OBJ_nid2obj(NID_id_qt_cps))) {
+ if (!(qual->pqualid = OBJ_nid2obj(NID_id_qt_cps))) {
X509V3err(X509V3_F_POLICY_SECTION, ERR_R_INTERNAL_ERROR);
goto err;
}
- if(!(qual->d.cpsuri = M_ASN1_IA5STRING_new()))
+ if (!(qual->d.cpsuri = M_ASN1_IA5STRING_new()))
goto merr;
if (!ASN1_STRING_set(qual->d.cpsuri, cnf->value,
strlen(cnf->value)))
@@ -294,7 +294,7 @@ static POLICYQUALINFO *notice_section(X509V3_CTX *ctx,
POLICYQUALINFO *qual;
if (!(qual = POLICYQUALINFO_new()))
goto merr;
- if(!(qual->pqualid = OBJ_nid2obj(NID_id_qt_unotice))) {
+ if (!(qual->pqualid = OBJ_nid2obj(NID_id_qt_unotice))) {
X509V3err(X509V3_F_NOTICE_SECTION, ERR_R_INTERNAL_ERROR);
goto err;
}
@@ -304,7 +304,7 @@ static POLICYQUALINFO *notice_section(X509V3_CTX *ctx,
for (i = 0; i < sk_CONF_VALUE_num(unot); i++) {
cnf = sk_CONF_VALUE_value(unot, i);
if (!strcmp(cnf->name, "explicitText")) {
- if(!(not->exptext = M_ASN1_VISIBLESTRING_new()))
+ if (!(not->exptext = M_ASN1_VISIBLESTRING_new()))
goto merr;
if (!ASN1_STRING_set(not->exptext, cnf->value,
strlen(cnf->value)))
diff --git a/openssl/crypto/x509v3/v3_scts.c b/openssl/crypto/x509v3/v3_scts.c
index 9a4c3eba0..6e0b8d684 100755
--- a/openssl/crypto/x509v3/v3_scts.c
+++ b/openssl/crypto/x509v3/v3_scts.c
@@ -60,7 +60,16 @@
#include "cryptlib.h"
#include <openssl/asn1.h>
#include <openssl/x509v3.h>
-#include "../ssl/ssl_locl.h"
+
+/* Signature and hash algorithms from RFC 5246 */
+#define TLSEXT_hash_sha256 4
+
+#define TLSEXT_signature_rsa 1
+#define TLSEXT_signature_ecdsa 3
+
+
+#define n2s(c,s) ((s=(((unsigned int)(c[0]))<< 8)| \
+ (((unsigned int)(c[1])) )),c+=2)
#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
# define SCT_TIMESTAMP unsigned __int64
diff --git a/openssl/crypto/x509v3/v3_utl.c b/openssl/crypto/x509v3/v3_utl.c
index ed6099e12..bdd7b95f4 100644
--- a/openssl/crypto/x509v3/v3_utl.c
+++ b/openssl/crypto/x509v3/v3_utl.c
@@ -285,6 +285,10 @@ STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line)
int state;
/* We are going to modify the line so copy it first */
linebuf = BUF_strdup(line);
+ if (linebuf == NULL) {
+ X509V3err(X509V3_F_X509V3_PARSE_LIST, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
state = HDR_NAME;
ntmp = NULL;
/* Go through all characters */
@@ -807,7 +811,7 @@ static const unsigned char *valid_star(const unsigned char *p, size_t len,
*/
if (p[i] == '*') {
int atstart = (state & LABEL_START);
- int atend = (i == len - 1 || p[i + i] == '.');
+ int atend = (i == len - 1 || p[i + 1] == '.');
/*-
* At most one wildcard per pattern.
* No wildcards in IDNA labels.
diff --git a/openssl/demos/easy_tls/easy-tls.c b/openssl/demos/easy_tls/easy-tls.c
index acc688aaf..5682e91a4 100644
--- a/openssl/demos/easy_tls/easy-tls.c
+++ b/openssl/demos/easy_tls/easy-tls.c
@@ -761,7 +761,8 @@ SSL_CTX *tls_create_ctx(struct tls_create_ctx_args a, void *apparg)
if (tls_dhe1024 == NULL) {
int i;
- RAND_bytes((unsigned char *)&i, sizeof i);
+ if (RAND_bytes((unsigned char *)&i, sizeof i) <= 0)
+ goto err_return;
/*
* make sure that i is non-negative -- pick one of the provided
* seeds
diff --git a/openssl/doc/apps/ciphers.pod b/openssl/doc/apps/ciphers.pod
index e9280bc50..1c26e3b3d 100644
--- a/openssl/doc/apps/ciphers.pod
+++ b/openssl/doc/apps/ciphers.pod
@@ -365,10 +365,8 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used.
SSL_RSA_WITH_DES_CBC_SHA DES-CBC-SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA DES-CBC3-SHA
- SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA EXP-DH-DSS-DES-CBC-SHA
SSL_DH_DSS_WITH_DES_CBC_SHA DH-DSS-DES-CBC-SHA
SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA DH-DSS-DES-CBC3-SHA
- SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA EXP-DH-RSA-DES-CBC-SHA
SSL_DH_RSA_WITH_DES_CBC_SHA DH-RSA-DES-CBC-SHA
SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA DH-RSA-DES-CBC3-SHA
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA EXP-EDH-DSS-DES-CBC-SHA
diff --git a/openssl/doc/apps/cms.pod b/openssl/doc/apps/cms.pod
index 76dbf2ca3..4eaedbcd3 100644
--- a/openssl/doc/apps/cms.pod
+++ b/openssl/doc/apps/cms.pod
@@ -35,6 +35,7 @@ B<openssl> B<cms>
[B<-print>]
[B<-CAfile file>]
[B<-CApath dir>]
+[B<-no_alt_chains>]
[B<-md digest>]
[B<-[cipher]>]
[B<-nointern>]
@@ -419,7 +420,7 @@ portion of a message so they may be included manually. If signing
then many S/MIME mail clients check the signers certificate's email
address matches that specified in the From: address.
-=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig>
+=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig -no_alt_chains>
Set various certificate chain valiadition option. See the
L<B<verify>|verify(1)> manual page for details.
@@ -655,4 +656,6 @@ Support for RSA-OAEP and RSA-PSS was first added to OpenSSL 1.1.0.
The use of non-RSA keys with B<-encrypt> and B<-decrypt> was first added
to OpenSSL 1.1.0.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
+
=cut
diff --git a/openssl/doc/apps/config.pod b/openssl/doc/apps/config.pod
index d5cce54f4..e12591528 100644
--- a/openssl/doc/apps/config.pod
+++ b/openssl/doc/apps/config.pod
@@ -277,6 +277,59 @@ priority and B</tmp> used if neither is defined:
# The above value is used if TEMP isn't in the environment
tmpfile=${ENV::TEMP}/tmp.filename
+Simple OpenSSL library configuration example to enter FIPS mode:
+
+ # Default appname: should match "appname" parameter (if any)
+ # supplied to CONF_modules_load_file et al.
+ openssl_conf = openssl_conf_section
+
+ [openssl_conf_section]
+ # Configuration module list
+ alg_section = evp_sect
+
+ [evp_sect]
+ # Set to "yes" to enter FIPS mode if supported
+ fips_mode = yes
+
+Note: in the above example you will get an error in non FIPS capable versions
+of OpenSSL.
+
+More complex OpenSSL library configuration. Add OID and don't enter FIPS mode:
+
+ # Default appname: should match "appname" parameter (if any)
+ # supplied to CONF_modules_load_file et al.
+ openssl_conf = openssl_conf_section
+
+ [openssl_conf_section]
+ # Configuration module list
+ alg_section = evp_sect
+ oid_section = new_oids
+
+ [evp_sect]
+ # This will have no effect as FIPS mode is off by default.
+ # Set to "yes" to enter FIPS mode, if supported
+ fips_mode = no
+
+ [new_oids]
+ # New OID, just short name
+ newoid1 = 1.2.3.4.1
+ # New OID shortname and long name
+ newoid2 = New OID 2 long name, 1.2.3.4.2
+
+The above examples can be used with with any application supporting library
+configuration if "openssl_conf" is modified to match the appropriate "appname".
+
+For example if the second sample file above is saved to "example.cnf" then
+the command line:
+
+ OPENSSL_CONF=example.cnf openssl asn1parse -genstr OID:1.2.3.4.1
+
+will output:
+
+ 0:d=0 hl=2 l= 4 prim: OBJECT :newoid1
+
+showing that the OID "newoid1" has been added as "1.2.3.4.1".
+
=head1 BUGS
Currently there is no way to include characters using the octal B<\nnn>
diff --git a/openssl/doc/apps/dhparam.pod b/openssl/doc/apps/dhparam.pod
index 6e27cf5c1..1cd4c7666 100644
--- a/openssl/doc/apps/dhparam.pod
+++ b/openssl/doc/apps/dhparam.pod
@@ -71,8 +71,10 @@ check if the parameters are valid primes and generator.
=item B<-2>, B<-5>
-The generator to use, either 2 or 5. 2 is the default. If present then the
-input file is ignored and parameters are generated instead.
+The generator to use, either 2 or 5. If present then the
+input file is ignored and parameters are generated instead. If not
+present but B<numbits> is present, parameters are generated with the
+default generator 2.
=item B<-rand> I<file(s)>
@@ -85,9 +87,10 @@ all others.
=item I<numbits>
this option specifies that a parameter set should be generated of size
-I<numbits>. It must be the last option. If not present then a value of 512
-is used. If this option is present then the input file is ignored and
-parameters are generated instead.
+I<numbits>. It must be the last option. If this option is present then
+the input file is ignored and parameters are generated instead. If
+this option is not present but a generator (B<-2> or B<-5>) is
+present, parameters are generated with a default length of 2048 bits.
=item B<-noout>
diff --git a/openssl/doc/apps/ocsp.pod b/openssl/doc/apps/ocsp.pod
index 2372b373c..4639502a0 100644
--- a/openssl/doc/apps/ocsp.pod
+++ b/openssl/doc/apps/ocsp.pod
@@ -29,6 +29,7 @@ B<openssl> B<ocsp>
[B<-path>]
[B<-CApath dir>]
[B<-CAfile file>]
+[B<-no_alt_chains>]]
[B<-VAfile file>]
[B<-validity_period n>]
[B<-status_age n>]
@@ -143,6 +144,10 @@ connection timeout to the OCSP responder in seconds
file or pathname containing trusted CA certificates. These are used to verify
the signature on the OCSP response.
+=item B<-no_alt_chains>
+
+See L<B<verify>|verify(1)> manual page for details.
+
=item B<-verify_other file>
file containing additional certificates to search when attempting to locate
@@ -379,3 +384,9 @@ second file.
openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
-reqin req.der -respout resp.der
+
+=head1 HISTORY
+
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
+
+=cut
diff --git a/openssl/doc/apps/s_client.pod b/openssl/doc/apps/s_client.pod
index aad59b181..84d052706 100644
--- a/openssl/doc/apps/s_client.pod
+++ b/openssl/doc/apps/s_client.pod
@@ -19,6 +19,7 @@ B<openssl> B<s_client>
[B<-pass arg>]
[B<-CApath directory>]
[B<-CAfile filename>]
+[B<-no_alt_chains>]
[B<-reconnect>]
[B<-pause>]
[B<-showcerts>]
@@ -120,7 +121,7 @@ also used when building the client certificate chain.
A file containing trusted certificates to use during server authentication
and to use when attempting to build the client certificate chain.
-=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig>
+=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig -no_alt_chains>
Set various certificate chain valiadition option. See the
L<B<verify>|verify(1)> manual page for details.
@@ -361,4 +362,8 @@ information whenever a session is renegotiated.
L<sess_id(1)|sess_id(1)>, L<s_server(1)|s_server(1)>, L<ciphers(1)|ciphers(1)>
+=head1 HISTORY
+
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
+
=cut
diff --git a/openssl/doc/apps/s_server.pod b/openssl/doc/apps/s_server.pod
index b37f410fb..baca77924 100644
--- a/openssl/doc/apps/s_server.pod
+++ b/openssl/doc/apps/s_server.pod
@@ -33,6 +33,7 @@ B<openssl> B<s_server>
[B<-state>]
[B<-CApath directory>]
[B<-CAfile filename>]
+[B<-no_alt_chains>]
[B<-nocert>]
[B<-cipher cipherlist>]
[B<-serverpref>]
@@ -174,6 +175,10 @@ and to use when attempting to build the server certificate chain. The list
is also used in the list of acceptable client CAs passed to the client when
a certificate is requested.
+=item B<-no_alt_chains>
+
+See the L<B<verify>|verify(1)> manual page for details.
+
=item B<-state>
prints out the SSL session states.
@@ -406,4 +411,8 @@ unknown cipher suites a client says it supports.
L<sess_id(1)|sess_id(1)>, L<s_client(1)|s_client(1)>, L<ciphers(1)|ciphers(1)>
+=head1 HISTORY
+
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
+
=cut
diff --git a/openssl/doc/apps/smime.pod b/openssl/doc/apps/smime.pod
index d39a59a90..d5618c8ff 100644
--- a/openssl/doc/apps/smime.pod
+++ b/openssl/doc/apps/smime.pod
@@ -15,6 +15,7 @@ B<openssl> B<smime>
[B<-pk7out>]
[B<-[cipher]>]
[B<-in file>]
+[B<-no_alt_chains>]
[B<-certfile file>]
[B<-signer file>]
[B<-recip file>]
@@ -259,7 +260,7 @@ portion of a message so they may be included manually. If signing
then many S/MIME mail clients check the signers certificate's email
address matches that specified in the From: address.
-=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig>
+=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig -no_alt_chains>
Set various options of certificate chain verification. See
L<B<verify>|verify(1)> manual page for details.
@@ -441,5 +442,6 @@ structures may cause parsing errors.
The use of multiple B<-signer> options and the B<-resign> command were first
added in OpenSSL 1.0.0
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/openssl/doc/apps/verify.pod b/openssl/doc/apps/verify.pod
index df0153435..df1b86dfe 100644
--- a/openssl/doc/apps/verify.pod
+++ b/openssl/doc/apps/verify.pod
@@ -25,6 +25,7 @@ B<openssl> B<verify>
[B<-extended_crl>]
[B<-use_deltas>]
[B<-policy_print>]
+[B<-no_alt_chains>]
[B<-untrusted file>]
[B<-help>]
[B<-issuer_checks>]
@@ -124,6 +125,14 @@ Set policy variable inhibit-any-policy (see RFC5280).
Set policy variable inhibit-policy-mapping (see RFC5280).
+=item B<-no_alt_chains>
+
+When building a certificate chain, if the first certificate chain found is not
+trusted, then OpenSSL will continue to check to see if an alternative chain can
+be found that is trusted. With this option that behaviour is suppressed so that
+only the first chain found is ever used. Using this option will force the
+behaviour to match that of previous OpenSSL versions.
+
=item B<-policy_print>
Print out diagnostics related to policy processing.
@@ -425,4 +434,8 @@ B<20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> error codes.
L<x509(1)|x509(1)>
+=head1 HISTORY
+
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
+
=cut
diff --git a/openssl/doc/crypto/BN_rand.pod b/openssl/doc/crypto/BN_rand.pod
index d6b975ccf..bd6bc8632 100644
--- a/openssl/doc/crypto/BN_rand.pod
+++ b/openssl/doc/crypto/BN_rand.pod
@@ -24,7 +24,8 @@ most significant bit of the random number can be zero. If B<top> is 0,
it is set to 1, and if B<top> is 1, the two most significant bits of
the number will be set to 1, so that the product of two such random
numbers will always have 2*B<bits> length. If B<bottom> is true, the
-number will be odd.
+number will be odd. The value of B<bits> must be zero or greater. If B<bits> is
+1 then B<top> cannot also be 1.
BN_pseudo_rand() does the same, but pseudo-random numbers generated by
this function are not necessarily unpredictable. They can be used for
diff --git a/openssl/doc/crypto/BN_set_bit.pod b/openssl/doc/crypto/BN_set_bit.pod
index b7c47b9b0..a32cca2ce 100644
--- a/openssl/doc/crypto/BN_set_bit.pod
+++ b/openssl/doc/crypto/BN_set_bit.pod
@@ -37,12 +37,12 @@ BN_mask_bits() truncates B<a> to an B<n> bit number
shorter than B<n> bits.
BN_lshift() shifts B<a> left by B<n> bits and places the result in
-B<r> (C<r=a*2^n>). BN_lshift1() shifts B<a> left by one and places
-the result in B<r> (C<r=2*a>).
+B<r> (C<r=a*2^n>). Note that B<n> must be non-negative. BN_lshift1() shifts
+B<a> left by one and places the result in B<r> (C<r=2*a>).
BN_rshift() shifts B<a> right by B<n> bits and places the result in
-B<r> (C<r=a/2^n>). BN_rshift1() shifts B<a> right by one and places
-the result in B<r> (C<r=a/2>).
+B<r> (C<r=a/2^n>). Note that B<n> must be non-negative. BN_rshift1() shifts
+B<a> right by one and places the result in B<r> (C<r=a/2>).
For the shift functions, B<r> and B<a> may be the same variable.
diff --git a/openssl/doc/crypto/EVP_BytesToKey.pod b/openssl/doc/crypto/EVP_BytesToKey.pod
index 5d6059528..a9b6bb0c7 100644
--- a/openssl/doc/crypto/EVP_BytesToKey.pod
+++ b/openssl/doc/crypto/EVP_BytesToKey.pod
@@ -36,8 +36,8 @@ If the total key and IV length is less than the digest length and
B<MD5> is used then the derivation algorithm is compatible with PKCS#5 v1.5
otherwise a non standard extension is used to derive the extra data.
-Newer applications should use more standard algorithms such as PBKDF2 as
-defined in PKCS#5v2.1 for key derivation.
+Newer applications should use a more modern algorithm such as PBKDF2 as
+defined in PKCS#5v2.1 and provided by PKCS5_PBKDF2_HMAC.
=head1 KEY DERIVATION ALGORITHM
diff --git a/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod b/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod
index 347d48dfe..44792f91a 100644
--- a/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod
+++ b/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod
@@ -197,6 +197,12 @@ verification. If this flag is set then additional status codes will be sent
to the verification callback and it B<must> be prepared to handle such cases
without assuming they are hard errors.
+The B<X509_V_FLAG_NO_ALT_CHAINS> flag suppresses checking for alternative
+chains. By default, when building a certificate chain, if the first certificate
+chain found is not trusted, then OpenSSL will continue to check to see if an
+alternative chain can be found that is trusted. With this flag set the behaviour
+will match that of OpenSSL versions prior to 1.0.2b.
+
=head1 NOTES
The above functions should be used to manipulate verification parameters
@@ -233,6 +239,6 @@ L<X509_check_ip(3)|X509_check_ip(3)>
=head1 HISTORY
-TBA
+The B<X509_V_FLAG_NO_ALT_CHAINS> flag was added in OpenSSL 1.0.2b
=cut
diff --git a/openssl/doc/crypto/pem.pod b/openssl/doc/crypto/pem.pod
index 21e9fe3b9..763eb6f53 100644
--- a/openssl/doc/crypto/pem.pod
+++ b/openssl/doc/crypto/pem.pod
@@ -2,7 +2,29 @@
=head1 NAME
-PEM, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey, PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey, PEM_write_bio_PKCS8PrivateKey_nid, PEM_write_PKCS8PrivateKey_nid, PEM_read_bio_PUBKEY, PEM_read_PUBKEY, PEM_write_bio_PUBKEY, PEM_write_PUBKEY, PEM_read_bio_RSAPrivateKey, PEM_read_RSAPrivateKey, PEM_write_bio_RSAPrivateKey, PEM_write_RSAPrivateKey, PEM_read_bio_RSAPublicKey, PEM_read_RSAPublicKey, PEM_write_bio_RSAPublicKey, PEM_write_RSAPublicKey, PEM_read_bio_RSA_PUBKEY, PEM_read_RSA_PUBKEY, PEM_write_bio_RSA_PUBKEY, PEM_write_RSA_PUBKEY, PEM_read_bio_DSAPrivateKey, PEM_read_DSAPrivateKey, PEM_write_bio_DSAPrivateKey, PEM_write_DSAPrivateKey, PEM_read_bio_DSA_PUBKEY, PEM_read_DSA_PUBKEY, PEM_write_bio_DSA_PUBKEY, PEM_write_DSA_PUBKEY, PEM_read_bio_DSAparams, PEM_read_DSAparams, PEM_write_bio_DSAparams, PEM_write_DSAparams, PEM_read_bio_DHparams, PEM_read_DHparams, PEM_write_bio_DHparams, PEM_write_DHparams, PEM_read_bio_X509, PEM_read_X509, PEM_write_bio_X509, PEM_write_X509, PEM_read_bio_X509_AUX, PEM_read_X509_AUX, PEM_write_bio_X509_AUX, PEM_write_X509_AUX, PEM_read_bio_X509_REQ, PEM_read_X509_REQ, PEM_write_bio_X509_REQ, PEM_write_X509_REQ, PEM_write_bio_X509_REQ_NEW, PEM_write_X509_REQ_NEW, PEM_read_bio_X509_CRL, PEM_read_X509_CRL, PEM_write_bio_X509_CRL, PEM_write_X509_CRL, PEM_read_bio_PKCS7, PEM_read_PKCS7, PEM_write_bio_PKCS7, PEM_write_PKCS7, PEM_read_bio_NETSCAPE_CERT_SEQUENCE, PEM_read_NETSCAPE_CERT_SEQUENCE, PEM_write_bio_NETSCAPE_CERT_SEQUENCE, PEM_write_NETSCAPE_CERT_SEQUENCE - PEM routines
+PEM, PEM_read_bio_PrivateKey, PEM_read_PrivateKey, PEM_write_bio_PrivateKey,
+PEM_write_PrivateKey, PEM_write_bio_PKCS8PrivateKey, PEM_write_PKCS8PrivateKey,
+PEM_write_bio_PKCS8PrivateKey_nid, PEM_write_PKCS8PrivateKey_nid,
+PEM_read_bio_PUBKEY, PEM_read_PUBKEY, PEM_write_bio_PUBKEY, PEM_write_PUBKEY,
+PEM_read_bio_RSAPrivateKey, PEM_read_RSAPrivateKey,
+PEM_write_bio_RSAPrivateKey, PEM_write_RSAPrivateKey,
+PEM_read_bio_RSAPublicKey, PEM_read_RSAPublicKey, PEM_write_bio_RSAPublicKey,
+PEM_write_RSAPublicKey, PEM_read_bio_RSA_PUBKEY, PEM_read_RSA_PUBKEY,
+PEM_write_bio_RSA_PUBKEY, PEM_write_RSA_PUBKEY, PEM_read_bio_DSAPrivateKey,
+PEM_read_DSAPrivateKey, PEM_write_bio_DSAPrivateKey, PEM_write_DSAPrivateKey,
+PEM_read_bio_DSA_PUBKEY, PEM_read_DSA_PUBKEY, PEM_write_bio_DSA_PUBKEY,
+PEM_write_DSA_PUBKEY, PEM_read_bio_DSAparams, PEM_read_DSAparams,
+PEM_write_bio_DSAparams, PEM_write_DSAparams, PEM_read_bio_DHparams,
+PEM_read_DHparams, PEM_write_bio_DHparams, PEM_write_DHparams,
+PEM_read_bio_X509, PEM_read_X509, PEM_write_bio_X509, PEM_write_X509,
+PEM_read_bio_X509_AUX, PEM_read_X509_AUX, PEM_write_bio_X509_AUX,
+PEM_write_X509_AUX, PEM_read_bio_X509_REQ, PEM_read_X509_REQ,
+PEM_write_bio_X509_REQ, PEM_write_X509_REQ, PEM_write_bio_X509_REQ_NEW,
+PEM_write_X509_REQ_NEW, PEM_read_bio_X509_CRL, PEM_read_X509_CRL,
+PEM_write_bio_X509_CRL, PEM_write_X509_CRL, PEM_read_bio_PKCS7, PEM_read_PKCS7,
+PEM_write_bio_PKCS7, PEM_write_PKCS7, PEM_read_bio_NETSCAPE_CERT_SEQUENCE,
+PEM_read_NETSCAPE_CERT_SEQUENCE, PEM_write_bio_NETSCAPE_CERT_SEQUENCE,
+PEM_write_NETSCAPE_CERT_SEQUENCE - PEM routines
=head1 SYNOPSIS
@@ -239,7 +261,8 @@ SubjectPublicKeyInfo structure and an error occurs if the public
key is not DSA.
The B<DSAparams> functions process DSA parameters using a DSA
-structure. The parameters are encoded using a foobar structure.
+structure. The parameters are encoded using a Dss-Parms structure
+as defined in RFC2459.
The B<DHparams> functions process DH parameters using a DH
structure. The parameters are encoded using a PKCS#3 DHparameter
diff --git a/openssl/doc/ssl/SSL_COMP_add_compression_method.pod b/openssl/doc/ssl/SSL_COMP_add_compression_method.pod
index f4d191c9b..2bb440379 100644
--- a/openssl/doc/ssl/SSL_COMP_add_compression_method.pod
+++ b/openssl/doc/ssl/SSL_COMP_add_compression_method.pod
@@ -2,7 +2,7 @@
=head1 NAME
-SSL_COMP_add_compression_method - handle SSL/TLS integrated compression methods
+SSL_COMP_add_compression_method, SSL_COMP_free_compression_methods - handle SSL/TLS integrated compression methods
=head1 SYNOPSIS
@@ -10,6 +10,8 @@ SSL_COMP_add_compression_method - handle SSL/TLS integrated compression methods
int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
+ +void SSL_COMP_free_compression_methods(void);
+
=head1 DESCRIPTION
SSL_COMP_add_compression_method() adds the compression method B<cm> with
@@ -17,6 +19,10 @@ the identifier B<id> to the list of available compression methods. This
list is globally maintained for all SSL operations within this application.
It cannot be set for specific SSL_CTX or SSL objects.
+SSL_COMP_free_compression_methods() frees the internal table of
+compression methods that were built internally, and possibly
+augmented by adding SSL_COMP_add_compression_method().
+
=head1 NOTES
The TLS standard (or SSLv3) allows the integration of compression methods
@@ -38,8 +44,8 @@ its own compression methods and will unconditionally activate compression
when a matching identifier is found. There is no way to restrict the list
of compression methods supported on a per connection basis.
-The OpenSSL library has the compression methods B<COMP_rle()> and (when
-especially enabled during compilation) B<COMP_zlib()> available.
+If enabled during compilation, the OpenSSL library will have the
+COMP_zlib() compression method available.
=head1 WARNINGS
diff --git a/openssl/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod b/openssl/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod
index 7a27eef50..b754c16a8 100644
--- a/openssl/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod
+++ b/openssl/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod
@@ -61,12 +61,12 @@ negotiation is being saved.
If "strong" primes were used to generate the DH parameters, it is not strictly
necessary to generate a new key for each handshake but it does improve forward
-secrecy. If it is not assured, that "strong" primes were used (see especially
-the section about DSA parameters below), SSL_OP_SINGLE_DH_USE must be used
-in order to prevent small subgroup attacks. Always using SSL_OP_SINGLE_DH_USE
-has an impact on the computer time needed during negotiation, but it is not
-very large, so application authors/users should consider to always enable
-this option.
+secrecy. If it is not assured that "strong" primes were used,
+SSL_OP_SINGLE_DH_USE must be used in order to prevent small subgroup
+attacks. Always using SSL_OP_SINGLE_DH_USE has an impact on the
+computer time needed during negotiation, but it is not very large, so
+application authors/users should consider always enabling this option.
+The option is required to implement perfect forward secrecy (PFS).
As generating DH parameters is extremely time consuming, an application
should not generate the parameters on the fly but supply the parameters.
@@ -74,82 +74,62 @@ DH parameters can be reused, as the actual key is newly generated during
the negotiation. The risk in reusing DH parameters is that an attacker
may specialize on a very often used DH group. Applications should therefore
generate their own DH parameters during the installation process using the
-openssl L<dhparam(1)|dhparam(1)> application. In order to reduce the computer
-time needed for this generation, it is possible to use DSA parameters
-instead (see L<dhparam(1)|dhparam(1)>), but in this case SSL_OP_SINGLE_DH_USE
-is mandatory.
+openssl L<dhparam(1)|dhparam(1)> application. This application
+guarantees that "strong" primes are used.
-Application authors may compile in DH parameters. Files dh512.pem,
-dh1024.pem, dh2048.pem, and dh4096.pem in the 'apps' directory of current
+Files dh2048.pem, and dh4096.pem in the 'apps' directory of the current
version of the OpenSSL distribution contain the 'SKIP' DH parameters,
which use safe primes and were generated verifiably pseudo-randomly.
These files can be converted into C code using the B<-C> option of the
-L<dhparam(1)|dhparam(1)> application.
-Authors may also generate their own set of parameters using
-L<dhparam(1)|dhparam(1)>, but a user may not be sure how the parameters were
-generated. The generation of DH parameters during installation is therefore
-recommended.
+L<dhparam(1)|dhparam(1)> application. Generation of custom DH
+parameters during installation should still be preferred to stop an
+attacker from specializing on a commonly used group. Files dh1024.pem
+and dh512.pem contain old parameters that must not be used by
+applications.
An application may either directly specify the DH parameters or
-can supply the DH parameters via a callback function. The callback approach
-has the advantage, that the callback may supply DH parameters for different
-key lengths.
+can supply the DH parameters via a callback function.
-The B<tmp_dh_callback> is called with the B<keylength> needed and
-the B<is_export> information. The B<is_export> flag is set, when the
-ephemeral DH key exchange is performed with an export cipher.
+Previous versions of the callback used B<is_export> and B<keylength>
+parameters to control parameter generation for export and non-export
+cipher suites. Modern servers that do not support export ciphersuites
+are advised to either use SSL_CTX_set_tmp_dh() in combination with
+SSL_OP_SINGLE_DH_USE, or alternatively, use the callback but ignore
+B<keylength> and B<is_export> and simply supply at least 2048-bit
+parameters in the callback.
=head1 EXAMPLES
-Handle DH parameters for key lengths of 512 and 1024 bits. (Error handling
+Setup DH parameters with a key length of 2048 bits. (Error handling
partly left out.)
- ...
- /* Set up ephemeral DH stuff */
- DH *dh_512 = NULL;
- DH *dh_1024 = NULL;
- FILE *paramfile;
+ Command-line parameter generation:
+ $ openssl dhparam -out dh_param_2048.pem 2048
+
+ Code for setting up parameters during server initialization:
...
- /* "openssl dhparam -out dh_param_512.pem -2 512" */
- paramfile = fopen("dh_param_512.pem", "r");
+ SSL_CTX ctx = SSL_CTX_new();
+ ...
+
+ /* Set up ephemeral DH parameters. */
+ DH *dh_2048 = NULL;
+ FILE *paramfile;
+ paramfile = fopen("dh_param_2048.pem", "r");
if (paramfile) {
- dh_512 = PEM_read_DHparams(paramfile, NULL, NULL, NULL);
+ dh_2048 = PEM_read_DHparams(paramfile, NULL, NULL, NULL);
fclose(paramfile);
+ } else {
+ /* Error. */
}
- /* "openssl dhparam -out dh_param_1024.pem -2 1024" */
- paramfile = fopen("dh_param_1024.pem", "r");
- if (paramfile) {
- dh_1024 = PEM_read_DHparams(paramfile, NULL, NULL, NULL);
- fclose(paramfile);
+ if (dh_2048 == NULL) {
+ /* Error. */
}
- ...
-
- /* "openssl dhparam -C -2 512" etc... */
- DH *get_dh512() { ... }
- DH *get_dh1024() { ... }
-
- DH *tmp_dh_callback(SSL *s, int is_export, int keylength)
- {
- DH *dh_tmp=NULL;
-
- switch (keylength) {
- case 512:
- if (!dh_512)
- dh_512 = get_dh512();
- dh_tmp = dh_512;
- break;
- case 1024:
- if (!dh_1024)
- dh_1024 = get_dh1024();
- dh_tmp = dh_1024;
- break;
- default:
- /* Generating a key on the fly is very costly, so use what is there */
- setup_dh_parameters_like_above();
- }
- return(dh_tmp);
+ if (SSL_CTX_set_tmp_dh(ctx, dh_2048) != 1) {
+ /* Error. */
}
+ SSL_CTX_set_options(ctx, SSL_OP_SINGLE_DH_USE);
+ ...
=head1 RETURN VALUES
diff --git a/openssl/e_os2.h b/openssl/e_os2.h
index 613607f83..7be9989ac 100644
--- a/openssl/e_os2.h
+++ b/openssl/e_os2.h
@@ -109,6 +109,12 @@ extern "C" {
# undef OPENSSL_SYS_UNIX
# define OPENSSL_SYS_WIN32
# endif
+# if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64)
+# undef OPENSSL_SYS_UNIX
+# if !defined(OPENSSL_SYS_WIN64)
+# define OPENSSL_SYS_WIN64
+# endif
+# endif
# if defined(OPENSSL_SYSNAME_WINNT)
# undef OPENSSL_SYS_UNIX
# define OPENSSL_SYS_WINNT
@@ -121,7 +127,7 @@ extern "C" {
# endif
/* Anything that tries to look like Microsoft is "Windows" */
-# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE)
+# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE)
# undef OPENSSL_SYS_UNIX
# define OPENSSL_SYS_WINDOWS
# ifndef OPENSSL_SYS_MSDOS
diff --git a/openssl/engines/Makefile b/openssl/engines/Makefile
index da6c8750b..2058ff405 100644
--- a/openssl/engines/Makefile
+++ b/openssl/engines/Makefile
@@ -146,12 +146,15 @@ lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
@target=lint; $(RECURSIVE_MAKE)
-depend:
- @if [ -z "$(THIS)" ]; then \
- $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
- fi
- @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
+update: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+ @[ -z "$(THIS)" ] || (set -e; target=update; $(RECURSIVE_MAKE) )
+
+depend: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
@[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
+local_depend:
+ @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
dclean:
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
diff --git a/openssl/engines/ccgost/Makefile b/openssl/engines/ccgost/Makefile
index 2f3658083..17e1efbdf 100644
--- a/openssl/engines/ccgost/Makefile
+++ b/openssl/engines/ccgost/Makefile
@@ -66,12 +66,13 @@ links:
tests:
-depend:
- @if [ -z "$(THIS)" ]; then \
- $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
- else \
- $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC); \
- fi
+update: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+
+depend: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+local_depend:
+ @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -261,8 +262,9 @@ gost_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
gost_sign.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
gost_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
gost_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
-gost_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
-gost_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+gost_sign.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+gost_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+gost_sign.o: ../../include/openssl/objects.h
gost_sign.o: ../../include/openssl/opensslconf.h
gost_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
gost_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
diff --git a/openssl/engines/ccgost/e_gost_err.c b/openssl/engines/ccgost/e_gost_err.c
index 3201b648f..80ef58f8c 100644
--- a/openssl/engines/ccgost/e_gost_err.c
+++ b/openssl/engines/ccgost/e_gost_err.c
@@ -1,6 +1,6 @@
/* e_gost_err.c */
/* ====================================================================
- * Copyright (c) 1999-2009 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -90,6 +90,7 @@ static ERR_STRING_DATA GOST_str_functs[] = {
{ERR_FUNC(GOST_F_GOST_IMIT_CTRL), "GOST_IMIT_CTRL"},
{ERR_FUNC(GOST_F_GOST_IMIT_FINAL), "GOST_IMIT_FINAL"},
{ERR_FUNC(GOST_F_GOST_IMIT_UPDATE), "GOST_IMIT_UPDATE"},
+ {ERR_FUNC(GOST_F_GOST_SIGN_KEYGEN), "GOST_SIGN_KEYGEN"},
{ERR_FUNC(GOST_F_PARAM_COPY_GOST01), "PARAM_COPY_GOST01"},
{ERR_FUNC(GOST_F_PARAM_COPY_GOST94), "PARAM_COPY_GOST94"},
{ERR_FUNC(GOST_F_PKEY_GOST01CP_DECRYPT), "PKEY_GOST01CP_DECRYPT"},
diff --git a/openssl/engines/ccgost/e_gost_err.h b/openssl/engines/ccgost/e_gost_err.h
index 92be55845..a2018ec4d 100644
--- a/openssl/engines/ccgost/e_gost_err.h
+++ b/openssl/engines/ccgost/e_gost_err.h
@@ -90,6 +90,7 @@ void ERR_GOST_error(int function, int reason, char *file, int line);
# define GOST_F_GOST_IMIT_CTRL 114
# define GOST_F_GOST_IMIT_FINAL 140
# define GOST_F_GOST_IMIT_UPDATE 115
+# define GOST_F_GOST_SIGN_KEYGEN 142
# define GOST_F_PARAM_COPY_GOST01 116
# define GOST_F_PARAM_COPY_GOST94 117
# define GOST_F_PKEY_GOST01CP_DECRYPT 118
diff --git a/openssl/engines/ccgost/gost2001.c b/openssl/engines/ccgost/gost2001.c
index 2b9669482..953629543 100644
--- a/openssl/engines/ccgost/gost2001.c
+++ b/openssl/engines/ccgost/gost2001.c
@@ -41,6 +41,11 @@ int fill_GOST2001_params(EC_KEY *eckey, int nid)
BN_CTX *ctx = BN_CTX_new();
int ok = 0;
+ if(!ctx) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
BN_CTX_start(ctx);
p = BN_CTX_get(ctx);
a = BN_CTX_get(ctx);
@@ -48,6 +53,10 @@ int fill_GOST2001_params(EC_KEY *eckey, int nid)
x = BN_CTX_get(ctx);
y = BN_CTX_get(ctx);
q = BN_CTX_get(ctx);
+ if(!p || !a || !b || !x || !y || !q) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
while (params->nid != NID_undef && params->nid != nid)
params++;
if (params->nid == NID_undef) {
@@ -55,18 +64,33 @@ int fill_GOST2001_params(EC_KEY *eckey, int nid)
GOST_R_UNSUPPORTED_PARAMETER_SET);
goto err;
}
- BN_hex2bn(&p, params->p);
- BN_hex2bn(&a, params->a);
- BN_hex2bn(&b, params->b);
+ if(!BN_hex2bn(&p, params->p)
+ || !BN_hex2bn(&a, params->a)
+ || !BN_hex2bn(&b, params->b)) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS,
+ ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
grp = EC_GROUP_new_curve_GFp(p, a, b, ctx);
+ if(!grp) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
P = EC_POINT_new(grp);
+ if(!P) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
- BN_hex2bn(&x, params->x);
- BN_hex2bn(&y, params->y);
- EC_POINT_set_affine_coordinates_GFp(grp, P, x, y, ctx);
- BN_hex2bn(&q, params->q);
+ if(!BN_hex2bn(&x, params->x)
+ || !BN_hex2bn(&y, params->y)
+ || !EC_POINT_set_affine_coordinates_GFp(grp, P, x, y, ctx)
+ || !BN_hex2bn(&q, params->q)) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
#ifdef DEBUG_KEYS
fprintf(stderr, "Set params index %d oid %s\nq=",
(params - R3410_2001_paramset), OBJ_nid2sn(params->nid));
@@ -74,16 +98,23 @@ int fill_GOST2001_params(EC_KEY *eckey, int nid)
fprintf(stderr, "\n");
#endif
- EC_GROUP_set_generator(grp, P, q, NULL);
+ if(!EC_GROUP_set_generator(grp, P, q, NULL)) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
EC_GROUP_set_curve_name(grp, params->nid);
-
- EC_KEY_set_group(eckey, grp);
+ if(!EC_KEY_set_group(eckey, grp)) {
+ GOSTerr(GOST_F_FILL_GOST2001_PARAMS, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
ok = 1;
err:
- EC_POINT_free(P);
- EC_GROUP_free(grp);
- BN_CTX_end(ctx);
- BN_CTX_free(ctx);
+ if (P) EC_POINT_free(P);
+ if (grp) EC_GROUP_free(grp);
+ if (ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
return ok;
}
@@ -94,7 +125,7 @@ int fill_GOST2001_params(EC_KEY *eckey, int nid)
*/
DSA_SIG *gost2001_do_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey)
{
- DSA_SIG *newsig = NULL;
+ DSA_SIG *newsig = NULL, *ret = NULL;
BIGNUM *md = hashsum2bn(dgst);
BIGNUM *order = NULL;
const EC_GROUP *group;
@@ -103,6 +134,10 @@ DSA_SIG *gost2001_do_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey)
NULL, *e = NULL;
EC_POINT *C = NULL;
BN_CTX *ctx = BN_CTX_new();
+ if(!ctx || !md) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
BN_CTX_start(ctx);
OPENSSL_assert(dlen == 32);
newsig = DSA_SIG_new();
@@ -111,11 +146,25 @@ DSA_SIG *gost2001_do_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey)
goto err;
}
group = EC_KEY_get0_group(eckey);
+ if(!group) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
order = BN_CTX_get(ctx);
- EC_GROUP_get_order(group, order, ctx);
+ if(!order || !EC_GROUP_get_order(group, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
priv_key = EC_KEY_get0_private_key(eckey);
+ if(!priv_key) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
e = BN_CTX_get(ctx);
- BN_mod(e, md, order, ctx);
+ if(!e || !BN_mod(e, md, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
#ifdef DEBUG_SIGN
fprintf(stderr, "digest as bignum=");
BN_print_fp(stderr, md);
@@ -128,55 +177,80 @@ DSA_SIG *gost2001_do_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey)
}
k = BN_CTX_get(ctx);
C = EC_POINT_new(group);
+ if(!k || !C) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
do {
do {
if (!BN_rand_range(k, order)) {
GOSTerr(GOST_F_GOST2001_DO_SIGN,
GOST_R_RANDOM_NUMBER_GENERATOR_FAILED);
- DSA_SIG_free(newsig);
- newsig = NULL;
goto err;
}
if (!EC_POINT_mul(group, C, k, NULL, NULL, ctx)) {
GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_EC_LIB);
- DSA_SIG_free(newsig);
- newsig = NULL;
goto err;
}
if (!X)
X = BN_CTX_get(ctx);
+ if (!r)
+ r = BN_CTX_get(ctx);
+ if (!X || !r) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
if (!EC_POINT_get_affine_coordinates_GFp(group, C, X, NULL, ctx)) {
GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_EC_LIB);
- DSA_SIG_free(newsig);
- newsig = NULL;
goto err;
}
- if (!r)
- r = BN_CTX_get(ctx);
- BN_nnmod(r, X, order, ctx);
+
+ if(!BN_nnmod(r, X, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
}
while (BN_is_zero(r));
/* s = (r*priv_key+k*e) mod order */
if (!tmp)
tmp = BN_CTX_get(ctx);
- BN_mod_mul(tmp, priv_key, r, order, ctx);
if (!tmp2)
tmp2 = BN_CTX_get(ctx);
- BN_mod_mul(tmp2, k, e, order, ctx);
if (!s)
s = BN_CTX_get(ctx);
- BN_mod_add(s, tmp, tmp2, order, ctx);
+ if (!tmp || !tmp2 || !s) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ if(!BN_mod_mul(tmp, priv_key, r, order, ctx)
+ || !BN_mod_mul(tmp2, k, e, order, ctx)
+ || !BN_mod_add(s, tmp, tmp2, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
}
while (BN_is_zero(s));
newsig->s = BN_dup(s);
newsig->r = BN_dup(r);
+ if(!newsig->s || !newsig->r) {
+ GOSTerr(GOST_F_GOST2001_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ ret = newsig;
err:
- BN_CTX_end(ctx);
- BN_CTX_free(ctx);
- EC_POINT_free(C);
- BN_free(md);
- return newsig;
+ if(ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
+ if (C) EC_POINT_free(C);
+ if (md) BN_free(md);
+ if (!ret && newsig) {
+ DSA_SIG_free(newsig);
+ }
+ return ret;
}
/*
@@ -196,6 +270,11 @@ int gost2001_do_verify(const unsigned char *dgst, int dgst_len,
const EC_POINT *pub_key = NULL;
int ok = 0;
+ if(!ctx || !group) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
+
BN_CTX_start(ctx);
order = BN_CTX_get(ctx);
e = BN_CTX_get(ctx);
@@ -205,9 +284,17 @@ int gost2001_do_verify(const unsigned char *dgst, int dgst_len,
X = BN_CTX_get(ctx);
R = BN_CTX_get(ctx);
v = BN_CTX_get(ctx);
+ if(!order || !e || !z1 || !z2 || !tmp || !X || !R || !v) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
- EC_GROUP_get_order(group, order, ctx);
pub_key = EC_KEY_get0_public_key(ec);
+ if(!pub_key || !EC_GROUP_get_order(group, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
+
if (BN_is_zero(sig->s) || BN_is_zero(sig->r) ||
(BN_cmp(sig->s, order) >= 1) || (BN_cmp(sig->r, order) >= 1)) {
GOSTerr(GOST_F_GOST2001_DO_VERIFY,
@@ -217,19 +304,28 @@ int gost2001_do_verify(const unsigned char *dgst, int dgst_len,
}
md = hashsum2bn(dgst);
- BN_mod(e, md, order, ctx);
+ if(!md || !BN_mod(e, md, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
#ifdef DEBUG_SIGN
fprintf(stderr, "digest as bignum: ");
BN_print_fp(stderr, md);
fprintf(stderr, "\ndigest mod q: ");
BN_print_fp(stderr, e);
#endif
- if (BN_is_zero(e))
- BN_one(e);
+ if (BN_is_zero(e) && !BN_one(e)) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
v = BN_mod_inverse(v, e, order, ctx);
- BN_mod_mul(z1, sig->s, v, order, ctx);
- BN_sub(tmp, order, sig->r);
- BN_mod_mul(z2, tmp, v, order, ctx);
+ if(!v
+ || !BN_mod_mul(z1, sig->s, v, order, ctx)
+ || !BN_sub(tmp, order, sig->r)
+ || !BN_mod_mul(z2, tmp, v, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
#ifdef DEBUG_SIGN
fprintf(stderr, "\nInverted digest value: ");
BN_print_fp(stderr, v);
@@ -239,6 +335,10 @@ int gost2001_do_verify(const unsigned char *dgst, int dgst_len,
BN_print_fp(stderr, z2);
#endif
C = EC_POINT_new(group);
+ if (!C) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
if (!EC_POINT_mul(group, C, z1, pub_key, z2, ctx)) {
GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_EC_LIB);
goto err;
@@ -247,7 +347,10 @@ int gost2001_do_verify(const unsigned char *dgst, int dgst_len,
GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_EC_LIB);
goto err;
}
- BN_mod(R, X, order, ctx);
+ if(!BN_mod(R, X, order, ctx)) {
+ GOSTerr(GOST_F_GOST2001_DO_VERIFY, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
#ifdef DEBUG_SIGN
fprintf(stderr, "\nX=");
BN_print_fp(stderr, X);
@@ -261,10 +364,12 @@ int gost2001_do_verify(const unsigned char *dgst, int dgst_len,
ok = 1;
}
err:
- EC_POINT_free(C);
- BN_CTX_end(ctx);
- BN_CTX_free(ctx);
- BN_free(md);
+ if (C) EC_POINT_free(C);
+ if (ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
+ if (md) BN_free(md);
return ok;
}
@@ -287,6 +392,10 @@ int gost2001_compute_public(EC_KEY *ec)
return 0;
}
ctx = BN_CTX_new();
+ if(!ctx) {
+ GOSTerr(GOST_F_GOST2001_COMPUTE_PUBLIC, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
BN_CTX_start(ctx);
if (!(priv_key = EC_KEY_get0_private_key(ec))) {
GOSTerr(GOST_F_GOST2001_COMPUTE_PUBLIC, ERR_R_EC_LIB);
@@ -294,6 +403,10 @@ int gost2001_compute_public(EC_KEY *ec)
}
pub_key = EC_POINT_new(group);
+ if(!pub_key) {
+ GOSTerr(GOST_F_GOST2001_COMPUTE_PUBLIC, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
if (!EC_POINT_mul(group, pub_key, priv_key, NULL, NULL, ctx)) {
GOSTerr(GOST_F_GOST2001_COMPUTE_PUBLIC, ERR_R_EC_LIB);
goto err;
@@ -304,9 +417,11 @@ int gost2001_compute_public(EC_KEY *ec)
}
ok = 256;
err:
- BN_CTX_end(ctx);
- EC_POINT_free(pub_key);
- BN_CTX_free(ctx);
+ if (pub_key) EC_POINT_free(pub_key);
+ if (ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
return ok;
}
@@ -320,7 +435,13 @@ int gost2001_keygen(EC_KEY *ec)
{
BIGNUM *order = BN_new(), *d = BN_new();
const EC_GROUP *group = EC_KEY_get0_group(ec);
- EC_GROUP_get_order(group, order, NULL);
+
+ if(!group || !EC_GROUP_get_order(group, order, NULL)) {
+ GOSTerr(GOST_F_GOST2001_KEYGEN, ERR_R_INTERNAL_ERROR);
+ BN_free(d);
+ BN_free(order);
+ return 0;
+ }
do {
if (!BN_rand_range(d, order)) {
@@ -332,7 +453,13 @@ int gost2001_keygen(EC_KEY *ec)
}
}
while (BN_is_zero(d));
- EC_KEY_set_private_key(ec, d);
+
+ if(!EC_KEY_set_private_key(ec, d)) {
+ GOSTerr(GOST_F_GOST2001_KEYGEN, ERR_R_INTERNAL_ERROR);
+ BN_free(d);
+ BN_free(order);
+ return 0;
+ }
BN_free(d);
BN_free(order);
return gost2001_compute_public(ec);
diff --git a/openssl/engines/ccgost/gost94_keyx.c b/openssl/engines/ccgost/gost94_keyx.c
index 85f4bc899..ce57f17cb 100644
--- a/openssl/engines/ccgost/gost94_keyx.c
+++ b/openssl/engines/ccgost/gost94_keyx.c
@@ -104,6 +104,7 @@ int pkey_GOST94cp_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out,
struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx);
gost_ctx cctx;
int key_is_ephemeral = 1;
+ int tmp_outlen;
EVP_PKEY *mykey = EVP_PKEY_CTX_get0_peerkey(ctx);
/* Do not use vizir cipher parameters with cryptopro */
@@ -174,12 +175,13 @@ int pkey_GOST94cp_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out,
}
ASN1_OBJECT_free(gkt->key_agreement_info->cipher);
gkt->key_agreement_info->cipher = OBJ_nid2obj(param->nid);
- *outlen = i2d_GOST_KEY_TRANSPORT(gkt, out ? &out : NULL);
- if (*outlen <= 0) {
+ tmp_outlen = i2d_GOST_KEY_TRANSPORT(gkt, out ? &out : NULL);
+ if (tmp_outlen <= 0) {
GOSTerr(GOST_F_PKEY_GOST94CP_ENCRYPT,
GOST_R_ERROR_PACKING_KEY_TRANSPORT_INFO);
goto err;
}
+ *outlen = tmp_outlen;
if (!key_is_ephemeral) {
/* Set control "public key from client certificate used" */
if (EVP_PKEY_CTX_ctrl(ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 3, NULL) <=
diff --git a/openssl/engines/ccgost/gost_ameth.c b/openssl/engines/ccgost/gost_ameth.c
index 713a0face..b7c5354c1 100644
--- a/openssl/engines/ccgost/gost_ameth.c
+++ b/openssl/engines/ccgost/gost_ameth.c
@@ -115,7 +115,10 @@ static int decode_gost_algor_params(EVP_PKEY *pkey, X509_ALGOR *palg)
}
param_nid = OBJ_obj2nid(gkp->key_params);
GOST_KEY_PARAMS_free(gkp);
- EVP_PKEY_set_type(pkey, pkey_nid);
+ if(!EVP_PKEY_set_type(pkey, pkey_nid)) {
+ GOSTerr(GOST_F_DECODE_GOST_ALGOR_PARAMS, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
switch (pkey_nid) {
case NID_id_GostR3410_94:
{
@@ -552,9 +555,19 @@ static int param_copy_gost01(EVP_PKEY *to, const EVP_PKEY *from)
}
if (!eto) {
eto = EC_KEY_new();
- EVP_PKEY_assign(to, EVP_PKEY_base_id(from), eto);
+ if(!eto) {
+ GOSTerr(GOST_F_PARAM_COPY_GOST01, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ if(!EVP_PKEY_assign(to, EVP_PKEY_base_id(from), eto)) {
+ GOSTerr(GOST_F_PARAM_COPY_GOST01, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+ }
+ if(!EC_KEY_set_group(eto, EC_KEY_get0_group(efrom))) {
+ GOSTerr(GOST_F_PARAM_COPY_GOST01, ERR_R_INTERNAL_ERROR);
+ return 0;
}
- EC_KEY_set_group(eto, EC_KEY_get0_group(efrom));
if (EC_KEY_get0_private_key(eto)) {
gost2001_compute_public(eto);
}
@@ -729,8 +742,21 @@ static int pub_encode_gost01(X509_PUBKEY *pub, const EVP_PKEY *pk)
}
X = BN_new();
Y = BN_new();
- EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(ec),
- pub_key, X, Y, NULL);
+ if(!X || !Y) {
+ GOSTerr(GOST_F_PUB_ENCODE_GOST01, ERR_R_MALLOC_FAILURE);
+ if(X) BN_free(X);
+ if(Y) BN_free(Y);
+ BN_free(order);
+ return 0;
+ }
+ if(!EC_POINT_get_affine_coordinates_GFp(EC_KEY_get0_group(ec),
+ pub_key, X, Y, NULL)) {
+ GOSTerr(GOST_F_PUB_ENCODE_GOST01, ERR_R_INTERNAL_ERROR);
+ BN_free(X);
+ BN_free(Y);
+ BN_free(order);
+ return 0;
+ }
data_len = 2 * BN_num_bytes(order);
BN_free(order);
databuf = OPENSSL_malloc(data_len);
diff --git a/openssl/engines/ccgost/gost_pmeth.c b/openssl/engines/ccgost/gost_pmeth.c
index a2c7cf27d..4a79a85cf 100644
--- a/openssl/engines/ccgost/gost_pmeth.c
+++ b/openssl/engines/ccgost/gost_pmeth.c
@@ -510,7 +510,7 @@ static int pkey_gost_mac_ctrl_str(EVP_PKEY_CTX *ctx,
long keylen;
int ret;
unsigned char *keybuf = string_to_hex(value, &keylen);
- if (keylen != 32) {
+ if (!keybuf || keylen != 32) {
GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR,
GOST_R_INVALID_MAC_KEY_LENGTH);
OPENSSL_free(keybuf);
diff --git a/openssl/engines/ccgost/gost_sign.c b/openssl/engines/ccgost/gost_sign.c
index 0116e4740..07ad921ab 100644
--- a/openssl/engines/ccgost/gost_sign.c
+++ b/openssl/engines/ccgost/gost_sign.c
@@ -12,6 +12,7 @@
#include <openssl/bn.h>
#include <openssl/dsa.h>
#include <openssl/evp.h>
+#include <openssl/err.h>
#include "gost_params.h"
#include "gost_lcl.h"
@@ -52,11 +53,16 @@ void dump_dsa_sig(const char *message, DSA_SIG *sig)
DSA_SIG *gost_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
{
BIGNUM *k = NULL, *tmp = NULL, *tmp2 = NULL;
- DSA_SIG *newsig = DSA_SIG_new();
+ DSA_SIG *newsig = NULL, *ret = NULL;
BIGNUM *md = hashsum2bn(dgst);
/* check if H(M) mod q is zero */
BN_CTX *ctx = BN_CTX_new();
+ if(!ctx) {
+ GOSTerr(GOST_F_GOST_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
BN_CTX_start(ctx);
+ newsig = DSA_SIG_new();
if (!newsig) {
GOSTerr(GOST_F_GOST_DO_SIGN, GOST_R_NO_MEMORY);
goto err;
@@ -64,6 +70,10 @@ DSA_SIG *gost_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
tmp = BN_CTX_get(ctx);
k = BN_CTX_get(ctx);
tmp2 = BN_CTX_get(ctx);
+ if(!tmp || !k || !tmp2) {
+ GOSTerr(GOST_F_GOST_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
BN_mod(tmp, md, dsa->q, ctx);
if (BN_is_zero(tmp)) {
BN_one(md);
@@ -76,24 +86,41 @@ DSA_SIG *gost_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
BN_rand_range(k, dsa->q);
/* generate r = (a^x mod p) mod q */
BN_mod_exp(tmp, dsa->g, k, dsa->p, ctx);
- if (!(newsig->r))
+ if (!(newsig->r)) {
newsig->r = BN_new();
+ if(!newsig->r) {
+ GOSTerr(GOST_F_GOST_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ }
BN_mod(newsig->r, tmp, dsa->q, ctx);
}
while (BN_is_zero(newsig->r));
/* generate s = (xr + k(Hm)) mod q */
BN_mod_mul(tmp, dsa->priv_key, newsig->r, dsa->q, ctx);
BN_mod_mul(tmp2, k, md, dsa->q, ctx);
- if (!newsig->s)
+ if (!newsig->s) {
newsig->s = BN_new();
+ if(!newsig->s) {
+ GOSTerr(GOST_F_GOST_DO_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ }
BN_mod_add(newsig->s, tmp, tmp2, dsa->q, ctx);
}
while (BN_is_zero(newsig->s));
+
+ ret = newsig;
err:
BN_free(md);
- BN_CTX_end(ctx);
- BN_CTX_free(ctx);
- return newsig;
+ if(ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
+ if(!ret && newsig) {
+ DSA_SIG_free(newsig);
+ }
+ return ret;
}
/*
@@ -135,17 +162,21 @@ int pack_sign_cp(DSA_SIG *s, int order, unsigned char *sig, size_t *siglen)
int gost_do_verify(const unsigned char *dgst, int dgst_len,
DSA_SIG *sig, DSA *dsa)
{
- BIGNUM *md, *tmp = NULL;
+ BIGNUM *md = NULL, *tmp = NULL;
BIGNUM *q2 = NULL;
BIGNUM *u = NULL, *v = NULL, *z1 = NULL, *z2 = NULL;
BIGNUM *tmp2 = NULL, *tmp3 = NULL;
- int ok;
+ int ok = 0;
BN_CTX *ctx = BN_CTX_new();
+ if(!ctx) {
+ GOSTerr(GOST_F_GOST_DO_VERIFY, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
BN_CTX_start(ctx);
if (BN_cmp(sig->s, dsa->q) >= 1 || BN_cmp(sig->r, dsa->q) >= 1) {
GOSTerr(GOST_F_GOST_DO_VERIFY, GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q);
- return 0;
+ goto err;
}
md = hashsum2bn(dgst);
@@ -157,6 +188,10 @@ int gost_do_verify(const unsigned char *dgst, int dgst_len,
tmp2 = BN_CTX_get(ctx);
tmp3 = BN_CTX_get(ctx);
u = BN_CTX_get(ctx);
+ if(!tmp || !v || !q2 || !z1 || !z2 || !tmp2 || !tmp3 || !u) {
+ GOSTerr(GOST_F_GOST_DO_VERIFY, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
BN_mod(tmp, md, dsa->q, ctx);
if (BN_is_zero(tmp)) {
@@ -172,15 +207,18 @@ int gost_do_verify(const unsigned char *dgst, int dgst_len,
BN_mod_exp(tmp2, dsa->pub_key, z2, dsa->p, ctx);
BN_mod_mul(tmp3, tmp, tmp2, dsa->p, ctx);
BN_mod(u, tmp3, dsa->q, ctx);
- ok = BN_cmp(u, sig->r);
+ ok = (BN_cmp(u, sig->r) == 0);
- BN_free(md);
- BN_CTX_end(ctx);
- BN_CTX_free(ctx);
- if (ok != 0) {
+ if (!ok) {
GOSTerr(GOST_F_GOST_DO_VERIFY, GOST_R_SIGNATURE_MISMATCH);
}
- return (ok == 0);
+err:
+ if(md) BN_free(md);
+ if(ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
+ return ok;
}
/*
@@ -190,13 +228,24 @@ int gost_do_verify(const unsigned char *dgst, int dgst_len,
int gost94_compute_public(DSA *dsa)
{
/* Now fill algorithm parameters with correct values */
- BN_CTX *ctx = BN_CTX_new();
+ BN_CTX *ctx;
if (!dsa->g) {
GOSTerr(GOST_F_GOST94_COMPUTE_PUBLIC, GOST_R_KEY_IS_NOT_INITALIZED);
return 0;
}
- /* Compute public key y = a^x mod p */
+ ctx = BN_CTX_new();
+ if(!ctx) {
+ GOSTerr(GOST_F_GOST94_COMPUTE_PUBLIC, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+
dsa->pub_key = BN_new();
+ if(!dsa->pub_key) {
+ GOSTerr(GOST_F_GOST94_COMPUTE_PUBLIC, ERR_R_MALLOC_FAILURE);
+ BN_CTX_free(ctx);
+ return 0;
+ }
+ /* Compute public key y = a^x mod p */
BN_mod_exp(dsa->pub_key, dsa->g, dsa->priv_key, dsa->p, ctx);
BN_CTX_free(ctx);
return 1;
@@ -243,6 +292,10 @@ int fill_GOST94_params(DSA *dsa, int nid)
int gost_sign_keygen(DSA *dsa)
{
dsa->priv_key = BN_new();
+ if(!dsa->priv_key) {
+ GOSTerr(GOST_F_GOST_SIGN_KEYGEN, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
BN_rand_range(dsa->priv_key, dsa->q);
return gost94_compute_public(dsa);
}
diff --git a/openssl/engines/e_sureware.c b/openssl/engines/e_sureware.c
index 1005dfc90..8a23763f7 100644
--- a/openssl/engines/e_sureware.c
+++ b/openssl/engines/e_sureware.c
@@ -712,10 +712,12 @@ static EVP_PKEY *sureware_load_public(ENGINE *e, const char *key_id,
/* set public big nums */
rsatmp->e = BN_new();
rsatmp->n = BN_new();
+ if(!rsatmp->e || !rsatmp->n)
+ goto err;
bn_expand2(rsatmp->e, el / sizeof(BN_ULONG));
bn_expand2(rsatmp->n, el / sizeof(BN_ULONG));
- if (!rsatmp->e || rsatmp->e->dmax != (int)(el / sizeof(BN_ULONG)) ||
- !rsatmp->n || rsatmp->n->dmax != (int)(el / sizeof(BN_ULONG)))
+ if (rsatmp->e->dmax != (int)(el / sizeof(BN_ULONG)) ||
+ rsatmp->n->dmax != (int)(el / sizeof(BN_ULONG)))
goto err;
ret = p_surewarehk_Load_Rsa_Pubkey(msg, key_id, el,
(unsigned long *)rsatmp->n->d,
@@ -752,15 +754,16 @@ static EVP_PKEY *sureware_load_public(ENGINE *e, const char *key_id,
dsatmp->p = BN_new();
dsatmp->q = BN_new();
dsatmp->g = BN_new();
+ if(!dsatmp->pub_key || !dsatmp->p || !dsatmp->q || !dsatmp->g)
+ goto err;
bn_expand2(dsatmp->pub_key, el / sizeof(BN_ULONG));
bn_expand2(dsatmp->p, el / sizeof(BN_ULONG));
bn_expand2(dsatmp->q, 20 / sizeof(BN_ULONG));
bn_expand2(dsatmp->g, el / sizeof(BN_ULONG));
- if (!dsatmp->pub_key
- || dsatmp->pub_key->dmax != (int)(el / sizeof(BN_ULONG))
- || !dsatmp->p || dsatmp->p->dmax != (int)(el / sizeof(BN_ULONG))
- || !dsatmp->q || dsatmp->q->dmax != 20 / sizeof(BN_ULONG)
- || !dsatmp->g || dsatmp->g->dmax != (int)(el / sizeof(BN_ULONG)))
+ if (dsatmp->pub_key->dmax != (int)(el / sizeof(BN_ULONG))
+ || dsatmp->p->dmax != (int)(el / sizeof(BN_ULONG))
+ || dsatmp->q->dmax != 20 / sizeof(BN_ULONG)
+ || dsatmp->g->dmax != (int)(el / sizeof(BN_ULONG)))
goto err;
ret = p_surewarehk_Load_Dsa_Pubkey(msg, key_id, el,
@@ -1038,10 +1041,12 @@ static DSA_SIG *surewarehk_dsa_do_sign(const unsigned char *from, int flen,
}
psign->r = BN_new();
psign->s = BN_new();
+ if(!psign->r || !psign->s)
+ goto err;
bn_expand2(psign->r, 20 / sizeof(BN_ULONG));
bn_expand2(psign->s, 20 / sizeof(BN_ULONG));
- if (!psign->r || psign->r->dmax != 20 / sizeof(BN_ULONG) ||
- !psign->s || psign->s->dmax != 20 / sizeof(BN_ULONG))
+ if (psign->r->dmax != 20 / sizeof(BN_ULONG) ||
+ psign->s->dmax != 20 / sizeof(BN_ULONG))
goto err;
ret = p_surewarehk_Dsa_Sign(msg, flen, from,
(unsigned long *)psign->r->d,
@@ -1070,9 +1075,9 @@ static int surewarehk_modexp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
char msg[64] = "ENGINE_modexp";
if (!p_surewarehk_Mod_Exp) {
SUREWAREerr(SUREWARE_F_SUREWAREHK_MODEXP, ENGINE_R_NOT_INITIALISED);
- } else {
+ } else if (r) {
bn_expand2(r, m->top);
- if (r && r->dmax == m->top) {
+ if (r->dmax == m->top) {
/* do it */
ret = p_surewarehk_Mod_Exp(msg,
m->top * sizeof(BN_ULONG),
diff --git a/openssl/openssl.spec b/openssl/openssl.spec
index 909f2bfab..e6c758433 100644
--- a/openssl/openssl.spec
+++ b/openssl/openssl.spec
@@ -6,7 +6,7 @@ Release: 1
Summary: Secure Sockets Layer and cryptography libraries and tools
Name: openssl
-Version: 1.0.2a
+Version: 1.0.2c
Source0: ftp://ftp.openssl.org/source/%{name}-%{version}.tar.gz
License: OpenSSL
Group: System Environment/Libraries
diff --git a/openssl/ssl/Makefile b/openssl/ssl/Makefile
index a7bd4ee14..42f1af5c8 100644
--- a/openssl/ssl/Makefile
+++ b/openssl/ssl/Makefile
@@ -89,12 +89,13 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
-depend:
- @if [ -z "$(THIS)" ]; then \
- $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
- else \
- $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC); \
- fi
+update: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+
+depend: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+local_depend:
+ @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
dclean:
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
@@ -486,26 +487,27 @@ s2_pkt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
s2_pkt.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
s2_pkt.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h s2_pkt.c
s2_pkt.o: ssl_locl.h
-s2_srvr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
-s2_srvr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
-s2_srvr.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
-s2_srvr.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
-s2_srvr.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
-s2_srvr.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
-s2_srvr.o: ../include/openssl/evp.h ../include/openssl/hmac.h
-s2_srvr.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
-s2_srvr.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
-s2_srvr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-s2_srvr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
-s2_srvr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
-s2_srvr.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
-s2_srvr.o: ../include/openssl/rsa.h ../include/openssl/safestack.h
-s2_srvr.o: ../include/openssl/sha.h ../include/openssl/srtp.h
-s2_srvr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
-s2_srvr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
-s2_srvr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
-s2_srvr.o: ../include/openssl/tls1.h ../include/openssl/x509.h
-s2_srvr.o: ../include/openssl/x509_vfy.h s2_srvr.c ssl_locl.h
+s2_srvr.o: ../crypto/constant_time_locl.h ../e_os.h ../include/openssl/asn1.h
+s2_srvr.o: ../include/openssl/bio.h ../include/openssl/buffer.h
+s2_srvr.o: ../include/openssl/comp.h ../include/openssl/crypto.h
+s2_srvr.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h
+s2_srvr.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
+s2_srvr.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
+s2_srvr.o: ../include/openssl/err.h ../include/openssl/evp.h
+s2_srvr.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
+s2_srvr.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
+s2_srvr.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
+s2_srvr.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
+s2_srvr.o: ../include/openssl/pem.h ../include/openssl/pem2.h
+s2_srvr.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
+s2_srvr.o: ../include/openssl/rand.h ../include/openssl/rsa.h
+s2_srvr.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+s2_srvr.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
+s2_srvr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
+s2_srvr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
+s2_srvr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
+s2_srvr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h s2_srvr.c
+s2_srvr.o: ssl_locl.h
s3_both.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s3_both.o: ../include/openssl/buffer.h ../include/openssl/comp.h
s3_both.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
diff --git a/openssl/ssl/d1_both.c b/openssl/ssl/d1_both.c
index 21048003b..b4ee7abe2 100644
--- a/openssl/ssl/d1_both.c
+++ b/openssl/ssl/d1_both.c
@@ -489,6 +489,12 @@ long dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
return i;
}
+ if (mt >= 0 && s->s3->tmp.message_type != mt) {
+ al = SSL_AD_UNEXPECTED_MESSAGE;
+ SSLerr(SSL_F_DTLS1_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
+ goto f_err;
+ }
+
p = (unsigned char *)s->init_buf->data;
msg_len = msg_hdr->msg_len;
@@ -873,6 +879,20 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
/* parse the message fragment header */
dtls1_get_message_header(wire, &msg_hdr);
+ len = msg_hdr.msg_len;
+ frag_off = msg_hdr.frag_off;
+ frag_len = msg_hdr.frag_len;
+
+ /*
+ * We must have at least frag_len bytes left in the record to be read.
+ * Fragments must not span records.
+ */
+ if (frag_len > s->s3->rrec.length) {
+ al = SSL3_AD_ILLEGAL_PARAMETER;
+ SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT, SSL_R_BAD_LENGTH);
+ goto f_err;
+ }
+
/*
* if this is a future (or stale) message it gets buffered
* (or dropped)--no further processing at this time
@@ -883,10 +903,6 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
&& !(s->d1->listen && msg_hdr.seq == 1))
return dtls1_process_out_of_seq_message(s, &msg_hdr, ok);
- len = msg_hdr.msg_len;
- frag_off = msg_hdr.frag_off;
- frag_len = msg_hdr.frag_len;
-
if (frag_len && frag_len < len)
return dtls1_reassemble_fragment(s, &msg_hdr, ok);
@@ -917,17 +933,16 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
if ((al = dtls1_preprocess_fragment(s, &msg_hdr, max)))
goto f_err;
- /* XDTLS: ressurect this when restart is in place */
- s->state = stn;
-
if (frag_len > 0) {
unsigned char *p =
(unsigned char *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH;
i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE,
&p[frag_off], frag_len, 0);
+
/*
- * XDTLS: fix this--message fragments cannot span multiple packets
+ * This shouldn't ever fail due to NBIO because we already checked
+ * that we have enough data in the record
*/
if (i <= 0) {
s->rwstate = SSL_READING;
@@ -948,6 +963,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
}
*ok = 1;
+ s->state = stn;
/*
* Note that s->init_num is *not* used as current offset in
@@ -1420,7 +1436,10 @@ int dtls1_process_heartbeat(SSL *s)
memcpy(bp, pl, payload);
bp += payload;
/* Random padding */
- RAND_pseudo_bytes(bp, padding);
+ if (RAND_pseudo_bytes(bp, padding) < 0) {
+ OPENSSL_free(buffer);
+ return -1;
+ }
r = dtls1_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, write_length);
@@ -1454,7 +1473,7 @@ int dtls1_process_heartbeat(SSL *s)
int dtls1_heartbeat(SSL *s)
{
unsigned char *buf, *p;
- int ret;
+ int ret = -1;
unsigned int payload = 18; /* Sequence number + random bytes */
unsigned int padding = 16; /* Use minimum padding */
@@ -1502,10 +1521,12 @@ int dtls1_heartbeat(SSL *s)
/* Sequence number */
s2n(s->tlsext_hb_seq, p);
/* 16 random bytes */
- RAND_pseudo_bytes(p, 16);
+ if (RAND_pseudo_bytes(p, 16) < 0)
+ goto err;
p += 16;
/* Random padding */
- RAND_pseudo_bytes(p, padding);
+ if (RAND_pseudo_bytes(p, padding) < 0)
+ goto err;
ret = dtls1_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
if (ret >= 0) {
@@ -1518,6 +1539,7 @@ int dtls1_heartbeat(SSL *s)
s->tlsext_hb_pending = 1;
}
+err:
OPENSSL_free(buf);
return ret;
diff --git a/openssl/ssl/d1_clnt.c b/openssl/ssl/d1_clnt.c
index 1858263e1..4c2ccbf5a 100644
--- a/openssl/ssl/d1_clnt.c
+++ b/openssl/ssl/d1_clnt.c
@@ -228,6 +228,7 @@ int dtls1_connect(SSL *s)
(s->version & 0xff00) != (DTLS1_BAD_VER & 0xff00)) {
SSLerr(SSL_F_DTLS1_CONNECT, ERR_R_INTERNAL_ERROR);
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -237,10 +238,12 @@ int dtls1_connect(SSL *s)
if (s->init_buf == NULL) {
if ((buf = BUF_MEM_new()) == NULL) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
s->init_buf = buf;
@@ -249,12 +252,14 @@ int dtls1_connect(SSL *s)
if (!ssl3_setup_buffers(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
/* setup buffing BIO */
if (!ssl_init_wbio_buffer(s, 0)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -433,6 +438,7 @@ int dtls1_connect(SSL *s)
*/
if (!ssl3_check_cert_and_algorithm(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
break;
@@ -564,6 +570,7 @@ int dtls1_connect(SSL *s)
#endif
if (!s->method->ssl3_enc->setup_key_block(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -571,6 +578,7 @@ int dtls1_connect(SSL *s)
SSL3_CHANGE_CIPHER_CLIENT_WRITE))
{
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
#ifndef OPENSSL_NO_SCTP
@@ -751,6 +759,7 @@ int dtls1_connect(SSL *s)
goto end;
/* break; */
+ case SSL_ST_ERR:
default:
SSLerr(SSL_F_DTLS1_CONNECT, SSL_R_UNKNOWN_STATE);
ret = -1;
@@ -842,5 +851,6 @@ static int dtls1_get_hello_verify(SSL *s)
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ s->state = SSL_ST_ERR;
return -1;
}
diff --git a/openssl/ssl/d1_pkt.c b/openssl/ssl/d1_pkt.c
index 940ca6927..fe30ec7d0 100644
--- a/openssl/ssl/d1_pkt.c
+++ b/openssl/ssl/d1_pkt.c
@@ -1069,7 +1069,7 @@ int dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
(s->d1->handshake_fragment[3] != 0)) {
al = SSL_AD_DECODE_ERROR;
SSLerr(SSL_F_DTLS1_READ_BYTES, SSL_R_BAD_HELLO_REQUEST);
- goto err;
+ goto f_err;
}
/*
diff --git a/openssl/ssl/d1_srvr.c b/openssl/ssl/d1_srvr.c
index eafa0127b..655333a25 100644
--- a/openssl/ssl/d1_srvr.c
+++ b/openssl/ssl/d1_srvr.c
@@ -240,11 +240,13 @@ int dtls1_accept(SSL *s)
if (s->init_buf == NULL) {
if ((buf = BUF_MEM_new()) == NULL) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
BUF_MEM_free(buf);
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
s->init_buf = buf;
@@ -252,6 +254,7 @@ int dtls1_accept(SSL *s)
if (!ssl3_setup_buffers(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -273,6 +276,7 @@ int dtls1_accept(SSL *s)
#endif
if (!ssl_init_wbio_buffer(s, 1)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -486,7 +490,7 @@ int dtls1_accept(SSL *s)
#ifndef OPENSSL_NO_PSK
|| ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint)
#endif
- || (alg_k & (SSL_kEDH | SSL_kDHr | SSL_kDHd))
+ || (alg_k & SSL_kDHE)
|| (alg_k & SSL_kEECDH)
|| ((alg_k & SSL_kRSA)
&& (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL
@@ -661,11 +665,14 @@ int dtls1_accept(SSL *s)
*/
if (!s->s3->handshake_buffer) {
SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return -1;
}
s->s3->flags |= TLS1_FLAGS_KEEP_HANDSHAKE;
- if (!ssl3_digest_cached_records(s))
+ if (!ssl3_digest_cached_records(s)) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
} else {
s->state = SSL3_ST_SR_CERT_VRFY_A;
s->init_num = 0;
@@ -688,15 +695,6 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SR_CERT_VRFY_A:
case SSL3_ST_SR_CERT_VRFY_B:
- /*
- * This *should* be the first time we enable CCS, but be
- * extra careful about surrounding code changes. We need
- * to set this here because we don't know if we're
- * expecting a CertificateVerify or not.
- */
- if (!s->s3->change_cipher_spec)
- s->d1->change_cipher_spec_ok = 1;
- /* we should decide if we expected this one */
ret = ssl3_get_cert_verify(s);
if (ret <= 0)
goto end;
@@ -713,11 +711,10 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SR_FINISHED_A:
case SSL3_ST_SR_FINISHED_B:
/*
- * Enable CCS for resumed handshakes.
- * In a full handshake, we end up here through
- * SSL3_ST_SR_CERT_VRFY_B, so change_cipher_spec_ok was
- * already set. Receiving a CCS clears the flag, so make
- * sure not to re-enable it to ban duplicates.
+ * Enable CCS. Receiving a CCS clears the flag, so make
+ * sure not to re-enable it to ban duplicates. This *should* be the
+ * first time we have received one - but we check anyway to be
+ * cautious.
* s->s3->change_cipher_spec is set when a CCS is
* processed in d1_pkt.c, and remains set until
* the client's Finished message is read.
@@ -767,6 +764,7 @@ int dtls1_accept(SSL *s)
s->session->cipher = s->s3->tmp.new_cipher;
if (!s->method->ssl3_enc->setup_key_block(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -795,6 +793,7 @@ int dtls1_accept(SSL *s)
SSL3_CHANGE_CIPHER_SERVER_WRITE))
{
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -875,6 +874,7 @@ int dtls1_accept(SSL *s)
goto end;
/* break; */
+ case SSL_ST_ERR:
default:
SSLerr(SSL_F_DTLS1_ACCEPT, SSL_R_UNKNOWN_STATE);
ret = -1;
@@ -933,6 +933,7 @@ int dtls1_send_hello_verify_request(SSL *s)
&(s->d1->cookie_len)) == 0) {
SSLerr(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST,
ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return 0;
}
diff --git a/openssl/ssl/s2_pkt.c b/openssl/ssl/s2_pkt.c
index 614b9a35d..7a6188813 100644
--- a/openssl/ssl/s2_pkt.c
+++ b/openssl/ssl/s2_pkt.c
@@ -576,6 +576,20 @@ static int n_do_ssl_write(SSL *s, const unsigned char *buf, unsigned int len)
s->s2->padding = p;
s->s2->mac_data = &(s->s2->wbuf[3]);
s->s2->wact_data = &(s->s2->wbuf[3 + mac_size]);
+
+ /*
+ * It would be clearer to write this as follows:
+ * if (mac_size + len + p > SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER)
+ * However |len| is user input that could in theory be very large. We
+ * know |mac_size| and |p| are small, so to avoid any possibility of
+ * overflow we write it like this.
+ *
+ * In theory this should never fail because the logic above should have
+ * modified |len| if it is too big. But we are being cautious.
+ */
+ if (len > (SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER - (mac_size + p))) {
+ return -1;
+ }
/* we copy the data into s->s2->wbuf */
memcpy(s->s2->wact_data, buf, len);
if (p)
diff --git a/openssl/ssl/s2_srvr.c b/openssl/ssl/s2_srvr.c
index 19bb48c9c..4289272b7 100644
--- a/openssl/ssl/s2_srvr.c
+++ b/openssl/ssl/s2_srvr.c
@@ -111,6 +111,7 @@
#include "ssl_locl.h"
#ifndef OPENSSL_NO_SSL2
+#include "../crypto/constant_time_locl.h"
# include <stdio.h>
# include <openssl/bio.h>
# include <openssl/rand.h>
@@ -372,12 +373,15 @@ int ssl2_accept(SSL *s)
static int get_client_master_key(SSL *s)
{
int is_export, i, n, keya;
- unsigned int ek;
+ unsigned int num_encrypted_key_bytes, key_length;
unsigned long len;
unsigned char *p;
const SSL_CIPHER *cp;
const EVP_CIPHER *c;
const EVP_MD *md;
+ unsigned char rand_premaster_secret[SSL_MAX_MASTER_KEY_LENGTH];
+ unsigned char decrypt_good;
+ size_t j;
p = (unsigned char *)s->init_buf->data;
if (s->state == SSL2_ST_GET_CLIENT_MASTER_KEY_A) {
@@ -465,12 +469,6 @@ static int get_client_master_key(SSL *s)
return (0);
}
- if (s->session->cipher->algorithm2 & SSL2_CF_8_BYTE_ENC) {
- is_export = 1;
- ek = 8;
- } else
- ek = 5;
-
/*
* The format of the CLIENT-MASTER-KEY message is
* 1 byte message type
@@ -484,12 +482,27 @@ static int get_client_master_key(SSL *s)
*
* If the cipher is an export cipher, then the encrypted key bytes
* are a fixed portion of the total key (5 or 8 bytes). The size of
- * this portion is in |ek|. If the cipher is not an export cipher,
- * then the entire key material is encrypted (i.e., clear key length
- * must be zero).
+ * this portion is in |num_encrypted_key_bytes|. If the cipher is not an
+ * export cipher, then the entire key material is encrypted (i.e., clear
+ * key length must be zero).
*/
- if ((!is_export && s->s2->tmp.clear != 0) ||
- (is_export && s->s2->tmp.clear + ek != (unsigned int)EVP_CIPHER_key_length(c))) {
+ key_length = (unsigned int)EVP_CIPHER_key_length(c);
+ if (key_length > SSL_MAX_MASTER_KEY_LENGTH) {
+ ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
+ SSLerr(SSL_F_GET_CLIENT_MASTER_KEY, ERR_R_INTERNAL_ERROR);
+ return -1;
+ }
+
+ if (s->session->cipher->algorithm2 & SSL2_CF_8_BYTE_ENC) {
+ is_export = 1;
+ num_encrypted_key_bytes = 8;
+ } else if (is_export) {
+ num_encrypted_key_bytes = 5;
+ } else {
+ num_encrypted_key_bytes = key_length;
+ }
+
+ if (s->s2->tmp.clear + num_encrypted_key_bytes != key_length) {
ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
SSLerr(SSL_F_GET_CLIENT_MASTER_KEY,SSL_R_BAD_LENGTH);
return -1;
@@ -499,64 +512,49 @@ static int get_client_master_key(SSL *s)
* Decryption can't be expanding, so if we don't have enough encrypted
* bytes to fit the key in the buffer, stop now.
*/
- if ((is_export && s->s2->tmp.enc < ek) ||
- (!is_export && s->s2->tmp.enc < (unsigned int)EVP_CIPHER_key_length(c))) {
+ if (s->s2->tmp.enc < num_encrypted_key_bytes) {
ssl2_return_error(s,SSL2_PE_UNDEFINED_ERROR);
SSLerr(SSL_F_GET_CLIENT_MASTER_KEY,SSL_R_LENGTH_TOO_SHORT);
return -1;
}
+ /*
+ * We must not leak whether a decryption failure occurs because of
+ * Bleichenbacher's attack on PKCS #1 v1.5 RSA padding (see RFC 2246,
+ * section 7.4.7.1). The code follows that advice of the TLS RFC and
+ * generates a random premaster secret for the case that the decrypt
+ * fails. See https://tools.ietf.org/html/rfc5246#section-7.4.7.1
+ */
+
+ /*
+ * should be RAND_bytes, but we cannot work around a failure.
+ */
+ if (RAND_pseudo_bytes(rand_premaster_secret,
+ (int)num_encrypted_key_bytes) <= 0)
+ return 0;
+
i = ssl_rsa_private_decrypt(s->cert, s->s2->tmp.enc,
&(p[s->s2->tmp.clear]),
&(p[s->s2->tmp.clear]),
(s->s2->ssl2_rollback) ? RSA_SSLV23_PADDING :
RSA_PKCS1_PADDING);
-
- /* bad decrypt */
-# if 1
+ ERR_clear_error();
/*
* If a bad decrypt, continue with protocol but with a random master
* secret (Bleichenbacher attack)
*/
- if ((i < 0) || ((!is_export && i != EVP_CIPHER_key_length(c))
- || (is_export && i != (int)ek))) {
- ERR_clear_error();
- if (is_export)
- i = ek;
- else
- i = EVP_CIPHER_key_length(c);
- if (RAND_pseudo_bytes(&p[s->s2->tmp.clear], i) <= 0)
- return 0;
- }
-# else
- if (i < 0) {
- error = 1;
- SSLerr(SSL_F_GET_CLIENT_MASTER_KEY, SSL_R_BAD_RSA_DECRYPT);
- }
- /* incorrect number of key bytes for non export cipher */
- else if ((!is_export && (i != EVP_CIPHER_key_length(c)))
- || (is_export && ((i != ek) || (s->s2->tmp.clear + i !=
- EVP_CIPHER_key_length(c))))) {
- error = 1;
- SSLerr(SSL_F_GET_CLIENT_MASTER_KEY, SSL_R_WRONG_NUMBER_OF_KEY_BITS);
- }
- if (error) {
- ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
- return (-1);
+ decrypt_good = constant_time_eq_int_8(i, (int)num_encrypted_key_bytes);
+ for (j = 0; j < num_encrypted_key_bytes; j++) {
+ p[s->s2->tmp.clear + j] =
+ constant_time_select_8(decrypt_good, p[s->s2->tmp.clear + j],
+ rand_premaster_secret[j]);
}
-# endif
- if (is_export)
- i = EVP_CIPHER_key_length(c);
+ s->session->master_key_length = (int)key_length;
+ memcpy(s->session->master_key, p, key_length);
+ OPENSSL_cleanse(p, key_length);
- if (i > SSL_MAX_MASTER_KEY_LENGTH) {
- ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
- SSLerr(SSL_F_GET_CLIENT_MASTER_KEY, ERR_R_INTERNAL_ERROR);
- return -1;
- }
- s->session->master_key_length = i;
- memcpy(s->session->master_key, p, (unsigned int)i);
- return (1);
+ return 1;
}
static int get_client_hello(SSL *s)
diff --git a/openssl/ssl/s3_both.c b/openssl/ssl/s3_both.c
index c92fd721e..019e21cd0 100644
--- a/openssl/ssl/s3_both.c
+++ b/openssl/ssl/s3_both.c
@@ -168,7 +168,7 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
i = s->method->ssl3_enc->final_finish_mac(s,
sender, slen,
s->s3->tmp.finish_md);
- if (i == 0)
+ if (i <= 0)
return 0;
s->s3->tmp.finish_md_len = i;
memcpy(p, s->s3->tmp.finish_md, i);
diff --git a/openssl/ssl/s3_cbc.c b/openssl/ssl/s3_cbc.c
index f31dc046f..a0edcef90 100644
--- a/openssl/ssl/s3_cbc.c
+++ b/openssl/ssl/s3_cbc.c
@@ -149,7 +149,7 @@ int tls1_cbc_remove_padding(const SSL *s,
*/
if ((s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) && !s->expand) {
/* First packet is even in size, so check */
- if ((memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0", 8) == 0) &&
+ if ((CRYPTO_memcmp(s->s3->read_sequence, "\0\0\0\0\0\0\0\0", 8) == 0) &&
!(padding_length & 1)) {
s->s3->flags |= TLS1_FLAGS_TLS_PADDING_BUG;
}
@@ -639,12 +639,22 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx,
if (k > 0) {
if (is_sslv3) {
+ unsigned overhang;
+
/*
* The SSLv3 header is larger than a single block. overhang is
* the number of bytes beyond a single block that the header
- * consumes: either 7 bytes (SHA1) or 11 bytes (MD5).
+ * consumes: either 7 bytes (SHA1) or 11 bytes (MD5). There are no
+ * ciphersuites in SSLv3 that are not SHA1 or MD5 based and
+ * therefore we can be confident that the header_length will be
+ * greater than |md_block_size|. However we add a sanity check just
+ * in case
*/
- unsigned overhang = header_length - md_block_size;
+ if (header_length <= md_block_size) {
+ /* Should never happen */
+ return;
+ }
+ overhang = header_length - md_block_size;
md_transform(md_state.c, header);
memcpy(first_block, header + md_block_size, overhang);
memcpy(first_block + overhang, data, md_block_size - overhang);
diff --git a/openssl/ssl/s3_clnt.c b/openssl/ssl/s3_clnt.c
index 91053d59e..2346ce50c 100644
--- a/openssl/ssl/s3_clnt.c
+++ b/openssl/ssl/s3_clnt.c
@@ -168,6 +168,9 @@
#endif
static int ca_dn_cmp(const X509_NAME *const *a, const X509_NAME *const *b);
+#ifndef OPENSSL_NO_TLSEXT
+static int ssl3_check_finished(SSL *s);
+#endif
#ifndef OPENSSL_NO_SSL3_METHOD
static const SSL_METHOD *ssl3_get_client_method(int ver)
@@ -235,6 +238,7 @@ int ssl3_connect(SSL *s)
if ((s->version & 0xff00) != 0x0300) {
SSLerr(SSL_F_SSL3_CONNECT, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
ret = -1;
goto end;
}
@@ -245,10 +249,12 @@ int ssl3_connect(SSL *s)
if (s->init_buf == NULL) {
if ((buf = BUF_MEM_new()) == NULL) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
s->init_buf = buf;
@@ -263,6 +269,7 @@ int ssl3_connect(SSL *s)
/* setup buffing BIO */
if (!ssl_init_wbio_buffer(s, 0)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -317,12 +324,24 @@ int ssl3_connect(SSL *s)
break;
case SSL3_ST_CR_CERT_A:
case SSL3_ST_CR_CERT_B:
+#ifndef OPENSSL_NO_TLSEXT
+ /* Noop (ret = 0) for everything but EAP-FAST. */
+ ret = ssl3_check_finished(s);
+ if (ret < 0)
+ goto end;
+ if (ret == 1) {
+ s->hit = 1;
+ s->state = SSL3_ST_CR_FINISHED_A;
+ s->init_num = 0;
+ break;
+ }
+#endif
/* Check if it is anon DH/ECDH, SRP auth */
/* or PSK */
if (!
(s->s3->tmp.
new_cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
-&& !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
+ && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
ret = ssl3_get_server_certificate(s);
if (ret <= 0)
goto end;
@@ -358,6 +377,7 @@ int ssl3_connect(SSL *s)
*/
if (!ssl3_check_cert_and_algorithm(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
break;
@@ -381,6 +401,7 @@ int ssl3_connect(SSL *s)
if ((ret = SRP_Calc_A_param(s)) <= 0) {
SSLerr(SSL_F_SSL3_CONNECT, SSL_R_SRP_A_CALC);
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
goto end;
}
}
@@ -472,6 +493,7 @@ int ssl3_connect(SSL *s)
#endif
if (!s->method->ssl3_enc->setup_key_block(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -479,6 +501,7 @@ int ssl3_connect(SSL *s)
SSL3_CHANGE_CIPHER_CLIENT_WRITE))
{
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -553,7 +576,8 @@ int ssl3_connect(SSL *s)
case SSL3_ST_CR_FINISHED_A:
case SSL3_ST_CR_FINISHED_B:
- s->s3->flags |= SSL3_FLAGS_CCS_OK;
+ if (!s->s3->change_cipher_spec)
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
ret = ssl3_get_finished(s, SSL3_ST_CR_FINISHED_A,
SSL3_ST_CR_FINISHED_B);
if (ret <= 0)
@@ -612,6 +636,7 @@ int ssl3_connect(SSL *s)
goto end;
/* break; */
+ case SSL_ST_ERR:
default:
SSLerr(SSL_F_SSL3_CONNECT, SSL_R_UNKNOWN_STATE);
ret = -1;
@@ -659,9 +684,17 @@ int ssl3_client_hello(SSL *s)
buf = (unsigned char *)s->init_buf->data;
if (s->state == SSL3_ST_CW_CLNT_HELLO_A) {
SSL_SESSION *sess = s->session;
- if ((sess == NULL) ||
- (sess->ssl_version != s->version) ||
- !sess->session_id_length || (sess->not_resumable)) {
+ if ((sess == NULL) || (sess->ssl_version != s->version) ||
+#ifdef OPENSSL_NO_TLSEXT
+ !sess->session_id_length ||
+#else
+ /*
+ * In the case of EAP-FAST, we can have a pre-shared
+ * "ticket" without a session ID.
+ */
+ (!sess->session_id_length && !sess->tlsext_tick) ||
+#endif
+ (sess->not_resumable)) {
if (!ssl_get_new_session(s, 0))
goto err;
}
@@ -853,6 +886,7 @@ int ssl3_client_hello(SSL *s)
/* SSL3_ST_CW_CLNT_HELLO_B */
return ssl_do_write(s);
err:
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -924,7 +958,7 @@ int ssl3_get_server_hello(SSL *s)
al = SSL_AD_PROTOCOL_VERSION;
goto f_err;
}
- s->version = s->method->version;
+ s->session->ssl_version = s->version = s->method->version;
}
if ((p[0] != (s->version >> 8)) || (p[1] != (s->version & 0xff))) {
@@ -952,10 +986,19 @@ int ssl3_get_server_hello(SSL *s)
}
#ifndef OPENSSL_NO_TLSEXT
/*
- * check if we want to resume the session based on external pre-shared
- * secret
+ * Check if we can resume the session based on external pre-shared secret.
+ * EAP-FAST (RFC 4851) supports two types of session resumption.
+ * Resumption based on server-side state works with session IDs.
+ * Resumption based on pre-shared Protected Access Credentials (PACs)
+ * works by overriding the SessionTicket extension at the application
+ * layer, and does not send a session ID. (We do not know whether EAP-FAST
+ * servers would honour the session ID.) Therefore, the session ID alone
+ * is not a reliable indicator of session resumption, so we first check if
+ * we can resume, and later peek at the next handshake message to see if the
+ * server wants to resume.
*/
- if (s->version >= TLS1_VERSION && s->tls_session_secret_cb) {
+ if (s->version >= TLS1_VERSION && s->tls_session_secret_cb &&
+ s->session->tlsext_tick) {
SSL_CIPHER *pref_cipher = NULL;
s->session->master_key_length = sizeof(s->session->master_key);
if (s->tls_session_secret_cb(s, s->session->master_key,
@@ -964,12 +1007,15 @@ int ssl3_get_server_hello(SSL *s)
s->tls_session_secret_cb_arg)) {
s->session->cipher = pref_cipher ?
pref_cipher : ssl_get_cipher_by_char(s, p + j);
- s->hit = 1;
+ } else {
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
+ al = SSL_AD_INTERNAL_ERROR;
+ goto f_err;
}
}
#endif /* OPENSSL_NO_TLSEXT */
- if (!s->hit && j != 0 && j == s->session->session_id_length
+ if (j != 0 && j == s->session->session_id_length
&& memcmp(p, s->session->session_id, j) == 0) {
if (s->sid_ctx_length != s->session->sid_ctx_length
|| memcmp(s->session->sid_ctx, s->sid_ctx, s->sid_ctx_length)) {
@@ -980,12 +1026,13 @@ int ssl3_get_server_hello(SSL *s)
goto f_err;
}
s->hit = 1;
- }
- /* a miss or crap from the other end */
- if (!s->hit) {
+ } else {
/*
- * If we were trying for session-id reuse, make a new SSL_SESSION so
- * we don't stuff up other people
+ * If we were trying for session-id reuse but the server
+ * didn't echo the ID, make a new SSL_SESSION.
+ * In the case of EAP-FAST and PAC, we do not send a session ID,
+ * so the PAC-based session secret is always preserved. It'll be
+ * overwritten if the server refuses resumption.
*/
if (s->session->session_id_length > 0) {
if (!ssl_get_new_session(s, 0)) {
@@ -1113,6 +1160,7 @@ int ssl3_get_server_hello(SSL *s)
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
err:
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -1298,8 +1346,10 @@ int ssl3_get_server_certificate(SSL *s)
if (0) {
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
- }
err:
+ s->state = SSL_ST_ERR;
+ }
+
EVP_PKEY_free(pkey);
X509_free(x);
sk_X509_pop_free(sk, X509_free);
@@ -1621,6 +1671,13 @@ int ssl3_get_key_exchange(SSL *s)
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
goto err;
}
+
+ if (EVP_PKEY_bits(pkey) <= SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
+ al = SSL_AD_UNEXPECTED_MESSAGE;
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_UNEXPECTED_MESSAGE);
+ goto f_err;
+ }
+
s->session->sess_cert->peer_rsa_tmp = rsa;
rsa = NULL;
}
@@ -1965,6 +2022,7 @@ int ssl3_get_key_exchange(SSL *s)
EC_KEY_free(ecdh);
#endif
EVP_MD_CTX_cleanup(&md_ctx);
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -2140,7 +2198,10 @@ int ssl3_get_certificate_request(SSL *s)
ca_sk = NULL;
ret = 1;
+ goto done;
err:
+ s->state = SSL_ST_ERR;
+ done:
if (ca_sk != NULL)
sk_X509_NAME_pop_free(ca_sk, X509_NAME_free);
return (ret);
@@ -2175,6 +2236,38 @@ int ssl3_get_new_session_ticket(SSL *s)
}
p = d = (unsigned char *)s->init_msg;
+
+ if (s->session->session_id_length > 0) {
+ int i = s->session_ctx->session_cache_mode;
+ SSL_SESSION *new_sess;
+ /*
+ * We reused an existing session, so we need to replace it with a new
+ * one
+ */
+ if (i & SSL_SESS_CACHE_CLIENT) {
+ /*
+ * Remove the old session from the cache
+ */
+ if (i & SSL_SESS_CACHE_NO_INTERNAL_STORE) {
+ if (s->session_ctx->remove_session_cb != NULL)
+ s->session_ctx->remove_session_cb(s->session_ctx,
+ s->session);
+ } else {
+ /* We carry on if this fails */
+ SSL_CTX_remove_session(s->session_ctx, s->session);
+ }
+ }
+
+ if ((new_sess = ssl_session_dup(s->session, 0)) == 0) {
+ al = SSL_AD_INTERNAL_ERROR;
+ SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
+ goto f_err;
+ }
+
+ SSL_SESSION_free(s->session);
+ s->session = new_sess;
+ }
+
n2l(p, s->session->tlsext_tick_lifetime_hint);
n2s(p, ticklen);
/* ticket_lifetime_hint + ticket_length + ticket */
@@ -2217,6 +2310,7 @@ int ssl3_get_new_session_ticket(SSL *s)
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
err:
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -2277,6 +2371,7 @@ int ssl3_get_cert_status(SSL *s)
return 1;
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ s->state = SSL_ST_ERR;
return (-1);
}
#endif
@@ -2298,12 +2393,32 @@ int ssl3_get_server_done(SSL *s)
/* should contain no data */
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
SSLerr(SSL_F_SSL3_GET_SERVER_DONE, SSL_R_LENGTH_MISMATCH);
+ s->state = SSL_ST_ERR;
return -1;
}
ret = 1;
return (ret);
}
+#ifndef OPENSSL_NO_DH
+static DH *get_server_static_dh_key(SESS_CERT *scert)
+{
+ DH *dh_srvr = NULL;
+ EVP_PKEY *spkey = NULL;
+ int idx = scert->peer_cert_type;
+
+ if (idx >= 0)
+ spkey = X509_get_pubkey(scert->peer_pkeys[idx].x509);
+ if (spkey) {
+ dh_srvr = EVP_PKEY_get1_DH(spkey);
+ EVP_PKEY_free(spkey);
+ }
+ if (dh_srvr == NULL)
+ SSLerr(SSL_F_GET_SERVER_STATIC_DH_KEY, ERR_R_INTERNAL_ERROR);
+ return dh_srvr;
+}
+#endif
+
int ssl3_send_client_key_exchange(SSL *s)
{
unsigned char *p;
@@ -2546,25 +2661,14 @@ int ssl3_send_client_key_exchange(SSL *s)
goto err;
}
- if (scert->peer_dh_tmp != NULL)
+ if (scert->peer_dh_tmp != NULL) {
dh_srvr = scert->peer_dh_tmp;
- else {
- /* we get them from the cert */
- int idx = scert->peer_cert_type;
- EVP_PKEY *spkey = NULL;
- dh_srvr = NULL;
- if (idx >= 0)
- spkey = X509_get_pubkey(scert->peer_pkeys[idx].x509);
- if (spkey) {
- dh_srvr = EVP_PKEY_get1_DH(spkey);
- EVP_PKEY_free(spkey);
- }
- if (dh_srvr == NULL) {
- SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
+ } else {
+ dh_srvr = get_server_static_dh_key(scert);
+ if (dh_srvr == NULL)
goto err;
- }
}
+
if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
/* Use client certificate key */
EVP_PKEY *clkey = s->cert->key->privatekey;
@@ -2624,8 +2728,6 @@ int ssl3_send_client_key_exchange(SSL *s)
}
DH_free(dh_clnt);
-
- /* perhaps clean things up a bit EAY EAY EAY EAY */
}
#endif
@@ -2847,7 +2949,10 @@ int ssl3_send_client_key_exchange(SSL *s)
EVP_PKEY_encrypt_init(pkey_ctx);
/* Generate session key */
- RAND_bytes(premaster_secret, 32);
+ if (RAND_bytes(premaster_secret, 32) <= 0) {
+ EVP_PKEY_CTX_free(pkey_ctx);
+ goto err;
+ }
/*
* If we have client certificate, use its secret as peer key
*/
@@ -3061,6 +3166,7 @@ int ssl3_send_client_key_exchange(SSL *s)
EC_KEY_free(clnt_ecdh);
EVP_PKEY_free(srvr_pub_pkey);
#endif
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -3189,6 +3295,7 @@ int ssl3_send_client_verify(SSL *s)
err:
EVP_MD_CTX_cleanup(&mctx);
EVP_PKEY_CTX_free(pctx);
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -3252,6 +3359,7 @@ int ssl3_send_client_certificate(SSL *s)
}
if (i == 0) {
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return 0;
}
s->rwstate = SSL_NOTHING;
@@ -3312,6 +3420,7 @@ int ssl3_send_client_certificate(SSL *s)
2) ? NULL : s->cert->key)) {
SSLerr(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return 0;
}
}
@@ -3326,6 +3435,7 @@ int ssl3_check_cert_and_algorithm(SSL *s)
int i, idx;
long alg_k, alg_a;
EVP_PKEY *pkey = NULL;
+ int pkey_bits;
SESS_CERT *sc;
#ifndef OPENSSL_NO_RSA
RSA *rsa;
@@ -3333,6 +3443,7 @@ int ssl3_check_cert_and_algorithm(SSL *s)
#ifndef OPENSSL_NO_DH
DH *dh;
#endif
+ int al = SSL_AD_HANDSHAKE_FAILURE;
alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
alg_a = s->s3->tmp.new_cipher->algorithm_auth;
@@ -3375,6 +3486,7 @@ int ssl3_check_cert_and_algorithm(SSL *s)
}
#endif
pkey = X509_get_pubkey(sc->peer_pkeys[idx].x509);
+ pkey_bits = EVP_PKEY_bits(pkey);
i = X509_certificate_type(sc->peer_pkeys[idx].x509, pkey);
EVP_PKEY_free(pkey);
@@ -3392,40 +3504,82 @@ int ssl3_check_cert_and_algorithm(SSL *s)
}
#endif
#ifndef OPENSSL_NO_RSA
- if ((alg_k & SSL_kRSA) &&
- !(has_bits(i, EVP_PK_RSA | EVP_PKT_ENC) || (rsa != NULL))) {
- SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
- SSL_R_MISSING_RSA_ENCRYPTING_CERT);
- goto f_err;
+ if (alg_k & SSL_kRSA) {
+ if (!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
+ !has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
+ SSL_R_MISSING_RSA_ENCRYPTING_CERT);
+ goto f_err;
+ } else if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher)) {
+ if (pkey_bits <= SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
+ if (!has_bits(i, EVP_PK_RSA | EVP_PKT_ENC)) {
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
+ SSL_R_MISSING_RSA_ENCRYPTING_CERT);
+ goto f_err;
+ }
+ if (rsa != NULL) {
+ /* server key exchange is not allowed. */
+ al = SSL_AD_INTERNAL_ERROR;
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, ERR_R_INTERNAL_ERROR);
+ goto f_err;
+ }
+ }
+ }
}
#endif
#ifndef OPENSSL_NO_DH
- if ((alg_k & SSL_kEDH) &&
- !(has_bits(i, EVP_PK_DH | EVP_PKT_EXCH) || (dh != NULL))) {
- SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_MISSING_DH_KEY);
+ if ((alg_k & SSL_kEDH) && dh == NULL) {
+ al = SSL_AD_INTERNAL_ERROR;
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, ERR_R_INTERNAL_ERROR);
goto f_err;
- } else if ((alg_k & SSL_kDHr) && !SSL_USE_SIGALGS(s) &&
+ }
+ if ((alg_k & SSL_kDHr) && !SSL_USE_SIGALGS(s) &&
!has_bits(i, EVP_PK_DH | EVP_PKS_RSA)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_DH_RSA_CERT);
goto f_err;
}
# ifndef OPENSSL_NO_DSA
- else if ((alg_k & SSL_kDHd) && !SSL_USE_SIGALGS(s) &&
- !has_bits(i, EVP_PK_DH | EVP_PKS_DSA)) {
+ if ((alg_k & SSL_kDHd) && !SSL_USE_SIGALGS(s) &&
+ !has_bits(i, EVP_PK_DH | EVP_PKS_DSA)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_DH_DSA_CERT);
goto f_err;
}
# endif
-#endif
- if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && !has_bits(i, EVP_PKT_EXP)) {
+ if (alg_k & (SSL_kDHE | SSL_kDHr | SSL_kDHd)) {
+ int dh_size;
+ if (alg_k & SSL_kDHE) {
+ dh_size = BN_num_bits(dh->p);
+ } else {
+ DH *dh_srvr = get_server_static_dh_key(sc);
+ if (dh_srvr == NULL)
+ goto f_err;
+ dh_size = BN_num_bits(dh_srvr->p);
+ DH_free(dh_srvr);
+ }
+
+ if ((!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && dh_size < 768)
+ || (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && dh_size < 512)) {
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_DH_KEY_TOO_SMALL);
+ goto f_err;
+ }
+ }
+#endif /* !OPENSSL_NO_DH */
+
+ if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
+ pkey_bits > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
#ifndef OPENSSL_NO_RSA
if (alg_k & SSL_kRSA) {
- if (rsa == NULL
- || RSA_size(rsa) * 8 >
+ if (rsa == NULL) {
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
+ SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
+ goto f_err;
+ } else if (BN_num_bits(rsa->n) >
SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
+ /* We have a temporary RSA key but it's too large. */
+ al = SSL_AD_EXPORT_RESTRICTION;
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
goto f_err;
@@ -3433,14 +3587,21 @@ int ssl3_check_cert_and_algorithm(SSL *s)
} else
#endif
#ifndef OPENSSL_NO_DH
- if (alg_k & (SSL_kEDH | SSL_kDHr | SSL_kDHd)) {
- if (dh == NULL
- || DH_size(dh) * 8 >
+ if (alg_k & SSL_kDHE) {
+ if (BN_num_bits(dh->p) >
SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
+ /* We have a temporary DH key but it's too large. */
+ al = SSL_AD_EXPORT_RESTRICTION;
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_EXPORT_TMP_DH_KEY);
goto f_err;
}
+ } else if (alg_k & (SSL_kDHr | SSL_kDHd)) {
+ /* The cert should have had an export DH key. */
+ al = SSL_AD_EXPORT_RESTRICTION;
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
+ SSL_R_MISSING_EXPORT_TMP_DH_KEY);
+ goto f_err;
} else
#endif
{
@@ -3451,12 +3612,62 @@ int ssl3_check_cert_and_algorithm(SSL *s)
}
return (1);
f_err:
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
err:
return (0);
}
-#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+#ifndef OPENSSL_NO_TLSEXT
+/*
+ * Normally, we can tell if the server is resuming the session from
+ * the session ID. EAP-FAST (RFC 4851), however, relies on the next server
+ * message after the ServerHello to determine if the server is resuming.
+ * Therefore, we allow EAP-FAST to peek ahead.
+ * ssl3_check_finished returns 1 if we are resuming from an external
+ * pre-shared secret, we have a "ticket" and the next server handshake message
+ * is Finished; and 0 otherwise. It returns -1 upon an error.
+ */
+static int ssl3_check_finished(SSL *s)
+{
+ int ok = 0;
+
+ if (s->version < TLS1_VERSION || !s->tls_session_secret_cb ||
+ !s->session->tlsext_tick)
+ return 0;
+
+ /* Need to permit this temporarily, in case the next message is Finished. */
+ s->s3->flags |= SSL3_FLAGS_CCS_OK;
+ /*
+ * This function is called when we might get a Certificate message instead,
+ * so permit appropriate message length.
+ * We ignore the return value as we're only interested in the message type
+ * and not its length.
+ */
+ s->method->ssl_get_message(s,
+ SSL3_ST_CR_CERT_A,
+ SSL3_ST_CR_CERT_B,
+ -1, s->max_cert_list, &ok);
+ s->s3->flags &= ~SSL3_FLAGS_CCS_OK;
+
+ if (!ok)
+ return -1;
+
+ s->s3->tmp.reuse_message = 1;
+
+ if (s->s3->tmp.message_type == SSL3_MT_FINISHED)
+ return 1;
+
+ /* If we're not done, then the CCS arrived early and we should bail. */
+ if (s->s3->change_cipher_spec) {
+ SSLerr(SSL_F_SSL3_CHECK_FINISHED, SSL_R_CCS_RECEIVED_EARLY);
+ ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
+ return -1;
+ }
+
+ return 0;
+}
+
+# ifndef OPENSSL_NO_NEXTPROTONEG
int ssl3_send_next_proto(SSL *s)
{
unsigned int len, padding_len;
@@ -3479,8 +3690,8 @@ int ssl3_send_next_proto(SSL *s)
return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
}
-#endif /* !OPENSSL_NO_TLSEXT &&
- * !OPENSSL_NO_NEXTPROTONEG */
+#endif /* !OPENSSL_NO_NEXTPROTONEG */
+#endif /* !OPENSSL_NO_TLSEXT */
int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey)
{
diff --git a/openssl/ssl/s3_lib.c b/openssl/ssl/s3_lib.c
index 28129f68d..5db349a23 100644
--- a/openssl/ssl/s3_lib.c
+++ b/openssl/ssl/s3_lib.c
@@ -330,7 +330,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* The DH ciphers */
/* Cipher 0B */
{
- 1,
+ 0,
SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
SSL3_CK_DH_DSS_DES_40_CBC_SHA,
SSL_kDHd,
@@ -378,7 +378,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 0E */
{
- 1,
+ 0,
SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
SSL3_CK_DH_RSA_DES_40_CBC_SHA,
SSL_kDHr,
diff --git a/openssl/ssl/s3_pkt.c b/openssl/ssl/s3_pkt.c
index 221ae039e..603c285ac 100644
--- a/openssl/ssl/s3_pkt.c
+++ b/openssl/ssl/s3_pkt.c
@@ -361,11 +361,22 @@ static int ssl3_get_record(SSL *s)
if (version != s->version) {
SSLerr(SSL_F_SSL3_GET_RECORD, SSL_R_WRONG_VERSION_NUMBER);
if ((s->version & 0xFF00) == (version & 0xFF00)
- && !s->enc_write_ctx && !s->write_hash)
+ && !s->enc_write_ctx && !s->write_hash) {
+ if (rr->type == SSL3_RT_ALERT) {
+ /*
+ * The record is using an incorrect version number, but
+ * what we've got appears to be an alert. We haven't
+ * read the body yet to check whether its a fatal or
+ * not - but chances are it is. We probably shouldn't
+ * send a fatal alert back. We'll just end.
+ */
+ goto err;
+ }
/*
* Send back error using their minor version number :-)
*/
s->version = (unsigned short)version;
+ }
al = SSL_AD_PROTOCOL_VERSION;
goto f_err;
}
@@ -708,7 +719,7 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
packlen *= 4;
wb->buf = OPENSSL_malloc(packlen);
- if(!wb->buf) {
+ if (!wb->buf) {
SSLerr(SSL_F_SSL3_WRITE_BYTES, ERR_R_MALLOC_FAILURE);
return -1;
}
diff --git a/openssl/ssl/s3_srvr.c b/openssl/ssl/s3_srvr.c
index c016139b1..8885694c0 100644
--- a/openssl/ssl/s3_srvr.c
+++ b/openssl/ssl/s3_srvr.c
@@ -266,6 +266,7 @@ int ssl3_accept(SSL *s)
if ((s->version >> 8) != 3) {
SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return -1;
}
s->type = SSL_ST_ACCEPT;
@@ -273,11 +274,13 @@ int ssl3_accept(SSL *s)
if (s->init_buf == NULL) {
if ((buf = BUF_MEM_new()) == NULL) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
if (!BUF_MEM_grow(buf, SSL3_RT_MAX_PLAIN_LENGTH)) {
BUF_MEM_free(buf);
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
s->init_buf = buf;
@@ -285,6 +288,7 @@ int ssl3_accept(SSL *s)
if (!ssl3_setup_buffers(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -303,6 +307,7 @@ int ssl3_accept(SSL *s)
*/
if (!ssl_init_wbio_buffer(s, 1)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -320,6 +325,7 @@ int ssl3_accept(SSL *s)
SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
} else {
/*
@@ -379,6 +385,7 @@ int ssl3_accept(SSL *s)
SSLerr(SSL_F_SSL3_ACCEPT, SSL_R_CLIENTHELLO_TLSEXT);
ret = SSL_TLSEXT_ERR_ALERT_FATAL;
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
}
@@ -529,9 +536,12 @@ int ssl3_accept(SSL *s)
skip = 1;
s->s3->tmp.cert_request = 0;
s->state = SSL3_ST_SW_SRVR_DONE_A;
- if (s->s3->handshake_buffer)
- if (!ssl3_digest_cached_records(s))
+ if (s->s3->handshake_buffer) {
+ if (!ssl3_digest_cached_records(s)) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
+ }
} else {
s->s3->tmp.cert_request = 1;
ret = ssl3_send_certificate_request(s);
@@ -621,11 +631,14 @@ int ssl3_accept(SSL *s)
*/
if (!s->s3->handshake_buffer) {
SSLerr(SSL_F_SSL3_ACCEPT, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return -1;
}
s->s3->flags |= TLS1_FLAGS_KEEP_HANDSHAKE;
- if (!ssl3_digest_cached_records(s))
+ if (!ssl3_digest_cached_records(s)) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
} else {
int offset = 0;
int dgst_num;
@@ -639,9 +652,12 @@ int ssl3_accept(SSL *s)
* CertificateVerify should be generalized. But it is next
* step
*/
- if (s->s3->handshake_buffer)
- if (!ssl3_digest_cached_records(s))
+ if (s->s3->handshake_buffer) {
+ if (!ssl3_digest_cached_records(s)) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
+ }
for (dgst_num = 0; dgst_num < SSL_MAX_DIGEST; dgst_num++)
if (s->s3->handshake_dgst[dgst_num]) {
int dgst_size;
@@ -657,6 +673,7 @@ int ssl3_accept(SSL *s)
dgst_size =
EVP_MD_CTX_size(s->s3->handshake_dgst[dgst_num]);
if (dgst_size < 0) {
+ s->state = SSL_ST_ERR;
ret = -1;
goto end;
}
@@ -667,15 +684,6 @@ int ssl3_accept(SSL *s)
case SSL3_ST_SR_CERT_VRFY_A:
case SSL3_ST_SR_CERT_VRFY_B:
- /*
- * This *should* be the first time we enable CCS, but be
- * extra careful about surrounding code changes. We need
- * to set this here because we don't know if we're
- * expecting a CertificateVerify or not.
- */
- if (!s->s3->change_cipher_spec)
- s->s3->flags |= SSL3_FLAGS_CCS_OK;
- /* we should decide if we expected this one */
ret = ssl3_get_cert_verify(s);
if (ret <= 0)
goto end;
@@ -695,11 +703,10 @@ int ssl3_accept(SSL *s)
case SSL3_ST_SR_NEXT_PROTO_A:
case SSL3_ST_SR_NEXT_PROTO_B:
/*
- * Enable CCS for resumed handshakes with NPN.
- * In a full handshake with NPN, we end up here through
- * SSL3_ST_SR_CERT_VRFY_B, where SSL3_FLAGS_CCS_OK was
- * already set. Receiving a CCS clears the flag, so make
- * sure not to re-enable it to ban duplicates.
+ * Enable CCS for NPN. Receiving a CCS clears the flag, so make
+ * sure not to re-enable it to ban duplicates. This *should* be the
+ * first time we have received one - but we check anyway to be
+ * cautious.
* s->s3->change_cipher_spec is set when a CCS is
* processed in s3_pkt.c, and remains set until
* the client's Finished message is read.
@@ -718,10 +725,8 @@ int ssl3_accept(SSL *s)
case SSL3_ST_SR_FINISHED_A:
case SSL3_ST_SR_FINISHED_B:
/*
- * Enable CCS for resumed handshakes without NPN.
- * In a full handshake, we end up here through
- * SSL3_ST_SR_CERT_VRFY_B, where SSL3_FLAGS_CCS_OK was
- * already set. Receiving a CCS clears the flag, so make
+ * Enable CCS for handshakes without NPN. In NPN the CCS flag has
+ * already been set. Receiving a CCS clears the flag, so make
* sure not to re-enable it to ban duplicates.
* s->s3->change_cipher_spec is set when a CCS is
* processed in s3_pkt.c, and remains set until
@@ -771,6 +776,7 @@ int ssl3_accept(SSL *s)
s->session->cipher = s->s3->tmp.new_cipher;
if (!s->method->ssl3_enc->setup_key_block(s)) {
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -787,6 +793,7 @@ int ssl3_accept(SSL *s)
SSL3_CHANGE_CIPHER_SERVER_WRITE))
{
ret = -1;
+ s->state = SSL_ST_ERR;
goto end;
}
@@ -849,6 +856,7 @@ int ssl3_accept(SSL *s)
goto end;
/* break; */
+ case SSL_ST_ERR:
default:
SSLerr(SSL_F_SSL3_ACCEPT, SSL_R_UNKNOWN_STATE);
ret = -1;
@@ -931,6 +939,16 @@ int ssl3_get_client_hello(SSL *s)
d = p = (unsigned char *)s->init_msg;
/*
+ * 2 bytes for client version, SSL3_RANDOM_SIZE bytes for random, 1 byte
+ * for session id length
+ */
+ if (n < 2 + SSL3_RANDOM_SIZE + 1) {
+ al = SSL_AD_DECODE_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
+ goto f_err;
+ }
+
+ /*
* use version from inside client hello, not from record header (may
* differ: see RFC 2246, Appendix E, second paragraph)
*/
@@ -962,6 +980,12 @@ int ssl3_get_client_hello(SSL *s)
unsigned int session_length, cookie_length;
session_length = *(p + SSL3_RANDOM_SIZE);
+
+ if (p + SSL3_RANDOM_SIZE + session_length + 1 >= d + n) {
+ al = SSL_AD_DECODE_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
+ goto f_err;
+ }
cookie_length = *(p + SSL3_RANDOM_SIZE + session_length + 1);
if (cookie_length == 0)
@@ -975,6 +999,12 @@ int ssl3_get_client_hello(SSL *s)
/* get the session-id */
j = *(p++);
+ if (p + j > d + n) {
+ al = SSL_AD_DECODE_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
+ goto f_err;
+ }
+
s->hit = 0;
/*
* Versions before 0.9.7 always allow clients to resume sessions in
@@ -1019,8 +1049,19 @@ int ssl3_get_client_hello(SSL *s)
if (SSL_IS_DTLS(s)) {
/* cookie stuff */
+ if (p + 1 > d + n) {
+ al = SSL_AD_DECODE_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
+ goto f_err;
+ }
cookie_len = *(p++);
+ if (p + cookie_len > d + n) {
+ al = SSL_AD_DECODE_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
+ goto f_err;
+ }
+
/*
* The ClientHello may contain a cookie even if the
* HelloVerify message has not been sent--make sure that it
@@ -1086,27 +1127,33 @@ int ssl3_get_client_hello(SSL *s)
}
}
+ if (p + 2 > d + n) {
+ al = SSL_AD_DECODE_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_TOO_SHORT);
+ goto f_err;
+ }
n2s(p, i);
- if ((i == 0) && (j != 0)) {
- /* we need a cipher if we are not resuming a session */
+
+ if (i == 0) {
al = SSL_AD_ILLEGAL_PARAMETER;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_NO_CIPHERS_SPECIFIED);
goto f_err;
}
- if ((p + i) >= (d + n)) {
+
+ /* i bytes of cipher data + 1 byte for compression length later */
+ if ((p + i + 1) > (d + n)) {
/* not enough data */
al = SSL_AD_DECODE_ERROR;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
goto f_err;
}
- if ((i > 0) && (ssl_bytes_to_cipher_list(s, p, i, &(ciphers))
- == NULL)) {
+ if (ssl_bytes_to_cipher_list(s, p, i, &(ciphers)) == NULL) {
goto err;
}
p += i;
/* If it is a hit, check that the cipher is in the list */
- if ((s->hit) && (i > 0)) {
+ if (s->hit) {
j = 0;
id = s->session->cipher->id;
@@ -1335,8 +1382,8 @@ int ssl3_get_client_hello(SSL *s)
sk_SSL_CIPHER_free(s->session->ciphers);
s->session->ciphers = ciphers;
if (ciphers == NULL) {
- al = SSL_AD_ILLEGAL_PARAMETER;
- SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_NO_CIPHERS_PASSED);
+ al = SSL_AD_INTERNAL_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
goto f_err;
}
ciphers = NULL;
@@ -1424,8 +1471,10 @@ int ssl3_get_client_hello(SSL *s)
if (0) {
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
- }
err:
+ s->state = SSL_ST_ERR;
+ }
+
if (ciphers != NULL)
sk_SSL_CIPHER_free(ciphers);
return ret < 0 ? -1 : ret;
@@ -1443,8 +1492,10 @@ int ssl3_send_server_hello(SSL *s)
buf = (unsigned char *)s->init_buf->data;
#ifdef OPENSSL_NO_TLSEXT
p = s->s3->server_random;
- if (ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE) <= 0)
+ if (ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE) <= 0) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
#endif
/* Do the message type and length last */
d = p = ssl_handshake_start(s);
@@ -1479,6 +1530,7 @@ int ssl3_send_server_hello(SSL *s)
sl = s->session->session_id_length;
if (sl > (int)sizeof(s->session->session_id)) {
SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return -1;
}
*(p++) = sl;
@@ -1501,6 +1553,7 @@ int ssl3_send_server_hello(SSL *s)
#ifndef OPENSSL_NO_TLSEXT
if (ssl_prepare_serverhello_tlsext(s) <= 0) {
SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO, SSL_R_SERVERHELLO_TLSEXT);
+ s->state = SSL_ST_ERR;
return -1;
}
if ((p =
@@ -1508,6 +1561,7 @@ int ssl3_send_server_hello(SSL *s)
&al)) == NULL) {
ssl3_send_alert(s, SSL3_AL_FATAL, al);
SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return -1;
}
#endif
@@ -1970,6 +2024,7 @@ int ssl3_send_server_key_exchange(SSL *s)
BN_CTX_free(bn_ctx);
#endif
EVP_MD_CTX_cleanup(&md_ctx);
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -2063,6 +2118,7 @@ int ssl3_send_certificate_request(SSL *s)
/* SSL3_ST_SW_CERT_REQ_B */
return ssl_do_write(s);
err:
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -2355,6 +2411,7 @@ int ssl3_get_client_key_exchange(SSL *s)
int padl, outl;
krb5_timestamp authtime = 0;
krb5_ticket_times ttimes;
+ int kerr = 0;
EVP_CIPHER_CTX_init(&ciph_ctx);
@@ -2458,23 +2515,27 @@ int ssl3_get_client_key_exchange(SSL *s)
{
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_R_DECRYPTION_FAILED);
- goto err;
+ kerr = 1;
+ goto kclean;
}
if (outl > SSL_MAX_MASTER_KEY_LENGTH) {
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_R_DATA_LENGTH_TOO_LONG);
- goto err;
+ kerr = 1;
+ goto kclean;
}
if (!EVP_DecryptFinal_ex(&ciph_ctx, &(pms[outl]), &padl)) {
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_R_DECRYPTION_FAILED);
- goto err;
+ kerr = 1;
+ goto kclean;
}
outl += padl;
if (outl > SSL_MAX_MASTER_KEY_LENGTH) {
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_R_DATA_LENGTH_TOO_LONG);
- goto err;
+ kerr = 1;
+ goto kclean;
}
if (!((pms[0] == (s->client_version >> 8))
&& (pms[1] == (s->client_version & 0xff)))) {
@@ -2491,7 +2552,8 @@ int ssl3_get_client_key_exchange(SSL *s)
if (!(s->options & SSL_OP_TLS_ROLLBACK_BUG)) {
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_AD_DECODE_ERROR);
- goto err;
+ kerr = 1;
+ goto kclean;
}
}
@@ -2517,6 +2579,11 @@ int ssl3_get_client_key_exchange(SSL *s)
* kssl_ctx = kssl_ctx_free(kssl_ctx);
* if (s->kssl_ctx) s->kssl_ctx = NULL;
*/
+
+ kclean:
+ OPENSSL_cleanse(pms, sizeof(pms));
+ if (kerr)
+ goto err;
} else
#endif /* OPENSSL_NO_KRB5 */
@@ -2835,6 +2902,7 @@ int ssl3_get_client_key_exchange(SSL *s)
s->
session->master_key,
premaster_secret, 32);
+ OPENSSL_cleanse(premaster_secret, sizeof(premaster_secret));
/* Check if pubkey from client certificate was used */
if (EVP_PKEY_CTX_ctrl
(pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0)
@@ -2867,6 +2935,7 @@ int ssl3_get_client_key_exchange(SSL *s)
EC_KEY_free(srvr_ecdh);
BN_CTX_free(bn_ctx);
#endif
+ s->state = SSL_ST_ERR;
return (-1);
}
@@ -2882,39 +2951,31 @@ int ssl3_get_cert_verify(SSL *s)
EVP_MD_CTX mctx;
EVP_MD_CTX_init(&mctx);
+ /*
+ * We should only process a CertificateVerify message if we have received
+ * a Certificate from the client. If so then |s->session->peer| will be non
+ * NULL. In some instances a CertificateVerify message is not required even
+ * if the peer has sent a Certificate (e.g. such as in the case of static
+ * DH). In that case the ClientKeyExchange processing will skip the
+ * CertificateVerify state so we should not arrive here.
+ */
+ if (s->session->peer == NULL) {
+ ret = 1;
+ goto end;
+ }
+
n = s->method->ssl_get_message(s,
SSL3_ST_SR_CERT_VRFY_A,
SSL3_ST_SR_CERT_VRFY_B,
- -1, SSL3_RT_MAX_PLAIN_LENGTH, &ok);
+ SSL3_MT_CERTIFICATE_VERIFY,
+ SSL3_RT_MAX_PLAIN_LENGTH, &ok);
if (!ok)
return ((int)n);
- if (s->session->peer != NULL) {
- peer = s->session->peer;
- pkey = X509_get_pubkey(peer);
- type = X509_certificate_type(peer, pkey);
- } else {
- peer = NULL;
- pkey = NULL;
- }
-
- if (s->s3->tmp.message_type != SSL3_MT_CERTIFICATE_VERIFY) {
- s->s3->tmp.reuse_message = 1;
- if (peer != NULL) {
- al = SSL_AD_UNEXPECTED_MESSAGE;
- SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, SSL_R_MISSING_VERIFY_MESSAGE);
- goto f_err;
- }
- ret = 1;
- goto end;
- }
-
- if (peer == NULL) {
- SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, SSL_R_NO_CLIENT_CERT_RECEIVED);
- al = SSL_AD_UNEXPECTED_MESSAGE;
- goto f_err;
- }
+ peer = s->session->peer;
+ pkey = X509_get_pubkey(peer);
+ type = X509_certificate_type(peer, pkey);
if (!(type & EVP_PKT_SIGN)) {
SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,
@@ -2923,12 +2984,6 @@ int ssl3_get_cert_verify(SSL *s)
goto f_err;
}
- if (s->s3->change_cipher_spec) {
- SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, SSL_R_CCS_RECEIVED_EARLY);
- al = SSL_AD_UNEXPECTED_MESSAGE;
- goto f_err;
- }
-
/* we now have a signature that we need to verify */
p = (unsigned char *)s->init_msg;
/* Check for broken implementations of GOST ciphersuites */
@@ -3069,6 +3124,7 @@ int ssl3_get_cert_verify(SSL *s)
if (0) {
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ s->state = SSL_ST_ERR;
}
end:
if (s->s3->handshake_buffer) {
@@ -3227,8 +3283,10 @@ int ssl3_get_client_certificate(SSL *s)
if (0) {
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
- }
err:
+ s->state = SSL_ST_ERR;
+ }
+
if (x != NULL)
X509_free(x);
if (sk != NULL)
@@ -3248,12 +3306,14 @@ int ssl3_send_server_certificate(SSL *s)
(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5)) {
SSLerr(SSL_F_SSL3_SEND_SERVER_CERTIFICATE,
ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return (0);
}
}
if (!ssl3_output_cert_chain(s, cpk)) {
SSLerr(SSL_F_SSL3_SEND_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
return (0);
}
s->state = SSL3_ST_SW_CERT_B;
@@ -3287,11 +3347,15 @@ int ssl3_send_newsession_ticket(SSL *s)
* Some length values are 16 bits, so forget it if session is too
* long
*/
- if (slen_full == 0 || slen_full > 0xFF00)
+ if (slen_full == 0 || slen_full > 0xFF00) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
senc = OPENSSL_malloc(slen_full);
- if (!senc)
+ if (!senc) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
EVP_CIPHER_CTX_init(&ctx);
HMAC_CTX_init(&hctx);
@@ -3391,10 +3455,10 @@ int ssl3_send_newsession_ticket(SSL *s)
/* Now write out lengths: p points to end of data written */
/* Total length */
len = p - ssl_handshake_start(s);
- ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len);
/* Skip ticket lifetime hint */
p = ssl_handshake_start(s) + 4;
s2n(len - 6, p);
+ ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len);
s->state = SSL3_ST_SW_SESSION_TICKET_B;
OPENSSL_free(senc);
}
@@ -3406,6 +3470,7 @@ int ssl3_send_newsession_ticket(SSL *s)
OPENSSL_free(senc);
EVP_CIPHER_CTX_cleanup(&ctx);
HMAC_CTX_cleanup(&hctx);
+ s->state = SSL_ST_ERR;
return -1;
}
@@ -3419,8 +3484,10 @@ int ssl3_send_cert_status(SSL *s)
* 1 (ocsp response type) + 3 (ocsp response length)
* + (ocsp response)
*/
- if (!BUF_MEM_grow(s->init_buf, 8 + s->tlsext_ocsp_resplen))
+ if (!BUF_MEM_grow(s->init_buf, 8 + s->tlsext_ocsp_resplen)) {
+ s->state = SSL_ST_ERR;
return -1;
+ }
p = (unsigned char *)s->init_buf->data;
@@ -3463,6 +3530,7 @@ int ssl3_get_next_proto(SSL *s)
if (!s->s3->next_proto_neg_seen) {
SSLerr(SSL_F_SSL3_GET_NEXT_PROTO,
SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION);
+ s->state = SSL_ST_ERR;
return -1;
}
@@ -3482,11 +3550,14 @@ int ssl3_get_next_proto(SSL *s)
*/
if (!s->s3->change_cipher_spec) {
SSLerr(SSL_F_SSL3_GET_NEXT_PROTO, SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS);
+ s->state = SSL_ST_ERR;
return -1;
}
- if (n < 2)
+ if (n < 2) {
+ s->state = SSL_ST_ERR;
return 0; /* The body must be > 1 bytes long */
+ }
p = (unsigned char *)s->init_msg;
@@ -3498,15 +3569,20 @@ int ssl3_get_next_proto(SSL *s)
* uint8 padding[padding_len];
*/
proto_len = p[0];
- if (proto_len + 2 > s->init_num)
+ if (proto_len + 2 > s->init_num) {
+ s->state = SSL_ST_ERR;
return 0;
+ }
padding_len = p[proto_len + 1];
- if (proto_len + padding_len + 2 != s->init_num)
+ if (proto_len + padding_len + 2 != s->init_num) {
+ s->state = SSL_ST_ERR;
return 0;
+ }
s->next_proto_negotiated = OPENSSL_malloc(proto_len);
if (!s->next_proto_negotiated) {
SSLerr(SSL_F_SSL3_GET_NEXT_PROTO, ERR_R_MALLOC_FAILURE);
+ s->state = SSL_ST_ERR;
return 0;
}
memcpy(s->next_proto_negotiated, p + 1, proto_len);
diff --git a/openssl/ssl/ssl.h b/openssl/ssl/ssl.h
index a6d845dc9..6fe1a2474 100644
--- a/openssl/ssl/ssl.h
+++ b/openssl/ssl/ssl.h
@@ -1727,6 +1727,7 @@ extern "C" {
# define SSL_ST_BEFORE 0x4000
# define SSL_ST_OK 0x03
# define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT)
+# define SSL_ST_ERR 0x05
# define SSL_CB_LOOP 0x01
# define SSL_CB_EXIT 0x02
@@ -2640,6 +2641,7 @@ void ERR_load_SSL_strings(void);
# define SSL_F_GET_CLIENT_MASTER_KEY 107
# define SSL_F_GET_SERVER_FINISHED 108
# define SSL_F_GET_SERVER_HELLO 109
+# define SSL_F_GET_SERVER_STATIC_DH_KEY 340
# define SSL_F_GET_SERVER_VERIFY 110
# define SSL_F_I2D_SSL_SESSION 111
# define SSL_F_READ_N 112
@@ -2670,6 +2672,7 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129
# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130
# define SSL_F_SSL3_CHECK_CLIENT_HELLO 304
+# define SSL_F_SSL3_CHECK_FINISHED 339
# define SSL_F_SSL3_CLIENT_HELLO 131
# define SSL_F_SSL3_CONNECT 132
# define SSL_F_SSL3_CTRL 213
@@ -2784,6 +2787,7 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188
# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320
# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321
+# define SSL_F_SSL_SESSION_DUP 348
# define SSL_F_SSL_SESSION_NEW 189
# define SSL_F_SSL_SESSION_PRINT_FP 190
# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312
@@ -2904,6 +2908,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_DATA_LENGTH_TOO_LONG 146
# define SSL_R_DECRYPTION_FAILED 147
# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281
+# define SSL_R_DH_KEY_TOO_SMALL 372
# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148
# define SSL_R_DIGEST_CHECK_FAILED 149
# define SSL_R_DTLS_MESSAGE_TOO_BIG 334
diff --git a/openssl/ssl/ssl_err.c b/openssl/ssl/ssl_err.c
index ab3aa2337..1a6030e62 100644
--- a/openssl/ssl/ssl_err.c
+++ b/openssl/ssl/ssl_err.c
@@ -1,6 +1,6 @@
/* ssl/ssl_err.c */
/* ====================================================================
- * Copyright (c) 1999-2014 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -119,6 +119,7 @@ static ERR_STRING_DATA SSL_str_functs[] = {
{ERR_FUNC(SSL_F_GET_CLIENT_MASTER_KEY), "GET_CLIENT_MASTER_KEY"},
{ERR_FUNC(SSL_F_GET_SERVER_FINISHED), "GET_SERVER_FINISHED"},
{ERR_FUNC(SSL_F_GET_SERVER_HELLO), "GET_SERVER_HELLO"},
+ {ERR_FUNC(SSL_F_GET_SERVER_STATIC_DH_KEY), "GET_SERVER_STATIC_DH_KEY"},
{ERR_FUNC(SSL_F_GET_SERVER_VERIFY), "GET_SERVER_VERIFY"},
{ERR_FUNC(SSL_F_I2D_SSL_SESSION), "i2d_SSL_SESSION"},
{ERR_FUNC(SSL_F_READ_N), "READ_N"},
@@ -151,6 +152,7 @@ static ERR_STRING_DATA SSL_str_functs[] = {
{ERR_FUNC(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM),
"ssl3_check_cert_and_algorithm"},
{ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "ssl3_check_client_hello"},
+ {ERR_FUNC(SSL_F_SSL3_CHECK_FINISHED), "SSL3_CHECK_FINISHED"},
{ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "ssl3_client_hello"},
{ERR_FUNC(SSL_F_SSL3_CONNECT), "ssl3_connect"},
{ERR_FUNC(SSL_F_SSL3_CTRL), "ssl3_ctrl"},
@@ -310,6 +312,7 @@ static ERR_STRING_DATA SSL_str_functs[] = {
"SSL_SCAN_CLIENTHELLO_TLSEXT"},
{ERR_FUNC(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT),
"SSL_SCAN_SERVERHELLO_TLSEXT"},
+ {ERR_FUNC(SSL_F_SSL_SESSION_DUP), "ssl_session_dup"},
{ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"},
{ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"},
{ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT),
@@ -458,6 +461,7 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_DECRYPTION_FAILED), "decryption failed"},
{ERR_REASON(SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC),
"decryption failed or bad record mac"},
+ {ERR_REASON(SSL_R_DH_KEY_TOO_SMALL), "dh key too small"},
{ERR_REASON(SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG),
"dh public value length is wrong"},
{ERR_REASON(SSL_R_DIGEST_CHECK_FAILED), "digest check failed"},
diff --git a/openssl/ssl/ssl_lib.c b/openssl/ssl/ssl_lib.c
index e9ad2bc81..c0931e787 100644
--- a/openssl/ssl/ssl_lib.c
+++ b/openssl/ssl/ssl_lib.c
@@ -1510,9 +1510,13 @@ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, unsigned char *p,
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST);
return (NULL);
}
- if ((skp == NULL) || (*skp == NULL))
+ if ((skp == NULL) || (*skp == NULL)) {
sk = sk_SSL_CIPHER_new_null(); /* change perhaps later */
- else {
+ if(sk == NULL) {
+ SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ } else {
sk = *skp;
sk_SSL_CIPHER_zero(sk);
}
@@ -2326,7 +2330,7 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
if (dh_dsa_export)
emask_k |= SSL_kDHd;
- if (emask_k & (SSL_kDHr | SSL_kDHd))
+ if (mask_k & (SSL_kDHr | SSL_kDHd))
mask_a |= SSL_aDH;
if (rsa_enc || rsa_sign) {
@@ -2832,6 +2836,12 @@ const char *SSL_get_version(const SSL *s)
return ("SSLv3");
else if (s->version == SSL2_VERSION)
return ("SSLv2");
+ else if (s->version == DTLS1_BAD_VER)
+ return ("DTLSv0.9");
+ else if (s->version == DTLS1_VERSION)
+ return ("DTLSv1");
+ else if (s->version == DTLS1_2_VERSION)
+ return ("DTLSv1.2");
else
return ("unknown");
}
diff --git a/openssl/ssl/ssl_locl.h b/openssl/ssl/ssl_locl.h
index 79b85b9ed..6c2c551e5 100644
--- a/openssl/ssl/ssl_locl.h
+++ b/openssl/ssl/ssl_locl.h
@@ -1058,6 +1058,7 @@ int ssl_set_peer_cert_type(SESS_CERT *c, int type);
int ssl_get_new_session(SSL *s, int session);
int ssl_get_prev_session(SSL *s, unsigned char *session, int len,
const unsigned char *limit);
+SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket);
int ssl_cipher_id_cmp(const SSL_CIPHER *a, const SSL_CIPHER *b);
DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER, ssl_cipher_id);
int ssl_cipher_ptr_id_cmp(const SSL_CIPHER *const *ap,
@@ -1230,7 +1231,6 @@ int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf, int len);
int dtls1_write_bytes(SSL *s, int type, const void *buf, int len);
int dtls1_send_change_cipher_spec(SSL *s, int a, int b);
-int dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen);
int dtls1_read_failed(SSL *s, int code);
int dtls1_buffer_message(SSL *s, int ccs);
int dtls1_retransmit_message(SSL *s, unsigned short seq,
diff --git a/openssl/ssl/ssl_sess.c b/openssl/ssl/ssl_sess.c
index 1e1002fc8..07e7379ab 100644
--- a/openssl/ssl/ssl_sess.c
+++ b/openssl/ssl/ssl_sess.c
@@ -227,6 +227,130 @@ SSL_SESSION *SSL_SESSION_new(void)
return (ss);
}
+/*
+ * Create a new SSL_SESSION and duplicate the contents of |src| into it. If
+ * ticket == 0 then no ticket information is duplicated, otherwise it is.
+ */
+SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
+{
+ SSL_SESSION *dest;
+
+ dest = OPENSSL_malloc(sizeof(*src));
+ if (dest == NULL) {
+ goto err;
+ }
+ memcpy(dest, src, sizeof(*dest));
+
+ /*
+ * Set the various pointers to NULL so that we can call SSL_SESSION_free in
+ * the case of an error whilst halfway through constructing dest
+ */
+#ifndef OPENSSL_NO_PSK
+ dest->psk_identity_hint = NULL;
+ dest->psk_identity = NULL;
+#endif
+ dest->ciphers = NULL;
+#ifndef OPENSSL_NO_TLSEXT
+ dest->tlsext_hostname = NULL;
+# ifndef OPENSSL_NO_EC
+ dest->tlsext_ecpointformatlist = NULL;
+ dest->tlsext_ellipticcurvelist = NULL;
+# endif
+#endif
+ dest->tlsext_tick = NULL;
+#ifndef OPENSSL_NO_SRP
+ dest->srp_username = NULL;
+#endif
+ memset(&dest->ex_data, 0, sizeof(dest->ex_data));
+
+ /* We deliberately don't copy the prev and next pointers */
+ dest->prev = NULL;
+ dest->next = NULL;
+
+ dest->references = 1;
+
+ if (src->sess_cert != NULL)
+ CRYPTO_add(&src->sess_cert->references, 1, CRYPTO_LOCK_SSL_SESS_CERT);
+
+ if (src->peer != NULL)
+ CRYPTO_add(&src->peer->references, 1, CRYPTO_LOCK_X509);
+
+#ifndef OPENSSL_NO_PSK
+ if (src->psk_identity_hint) {
+ dest->psk_identity_hint = BUF_strdup(src->psk_identity_hint);
+ if (dest->psk_identity_hint == NULL) {
+ goto err;
+ }
+ }
+ if (src->psk_identity) {
+ dest->psk_identity = BUF_strdup(src->psk_identity);
+ if (dest->psk_identity == NULL) {
+ goto err;
+ }
+ }
+#endif
+
+ if(src->ciphers != NULL) {
+ dest->ciphers = sk_SSL_CIPHER_dup(src->ciphers);
+ if (dest->ciphers == NULL)
+ goto err;
+ }
+
+ if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL_SESSION,
+ &dest->ex_data, &src->ex_data)) {
+ goto err;
+ }
+
+#ifndef OPENSSL_NO_TLSEXT
+ if (src->tlsext_hostname) {
+ dest->tlsext_hostname = BUF_strdup(src->tlsext_hostname);
+ if (dest->tlsext_hostname == NULL) {
+ goto err;
+ }
+ }
+# ifndef OPENSSL_NO_EC
+ if (src->tlsext_ecpointformatlist) {
+ dest->tlsext_ecpointformatlist =
+ BUF_memdup(src->tlsext_ecpointformatlist,
+ src->tlsext_ecpointformatlist_length);
+ if (dest->tlsext_ecpointformatlist == NULL)
+ goto err;
+ }
+ if (src->tlsext_ellipticcurvelist) {
+ dest->tlsext_ellipticcurvelist =
+ BUF_memdup(src->tlsext_ellipticcurvelist,
+ src->tlsext_ellipticcurvelist_length);
+ if (dest->tlsext_ellipticcurvelist == NULL)
+ goto err;
+ }
+# endif
+#endif
+
+ if (ticket != 0) {
+ dest->tlsext_tick = BUF_memdup(src->tlsext_tick, src->tlsext_ticklen);
+ if(dest->tlsext_tick == NULL)
+ goto err;
+ } else {
+ dest->tlsext_tick_lifetime_hint = 0;
+ dest->tlsext_ticklen = 0;
+ }
+
+#ifndef OPENSSL_NO_SRP
+ if (src->srp_username) {
+ dest->srp_username = BUF_strdup(src->srp_username);
+ if (dest->srp_username == NULL) {
+ goto err;
+ }
+ }
+#endif
+
+ return dest;
+err:
+ SSLerr(SSL_F_SSL_SESSION_DUP, ERR_R_MALLOC_FAILURE);
+ SSL_SESSION_free(dest);
+ return NULL;
+}
+
const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,
unsigned int *len)
{
@@ -449,9 +573,14 @@ int ssl_get_prev_session(SSL *s, unsigned char *session_id, int len,
int r;
#endif
- if (len > SSL_MAX_SSL_SESSION_ID_LENGTH)
+ if (len < 0 || len > SSL_MAX_SSL_SESSION_ID_LENGTH)
goto err;
+ if (session_id + len > limit) {
+ fatal = 1;
+ goto err;
+ }
+
if (len == 0)
try_session_cache = 0;
diff --git a/openssl/ssl/ssl_stat.c b/openssl/ssl/ssl_stat.c
index d725d7834..1b9069f97 100644
--- a/openssl/ssl/ssl_stat.c
+++ b/openssl/ssl/ssl_stat.c
@@ -117,6 +117,9 @@ const char *SSL_state_string_long(const SSL *s)
case SSL_ST_OK | SSL_ST_ACCEPT:
str = "ok/accept SSL initialization";
break;
+ case SSL_ST_ERR:
+ str = "error";
+ break;
#ifndef OPENSSL_NO_SSL2
case SSL2_ST_CLIENT_START_ENCRYPTION:
str = "SSLv2 client start encryption";
@@ -496,6 +499,9 @@ const char *SSL_state_string(const SSL *s)
case SSL_ST_OK:
str = "SSLOK ";
break;
+ case SSL_ST_ERR:
+ str = "SSLERR";
+ break;
#ifndef OPENSSL_NO_SSL2
case SSL2_ST_CLIENT_START_ENCRYPTION:
str = "2CSENC";
diff --git a/openssl/ssl/ssltest.c b/openssl/ssl/ssltest.c
index 9f5d58624..6737adf23 100644
--- a/openssl/ssl/ssltest.c
+++ b/openssl/ssl/ssltest.c
@@ -692,7 +692,9 @@ static void sv_usage(void)
" -bytes <val> - number of bytes to swap between client/server\n");
#ifndef OPENSSL_NO_DH
fprintf(stderr,
- " -dhe1024 - use 1024 bit key (safe prime) for DHE\n");
+ " -dhe512 - use 512 bit key for DHE (to test failure)\n");
+ fprintf(stderr,
+ " -dhe1024 - use 1024 bit key (safe prime) for DHE (default, no-op)\n");
fprintf(stderr,
" -dhe1024dsa - use 1024 bit key (with 160-bit subprime) for DHE\n");
fprintf(stderr, " -no_dhe - disable DHE\n");
@@ -716,6 +718,10 @@ static void sv_usage(void)
#ifndef OPENSSL_NO_TLS1
fprintf(stderr, " -tls1 - use TLSv1\n");
#endif
+#ifndef OPENSSL_NO_DTLS
+ fprintf(stderr, " -dtls1 - use DTLSv1\n");
+ fprintf(stderr, " -dtls12 - use DTLSv1.2\n");
+#endif
fprintf(stderr, " -CApath arg - PEM format directory of CA's\n");
fprintf(stderr, " -CAfile arg - PEM format file of CA's\n");
fprintf(stderr, " -cert arg - Server certificate file\n");
@@ -877,7 +883,7 @@ int main(int argc, char *argv[])
int badop = 0;
int bio_pair = 0;
int force = 0;
- int tls1 = 0, ssl2 = 0, ssl3 = 0, ret = 1;
+ int dtls1 = 0, dtls12 = 0, tls1 = 0, ssl2 = 0, ssl3 = 0, ret = 1;
int client_auth = 0;
int server_auth = 0, i;
struct app_verify_arg app_verify_arg =
@@ -897,7 +903,7 @@ int main(int argc, char *argv[])
long bytes = 256L;
#ifndef OPENSSL_NO_DH
DH *dh;
- int dhe1024 = 0, dhe1024dsa = 0;
+ int dhe512 = 0, dhe1024dsa = 0;
#endif
#ifndef OPENSSL_NO_ECDH
EC_KEY *ecdh = NULL;
@@ -977,19 +983,19 @@ int main(int argc, char *argv[])
debug = 1;
else if (strcmp(*argv, "-reuse") == 0)
reuse = 1;
- else if (strcmp(*argv, "-dhe1024") == 0) {
+ else if (strcmp(*argv, "-dhe512") == 0) {
#ifndef OPENSSL_NO_DH
- dhe1024 = 1;
+ dhe512 = 1;
#else
fprintf(stderr,
- "ignoring -dhe1024, since I'm compiled without DH\n");
+ "ignoring -dhe512, since I'm compiled without DH\n");
#endif
} else if (strcmp(*argv, "-dhe1024dsa") == 0) {
#ifndef OPENSSL_NO_DH
dhe1024dsa = 1;
#else
fprintf(stderr,
- "ignoring -dhe1024, since I'm compiled without DH\n");
+ "ignoring -dhe1024dsa, since I'm compiled without DH\n");
#endif
} else if (strcmp(*argv, "-no_dhe") == 0)
no_dhe = 1;
@@ -1037,6 +1043,16 @@ int main(int argc, char *argv[])
no_protocol = 1;
#endif
ssl3 = 1;
+ } else if (strcmp(*argv, "-dtls1") == 0) {
+#ifdef OPENSSL_NO_DTLS
+ no_protocol = 1;
+#endif
+ dtls1 = 1;
+ } else if (strcmp(*argv, "-dtls12") == 0) {
+#ifdef OPENSSL_NO_DTLS
+ no_protocol = 1;
+#endif
+ dtls12 = 1;
} else if (strncmp(*argv, "-num", 4) == 0) {
if (--argc < 1)
goto bad;
@@ -1172,8 +1188,8 @@ int main(int argc, char *argv[])
goto end;
}
- if (ssl2 + ssl3 + tls1 > 1) {
- fprintf(stderr, "At most one of -ssl2, -ssl3, or -tls1 should "
+ if (ssl2 + ssl3 + tls1 + dtls1 + dtls12 > 1) {
+ fprintf(stderr, "At most one of -ssl2, -ssl3, -tls1, -dtls1 or -dtls12 should "
"be requested.\n");
EXIT(1);
}
@@ -1190,10 +1206,10 @@ int main(int argc, char *argv[])
goto end;
}
- if (!ssl2 && !ssl3 && !tls1 && number > 1 && !reuse && !force) {
+ if (!ssl2 && !ssl3 && !tls1 && !dtls1 && !dtls12 && number > 1 && !reuse && !force) {
fprintf(stderr, "This case cannot work. Use -f to perform "
"the test anyway (and\n-d to see what happens), "
- "or add one of -ssl2, -ssl3, -tls1, -reuse\n"
+ "or add one of ssl2, -ssl3, -tls1, -dtls1, -dtls12, -reuse\n"
"to avoid protocol mismatch.\n");
EXIT(1);
}
@@ -1271,6 +1287,13 @@ int main(int argc, char *argv[])
meth = SSLv3_method();
else
#endif
+#ifndef OPENSSL_NO_DTLS
+ if (dtls1)
+ meth = DTLSv1_method();
+ else if (dtls12)
+ meth = DTLSv1_2_method();
+ else
+#endif
#ifndef OPENSSL_NO_TLS1
if (tls1)
meth = TLSv1_method();
@@ -1297,10 +1320,10 @@ int main(int argc, char *argv[])
*/
SSL_CTX_set_options(s_ctx, SSL_OP_SINGLE_DH_USE);
dh = get_dh1024dsa();
- } else if (dhe1024)
- dh = get_dh1024();
- else
+ } else if (dhe512)
dh = get_dh512();
+ else
+ dh = get_dh1024();
SSL_CTX_set_tmp_dh(s_ctx, dh);
DH_free(dh);
}
@@ -1318,12 +1341,9 @@ int main(int argc, char *argv[])
BIO_printf(bio_err, "unknown curve name (%s)\n", named_curve);
goto end;
}
- } else
-# ifdef OPENSSL_NO_EC2M
+ } else {
nid = NID_X9_62_prime256v1;
-# else
- nid = NID_sect163r2;
-# endif
+ }
ecdh = EC_KEY_new_by_curve_name(nid);
if (ecdh == NULL) {
diff --git a/openssl/ssl/t1_enc.c b/openssl/ssl/t1_enc.c
index 577885fe0..e2a8f8691 100644
--- a/openssl/ssl/t1_enc.c
+++ b/openssl/ssl/t1_enc.c
@@ -260,7 +260,7 @@ static int tls1_PRF(long digest_mask,
if ((m << TLS1_PRF_DGST_SHIFT) & digest_mask)
count++;
}
- if(!count) {
+ if (!count) {
/* Should never happen */
SSLerr(SSL_F_TLS1_PRF, ERR_R_INTERNAL_ERROR);
goto err;
@@ -404,9 +404,9 @@ int tls1_change_cipher_state(SSL *s, int which)
}
#endif
/*
- * this is done by dtls1_reset_seq_numbers for DTLS1_VERSION
+ * this is done by dtls1_reset_seq_numbers for DTLS
*/
- if (s->version != DTLS1_VERSION)
+ if (!SSL_IS_DTLS(s))
memset(&(s->s3->read_sequence[0]), 0, 8);
mac_secret = &(s->s3->read_mac_secret[0]);
mac_secret_size = &(s->s3->read_mac_secret_size);
@@ -442,9 +442,9 @@ int tls1_change_cipher_state(SSL *s, int which)
}
#endif
/*
- * this is done by dtls1_reset_seq_numbers for DTLS1_VERSION
+ * this is done by dtls1_reset_seq_numbers for DTLS
*/
- if (s->version != DTLS1_VERSION)
+ if (!SSL_IS_DTLS(s))
memset(&(s->s3->write_sequence[0]), 0, 8);
mac_secret = &(s->s3->write_mac_secret[0]);
mac_secret_size = &(s->s3->write_mac_secret_size);
@@ -803,7 +803,7 @@ int tls1_enc(SSL *s, int send)
bs = EVP_CIPHER_block_size(ds->cipher);
if (EVP_CIPHER_flags(ds->cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) {
- unsigned char buf[13], *seq;
+ unsigned char buf[EVP_AEAD_TLS1_AAD_LEN], *seq;
seq = send ? s->s3->write_sequence : s->s3->read_sequence;
@@ -827,7 +827,10 @@ int tls1_enc(SSL *s, int send)
buf[10] = (unsigned char)(s->version);
buf[11] = rec->length >> 8;
buf[12] = rec->length & 0xff;
- pad = EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_AEAD_TLS1_AAD, 13, buf);
+ pad = EVP_CIPHER_CTX_ctrl(ds, EVP_CTRL_AEAD_TLS1_AAD,
+ EVP_AEAD_TLS1_AAD_LEN, buf);
+ if (pad <= 0)
+ return -1;
if (send) {
l += pad;
rec->length += pad;
diff --git a/openssl/ssl/t1_lib.c b/openssl/ssl/t1_lib.c
index d85d26e59..210a5e874 100644
--- a/openssl/ssl/t1_lib.c
+++ b/openssl/ssl/t1_lib.c
@@ -113,9 +113,11 @@
#include <openssl/objects.h>
#include <openssl/evp.h>
#include <openssl/hmac.h>
+#ifndef OPENSSL_NO_EC
#ifdef OPENSSL_NO_EC2M
# include <openssl/ec.h>
#endif
+#endif
#include <openssl/ocsp.h>
#include <openssl/rand.h>
#include "ssl_locl.h"
@@ -260,47 +262,68 @@ static const unsigned char ecformats_default[] = {
TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
};
-static const unsigned char eccurves_default[] = {
-# ifndef OPENSSL_NO_EC2M
- 0, 14, /* sect571r1 (14) */
- 0, 13, /* sect571k1 (13) */
-# endif
+/* The client's default curves / the server's 'auto' curves. */
+static const unsigned char eccurves_auto[] = {
+ /* Prefer P-256 which has the fastest and most secure implementations. */
+ 0, 23, /* secp256r1 (23) */
+ /* Other >= 256-bit prime curves. */
0, 25, /* secp521r1 (25) */
0, 28, /* brainpool512r1 (28) */
+ 0, 27, /* brainpoolP384r1 (27) */
+ 0, 24, /* secp384r1 (24) */
+ 0, 26, /* brainpoolP256r1 (26) */
+ 0, 22, /* secp256k1 (22) */
# ifndef OPENSSL_NO_EC2M
+ /* >= 256-bit binary curves. */
+ 0, 14, /* sect571r1 (14) */
+ 0, 13, /* sect571k1 (13) */
0, 11, /* sect409k1 (11) */
0, 12, /* sect409r1 (12) */
+ 0, 9, /* sect283k1 (9) */
+ 0, 10, /* sect283r1 (10) */
# endif
+};
+
+static const unsigned char eccurves_all[] = {
+ /* Prefer P-256 which has the fastest and most secure implementations. */
+ 0, 23, /* secp256r1 (23) */
+ /* Other >= 256-bit prime curves. */
+ 0, 25, /* secp521r1 (25) */
+ 0, 28, /* brainpool512r1 (28) */
0, 27, /* brainpoolP384r1 (27) */
0, 24, /* secp384r1 (24) */
+ 0, 26, /* brainpoolP256r1 (26) */
+ 0, 22, /* secp256k1 (22) */
# ifndef OPENSSL_NO_EC2M
+ /* >= 256-bit binary curves. */
+ 0, 14, /* sect571r1 (14) */
+ 0, 13, /* sect571k1 (13) */
+ 0, 11, /* sect409k1 (11) */
+ 0, 12, /* sect409r1 (12) */
0, 9, /* sect283k1 (9) */
0, 10, /* sect283r1 (10) */
# endif
- 0, 26, /* brainpoolP256r1 (26) */
- 0, 22, /* secp256k1 (22) */
- 0, 23, /* secp256r1 (23) */
+ /*
+ * Remaining curves disabled by default but still permitted if set
+ * via an explicit callback or parameters.
+ */
+ 0, 20, /* secp224k1 (20) */
+ 0, 21, /* secp224r1 (21) */
+ 0, 18, /* secp192k1 (18) */
+ 0, 19, /* secp192r1 (19) */
+ 0, 15, /* secp160k1 (15) */
+ 0, 16, /* secp160r1 (16) */
+ 0, 17, /* secp160r2 (17) */
# ifndef OPENSSL_NO_EC2M
0, 8, /* sect239k1 (8) */
0, 6, /* sect233k1 (6) */
0, 7, /* sect233r1 (7) */
-# endif
- 0, 20, /* secp224k1 (20) */
- 0, 21, /* secp224r1 (21) */
-# ifndef OPENSSL_NO_EC2M
0, 4, /* sect193r1 (4) */
0, 5, /* sect193r2 (5) */
-# endif
- 0, 18, /* secp192k1 (18) */
- 0, 19, /* secp192r1 (19) */
-# ifndef OPENSSL_NO_EC2M
0, 1, /* sect163k1 (1) */
0, 2, /* sect163r1 (2) */
0, 3, /* sect163r2 (3) */
# endif
- 0, 15, /* secp160k1 (15) */
- 0, 16, /* secp160r1 (16) */
- 0, 17, /* secp160r2 (17) */
};
static const unsigned char suiteb_curves[] = {
@@ -474,8 +497,13 @@ static int tls1_get_curvelist(SSL *s, int sess,
} else
# endif
{
- *pcurves = eccurves_default;
- pcurveslen = sizeof(eccurves_default);
+ if (!s->server || (s->cert && s->cert->ecdh_tmp_auto)) {
+ *pcurves = eccurves_auto;
+ pcurveslen = sizeof(eccurves_auto);
+ } else {
+ *pcurves = eccurves_all;
+ pcurveslen = sizeof(eccurves_all);
+ }
}
}
}
@@ -565,6 +593,20 @@ int tls1_shared_curve(SSL *s, int nmatch)
(s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE), &pref,
&num_pref))
return nmatch == -1 ? 0 : NID_undef;
+
+ /*
+ * If the client didn't send the elliptic_curves extension all of them
+ * are allowed.
+ */
+ if (num_supp == 0 && (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0) {
+ supp = eccurves_all;
+ num_supp = sizeof(eccurves_all) / 2;
+ } else if (num_pref == 0 &&
+ (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) == 0) {
+ pref = eccurves_all;
+ num_pref = sizeof(eccurves_all) / 2;
+ }
+
k = 0;
for (i = 0; i < num_pref; i++, pref += 2) {
const unsigned char *tsupp = supp;
@@ -761,6 +803,16 @@ static int tls1_check_ec_key(SSL *s,
for (j = 0; j <= 1; j++) {
if (!tls1_get_curvelist(s, j, &pcurves, &num_curves))
return 0;
+ if (j == 1 && num_curves == 0) {
+ /*
+ * If we've not received any curves then skip this check.
+ * RFC 4492 does not require the supported elliptic curves extension
+ * so if it is not sent we can just choose any curve.
+ * It is invalid to send an empty list in the elliptic curves
+ * extension, so num_curves == 0 always means no extension.
+ */
+ break;
+ }
for (i = 0; i < num_curves; i++, pcurves += 2) {
if (pcurves[0] == curve_id[0] && pcurves[1] == curve_id[1])
break;
@@ -1964,19 +2016,23 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
s->srtp_profile = NULL;
- if (data >= (d + n - 2))
+ if (data == d + n)
goto ri_check;
+
+ if (data > (d + n - 2))
+ goto err;
+
n2s(data, len);
if (data > (d + n - len))
- goto ri_check;
+ goto err;
while (data <= (d + n - 4)) {
n2s(data, type);
n2s(data, size);
if (data + size > (d + n))
- goto ri_check;
+ goto err;
# if 0
fprintf(stderr, "Received extension type %d size %d\n", type, size);
# endif
@@ -2012,16 +2068,12 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
int servname_type;
int dsize;
- if (size < 2) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (size < 2)
+ goto err;
n2s(data, dsize);
size -= 2;
- if (dsize > size) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize > size)
+ goto err;
sdata = data;
while (dsize > 3) {
@@ -2029,18 +2081,16 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
n2s(sdata, len);
dsize -= 3;
- if (len > dsize) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (len > dsize)
+ goto err;
+
if (s->servername_done == 0)
switch (servname_type) {
case TLSEXT_NAMETYPE_host_name:
if (!s->hit) {
- if (s->session->tlsext_hostname) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (s->session->tlsext_hostname)
+ goto err;
+
if (len > TLSEXT_MAXLEN_host_name) {
*al = TLS1_AD_UNRECOGNIZED_NAME;
return 0;
@@ -2074,31 +2124,23 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
dsize -= len;
}
- if (dsize != 0) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize != 0)
+ goto err;
}
# ifndef OPENSSL_NO_SRP
else if (type == TLSEXT_TYPE_srp) {
- if (size <= 0 || ((len = data[0])) != (size - 1)) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
- if (s->srp_ctx.login != NULL) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (size == 0 || ((len = data[0])) != (size - 1))
+ goto err;
+ if (s->srp_ctx.login != NULL)
+ goto err;
if ((s->srp_ctx.login = OPENSSL_malloc(len + 1)) == NULL)
return -1;
memcpy(s->srp_ctx.login, &data[1], len);
s->srp_ctx.login[len] = '\0';
- if (strlen(s->srp_ctx.login) != len) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (strlen(s->srp_ctx.login) != len)
+ goto err;
}
# endif
@@ -2108,10 +2150,8 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
int ecpointformatlist_length = *(sdata++);
if (ecpointformatlist_length != size - 1 ||
- ecpointformatlist_length < 1) {
- *al = TLS1_AD_DECODE_ERROR;
- return 0;
- }
+ ecpointformatlist_length < 1)
+ goto err;
if (!s->hit) {
if (s->session->tlsext_ecpointformatlist) {
OPENSSL_free(s->session->tlsext_ecpointformatlist);
@@ -2145,15 +2185,13 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
if (ellipticcurvelist_length != size - 2 ||
ellipticcurvelist_length < 1 ||
/* Each NamedCurve is 2 bytes. */
- ellipticcurvelist_length & 1) {
- *al = TLS1_AD_DECODE_ERROR;
- return 0;
- }
+ ellipticcurvelist_length & 1)
+ goto err;
+
if (!s->hit) {
- if (s->session->tlsext_ellipticcurvelist) {
- *al = TLS1_AD_DECODE_ERROR;
- return 0;
- }
+ if (s->session->tlsext_ellipticcurvelist)
+ goto err;
+
s->session->tlsext_ellipticcurvelist_length = 0;
if ((s->session->tlsext_ellipticcurvelist =
OPENSSL_malloc(ellipticcurvelist_length)) == NULL) {
@@ -2221,26 +2259,18 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
renegotiate_seen = 1;
} else if (type == TLSEXT_TYPE_signature_algorithms) {
int dsize;
- if (s->cert->peer_sigalgs || size < 2) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (s->cert->peer_sigalgs || size < 2)
+ goto err;
n2s(data, dsize);
size -= 2;
- if (dsize != size || dsize & 1 || !dsize) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
- if (!tls1_save_sigalgs(s, data, dsize)) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize != size || dsize & 1 || !dsize)
+ goto err;
+ if (!tls1_save_sigalgs(s, data, dsize))
+ goto err;
} else if (type == TLSEXT_TYPE_status_request) {
- if (size < 5) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (size < 5)
+ goto err;
s->tlsext_status_type = *data++;
size--;
@@ -2250,35 +2280,26 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
/* Read in responder_id_list */
n2s(data, dsize);
size -= 2;
- if (dsize > size) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize > size)
+ goto err;
while (dsize > 0) {
OCSP_RESPID *id;
int idsize;
- if (dsize < 4) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize < 4)
+ goto err;
n2s(data, idsize);
dsize -= 2 + idsize;
size -= 2 + idsize;
- if (dsize < 0) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize < 0)
+ goto err;
sdata = data;
data += idsize;
id = d2i_OCSP_RESPID(NULL, &sdata, idsize);
- if (!id) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (!id)
+ goto err;
if (data != sdata) {
OCSP_RESPID_free(id);
- *al = SSL_AD_DECODE_ERROR;
- return 0;
+ goto err;
}
if (!s->tlsext_ocsp_ids
&& !(s->tlsext_ocsp_ids =
@@ -2295,16 +2316,12 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
}
/* Read in request_extensions */
- if (size < 2) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (size < 2)
+ goto err;
n2s(data, dsize);
size -= 2;
- if (dsize != size) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (dsize != size)
+ goto err;
sdata = data;
if (dsize > 0) {
if (s->tlsext_ocsp_exts) {
@@ -2314,10 +2331,8 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
s->tlsext_ocsp_exts =
d2i_X509_EXTENSIONS(NULL, &sdata, dsize);
- if (!s->tlsext_ocsp_exts || (data + dsize != sdata)) {
- *al = SSL_AD_DECODE_ERROR;
- return 0;
- }
+ if (!s->tlsext_ocsp_exts || (data + dsize != sdata))
+ goto err;
}
}
/*
@@ -2389,6 +2404,10 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
data += size;
}
+ /* Spurious data on the end */
+ if (data != d + n)
+ goto err;
+
*p = data;
ri_check:
@@ -2404,6 +2423,9 @@ static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
}
return 1;
+err:
+ *al = SSL_AD_DECODE_ERROR;
+ return 0;
}
/*
@@ -3837,7 +3859,10 @@ int tls1_process_heartbeat(SSL *s)
memcpy(bp, pl, payload);
bp += payload;
/* Random padding */
- RAND_pseudo_bytes(bp, padding);
+ if (RAND_pseudo_bytes(bp, padding) < 0) {
+ OPENSSL_free(buffer);
+ return -1;
+ }
r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer,
3 + payload + padding);
@@ -3872,7 +3897,7 @@ int tls1_process_heartbeat(SSL *s)
int tls1_heartbeat(SSL *s)
{
unsigned char *buf, *p;
- int ret;
+ int ret = -1;
unsigned int payload = 18; /* Sequence number + random bytes */
unsigned int padding = 16; /* Use minimum padding */
@@ -3920,10 +3945,16 @@ int tls1_heartbeat(SSL *s)
/* Sequence number */
s2n(s->tlsext_hb_seq, p);
/* 16 random bytes */
- RAND_pseudo_bytes(p, 16);
+ if (RAND_pseudo_bytes(p, 16) < 0) {
+ SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
p += 16;
/* Random padding */
- RAND_pseudo_bytes(p, padding);
+ if (RAND_pseudo_bytes(p, padding) < 0) {
+ SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
if (ret >= 0) {
@@ -3935,6 +3966,7 @@ int tls1_heartbeat(SSL *s)
s->tlsext_hb_pending = 1;
}
+err:
OPENSSL_free(buf);
return ret;
diff --git a/openssl/ssl/tls_srp.c b/openssl/ssl/tls_srp.c
index d36cfa0a5..bb719ba4c 100644
--- a/openssl/ssl/tls_srp.c
+++ b/openssl/ssl/tls_srp.c
@@ -454,7 +454,8 @@ int SRP_Calc_A_param(SSL *s)
{
unsigned char rnd[SSL_MAX_MASTER_KEY_LENGTH];
- RAND_bytes(rnd, sizeof(rnd));
+ if (RAND_bytes(rnd, sizeof(rnd)) <= 0)
+ return -1;
s->srp_ctx.a = BN_bin2bn(rnd, sizeof(rnd), s->srp_ctx.a);
OPENSSL_cleanse(rnd, sizeof(rnd));
diff --git a/openssl/test/Makefile b/openssl/test/Makefile
index 338867952..a570fadf9 100644
--- a/openssl/test/Makefile
+++ b/openssl/test/Makefile
@@ -351,12 +351,13 @@ test_constant_time: $(CONSTTIMETEST)$(EXE_EXT)
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
-depend:
- @if [ -z "$(THIS)" ]; then \
- $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
- else \
- $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
- fi
+update: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+
+depend: local_depend
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+local_depend:
+ @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC)
dclean:
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
@@ -368,10 +369,10 @@ clean:
rm -f .rnd tmp.bntest tmp.bctest *.o *.obj *.dll lib tags core .pure .nfs* *.old *.bak fluff $(EXE) *.ss *.srl log dummytest
$(DLIBSSL):
- (cd ..; $(MAKE) DIRS=ssl all)
+ (cd ..; $(MAKE) build_libssl)
$(DLIBCRYPTO):
- (cd ..; $(MAKE) DIRS=crypto all)
+ (cd ..; $(MAKE) build_libcrypto)
BUILD_CMD=shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
shlib_target="$(SHLIB_TARGET)"; \
diff --git a/openssl/test/cms-test.pl b/openssl/test/cms-test.pl
index 51abeef2c..baa3b5948 100644
--- a/openssl/test/cms-test.pl
+++ b/openssl/test/cms-test.pl
@@ -128,7 +128,7 @@ else
die "Error checking for EC2M support\n";
}
-system ("$ossl_path no-ecdh > $null_path");
+system ("$ossl_path no-ec > $null_path");
if ($? == 0)
{
$no_ecdh = 1;
@@ -453,6 +453,14 @@ my @smime_cms_param_tests = (
],
[
+"enveloped content test streaming S/MIME format, ECDH, key identifier",
+ "-encrypt -keyid -in smcont.txt"
+ . " -stream -out test.cms"
+ . " -recip $smdir/smec1.pem",
+ "-decrypt -recip $smdir/smec1.pem -in test.cms -out smtst.txt"
+ ],
+
+ [
"enveloped content test streaming S/MIME format, ECDH, AES128, SHA256 KDF",
"-encrypt -in smcont.txt"
. " -stream -out test.cms"
diff --git a/openssl/test/evp_extra_test.c b/openssl/test/evp_extra_test.c
index 2f2a8f7b0..2f2a8f7b0 100644..120000
--- a/openssl/test/evp_extra_test.c
+++ b/openssl/test/evp_extra_test.c
diff --git a/openssl/test/testssl b/openssl/test/testssl
index e3b342bfd..ddebf0853 100644
--- a/openssl/test/testssl
+++ b/openssl/test/testssl
@@ -101,6 +101,30 @@ $ssltest -bio_pair -ssl3 -server_auth -client_auth $CA $extra || exit 1
echo test sslv2/sslv3 via BIO pair
$ssltest $extra || exit 1
+echo test dtlsv1
+$ssltest -dtls1 $extra || exit 1
+
+echo test dtlsv1 with server authentication
+$ssltest -dtls1 -server_auth $CA $extra || exit 1
+
+echo test dtlsv1 with client authentication
+$ssltest -dtls1 -client_auth $CA $extra || exit 1
+
+echo test dtlsv1 with both client and server authentication
+$ssltest -dtls1 -server_auth -client_auth $CA $extra || exit 1
+
+echo test dtlsv1.2
+$ssltest -dtls12 $extra || exit 1
+
+echo test dtlsv1.2 with server authentication
+$ssltest -dtls12 -server_auth $CA $extra || exit 1
+
+echo test dtlsv1.2 with client authentication
+$ssltest -dtls12 -client_auth $CA $extra || exit 1
+
+echo test dtlsv1.2 with both client and server authentication
+$ssltest -dtls12 -server_auth -client_auth $CA $extra || exit 1
+
if [ $dsa_cert = NO ]; then
echo 'test sslv2/sslv3 w/o (EC)DHE via BIO pair'
$ssltest -bio_pair -no_dhe -no_ecdhe $extra || exit 1
@@ -121,10 +145,9 @@ $ssltest -bio_pair -server_auth -client_auth $CA $extra || exit 1
echo test sslv2/sslv3 with both client and server authentication via BIO pair and app verify
$ssltest -bio_pair -server_auth -client_auth -app_verify $CA $extra || exit 1
-echo "Testing ciphersuites"
-for protocol in TLSv1.2 SSLv3; do
- echo "Testing ciphersuites for $protocol"
- for cipher in `../util/shlib_wrap.sh ../apps/openssl ciphers "RSA+$protocol" | tr ':' ' '`; do
+test_cipher() {
+ local cipher=$1
+ local protocol=$2
echo "Testing $cipher"
prot=""
if [ $protocol = "SSLv3" ] ; then
@@ -135,7 +158,38 @@ for protocol in TLSv1.2 SSLv3; do
echo "Failed $cipher"
exit 1
fi
+}
+
+echo "Testing ciphersuites"
+for protocol in TLSv1.2 SSLv3; do
+ echo "Testing ciphersuites for $protocol"
+ for cipher in `../util/shlib_wrap.sh ../apps/openssl ciphers "RSA+$protocol" | tr ':' ' '`; do
+ test_cipher $cipher $protocol
done
+ if ../util/shlib_wrap.sh ../apps/openssl no-dh; then
+ echo "skipping RSA+DHE tests"
+ else
+ for cipher in `../util/shlib_wrap.sh ../apps/openssl ciphers "EDH+aRSA+$protocol:-EXP" | tr ':' ' '`; do
+ test_cipher $cipher $protocol
+ done
+ echo "testing connection with weak DH, expecting failure"
+ if [ $protocol = "SSLv3" ] ; then
+ $ssltest -cipher EDH -dhe512 -ssl3
+ else
+ $ssltest -cipher EDH -dhe512
+ fi
+ if [ $? -eq 0 ]; then
+ echo "FAIL: connection with weak DH succeeded"
+ exit 1
+ fi
+ fi
+ if ../util/shlib_wrap.sh ../apps/openssl no-ec; then
+ echo "skipping RSA+ECDHE tests"
+ else
+ for cipher in `../util/shlib_wrap.sh ../apps/openssl ciphers "EECDH+aRSA+$protocol:-EXP" | tr ':' ' '`; do
+ test_cipher $cipher $protocol
+ done
+ fi
done
#############################################################################
diff --git a/openssl/test/tocsp b/openssl/test/tocsp
index 5fc291ca6..48e81bf30 100755
--- a/openssl/test/tocsp
+++ b/openssl/test/tocsp
@@ -8,7 +8,7 @@ check_time="-attime 1355875200"
test_ocsp () {
$cmd base64 -d -in $ocspdir/$1 | \
- $cmd ocsp -respin - -partial_chain $check_time \
+ $cmd ocsp -respin - -partial_chain $check_time -trusted_first \
-CAfile $ocspdir/$2 -verify_other $ocspdir/$2 -CApath /dev/null
[ $? != $3 ] && exit 1
}
diff --git a/openssl/tools/Makefile b/openssl/tools/Makefile
index bb6fb71f3..c1a2f6bcc 100644
--- a/openssl/tools/Makefile
+++ b/openssl/tools/Makefile
@@ -44,6 +44,8 @@ tags:
errors:
+update: depend
+
depend:
dclean:
diff --git a/openssl/tools/c_rehash b/openssl/tools/c_rehash
index 4a0f0e10e..6a27c0224 100644
--- a/openssl/tools/c_rehash
+++ b/openssl/tools/c_rehash
@@ -15,13 +15,13 @@ my $symlink_exists=eval {symlink("",""); 1};
my $removelinks = 1;
## Parse flags.
-while ( $ARGV[0] =~ '-.*' ) {
+while ( $ARGV[0] =~ /^-/ ) {
my $flag = shift @ARGV;
last if ( $flag eq '--');
- if ( $flag =~ /-old/) {
+ if ( $flag eq '-old') {
$x509hash = "-subject_hash_old";
$crlhash = "-hash_old";
- } elsif ( $flag =~ /-h/) {
+ } elsif ( $flag eq '-h') {
help();
} elsif ( $flag eq '-n' ) {
$removelinks = 0;
diff --git a/openssl/tools/c_rehash.in b/openssl/tools/c_rehash.in
index 887e92712..b086ff9cf 100644
--- a/openssl/tools/c_rehash.in
+++ b/openssl/tools/c_rehash.in
@@ -15,13 +15,13 @@ my $symlink_exists=eval {symlink("",""); 1};
my $removelinks = 1;
## Parse flags.
-while ( $ARGV[0] =~ '-.*' ) {
+while ( $ARGV[0] =~ /^-/ ) {
my $flag = shift @ARGV;
last if ( $flag eq '--');
- if ( $flag =~ /-old/) {
+ if ( $flag eq '-old') {
$x509hash = "-subject_hash_old";
$crlhash = "-hash_old";
- } elsif ( $flag =~ /-h/) {
+ } elsif ( $flag eq '-h') {
help();
} elsif ( $flag eq '-n' ) {
$removelinks = 0;
diff --git a/openssl/util/libeay.num b/openssl/util/libeay.num
index b977e4e4b..7f7487df5 100644
--- a/openssl/util/libeay.num
+++ b/openssl/util/libeay.num
@@ -4413,3 +4413,4 @@ ECDSA_METHOD_get_app_data 4770 EXIST::FUNCTION:ECDSA
X509_VERIFY_PARAM_add1_host 4771 EXIST::FUNCTION:
EC_GROUP_get_mont_data 4772 EXIST::FUNCTION:EC
i2d_re_X509_tbs 4773 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_item 4774 EXIST::FUNCTION:
diff --git a/openssl/util/mk1mf.pl b/openssl/util/mk1mf.pl
index df95147ae..a88b2b870 100755
--- a/openssl/util/mk1mf.pl
+++ b/openssl/util/mk1mf.pl
@@ -383,7 +383,7 @@ open(IN,"<$infile") || die "unable to open $infile:$!\n";
$_=<IN>;
for (;;)
{
- chop;
+ s/\s*$//; # was chop, didn't work in mixture of perls for Windows...
($key,$val)=/^([^=]+)=(.*)/;
if ($key eq "RELATIVE_DIRECTORY")
diff --git a/openssl/util/mkerr.pl b/openssl/util/mkerr.pl
index 7b6776dda..09ebebef9 100644
--- a/openssl/util/mkerr.pl
+++ b/openssl/util/mkerr.pl
@@ -535,14 +535,21 @@ EOF
# First, read any existing reason string definitions:
my %err_reason_strings;
if (open(IN,"<$cfile")) {
+ my $line = "";
while (<IN>) {
- if (/\b(${lib}_R_\w*)\b.*\"(.*)\"/) {
- $err_reason_strings{$1} = $2;
- }
- if (/\b${lib}_F_(\w*)\b.*\"(.*)\"/) {
- if (!exists $ftrans{$1} && ($1 ne $2)) {
- print STDERR "WARNING: Mismatched function string $2\n";
- $ftrans{$1} = $2;
+ chomp;
+ $_ = $line . $_;
+ $line = "";
+ if (/{ERR_(FUNC|REASON)\(/) {
+ if (/\b(${lib}_R_\w*)\b.*\"(.*)\"/) {
+ $err_reason_strings{$1} = $2;
+ } elsif (/\b${lib}_F_(\w*)\b.*\"(.*)\"/) {
+ if (!exists $ftrans{$1} && ($1 ne $2)) {
+ print STDERR "WARNING: Mismatched function string $2\n";
+ $ftrans{$1} = $2;
+ }
+ } else {
+ $line = $_;
}
}
}
diff --git a/openssl/util/pl/BC-32.pl b/openssl/util/pl/BC-32.pl
index ed28e65e6..f7161d7bf 100644
--- a/openssl/util/pl/BC-32.pl
+++ b/openssl/util/pl/BC-32.pl
@@ -130,7 +130,7 @@ sub do_link_rule
local($ret,$_);
$file =~ s/\//$o/g if $o ne '/';
- $n=&bname($targer);
+ $n=&bname($target);
$ret.="$target: $files $dep_libs\n";
$ret.="\t\$(LINK) \$(LFLAGS) $files \$(APP_EX_OBJ), $target,, $libs\n\n";
return($ret);
diff --git a/openssl/util/pl/VC-32.pl b/openssl/util/pl/VC-32.pl
index 78a49354e..8222c8936 100755
--- a/openssl/util/pl/VC-32.pl
+++ b/openssl/util/pl/VC-32.pl
@@ -370,7 +370,7 @@ sub do_link_rule
my($target,$files,$dep_libs,$libs,$standalone)=@_;
local($ret,$_);
$file =~ s/\//$o/g if $o ne '/';
- $n=&bname($targer);
+ $n=&bname($target);
$ret.="$target: $files $dep_libs\n";
if ($standalone == 1)
{
diff --git a/packages.txt b/packages.txt
index 26471d8d8..9c2061bc6 100644
--- a/packages.txt
+++ b/packages.txt
@@ -45,7 +45,7 @@ font-winitzki-cyrillic-1.0.3
font-xfree86-type1-1.0.4
fontconfig git version
fontsproto-2.1.3
-freetype-2.5.5
+freetype-2.6
glproto git version
inputproto-2.3.1
kbproto-1.0.6
@@ -67,7 +67,7 @@ libxcb git version
libxkbfile-1.0.8
mesa git version
mkfontscale git version
-openssl-1.0.2a
+openssl-1.0.2c
pixman git version
presentproto-1.0
pthreads-w32 cvs version
diff --git a/pixman/pixman/pixman-arm-common.h b/pixman/pixman/pixman-arm-common.h
index 3a7cb2bef..953768830 100644
--- a/pixman/pixman/pixman-arm-common.h
+++ b/pixman/pixman/pixman-arm-common.h
@@ -266,13 +266,6 @@ FAST_NEAREST_MAINLOOP (cputype##_##name##_normal_##op, \
scaled_nearest_scanline_##cputype##_##name##_##op, \
src_type, dst_type, NORMAL)
-/* Provide entries for the fast path table */
-#define PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH(op,s,d,func) \
- SIMPLE_NEAREST_FAST_PATH_COVER (op,s,d,func), \
- SIMPLE_NEAREST_FAST_PATH_NONE (op,s,d,func), \
- SIMPLE_NEAREST_FAST_PATH_PAD (op,s,d,func), \
- SIMPLE_NEAREST_FAST_PATH_NORMAL (op,s,d,func)
-
#define PIXMAN_ARM_BIND_SCALED_NEAREST_SRC_A8_DST(flags, cputype, name, op, \
src_type, dst_type) \
void \
@@ -318,9 +311,7 @@ FAST_NEAREST_MAINLOOP_COMMON (cputype##_##name##_normal_##op, \
/* Provide entries for the fast path table */
#define PIXMAN_ARM_SIMPLE_NEAREST_A8_MASK_FAST_PATH(op,s,d,func) \
- SIMPLE_NEAREST_A8_MASK_FAST_PATH_COVER (op,s,d,func), \
- SIMPLE_NEAREST_A8_MASK_FAST_PATH_NONE (op,s,d,func), \
- SIMPLE_NEAREST_A8_MASK_FAST_PATH_PAD (op,s,d,func), \
+ SIMPLE_NEAREST_A8_MASK_FAST_PATH (op,s,d,func), \
SIMPLE_NEAREST_A8_MASK_FAST_PATH_NORMAL (op,s,d,func)
/*****************************************************************************/
diff --git a/pixman/pixman/pixman-arm-neon.c b/pixman/pixman/pixman-arm-neon.c
index 60e9c78d2..be761c965 100644
--- a/pixman/pixman/pixman-arm-neon.c
+++ b/pixman/pixman/pixman-arm-neon.c
@@ -362,21 +362,21 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8, null, a8r8g8b8, neon_composite_out_reverse_8_8888),
PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8, null, a8b8g8r8, neon_composite_out_reverse_8_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, neon_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, neon_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, neon_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, neon_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, neon_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, neon_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, neon_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, neon_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, r5g6b5, neon_8888_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, b5g6r5, neon_8888_0565),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, r5g6b5, neon_8888_0565),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, b5g6r5, neon_8888_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, r5g6b5, neon_8888_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, r5g6b5, neon_8888_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, b5g6r5, neon_8888_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, b5g6r5, neon_8888_0565),
+ SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, r5g6b5, neon_8888_0565),
+ SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, r5g6b5, neon_8888_0565),
+ SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, b5g6r5, neon_8888_0565),
+ SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, b5g6r5, neon_8888_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, b5g6r5, x8b8g8r8, neon_0565_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, x8r8g8b8, neon_0565_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, b5g6r5, x8b8g8r8, neon_0565_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, x8r8g8b8, neon_0565_8888),
/* Note: NONE repeat is not supported yet */
SIMPLE_NEAREST_FAST_PATH_COVER (SRC, r5g6b5, a8r8g8b8, neon_0565_8888),
SIMPLE_NEAREST_FAST_PATH_COVER (SRC, b5g6r5, a8b8g8r8, neon_0565_8888),
diff --git a/pixman/pixman/pixman-arm-simd.c b/pixman/pixman/pixman-arm-simd.c
index fa1ab5cce..f40ff36fe 100644
--- a/pixman/pixman/pixman-arm-simd.c
+++ b/pixman/pixman/pixman-arm-simd.c
@@ -260,15 +260,15 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, armv6_composite_over_n_8888_8888_ca),
PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, armv6_composite_over_n_8888_8888_ca),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, r5g6b5, armv6_0565_0565),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, b5g6r5, b5g6r5, armv6_0565_0565),
-
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, armv6_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, armv6_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, armv6_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, a8b8g8r8, armv6_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, x8b8g8r8, armv6_8888_8888),
- PIXMAN_ARM_SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8, armv6_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, r5g6b5, armv6_0565_0565),
+ SIMPLE_NEAREST_FAST_PATH (SRC, b5g6r5, b5g6r5, armv6_0565_0565),
+
+ SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, armv6_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, armv6_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, armv6_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, a8b8g8r8, armv6_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, x8b8g8r8, armv6_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8, armv6_8888_8888),
{ PIXMAN_OP_NONE },
};
diff --git a/pixman/pixman/pixman-inlines.h b/pixman/pixman/pixman-inlines.h
index dd1c2f17f..1c8441d6d 100644
--- a/pixman/pixman/pixman-inlines.h
+++ b/pixman/pixman/pixman-inlines.h
@@ -747,7 +747,8 @@ fast_composite_scaled_nearest ## scale_func_name (pixman_implementation_t *imp,
#define SIMPLE_NEAREST_SOLID_MASK_FAST_PATH(op,s,d,func) \
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_COVER (op,s,d,func), \
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NONE (op,s,d,func), \
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_PAD (op,s,d,func)
+ SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_PAD (op,s,d,func), \
+ SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (op,s,d,func)
/*****************************************************************************/
diff --git a/pixman/pixman/pixman-mips-dspr2.c b/pixman/pixman/pixman-mips-dspr2.c
index e10c9df0a..122d9dca3 100644
--- a/pixman/pixman/pixman-mips-dspr2.c
+++ b/pixman/pixman/pixman-mips-dspr2.c
@@ -388,11 +388,11 @@ static const pixman_fast_path_t mips_dspr2_fast_paths[] =
SIMPLE_NEAREST_FAST_PATH_PAD (SRC, r5g6b5, a8r8g8b8, mips_0565_8888),
SIMPLE_NEAREST_FAST_PATH_PAD (SRC, b5g6r5, a8b8g8r8, mips_0565_8888),
- PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8r8g8b8, r5g6b5, mips_8888_8_0565),
- PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8b8g8r8, b5g6r5, mips_8888_8_0565),
+ SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8r8g8b8, r5g6b5, mips_8888_8_0565),
+ SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8b8g8r8, b5g6r5, mips_8888_8_0565),
- PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, r5g6b5, r5g6b5, mips_0565_8_0565),
- PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, b5g6r5, b5g6r5, mips_0565_8_0565),
+ SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, r5g6b5, r5g6b5, mips_0565_8_0565),
+ SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, b5g6r5, b5g6r5, mips_0565_8_0565),
SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, mips_8888_8888),
SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, mips_8888_8888),
diff --git a/pixman/pixman/pixman-mips-dspr2.h b/pixman/pixman/pixman-mips-dspr2.h
index 955ed70b8..b9e0684ec 100644
--- a/pixman/pixman/pixman-mips-dspr2.h
+++ b/pixman/pixman/pixman-mips-dspr2.h
@@ -328,12 +328,6 @@ FAST_NEAREST_MAINLOOP_COMMON (mips_##name##_pad_##op, \
scaled_nearest_scanline_mips_##name##_##op, \
src_type, uint8_t, dst_type, PAD, TRUE, FALSE)
-/* Provide entries for the fast path table */
-#define PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH(op,s,d,func) \
- SIMPLE_NEAREST_A8_MASK_FAST_PATH_COVER (op,s,d,func), \
- SIMPLE_NEAREST_A8_MASK_FAST_PATH_NONE (op,s,d,func), \
- SIMPLE_NEAREST_A8_MASK_FAST_PATH_PAD (op,s,d,func)
-
/****************************************************************************/
#define PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST(flags, name, op, \
diff --git a/pixman/pixman/pixman-mmx.c b/pixman/pixman/pixman-mmx.c
index 69f73873f..b663ff7a5 100644
--- a/pixman/pixman/pixman-mmx.c
+++ b/pixman/pixman/pixman-mmx.c
@@ -4095,31 +4095,15 @@ static const pixman_fast_path_t mmx_fast_paths[] =
PIXMAN_STD_FAST_PATH (IN, a8, null, a8, mmx_composite_in_8_8 ),
PIXMAN_STD_FAST_PATH (IN, solid, a8, a8, mmx_composite_in_n_8_8 ),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_8888 ),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_8888 ),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_8888 ),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_8888 ),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_8888 ),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_8888 ),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_n_8888 ),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_n_8888 ),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_n_8888 ),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_n_8888 ),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8r8g8b8, a8r8g8b8, mmx_8888_n_8888 ),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8b8g8r8, a8b8g8r8, mmx_8888_n_8888 ),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8r8g8b8, x8r8g8b8, mmx_8888_n_8888 ),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8b8g8r8, x8b8g8r8, mmx_8888_n_8888 ),
SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, mmx_8888_8888 ),
SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, mmx_8888_8888 ),
diff --git a/pixman/pixman/pixman-sse2.c b/pixman/pixman/pixman-sse2.c
index 61e3d3159..f3128c398 100644
--- a/pixman/pixman/pixman-sse2.c
+++ b/pixman/pixman/pixman-sse2.c
@@ -6274,31 +6274,15 @@ static const pixman_fast_path_t sse2_fast_paths[] =
PIXMAN_STD_FAST_PATH (IN, solid, a8, a8, sse2_composite_in_n_8_8),
PIXMAN_STD_FAST_PATH (IN, solid, null, a8, sse2_composite_in_n_8),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_COVER (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NONE (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_PAD (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_8888),
- SIMPLE_NEAREST_FAST_PATH_NORMAL (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_8888),
+ SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_8888),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_n_8888),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_n_8888),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_n_8888),
SIMPLE_NEAREST_SOLID_MASK_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_n_8888),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8r8g8b8, a8r8g8b8, sse2_8888_n_8888),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8b8g8r8, a8b8g8r8, sse2_8888_n_8888),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8r8g8b8, x8r8g8b8, sse2_8888_n_8888),
- SIMPLE_NEAREST_SOLID_MASK_FAST_PATH_NORMAL (OVER, a8b8g8r8, x8b8g8r8, sse2_8888_n_8888),
SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, sse2_8888_8888),
SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, sse2_8888_8888),
diff --git a/pixman/test/solid-test.c b/pixman/test/solid-test.c
index 7be546678..c6ea39770 100644
--- a/pixman/test/solid-test.c
+++ b/pixman/test/solid-test.c
@@ -237,7 +237,7 @@ create_solid_image (const pixman_format_code_t *allowed_formats,
pixman_image_unref (dummy_img);
/* Now set the bitmap contents to a random value */
- *buffer = prng_rand ();
+ prng_randmemset (buffer, 4, 0);
image_endian_swap (img);
if (used_fmt)
@@ -251,7 +251,10 @@ create_solid_image (const pixman_format_code_t *allowed_formats,
pixman_color_t color;
pixman_image_t *img;
- prng_randmemset (&color, sizeof color, 0);
+ color.alpha = prng_rand_n (UINT16_MAX + 1);
+ color.red = prng_rand_n (UINT16_MAX + 1);
+ color.green = prng_rand_n (UINT16_MAX + 1);
+ color.blue = prng_rand_n (UINT16_MAX + 1);
img = pixman_image_create_solid_fill (&color);
if (used_fmt)
@@ -345,6 +348,6 @@ main (int argc, const char *argv[])
}
return fuzzer_test_main ("solid", 500000,
- 0x1B6DFF8D,
+ 0xC30FD380,
test_solid, argc, argv);
}
diff --git a/xorg-server/config/10-evdev.conf b/xorg-server/config/10-evdev.conf
deleted file mode 100644
index cc83ab232..000000000
--- a/xorg-server/config/10-evdev.conf
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# Catch-all evdev loader for udev-based systems
-# We don't simply match on any device since that also adds accelerometers
-# and other devices that we don't really want to use. The list below
-# matches everything but joysticks.
-
-Section "InputClass"
- Identifier "evdev pointer catchall"
- MatchIsPointer "on"
- MatchDevicePath "/dev/input/event*"
- Driver "evdev"
-EndSection
-
-Section "InputClass"
- Identifier "evdev keyboard catchall"
- MatchIsKeyboard "on"
- MatchDevicePath "/dev/input/event*"
- Driver "evdev"
-EndSection
-
-Section "InputClass"
- Identifier "evdev touchpad catchall"
- MatchIsTouchpad "on"
- MatchDevicePath "/dev/input/event*"
- Driver "evdev"
-EndSection
-
-Section "InputClass"
- Identifier "evdev tablet catchall"
- MatchIsTablet "on"
- MatchDevicePath "/dev/input/event*"
- Driver "evdev"
-EndSection
-
-Section "InputClass"
- Identifier "evdev touchscreen catchall"
- MatchIsTouchscreen "on"
- MatchDevicePath "/dev/input/event*"
- Driver "evdev"
-EndSection
diff --git a/xorg-server/config/Makefile.am b/xorg-server/config/Makefile.am
index 0e20e8b3d..51aae473e 100644
--- a/xorg-server/config/Makefile.am
+++ b/xorg-server/config/Makefile.am
@@ -18,7 +18,7 @@ libconfig_la_LIBADD += $(UDEV_LIBS)
if XORG
xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR)
-xorgconfd_DATA = 10-evdev.conf 10-quirks.conf
+xorgconfd_DATA = 10-quirks.conf
endif
else
@@ -38,4 +38,4 @@ endif # !CONFIG_HAL
endif # !CONFIG_UDEV
-EXTRA_DIST = x11-input.fdi 10-evdev.conf fdi2iclass.py 10-quirks.conf
+EXTRA_DIST = x11-input.fdi fdi2iclass.py 10-quirks.conf
diff --git a/xorg-server/dix/devices.c b/xorg-server/dix/devices.c
index faff8d6b0..17bce9f72 100644
--- a/xorg-server/dix/devices.c
+++ b/xorg-server/dix/devices.c
@@ -177,8 +177,8 @@ DeviceSetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
if (!isfinite(f[i]))
return BadValue;
- if (!dev->valuator)
- return BadMatch;
+ if (!dev->valuator)
+ return BadMatch;
if (!checkonly)
DeviceSetTransform(dev, f);
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index b86c5a6ce..550d46a3e 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -219,14 +219,25 @@ init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail)
}
static void
-set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, double *data)
+set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask,
+ BOOL use_unaccel, double *data)
{
int i;
+ use_unaccel = use_unaccel && valuator_mask_has_unaccelerated(mask);
+
for (i = 0; i < valuator_mask_size(mask); i++) {
if (valuator_mask_isset(mask, i)) {
+ double v;
+
SetBit(event->valuators.mask, i);
- data[i] = valuator_mask_get_double(mask, i);
+
+ if (use_unaccel)
+ v = valuator_mask_get_unaccelerated(mask, i);
+ else
+ v = valuator_mask_get_double(mask, i);
+
+ data[i] = v;
}
}
}
@@ -1404,9 +1415,11 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
num_events++;
init_raw(pDev, raw, ms, type, buttons);
- set_raw_valuators(raw, &mask, raw->valuators.data_raw);
+ set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw);
}
+ valuator_mask_drop_unaccelerated(&mask);
+
/* valuators are in driver-native format (rel or abs) */
if (flags & POINTER_ABSOLUTE) {
@@ -1419,7 +1432,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
transformAbsolute(pDev, &mask);
clipAbsolute(pDev, &mask);
if ((flags & POINTER_NORAW) == 0 && raw)
- set_raw_valuators(raw, &mask, raw->valuators.data);
+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data);
}
else {
transformRelative(pDev, &mask);
@@ -1427,7 +1440,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
if (flags & POINTER_ACCELERATE)
accelPointer(pDev, &mask, ms);
if ((flags & POINTER_NORAW) == 0 && raw)
- set_raw_valuators(raw, &mask, raw->valuators.data);
+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data);
moveRelative(pDev, flags, &mask);
}
@@ -1932,7 +1945,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
events++;
num_events++;
init_raw(dev, raw, ms, type, client_id);
- set_raw_valuators(raw, &mask, raw->valuators.data_raw);
+ set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw);
}
event = &events->device_event;
@@ -1994,7 +2007,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid,
screeny = dev->spriteInfo->sprite->hotPhys.y;
}
if (need_rawevent)
- set_raw_valuators(raw, &mask, raw->valuators.data);
+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data);
/* Indirect device touch coordinates are not used for cursor positioning.
* They are merely informational, and are provided in device coordinates.
diff --git a/xorg-server/dix/inpututils.c b/xorg-server/dix/inpututils.c
index ab3cde1c2..cb784a046 100644
--- a/xorg-server/dix/inpututils.c
+++ b/xorg-server/dix/inpututils.c
@@ -505,15 +505,23 @@ valuator_mask_isset(const ValuatorMask *mask, int valuator)
return mask->last_bit >= valuator && BitIsOn(mask->mask, valuator);
}
+static inline void
+_valuator_mask_set_double(ValuatorMask *mask, int valuator, double data)
+{
+ mask->last_bit = max(valuator, mask->last_bit);
+ SetBit(mask->mask, valuator);
+ mask->valuators[valuator] = data;
+}
+
/**
* Set the valuator to the given floating-point data.
*/
void
valuator_mask_set_double(ValuatorMask *mask, int valuator, double data)
{
- mask->last_bit = max(valuator, mask->last_bit);
- SetBit(mask->mask, valuator);
- mask->valuators[valuator] = data;
+ BUG_WARN_MSG(mask->has_unaccelerated,
+ "Do not mix valuator types, zero mask first\n");
+ _valuator_mask_set_double(mask, valuator, data);
}
/**
@@ -594,11 +602,15 @@ valuator_mask_unset(ValuatorMask *mask, int valuator)
ClearBit(mask->mask, valuator);
mask->valuators[valuator] = 0.0;
+ mask->unaccelerated[valuator] = 0.0;
for (i = 0; i <= mask->last_bit; i++)
if (valuator_mask_isset(mask, i))
lastbit = max(lastbit, i);
mask->last_bit = lastbit;
+
+ if (mask->last_bit == -1)
+ mask->has_unaccelerated = FALSE;
}
}
@@ -611,6 +623,66 @@ valuator_mask_copy(ValuatorMask *dest, const ValuatorMask *src)
valuator_mask_zero(dest);
}
+Bool
+valuator_mask_has_unaccelerated(const ValuatorMask *mask)
+{
+ return mask->has_unaccelerated;
+}
+
+void
+valuator_mask_drop_unaccelerated(ValuatorMask *mask)
+{
+ memset(mask->unaccelerated, 0, sizeof(mask->unaccelerated));
+ mask->has_unaccelerated = FALSE;
+}
+
+/**
+ * Set both accelerated and unaccelerated value for this mask.
+ */
+void
+valuator_mask_set_unaccelerated(ValuatorMask *mask,
+ int valuator,
+ double accel,
+ double unaccel)
+{
+ BUG_WARN_MSG(mask->last_bit != -1 && !mask->has_unaccelerated,
+ "Do not mix valuator types, zero mask first\n");
+ _valuator_mask_set_double(mask, valuator, accel);
+ mask->has_unaccelerated = TRUE;
+ mask->unaccelerated[valuator] = unaccel;
+}
+
+double
+valuator_mask_get_accelerated(const ValuatorMask *mask,
+ int valuator)
+{
+ return valuator_mask_get_double(mask, valuator);
+}
+
+double
+valuator_mask_get_unaccelerated(const ValuatorMask *mask,
+ int valuator)
+{
+ return mask->unaccelerated[valuator];
+}
+
+Bool
+valuator_mask_fetch_unaccelerated(const ValuatorMask *mask,
+ int valuator,
+ double *accel,
+ double *unaccel)
+{
+ if (valuator_mask_isset(mask, valuator)) {
+ if (accel)
+ *accel = valuator_mask_get_accelerated(mask, valuator);
+ if (unaccel)
+ *unaccel = valuator_mask_get_unaccelerated(mask, valuator);
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
int
CountBits(const uint8_t * mask, int len)
{
diff --git a/xorg-server/glamor/glamor_largepixmap.c b/xorg-server/glamor/glamor_largepixmap.c
index 391f376e9..da3fb6150 100644
--- a/xorg-server/glamor/glamor_largepixmap.c
+++ b/xorg-server/glamor/glamor_largepixmap.c
@@ -1055,6 +1055,15 @@ glamor_composite_largepixmap_region(CARD8 op,
int source_repeat_type = 0, mask_repeat_type = 0;
int ok = TRUE;
+ if (source_pixmap == dest_pixmap) {
+ glamor_fallback("source and dest pixmaps are the same\n");
+ return FALSE;
+ }
+ if (mask_pixmap == dest_pixmap) {
+ glamor_fallback("mask and dest pixmaps are the same\n");
+ return FALSE;
+ }
+
if (source->repeat)
source_repeat_type = source->repeatType;
else
diff --git a/xorg-server/glamor/glamor_render.c b/xorg-server/glamor/glamor_render.c
index efca36744..05eee913e 100644
--- a/xorg-server/glamor/glamor_render.c
+++ b/xorg-server/glamor/glamor_render.c
@@ -1481,7 +1481,14 @@ glamor_composite_clipped_region(CARD8 op,
}
}
- /*XXXXX, self copy? */
+ if (temp_src_pixmap == dest_pixmap) {
+ glamor_fallback("source and dest pixmaps are the same\n");
+ goto out;
+ }
+ if (temp_mask_pixmap == dest_pixmap) {
+ glamor_fallback("mask and dest pixmaps are the same\n");
+ goto out;
+ }
x_dest += dest->pDrawable->x;
y_dest += dest->pDrawable->y;
diff --git a/xorg-server/glx/dispatch.h b/xorg-server/glx/dispatch.h
index 481b836bd..8d1746c95 100644
--- a/xorg-server/glx/dispatch.h
+++ b/xorg-server/glx/dispatch.h
@@ -63,7 +63,7 @@
} while(0)
/* total number of offsets below */
-#define _gloffset_COUNT 1305
+#define _gloffset_COUNT 1304
#define _gloffset_NewList 0
#define _gloffset_EndList 1
@@ -473,7 +473,7 @@
#define _gloffset_MultiTexCoord4iv 405
#define _gloffset_MultiTexCoord4s 406
#define _gloffset_MultiTexCoord4sv 407
-#define driDispatchRemapTable_size 897
+#define driDispatchRemapTable_size 896
SERVEXTERN int driDispatchRemapTable[ driDispatchRemapTable_size ];
#define CompressedTexImage1D_remap_index 0
@@ -748,631 +748,630 @@ SERVEXTERN int driDispatchRemapTable[ driDispatchRemapTable_size ];
#define IsRenderbuffer_remap_index 269
#define RenderbufferStorage_remap_index 270
#define RenderbufferStorageMultisample_remap_index 271
-#define FramebufferTextureFaceARB_remap_index 272
-#define FlushMappedBufferRange_remap_index 273
-#define MapBufferRange_remap_index 274
-#define BindVertexArray_remap_index 275
-#define DeleteVertexArrays_remap_index 276
-#define GenVertexArrays_remap_index 277
-#define IsVertexArray_remap_index 278
-#define GetActiveUniformBlockName_remap_index 279
-#define GetActiveUniformBlockiv_remap_index 280
-#define GetActiveUniformName_remap_index 281
-#define GetActiveUniformsiv_remap_index 282
-#define GetUniformBlockIndex_remap_index 283
-#define GetUniformIndices_remap_index 284
-#define UniformBlockBinding_remap_index 285
-#define CopyBufferSubData_remap_index 286
-#define ClientWaitSync_remap_index 287
-#define DeleteSync_remap_index 288
-#define FenceSync_remap_index 289
-#define GetInteger64v_remap_index 290
-#define GetSynciv_remap_index 291
-#define IsSync_remap_index 292
-#define WaitSync_remap_index 293
-#define DrawElementsBaseVertex_remap_index 294
-#define DrawElementsInstancedBaseVertex_remap_index 295
-#define DrawRangeElementsBaseVertex_remap_index 296
-#define MultiDrawElementsBaseVertex_remap_index 297
-#define ProvokingVertex_remap_index 298
-#define GetMultisamplefv_remap_index 299
-#define SampleMaski_remap_index 300
-#define TexImage2DMultisample_remap_index 301
-#define TexImage3DMultisample_remap_index 302
-#define BlendEquationSeparateiARB_remap_index 303
-#define BlendEquationiARB_remap_index 304
-#define BlendFuncSeparateiARB_remap_index 305
-#define BlendFunciARB_remap_index 306
-#define BindFragDataLocationIndexed_remap_index 307
-#define GetFragDataIndex_remap_index 308
-#define BindSampler_remap_index 309
-#define DeleteSamplers_remap_index 310
-#define GenSamplers_remap_index 311
-#define GetSamplerParameterIiv_remap_index 312
-#define GetSamplerParameterIuiv_remap_index 313
-#define GetSamplerParameterfv_remap_index 314
-#define GetSamplerParameteriv_remap_index 315
-#define IsSampler_remap_index 316
-#define SamplerParameterIiv_remap_index 317
-#define SamplerParameterIuiv_remap_index 318
-#define SamplerParameterf_remap_index 319
-#define SamplerParameterfv_remap_index 320
-#define SamplerParameteri_remap_index 321
-#define SamplerParameteriv_remap_index 322
-#define GetQueryObjecti64v_remap_index 323
-#define GetQueryObjectui64v_remap_index 324
-#define QueryCounter_remap_index 325
-#define ColorP3ui_remap_index 326
-#define ColorP3uiv_remap_index 327
-#define ColorP4ui_remap_index 328
-#define ColorP4uiv_remap_index 329
-#define MultiTexCoordP1ui_remap_index 330
-#define MultiTexCoordP1uiv_remap_index 331
-#define MultiTexCoordP2ui_remap_index 332
-#define MultiTexCoordP2uiv_remap_index 333
-#define MultiTexCoordP3ui_remap_index 334
-#define MultiTexCoordP3uiv_remap_index 335
-#define MultiTexCoordP4ui_remap_index 336
-#define MultiTexCoordP4uiv_remap_index 337
-#define NormalP3ui_remap_index 338
-#define NormalP3uiv_remap_index 339
-#define SecondaryColorP3ui_remap_index 340
-#define SecondaryColorP3uiv_remap_index 341
-#define TexCoordP1ui_remap_index 342
-#define TexCoordP1uiv_remap_index 343
-#define TexCoordP2ui_remap_index 344
-#define TexCoordP2uiv_remap_index 345
-#define TexCoordP3ui_remap_index 346
-#define TexCoordP3uiv_remap_index 347
-#define TexCoordP4ui_remap_index 348
-#define TexCoordP4uiv_remap_index 349
-#define VertexAttribP1ui_remap_index 350
-#define VertexAttribP1uiv_remap_index 351
-#define VertexAttribP2ui_remap_index 352
-#define VertexAttribP2uiv_remap_index 353
-#define VertexAttribP3ui_remap_index 354
-#define VertexAttribP3uiv_remap_index 355
-#define VertexAttribP4ui_remap_index 356
-#define VertexAttribP4uiv_remap_index 357
-#define VertexP2ui_remap_index 358
-#define VertexP2uiv_remap_index 359
-#define VertexP3ui_remap_index 360
-#define VertexP3uiv_remap_index 361
-#define VertexP4ui_remap_index 362
-#define VertexP4uiv_remap_index 363
-#define DrawArraysIndirect_remap_index 364
-#define DrawElementsIndirect_remap_index 365
-#define GetUniformdv_remap_index 366
-#define Uniform1d_remap_index 367
-#define Uniform1dv_remap_index 368
-#define Uniform2d_remap_index 369
-#define Uniform2dv_remap_index 370
-#define Uniform3d_remap_index 371
-#define Uniform3dv_remap_index 372
-#define Uniform4d_remap_index 373
-#define Uniform4dv_remap_index 374
-#define UniformMatrix2dv_remap_index 375
-#define UniformMatrix2x3dv_remap_index 376
-#define UniformMatrix2x4dv_remap_index 377
-#define UniformMatrix3dv_remap_index 378
-#define UniformMatrix3x2dv_remap_index 379
-#define UniformMatrix3x4dv_remap_index 380
-#define UniformMatrix4dv_remap_index 381
-#define UniformMatrix4x2dv_remap_index 382
-#define UniformMatrix4x3dv_remap_index 383
-#define BindTransformFeedback_remap_index 384
-#define DeleteTransformFeedbacks_remap_index 385
-#define DrawTransformFeedback_remap_index 386
-#define GenTransformFeedbacks_remap_index 387
-#define IsTransformFeedback_remap_index 388
-#define PauseTransformFeedback_remap_index 389
-#define ResumeTransformFeedback_remap_index 390
-#define BeginQueryIndexed_remap_index 391
-#define DrawTransformFeedbackStream_remap_index 392
-#define EndQueryIndexed_remap_index 393
-#define GetQueryIndexediv_remap_index 394
-#define ClearDepthf_remap_index 395
-#define DepthRangef_remap_index 396
-#define GetShaderPrecisionFormat_remap_index 397
-#define ReleaseShaderCompiler_remap_index 398
-#define ShaderBinary_remap_index 399
-#define GetProgramBinary_remap_index 400
-#define ProgramBinary_remap_index 401
-#define ProgramParameteri_remap_index 402
-#define GetVertexAttribLdv_remap_index 403
-#define VertexAttribL1d_remap_index 404
-#define VertexAttribL1dv_remap_index 405
-#define VertexAttribL2d_remap_index 406
-#define VertexAttribL2dv_remap_index 407
-#define VertexAttribL3d_remap_index 408
-#define VertexAttribL3dv_remap_index 409
-#define VertexAttribL4d_remap_index 410
-#define VertexAttribL4dv_remap_index 411
-#define VertexAttribLPointer_remap_index 412
-#define DepthRangeArrayv_remap_index 413
-#define DepthRangeIndexed_remap_index 414
-#define GetDoublei_v_remap_index 415
-#define GetFloati_v_remap_index 416
-#define ScissorArrayv_remap_index 417
-#define ScissorIndexed_remap_index 418
-#define ScissorIndexedv_remap_index 419
-#define ViewportArrayv_remap_index 420
-#define ViewportIndexedf_remap_index 421
-#define ViewportIndexedfv_remap_index 422
-#define GetGraphicsResetStatusARB_remap_index 423
-#define GetnColorTableARB_remap_index 424
-#define GetnCompressedTexImageARB_remap_index 425
-#define GetnConvolutionFilterARB_remap_index 426
-#define GetnHistogramARB_remap_index 427
-#define GetnMapdvARB_remap_index 428
-#define GetnMapfvARB_remap_index 429
-#define GetnMapivARB_remap_index 430
-#define GetnMinmaxARB_remap_index 431
-#define GetnPixelMapfvARB_remap_index 432
-#define GetnPixelMapuivARB_remap_index 433
-#define GetnPixelMapusvARB_remap_index 434
-#define GetnPolygonStippleARB_remap_index 435
-#define GetnSeparableFilterARB_remap_index 436
-#define GetnTexImageARB_remap_index 437
-#define GetnUniformdvARB_remap_index 438
-#define GetnUniformfvARB_remap_index 439
-#define GetnUniformivARB_remap_index 440
-#define GetnUniformuivARB_remap_index 441
-#define ReadnPixelsARB_remap_index 442
-#define DrawArraysInstancedBaseInstance_remap_index 443
-#define DrawElementsInstancedBaseInstance_remap_index 444
-#define DrawElementsInstancedBaseVertexBaseInstance_remap_index 445
-#define DrawTransformFeedbackInstanced_remap_index 446
-#define DrawTransformFeedbackStreamInstanced_remap_index 447
-#define GetInternalformativ_remap_index 448
-#define GetActiveAtomicCounterBufferiv_remap_index 449
-#define BindImageTexture_remap_index 450
-#define MemoryBarrier_remap_index 451
-#define TexStorage1D_remap_index 452
-#define TexStorage2D_remap_index 453
-#define TexStorage3D_remap_index 454
-#define TextureStorage1DEXT_remap_index 455
-#define TextureStorage2DEXT_remap_index 456
-#define TextureStorage3DEXT_remap_index 457
-#define ClearBufferData_remap_index 458
-#define ClearBufferSubData_remap_index 459
-#define DispatchCompute_remap_index 460
-#define DispatchComputeIndirect_remap_index 461
-#define CopyImageSubData_remap_index 462
-#define TextureView_remap_index 463
-#define BindVertexBuffer_remap_index 464
-#define VertexAttribBinding_remap_index 465
-#define VertexAttribFormat_remap_index 466
-#define VertexAttribIFormat_remap_index 467
-#define VertexAttribLFormat_remap_index 468
-#define VertexBindingDivisor_remap_index 469
-#define MultiDrawArraysIndirect_remap_index 470
-#define MultiDrawElementsIndirect_remap_index 471
-#define GetProgramInterfaceiv_remap_index 472
-#define GetProgramResourceIndex_remap_index 473
-#define GetProgramResourceLocation_remap_index 474
-#define GetProgramResourceLocationIndex_remap_index 475
-#define GetProgramResourceName_remap_index 476
-#define GetProgramResourceiv_remap_index 477
-#define TexBufferRange_remap_index 478
-#define TexStorage2DMultisample_remap_index 479
-#define TexStorage3DMultisample_remap_index 480
-#define BufferStorage_remap_index 481
-#define ClearTexImage_remap_index 482
-#define ClearTexSubImage_remap_index 483
-#define BindBuffersBase_remap_index 484
-#define BindBuffersRange_remap_index 485
-#define BindImageTextures_remap_index 486
-#define BindSamplers_remap_index 487
-#define BindTextures_remap_index 488
-#define BindVertexBuffers_remap_index 489
-#define ClipControl_remap_index 490
-#define BindTextureUnit_remap_index 491
-#define BlitNamedFramebuffer_remap_index 492
-#define CheckNamedFramebufferStatus_remap_index 493
-#define ClearNamedBufferData_remap_index 494
-#define ClearNamedBufferSubData_remap_index 495
-#define ClearNamedFramebufferfi_remap_index 496
-#define ClearNamedFramebufferfv_remap_index 497
-#define ClearNamedFramebufferiv_remap_index 498
-#define ClearNamedFramebufferuiv_remap_index 499
-#define CompressedTextureSubImage1D_remap_index 500
-#define CompressedTextureSubImage2D_remap_index 501
-#define CompressedTextureSubImage3D_remap_index 502
-#define CopyNamedBufferSubData_remap_index 503
-#define CopyTextureSubImage1D_remap_index 504
-#define CopyTextureSubImage2D_remap_index 505
-#define CopyTextureSubImage3D_remap_index 506
-#define CreateBuffers_remap_index 507
-#define CreateFramebuffers_remap_index 508
-#define CreateProgramPipelines_remap_index 509
-#define CreateQueries_remap_index 510
-#define CreateRenderbuffers_remap_index 511
-#define CreateSamplers_remap_index 512
-#define CreateTextures_remap_index 513
-#define CreateTransformFeedbacks_remap_index 514
-#define CreateVertexArrays_remap_index 515
-#define DisableVertexArrayAttrib_remap_index 516
-#define EnableVertexArrayAttrib_remap_index 517
-#define FlushMappedNamedBufferRange_remap_index 518
-#define GenerateTextureMipmap_remap_index 519
-#define GetCompressedTextureImage_remap_index 520
-#define GetNamedBufferParameteri64v_remap_index 521
-#define GetNamedBufferParameteriv_remap_index 522
-#define GetNamedBufferPointerv_remap_index 523
-#define GetNamedBufferSubData_remap_index 524
-#define GetNamedFramebufferAttachmentParameteriv_remap_index 525
-#define GetNamedFramebufferParameteriv_remap_index 526
-#define GetNamedRenderbufferParameteriv_remap_index 527
-#define GetQueryBufferObjecti64v_remap_index 528
-#define GetQueryBufferObjectiv_remap_index 529
-#define GetQueryBufferObjectui64v_remap_index 530
-#define GetQueryBufferObjectuiv_remap_index 531
-#define GetTextureImage_remap_index 532
-#define GetTextureLevelParameterfv_remap_index 533
-#define GetTextureLevelParameteriv_remap_index 534
-#define GetTextureParameterIiv_remap_index 535
-#define GetTextureParameterIuiv_remap_index 536
-#define GetTextureParameterfv_remap_index 537
-#define GetTextureParameteriv_remap_index 538
-#define GetTransformFeedbacki64_v_remap_index 539
-#define GetTransformFeedbacki_v_remap_index 540
-#define GetTransformFeedbackiv_remap_index 541
-#define GetVertexArrayIndexed64iv_remap_index 542
-#define GetVertexArrayIndexediv_remap_index 543
-#define GetVertexArrayiv_remap_index 544
-#define InvalidateNamedFramebufferData_remap_index 545
-#define InvalidateNamedFramebufferSubData_remap_index 546
-#define MapNamedBuffer_remap_index 547
-#define MapNamedBufferRange_remap_index 548
-#define NamedBufferData_remap_index 549
-#define NamedBufferStorage_remap_index 550
-#define NamedBufferSubData_remap_index 551
-#define NamedFramebufferDrawBuffer_remap_index 552
-#define NamedFramebufferDrawBuffers_remap_index 553
-#define NamedFramebufferParameteri_remap_index 554
-#define NamedFramebufferReadBuffer_remap_index 555
-#define NamedFramebufferRenderbuffer_remap_index 556
-#define NamedFramebufferTexture_remap_index 557
-#define NamedFramebufferTextureLayer_remap_index 558
-#define NamedRenderbufferStorage_remap_index 559
-#define NamedRenderbufferStorageMultisample_remap_index 560
-#define TextureBuffer_remap_index 561
-#define TextureBufferRange_remap_index 562
-#define TextureParameterIiv_remap_index 563
-#define TextureParameterIuiv_remap_index 564
-#define TextureParameterf_remap_index 565
-#define TextureParameterfv_remap_index 566
-#define TextureParameteri_remap_index 567
-#define TextureParameteriv_remap_index 568
-#define TextureStorage1D_remap_index 569
-#define TextureStorage2D_remap_index 570
-#define TextureStorage2DMultisample_remap_index 571
-#define TextureStorage3D_remap_index 572
-#define TextureStorage3DMultisample_remap_index 573
-#define TextureSubImage1D_remap_index 574
-#define TextureSubImage2D_remap_index 575
-#define TextureSubImage3D_remap_index 576
-#define TransformFeedbackBufferBase_remap_index 577
-#define TransformFeedbackBufferRange_remap_index 578
-#define UnmapNamedBuffer_remap_index 579
-#define VertexArrayAttribBinding_remap_index 580
-#define VertexArrayAttribFormat_remap_index 581
-#define VertexArrayAttribIFormat_remap_index 582
-#define VertexArrayAttribLFormat_remap_index 583
-#define VertexArrayBindingDivisor_remap_index 584
-#define VertexArrayElementBuffer_remap_index 585
-#define VertexArrayVertexBuffer_remap_index 586
-#define VertexArrayVertexBuffers_remap_index 587
-#define InvalidateBufferData_remap_index 588
-#define InvalidateBufferSubData_remap_index 589
-#define InvalidateFramebuffer_remap_index 590
-#define InvalidateSubFramebuffer_remap_index 591
-#define InvalidateTexImage_remap_index 592
-#define InvalidateTexSubImage_remap_index 593
-#define PolygonOffsetEXT_remap_index 594
-#define DrawTexfOES_remap_index 595
-#define DrawTexfvOES_remap_index 596
-#define DrawTexiOES_remap_index 597
-#define DrawTexivOES_remap_index 598
-#define DrawTexsOES_remap_index 599
-#define DrawTexsvOES_remap_index 600
-#define DrawTexxOES_remap_index 601
-#define DrawTexxvOES_remap_index 602
-#define PointSizePointerOES_remap_index 603
-#define QueryMatrixxOES_remap_index 604
-#define SampleMaskSGIS_remap_index 605
-#define SamplePatternSGIS_remap_index 606
-#define ColorPointerEXT_remap_index 607
-#define EdgeFlagPointerEXT_remap_index 608
-#define IndexPointerEXT_remap_index 609
-#define NormalPointerEXT_remap_index 610
-#define TexCoordPointerEXT_remap_index 611
-#define VertexPointerEXT_remap_index 612
-#define DiscardFramebufferEXT_remap_index 613
-#define ActiveShaderProgram_remap_index 614
-#define BindProgramPipeline_remap_index 615
-#define CreateShaderProgramv_remap_index 616
-#define DeleteProgramPipelines_remap_index 617
-#define GenProgramPipelines_remap_index 618
-#define GetProgramPipelineInfoLog_remap_index 619
-#define GetProgramPipelineiv_remap_index 620
-#define IsProgramPipeline_remap_index 621
-#define LockArraysEXT_remap_index 622
-#define ProgramUniform1d_remap_index 623
-#define ProgramUniform1dv_remap_index 624
-#define ProgramUniform1f_remap_index 625
-#define ProgramUniform1fv_remap_index 626
-#define ProgramUniform1i_remap_index 627
-#define ProgramUniform1iv_remap_index 628
-#define ProgramUniform1ui_remap_index 629
-#define ProgramUniform1uiv_remap_index 630
-#define ProgramUniform2d_remap_index 631
-#define ProgramUniform2dv_remap_index 632
-#define ProgramUniform2f_remap_index 633
-#define ProgramUniform2fv_remap_index 634
-#define ProgramUniform2i_remap_index 635
-#define ProgramUniform2iv_remap_index 636
-#define ProgramUniform2ui_remap_index 637
-#define ProgramUniform2uiv_remap_index 638
-#define ProgramUniform3d_remap_index 639
-#define ProgramUniform3dv_remap_index 640
-#define ProgramUniform3f_remap_index 641
-#define ProgramUniform3fv_remap_index 642
-#define ProgramUniform3i_remap_index 643
-#define ProgramUniform3iv_remap_index 644
-#define ProgramUniform3ui_remap_index 645
-#define ProgramUniform3uiv_remap_index 646
-#define ProgramUniform4d_remap_index 647
-#define ProgramUniform4dv_remap_index 648
-#define ProgramUniform4f_remap_index 649
-#define ProgramUniform4fv_remap_index 650
-#define ProgramUniform4i_remap_index 651
-#define ProgramUniform4iv_remap_index 652
-#define ProgramUniform4ui_remap_index 653
-#define ProgramUniform4uiv_remap_index 654
-#define ProgramUniformMatrix2dv_remap_index 655
-#define ProgramUniformMatrix2fv_remap_index 656
-#define ProgramUniformMatrix2x3dv_remap_index 657
-#define ProgramUniformMatrix2x3fv_remap_index 658
-#define ProgramUniformMatrix2x4dv_remap_index 659
-#define ProgramUniformMatrix2x4fv_remap_index 660
-#define ProgramUniformMatrix3dv_remap_index 661
-#define ProgramUniformMatrix3fv_remap_index 662
-#define ProgramUniformMatrix3x2dv_remap_index 663
-#define ProgramUniformMatrix3x2fv_remap_index 664
-#define ProgramUniformMatrix3x4dv_remap_index 665
-#define ProgramUniformMatrix3x4fv_remap_index 666
-#define ProgramUniformMatrix4dv_remap_index 667
-#define ProgramUniformMatrix4fv_remap_index 668
-#define ProgramUniformMatrix4x2dv_remap_index 669
-#define ProgramUniformMatrix4x2fv_remap_index 670
-#define ProgramUniformMatrix4x3dv_remap_index 671
-#define ProgramUniformMatrix4x3fv_remap_index 672
-#define UnlockArraysEXT_remap_index 673
-#define UseProgramStages_remap_index 674
-#define ValidateProgramPipeline_remap_index 675
-#define DebugMessageCallback_remap_index 676
-#define DebugMessageControl_remap_index 677
-#define DebugMessageInsert_remap_index 678
-#define GetDebugMessageLog_remap_index 679
-#define GetObjectLabel_remap_index 680
-#define GetObjectPtrLabel_remap_index 681
-#define ObjectLabel_remap_index 682
-#define ObjectPtrLabel_remap_index 683
-#define PopDebugGroup_remap_index 684
-#define PushDebugGroup_remap_index 685
-#define SecondaryColor3fEXT_remap_index 686
-#define SecondaryColor3fvEXT_remap_index 687
-#define MultiDrawElementsEXT_remap_index 688
-#define FogCoordfEXT_remap_index 689
-#define FogCoordfvEXT_remap_index 690
-#define ResizeBuffersMESA_remap_index 691
-#define WindowPos4dMESA_remap_index 692
-#define WindowPos4dvMESA_remap_index 693
-#define WindowPos4fMESA_remap_index 694
-#define WindowPos4fvMESA_remap_index 695
-#define WindowPos4iMESA_remap_index 696
-#define WindowPos4ivMESA_remap_index 697
-#define WindowPos4sMESA_remap_index 698
-#define WindowPos4svMESA_remap_index 699
-#define MultiModeDrawArraysIBM_remap_index 700
-#define MultiModeDrawElementsIBM_remap_index 701
-#define AreProgramsResidentNV_remap_index 702
-#define ExecuteProgramNV_remap_index 703
-#define GetProgramParameterdvNV_remap_index 704
-#define GetProgramParameterfvNV_remap_index 705
-#define GetProgramStringNV_remap_index 706
-#define GetProgramivNV_remap_index 707
-#define GetTrackMatrixivNV_remap_index 708
-#define GetVertexAttribdvNV_remap_index 709
-#define GetVertexAttribfvNV_remap_index 710
-#define GetVertexAttribivNV_remap_index 711
-#define LoadProgramNV_remap_index 712
-#define ProgramParameters4dvNV_remap_index 713
-#define ProgramParameters4fvNV_remap_index 714
-#define RequestResidentProgramsNV_remap_index 715
-#define TrackMatrixNV_remap_index 716
-#define VertexAttrib1dNV_remap_index 717
-#define VertexAttrib1dvNV_remap_index 718
-#define VertexAttrib1fNV_remap_index 719
-#define VertexAttrib1fvNV_remap_index 720
-#define VertexAttrib1sNV_remap_index 721
-#define VertexAttrib1svNV_remap_index 722
-#define VertexAttrib2dNV_remap_index 723
-#define VertexAttrib2dvNV_remap_index 724
-#define VertexAttrib2fNV_remap_index 725
-#define VertexAttrib2fvNV_remap_index 726
-#define VertexAttrib2sNV_remap_index 727
-#define VertexAttrib2svNV_remap_index 728
-#define VertexAttrib3dNV_remap_index 729
-#define VertexAttrib3dvNV_remap_index 730
-#define VertexAttrib3fNV_remap_index 731
-#define VertexAttrib3fvNV_remap_index 732
-#define VertexAttrib3sNV_remap_index 733
-#define VertexAttrib3svNV_remap_index 734
-#define VertexAttrib4dNV_remap_index 735
-#define VertexAttrib4dvNV_remap_index 736
-#define VertexAttrib4fNV_remap_index 737
-#define VertexAttrib4fvNV_remap_index 738
-#define VertexAttrib4sNV_remap_index 739
-#define VertexAttrib4svNV_remap_index 740
-#define VertexAttrib4ubNV_remap_index 741
-#define VertexAttrib4ubvNV_remap_index 742
-#define VertexAttribPointerNV_remap_index 743
-#define VertexAttribs1dvNV_remap_index 744
-#define VertexAttribs1fvNV_remap_index 745
-#define VertexAttribs1svNV_remap_index 746
-#define VertexAttribs2dvNV_remap_index 747
-#define VertexAttribs2fvNV_remap_index 748
-#define VertexAttribs2svNV_remap_index 749
-#define VertexAttribs3dvNV_remap_index 750
-#define VertexAttribs3fvNV_remap_index 751
-#define VertexAttribs3svNV_remap_index 752
-#define VertexAttribs4dvNV_remap_index 753
-#define VertexAttribs4fvNV_remap_index 754
-#define VertexAttribs4svNV_remap_index 755
-#define VertexAttribs4ubvNV_remap_index 756
-#define GetTexBumpParameterfvATI_remap_index 757
-#define GetTexBumpParameterivATI_remap_index 758
-#define TexBumpParameterfvATI_remap_index 759
-#define TexBumpParameterivATI_remap_index 760
-#define AlphaFragmentOp1ATI_remap_index 761
-#define AlphaFragmentOp2ATI_remap_index 762
-#define AlphaFragmentOp3ATI_remap_index 763
-#define BeginFragmentShaderATI_remap_index 764
-#define BindFragmentShaderATI_remap_index 765
-#define ColorFragmentOp1ATI_remap_index 766
-#define ColorFragmentOp2ATI_remap_index 767
-#define ColorFragmentOp3ATI_remap_index 768
-#define DeleteFragmentShaderATI_remap_index 769
-#define EndFragmentShaderATI_remap_index 770
-#define GenFragmentShadersATI_remap_index 771
-#define PassTexCoordATI_remap_index 772
-#define SampleMapATI_remap_index 773
-#define SetFragmentShaderConstantATI_remap_index 774
-#define ActiveStencilFaceEXT_remap_index 775
-#define BindVertexArrayAPPLE_remap_index 776
-#define GenVertexArraysAPPLE_remap_index 777
-#define GetProgramNamedParameterdvNV_remap_index 778
-#define GetProgramNamedParameterfvNV_remap_index 779
-#define ProgramNamedParameter4dNV_remap_index 780
-#define ProgramNamedParameter4dvNV_remap_index 781
-#define ProgramNamedParameter4fNV_remap_index 782
-#define ProgramNamedParameter4fvNV_remap_index 783
-#define PrimitiveRestartNV_remap_index 784
-#define GetTexGenxvOES_remap_index 785
-#define TexGenxOES_remap_index 786
-#define TexGenxvOES_remap_index 787
-#define DepthBoundsEXT_remap_index 788
-#define BindFramebufferEXT_remap_index 789
-#define BindRenderbufferEXT_remap_index 790
-#define BufferParameteriAPPLE_remap_index 791
-#define FlushMappedBufferRangeAPPLE_remap_index 792
-#define VertexAttribI1iEXT_remap_index 793
-#define VertexAttribI1uiEXT_remap_index 794
-#define VertexAttribI2iEXT_remap_index 795
-#define VertexAttribI2ivEXT_remap_index 796
-#define VertexAttribI2uiEXT_remap_index 797
-#define VertexAttribI2uivEXT_remap_index 798
-#define VertexAttribI3iEXT_remap_index 799
-#define VertexAttribI3ivEXT_remap_index 800
-#define VertexAttribI3uiEXT_remap_index 801
-#define VertexAttribI3uivEXT_remap_index 802
-#define VertexAttribI4iEXT_remap_index 803
-#define VertexAttribI4ivEXT_remap_index 804
-#define VertexAttribI4uiEXT_remap_index 805
-#define VertexAttribI4uivEXT_remap_index 806
-#define ClearColorIiEXT_remap_index 807
-#define ClearColorIuiEXT_remap_index 808
-#define BindBufferOffsetEXT_remap_index 809
-#define BeginPerfMonitorAMD_remap_index 810
-#define DeletePerfMonitorsAMD_remap_index 811
-#define EndPerfMonitorAMD_remap_index 812
-#define GenPerfMonitorsAMD_remap_index 813
-#define GetPerfMonitorCounterDataAMD_remap_index 814
-#define GetPerfMonitorCounterInfoAMD_remap_index 815
-#define GetPerfMonitorCounterStringAMD_remap_index 816
-#define GetPerfMonitorCountersAMD_remap_index 817
-#define GetPerfMonitorGroupStringAMD_remap_index 818
-#define GetPerfMonitorGroupsAMD_remap_index 819
-#define SelectPerfMonitorCountersAMD_remap_index 820
-#define GetObjectParameterivAPPLE_remap_index 821
-#define ObjectPurgeableAPPLE_remap_index 822
-#define ObjectUnpurgeableAPPLE_remap_index 823
-#define ActiveProgramEXT_remap_index 824
-#define CreateShaderProgramEXT_remap_index 825
-#define UseShaderProgramEXT_remap_index 826
-#define TextureBarrierNV_remap_index 827
-#define VDPAUFiniNV_remap_index 828
-#define VDPAUGetSurfaceivNV_remap_index 829
-#define VDPAUInitNV_remap_index 830
-#define VDPAUIsSurfaceNV_remap_index 831
-#define VDPAUMapSurfacesNV_remap_index 832
-#define VDPAURegisterOutputSurfaceNV_remap_index 833
-#define VDPAURegisterVideoSurfaceNV_remap_index 834
-#define VDPAUSurfaceAccessNV_remap_index 835
-#define VDPAUUnmapSurfacesNV_remap_index 836
-#define VDPAUUnregisterSurfaceNV_remap_index 837
-#define BeginPerfQueryINTEL_remap_index 838
-#define CreatePerfQueryINTEL_remap_index 839
-#define DeletePerfQueryINTEL_remap_index 840
-#define EndPerfQueryINTEL_remap_index 841
-#define GetFirstPerfQueryIdINTEL_remap_index 842
-#define GetNextPerfQueryIdINTEL_remap_index 843
-#define GetPerfCounterInfoINTEL_remap_index 844
-#define GetPerfQueryDataINTEL_remap_index 845
-#define GetPerfQueryIdByNameINTEL_remap_index 846
-#define GetPerfQueryInfoINTEL_remap_index 847
-#define PolygonOffsetClampEXT_remap_index 848
-#define StencilFuncSeparateATI_remap_index 849
-#define ProgramEnvParameters4fvEXT_remap_index 850
-#define ProgramLocalParameters4fvEXT_remap_index 851
-#define EGLImageTargetRenderbufferStorageOES_remap_index 852
-#define EGLImageTargetTexture2DOES_remap_index 853
-#define AlphaFuncx_remap_index 854
-#define ClearColorx_remap_index 855
-#define ClearDepthx_remap_index 856
-#define Color4x_remap_index 857
-#define DepthRangex_remap_index 858
-#define Fogx_remap_index 859
-#define Fogxv_remap_index 860
-#define Frustumf_remap_index 861
-#define Frustumx_remap_index 862
-#define LightModelx_remap_index 863
-#define LightModelxv_remap_index 864
-#define Lightx_remap_index 865
-#define Lightxv_remap_index 866
-#define LineWidthx_remap_index 867
-#define LoadMatrixx_remap_index 868
-#define Materialx_remap_index 869
-#define Materialxv_remap_index 870
-#define MultMatrixx_remap_index 871
-#define MultiTexCoord4x_remap_index 872
-#define Normal3x_remap_index 873
-#define Orthof_remap_index 874
-#define Orthox_remap_index 875
-#define PointSizex_remap_index 876
-#define PolygonOffsetx_remap_index 877
-#define Rotatex_remap_index 878
-#define SampleCoveragex_remap_index 879
-#define Scalex_remap_index 880
-#define TexEnvx_remap_index 881
-#define TexEnvxv_remap_index 882
-#define TexParameterx_remap_index 883
-#define Translatex_remap_index 884
-#define ClipPlanef_remap_index 885
-#define ClipPlanex_remap_index 886
-#define GetClipPlanef_remap_index 887
-#define GetClipPlanex_remap_index 888
-#define GetFixedv_remap_index 889
-#define GetLightxv_remap_index 890
-#define GetMaterialxv_remap_index 891
-#define GetTexEnvxv_remap_index 892
-#define GetTexParameterxv_remap_index 893
-#define PointParameterx_remap_index 894
-#define PointParameterxv_remap_index 895
-#define TexParameterxv_remap_index 896
+#define FlushMappedBufferRange_remap_index 272
+#define MapBufferRange_remap_index 273
+#define BindVertexArray_remap_index 274
+#define DeleteVertexArrays_remap_index 275
+#define GenVertexArrays_remap_index 276
+#define IsVertexArray_remap_index 277
+#define GetActiveUniformBlockName_remap_index 278
+#define GetActiveUniformBlockiv_remap_index 279
+#define GetActiveUniformName_remap_index 280
+#define GetActiveUniformsiv_remap_index 281
+#define GetUniformBlockIndex_remap_index 282
+#define GetUniformIndices_remap_index 283
+#define UniformBlockBinding_remap_index 284
+#define CopyBufferSubData_remap_index 285
+#define ClientWaitSync_remap_index 286
+#define DeleteSync_remap_index 287
+#define FenceSync_remap_index 288
+#define GetInteger64v_remap_index 289
+#define GetSynciv_remap_index 290
+#define IsSync_remap_index 291
+#define WaitSync_remap_index 292
+#define DrawElementsBaseVertex_remap_index 293
+#define DrawElementsInstancedBaseVertex_remap_index 294
+#define DrawRangeElementsBaseVertex_remap_index 295
+#define MultiDrawElementsBaseVertex_remap_index 296
+#define ProvokingVertex_remap_index 297
+#define GetMultisamplefv_remap_index 298
+#define SampleMaski_remap_index 299
+#define TexImage2DMultisample_remap_index 300
+#define TexImage3DMultisample_remap_index 301
+#define BlendEquationSeparateiARB_remap_index 302
+#define BlendEquationiARB_remap_index 303
+#define BlendFuncSeparateiARB_remap_index 304
+#define BlendFunciARB_remap_index 305
+#define BindFragDataLocationIndexed_remap_index 306
+#define GetFragDataIndex_remap_index 307
+#define BindSampler_remap_index 308
+#define DeleteSamplers_remap_index 309
+#define GenSamplers_remap_index 310
+#define GetSamplerParameterIiv_remap_index 311
+#define GetSamplerParameterIuiv_remap_index 312
+#define GetSamplerParameterfv_remap_index 313
+#define GetSamplerParameteriv_remap_index 314
+#define IsSampler_remap_index 315
+#define SamplerParameterIiv_remap_index 316
+#define SamplerParameterIuiv_remap_index 317
+#define SamplerParameterf_remap_index 318
+#define SamplerParameterfv_remap_index 319
+#define SamplerParameteri_remap_index 320
+#define SamplerParameteriv_remap_index 321
+#define GetQueryObjecti64v_remap_index 322
+#define GetQueryObjectui64v_remap_index 323
+#define QueryCounter_remap_index 324
+#define ColorP3ui_remap_index 325
+#define ColorP3uiv_remap_index 326
+#define ColorP4ui_remap_index 327
+#define ColorP4uiv_remap_index 328
+#define MultiTexCoordP1ui_remap_index 329
+#define MultiTexCoordP1uiv_remap_index 330
+#define MultiTexCoordP2ui_remap_index 331
+#define MultiTexCoordP2uiv_remap_index 332
+#define MultiTexCoordP3ui_remap_index 333
+#define MultiTexCoordP3uiv_remap_index 334
+#define MultiTexCoordP4ui_remap_index 335
+#define MultiTexCoordP4uiv_remap_index 336
+#define NormalP3ui_remap_index 337
+#define NormalP3uiv_remap_index 338
+#define SecondaryColorP3ui_remap_index 339
+#define SecondaryColorP3uiv_remap_index 340
+#define TexCoordP1ui_remap_index 341
+#define TexCoordP1uiv_remap_index 342
+#define TexCoordP2ui_remap_index 343
+#define TexCoordP2uiv_remap_index 344
+#define TexCoordP3ui_remap_index 345
+#define TexCoordP3uiv_remap_index 346
+#define TexCoordP4ui_remap_index 347
+#define TexCoordP4uiv_remap_index 348
+#define VertexAttribP1ui_remap_index 349
+#define VertexAttribP1uiv_remap_index 350
+#define VertexAttribP2ui_remap_index 351
+#define VertexAttribP2uiv_remap_index 352
+#define VertexAttribP3ui_remap_index 353
+#define VertexAttribP3uiv_remap_index 354
+#define VertexAttribP4ui_remap_index 355
+#define VertexAttribP4uiv_remap_index 356
+#define VertexP2ui_remap_index 357
+#define VertexP2uiv_remap_index 358
+#define VertexP3ui_remap_index 359
+#define VertexP3uiv_remap_index 360
+#define VertexP4ui_remap_index 361
+#define VertexP4uiv_remap_index 362
+#define DrawArraysIndirect_remap_index 363
+#define DrawElementsIndirect_remap_index 364
+#define GetUniformdv_remap_index 365
+#define Uniform1d_remap_index 366
+#define Uniform1dv_remap_index 367
+#define Uniform2d_remap_index 368
+#define Uniform2dv_remap_index 369
+#define Uniform3d_remap_index 370
+#define Uniform3dv_remap_index 371
+#define Uniform4d_remap_index 372
+#define Uniform4dv_remap_index 373
+#define UniformMatrix2dv_remap_index 374
+#define UniformMatrix2x3dv_remap_index 375
+#define UniformMatrix2x4dv_remap_index 376
+#define UniformMatrix3dv_remap_index 377
+#define UniformMatrix3x2dv_remap_index 378
+#define UniformMatrix3x4dv_remap_index 379
+#define UniformMatrix4dv_remap_index 380
+#define UniformMatrix4x2dv_remap_index 381
+#define UniformMatrix4x3dv_remap_index 382
+#define BindTransformFeedback_remap_index 383
+#define DeleteTransformFeedbacks_remap_index 384
+#define DrawTransformFeedback_remap_index 385
+#define GenTransformFeedbacks_remap_index 386
+#define IsTransformFeedback_remap_index 387
+#define PauseTransformFeedback_remap_index 388
+#define ResumeTransformFeedback_remap_index 389
+#define BeginQueryIndexed_remap_index 390
+#define DrawTransformFeedbackStream_remap_index 391
+#define EndQueryIndexed_remap_index 392
+#define GetQueryIndexediv_remap_index 393
+#define ClearDepthf_remap_index 394
+#define DepthRangef_remap_index 395
+#define GetShaderPrecisionFormat_remap_index 396
+#define ReleaseShaderCompiler_remap_index 397
+#define ShaderBinary_remap_index 398
+#define GetProgramBinary_remap_index 399
+#define ProgramBinary_remap_index 400
+#define ProgramParameteri_remap_index 401
+#define GetVertexAttribLdv_remap_index 402
+#define VertexAttribL1d_remap_index 403
+#define VertexAttribL1dv_remap_index 404
+#define VertexAttribL2d_remap_index 405
+#define VertexAttribL2dv_remap_index 406
+#define VertexAttribL3d_remap_index 407
+#define VertexAttribL3dv_remap_index 408
+#define VertexAttribL4d_remap_index 409
+#define VertexAttribL4dv_remap_index 410
+#define VertexAttribLPointer_remap_index 411
+#define DepthRangeArrayv_remap_index 412
+#define DepthRangeIndexed_remap_index 413
+#define GetDoublei_v_remap_index 414
+#define GetFloati_v_remap_index 415
+#define ScissorArrayv_remap_index 416
+#define ScissorIndexed_remap_index 417
+#define ScissorIndexedv_remap_index 418
+#define ViewportArrayv_remap_index 419
+#define ViewportIndexedf_remap_index 420
+#define ViewportIndexedfv_remap_index 421
+#define GetGraphicsResetStatusARB_remap_index 422
+#define GetnColorTableARB_remap_index 423
+#define GetnCompressedTexImageARB_remap_index 424
+#define GetnConvolutionFilterARB_remap_index 425
+#define GetnHistogramARB_remap_index 426
+#define GetnMapdvARB_remap_index 427
+#define GetnMapfvARB_remap_index 428
+#define GetnMapivARB_remap_index 429
+#define GetnMinmaxARB_remap_index 430
+#define GetnPixelMapfvARB_remap_index 431
+#define GetnPixelMapuivARB_remap_index 432
+#define GetnPixelMapusvARB_remap_index 433
+#define GetnPolygonStippleARB_remap_index 434
+#define GetnSeparableFilterARB_remap_index 435
+#define GetnTexImageARB_remap_index 436
+#define GetnUniformdvARB_remap_index 437
+#define GetnUniformfvARB_remap_index 438
+#define GetnUniformivARB_remap_index 439
+#define GetnUniformuivARB_remap_index 440
+#define ReadnPixelsARB_remap_index 441
+#define DrawArraysInstancedBaseInstance_remap_index 442
+#define DrawElementsInstancedBaseInstance_remap_index 443
+#define DrawElementsInstancedBaseVertexBaseInstance_remap_index 444
+#define DrawTransformFeedbackInstanced_remap_index 445
+#define DrawTransformFeedbackStreamInstanced_remap_index 446
+#define GetInternalformativ_remap_index 447
+#define GetActiveAtomicCounterBufferiv_remap_index 448
+#define BindImageTexture_remap_index 449
+#define MemoryBarrier_remap_index 450
+#define TexStorage1D_remap_index 451
+#define TexStorage2D_remap_index 452
+#define TexStorage3D_remap_index 453
+#define TextureStorage1DEXT_remap_index 454
+#define TextureStorage2DEXT_remap_index 455
+#define TextureStorage3DEXT_remap_index 456
+#define ClearBufferData_remap_index 457
+#define ClearBufferSubData_remap_index 458
+#define DispatchCompute_remap_index 459
+#define DispatchComputeIndirect_remap_index 460
+#define CopyImageSubData_remap_index 461
+#define TextureView_remap_index 462
+#define BindVertexBuffer_remap_index 463
+#define VertexAttribBinding_remap_index 464
+#define VertexAttribFormat_remap_index 465
+#define VertexAttribIFormat_remap_index 466
+#define VertexAttribLFormat_remap_index 467
+#define VertexBindingDivisor_remap_index 468
+#define MultiDrawArraysIndirect_remap_index 469
+#define MultiDrawElementsIndirect_remap_index 470
+#define GetProgramInterfaceiv_remap_index 471
+#define GetProgramResourceIndex_remap_index 472
+#define GetProgramResourceLocation_remap_index 473
+#define GetProgramResourceLocationIndex_remap_index 474
+#define GetProgramResourceName_remap_index 475
+#define GetProgramResourceiv_remap_index 476
+#define TexBufferRange_remap_index 477
+#define TexStorage2DMultisample_remap_index 478
+#define TexStorage3DMultisample_remap_index 479
+#define BufferStorage_remap_index 480
+#define ClearTexImage_remap_index 481
+#define ClearTexSubImage_remap_index 482
+#define BindBuffersBase_remap_index 483
+#define BindBuffersRange_remap_index 484
+#define BindImageTextures_remap_index 485
+#define BindSamplers_remap_index 486
+#define BindTextures_remap_index 487
+#define BindVertexBuffers_remap_index 488
+#define ClipControl_remap_index 489
+#define BindTextureUnit_remap_index 490
+#define BlitNamedFramebuffer_remap_index 491
+#define CheckNamedFramebufferStatus_remap_index 492
+#define ClearNamedBufferData_remap_index 493
+#define ClearNamedBufferSubData_remap_index 494
+#define ClearNamedFramebufferfi_remap_index 495
+#define ClearNamedFramebufferfv_remap_index 496
+#define ClearNamedFramebufferiv_remap_index 497
+#define ClearNamedFramebufferuiv_remap_index 498
+#define CompressedTextureSubImage1D_remap_index 499
+#define CompressedTextureSubImage2D_remap_index 500
+#define CompressedTextureSubImage3D_remap_index 501
+#define CopyNamedBufferSubData_remap_index 502
+#define CopyTextureSubImage1D_remap_index 503
+#define CopyTextureSubImage2D_remap_index 504
+#define CopyTextureSubImage3D_remap_index 505
+#define CreateBuffers_remap_index 506
+#define CreateFramebuffers_remap_index 507
+#define CreateProgramPipelines_remap_index 508
+#define CreateQueries_remap_index 509
+#define CreateRenderbuffers_remap_index 510
+#define CreateSamplers_remap_index 511
+#define CreateTextures_remap_index 512
+#define CreateTransformFeedbacks_remap_index 513
+#define CreateVertexArrays_remap_index 514
+#define DisableVertexArrayAttrib_remap_index 515
+#define EnableVertexArrayAttrib_remap_index 516
+#define FlushMappedNamedBufferRange_remap_index 517
+#define GenerateTextureMipmap_remap_index 518
+#define GetCompressedTextureImage_remap_index 519
+#define GetNamedBufferParameteri64v_remap_index 520
+#define GetNamedBufferParameteriv_remap_index 521
+#define GetNamedBufferPointerv_remap_index 522
+#define GetNamedBufferSubData_remap_index 523
+#define GetNamedFramebufferAttachmentParameteriv_remap_index 524
+#define GetNamedFramebufferParameteriv_remap_index 525
+#define GetNamedRenderbufferParameteriv_remap_index 526
+#define GetQueryBufferObjecti64v_remap_index 527
+#define GetQueryBufferObjectiv_remap_index 528
+#define GetQueryBufferObjectui64v_remap_index 529
+#define GetQueryBufferObjectuiv_remap_index 530
+#define GetTextureImage_remap_index 531
+#define GetTextureLevelParameterfv_remap_index 532
+#define GetTextureLevelParameteriv_remap_index 533
+#define GetTextureParameterIiv_remap_index 534
+#define GetTextureParameterIuiv_remap_index 535
+#define GetTextureParameterfv_remap_index 536
+#define GetTextureParameteriv_remap_index 537
+#define GetTransformFeedbacki64_v_remap_index 538
+#define GetTransformFeedbacki_v_remap_index 539
+#define GetTransformFeedbackiv_remap_index 540
+#define GetVertexArrayIndexed64iv_remap_index 541
+#define GetVertexArrayIndexediv_remap_index 542
+#define GetVertexArrayiv_remap_index 543
+#define InvalidateNamedFramebufferData_remap_index 544
+#define InvalidateNamedFramebufferSubData_remap_index 545
+#define MapNamedBuffer_remap_index 546
+#define MapNamedBufferRange_remap_index 547
+#define NamedBufferData_remap_index 548
+#define NamedBufferStorage_remap_index 549
+#define NamedBufferSubData_remap_index 550
+#define NamedFramebufferDrawBuffer_remap_index 551
+#define NamedFramebufferDrawBuffers_remap_index 552
+#define NamedFramebufferParameteri_remap_index 553
+#define NamedFramebufferReadBuffer_remap_index 554
+#define NamedFramebufferRenderbuffer_remap_index 555
+#define NamedFramebufferTexture_remap_index 556
+#define NamedFramebufferTextureLayer_remap_index 557
+#define NamedRenderbufferStorage_remap_index 558
+#define NamedRenderbufferStorageMultisample_remap_index 559
+#define TextureBuffer_remap_index 560
+#define TextureBufferRange_remap_index 561
+#define TextureParameterIiv_remap_index 562
+#define TextureParameterIuiv_remap_index 563
+#define TextureParameterf_remap_index 564
+#define TextureParameterfv_remap_index 565
+#define TextureParameteri_remap_index 566
+#define TextureParameteriv_remap_index 567
+#define TextureStorage1D_remap_index 568
+#define TextureStorage2D_remap_index 569
+#define TextureStorage2DMultisample_remap_index 570
+#define TextureStorage3D_remap_index 571
+#define TextureStorage3DMultisample_remap_index 572
+#define TextureSubImage1D_remap_index 573
+#define TextureSubImage2D_remap_index 574
+#define TextureSubImage3D_remap_index 575
+#define TransformFeedbackBufferBase_remap_index 576
+#define TransformFeedbackBufferRange_remap_index 577
+#define UnmapNamedBuffer_remap_index 578
+#define VertexArrayAttribBinding_remap_index 579
+#define VertexArrayAttribFormat_remap_index 580
+#define VertexArrayAttribIFormat_remap_index 581
+#define VertexArrayAttribLFormat_remap_index 582
+#define VertexArrayBindingDivisor_remap_index 583
+#define VertexArrayElementBuffer_remap_index 584
+#define VertexArrayVertexBuffer_remap_index 585
+#define VertexArrayVertexBuffers_remap_index 586
+#define InvalidateBufferData_remap_index 587
+#define InvalidateBufferSubData_remap_index 588
+#define InvalidateFramebuffer_remap_index 589
+#define InvalidateSubFramebuffer_remap_index 590
+#define InvalidateTexImage_remap_index 591
+#define InvalidateTexSubImage_remap_index 592
+#define PolygonOffsetEXT_remap_index 593
+#define DrawTexfOES_remap_index 594
+#define DrawTexfvOES_remap_index 595
+#define DrawTexiOES_remap_index 596
+#define DrawTexivOES_remap_index 597
+#define DrawTexsOES_remap_index 598
+#define DrawTexsvOES_remap_index 599
+#define DrawTexxOES_remap_index 600
+#define DrawTexxvOES_remap_index 601
+#define PointSizePointerOES_remap_index 602
+#define QueryMatrixxOES_remap_index 603
+#define SampleMaskSGIS_remap_index 604
+#define SamplePatternSGIS_remap_index 605
+#define ColorPointerEXT_remap_index 606
+#define EdgeFlagPointerEXT_remap_index 607
+#define IndexPointerEXT_remap_index 608
+#define NormalPointerEXT_remap_index 609
+#define TexCoordPointerEXT_remap_index 610
+#define VertexPointerEXT_remap_index 611
+#define DiscardFramebufferEXT_remap_index 612
+#define ActiveShaderProgram_remap_index 613
+#define BindProgramPipeline_remap_index 614
+#define CreateShaderProgramv_remap_index 615
+#define DeleteProgramPipelines_remap_index 616
+#define GenProgramPipelines_remap_index 617
+#define GetProgramPipelineInfoLog_remap_index 618
+#define GetProgramPipelineiv_remap_index 619
+#define IsProgramPipeline_remap_index 620
+#define LockArraysEXT_remap_index 621
+#define ProgramUniform1d_remap_index 622
+#define ProgramUniform1dv_remap_index 623
+#define ProgramUniform1f_remap_index 624
+#define ProgramUniform1fv_remap_index 625
+#define ProgramUniform1i_remap_index 626
+#define ProgramUniform1iv_remap_index 627
+#define ProgramUniform1ui_remap_index 628
+#define ProgramUniform1uiv_remap_index 629
+#define ProgramUniform2d_remap_index 630
+#define ProgramUniform2dv_remap_index 631
+#define ProgramUniform2f_remap_index 632
+#define ProgramUniform2fv_remap_index 633
+#define ProgramUniform2i_remap_index 634
+#define ProgramUniform2iv_remap_index 635
+#define ProgramUniform2ui_remap_index 636
+#define ProgramUniform2uiv_remap_index 637
+#define ProgramUniform3d_remap_index 638
+#define ProgramUniform3dv_remap_index 639
+#define ProgramUniform3f_remap_index 640
+#define ProgramUniform3fv_remap_index 641
+#define ProgramUniform3i_remap_index 642
+#define ProgramUniform3iv_remap_index 643
+#define ProgramUniform3ui_remap_index 644
+#define ProgramUniform3uiv_remap_index 645
+#define ProgramUniform4d_remap_index 646
+#define ProgramUniform4dv_remap_index 647
+#define ProgramUniform4f_remap_index 648
+#define ProgramUniform4fv_remap_index 649
+#define ProgramUniform4i_remap_index 650
+#define ProgramUniform4iv_remap_index 651
+#define ProgramUniform4ui_remap_index 652
+#define ProgramUniform4uiv_remap_index 653
+#define ProgramUniformMatrix2dv_remap_index 654
+#define ProgramUniformMatrix2fv_remap_index 655
+#define ProgramUniformMatrix2x3dv_remap_index 656
+#define ProgramUniformMatrix2x3fv_remap_index 657
+#define ProgramUniformMatrix2x4dv_remap_index 658
+#define ProgramUniformMatrix2x4fv_remap_index 659
+#define ProgramUniformMatrix3dv_remap_index 660
+#define ProgramUniformMatrix3fv_remap_index 661
+#define ProgramUniformMatrix3x2dv_remap_index 662
+#define ProgramUniformMatrix3x2fv_remap_index 663
+#define ProgramUniformMatrix3x4dv_remap_index 664
+#define ProgramUniformMatrix3x4fv_remap_index 665
+#define ProgramUniformMatrix4dv_remap_index 666
+#define ProgramUniformMatrix4fv_remap_index 667
+#define ProgramUniformMatrix4x2dv_remap_index 668
+#define ProgramUniformMatrix4x2fv_remap_index 669
+#define ProgramUniformMatrix4x3dv_remap_index 670
+#define ProgramUniformMatrix4x3fv_remap_index 671
+#define UnlockArraysEXT_remap_index 672
+#define UseProgramStages_remap_index 673
+#define ValidateProgramPipeline_remap_index 674
+#define DebugMessageCallback_remap_index 675
+#define DebugMessageControl_remap_index 676
+#define DebugMessageInsert_remap_index 677
+#define GetDebugMessageLog_remap_index 678
+#define GetObjectLabel_remap_index 679
+#define GetObjectPtrLabel_remap_index 680
+#define ObjectLabel_remap_index 681
+#define ObjectPtrLabel_remap_index 682
+#define PopDebugGroup_remap_index 683
+#define PushDebugGroup_remap_index 684
+#define SecondaryColor3fEXT_remap_index 685
+#define SecondaryColor3fvEXT_remap_index 686
+#define MultiDrawElementsEXT_remap_index 687
+#define FogCoordfEXT_remap_index 688
+#define FogCoordfvEXT_remap_index 689
+#define ResizeBuffersMESA_remap_index 690
+#define WindowPos4dMESA_remap_index 691
+#define WindowPos4dvMESA_remap_index 692
+#define WindowPos4fMESA_remap_index 693
+#define WindowPos4fvMESA_remap_index 694
+#define WindowPos4iMESA_remap_index 695
+#define WindowPos4ivMESA_remap_index 696
+#define WindowPos4sMESA_remap_index 697
+#define WindowPos4svMESA_remap_index 698
+#define MultiModeDrawArraysIBM_remap_index 699
+#define MultiModeDrawElementsIBM_remap_index 700
+#define AreProgramsResidentNV_remap_index 701
+#define ExecuteProgramNV_remap_index 702
+#define GetProgramParameterdvNV_remap_index 703
+#define GetProgramParameterfvNV_remap_index 704
+#define GetProgramStringNV_remap_index 705
+#define GetProgramivNV_remap_index 706
+#define GetTrackMatrixivNV_remap_index 707
+#define GetVertexAttribdvNV_remap_index 708
+#define GetVertexAttribfvNV_remap_index 709
+#define GetVertexAttribivNV_remap_index 710
+#define LoadProgramNV_remap_index 711
+#define ProgramParameters4dvNV_remap_index 712
+#define ProgramParameters4fvNV_remap_index 713
+#define RequestResidentProgramsNV_remap_index 714
+#define TrackMatrixNV_remap_index 715
+#define VertexAttrib1dNV_remap_index 716
+#define VertexAttrib1dvNV_remap_index 717
+#define VertexAttrib1fNV_remap_index 718
+#define VertexAttrib1fvNV_remap_index 719
+#define VertexAttrib1sNV_remap_index 720
+#define VertexAttrib1svNV_remap_index 721
+#define VertexAttrib2dNV_remap_index 722
+#define VertexAttrib2dvNV_remap_index 723
+#define VertexAttrib2fNV_remap_index 724
+#define VertexAttrib2fvNV_remap_index 725
+#define VertexAttrib2sNV_remap_index 726
+#define VertexAttrib2svNV_remap_index 727
+#define VertexAttrib3dNV_remap_index 728
+#define VertexAttrib3dvNV_remap_index 729
+#define VertexAttrib3fNV_remap_index 730
+#define VertexAttrib3fvNV_remap_index 731
+#define VertexAttrib3sNV_remap_index 732
+#define VertexAttrib3svNV_remap_index 733
+#define VertexAttrib4dNV_remap_index 734
+#define VertexAttrib4dvNV_remap_index 735
+#define VertexAttrib4fNV_remap_index 736
+#define VertexAttrib4fvNV_remap_index 737
+#define VertexAttrib4sNV_remap_index 738
+#define VertexAttrib4svNV_remap_index 739
+#define VertexAttrib4ubNV_remap_index 740
+#define VertexAttrib4ubvNV_remap_index 741
+#define VertexAttribPointerNV_remap_index 742
+#define VertexAttribs1dvNV_remap_index 743
+#define VertexAttribs1fvNV_remap_index 744
+#define VertexAttribs1svNV_remap_index 745
+#define VertexAttribs2dvNV_remap_index 746
+#define VertexAttribs2fvNV_remap_index 747
+#define VertexAttribs2svNV_remap_index 748
+#define VertexAttribs3dvNV_remap_index 749
+#define VertexAttribs3fvNV_remap_index 750
+#define VertexAttribs3svNV_remap_index 751
+#define VertexAttribs4dvNV_remap_index 752
+#define VertexAttribs4fvNV_remap_index 753
+#define VertexAttribs4svNV_remap_index 754
+#define VertexAttribs4ubvNV_remap_index 755
+#define GetTexBumpParameterfvATI_remap_index 756
+#define GetTexBumpParameterivATI_remap_index 757
+#define TexBumpParameterfvATI_remap_index 758
+#define TexBumpParameterivATI_remap_index 759
+#define AlphaFragmentOp1ATI_remap_index 760
+#define AlphaFragmentOp2ATI_remap_index 761
+#define AlphaFragmentOp3ATI_remap_index 762
+#define BeginFragmentShaderATI_remap_index 763
+#define BindFragmentShaderATI_remap_index 764
+#define ColorFragmentOp1ATI_remap_index 765
+#define ColorFragmentOp2ATI_remap_index 766
+#define ColorFragmentOp3ATI_remap_index 767
+#define DeleteFragmentShaderATI_remap_index 768
+#define EndFragmentShaderATI_remap_index 769
+#define GenFragmentShadersATI_remap_index 770
+#define PassTexCoordATI_remap_index 771
+#define SampleMapATI_remap_index 772
+#define SetFragmentShaderConstantATI_remap_index 773
+#define ActiveStencilFaceEXT_remap_index 774
+#define BindVertexArrayAPPLE_remap_index 775
+#define GenVertexArraysAPPLE_remap_index 776
+#define GetProgramNamedParameterdvNV_remap_index 777
+#define GetProgramNamedParameterfvNV_remap_index 778
+#define ProgramNamedParameter4dNV_remap_index 779
+#define ProgramNamedParameter4dvNV_remap_index 780
+#define ProgramNamedParameter4fNV_remap_index 781
+#define ProgramNamedParameter4fvNV_remap_index 782
+#define PrimitiveRestartNV_remap_index 783
+#define GetTexGenxvOES_remap_index 784
+#define TexGenxOES_remap_index 785
+#define TexGenxvOES_remap_index 786
+#define DepthBoundsEXT_remap_index 787
+#define BindFramebufferEXT_remap_index 788
+#define BindRenderbufferEXT_remap_index 789
+#define BufferParameteriAPPLE_remap_index 790
+#define FlushMappedBufferRangeAPPLE_remap_index 791
+#define VertexAttribI1iEXT_remap_index 792
+#define VertexAttribI1uiEXT_remap_index 793
+#define VertexAttribI2iEXT_remap_index 794
+#define VertexAttribI2ivEXT_remap_index 795
+#define VertexAttribI2uiEXT_remap_index 796
+#define VertexAttribI2uivEXT_remap_index 797
+#define VertexAttribI3iEXT_remap_index 798
+#define VertexAttribI3ivEXT_remap_index 799
+#define VertexAttribI3uiEXT_remap_index 800
+#define VertexAttribI3uivEXT_remap_index 801
+#define VertexAttribI4iEXT_remap_index 802
+#define VertexAttribI4ivEXT_remap_index 803
+#define VertexAttribI4uiEXT_remap_index 804
+#define VertexAttribI4uivEXT_remap_index 805
+#define ClearColorIiEXT_remap_index 806
+#define ClearColorIuiEXT_remap_index 807
+#define BindBufferOffsetEXT_remap_index 808
+#define BeginPerfMonitorAMD_remap_index 809
+#define DeletePerfMonitorsAMD_remap_index 810
+#define EndPerfMonitorAMD_remap_index 811
+#define GenPerfMonitorsAMD_remap_index 812
+#define GetPerfMonitorCounterDataAMD_remap_index 813
+#define GetPerfMonitorCounterInfoAMD_remap_index 814
+#define GetPerfMonitorCounterStringAMD_remap_index 815
+#define GetPerfMonitorCountersAMD_remap_index 816
+#define GetPerfMonitorGroupStringAMD_remap_index 817
+#define GetPerfMonitorGroupsAMD_remap_index 818
+#define SelectPerfMonitorCountersAMD_remap_index 819
+#define GetObjectParameterivAPPLE_remap_index 820
+#define ObjectPurgeableAPPLE_remap_index 821
+#define ObjectUnpurgeableAPPLE_remap_index 822
+#define ActiveProgramEXT_remap_index 823
+#define CreateShaderProgramEXT_remap_index 824
+#define UseShaderProgramEXT_remap_index 825
+#define TextureBarrierNV_remap_index 826
+#define VDPAUFiniNV_remap_index 827
+#define VDPAUGetSurfaceivNV_remap_index 828
+#define VDPAUInitNV_remap_index 829
+#define VDPAUIsSurfaceNV_remap_index 830
+#define VDPAUMapSurfacesNV_remap_index 831
+#define VDPAURegisterOutputSurfaceNV_remap_index 832
+#define VDPAURegisterVideoSurfaceNV_remap_index 833
+#define VDPAUSurfaceAccessNV_remap_index 834
+#define VDPAUUnmapSurfacesNV_remap_index 835
+#define VDPAUUnregisterSurfaceNV_remap_index 836
+#define BeginPerfQueryINTEL_remap_index 837
+#define CreatePerfQueryINTEL_remap_index 838
+#define DeletePerfQueryINTEL_remap_index 839
+#define EndPerfQueryINTEL_remap_index 840
+#define GetFirstPerfQueryIdINTEL_remap_index 841
+#define GetNextPerfQueryIdINTEL_remap_index 842
+#define GetPerfCounterInfoINTEL_remap_index 843
+#define GetPerfQueryDataINTEL_remap_index 844
+#define GetPerfQueryIdByNameINTEL_remap_index 845
+#define GetPerfQueryInfoINTEL_remap_index 846
+#define PolygonOffsetClampEXT_remap_index 847
+#define StencilFuncSeparateATI_remap_index 848
+#define ProgramEnvParameters4fvEXT_remap_index 849
+#define ProgramLocalParameters4fvEXT_remap_index 850
+#define EGLImageTargetRenderbufferStorageOES_remap_index 851
+#define EGLImageTargetTexture2DOES_remap_index 852
+#define AlphaFuncx_remap_index 853
+#define ClearColorx_remap_index 854
+#define ClearDepthx_remap_index 855
+#define Color4x_remap_index 856
+#define DepthRangex_remap_index 857
+#define Fogx_remap_index 858
+#define Fogxv_remap_index 859
+#define Frustumf_remap_index 860
+#define Frustumx_remap_index 861
+#define LightModelx_remap_index 862
+#define LightModelxv_remap_index 863
+#define Lightx_remap_index 864
+#define Lightxv_remap_index 865
+#define LineWidthx_remap_index 866
+#define LoadMatrixx_remap_index 867
+#define Materialx_remap_index 868
+#define Materialxv_remap_index 869
+#define MultMatrixx_remap_index 870
+#define MultiTexCoord4x_remap_index 871
+#define Normal3x_remap_index 872
+#define Orthof_remap_index 873
+#define Orthox_remap_index 874
+#define PointSizex_remap_index 875
+#define PolygonOffsetx_remap_index 876
+#define Rotatex_remap_index 877
+#define SampleCoveragex_remap_index 878
+#define Scalex_remap_index 879
+#define TexEnvx_remap_index 880
+#define TexEnvxv_remap_index 881
+#define TexParameterx_remap_index 882
+#define Translatex_remap_index 883
+#define ClipPlanef_remap_index 884
+#define ClipPlanex_remap_index 885
+#define GetClipPlanef_remap_index 886
+#define GetClipPlanex_remap_index 887
+#define GetFixedv_remap_index 888
+#define GetLightxv_remap_index 889
+#define GetMaterialxv_remap_index 890
+#define GetTexEnvxv_remap_index 891
+#define GetTexParameterxv_remap_index 892
+#define PointParameterx_remap_index 893
+#define PointParameterxv_remap_index 894
+#define TexParameterxv_remap_index 895
#define _gloffset_CompressedTexImage1D driDispatchRemapTable[CompressedTexImage1D_remap_index]
#define _gloffset_CompressedTexImage2D driDispatchRemapTable[CompressedTexImage2D_remap_index]
@@ -1646,7 +1645,6 @@ SERVEXTERN int driDispatchRemapTable[ driDispatchRemapTable_size ];
#define _gloffset_IsRenderbuffer driDispatchRemapTable[IsRenderbuffer_remap_index]
#define _gloffset_RenderbufferStorage driDispatchRemapTable[RenderbufferStorage_remap_index]
#define _gloffset_RenderbufferStorageMultisample driDispatchRemapTable[RenderbufferStorageMultisample_remap_index]
-#define _gloffset_FramebufferTextureFaceARB driDispatchRemapTable[FramebufferTextureFaceARB_remap_index]
#define _gloffset_FlushMappedBufferRange driDispatchRemapTable[FlushMappedBufferRange_remap_index]
#define _gloffset_MapBufferRange driDispatchRemapTable[MapBufferRange_remap_index]
#define _gloffset_BindVertexArray driDispatchRemapTable[BindVertexArray_remap_index]
@@ -9752,17 +9750,6 @@ static INLINE void SET_RenderbufferStorageMultisample(struct _glapi_table *disp,
SET_by_offset(disp, _gloffset_RenderbufferStorageMultisample, fn);
}
-typedef void (GLAPIENTRYP _glptr_FramebufferTextureFaceARB)(GLenum, GLenum, GLuint, GLint, GLenum);
-#define CALL_FramebufferTextureFaceARB(disp, parameters) \
- (* GET_FramebufferTextureFaceARB(disp)) parameters
-static INLINE _glptr_FramebufferTextureFaceARB GET_FramebufferTextureFaceARB(struct _glapi_table *disp) {
- return (_glptr_FramebufferTextureFaceARB) (GET_by_offset(disp, _gloffset_FramebufferTextureFaceARB));
-}
-
-static INLINE void SET_FramebufferTextureFaceARB(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLenum, GLenum, GLuint, GLint, GLenum)) {
- SET_by_offset(disp, _gloffset_FramebufferTextureFaceARB, fn);
-}
-
typedef void (GLAPIENTRYP _glptr_FlushMappedBufferRange)(GLenum, GLintptr, GLsizeiptr);
#define CALL_FlushMappedBufferRange(disp, parameters) \
(* GET_FlushMappedBufferRange(disp)) parameters
diff --git a/xorg-server/glx/glapitable.h b/xorg-server/glx/glapitable.h
index 9d33a9ff9..bc3204461 100644
--- a/xorg-server/glx/glapitable.h
+++ b/xorg-server/glx/glapitable.h
@@ -721,631 +721,630 @@ struct _glapi_table
GLboolean (GLAPIENTRYP IsRenderbuffer)(GLuint renderbuffer); /* 677 */
void (GLAPIENTRYP RenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 678 */
void (GLAPIENTRYP RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); /* 679 */
- void (GLAPIENTRYP FramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); /* 680 */
- void (GLAPIENTRYP FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); /* 681 */
- GLvoid * (GLAPIENTRYP MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 682 */
- void (GLAPIENTRYP BindVertexArray)(GLuint array); /* 683 */
- void (GLAPIENTRYP DeleteVertexArrays)(GLsizei n, const GLuint * arrays); /* 684 */
- void (GLAPIENTRYP GenVertexArrays)(GLsizei n, GLuint * arrays); /* 685 */
- GLboolean (GLAPIENTRYP IsVertexArray)(GLuint array); /* 686 */
- void (GLAPIENTRYP GetActiveUniformBlockName)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); /* 687 */
- void (GLAPIENTRYP GetActiveUniformBlockiv)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); /* 688 */
- void (GLAPIENTRYP GetActiveUniformName)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); /* 689 */
- void (GLAPIENTRYP GetActiveUniformsiv)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); /* 690 */
- GLuint (GLAPIENTRYP GetUniformBlockIndex)(GLuint program, const GLchar * uniformBlockName); /* 691 */
- void (GLAPIENTRYP GetUniformIndices)(GLuint program, GLsizei uniformCount, const GLchar * const * uniformNames, GLuint * uniformIndices); /* 692 */
- void (GLAPIENTRYP UniformBlockBinding)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); /* 693 */
- void (GLAPIENTRYP CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 694 */
- GLenum (GLAPIENTRYP ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 695 */
- void (GLAPIENTRYP DeleteSync)(GLsync sync); /* 696 */
- GLsync (GLAPIENTRYP FenceSync)(GLenum condition, GLbitfield flags); /* 697 */
- void (GLAPIENTRYP GetInteger64v)(GLenum pname, GLint64 * params); /* 698 */
- void (GLAPIENTRYP GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 699 */
- GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 700 */
- void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 701 */
- void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 702 */
- void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLint basevertex); /* 703 */
- void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 704 */
- void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, const GLint * basevertex); /* 705 */
- void (GLAPIENTRYP ProvokingVertex)(GLenum mode); /* 706 */
- void (GLAPIENTRYP GetMultisamplefv)(GLenum pname, GLuint index, GLfloat * val); /* 707 */
- void (GLAPIENTRYP SampleMaski)(GLuint index, GLbitfield mask); /* 708 */
- void (GLAPIENTRYP TexImage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); /* 709 */
- void (GLAPIENTRYP TexImage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); /* 710 */
- void (GLAPIENTRYP BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA); /* 711 */
- void (GLAPIENTRYP BlendEquationiARB)(GLuint buf, GLenum mode); /* 712 */
- void (GLAPIENTRYP BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA); /* 713 */
- void (GLAPIENTRYP BlendFunciARB)(GLuint buf, GLenum src, GLenum dst); /* 714 */
- void (GLAPIENTRYP BindFragDataLocationIndexed)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); /* 715 */
- GLint (GLAPIENTRYP GetFragDataIndex)(GLuint program, const GLchar * name); /* 716 */
- void (GLAPIENTRYP BindSampler)(GLuint unit, GLuint sampler); /* 717 */
- void (GLAPIENTRYP DeleteSamplers)(GLsizei count, const GLuint * samplers); /* 718 */
- void (GLAPIENTRYP GenSamplers)(GLsizei count, GLuint * samplers); /* 719 */
- void (GLAPIENTRYP GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); /* 720 */
- void (GLAPIENTRYP GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); /* 721 */
- void (GLAPIENTRYP GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); /* 722 */
- void (GLAPIENTRYP GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); /* 723 */
- GLboolean (GLAPIENTRYP IsSampler)(GLuint sampler); /* 724 */
- void (GLAPIENTRYP SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * params); /* 725 */
- void (GLAPIENTRYP SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * params); /* 726 */
- void (GLAPIENTRYP SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); /* 727 */
- void (GLAPIENTRYP SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * params); /* 728 */
- void (GLAPIENTRYP SamplerParameteri)(GLuint sampler, GLenum pname, GLint param); /* 729 */
- void (GLAPIENTRYP SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * params); /* 730 */
- void (GLAPIENTRYP GetQueryObjecti64v)(GLuint id, GLenum pname, GLint64 * params); /* 731 */
- void (GLAPIENTRYP GetQueryObjectui64v)(GLuint id, GLenum pname, GLuint64 * params); /* 732 */
- void (GLAPIENTRYP QueryCounter)(GLuint id, GLenum target); /* 733 */
- void (GLAPIENTRYP ColorP3ui)(GLenum type, GLuint color); /* 734 */
- void (GLAPIENTRYP ColorP3uiv)(GLenum type, const GLuint * color); /* 735 */
- void (GLAPIENTRYP ColorP4ui)(GLenum type, GLuint color); /* 736 */
- void (GLAPIENTRYP ColorP4uiv)(GLenum type, const GLuint * color); /* 737 */
- void (GLAPIENTRYP MultiTexCoordP1ui)(GLenum texture, GLenum type, GLuint coords); /* 738 */
- void (GLAPIENTRYP MultiTexCoordP1uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 739 */
- void (GLAPIENTRYP MultiTexCoordP2ui)(GLenum texture, GLenum type, GLuint coords); /* 740 */
- void (GLAPIENTRYP MultiTexCoordP2uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 741 */
- void (GLAPIENTRYP MultiTexCoordP3ui)(GLenum texture, GLenum type, GLuint coords); /* 742 */
- void (GLAPIENTRYP MultiTexCoordP3uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 743 */
- void (GLAPIENTRYP MultiTexCoordP4ui)(GLenum texture, GLenum type, GLuint coords); /* 744 */
- void (GLAPIENTRYP MultiTexCoordP4uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 745 */
- void (GLAPIENTRYP NormalP3ui)(GLenum type, GLuint coords); /* 746 */
- void (GLAPIENTRYP NormalP3uiv)(GLenum type, const GLuint * coords); /* 747 */
- void (GLAPIENTRYP SecondaryColorP3ui)(GLenum type, GLuint color); /* 748 */
- void (GLAPIENTRYP SecondaryColorP3uiv)(GLenum type, const GLuint * color); /* 749 */
- void (GLAPIENTRYP TexCoordP1ui)(GLenum type, GLuint coords); /* 750 */
- void (GLAPIENTRYP TexCoordP1uiv)(GLenum type, const GLuint * coords); /* 751 */
- void (GLAPIENTRYP TexCoordP2ui)(GLenum type, GLuint coords); /* 752 */
- void (GLAPIENTRYP TexCoordP2uiv)(GLenum type, const GLuint * coords); /* 753 */
- void (GLAPIENTRYP TexCoordP3ui)(GLenum type, GLuint coords); /* 754 */
- void (GLAPIENTRYP TexCoordP3uiv)(GLenum type, const GLuint * coords); /* 755 */
- void (GLAPIENTRYP TexCoordP4ui)(GLenum type, GLuint coords); /* 756 */
- void (GLAPIENTRYP TexCoordP4uiv)(GLenum type, const GLuint * coords); /* 757 */
- void (GLAPIENTRYP VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 758 */
- void (GLAPIENTRYP VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 759 */
- void (GLAPIENTRYP VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 760 */
- void (GLAPIENTRYP VertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 761 */
- void (GLAPIENTRYP VertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 762 */
- void (GLAPIENTRYP VertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 763 */
- void (GLAPIENTRYP VertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 764 */
- void (GLAPIENTRYP VertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 765 */
- void (GLAPIENTRYP VertexP2ui)(GLenum type, GLuint value); /* 766 */
- void (GLAPIENTRYP VertexP2uiv)(GLenum type, const GLuint * value); /* 767 */
- void (GLAPIENTRYP VertexP3ui)(GLenum type, GLuint value); /* 768 */
- void (GLAPIENTRYP VertexP3uiv)(GLenum type, const GLuint * value); /* 769 */
- void (GLAPIENTRYP VertexP4ui)(GLenum type, GLuint value); /* 770 */
- void (GLAPIENTRYP VertexP4uiv)(GLenum type, const GLuint * value); /* 771 */
- void (GLAPIENTRYP DrawArraysIndirect)(GLenum mode, const GLvoid * indirect); /* 772 */
- void (GLAPIENTRYP DrawElementsIndirect)(GLenum mode, GLenum type, const GLvoid * indirect); /* 773 */
- void (GLAPIENTRYP GetUniformdv)(GLuint program, GLint location, GLdouble * params); /* 774 */
- void (GLAPIENTRYP Uniform1d)(GLint location, GLdouble x); /* 775 */
- void (GLAPIENTRYP Uniform1dv)(GLint location, GLsizei count, const GLdouble * value); /* 776 */
- void (GLAPIENTRYP Uniform2d)(GLint location, GLdouble x, GLdouble y); /* 777 */
- void (GLAPIENTRYP Uniform2dv)(GLint location, GLsizei count, const GLdouble * value); /* 778 */
- void (GLAPIENTRYP Uniform3d)(GLint location, GLdouble x, GLdouble y, GLdouble z); /* 779 */
- void (GLAPIENTRYP Uniform3dv)(GLint location, GLsizei count, const GLdouble * value); /* 780 */
- void (GLAPIENTRYP Uniform4d)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 781 */
- void (GLAPIENTRYP Uniform4dv)(GLint location, GLsizei count, const GLdouble * value); /* 782 */
- void (GLAPIENTRYP UniformMatrix2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 783 */
- void (GLAPIENTRYP UniformMatrix2x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 784 */
- void (GLAPIENTRYP UniformMatrix2x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 785 */
- void (GLAPIENTRYP UniformMatrix3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 786 */
- void (GLAPIENTRYP UniformMatrix3x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 787 */
- void (GLAPIENTRYP UniformMatrix3x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 788 */
- void (GLAPIENTRYP UniformMatrix4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 789 */
- void (GLAPIENTRYP UniformMatrix4x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 790 */
- void (GLAPIENTRYP UniformMatrix4x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 791 */
- void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 792 */
- void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 793 */
- void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 794 */
- void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 795 */
- GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 796 */
- void (GLAPIENTRYP PauseTransformFeedback)(void); /* 797 */
- void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 798 */
- void (GLAPIENTRYP BeginQueryIndexed)(GLenum target, GLuint index, GLuint id); /* 799 */
- void (GLAPIENTRYP DrawTransformFeedbackStream)(GLenum mode, GLuint id, GLuint stream); /* 800 */
- void (GLAPIENTRYP EndQueryIndexed)(GLenum target, GLuint index); /* 801 */
- void (GLAPIENTRYP GetQueryIndexediv)(GLenum target, GLuint index, GLenum pname, GLint * params); /* 802 */
- void (GLAPIENTRYP ClearDepthf)(GLclampf depth); /* 803 */
- void (GLAPIENTRYP DepthRangef)(GLclampf zNear, GLclampf zFar); /* 804 */
- void (GLAPIENTRYP GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); /* 805 */
- void (GLAPIENTRYP ReleaseShaderCompiler)(void); /* 806 */
- void (GLAPIENTRYP ShaderBinary)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); /* 807 */
- void (GLAPIENTRYP GetProgramBinary)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, GLvoid * binary); /* 808 */
- void (GLAPIENTRYP ProgramBinary)(GLuint program, GLenum binaryFormat, const GLvoid * binary, GLsizei length); /* 809 */
- void (GLAPIENTRYP ProgramParameteri)(GLuint program, GLenum pname, GLint value); /* 810 */
- void (GLAPIENTRYP GetVertexAttribLdv)(GLuint index, GLenum pname, GLdouble * params); /* 811 */
- void (GLAPIENTRYP VertexAttribL1d)(GLuint index, GLdouble x); /* 812 */
- void (GLAPIENTRYP VertexAttribL1dv)(GLuint index, const GLdouble * v); /* 813 */
- void (GLAPIENTRYP VertexAttribL2d)(GLuint index, GLdouble x, GLdouble y); /* 814 */
- void (GLAPIENTRYP VertexAttribL2dv)(GLuint index, const GLdouble * v); /* 815 */
- void (GLAPIENTRYP VertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 816 */
- void (GLAPIENTRYP VertexAttribL3dv)(GLuint index, const GLdouble * v); /* 817 */
- void (GLAPIENTRYP VertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 818 */
- void (GLAPIENTRYP VertexAttribL4dv)(GLuint index, const GLdouble * v); /* 819 */
- void (GLAPIENTRYP VertexAttribLPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 820 */
- void (GLAPIENTRYP DepthRangeArrayv)(GLuint first, GLsizei count, const GLclampd * v); /* 821 */
- void (GLAPIENTRYP DepthRangeIndexed)(GLuint index, GLclampd n, GLclampd f); /* 822 */
- void (GLAPIENTRYP GetDoublei_v)(GLenum target, GLuint index, GLdouble * data); /* 823 */
- void (GLAPIENTRYP GetFloati_v)(GLenum target, GLuint index, GLfloat * data); /* 824 */
- void (GLAPIENTRYP ScissorArrayv)(GLuint first, GLsizei count, const int * v); /* 825 */
- void (GLAPIENTRYP ScissorIndexed)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); /* 826 */
- void (GLAPIENTRYP ScissorIndexedv)(GLuint index, const GLint * v); /* 827 */
- void (GLAPIENTRYP ViewportArrayv)(GLuint first, GLsizei count, const GLfloat * v); /* 828 */
- void (GLAPIENTRYP ViewportIndexedf)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); /* 829 */
- void (GLAPIENTRYP ViewportIndexedfv)(GLuint index, const GLfloat * v); /* 830 */
- GLenum (GLAPIENTRYP GetGraphicsResetStatusARB)(void); /* 831 */
- void (GLAPIENTRYP GetnColorTableARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * table); /* 832 */
- void (GLAPIENTRYP GetnCompressedTexImageARB)(GLenum target, GLint lod, GLsizei bufSize, GLvoid * img); /* 833 */
- void (GLAPIENTRYP GetnConvolutionFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * image); /* 834 */
- void (GLAPIENTRYP GetnHistogramARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 835 */
- void (GLAPIENTRYP GetnMapdvARB)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); /* 836 */
- void (GLAPIENTRYP GetnMapfvARB)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); /* 837 */
- void (GLAPIENTRYP GetnMapivARB)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); /* 838 */
- void (GLAPIENTRYP GetnMinmaxARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 839 */
- void (GLAPIENTRYP GetnPixelMapfvARB)(GLenum map, GLsizei bufSize, GLfloat * values); /* 840 */
- void (GLAPIENTRYP GetnPixelMapuivARB)(GLenum map, GLsizei bufSize, GLuint * values); /* 841 */
- void (GLAPIENTRYP GetnPixelMapusvARB)(GLenum map, GLsizei bufSize, GLushort * values); /* 842 */
- void (GLAPIENTRYP GetnPolygonStippleARB)(GLsizei bufSize, GLubyte * pattern); /* 843 */
- void (GLAPIENTRYP GetnSeparableFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span); /* 844 */
- void (GLAPIENTRYP GetnTexImageARB)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * img); /* 845 */
- void (GLAPIENTRYP GetnUniformdvARB)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); /* 846 */
- void (GLAPIENTRYP GetnUniformfvARB)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); /* 847 */
- void (GLAPIENTRYP GetnUniformivARB)(GLuint program, GLint location, GLsizei bufSize, GLint * params); /* 848 */
- void (GLAPIENTRYP GetnUniformuivARB)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); /* 849 */
- void (GLAPIENTRYP ReadnPixelsARB)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid * data); /* 850 */
- void (GLAPIENTRYP DrawArraysInstancedBaseInstance)(GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); /* 851 */
- void (GLAPIENTRYP DrawElementsInstancedBaseInstance)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLuint baseinstance); /* 852 */
- void (GLAPIENTRYP DrawElementsInstancedBaseVertexBaseInstance)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); /* 853 */
- void (GLAPIENTRYP DrawTransformFeedbackInstanced)(GLenum mode, GLuint id, GLsizei primcount); /* 854 */
- void (GLAPIENTRYP DrawTransformFeedbackStreamInstanced)(GLenum mode, GLuint id, GLuint stream, GLsizei primcount); /* 855 */
- void (GLAPIENTRYP GetInternalformativ)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); /* 856 */
- void (GLAPIENTRYP GetActiveAtomicCounterBufferiv)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); /* 857 */
- void (GLAPIENTRYP BindImageTexture)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); /* 858 */
- void (GLAPIENTRYP MemoryBarrier)(GLbitfield barriers); /* 859 */
- void (GLAPIENTRYP TexStorage1D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); /* 860 */
- void (GLAPIENTRYP TexStorage2D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); /* 861 */
- void (GLAPIENTRYP TexStorage3D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); /* 862 */
- void (GLAPIENTRYP TextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); /* 863 */
- void (GLAPIENTRYP TextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); /* 864 */
- void (GLAPIENTRYP TextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); /* 865 */
- void (GLAPIENTRYP ClearBufferData)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data); /* 866 */
- void (GLAPIENTRYP ClearBufferSubData)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data); /* 867 */
- void (GLAPIENTRYP DispatchCompute)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); /* 868 */
- void (GLAPIENTRYP DispatchComputeIndirect)(GLintptr indirect); /* 869 */
- void (GLAPIENTRYP CopyImageSubData)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); /* 870 */
- void (GLAPIENTRYP TextureView)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); /* 871 */
- void (GLAPIENTRYP BindVertexBuffer)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); /* 872 */
- void (GLAPIENTRYP VertexAttribBinding)(GLuint attribindex, GLuint bindingindex); /* 873 */
- void (GLAPIENTRYP VertexAttribFormat)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); /* 874 */
- void (GLAPIENTRYP VertexAttribIFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 875 */
- void (GLAPIENTRYP VertexAttribLFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 876 */
- void (GLAPIENTRYP VertexBindingDivisor)(GLuint attribindex, GLuint divisor); /* 877 */
- void (GLAPIENTRYP MultiDrawArraysIndirect)(GLenum mode, const GLvoid * indirect, GLsizei primcount, GLsizei stride); /* 878 */
- void (GLAPIENTRYP MultiDrawElementsIndirect)(GLenum mode, GLenum type, const GLvoid * indirect, GLsizei primcount, GLsizei stride); /* 879 */
- void (GLAPIENTRYP GetProgramInterfaceiv)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); /* 880 */
- GLuint (GLAPIENTRYP GetProgramResourceIndex)(GLuint program, GLenum programInterface, const GLchar * name); /* 881 */
- GLint (GLAPIENTRYP GetProgramResourceLocation)(GLuint program, GLenum programInterface, const GLchar * name); /* 882 */
- GLint (GLAPIENTRYP GetProgramResourceLocationIndex)(GLuint program, GLenum programInterface, const GLchar * name); /* 883 */
- void (GLAPIENTRYP GetProgramResourceName)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); /* 884 */
- void (GLAPIENTRYP GetProgramResourceiv)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); /* 885 */
- void (GLAPIENTRYP TexBufferRange)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 886 */
- void (GLAPIENTRYP TexStorage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); /* 887 */
- void (GLAPIENTRYP TexStorage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); /* 888 */
- void (GLAPIENTRYP BufferStorage)(GLenum target, GLsizeiptr size, const GLvoid * data, GLbitfield flags); /* 889 */
- void (GLAPIENTRYP ClearTexImage)(GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid * data); /* 890 */
- void (GLAPIENTRYP ClearTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * data); /* 891 */
- void (GLAPIENTRYP BindBuffersBase)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); /* 892 */
- void (GLAPIENTRYP BindBuffersRange)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); /* 893 */
- void (GLAPIENTRYP BindImageTextures)(GLuint first, GLsizei count, const GLuint * textures); /* 894 */
- void (GLAPIENTRYP BindSamplers)(GLuint first, GLsizei count, const GLuint * samplers); /* 895 */
- void (GLAPIENTRYP BindTextures)(GLuint first, GLsizei count, const GLuint * textures); /* 896 */
- void (GLAPIENTRYP BindVertexBuffers)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); /* 897 */
- void (GLAPIENTRYP ClipControl)(GLenum origin, GLenum depth); /* 898 */
- void (GLAPIENTRYP BindTextureUnit)(GLuint unit, GLuint texture); /* 899 */
- void (GLAPIENTRYP BlitNamedFramebuffer)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 900 */
- GLenum (GLAPIENTRYP CheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); /* 901 */
- void (GLAPIENTRYP ClearNamedBufferData)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data); /* 902 */
- void (GLAPIENTRYP ClearNamedBufferSubData)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data); /* 903 */
- void (GLAPIENTRYP ClearNamedFramebufferfi)(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil); /* 904 */
- void (GLAPIENTRYP ClearNamedFramebufferfv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); /* 905 */
- void (GLAPIENTRYP ClearNamedFramebufferiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); /* 906 */
- void (GLAPIENTRYP ClearNamedFramebufferuiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); /* 907 */
- void (GLAPIENTRYP CompressedTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 908 */
- void (GLAPIENTRYP CompressedTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 909 */
- void (GLAPIENTRYP CompressedTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 910 */
- void (GLAPIENTRYP CopyNamedBufferSubData)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 911 */
- void (GLAPIENTRYP CopyTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); /* 912 */
- void (GLAPIENTRYP CopyTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 913 */
- void (GLAPIENTRYP CopyTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 914 */
- void (GLAPIENTRYP CreateBuffers)(GLsizei n, GLuint * buffers); /* 915 */
- void (GLAPIENTRYP CreateFramebuffers)(GLsizei n, GLuint * framebuffers); /* 916 */
- void (GLAPIENTRYP CreateProgramPipelines)(GLsizei n, GLuint * pipelines); /* 917 */
- void (GLAPIENTRYP CreateQueries)(GLenum target, GLsizei n, GLuint * ids); /* 918 */
- void (GLAPIENTRYP CreateRenderbuffers)(GLsizei n, GLuint * renderbuffers); /* 919 */
- void (GLAPIENTRYP CreateSamplers)(GLsizei n, GLuint * samplers); /* 920 */
- void (GLAPIENTRYP CreateTextures)(GLenum target, GLsizei n, GLuint * textures); /* 921 */
- void (GLAPIENTRYP CreateTransformFeedbacks)(GLsizei n, GLuint * ids); /* 922 */
- void (GLAPIENTRYP CreateVertexArrays)(GLsizei n, GLuint * arrays); /* 923 */
- void (GLAPIENTRYP DisableVertexArrayAttrib)(GLuint vaobj, GLuint index); /* 924 */
- void (GLAPIENTRYP EnableVertexArrayAttrib)(GLuint vaobj, GLuint index); /* 925 */
- void (GLAPIENTRYP FlushMappedNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length); /* 926 */
- void (GLAPIENTRYP GenerateTextureMipmap)(GLuint texture); /* 927 */
- void (GLAPIENTRYP GetCompressedTextureImage)(GLuint texture, GLint level, GLsizei bufSize, GLvoid * pixels); /* 928 */
- void (GLAPIENTRYP GetNamedBufferParameteri64v)(GLuint buffer, GLenum pname, GLint64 * params); /* 929 */
- void (GLAPIENTRYP GetNamedBufferParameteriv)(GLuint buffer, GLenum pname, GLint * params); /* 930 */
- void (GLAPIENTRYP GetNamedBufferPointerv)(GLuint buffer, GLenum pname, GLvoid ** params); /* 931 */
- void (GLAPIENTRYP GetNamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data); /* 932 */
- void (GLAPIENTRYP GetNamedFramebufferAttachmentParameteriv)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); /* 933 */
- void (GLAPIENTRYP GetNamedFramebufferParameteriv)(GLuint framebuffer, GLenum pname, GLint * param); /* 934 */
- void (GLAPIENTRYP GetNamedRenderbufferParameteriv)(GLuint renderbuffer, GLenum pname, GLint * params); /* 935 */
- void (GLAPIENTRYP GetQueryBufferObjecti64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 936 */
- void (GLAPIENTRYP GetQueryBufferObjectiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 937 */
- void (GLAPIENTRYP GetQueryBufferObjectui64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 938 */
- void (GLAPIENTRYP GetQueryBufferObjectuiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 939 */
- void (GLAPIENTRYP GetTextureImage)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * pixels); /* 940 */
- void (GLAPIENTRYP GetTextureLevelParameterfv)(GLuint texture, GLint level, GLenum pname, GLfloat * params); /* 941 */
- void (GLAPIENTRYP GetTextureLevelParameteriv)(GLuint texture, GLint level, GLenum pname, GLint * params); /* 942 */
- void (GLAPIENTRYP GetTextureParameterIiv)(GLuint texture, GLenum pname, GLint * params); /* 943 */
- void (GLAPIENTRYP GetTextureParameterIuiv)(GLuint texture, GLenum pname, GLuint * params); /* 944 */
- void (GLAPIENTRYP GetTextureParameterfv)(GLuint texture, GLenum pname, GLfloat * params); /* 945 */
- void (GLAPIENTRYP GetTextureParameteriv)(GLuint texture, GLenum pname, GLint * params); /* 946 */
- void (GLAPIENTRYP GetTransformFeedbacki64_v)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); /* 947 */
- void (GLAPIENTRYP GetTransformFeedbacki_v)(GLuint xfb, GLenum pname, GLuint index, GLint * param); /* 948 */
- void (GLAPIENTRYP GetTransformFeedbackiv)(GLuint xfb, GLenum pname, GLint * param); /* 949 */
- void (GLAPIENTRYP GetVertexArrayIndexed64iv)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); /* 950 */
- void (GLAPIENTRYP GetVertexArrayIndexediv)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); /* 951 */
- void (GLAPIENTRYP GetVertexArrayiv)(GLuint vaobj, GLenum pname, GLint * param); /* 952 */
- void (GLAPIENTRYP InvalidateNamedFramebufferData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); /* 953 */
- void (GLAPIENTRYP InvalidateNamedFramebufferSubData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); /* 954 */
- GLvoid * (GLAPIENTRYP MapNamedBuffer)(GLuint buffer, GLenum access); /* 955 */
- GLvoid * (GLAPIENTRYP MapNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 956 */
- void (GLAPIENTRYP NamedBufferData)(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage); /* 957 */
- void (GLAPIENTRYP NamedBufferStorage)(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLbitfield flags); /* 958 */
- void (GLAPIENTRYP NamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data); /* 959 */
- void (GLAPIENTRYP NamedFramebufferDrawBuffer)(GLuint framebuffer, GLenum buf); /* 960 */
- void (GLAPIENTRYP NamedFramebufferDrawBuffers)(GLuint framebuffer, GLsizei n, const GLenum * bufs); /* 961 */
- void (GLAPIENTRYP NamedFramebufferParameteri)(GLuint framebuffer, GLenum pname, GLint param); /* 962 */
- void (GLAPIENTRYP NamedFramebufferReadBuffer)(GLuint framebuffer, GLenum buf); /* 963 */
- void (GLAPIENTRYP NamedFramebufferRenderbuffer)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 964 */
- void (GLAPIENTRYP NamedFramebufferTexture)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); /* 965 */
- void (GLAPIENTRYP NamedFramebufferTextureLayer)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 966 */
- void (GLAPIENTRYP NamedRenderbufferStorage)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); /* 967 */
- void (GLAPIENTRYP NamedRenderbufferStorageMultisample)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); /* 968 */
- void (GLAPIENTRYP TextureBuffer)(GLuint texture, GLenum internalformat, GLuint buffer); /* 969 */
- void (GLAPIENTRYP TextureBufferRange)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 970 */
- void (GLAPIENTRYP TextureParameterIiv)(GLuint texture, GLenum pname, const GLint * params); /* 971 */
- void (GLAPIENTRYP TextureParameterIuiv)(GLuint texture, GLenum pname, const GLuint * params); /* 972 */
- void (GLAPIENTRYP TextureParameterf)(GLuint texture, GLenum pname, GLfloat param); /* 973 */
- void (GLAPIENTRYP TextureParameterfv)(GLuint texture, GLenum pname, const GLfloat * param); /* 974 */
- void (GLAPIENTRYP TextureParameteri)(GLuint texture, GLenum pname, GLint param); /* 975 */
- void (GLAPIENTRYP TextureParameteriv)(GLuint texture, GLenum pname, const GLint * param); /* 976 */
- void (GLAPIENTRYP TextureStorage1D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); /* 977 */
- void (GLAPIENTRYP TextureStorage2D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); /* 978 */
- void (GLAPIENTRYP TextureStorage2DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); /* 979 */
- void (GLAPIENTRYP TextureStorage3D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); /* 980 */
- void (GLAPIENTRYP TextureStorage3DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); /* 981 */
- void (GLAPIENTRYP TextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); /* 982 */
- void (GLAPIENTRYP TextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); /* 983 */
- void (GLAPIENTRYP TextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); /* 984 */
- void (GLAPIENTRYP TransformFeedbackBufferBase)(GLuint xfb, GLuint index, GLuint buffer); /* 985 */
- void (GLAPIENTRYP TransformFeedbackBufferRange)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 986 */
- GLboolean (GLAPIENTRYP UnmapNamedBuffer)(GLuint buffer); /* 987 */
- void (GLAPIENTRYP VertexArrayAttribBinding)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); /* 988 */
- void (GLAPIENTRYP VertexArrayAttribFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); /* 989 */
- void (GLAPIENTRYP VertexArrayAttribIFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 990 */
- void (GLAPIENTRYP VertexArrayAttribLFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 991 */
- void (GLAPIENTRYP VertexArrayBindingDivisor)(GLuint vaobj, GLuint bindingindex, GLuint divisor); /* 992 */
- void (GLAPIENTRYP VertexArrayElementBuffer)(GLuint vaobj, GLuint buffer); /* 993 */
- void (GLAPIENTRYP VertexArrayVertexBuffer)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); /* 994 */
- void (GLAPIENTRYP VertexArrayVertexBuffers)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); /* 995 */
- void (GLAPIENTRYP InvalidateBufferData)(GLuint buffer); /* 996 */
- void (GLAPIENTRYP InvalidateBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr length); /* 997 */
- void (GLAPIENTRYP InvalidateFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments); /* 998 */
- void (GLAPIENTRYP InvalidateSubFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); /* 999 */
- void (GLAPIENTRYP InvalidateTexImage)(GLuint texture, GLint level); /* 1000 */
- void (GLAPIENTRYP InvalidateTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); /* 1001 */
- void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 1002 */
- void (GLAPIENTRYP DrawTexfOES)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); /* 1003 */
- void (GLAPIENTRYP DrawTexfvOES)(const GLfloat * coords); /* 1004 */
- void (GLAPIENTRYP DrawTexiOES)(GLint x, GLint y, GLint z, GLint width, GLint height); /* 1005 */
- void (GLAPIENTRYP DrawTexivOES)(const GLint * coords); /* 1006 */
- void (GLAPIENTRYP DrawTexsOES)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); /* 1007 */
- void (GLAPIENTRYP DrawTexsvOES)(const GLshort * coords); /* 1008 */
- void (GLAPIENTRYP DrawTexxOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); /* 1009 */
- void (GLAPIENTRYP DrawTexxvOES)(const GLfixed * coords); /* 1010 */
- void (GLAPIENTRYP PointSizePointerOES)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 1011 */
- GLbitfield (GLAPIENTRYP QueryMatrixxOES)(GLfixed * mantissa, GLint * exponent); /* 1012 */
- void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 1013 */
- void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 1014 */
- void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1015 */
- void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 1016 */
- void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1017 */
- void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1018 */
- void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1019 */
- void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1020 */
- void (GLAPIENTRYP DiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum * attachments); /* 1021 */
- void (GLAPIENTRYP ActiveShaderProgram)(GLuint pipeline, GLuint program); /* 1022 */
- void (GLAPIENTRYP BindProgramPipeline)(GLuint pipeline); /* 1023 */
- GLuint (GLAPIENTRYP CreateShaderProgramv)(GLenum type, GLsizei count, const GLchar * const * strings); /* 1024 */
- void (GLAPIENTRYP DeleteProgramPipelines)(GLsizei n, const GLuint * pipelines); /* 1025 */
- void (GLAPIENTRYP GenProgramPipelines)(GLsizei n, GLuint * pipelines); /* 1026 */
- void (GLAPIENTRYP GetProgramPipelineInfoLog)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); /* 1027 */
- void (GLAPIENTRYP GetProgramPipelineiv)(GLuint pipeline, GLenum pname, GLint * params); /* 1028 */
- GLboolean (GLAPIENTRYP IsProgramPipeline)(GLuint pipeline); /* 1029 */
- void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 1030 */
- void (GLAPIENTRYP ProgramUniform1d)(GLuint program, GLint location, GLdouble x); /* 1031 */
- void (GLAPIENTRYP ProgramUniform1dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1032 */
- void (GLAPIENTRYP ProgramUniform1f)(GLuint program, GLint location, GLfloat x); /* 1033 */
- void (GLAPIENTRYP ProgramUniform1fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1034 */
- void (GLAPIENTRYP ProgramUniform1i)(GLuint program, GLint location, GLint x); /* 1035 */
- void (GLAPIENTRYP ProgramUniform1iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1036 */
- void (GLAPIENTRYP ProgramUniform1ui)(GLuint program, GLint location, GLuint x); /* 1037 */
- void (GLAPIENTRYP ProgramUniform1uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1038 */
- void (GLAPIENTRYP ProgramUniform2d)(GLuint program, GLint location, GLdouble x, GLdouble y); /* 1039 */
- void (GLAPIENTRYP ProgramUniform2dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1040 */
- void (GLAPIENTRYP ProgramUniform2f)(GLuint program, GLint location, GLfloat x, GLfloat y); /* 1041 */
- void (GLAPIENTRYP ProgramUniform2fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1042 */
- void (GLAPIENTRYP ProgramUniform2i)(GLuint program, GLint location, GLint x, GLint y); /* 1043 */
- void (GLAPIENTRYP ProgramUniform2iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1044 */
- void (GLAPIENTRYP ProgramUniform2ui)(GLuint program, GLint location, GLuint x, GLuint y); /* 1045 */
- void (GLAPIENTRYP ProgramUniform2uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1046 */
- void (GLAPIENTRYP ProgramUniform3d)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); /* 1047 */
- void (GLAPIENTRYP ProgramUniform3dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1048 */
- void (GLAPIENTRYP ProgramUniform3f)(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); /* 1049 */
- void (GLAPIENTRYP ProgramUniform3fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1050 */
- void (GLAPIENTRYP ProgramUniform3i)(GLuint program, GLint location, GLint x, GLint y, GLint z); /* 1051 */
- void (GLAPIENTRYP ProgramUniform3iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1052 */
- void (GLAPIENTRYP ProgramUniform3ui)(GLuint program, GLint location, GLuint x, GLuint y, GLuint z); /* 1053 */
- void (GLAPIENTRYP ProgramUniform3uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1054 */
- void (GLAPIENTRYP ProgramUniform4d)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1055 */
- void (GLAPIENTRYP ProgramUniform4dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1056 */
- void (GLAPIENTRYP ProgramUniform4f)(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1057 */
- void (GLAPIENTRYP ProgramUniform4fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1058 */
- void (GLAPIENTRYP ProgramUniform4i)(GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); /* 1059 */
- void (GLAPIENTRYP ProgramUniform4iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1060 */
- void (GLAPIENTRYP ProgramUniform4ui)(GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 1061 */
- void (GLAPIENTRYP ProgramUniform4uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1062 */
- void (GLAPIENTRYP ProgramUniformMatrix2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1063 */
- void (GLAPIENTRYP ProgramUniformMatrix2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1064 */
- void (GLAPIENTRYP ProgramUniformMatrix2x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1065 */
- void (GLAPIENTRYP ProgramUniformMatrix2x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1066 */
- void (GLAPIENTRYP ProgramUniformMatrix2x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1067 */
- void (GLAPIENTRYP ProgramUniformMatrix2x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1068 */
- void (GLAPIENTRYP ProgramUniformMatrix3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1069 */
- void (GLAPIENTRYP ProgramUniformMatrix3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1070 */
- void (GLAPIENTRYP ProgramUniformMatrix3x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1071 */
- void (GLAPIENTRYP ProgramUniformMatrix3x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1072 */
- void (GLAPIENTRYP ProgramUniformMatrix3x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1073 */
- void (GLAPIENTRYP ProgramUniformMatrix3x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1074 */
- void (GLAPIENTRYP ProgramUniformMatrix4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1075 */
- void (GLAPIENTRYP ProgramUniformMatrix4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1076 */
- void (GLAPIENTRYP ProgramUniformMatrix4x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1077 */
- void (GLAPIENTRYP ProgramUniformMatrix4x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1078 */
- void (GLAPIENTRYP ProgramUniformMatrix4x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1079 */
- void (GLAPIENTRYP ProgramUniformMatrix4x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1080 */
- void (GLAPIENTRYP UnlockArraysEXT)(void); /* 1081 */
- void (GLAPIENTRYP UseProgramStages)(GLuint pipeline, GLbitfield stages, GLuint program); /* 1082 */
- void (GLAPIENTRYP ValidateProgramPipeline)(GLuint pipeline); /* 1083 */
- void (GLAPIENTRYP DebugMessageCallback)(GLDEBUGPROC callback, const GLvoid * userParam); /* 1084 */
- void (GLAPIENTRYP DebugMessageControl)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); /* 1085 */
- void (GLAPIENTRYP DebugMessageInsert)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); /* 1086 */
- GLuint (GLAPIENTRYP GetDebugMessageLog)(GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); /* 1087 */
- void (GLAPIENTRYP GetObjectLabel)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); /* 1088 */
- void (GLAPIENTRYP GetObjectPtrLabel)(const GLvoid * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); /* 1089 */
- void (GLAPIENTRYP ObjectLabel)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); /* 1090 */
- void (GLAPIENTRYP ObjectPtrLabel)(const GLvoid * ptr, GLsizei length, const GLchar * label); /* 1091 */
- void (GLAPIENTRYP PopDebugGroup)(void); /* 1092 */
- void (GLAPIENTRYP PushDebugGroup)(GLenum source, GLuint id, GLsizei length, const GLchar * message); /* 1093 */
- void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 1094 */
- void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 1095 */
- void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount); /* 1096 */
- void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 1097 */
- void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 1098 */
- void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 1099 */
- void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1100 */
- void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 1101 */
- void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1102 */
- void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 1103 */
- void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 1104 */
- void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 1105 */
- void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 1106 */
- void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 1107 */
- void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 1108 */
- void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 1109 */
- GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 1110 */
- void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 1111 */
- void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 1112 */
- void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 1113 */
- void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 1114 */
- void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 1115 */
- void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 1116 */
- void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 1117 */
- void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 1118 */
- void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 1119 */
- void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 1120 */
- void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 1121 */
- void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 1122 */
- void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 1123 */
- void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 1124 */
- void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 1125 */
- void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 1126 */
- void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 1127 */
- void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 1128 */
- void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 1129 */
- void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 1130 */
- void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 1131 */
- void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 1132 */
- void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 1133 */
- void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 1134 */
- void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 1135 */
- void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 1136 */
- void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 1137 */
- void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 1138 */
- void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 1139 */
- void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 1140 */
- void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 1141 */
- void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 1142 */
- void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1143 */
- void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 1144 */
- void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1145 */
- void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 1146 */
- void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 1147 */
- void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 1148 */
- void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 1149 */
- void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 1150 */
- void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 1151 */
- void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1152 */
- void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1153 */
- void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1154 */
- void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1155 */
- void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1156 */
- void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1157 */
- void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1158 */
- void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1159 */
- void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1160 */
- void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1161 */
- void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1162 */
- void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1163 */
- void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 1164 */
- void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 1165 */
- void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 1166 */
- void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 1167 */
- void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 1168 */
- void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 1169 */
- void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 1170 */
- void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 1171 */
- void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 1172 */
- void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 1173 */
- void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 1174 */
- void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 1175 */
- void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 1176 */
- void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 1177 */
- void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 1178 */
- GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 1179 */
- void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 1180 */
- void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 1181 */
- void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 1182 */
- void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 1183 */
- void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 1184 */
- void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 1185 */
- void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 1186 */
- void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 1187 */
- void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1188 */
- void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 1189 */
- void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1190 */
- void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 1191 */
- void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 1192 */
- void (GLAPIENTRYP GetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed * params); /* 1193 */
- void (GLAPIENTRYP TexGenxOES)(GLenum coord, GLenum pname, GLint param); /* 1194 */
- void (GLAPIENTRYP TexGenxvOES)(GLenum coord, GLenum pname, const GLfixed * params); /* 1195 */
- void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 1196 */
- void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 1197 */
- void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 1198 */
- void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 1199 */
- void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 1200 */
- void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 1201 */
- void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 1202 */
- void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 1203 */
- void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 1204 */
- void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 1205 */
- void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 1206 */
- void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 1207 */
- void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 1208 */
- void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 1209 */
- void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 1210 */
- void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 1211 */
- void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 1212 */
- void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 1213 */
- void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 1214 */
- void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 1215 */
- void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 1216 */
- void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 1217 */
- void (GLAPIENTRYP BeginPerfMonitorAMD)(GLuint monitor); /* 1218 */
- void (GLAPIENTRYP DeletePerfMonitorsAMD)(GLsizei n, GLuint * monitors); /* 1219 */
- void (GLAPIENTRYP EndPerfMonitorAMD)(GLuint monitor); /* 1220 */
- void (GLAPIENTRYP GenPerfMonitorsAMD)(GLsizei n, GLuint * monitors); /* 1221 */
- void (GLAPIENTRYP GetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); /* 1222 */
- void (GLAPIENTRYP GetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, GLvoid * data); /* 1223 */
- void (GLAPIENTRYP GetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); /* 1224 */
- void (GLAPIENTRYP GetPerfMonitorCountersAMD)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei countersSize, GLuint * counters); /* 1225 */
- void (GLAPIENTRYP GetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); /* 1226 */
- void (GLAPIENTRYP GetPerfMonitorGroupsAMD)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); /* 1227 */
- void (GLAPIENTRYP SelectPerfMonitorCountersAMD)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); /* 1228 */
- void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 1229 */
- GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 1230 */
- GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 1231 */
- void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 1232 */
- GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 1233 */
- void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 1234 */
- void (GLAPIENTRYP TextureBarrierNV)(void); /* 1235 */
- void (GLAPIENTRYP VDPAUFiniNV)(void); /* 1236 */
- void (GLAPIENTRYP VDPAUGetSurfaceivNV)(GLintptr surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 1237 */
- void (GLAPIENTRYP VDPAUInitNV)(const GLvoid * vdpDevice, const GLvoid * getProcAddress); /* 1238 */
- GLboolean (GLAPIENTRYP VDPAUIsSurfaceNV)(GLintptr surface); /* 1239 */
- void (GLAPIENTRYP VDPAUMapSurfacesNV)(GLsizei numSurfaces, const GLintptr * surfaces); /* 1240 */
- GLintptr (GLAPIENTRYP VDPAURegisterOutputSurfaceNV)(const GLvoid * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); /* 1241 */
- GLintptr (GLAPIENTRYP VDPAURegisterVideoSurfaceNV)(const GLvoid * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); /* 1242 */
- void (GLAPIENTRYP VDPAUSurfaceAccessNV)(GLintptr surface, GLenum access); /* 1243 */
- void (GLAPIENTRYP VDPAUUnmapSurfacesNV)(GLsizei numSurfaces, const GLintptr * surfaces); /* 1244 */
- void (GLAPIENTRYP VDPAUUnregisterSurfaceNV)(GLintptr surface); /* 1245 */
- void (GLAPIENTRYP BeginPerfQueryINTEL)(GLuint queryHandle); /* 1246 */
- void (GLAPIENTRYP CreatePerfQueryINTEL)(GLuint queryId, GLuint * queryHandle); /* 1247 */
- void (GLAPIENTRYP DeletePerfQueryINTEL)(GLuint queryHandle); /* 1248 */
- void (GLAPIENTRYP EndPerfQueryINTEL)(GLuint queryHandle); /* 1249 */
- void (GLAPIENTRYP GetFirstPerfQueryIdINTEL)(GLuint * queryId); /* 1250 */
- void (GLAPIENTRYP GetNextPerfQueryIdINTEL)(GLuint queryId, GLuint * nextQueryId); /* 1251 */
- void (GLAPIENTRYP GetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); /* 1252 */
- void (GLAPIENTRYP GetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten); /* 1253 */
- void (GLAPIENTRYP GetPerfQueryIdByNameINTEL)(GLchar * queryName, GLuint * queryId); /* 1254 */
- void (GLAPIENTRYP GetPerfQueryInfoINTEL)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); /* 1255 */
- void (GLAPIENTRYP PolygonOffsetClampEXT)(GLfloat factor, GLfloat units, GLfloat clamp); /* 1256 */
- void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 1257 */
- void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 1258 */
- void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 1259 */
- void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 1260 */
- void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 1261 */
- void (GLAPIENTRYP AlphaFuncx)(GLenum func, GLclampx ref); /* 1262 */
- void (GLAPIENTRYP ClearColorx)(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); /* 1263 */
- void (GLAPIENTRYP ClearDepthx)(GLclampx depth); /* 1264 */
- void (GLAPIENTRYP Color4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); /* 1265 */
- void (GLAPIENTRYP DepthRangex)(GLclampx zNear, GLclampx zFar); /* 1266 */
- void (GLAPIENTRYP Fogx)(GLenum pname, GLfixed param); /* 1267 */
- void (GLAPIENTRYP Fogxv)(GLenum pname, const GLfixed * params); /* 1268 */
- void (GLAPIENTRYP Frustumf)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); /* 1269 */
- void (GLAPIENTRYP Frustumx)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); /* 1270 */
- void (GLAPIENTRYP LightModelx)(GLenum pname, GLfixed param); /* 1271 */
- void (GLAPIENTRYP LightModelxv)(GLenum pname, const GLfixed * params); /* 1272 */
- void (GLAPIENTRYP Lightx)(GLenum light, GLenum pname, GLfixed param); /* 1273 */
- void (GLAPIENTRYP Lightxv)(GLenum light, GLenum pname, const GLfixed * params); /* 1274 */
- void (GLAPIENTRYP LineWidthx)(GLfixed width); /* 1275 */
- void (GLAPIENTRYP LoadMatrixx)(const GLfixed * m); /* 1276 */
- void (GLAPIENTRYP Materialx)(GLenum face, GLenum pname, GLfixed param); /* 1277 */
- void (GLAPIENTRYP Materialxv)(GLenum face, GLenum pname, const GLfixed * params); /* 1278 */
- void (GLAPIENTRYP MultMatrixx)(const GLfixed * m); /* 1279 */
- void (GLAPIENTRYP MultiTexCoord4x)(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); /* 1280 */
- void (GLAPIENTRYP Normal3x)(GLfixed nx, GLfixed ny, GLfixed nz); /* 1281 */
- void (GLAPIENTRYP Orthof)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); /* 1282 */
- void (GLAPIENTRYP Orthox)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); /* 1283 */
- void (GLAPIENTRYP PointSizex)(GLfixed size); /* 1284 */
- void (GLAPIENTRYP PolygonOffsetx)(GLfixed factor, GLfixed units); /* 1285 */
- void (GLAPIENTRYP Rotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); /* 1286 */
- void (GLAPIENTRYP SampleCoveragex)(GLclampx value, GLboolean invert); /* 1287 */
- void (GLAPIENTRYP Scalex)(GLfixed x, GLfixed y, GLfixed z); /* 1288 */
- void (GLAPIENTRYP TexEnvx)(GLenum target, GLenum pname, GLfixed param); /* 1289 */
- void (GLAPIENTRYP TexEnvxv)(GLenum target, GLenum pname, const GLfixed * params); /* 1290 */
- void (GLAPIENTRYP TexParameterx)(GLenum target, GLenum pname, GLfixed param); /* 1291 */
- void (GLAPIENTRYP Translatex)(GLfixed x, GLfixed y, GLfixed z); /* 1292 */
- void (GLAPIENTRYP ClipPlanef)(GLenum plane, const GLfloat * equation); /* 1293 */
- void (GLAPIENTRYP ClipPlanex)(GLenum plane, const GLfixed * equation); /* 1294 */
- void (GLAPIENTRYP GetClipPlanef)(GLenum plane, GLfloat * equation); /* 1295 */
- void (GLAPIENTRYP GetClipPlanex)(GLenum plane, GLfixed * equation); /* 1296 */
- void (GLAPIENTRYP GetFixedv)(GLenum pname, GLfixed * params); /* 1297 */
- void (GLAPIENTRYP GetLightxv)(GLenum light, GLenum pname, GLfixed * params); /* 1298 */
- void (GLAPIENTRYP GetMaterialxv)(GLenum face, GLenum pname, GLfixed * params); /* 1299 */
- void (GLAPIENTRYP GetTexEnvxv)(GLenum target, GLenum pname, GLfixed * params); /* 1300 */
- void (GLAPIENTRYP GetTexParameterxv)(GLenum target, GLenum pname, GLfixed * params); /* 1301 */
- void (GLAPIENTRYP PointParameterx)(GLenum pname, GLfixed param); /* 1302 */
- void (GLAPIENTRYP PointParameterxv)(GLenum pname, const GLfixed * params); /* 1303 */
- void (GLAPIENTRYP TexParameterxv)(GLenum target, GLenum pname, const GLfixed * params); /* 1304 */
+ void (GLAPIENTRYP FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); /* 680 */
+ GLvoid * (GLAPIENTRYP MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 681 */
+ void (GLAPIENTRYP BindVertexArray)(GLuint array); /* 682 */
+ void (GLAPIENTRYP DeleteVertexArrays)(GLsizei n, const GLuint * arrays); /* 683 */
+ void (GLAPIENTRYP GenVertexArrays)(GLsizei n, GLuint * arrays); /* 684 */
+ GLboolean (GLAPIENTRYP IsVertexArray)(GLuint array); /* 685 */
+ void (GLAPIENTRYP GetActiveUniformBlockName)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); /* 686 */
+ void (GLAPIENTRYP GetActiveUniformBlockiv)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); /* 687 */
+ void (GLAPIENTRYP GetActiveUniformName)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); /* 688 */
+ void (GLAPIENTRYP GetActiveUniformsiv)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); /* 689 */
+ GLuint (GLAPIENTRYP GetUniformBlockIndex)(GLuint program, const GLchar * uniformBlockName); /* 690 */
+ void (GLAPIENTRYP GetUniformIndices)(GLuint program, GLsizei uniformCount, const GLchar * const * uniformNames, GLuint * uniformIndices); /* 691 */
+ void (GLAPIENTRYP UniformBlockBinding)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); /* 692 */
+ void (GLAPIENTRYP CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 693 */
+ GLenum (GLAPIENTRYP ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 694 */
+ void (GLAPIENTRYP DeleteSync)(GLsync sync); /* 695 */
+ GLsync (GLAPIENTRYP FenceSync)(GLenum condition, GLbitfield flags); /* 696 */
+ void (GLAPIENTRYP GetInteger64v)(GLenum pname, GLint64 * params); /* 697 */
+ void (GLAPIENTRYP GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 698 */
+ GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 699 */
+ void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 700 */
+ void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 701 */
+ void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLint basevertex); /* 702 */
+ void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 703 */
+ void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, const GLint * basevertex); /* 704 */
+ void (GLAPIENTRYP ProvokingVertex)(GLenum mode); /* 705 */
+ void (GLAPIENTRYP GetMultisamplefv)(GLenum pname, GLuint index, GLfloat * val); /* 706 */
+ void (GLAPIENTRYP SampleMaski)(GLuint index, GLbitfield mask); /* 707 */
+ void (GLAPIENTRYP TexImage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); /* 708 */
+ void (GLAPIENTRYP TexImage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); /* 709 */
+ void (GLAPIENTRYP BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA); /* 710 */
+ void (GLAPIENTRYP BlendEquationiARB)(GLuint buf, GLenum mode); /* 711 */
+ void (GLAPIENTRYP BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA); /* 712 */
+ void (GLAPIENTRYP BlendFunciARB)(GLuint buf, GLenum src, GLenum dst); /* 713 */
+ void (GLAPIENTRYP BindFragDataLocationIndexed)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); /* 714 */
+ GLint (GLAPIENTRYP GetFragDataIndex)(GLuint program, const GLchar * name); /* 715 */
+ void (GLAPIENTRYP BindSampler)(GLuint unit, GLuint sampler); /* 716 */
+ void (GLAPIENTRYP DeleteSamplers)(GLsizei count, const GLuint * samplers); /* 717 */
+ void (GLAPIENTRYP GenSamplers)(GLsizei count, GLuint * samplers); /* 718 */
+ void (GLAPIENTRYP GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); /* 719 */
+ void (GLAPIENTRYP GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); /* 720 */
+ void (GLAPIENTRYP GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); /* 721 */
+ void (GLAPIENTRYP GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); /* 722 */
+ GLboolean (GLAPIENTRYP IsSampler)(GLuint sampler); /* 723 */
+ void (GLAPIENTRYP SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * params); /* 724 */
+ void (GLAPIENTRYP SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * params); /* 725 */
+ void (GLAPIENTRYP SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); /* 726 */
+ void (GLAPIENTRYP SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * params); /* 727 */
+ void (GLAPIENTRYP SamplerParameteri)(GLuint sampler, GLenum pname, GLint param); /* 728 */
+ void (GLAPIENTRYP SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * params); /* 729 */
+ void (GLAPIENTRYP GetQueryObjecti64v)(GLuint id, GLenum pname, GLint64 * params); /* 730 */
+ void (GLAPIENTRYP GetQueryObjectui64v)(GLuint id, GLenum pname, GLuint64 * params); /* 731 */
+ void (GLAPIENTRYP QueryCounter)(GLuint id, GLenum target); /* 732 */
+ void (GLAPIENTRYP ColorP3ui)(GLenum type, GLuint color); /* 733 */
+ void (GLAPIENTRYP ColorP3uiv)(GLenum type, const GLuint * color); /* 734 */
+ void (GLAPIENTRYP ColorP4ui)(GLenum type, GLuint color); /* 735 */
+ void (GLAPIENTRYP ColorP4uiv)(GLenum type, const GLuint * color); /* 736 */
+ void (GLAPIENTRYP MultiTexCoordP1ui)(GLenum texture, GLenum type, GLuint coords); /* 737 */
+ void (GLAPIENTRYP MultiTexCoordP1uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 738 */
+ void (GLAPIENTRYP MultiTexCoordP2ui)(GLenum texture, GLenum type, GLuint coords); /* 739 */
+ void (GLAPIENTRYP MultiTexCoordP2uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 740 */
+ void (GLAPIENTRYP MultiTexCoordP3ui)(GLenum texture, GLenum type, GLuint coords); /* 741 */
+ void (GLAPIENTRYP MultiTexCoordP3uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 742 */
+ void (GLAPIENTRYP MultiTexCoordP4ui)(GLenum texture, GLenum type, GLuint coords); /* 743 */
+ void (GLAPIENTRYP MultiTexCoordP4uiv)(GLenum texture, GLenum type, const GLuint * coords); /* 744 */
+ void (GLAPIENTRYP NormalP3ui)(GLenum type, GLuint coords); /* 745 */
+ void (GLAPIENTRYP NormalP3uiv)(GLenum type, const GLuint * coords); /* 746 */
+ void (GLAPIENTRYP SecondaryColorP3ui)(GLenum type, GLuint color); /* 747 */
+ void (GLAPIENTRYP SecondaryColorP3uiv)(GLenum type, const GLuint * color); /* 748 */
+ void (GLAPIENTRYP TexCoordP1ui)(GLenum type, GLuint coords); /* 749 */
+ void (GLAPIENTRYP TexCoordP1uiv)(GLenum type, const GLuint * coords); /* 750 */
+ void (GLAPIENTRYP TexCoordP2ui)(GLenum type, GLuint coords); /* 751 */
+ void (GLAPIENTRYP TexCoordP2uiv)(GLenum type, const GLuint * coords); /* 752 */
+ void (GLAPIENTRYP TexCoordP3ui)(GLenum type, GLuint coords); /* 753 */
+ void (GLAPIENTRYP TexCoordP3uiv)(GLenum type, const GLuint * coords); /* 754 */
+ void (GLAPIENTRYP TexCoordP4ui)(GLenum type, GLuint coords); /* 755 */
+ void (GLAPIENTRYP TexCoordP4uiv)(GLenum type, const GLuint * coords); /* 756 */
+ void (GLAPIENTRYP VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 757 */
+ void (GLAPIENTRYP VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 758 */
+ void (GLAPIENTRYP VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 759 */
+ void (GLAPIENTRYP VertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 760 */
+ void (GLAPIENTRYP VertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 761 */
+ void (GLAPIENTRYP VertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 762 */
+ void (GLAPIENTRYP VertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); /* 763 */
+ void (GLAPIENTRYP VertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); /* 764 */
+ void (GLAPIENTRYP VertexP2ui)(GLenum type, GLuint value); /* 765 */
+ void (GLAPIENTRYP VertexP2uiv)(GLenum type, const GLuint * value); /* 766 */
+ void (GLAPIENTRYP VertexP3ui)(GLenum type, GLuint value); /* 767 */
+ void (GLAPIENTRYP VertexP3uiv)(GLenum type, const GLuint * value); /* 768 */
+ void (GLAPIENTRYP VertexP4ui)(GLenum type, GLuint value); /* 769 */
+ void (GLAPIENTRYP VertexP4uiv)(GLenum type, const GLuint * value); /* 770 */
+ void (GLAPIENTRYP DrawArraysIndirect)(GLenum mode, const GLvoid * indirect); /* 771 */
+ void (GLAPIENTRYP DrawElementsIndirect)(GLenum mode, GLenum type, const GLvoid * indirect); /* 772 */
+ void (GLAPIENTRYP GetUniformdv)(GLuint program, GLint location, GLdouble * params); /* 773 */
+ void (GLAPIENTRYP Uniform1d)(GLint location, GLdouble x); /* 774 */
+ void (GLAPIENTRYP Uniform1dv)(GLint location, GLsizei count, const GLdouble * value); /* 775 */
+ void (GLAPIENTRYP Uniform2d)(GLint location, GLdouble x, GLdouble y); /* 776 */
+ void (GLAPIENTRYP Uniform2dv)(GLint location, GLsizei count, const GLdouble * value); /* 777 */
+ void (GLAPIENTRYP Uniform3d)(GLint location, GLdouble x, GLdouble y, GLdouble z); /* 778 */
+ void (GLAPIENTRYP Uniform3dv)(GLint location, GLsizei count, const GLdouble * value); /* 779 */
+ void (GLAPIENTRYP Uniform4d)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 780 */
+ void (GLAPIENTRYP Uniform4dv)(GLint location, GLsizei count, const GLdouble * value); /* 781 */
+ void (GLAPIENTRYP UniformMatrix2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 782 */
+ void (GLAPIENTRYP UniformMatrix2x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 783 */
+ void (GLAPIENTRYP UniformMatrix2x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 784 */
+ void (GLAPIENTRYP UniformMatrix3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 785 */
+ void (GLAPIENTRYP UniformMatrix3x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 786 */
+ void (GLAPIENTRYP UniformMatrix3x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 787 */
+ void (GLAPIENTRYP UniformMatrix4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 788 */
+ void (GLAPIENTRYP UniformMatrix4x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 789 */
+ void (GLAPIENTRYP UniformMatrix4x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 790 */
+ void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 791 */
+ void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 792 */
+ void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 793 */
+ void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 794 */
+ GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 795 */
+ void (GLAPIENTRYP PauseTransformFeedback)(void); /* 796 */
+ void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 797 */
+ void (GLAPIENTRYP BeginQueryIndexed)(GLenum target, GLuint index, GLuint id); /* 798 */
+ void (GLAPIENTRYP DrawTransformFeedbackStream)(GLenum mode, GLuint id, GLuint stream); /* 799 */
+ void (GLAPIENTRYP EndQueryIndexed)(GLenum target, GLuint index); /* 800 */
+ void (GLAPIENTRYP GetQueryIndexediv)(GLenum target, GLuint index, GLenum pname, GLint * params); /* 801 */
+ void (GLAPIENTRYP ClearDepthf)(GLclampf depth); /* 802 */
+ void (GLAPIENTRYP DepthRangef)(GLclampf zNear, GLclampf zFar); /* 803 */
+ void (GLAPIENTRYP GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); /* 804 */
+ void (GLAPIENTRYP ReleaseShaderCompiler)(void); /* 805 */
+ void (GLAPIENTRYP ShaderBinary)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); /* 806 */
+ void (GLAPIENTRYP GetProgramBinary)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, GLvoid * binary); /* 807 */
+ void (GLAPIENTRYP ProgramBinary)(GLuint program, GLenum binaryFormat, const GLvoid * binary, GLsizei length); /* 808 */
+ void (GLAPIENTRYP ProgramParameteri)(GLuint program, GLenum pname, GLint value); /* 809 */
+ void (GLAPIENTRYP GetVertexAttribLdv)(GLuint index, GLenum pname, GLdouble * params); /* 810 */
+ void (GLAPIENTRYP VertexAttribL1d)(GLuint index, GLdouble x); /* 811 */
+ void (GLAPIENTRYP VertexAttribL1dv)(GLuint index, const GLdouble * v); /* 812 */
+ void (GLAPIENTRYP VertexAttribL2d)(GLuint index, GLdouble x, GLdouble y); /* 813 */
+ void (GLAPIENTRYP VertexAttribL2dv)(GLuint index, const GLdouble * v); /* 814 */
+ void (GLAPIENTRYP VertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 815 */
+ void (GLAPIENTRYP VertexAttribL3dv)(GLuint index, const GLdouble * v); /* 816 */
+ void (GLAPIENTRYP VertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 817 */
+ void (GLAPIENTRYP VertexAttribL4dv)(GLuint index, const GLdouble * v); /* 818 */
+ void (GLAPIENTRYP VertexAttribLPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 819 */
+ void (GLAPIENTRYP DepthRangeArrayv)(GLuint first, GLsizei count, const GLclampd * v); /* 820 */
+ void (GLAPIENTRYP DepthRangeIndexed)(GLuint index, GLclampd n, GLclampd f); /* 821 */
+ void (GLAPIENTRYP GetDoublei_v)(GLenum target, GLuint index, GLdouble * data); /* 822 */
+ void (GLAPIENTRYP GetFloati_v)(GLenum target, GLuint index, GLfloat * data); /* 823 */
+ void (GLAPIENTRYP ScissorArrayv)(GLuint first, GLsizei count, const int * v); /* 824 */
+ void (GLAPIENTRYP ScissorIndexed)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); /* 825 */
+ void (GLAPIENTRYP ScissorIndexedv)(GLuint index, const GLint * v); /* 826 */
+ void (GLAPIENTRYP ViewportArrayv)(GLuint first, GLsizei count, const GLfloat * v); /* 827 */
+ void (GLAPIENTRYP ViewportIndexedf)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); /* 828 */
+ void (GLAPIENTRYP ViewportIndexedfv)(GLuint index, const GLfloat * v); /* 829 */
+ GLenum (GLAPIENTRYP GetGraphicsResetStatusARB)(void); /* 830 */
+ void (GLAPIENTRYP GetnColorTableARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * table); /* 831 */
+ void (GLAPIENTRYP GetnCompressedTexImageARB)(GLenum target, GLint lod, GLsizei bufSize, GLvoid * img); /* 832 */
+ void (GLAPIENTRYP GetnConvolutionFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * image); /* 833 */
+ void (GLAPIENTRYP GetnHistogramARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 834 */
+ void (GLAPIENTRYP GetnMapdvARB)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); /* 835 */
+ void (GLAPIENTRYP GetnMapfvARB)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); /* 836 */
+ void (GLAPIENTRYP GetnMapivARB)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); /* 837 */
+ void (GLAPIENTRYP GetnMinmaxARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); /* 838 */
+ void (GLAPIENTRYP GetnPixelMapfvARB)(GLenum map, GLsizei bufSize, GLfloat * values); /* 839 */
+ void (GLAPIENTRYP GetnPixelMapuivARB)(GLenum map, GLsizei bufSize, GLuint * values); /* 840 */
+ void (GLAPIENTRYP GetnPixelMapusvARB)(GLenum map, GLsizei bufSize, GLushort * values); /* 841 */
+ void (GLAPIENTRYP GetnPolygonStippleARB)(GLsizei bufSize, GLubyte * pattern); /* 842 */
+ void (GLAPIENTRYP GetnSeparableFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span); /* 843 */
+ void (GLAPIENTRYP GetnTexImageARB)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * img); /* 844 */
+ void (GLAPIENTRYP GetnUniformdvARB)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); /* 845 */
+ void (GLAPIENTRYP GetnUniformfvARB)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); /* 846 */
+ void (GLAPIENTRYP GetnUniformivARB)(GLuint program, GLint location, GLsizei bufSize, GLint * params); /* 847 */
+ void (GLAPIENTRYP GetnUniformuivARB)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); /* 848 */
+ void (GLAPIENTRYP ReadnPixelsARB)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid * data); /* 849 */
+ void (GLAPIENTRYP DrawArraysInstancedBaseInstance)(GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); /* 850 */
+ void (GLAPIENTRYP DrawElementsInstancedBaseInstance)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLuint baseinstance); /* 851 */
+ void (GLAPIENTRYP DrawElementsInstancedBaseVertexBaseInstance)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); /* 852 */
+ void (GLAPIENTRYP DrawTransformFeedbackInstanced)(GLenum mode, GLuint id, GLsizei primcount); /* 853 */
+ void (GLAPIENTRYP DrawTransformFeedbackStreamInstanced)(GLenum mode, GLuint id, GLuint stream, GLsizei primcount); /* 854 */
+ void (GLAPIENTRYP GetInternalformativ)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); /* 855 */
+ void (GLAPIENTRYP GetActiveAtomicCounterBufferiv)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); /* 856 */
+ void (GLAPIENTRYP BindImageTexture)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); /* 857 */
+ void (GLAPIENTRYP MemoryBarrier)(GLbitfield barriers); /* 858 */
+ void (GLAPIENTRYP TexStorage1D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); /* 859 */
+ void (GLAPIENTRYP TexStorage2D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); /* 860 */
+ void (GLAPIENTRYP TexStorage3D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); /* 861 */
+ void (GLAPIENTRYP TextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width); /* 862 */
+ void (GLAPIENTRYP TextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height); /* 863 */
+ void (GLAPIENTRYP TextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth); /* 864 */
+ void (GLAPIENTRYP ClearBufferData)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data); /* 865 */
+ void (GLAPIENTRYP ClearBufferSubData)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data); /* 866 */
+ void (GLAPIENTRYP DispatchCompute)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); /* 867 */
+ void (GLAPIENTRYP DispatchComputeIndirect)(GLintptr indirect); /* 868 */
+ void (GLAPIENTRYP CopyImageSubData)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); /* 869 */
+ void (GLAPIENTRYP TextureView)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); /* 870 */
+ void (GLAPIENTRYP BindVertexBuffer)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); /* 871 */
+ void (GLAPIENTRYP VertexAttribBinding)(GLuint attribindex, GLuint bindingindex); /* 872 */
+ void (GLAPIENTRYP VertexAttribFormat)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); /* 873 */
+ void (GLAPIENTRYP VertexAttribIFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 874 */
+ void (GLAPIENTRYP VertexAttribLFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 875 */
+ void (GLAPIENTRYP VertexBindingDivisor)(GLuint attribindex, GLuint divisor); /* 876 */
+ void (GLAPIENTRYP MultiDrawArraysIndirect)(GLenum mode, const GLvoid * indirect, GLsizei primcount, GLsizei stride); /* 877 */
+ void (GLAPIENTRYP MultiDrawElementsIndirect)(GLenum mode, GLenum type, const GLvoid * indirect, GLsizei primcount, GLsizei stride); /* 878 */
+ void (GLAPIENTRYP GetProgramInterfaceiv)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); /* 879 */
+ GLuint (GLAPIENTRYP GetProgramResourceIndex)(GLuint program, GLenum programInterface, const GLchar * name); /* 880 */
+ GLint (GLAPIENTRYP GetProgramResourceLocation)(GLuint program, GLenum programInterface, const GLchar * name); /* 881 */
+ GLint (GLAPIENTRYP GetProgramResourceLocationIndex)(GLuint program, GLenum programInterface, const GLchar * name); /* 882 */
+ void (GLAPIENTRYP GetProgramResourceName)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); /* 883 */
+ void (GLAPIENTRYP GetProgramResourceiv)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); /* 884 */
+ void (GLAPIENTRYP TexBufferRange)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 885 */
+ void (GLAPIENTRYP TexStorage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); /* 886 */
+ void (GLAPIENTRYP TexStorage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); /* 887 */
+ void (GLAPIENTRYP BufferStorage)(GLenum target, GLsizeiptr size, const GLvoid * data, GLbitfield flags); /* 888 */
+ void (GLAPIENTRYP ClearTexImage)(GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid * data); /* 889 */
+ void (GLAPIENTRYP ClearTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * data); /* 890 */
+ void (GLAPIENTRYP BindBuffersBase)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); /* 891 */
+ void (GLAPIENTRYP BindBuffersRange)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); /* 892 */
+ void (GLAPIENTRYP BindImageTextures)(GLuint first, GLsizei count, const GLuint * textures); /* 893 */
+ void (GLAPIENTRYP BindSamplers)(GLuint first, GLsizei count, const GLuint * samplers); /* 894 */
+ void (GLAPIENTRYP BindTextures)(GLuint first, GLsizei count, const GLuint * textures); /* 895 */
+ void (GLAPIENTRYP BindVertexBuffers)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); /* 896 */
+ void (GLAPIENTRYP ClipControl)(GLenum origin, GLenum depth); /* 897 */
+ void (GLAPIENTRYP BindTextureUnit)(GLuint unit, GLuint texture); /* 898 */
+ void (GLAPIENTRYP BlitNamedFramebuffer)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 899 */
+ GLenum (GLAPIENTRYP CheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); /* 900 */
+ void (GLAPIENTRYP ClearNamedBufferData)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data); /* 901 */
+ void (GLAPIENTRYP ClearNamedBufferSubData)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data); /* 902 */
+ void (GLAPIENTRYP ClearNamedFramebufferfi)(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil); /* 903 */
+ void (GLAPIENTRYP ClearNamedFramebufferfv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); /* 904 */
+ void (GLAPIENTRYP ClearNamedFramebufferiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); /* 905 */
+ void (GLAPIENTRYP ClearNamedFramebufferuiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); /* 906 */
+ void (GLAPIENTRYP CompressedTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 907 */
+ void (GLAPIENTRYP CompressedTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 908 */
+ void (GLAPIENTRYP CompressedTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 909 */
+ void (GLAPIENTRYP CopyNamedBufferSubData)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 910 */
+ void (GLAPIENTRYP CopyTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); /* 911 */
+ void (GLAPIENTRYP CopyTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 912 */
+ void (GLAPIENTRYP CopyTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 913 */
+ void (GLAPIENTRYP CreateBuffers)(GLsizei n, GLuint * buffers); /* 914 */
+ void (GLAPIENTRYP CreateFramebuffers)(GLsizei n, GLuint * framebuffers); /* 915 */
+ void (GLAPIENTRYP CreateProgramPipelines)(GLsizei n, GLuint * pipelines); /* 916 */
+ void (GLAPIENTRYP CreateQueries)(GLenum target, GLsizei n, GLuint * ids); /* 917 */
+ void (GLAPIENTRYP CreateRenderbuffers)(GLsizei n, GLuint * renderbuffers); /* 918 */
+ void (GLAPIENTRYP CreateSamplers)(GLsizei n, GLuint * samplers); /* 919 */
+ void (GLAPIENTRYP CreateTextures)(GLenum target, GLsizei n, GLuint * textures); /* 920 */
+ void (GLAPIENTRYP CreateTransformFeedbacks)(GLsizei n, GLuint * ids); /* 921 */
+ void (GLAPIENTRYP CreateVertexArrays)(GLsizei n, GLuint * arrays); /* 922 */
+ void (GLAPIENTRYP DisableVertexArrayAttrib)(GLuint vaobj, GLuint index); /* 923 */
+ void (GLAPIENTRYP EnableVertexArrayAttrib)(GLuint vaobj, GLuint index); /* 924 */
+ void (GLAPIENTRYP FlushMappedNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length); /* 925 */
+ void (GLAPIENTRYP GenerateTextureMipmap)(GLuint texture); /* 926 */
+ void (GLAPIENTRYP GetCompressedTextureImage)(GLuint texture, GLint level, GLsizei bufSize, GLvoid * pixels); /* 927 */
+ void (GLAPIENTRYP GetNamedBufferParameteri64v)(GLuint buffer, GLenum pname, GLint64 * params); /* 928 */
+ void (GLAPIENTRYP GetNamedBufferParameteriv)(GLuint buffer, GLenum pname, GLint * params); /* 929 */
+ void (GLAPIENTRYP GetNamedBufferPointerv)(GLuint buffer, GLenum pname, GLvoid ** params); /* 930 */
+ void (GLAPIENTRYP GetNamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data); /* 931 */
+ void (GLAPIENTRYP GetNamedFramebufferAttachmentParameteriv)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); /* 932 */
+ void (GLAPIENTRYP GetNamedFramebufferParameteriv)(GLuint framebuffer, GLenum pname, GLint * param); /* 933 */
+ void (GLAPIENTRYP GetNamedRenderbufferParameteriv)(GLuint renderbuffer, GLenum pname, GLint * params); /* 934 */
+ void (GLAPIENTRYP GetQueryBufferObjecti64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 935 */
+ void (GLAPIENTRYP GetQueryBufferObjectiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 936 */
+ void (GLAPIENTRYP GetQueryBufferObjectui64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 937 */
+ void (GLAPIENTRYP GetQueryBufferObjectuiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); /* 938 */
+ void (GLAPIENTRYP GetTextureImage)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * pixels); /* 939 */
+ void (GLAPIENTRYP GetTextureLevelParameterfv)(GLuint texture, GLint level, GLenum pname, GLfloat * params); /* 940 */
+ void (GLAPIENTRYP GetTextureLevelParameteriv)(GLuint texture, GLint level, GLenum pname, GLint * params); /* 941 */
+ void (GLAPIENTRYP GetTextureParameterIiv)(GLuint texture, GLenum pname, GLint * params); /* 942 */
+ void (GLAPIENTRYP GetTextureParameterIuiv)(GLuint texture, GLenum pname, GLuint * params); /* 943 */
+ void (GLAPIENTRYP GetTextureParameterfv)(GLuint texture, GLenum pname, GLfloat * params); /* 944 */
+ void (GLAPIENTRYP GetTextureParameteriv)(GLuint texture, GLenum pname, GLint * params); /* 945 */
+ void (GLAPIENTRYP GetTransformFeedbacki64_v)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); /* 946 */
+ void (GLAPIENTRYP GetTransformFeedbacki_v)(GLuint xfb, GLenum pname, GLuint index, GLint * param); /* 947 */
+ void (GLAPIENTRYP GetTransformFeedbackiv)(GLuint xfb, GLenum pname, GLint * param); /* 948 */
+ void (GLAPIENTRYP GetVertexArrayIndexed64iv)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); /* 949 */
+ void (GLAPIENTRYP GetVertexArrayIndexediv)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); /* 950 */
+ void (GLAPIENTRYP GetVertexArrayiv)(GLuint vaobj, GLenum pname, GLint * param); /* 951 */
+ void (GLAPIENTRYP InvalidateNamedFramebufferData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); /* 952 */
+ void (GLAPIENTRYP InvalidateNamedFramebufferSubData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); /* 953 */
+ GLvoid * (GLAPIENTRYP MapNamedBuffer)(GLuint buffer, GLenum access); /* 954 */
+ GLvoid * (GLAPIENTRYP MapNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 955 */
+ void (GLAPIENTRYP NamedBufferData)(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage); /* 956 */
+ void (GLAPIENTRYP NamedBufferStorage)(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLbitfield flags); /* 957 */
+ void (GLAPIENTRYP NamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data); /* 958 */
+ void (GLAPIENTRYP NamedFramebufferDrawBuffer)(GLuint framebuffer, GLenum buf); /* 959 */
+ void (GLAPIENTRYP NamedFramebufferDrawBuffers)(GLuint framebuffer, GLsizei n, const GLenum * bufs); /* 960 */
+ void (GLAPIENTRYP NamedFramebufferParameteri)(GLuint framebuffer, GLenum pname, GLint param); /* 961 */
+ void (GLAPIENTRYP NamedFramebufferReadBuffer)(GLuint framebuffer, GLenum buf); /* 962 */
+ void (GLAPIENTRYP NamedFramebufferRenderbuffer)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 963 */
+ void (GLAPIENTRYP NamedFramebufferTexture)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); /* 964 */
+ void (GLAPIENTRYP NamedFramebufferTextureLayer)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 965 */
+ void (GLAPIENTRYP NamedRenderbufferStorage)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); /* 966 */
+ void (GLAPIENTRYP NamedRenderbufferStorageMultisample)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); /* 967 */
+ void (GLAPIENTRYP TextureBuffer)(GLuint texture, GLenum internalformat, GLuint buffer); /* 968 */
+ void (GLAPIENTRYP TextureBufferRange)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 969 */
+ void (GLAPIENTRYP TextureParameterIiv)(GLuint texture, GLenum pname, const GLint * params); /* 970 */
+ void (GLAPIENTRYP TextureParameterIuiv)(GLuint texture, GLenum pname, const GLuint * params); /* 971 */
+ void (GLAPIENTRYP TextureParameterf)(GLuint texture, GLenum pname, GLfloat param); /* 972 */
+ void (GLAPIENTRYP TextureParameterfv)(GLuint texture, GLenum pname, const GLfloat * param); /* 973 */
+ void (GLAPIENTRYP TextureParameteri)(GLuint texture, GLenum pname, GLint param); /* 974 */
+ void (GLAPIENTRYP TextureParameteriv)(GLuint texture, GLenum pname, const GLint * param); /* 975 */
+ void (GLAPIENTRYP TextureStorage1D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); /* 976 */
+ void (GLAPIENTRYP TextureStorage2D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); /* 977 */
+ void (GLAPIENTRYP TextureStorage2DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); /* 978 */
+ void (GLAPIENTRYP TextureStorage3D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); /* 979 */
+ void (GLAPIENTRYP TextureStorage3DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); /* 980 */
+ void (GLAPIENTRYP TextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); /* 981 */
+ void (GLAPIENTRYP TextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); /* 982 */
+ void (GLAPIENTRYP TextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); /* 983 */
+ void (GLAPIENTRYP TransformFeedbackBufferBase)(GLuint xfb, GLuint index, GLuint buffer); /* 984 */
+ void (GLAPIENTRYP TransformFeedbackBufferRange)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 985 */
+ GLboolean (GLAPIENTRYP UnmapNamedBuffer)(GLuint buffer); /* 986 */
+ void (GLAPIENTRYP VertexArrayAttribBinding)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); /* 987 */
+ void (GLAPIENTRYP VertexArrayAttribFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); /* 988 */
+ void (GLAPIENTRYP VertexArrayAttribIFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 989 */
+ void (GLAPIENTRYP VertexArrayAttribLFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); /* 990 */
+ void (GLAPIENTRYP VertexArrayBindingDivisor)(GLuint vaobj, GLuint bindingindex, GLuint divisor); /* 991 */
+ void (GLAPIENTRYP VertexArrayElementBuffer)(GLuint vaobj, GLuint buffer); /* 992 */
+ void (GLAPIENTRYP VertexArrayVertexBuffer)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); /* 993 */
+ void (GLAPIENTRYP VertexArrayVertexBuffers)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); /* 994 */
+ void (GLAPIENTRYP InvalidateBufferData)(GLuint buffer); /* 995 */
+ void (GLAPIENTRYP InvalidateBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr length); /* 996 */
+ void (GLAPIENTRYP InvalidateFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments); /* 997 */
+ void (GLAPIENTRYP InvalidateSubFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); /* 998 */
+ void (GLAPIENTRYP InvalidateTexImage)(GLuint texture, GLint level); /* 999 */
+ void (GLAPIENTRYP InvalidateTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); /* 1000 */
+ void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 1001 */
+ void (GLAPIENTRYP DrawTexfOES)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); /* 1002 */
+ void (GLAPIENTRYP DrawTexfvOES)(const GLfloat * coords); /* 1003 */
+ void (GLAPIENTRYP DrawTexiOES)(GLint x, GLint y, GLint z, GLint width, GLint height); /* 1004 */
+ void (GLAPIENTRYP DrawTexivOES)(const GLint * coords); /* 1005 */
+ void (GLAPIENTRYP DrawTexsOES)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); /* 1006 */
+ void (GLAPIENTRYP DrawTexsvOES)(const GLshort * coords); /* 1007 */
+ void (GLAPIENTRYP DrawTexxOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); /* 1008 */
+ void (GLAPIENTRYP DrawTexxvOES)(const GLfixed * coords); /* 1009 */
+ void (GLAPIENTRYP PointSizePointerOES)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 1010 */
+ GLbitfield (GLAPIENTRYP QueryMatrixxOES)(GLfixed * mantissa, GLint * exponent); /* 1011 */
+ void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 1012 */
+ void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 1013 */
+ void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1014 */
+ void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 1015 */
+ void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1016 */
+ void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1017 */
+ void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1018 */
+ void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 1019 */
+ void (GLAPIENTRYP DiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum * attachments); /* 1020 */
+ void (GLAPIENTRYP ActiveShaderProgram)(GLuint pipeline, GLuint program); /* 1021 */
+ void (GLAPIENTRYP BindProgramPipeline)(GLuint pipeline); /* 1022 */
+ GLuint (GLAPIENTRYP CreateShaderProgramv)(GLenum type, GLsizei count, const GLchar * const * strings); /* 1023 */
+ void (GLAPIENTRYP DeleteProgramPipelines)(GLsizei n, const GLuint * pipelines); /* 1024 */
+ void (GLAPIENTRYP GenProgramPipelines)(GLsizei n, GLuint * pipelines); /* 1025 */
+ void (GLAPIENTRYP GetProgramPipelineInfoLog)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); /* 1026 */
+ void (GLAPIENTRYP GetProgramPipelineiv)(GLuint pipeline, GLenum pname, GLint * params); /* 1027 */
+ GLboolean (GLAPIENTRYP IsProgramPipeline)(GLuint pipeline); /* 1028 */
+ void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 1029 */
+ void (GLAPIENTRYP ProgramUniform1d)(GLuint program, GLint location, GLdouble x); /* 1030 */
+ void (GLAPIENTRYP ProgramUniform1dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1031 */
+ void (GLAPIENTRYP ProgramUniform1f)(GLuint program, GLint location, GLfloat x); /* 1032 */
+ void (GLAPIENTRYP ProgramUniform1fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1033 */
+ void (GLAPIENTRYP ProgramUniform1i)(GLuint program, GLint location, GLint x); /* 1034 */
+ void (GLAPIENTRYP ProgramUniform1iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1035 */
+ void (GLAPIENTRYP ProgramUniform1ui)(GLuint program, GLint location, GLuint x); /* 1036 */
+ void (GLAPIENTRYP ProgramUniform1uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1037 */
+ void (GLAPIENTRYP ProgramUniform2d)(GLuint program, GLint location, GLdouble x, GLdouble y); /* 1038 */
+ void (GLAPIENTRYP ProgramUniform2dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1039 */
+ void (GLAPIENTRYP ProgramUniform2f)(GLuint program, GLint location, GLfloat x, GLfloat y); /* 1040 */
+ void (GLAPIENTRYP ProgramUniform2fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1041 */
+ void (GLAPIENTRYP ProgramUniform2i)(GLuint program, GLint location, GLint x, GLint y); /* 1042 */
+ void (GLAPIENTRYP ProgramUniform2iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1043 */
+ void (GLAPIENTRYP ProgramUniform2ui)(GLuint program, GLint location, GLuint x, GLuint y); /* 1044 */
+ void (GLAPIENTRYP ProgramUniform2uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1045 */
+ void (GLAPIENTRYP ProgramUniform3d)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); /* 1046 */
+ void (GLAPIENTRYP ProgramUniform3dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1047 */
+ void (GLAPIENTRYP ProgramUniform3f)(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); /* 1048 */
+ void (GLAPIENTRYP ProgramUniform3fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1049 */
+ void (GLAPIENTRYP ProgramUniform3i)(GLuint program, GLint location, GLint x, GLint y, GLint z); /* 1050 */
+ void (GLAPIENTRYP ProgramUniform3iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1051 */
+ void (GLAPIENTRYP ProgramUniform3ui)(GLuint program, GLint location, GLuint x, GLuint y, GLuint z); /* 1052 */
+ void (GLAPIENTRYP ProgramUniform3uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1053 */
+ void (GLAPIENTRYP ProgramUniform4d)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1054 */
+ void (GLAPIENTRYP ProgramUniform4dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); /* 1055 */
+ void (GLAPIENTRYP ProgramUniform4f)(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1056 */
+ void (GLAPIENTRYP ProgramUniform4fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); /* 1057 */
+ void (GLAPIENTRYP ProgramUniform4i)(GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); /* 1058 */
+ void (GLAPIENTRYP ProgramUniform4iv)(GLuint program, GLint location, GLsizei count, const GLint * value); /* 1059 */
+ void (GLAPIENTRYP ProgramUniform4ui)(GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 1060 */
+ void (GLAPIENTRYP ProgramUniform4uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); /* 1061 */
+ void (GLAPIENTRYP ProgramUniformMatrix2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1062 */
+ void (GLAPIENTRYP ProgramUniformMatrix2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1063 */
+ void (GLAPIENTRYP ProgramUniformMatrix2x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1064 */
+ void (GLAPIENTRYP ProgramUniformMatrix2x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1065 */
+ void (GLAPIENTRYP ProgramUniformMatrix2x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1066 */
+ void (GLAPIENTRYP ProgramUniformMatrix2x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1067 */
+ void (GLAPIENTRYP ProgramUniformMatrix3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1068 */
+ void (GLAPIENTRYP ProgramUniformMatrix3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1069 */
+ void (GLAPIENTRYP ProgramUniformMatrix3x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1070 */
+ void (GLAPIENTRYP ProgramUniformMatrix3x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1071 */
+ void (GLAPIENTRYP ProgramUniformMatrix3x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1072 */
+ void (GLAPIENTRYP ProgramUniformMatrix3x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1073 */
+ void (GLAPIENTRYP ProgramUniformMatrix4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1074 */
+ void (GLAPIENTRYP ProgramUniformMatrix4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1075 */
+ void (GLAPIENTRYP ProgramUniformMatrix4x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1076 */
+ void (GLAPIENTRYP ProgramUniformMatrix4x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1077 */
+ void (GLAPIENTRYP ProgramUniformMatrix4x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); /* 1078 */
+ void (GLAPIENTRYP ProgramUniformMatrix4x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 1079 */
+ void (GLAPIENTRYP UnlockArraysEXT)(void); /* 1080 */
+ void (GLAPIENTRYP UseProgramStages)(GLuint pipeline, GLbitfield stages, GLuint program); /* 1081 */
+ void (GLAPIENTRYP ValidateProgramPipeline)(GLuint pipeline); /* 1082 */
+ void (GLAPIENTRYP DebugMessageCallback)(GLDEBUGPROC callback, const GLvoid * userParam); /* 1083 */
+ void (GLAPIENTRYP DebugMessageControl)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); /* 1084 */
+ void (GLAPIENTRYP DebugMessageInsert)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); /* 1085 */
+ GLuint (GLAPIENTRYP GetDebugMessageLog)(GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); /* 1086 */
+ void (GLAPIENTRYP GetObjectLabel)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); /* 1087 */
+ void (GLAPIENTRYP GetObjectPtrLabel)(const GLvoid * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); /* 1088 */
+ void (GLAPIENTRYP ObjectLabel)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); /* 1089 */
+ void (GLAPIENTRYP ObjectPtrLabel)(const GLvoid * ptr, GLsizei length, const GLchar * label); /* 1090 */
+ void (GLAPIENTRYP PopDebugGroup)(void); /* 1091 */
+ void (GLAPIENTRYP PushDebugGroup)(GLenum source, GLuint id, GLsizei length, const GLchar * message); /* 1092 */
+ void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 1093 */
+ void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 1094 */
+ void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount); /* 1095 */
+ void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 1096 */
+ void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 1097 */
+ void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 1098 */
+ void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1099 */
+ void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 1100 */
+ void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1101 */
+ void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 1102 */
+ void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 1103 */
+ void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 1104 */
+ void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 1105 */
+ void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 1106 */
+ void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 1107 */
+ void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 1108 */
+ GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 1109 */
+ void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 1110 */
+ void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 1111 */
+ void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 1112 */
+ void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 1113 */
+ void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 1114 */
+ void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 1115 */
+ void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 1116 */
+ void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 1117 */
+ void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 1118 */
+ void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 1119 */
+ void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 1120 */
+ void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 1121 */
+ void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 1122 */
+ void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 1123 */
+ void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 1124 */
+ void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 1125 */
+ void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 1126 */
+ void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 1127 */
+ void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 1128 */
+ void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 1129 */
+ void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 1130 */
+ void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 1131 */
+ void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 1132 */
+ void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 1133 */
+ void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 1134 */
+ void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 1135 */
+ void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 1136 */
+ void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 1137 */
+ void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 1138 */
+ void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 1139 */
+ void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 1140 */
+ void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 1141 */
+ void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1142 */
+ void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 1143 */
+ void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1144 */
+ void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 1145 */
+ void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 1146 */
+ void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 1147 */
+ void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 1148 */
+ void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 1149 */
+ void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 1150 */
+ void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1151 */
+ void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1152 */
+ void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1153 */
+ void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1154 */
+ void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1155 */
+ void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1156 */
+ void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1157 */
+ void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1158 */
+ void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1159 */
+ void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 1160 */
+ void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 1161 */
+ void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 1162 */
+ void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 1163 */
+ void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 1164 */
+ void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 1165 */
+ void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 1166 */
+ void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 1167 */
+ void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 1168 */
+ void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 1169 */
+ void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 1170 */
+ void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 1171 */
+ void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 1172 */
+ void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 1173 */
+ void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 1174 */
+ void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 1175 */
+ void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 1176 */
+ void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 1177 */
+ GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 1178 */
+ void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 1179 */
+ void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 1180 */
+ void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 1181 */
+ void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 1182 */
+ void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 1183 */
+ void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 1184 */
+ void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 1185 */
+ void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 1186 */
+ void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 1187 */
+ void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 1188 */
+ void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 1189 */
+ void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 1190 */
+ void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 1191 */
+ void (GLAPIENTRYP GetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed * params); /* 1192 */
+ void (GLAPIENTRYP TexGenxOES)(GLenum coord, GLenum pname, GLint param); /* 1193 */
+ void (GLAPIENTRYP TexGenxvOES)(GLenum coord, GLenum pname, const GLfixed * params); /* 1194 */
+ void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 1195 */
+ void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 1196 */
+ void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 1197 */
+ void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 1198 */
+ void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 1199 */
+ void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 1200 */
+ void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 1201 */
+ void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 1202 */
+ void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 1203 */
+ void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 1204 */
+ void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 1205 */
+ void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 1206 */
+ void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 1207 */
+ void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 1208 */
+ void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 1209 */
+ void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 1210 */
+ void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 1211 */
+ void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 1212 */
+ void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 1213 */
+ void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 1214 */
+ void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 1215 */
+ void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 1216 */
+ void (GLAPIENTRYP BeginPerfMonitorAMD)(GLuint monitor); /* 1217 */
+ void (GLAPIENTRYP DeletePerfMonitorsAMD)(GLsizei n, GLuint * monitors); /* 1218 */
+ void (GLAPIENTRYP EndPerfMonitorAMD)(GLuint monitor); /* 1219 */
+ void (GLAPIENTRYP GenPerfMonitorsAMD)(GLsizei n, GLuint * monitors); /* 1220 */
+ void (GLAPIENTRYP GetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); /* 1221 */
+ void (GLAPIENTRYP GetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, GLvoid * data); /* 1222 */
+ void (GLAPIENTRYP GetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); /* 1223 */
+ void (GLAPIENTRYP GetPerfMonitorCountersAMD)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei countersSize, GLuint * counters); /* 1224 */
+ void (GLAPIENTRYP GetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); /* 1225 */
+ void (GLAPIENTRYP GetPerfMonitorGroupsAMD)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); /* 1226 */
+ void (GLAPIENTRYP SelectPerfMonitorCountersAMD)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); /* 1227 */
+ void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 1228 */
+ GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 1229 */
+ GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 1230 */
+ void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 1231 */
+ GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 1232 */
+ void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 1233 */
+ void (GLAPIENTRYP TextureBarrierNV)(void); /* 1234 */
+ void (GLAPIENTRYP VDPAUFiniNV)(void); /* 1235 */
+ void (GLAPIENTRYP VDPAUGetSurfaceivNV)(GLintptr surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 1236 */
+ void (GLAPIENTRYP VDPAUInitNV)(const GLvoid * vdpDevice, const GLvoid * getProcAddress); /* 1237 */
+ GLboolean (GLAPIENTRYP VDPAUIsSurfaceNV)(GLintptr surface); /* 1238 */
+ void (GLAPIENTRYP VDPAUMapSurfacesNV)(GLsizei numSurfaces, const GLintptr * surfaces); /* 1239 */
+ GLintptr (GLAPIENTRYP VDPAURegisterOutputSurfaceNV)(const GLvoid * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); /* 1240 */
+ GLintptr (GLAPIENTRYP VDPAURegisterVideoSurfaceNV)(const GLvoid * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); /* 1241 */
+ void (GLAPIENTRYP VDPAUSurfaceAccessNV)(GLintptr surface, GLenum access); /* 1242 */
+ void (GLAPIENTRYP VDPAUUnmapSurfacesNV)(GLsizei numSurfaces, const GLintptr * surfaces); /* 1243 */
+ void (GLAPIENTRYP VDPAUUnregisterSurfaceNV)(GLintptr surface); /* 1244 */
+ void (GLAPIENTRYP BeginPerfQueryINTEL)(GLuint queryHandle); /* 1245 */
+ void (GLAPIENTRYP CreatePerfQueryINTEL)(GLuint queryId, GLuint * queryHandle); /* 1246 */
+ void (GLAPIENTRYP DeletePerfQueryINTEL)(GLuint queryHandle); /* 1247 */
+ void (GLAPIENTRYP EndPerfQueryINTEL)(GLuint queryHandle); /* 1248 */
+ void (GLAPIENTRYP GetFirstPerfQueryIdINTEL)(GLuint * queryId); /* 1249 */
+ void (GLAPIENTRYP GetNextPerfQueryIdINTEL)(GLuint queryId, GLuint * nextQueryId); /* 1250 */
+ void (GLAPIENTRYP GetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); /* 1251 */
+ void (GLAPIENTRYP GetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten); /* 1252 */
+ void (GLAPIENTRYP GetPerfQueryIdByNameINTEL)(GLchar * queryName, GLuint * queryId); /* 1253 */
+ void (GLAPIENTRYP GetPerfQueryInfoINTEL)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); /* 1254 */
+ void (GLAPIENTRYP PolygonOffsetClampEXT)(GLfloat factor, GLfloat units, GLfloat clamp); /* 1255 */
+ void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 1256 */
+ void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 1257 */
+ void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 1258 */
+ void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 1259 */
+ void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 1260 */
+ void (GLAPIENTRYP AlphaFuncx)(GLenum func, GLclampx ref); /* 1261 */
+ void (GLAPIENTRYP ClearColorx)(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); /* 1262 */
+ void (GLAPIENTRYP ClearDepthx)(GLclampx depth); /* 1263 */
+ void (GLAPIENTRYP Color4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); /* 1264 */
+ void (GLAPIENTRYP DepthRangex)(GLclampx zNear, GLclampx zFar); /* 1265 */
+ void (GLAPIENTRYP Fogx)(GLenum pname, GLfixed param); /* 1266 */
+ void (GLAPIENTRYP Fogxv)(GLenum pname, const GLfixed * params); /* 1267 */
+ void (GLAPIENTRYP Frustumf)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); /* 1268 */
+ void (GLAPIENTRYP Frustumx)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); /* 1269 */
+ void (GLAPIENTRYP LightModelx)(GLenum pname, GLfixed param); /* 1270 */
+ void (GLAPIENTRYP LightModelxv)(GLenum pname, const GLfixed * params); /* 1271 */
+ void (GLAPIENTRYP Lightx)(GLenum light, GLenum pname, GLfixed param); /* 1272 */
+ void (GLAPIENTRYP Lightxv)(GLenum light, GLenum pname, const GLfixed * params); /* 1273 */
+ void (GLAPIENTRYP LineWidthx)(GLfixed width); /* 1274 */
+ void (GLAPIENTRYP LoadMatrixx)(const GLfixed * m); /* 1275 */
+ void (GLAPIENTRYP Materialx)(GLenum face, GLenum pname, GLfixed param); /* 1276 */
+ void (GLAPIENTRYP Materialxv)(GLenum face, GLenum pname, const GLfixed * params); /* 1277 */
+ void (GLAPIENTRYP MultMatrixx)(const GLfixed * m); /* 1278 */
+ void (GLAPIENTRYP MultiTexCoord4x)(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); /* 1279 */
+ void (GLAPIENTRYP Normal3x)(GLfixed nx, GLfixed ny, GLfixed nz); /* 1280 */
+ void (GLAPIENTRYP Orthof)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); /* 1281 */
+ void (GLAPIENTRYP Orthox)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); /* 1282 */
+ void (GLAPIENTRYP PointSizex)(GLfixed size); /* 1283 */
+ void (GLAPIENTRYP PolygonOffsetx)(GLfixed factor, GLfixed units); /* 1284 */
+ void (GLAPIENTRYP Rotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); /* 1285 */
+ void (GLAPIENTRYP SampleCoveragex)(GLclampx value, GLboolean invert); /* 1286 */
+ void (GLAPIENTRYP Scalex)(GLfixed x, GLfixed y, GLfixed z); /* 1287 */
+ void (GLAPIENTRYP TexEnvx)(GLenum target, GLenum pname, GLfixed param); /* 1288 */
+ void (GLAPIENTRYP TexEnvxv)(GLenum target, GLenum pname, const GLfixed * params); /* 1289 */
+ void (GLAPIENTRYP TexParameterx)(GLenum target, GLenum pname, GLfixed param); /* 1290 */
+ void (GLAPIENTRYP Translatex)(GLfixed x, GLfixed y, GLfixed z); /* 1291 */
+ void (GLAPIENTRYP ClipPlanef)(GLenum plane, const GLfloat * equation); /* 1292 */
+ void (GLAPIENTRYP ClipPlanex)(GLenum plane, const GLfixed * equation); /* 1293 */
+ void (GLAPIENTRYP GetClipPlanef)(GLenum plane, GLfloat * equation); /* 1294 */
+ void (GLAPIENTRYP GetClipPlanex)(GLenum plane, GLfixed * equation); /* 1295 */
+ void (GLAPIENTRYP GetFixedv)(GLenum pname, GLfixed * params); /* 1296 */
+ void (GLAPIENTRYP GetLightxv)(GLenum light, GLenum pname, GLfixed * params); /* 1297 */
+ void (GLAPIENTRYP GetMaterialxv)(GLenum face, GLenum pname, GLfixed * params); /* 1298 */
+ void (GLAPIENTRYP GetTexEnvxv)(GLenum target, GLenum pname, GLfixed * params); /* 1299 */
+ void (GLAPIENTRYP GetTexParameterxv)(GLenum target, GLenum pname, GLfixed * params); /* 1300 */
+ void (GLAPIENTRYP PointParameterx)(GLenum pname, GLfixed param); /* 1301 */
+ void (GLAPIENTRYP PointParameterxv)(GLenum pname, const GLfixed * params); /* 1302 */
+ void (GLAPIENTRYP TexParameterxv)(GLenum target, GLenum pname, const GLfixed * params); /* 1303 */
#endif /* !defined HAVE_SHARED_GLAPI */
};
diff --git a/xorg-server/glx/glfunctions.h b/xorg-server/glx/glfunctions.h
index 2b93ef9c8..6a88b8590 100644
--- a/xorg-server/glx/glfunctions.h
+++ b/xorg-server/glx/glfunctions.h
@@ -714,7 +714,6 @@
#define glIsRenderbuffer(a1) CALL_IsRenderbuffer(GET_DISPATCH(), (a1))
#define glRenderbufferStorage(a1, a2, a3, a4) CALL_RenderbufferStorage(GET_DISPATCH(), (a1, a2, a3, a4))
#define glRenderbufferStorageMultisample(a1, a2, a3, a4, a5) CALL_RenderbufferStorageMultisample(GET_DISPATCH(), (a1, a2, a3, a4, a5))
-#define glFramebufferTextureFaceARB(a1, a2, a3, a4, a5) CALL_FramebufferTextureFaceARB(GET_DISPATCH(), (a1, a2, a3, a4, a5))
#define glFlushMappedBufferRange(a1, a2, a3) CALL_FlushMappedBufferRange(GET_DISPATCH(), (a1, a2, a3))
#define glMapBufferRange(a1, a2, a3, a4) CALL_MapBufferRange(GET_DISPATCH(), (a1, a2, a3, a4))
#define glBindVertexArray(a1) CALL_BindVertexArray(GET_DISPATCH(), (a1))
diff --git a/xorg-server/glx/glprocs.h b/xorg-server/glx/glprocs.h
index b81e9a7bc..a7518b49e 100644
--- a/xorg-server/glx/glprocs.h
+++ b/xorg-server/glx/glprocs.h
@@ -732,7 +732,6 @@ static const char gl_string_table[] =
"glIsRenderbuffer\0"
"glRenderbufferStorage\0"
"glRenderbufferStorageMultisample\0"
- "glFramebufferTextureFaceARB\0"
"glFlushMappedBufferRange\0"
"glMapBufferRange\0"
"glBindVertexArray\0"
@@ -1886,10 +1885,144 @@ static const char gl_string_table[] =
#define gl_dispatch_stub_364 mgl_dispatch_stub_364
#define gl_dispatch_stub_365 mgl_dispatch_stub_365
#define gl_dispatch_stub_366 mgl_dispatch_stub_366
+#define gl_dispatch_stub_730 mgl_dispatch_stub_730
#define gl_dispatch_stub_731 mgl_dispatch_stub_731
#define gl_dispatch_stub_732 mgl_dispatch_stub_732
-#define gl_dispatch_stub_733 mgl_dispatch_stub_733
-#define gl_dispatch_stub_856 mgl_dispatch_stub_856
+#define gl_dispatch_stub_773 mgl_dispatch_stub_773
+#define gl_dispatch_stub_774 mgl_dispatch_stub_774
+#define gl_dispatch_stub_775 mgl_dispatch_stub_775
+#define gl_dispatch_stub_776 mgl_dispatch_stub_776
+#define gl_dispatch_stub_777 mgl_dispatch_stub_777
+#define gl_dispatch_stub_778 mgl_dispatch_stub_778
+#define gl_dispatch_stub_779 mgl_dispatch_stub_779
+#define gl_dispatch_stub_780 mgl_dispatch_stub_780
+#define gl_dispatch_stub_781 mgl_dispatch_stub_781
+#define gl_dispatch_stub_782 mgl_dispatch_stub_782
+#define gl_dispatch_stub_783 mgl_dispatch_stub_783
+#define gl_dispatch_stub_784 mgl_dispatch_stub_784
+#define gl_dispatch_stub_785 mgl_dispatch_stub_785
+#define gl_dispatch_stub_786 mgl_dispatch_stub_786
+#define gl_dispatch_stub_787 mgl_dispatch_stub_787
+#define gl_dispatch_stub_788 mgl_dispatch_stub_788
+#define gl_dispatch_stub_789 mgl_dispatch_stub_789
+#define gl_dispatch_stub_790 mgl_dispatch_stub_790
+#define gl_dispatch_stub_810 mgl_dispatch_stub_810
+#define gl_dispatch_stub_811 mgl_dispatch_stub_811
+#define gl_dispatch_stub_812 mgl_dispatch_stub_812
+#define gl_dispatch_stub_813 mgl_dispatch_stub_813
+#define gl_dispatch_stub_814 mgl_dispatch_stub_814
+#define gl_dispatch_stub_815 mgl_dispatch_stub_815
+#define gl_dispatch_stub_816 mgl_dispatch_stub_816
+#define gl_dispatch_stub_817 mgl_dispatch_stub_817
+#define gl_dispatch_stub_818 mgl_dispatch_stub_818
+#define gl_dispatch_stub_819 mgl_dispatch_stub_819
+#define gl_dispatch_stub_855 mgl_dispatch_stub_855
+#define gl_dispatch_stub_879 mgl_dispatch_stub_879
+#define gl_dispatch_stub_880 mgl_dispatch_stub_880
+#define gl_dispatch_stub_881 mgl_dispatch_stub_881
+#define gl_dispatch_stub_882 mgl_dispatch_stub_882
+#define gl_dispatch_stub_883 mgl_dispatch_stub_883
+#define gl_dispatch_stub_884 mgl_dispatch_stub_884
+#define gl_dispatch_stub_897 mgl_dispatch_stub_897
+#define gl_dispatch_stub_898 mgl_dispatch_stub_898
+#define gl_dispatch_stub_899 mgl_dispatch_stub_899
+#define gl_dispatch_stub_900 mgl_dispatch_stub_900
+#define gl_dispatch_stub_901 mgl_dispatch_stub_901
+#define gl_dispatch_stub_902 mgl_dispatch_stub_902
+#define gl_dispatch_stub_903 mgl_dispatch_stub_903
+#define gl_dispatch_stub_904 mgl_dispatch_stub_904
+#define gl_dispatch_stub_905 mgl_dispatch_stub_905
+#define gl_dispatch_stub_906 mgl_dispatch_stub_906
+#define gl_dispatch_stub_907 mgl_dispatch_stub_907
+#define gl_dispatch_stub_908 mgl_dispatch_stub_908
+#define gl_dispatch_stub_909 mgl_dispatch_stub_909
+#define gl_dispatch_stub_910 mgl_dispatch_stub_910
+#define gl_dispatch_stub_911 mgl_dispatch_stub_911
+#define gl_dispatch_stub_912 mgl_dispatch_stub_912
+#define gl_dispatch_stub_913 mgl_dispatch_stub_913
+#define gl_dispatch_stub_914 mgl_dispatch_stub_914
+#define gl_dispatch_stub_915 mgl_dispatch_stub_915
+#define gl_dispatch_stub_916 mgl_dispatch_stub_916
+#define gl_dispatch_stub_917 mgl_dispatch_stub_917
+#define gl_dispatch_stub_918 mgl_dispatch_stub_918
+#define gl_dispatch_stub_919 mgl_dispatch_stub_919
+#define gl_dispatch_stub_920 mgl_dispatch_stub_920
+#define gl_dispatch_stub_921 mgl_dispatch_stub_921
+#define gl_dispatch_stub_922 mgl_dispatch_stub_922
+#define gl_dispatch_stub_923 mgl_dispatch_stub_923
+#define gl_dispatch_stub_924 mgl_dispatch_stub_924
+#define gl_dispatch_stub_925 mgl_dispatch_stub_925
+#define gl_dispatch_stub_926 mgl_dispatch_stub_926
+#define gl_dispatch_stub_927 mgl_dispatch_stub_927
+#define gl_dispatch_stub_928 mgl_dispatch_stub_928
+#define gl_dispatch_stub_929 mgl_dispatch_stub_929
+#define gl_dispatch_stub_930 mgl_dispatch_stub_930
+#define gl_dispatch_stub_931 mgl_dispatch_stub_931
+#define gl_dispatch_stub_932 mgl_dispatch_stub_932
+#define gl_dispatch_stub_933 mgl_dispatch_stub_933
+#define gl_dispatch_stub_934 mgl_dispatch_stub_934
+#define gl_dispatch_stub_935 mgl_dispatch_stub_935
+#define gl_dispatch_stub_936 mgl_dispatch_stub_936
+#define gl_dispatch_stub_937 mgl_dispatch_stub_937
+#define gl_dispatch_stub_938 mgl_dispatch_stub_938
+#define gl_dispatch_stub_939 mgl_dispatch_stub_939
+#define gl_dispatch_stub_940 mgl_dispatch_stub_940
+#define gl_dispatch_stub_941 mgl_dispatch_stub_941
+#define gl_dispatch_stub_942 mgl_dispatch_stub_942
+#define gl_dispatch_stub_943 mgl_dispatch_stub_943
+#define gl_dispatch_stub_944 mgl_dispatch_stub_944
+#define gl_dispatch_stub_945 mgl_dispatch_stub_945
+#define gl_dispatch_stub_946 mgl_dispatch_stub_946
+#define gl_dispatch_stub_947 mgl_dispatch_stub_947
+#define gl_dispatch_stub_948 mgl_dispatch_stub_948
+#define gl_dispatch_stub_949 mgl_dispatch_stub_949
+#define gl_dispatch_stub_950 mgl_dispatch_stub_950
+#define gl_dispatch_stub_951 mgl_dispatch_stub_951
+#define gl_dispatch_stub_952 mgl_dispatch_stub_952
+#define gl_dispatch_stub_953 mgl_dispatch_stub_953
+#define gl_dispatch_stub_954 mgl_dispatch_stub_954
+#define gl_dispatch_stub_955 mgl_dispatch_stub_955
+#define gl_dispatch_stub_956 mgl_dispatch_stub_956
+#define gl_dispatch_stub_957 mgl_dispatch_stub_957
+#define gl_dispatch_stub_958 mgl_dispatch_stub_958
+#define gl_dispatch_stub_959 mgl_dispatch_stub_959
+#define gl_dispatch_stub_960 mgl_dispatch_stub_960
+#define gl_dispatch_stub_961 mgl_dispatch_stub_961
+#define gl_dispatch_stub_962 mgl_dispatch_stub_962
+#define gl_dispatch_stub_963 mgl_dispatch_stub_963
+#define gl_dispatch_stub_964 mgl_dispatch_stub_964
+#define gl_dispatch_stub_965 mgl_dispatch_stub_965
+#define gl_dispatch_stub_966 mgl_dispatch_stub_966
+#define gl_dispatch_stub_967 mgl_dispatch_stub_967
+#define gl_dispatch_stub_968 mgl_dispatch_stub_968
+#define gl_dispatch_stub_969 mgl_dispatch_stub_969
+#define gl_dispatch_stub_970 mgl_dispatch_stub_970
+#define gl_dispatch_stub_971 mgl_dispatch_stub_971
+#define gl_dispatch_stub_972 mgl_dispatch_stub_972
+#define gl_dispatch_stub_973 mgl_dispatch_stub_973
+#define gl_dispatch_stub_974 mgl_dispatch_stub_974
+#define gl_dispatch_stub_975 mgl_dispatch_stub_975
+#define gl_dispatch_stub_976 mgl_dispatch_stub_976
+#define gl_dispatch_stub_977 mgl_dispatch_stub_977
+#define gl_dispatch_stub_978 mgl_dispatch_stub_978
+#define gl_dispatch_stub_979 mgl_dispatch_stub_979
+#define gl_dispatch_stub_980 mgl_dispatch_stub_980
+#define gl_dispatch_stub_981 mgl_dispatch_stub_981
+#define gl_dispatch_stub_982 mgl_dispatch_stub_982
+#define gl_dispatch_stub_983 mgl_dispatch_stub_983
+#define gl_dispatch_stub_984 mgl_dispatch_stub_984
+#define gl_dispatch_stub_985 mgl_dispatch_stub_985
+#define gl_dispatch_stub_986 mgl_dispatch_stub_986
+#define gl_dispatch_stub_987 mgl_dispatch_stub_987
+#define gl_dispatch_stub_988 mgl_dispatch_stub_988
+#define gl_dispatch_stub_989 mgl_dispatch_stub_989
+#define gl_dispatch_stub_990 mgl_dispatch_stub_990
+#define gl_dispatch_stub_991 mgl_dispatch_stub_991
+#define gl_dispatch_stub_992 mgl_dispatch_stub_992
+#define gl_dispatch_stub_993 mgl_dispatch_stub_993
+#define gl_dispatch_stub_994 mgl_dispatch_stub_994
+#define gl_dispatch_stub_1001 mgl_dispatch_stub_1001
+#define gl_dispatch_stub_1002 mgl_dispatch_stub_1002
#define gl_dispatch_stub_1003 mgl_dispatch_stub_1003
#define gl_dispatch_stub_1004 mgl_dispatch_stub_1004
#define gl_dispatch_stub_1005 mgl_dispatch_stub_1005
@@ -1897,10 +2030,10 @@ static const char gl_string_table[] =
#define gl_dispatch_stub_1007 mgl_dispatch_stub_1007
#define gl_dispatch_stub_1008 mgl_dispatch_stub_1008
#define gl_dispatch_stub_1009 mgl_dispatch_stub_1009
-#define gl_dispatch_stub_1010 mgl_dispatch_stub_1010
+#define gl_dispatch_stub_1011 mgl_dispatch_stub_1011
#define gl_dispatch_stub_1012 mgl_dispatch_stub_1012
#define gl_dispatch_stub_1013 mgl_dispatch_stub_1013
-#define gl_dispatch_stub_1014 mgl_dispatch_stub_1014
+#define gl_dispatch_stub_1020 mgl_dispatch_stub_1020
#define gl_dispatch_stub_1021 mgl_dispatch_stub_1021
#define gl_dispatch_stub_1022 mgl_dispatch_stub_1022
#define gl_dispatch_stub_1023 mgl_dispatch_stub_1023
@@ -1909,7 +2042,7 @@ static const char gl_string_table[] =
#define gl_dispatch_stub_1026 mgl_dispatch_stub_1026
#define gl_dispatch_stub_1027 mgl_dispatch_stub_1027
#define gl_dispatch_stub_1028 mgl_dispatch_stub_1028
-#define gl_dispatch_stub_1029 mgl_dispatch_stub_1029
+#define gl_dispatch_stub_1030 mgl_dispatch_stub_1030
#define gl_dispatch_stub_1031 mgl_dispatch_stub_1031
#define gl_dispatch_stub_1032 mgl_dispatch_stub_1032
#define gl_dispatch_stub_1033 mgl_dispatch_stub_1033
@@ -1959,20 +2092,136 @@ static const char gl_string_table[] =
#define gl_dispatch_stub_1077 mgl_dispatch_stub_1077
#define gl_dispatch_stub_1078 mgl_dispatch_stub_1078
#define gl_dispatch_stub_1079 mgl_dispatch_stub_1079
-#define gl_dispatch_stub_1080 mgl_dispatch_stub_1080
+#define gl_dispatch_stub_1081 mgl_dispatch_stub_1081
#define gl_dispatch_stub_1082 mgl_dispatch_stub_1082
-#define gl_dispatch_stub_1083 mgl_dispatch_stub_1083
+#define gl_dispatch_stub_1098 mgl_dispatch_stub_1098
+#define gl_dispatch_stub_1099 mgl_dispatch_stub_1099
+#define gl_dispatch_stub_1100 mgl_dispatch_stub_1100
+#define gl_dispatch_stub_1101 mgl_dispatch_stub_1101
+#define gl_dispatch_stub_1102 mgl_dispatch_stub_1102
+#define gl_dispatch_stub_1103 mgl_dispatch_stub_1103
+#define gl_dispatch_stub_1104 mgl_dispatch_stub_1104
+#define gl_dispatch_stub_1105 mgl_dispatch_stub_1105
+#define gl_dispatch_stub_1106 mgl_dispatch_stub_1106
+#define gl_dispatch_stub_1107 mgl_dispatch_stub_1107
#define gl_dispatch_stub_1108 mgl_dispatch_stub_1108
#define gl_dispatch_stub_1109 mgl_dispatch_stub_1109
+#define gl_dispatch_stub_1110 mgl_dispatch_stub_1110
+#define gl_dispatch_stub_1111 mgl_dispatch_stub_1111
+#define gl_dispatch_stub_1112 mgl_dispatch_stub_1112
+#define gl_dispatch_stub_1113 mgl_dispatch_stub_1113
+#define gl_dispatch_stub_1114 mgl_dispatch_stub_1114
+#define gl_dispatch_stub_1115 mgl_dispatch_stub_1115
+#define gl_dispatch_stub_1116 mgl_dispatch_stub_1116
+#define gl_dispatch_stub_1117 mgl_dispatch_stub_1117
+#define gl_dispatch_stub_1118 mgl_dispatch_stub_1118
+#define gl_dispatch_stub_1119 mgl_dispatch_stub_1119
+#define gl_dispatch_stub_1120 mgl_dispatch_stub_1120
+#define gl_dispatch_stub_1121 mgl_dispatch_stub_1121
+#define gl_dispatch_stub_1122 mgl_dispatch_stub_1122
+#define gl_dispatch_stub_1123 mgl_dispatch_stub_1123
+#define gl_dispatch_stub_1124 mgl_dispatch_stub_1124
+#define gl_dispatch_stub_1125 mgl_dispatch_stub_1125
+#define gl_dispatch_stub_1126 mgl_dispatch_stub_1126
+#define gl_dispatch_stub_1127 mgl_dispatch_stub_1127
+#define gl_dispatch_stub_1128 mgl_dispatch_stub_1128
+#define gl_dispatch_stub_1129 mgl_dispatch_stub_1129
+#define gl_dispatch_stub_1130 mgl_dispatch_stub_1130
+#define gl_dispatch_stub_1131 mgl_dispatch_stub_1131
+#define gl_dispatch_stub_1132 mgl_dispatch_stub_1132
+#define gl_dispatch_stub_1133 mgl_dispatch_stub_1133
+#define gl_dispatch_stub_1134 mgl_dispatch_stub_1134
+#define gl_dispatch_stub_1135 mgl_dispatch_stub_1135
+#define gl_dispatch_stub_1136 mgl_dispatch_stub_1136
+#define gl_dispatch_stub_1137 mgl_dispatch_stub_1137
+#define gl_dispatch_stub_1138 mgl_dispatch_stub_1138
+#define gl_dispatch_stub_1139 mgl_dispatch_stub_1139
+#define gl_dispatch_stub_1140 mgl_dispatch_stub_1140
+#define gl_dispatch_stub_1141 mgl_dispatch_stub_1141
+#define gl_dispatch_stub_1142 mgl_dispatch_stub_1142
+#define gl_dispatch_stub_1143 mgl_dispatch_stub_1143
+#define gl_dispatch_stub_1144 mgl_dispatch_stub_1144
+#define gl_dispatch_stub_1145 mgl_dispatch_stub_1145
+#define gl_dispatch_stub_1146 mgl_dispatch_stub_1146
+#define gl_dispatch_stub_1147 mgl_dispatch_stub_1147
+#define gl_dispatch_stub_1148 mgl_dispatch_stub_1148
+#define gl_dispatch_stub_1149 mgl_dispatch_stub_1149
+#define gl_dispatch_stub_1150 mgl_dispatch_stub_1150
+#define gl_dispatch_stub_1151 mgl_dispatch_stub_1151
+#define gl_dispatch_stub_1152 mgl_dispatch_stub_1152
+#define gl_dispatch_stub_1153 mgl_dispatch_stub_1153
+#define gl_dispatch_stub_1154 mgl_dispatch_stub_1154
+#define gl_dispatch_stub_1155 mgl_dispatch_stub_1155
+#define gl_dispatch_stub_1156 mgl_dispatch_stub_1156
+#define gl_dispatch_stub_1157 mgl_dispatch_stub_1157
+#define gl_dispatch_stub_1158 mgl_dispatch_stub_1158
+#define gl_dispatch_stub_1159 mgl_dispatch_stub_1159
+#define gl_dispatch_stub_1160 mgl_dispatch_stub_1160
+#define gl_dispatch_stub_1161 mgl_dispatch_stub_1161
+#define gl_dispatch_stub_1162 mgl_dispatch_stub_1162
+#define gl_dispatch_stub_1163 mgl_dispatch_stub_1163
+#define gl_dispatch_stub_1164 mgl_dispatch_stub_1164
+#define gl_dispatch_stub_1165 mgl_dispatch_stub_1165
+#define gl_dispatch_stub_1166 mgl_dispatch_stub_1166
+#define gl_dispatch_stub_1167 mgl_dispatch_stub_1167
+#define gl_dispatch_stub_1168 mgl_dispatch_stub_1168
+#define gl_dispatch_stub_1169 mgl_dispatch_stub_1169
+#define gl_dispatch_stub_1170 mgl_dispatch_stub_1170
+#define gl_dispatch_stub_1171 mgl_dispatch_stub_1171
+#define gl_dispatch_stub_1172 mgl_dispatch_stub_1172
+#define gl_dispatch_stub_1173 mgl_dispatch_stub_1173
+#define gl_dispatch_stub_1174 mgl_dispatch_stub_1174
+#define gl_dispatch_stub_1175 mgl_dispatch_stub_1175
+#define gl_dispatch_stub_1176 mgl_dispatch_stub_1176
+#define gl_dispatch_stub_1177 mgl_dispatch_stub_1177
+#define gl_dispatch_stub_1178 mgl_dispatch_stub_1178
+#define gl_dispatch_stub_1179 mgl_dispatch_stub_1179
+#define gl_dispatch_stub_1180 mgl_dispatch_stub_1180
+#define gl_dispatch_stub_1181 mgl_dispatch_stub_1181
+#define gl_dispatch_stub_1182 mgl_dispatch_stub_1182
#define gl_dispatch_stub_1183 mgl_dispatch_stub_1183
#define gl_dispatch_stub_1184 mgl_dispatch_stub_1184
#define gl_dispatch_stub_1185 mgl_dispatch_stub_1185
+#define gl_dispatch_stub_1186 mgl_dispatch_stub_1186
+#define gl_dispatch_stub_1187 mgl_dispatch_stub_1187
+#define gl_dispatch_stub_1188 mgl_dispatch_stub_1188
+#define gl_dispatch_stub_1189 mgl_dispatch_stub_1189
+#define gl_dispatch_stub_1190 mgl_dispatch_stub_1190
+#define gl_dispatch_stub_1192 mgl_dispatch_stub_1192
#define gl_dispatch_stub_1193 mgl_dispatch_stub_1193
#define gl_dispatch_stub_1194 mgl_dispatch_stub_1194
#define gl_dispatch_stub_1195 mgl_dispatch_stub_1195
-#define gl_dispatch_stub_1196 mgl_dispatch_stub_1196
+#define gl_dispatch_stub_1198 mgl_dispatch_stub_1198
#define gl_dispatch_stub_1199 mgl_dispatch_stub_1199
-#define gl_dispatch_stub_1200 mgl_dispatch_stub_1200
+#define gl_dispatch_stub_1216 mgl_dispatch_stub_1216
+#define gl_dispatch_stub_1217 mgl_dispatch_stub_1217
+#define gl_dispatch_stub_1218 mgl_dispatch_stub_1218
+#define gl_dispatch_stub_1219 mgl_dispatch_stub_1219
+#define gl_dispatch_stub_1220 mgl_dispatch_stub_1220
+#define gl_dispatch_stub_1221 mgl_dispatch_stub_1221
+#define gl_dispatch_stub_1222 mgl_dispatch_stub_1222
+#define gl_dispatch_stub_1223 mgl_dispatch_stub_1223
+#define gl_dispatch_stub_1224 mgl_dispatch_stub_1224
+#define gl_dispatch_stub_1225 mgl_dispatch_stub_1225
+#define gl_dispatch_stub_1226 mgl_dispatch_stub_1226
+#define gl_dispatch_stub_1227 mgl_dispatch_stub_1227
+#define gl_dispatch_stub_1228 mgl_dispatch_stub_1228
+#define gl_dispatch_stub_1229 mgl_dispatch_stub_1229
+#define gl_dispatch_stub_1230 mgl_dispatch_stub_1230
+#define gl_dispatch_stub_1231 mgl_dispatch_stub_1231
+#define gl_dispatch_stub_1232 mgl_dispatch_stub_1232
+#define gl_dispatch_stub_1233 mgl_dispatch_stub_1233
+#define gl_dispatch_stub_1235 mgl_dispatch_stub_1235
+#define gl_dispatch_stub_1236 mgl_dispatch_stub_1236
+#define gl_dispatch_stub_1237 mgl_dispatch_stub_1237
+#define gl_dispatch_stub_1238 mgl_dispatch_stub_1238
+#define gl_dispatch_stub_1239 mgl_dispatch_stub_1239
+#define gl_dispatch_stub_1240 mgl_dispatch_stub_1240
+#define gl_dispatch_stub_1241 mgl_dispatch_stub_1241
+#define gl_dispatch_stub_1242 mgl_dispatch_stub_1242
+#define gl_dispatch_stub_1243 mgl_dispatch_stub_1243
+#define gl_dispatch_stub_1244 mgl_dispatch_stub_1244
+#define gl_dispatch_stub_1245 mgl_dispatch_stub_1245
#define gl_dispatch_stub_1246 mgl_dispatch_stub_1246
#define gl_dispatch_stub_1247 mgl_dispatch_stub_1247
#define gl_dispatch_stub_1248 mgl_dispatch_stub_1248
@@ -1983,9 +2232,11 @@ static const char gl_string_table[] =
#define gl_dispatch_stub_1253 mgl_dispatch_stub_1253
#define gl_dispatch_stub_1254 mgl_dispatch_stub_1254
#define gl_dispatch_stub_1255 mgl_dispatch_stub_1255
+#define gl_dispatch_stub_1256 mgl_dispatch_stub_1256
#define gl_dispatch_stub_1257 mgl_dispatch_stub_1257
#define gl_dispatch_stub_1258 mgl_dispatch_stub_1258
#define gl_dispatch_stub_1259 mgl_dispatch_stub_1259
+#define gl_dispatch_stub_1260 mgl_dispatch_stub_1260
#endif /* USE_MGL_NAMESPACE */
@@ -2003,106 +2254,358 @@ void GLAPIENTRY gl_dispatch_stub_363(GLenum target, GLenum pname, GLint * params
void GLAPIENTRY gl_dispatch_stub_364(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values);
void GLAPIENTRY gl_dispatch_stub_365(GLenum target, GLenum pname, GLfloat * params);
void GLAPIENTRY gl_dispatch_stub_366(GLenum target, GLenum pname, GLint * params);
-void GLAPIENTRY gl_dispatch_stub_731(GLuint id, GLenum pname, GLint64 * params);
-void GLAPIENTRY gl_dispatch_stub_732(GLuint id, GLenum pname, GLuint64 * params);
-void GLAPIENTRY gl_dispatch_stub_733(GLuint id, GLenum target);
-void GLAPIENTRY gl_dispatch_stub_856(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params);
-void GLAPIENTRY gl_dispatch_stub_1003(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
-void GLAPIENTRY gl_dispatch_stub_1004(const GLfloat * coords);
-void GLAPIENTRY gl_dispatch_stub_1005(GLint x, GLint y, GLint z, GLint width, GLint height);
-void GLAPIENTRY gl_dispatch_stub_1006(const GLint * coords);
-void GLAPIENTRY gl_dispatch_stub_1007(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
-void GLAPIENTRY gl_dispatch_stub_1008(const GLshort * coords);
-void GLAPIENTRY gl_dispatch_stub_1009(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
-void GLAPIENTRY gl_dispatch_stub_1010(const GLfixed * coords);
-GLbitfield GLAPIENTRY gl_dispatch_stub_1012(GLfixed * mantissa, GLint * exponent);
-void GLAPIENTRY gl_dispatch_stub_1013(GLclampf value, GLboolean invert);
-void GLAPIENTRY gl_dispatch_stub_1014(GLenum pattern);
-void GLAPIENTRY gl_dispatch_stub_1021(GLenum target, GLsizei numAttachments, const GLenum * attachments);
-void GLAPIENTRY gl_dispatch_stub_1022(GLuint pipeline, GLuint program);
-void GLAPIENTRY gl_dispatch_stub_1023(GLuint pipeline);
-GLuint GLAPIENTRY gl_dispatch_stub_1024(GLenum type, GLsizei count, const GLchar * const * strings);
-void GLAPIENTRY gl_dispatch_stub_1025(GLsizei n, const GLuint * pipelines);
-void GLAPIENTRY gl_dispatch_stub_1026(GLsizei n, GLuint * pipelines);
-void GLAPIENTRY gl_dispatch_stub_1027(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog);
-void GLAPIENTRY gl_dispatch_stub_1028(GLuint pipeline, GLenum pname, GLint * params);
-GLboolean GLAPIENTRY gl_dispatch_stub_1029(GLuint pipeline);
-void GLAPIENTRY gl_dispatch_stub_1031(GLuint program, GLint location, GLdouble x);
-void GLAPIENTRY gl_dispatch_stub_1032(GLuint program, GLint location, GLsizei count, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1033(GLuint program, GLint location, GLfloat x);
-void GLAPIENTRY gl_dispatch_stub_1034(GLuint program, GLint location, GLsizei count, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1035(GLuint program, GLint location, GLint x);
-void GLAPIENTRY gl_dispatch_stub_1036(GLuint program, GLint location, GLsizei count, const GLint * value);
-void GLAPIENTRY gl_dispatch_stub_1037(GLuint program, GLint location, GLuint x);
-void GLAPIENTRY gl_dispatch_stub_1038(GLuint program, GLint location, GLsizei count, const GLuint * value);
-void GLAPIENTRY gl_dispatch_stub_1039(GLuint program, GLint location, GLdouble x, GLdouble y);
-void GLAPIENTRY gl_dispatch_stub_1040(GLuint program, GLint location, GLsizei count, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1041(GLuint program, GLint location, GLfloat x, GLfloat y);
-void GLAPIENTRY gl_dispatch_stub_1042(GLuint program, GLint location, GLsizei count, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1043(GLuint program, GLint location, GLint x, GLint y);
-void GLAPIENTRY gl_dispatch_stub_1044(GLuint program, GLint location, GLsizei count, const GLint * value);
-void GLAPIENTRY gl_dispatch_stub_1045(GLuint program, GLint location, GLuint x, GLuint y);
-void GLAPIENTRY gl_dispatch_stub_1046(GLuint program, GLint location, GLsizei count, const GLuint * value);
-void GLAPIENTRY gl_dispatch_stub_1047(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
-void GLAPIENTRY gl_dispatch_stub_1048(GLuint program, GLint location, GLsizei count, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1049(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z);
-void GLAPIENTRY gl_dispatch_stub_1050(GLuint program, GLint location, GLsizei count, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1051(GLuint program, GLint location, GLint x, GLint y, GLint z);
-void GLAPIENTRY gl_dispatch_stub_1052(GLuint program, GLint location, GLsizei count, const GLint * value);
-void GLAPIENTRY gl_dispatch_stub_1053(GLuint program, GLint location, GLuint x, GLuint y, GLuint z);
-void GLAPIENTRY gl_dispatch_stub_1054(GLuint program, GLint location, GLsizei count, const GLuint * value);
-void GLAPIENTRY gl_dispatch_stub_1055(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
-void GLAPIENTRY gl_dispatch_stub_1056(GLuint program, GLint location, GLsizei count, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1057(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-void GLAPIENTRY gl_dispatch_stub_1058(GLuint program, GLint location, GLsizei count, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1059(GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w);
-void GLAPIENTRY gl_dispatch_stub_1060(GLuint program, GLint location, GLsizei count, const GLint * value);
-void GLAPIENTRY gl_dispatch_stub_1061(GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w);
-void GLAPIENTRY gl_dispatch_stub_1062(GLuint program, GLint location, GLsizei count, const GLuint * value);
-void GLAPIENTRY gl_dispatch_stub_1063(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1064(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1065(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1066(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1067(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1068(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1069(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1070(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1071(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1072(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1073(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1074(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1075(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1076(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1077(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1078(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1079(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
-void GLAPIENTRY gl_dispatch_stub_1080(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
-void GLAPIENTRY gl_dispatch_stub_1082(GLuint pipeline, GLbitfield stages, GLuint program);
-void GLAPIENTRY gl_dispatch_stub_1083(GLuint pipeline);
-void GLAPIENTRY gl_dispatch_stub_1108(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
-void GLAPIENTRY gl_dispatch_stub_1109(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
-void GLAPIENTRY gl_dispatch_stub_1183(GLenum face);
-void GLAPIENTRY gl_dispatch_stub_1184(GLuint array);
-void GLAPIENTRY gl_dispatch_stub_1185(GLsizei n, GLuint * arrays);
-void GLAPIENTRY gl_dispatch_stub_1193(GLenum coord, GLenum pname, GLfixed * params);
-void GLAPIENTRY gl_dispatch_stub_1194(GLenum coord, GLenum pname, GLint param);
-void GLAPIENTRY gl_dispatch_stub_1195(GLenum coord, GLenum pname, const GLfixed * params);
-void GLAPIENTRY gl_dispatch_stub_1196(GLclampd zmin, GLclampd zmax);
-void GLAPIENTRY gl_dispatch_stub_1199(GLenum target, GLenum pname, GLint param);
-void GLAPIENTRY gl_dispatch_stub_1200(GLenum target, GLintptr offset, GLsizeiptr size);
-void GLAPIENTRY gl_dispatch_stub_1246(GLuint queryHandle);
-void GLAPIENTRY gl_dispatch_stub_1247(GLuint queryId, GLuint * queryHandle);
+void GLAPIENTRY gl_dispatch_stub_730(GLuint id, GLenum pname, GLint64 * params);
+void GLAPIENTRY gl_dispatch_stub_731(GLuint id, GLenum pname, GLuint64 * params);
+void GLAPIENTRY gl_dispatch_stub_732(GLuint id, GLenum target);
+void GLAPIENTRY gl_dispatch_stub_773(GLuint program, GLint location, GLdouble * params);
+void GLAPIENTRY gl_dispatch_stub_774(GLint location, GLdouble x);
+void GLAPIENTRY gl_dispatch_stub_775(GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_776(GLint location, GLdouble x, GLdouble y);
+void GLAPIENTRY gl_dispatch_stub_777(GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_778(GLint location, GLdouble x, GLdouble y, GLdouble z);
+void GLAPIENTRY gl_dispatch_stub_779(GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_780(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+void GLAPIENTRY gl_dispatch_stub_781(GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_782(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_783(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_784(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_785(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_786(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_787(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_788(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_789(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_790(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_810(GLuint index, GLenum pname, GLdouble * params);
+void GLAPIENTRY gl_dispatch_stub_811(GLuint index, GLdouble x);
+void GLAPIENTRY gl_dispatch_stub_812(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_813(GLuint index, GLdouble x, GLdouble y);
+void GLAPIENTRY gl_dispatch_stub_814(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_815(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+void GLAPIENTRY gl_dispatch_stub_816(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_817(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+void GLAPIENTRY gl_dispatch_stub_818(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_819(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
+void GLAPIENTRY gl_dispatch_stub_855(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_879(GLuint program, GLenum programInterface, GLenum pname, GLint * params);
+GLuint GLAPIENTRY gl_dispatch_stub_880(GLuint program, GLenum programInterface, const GLchar * name);
+GLint GLAPIENTRY gl_dispatch_stub_881(GLuint program, GLenum programInterface, const GLchar * name);
+GLint GLAPIENTRY gl_dispatch_stub_882(GLuint program, GLenum programInterface, const GLchar * name);
+void GLAPIENTRY gl_dispatch_stub_883(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name);
+void GLAPIENTRY gl_dispatch_stub_884(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_897(GLenum origin, GLenum depth);
+void GLAPIENTRY gl_dispatch_stub_898(GLuint unit, GLuint texture);
+void GLAPIENTRY gl_dispatch_stub_899(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLenum GLAPIENTRY gl_dispatch_stub_900(GLuint framebuffer, GLenum target);
+void GLAPIENTRY gl_dispatch_stub_901(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_902(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_903(GLuint framebuffer, GLenum buffer, GLfloat depth, GLint stencil);
+void GLAPIENTRY gl_dispatch_stub_904(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_905(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value);
+void GLAPIENTRY gl_dispatch_stub_906(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value);
+void GLAPIENTRY gl_dispatch_stub_907(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_908(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_909(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_910(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void GLAPIENTRY gl_dispatch_stub_911(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+void GLAPIENTRY gl_dispatch_stub_912(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void GLAPIENTRY gl_dispatch_stub_913(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void GLAPIENTRY gl_dispatch_stub_914(GLsizei n, GLuint * buffers);
+void GLAPIENTRY gl_dispatch_stub_915(GLsizei n, GLuint * framebuffers);
+void GLAPIENTRY gl_dispatch_stub_916(GLsizei n, GLuint * pipelines);
+void GLAPIENTRY gl_dispatch_stub_917(GLenum target, GLsizei n, GLuint * ids);
+void GLAPIENTRY gl_dispatch_stub_918(GLsizei n, GLuint * renderbuffers);
+void GLAPIENTRY gl_dispatch_stub_919(GLsizei n, GLuint * samplers);
+void GLAPIENTRY gl_dispatch_stub_920(GLenum target, GLsizei n, GLuint * textures);
+void GLAPIENTRY gl_dispatch_stub_921(GLsizei n, GLuint * ids);
+void GLAPIENTRY gl_dispatch_stub_922(GLsizei n, GLuint * arrays);
+void GLAPIENTRY gl_dispatch_stub_923(GLuint vaobj, GLuint index);
+void GLAPIENTRY gl_dispatch_stub_924(GLuint vaobj, GLuint index);
+void GLAPIENTRY gl_dispatch_stub_925(GLuint buffer, GLintptr offset, GLsizeiptr length);
+void GLAPIENTRY gl_dispatch_stub_926(GLuint texture);
+void GLAPIENTRY gl_dispatch_stub_927(GLuint texture, GLint level, GLsizei bufSize, GLvoid * pixels);
+void GLAPIENTRY gl_dispatch_stub_928(GLuint buffer, GLenum pname, GLint64 * params);
+void GLAPIENTRY gl_dispatch_stub_929(GLuint buffer, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_930(GLuint buffer, GLenum pname, GLvoid ** params);
+void GLAPIENTRY gl_dispatch_stub_931(GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_932(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_933(GLuint framebuffer, GLenum pname, GLint * param);
+void GLAPIENTRY gl_dispatch_stub_934(GLuint renderbuffer, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_935(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+void GLAPIENTRY gl_dispatch_stub_936(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+void GLAPIENTRY gl_dispatch_stub_937(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+void GLAPIENTRY gl_dispatch_stub_938(GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+void GLAPIENTRY gl_dispatch_stub_939(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * pixels);
+void GLAPIENTRY gl_dispatch_stub_940(GLuint texture, GLint level, GLenum pname, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_941(GLuint texture, GLint level, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_942(GLuint texture, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_943(GLuint texture, GLenum pname, GLuint * params);
+void GLAPIENTRY gl_dispatch_stub_944(GLuint texture, GLenum pname, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_945(GLuint texture, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_946(GLuint xfb, GLenum pname, GLuint index, GLint64 * param);
+void GLAPIENTRY gl_dispatch_stub_947(GLuint xfb, GLenum pname, GLuint index, GLint * param);
+void GLAPIENTRY gl_dispatch_stub_948(GLuint xfb, GLenum pname, GLint * param);
+void GLAPIENTRY gl_dispatch_stub_949(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param);
+void GLAPIENTRY gl_dispatch_stub_950(GLuint vaobj, GLuint index, GLenum pname, GLint * param);
+void GLAPIENTRY gl_dispatch_stub_951(GLuint vaobj, GLenum pname, GLint * param);
+void GLAPIENTRY gl_dispatch_stub_952(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments);
+void GLAPIENTRY gl_dispatch_stub_953(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLvoid * GLAPIENTRY gl_dispatch_stub_954(GLuint buffer, GLenum access);
+GLvoid * GLAPIENTRY gl_dispatch_stub_955(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+void GLAPIENTRY gl_dispatch_stub_956(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage);
+void GLAPIENTRY gl_dispatch_stub_957(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLbitfield flags);
+void GLAPIENTRY gl_dispatch_stub_958(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_959(GLuint framebuffer, GLenum buf);
+void GLAPIENTRY gl_dispatch_stub_960(GLuint framebuffer, GLsizei n, const GLenum * bufs);
+void GLAPIENTRY gl_dispatch_stub_961(GLuint framebuffer, GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_962(GLuint framebuffer, GLenum buf);
+void GLAPIENTRY gl_dispatch_stub_963(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+void GLAPIENTRY gl_dispatch_stub_964(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+void GLAPIENTRY gl_dispatch_stub_965(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+void GLAPIENTRY gl_dispatch_stub_966(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+void GLAPIENTRY gl_dispatch_stub_967(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+void GLAPIENTRY gl_dispatch_stub_968(GLuint texture, GLenum internalformat, GLuint buffer);
+void GLAPIENTRY gl_dispatch_stub_969(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+void GLAPIENTRY gl_dispatch_stub_970(GLuint texture, GLenum pname, const GLint * params);
+void GLAPIENTRY gl_dispatch_stub_971(GLuint texture, GLenum pname, const GLuint * params);
+void GLAPIENTRY gl_dispatch_stub_972(GLuint texture, GLenum pname, GLfloat param);
+void GLAPIENTRY gl_dispatch_stub_973(GLuint texture, GLenum pname, const GLfloat * param);
+void GLAPIENTRY gl_dispatch_stub_974(GLuint texture, GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_975(GLuint texture, GLenum pname, const GLint * param);
+void GLAPIENTRY gl_dispatch_stub_976(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+void GLAPIENTRY gl_dispatch_stub_977(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+void GLAPIENTRY gl_dispatch_stub_978(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+void GLAPIENTRY gl_dispatch_stub_979(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+void GLAPIENTRY gl_dispatch_stub_980(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+void GLAPIENTRY gl_dispatch_stub_981(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels);
+void GLAPIENTRY gl_dispatch_stub_982(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels);
+void GLAPIENTRY gl_dispatch_stub_983(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels);
+void GLAPIENTRY gl_dispatch_stub_984(GLuint xfb, GLuint index, GLuint buffer);
+void GLAPIENTRY gl_dispatch_stub_985(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLboolean GLAPIENTRY gl_dispatch_stub_986(GLuint buffer);
+void GLAPIENTRY gl_dispatch_stub_987(GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+void GLAPIENTRY gl_dispatch_stub_988(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+void GLAPIENTRY gl_dispatch_stub_989(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+void GLAPIENTRY gl_dispatch_stub_990(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+void GLAPIENTRY gl_dispatch_stub_991(GLuint vaobj, GLuint bindingindex, GLuint divisor);
+void GLAPIENTRY gl_dispatch_stub_992(GLuint vaobj, GLuint buffer);
+void GLAPIENTRY gl_dispatch_stub_993(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+void GLAPIENTRY gl_dispatch_stub_994(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides);
+void GLAPIENTRY gl_dispatch_stub_1001(GLfloat factor, GLfloat bias);
+void GLAPIENTRY gl_dispatch_stub_1002(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
+void GLAPIENTRY gl_dispatch_stub_1003(const GLfloat * coords);
+void GLAPIENTRY gl_dispatch_stub_1004(GLint x, GLint y, GLint z, GLint width, GLint height);
+void GLAPIENTRY gl_dispatch_stub_1005(const GLint * coords);
+void GLAPIENTRY gl_dispatch_stub_1006(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
+void GLAPIENTRY gl_dispatch_stub_1007(const GLshort * coords);
+void GLAPIENTRY gl_dispatch_stub_1008(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
+void GLAPIENTRY gl_dispatch_stub_1009(const GLfixed * coords);
+GLbitfield GLAPIENTRY gl_dispatch_stub_1011(GLfixed * mantissa, GLint * exponent);
+void GLAPIENTRY gl_dispatch_stub_1012(GLclampf value, GLboolean invert);
+void GLAPIENTRY gl_dispatch_stub_1013(GLenum pattern);
+void GLAPIENTRY gl_dispatch_stub_1020(GLenum target, GLsizei numAttachments, const GLenum * attachments);
+void GLAPIENTRY gl_dispatch_stub_1021(GLuint pipeline, GLuint program);
+void GLAPIENTRY gl_dispatch_stub_1022(GLuint pipeline);
+GLuint GLAPIENTRY gl_dispatch_stub_1023(GLenum type, GLsizei count, const GLchar * const * strings);
+void GLAPIENTRY gl_dispatch_stub_1024(GLsizei n, const GLuint * pipelines);
+void GLAPIENTRY gl_dispatch_stub_1025(GLsizei n, GLuint * pipelines);
+void GLAPIENTRY gl_dispatch_stub_1026(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog);
+void GLAPIENTRY gl_dispatch_stub_1027(GLuint pipeline, GLenum pname, GLint * params);
+GLboolean GLAPIENTRY gl_dispatch_stub_1028(GLuint pipeline);
+void GLAPIENTRY gl_dispatch_stub_1030(GLuint program, GLint location, GLdouble x);
+void GLAPIENTRY gl_dispatch_stub_1031(GLuint program, GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1032(GLuint program, GLint location, GLfloat x);
+void GLAPIENTRY gl_dispatch_stub_1033(GLuint program, GLint location, GLsizei count, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1034(GLuint program, GLint location, GLint x);
+void GLAPIENTRY gl_dispatch_stub_1035(GLuint program, GLint location, GLsizei count, const GLint * value);
+void GLAPIENTRY gl_dispatch_stub_1036(GLuint program, GLint location, GLuint x);
+void GLAPIENTRY gl_dispatch_stub_1037(GLuint program, GLint location, GLsizei count, const GLuint * value);
+void GLAPIENTRY gl_dispatch_stub_1038(GLuint program, GLint location, GLdouble x, GLdouble y);
+void GLAPIENTRY gl_dispatch_stub_1039(GLuint program, GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1040(GLuint program, GLint location, GLfloat x, GLfloat y);
+void GLAPIENTRY gl_dispatch_stub_1041(GLuint program, GLint location, GLsizei count, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1042(GLuint program, GLint location, GLint x, GLint y);
+void GLAPIENTRY gl_dispatch_stub_1043(GLuint program, GLint location, GLsizei count, const GLint * value);
+void GLAPIENTRY gl_dispatch_stub_1044(GLuint program, GLint location, GLuint x, GLuint y);
+void GLAPIENTRY gl_dispatch_stub_1045(GLuint program, GLint location, GLsizei count, const GLuint * value);
+void GLAPIENTRY gl_dispatch_stub_1046(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+void GLAPIENTRY gl_dispatch_stub_1047(GLuint program, GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1048(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z);
+void GLAPIENTRY gl_dispatch_stub_1049(GLuint program, GLint location, GLsizei count, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1050(GLuint program, GLint location, GLint x, GLint y, GLint z);
+void GLAPIENTRY gl_dispatch_stub_1051(GLuint program, GLint location, GLsizei count, const GLint * value);
+void GLAPIENTRY gl_dispatch_stub_1052(GLuint program, GLint location, GLuint x, GLuint y, GLuint z);
+void GLAPIENTRY gl_dispatch_stub_1053(GLuint program, GLint location, GLsizei count, const GLuint * value);
+void GLAPIENTRY gl_dispatch_stub_1054(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+void GLAPIENTRY gl_dispatch_stub_1055(GLuint program, GLint location, GLsizei count, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1056(GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+void GLAPIENTRY gl_dispatch_stub_1057(GLuint program, GLint location, GLsizei count, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1058(GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w);
+void GLAPIENTRY gl_dispatch_stub_1059(GLuint program, GLint location, GLsizei count, const GLint * value);
+void GLAPIENTRY gl_dispatch_stub_1060(GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w);
+void GLAPIENTRY gl_dispatch_stub_1061(GLuint program, GLint location, GLsizei count, const GLuint * value);
+void GLAPIENTRY gl_dispatch_stub_1062(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1063(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1064(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1065(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1066(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1067(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1068(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1069(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1070(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1071(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1072(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1073(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1074(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1075(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1076(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1077(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1078(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value);
+void GLAPIENTRY gl_dispatch_stub_1079(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1081(GLuint pipeline, GLbitfield stages, GLuint program);
+void GLAPIENTRY gl_dispatch_stub_1082(GLuint pipeline);
+void GLAPIENTRY gl_dispatch_stub_1098(void);
+void GLAPIENTRY gl_dispatch_stub_1099(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+void GLAPIENTRY gl_dispatch_stub_1100(const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1101(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+void GLAPIENTRY gl_dispatch_stub_1102(const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1103(GLint x, GLint y, GLint z, GLint w);
+void GLAPIENTRY gl_dispatch_stub_1104(const GLint * v);
+void GLAPIENTRY gl_dispatch_stub_1105(GLshort x, GLshort y, GLshort z, GLshort w);
+void GLAPIENTRY gl_dispatch_stub_1106(const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1107(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
+void GLAPIENTRY gl_dispatch_stub_1108(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
+GLboolean GLAPIENTRY gl_dispatch_stub_1109(GLsizei n, const GLuint * ids, GLboolean * residences);
+void GLAPIENTRY gl_dispatch_stub_1110(GLenum target, GLuint id, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_1111(GLenum target, GLuint index, GLenum pname, GLdouble * params);
+void GLAPIENTRY gl_dispatch_stub_1112(GLenum target, GLuint index, GLenum pname, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_1113(GLuint id, GLenum pname, GLubyte * program);
+void GLAPIENTRY gl_dispatch_stub_1114(GLuint id, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_1115(GLenum target, GLuint address, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_1116(GLuint index, GLenum pname, GLdouble * params);
+void GLAPIENTRY gl_dispatch_stub_1117(GLuint index, GLenum pname, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_1118(GLuint index, GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_1119(GLenum target, GLuint id, GLsizei len, const GLubyte * program);
+void GLAPIENTRY gl_dispatch_stub_1120(GLenum target, GLuint index, GLsizei num, const GLdouble * params);
+void GLAPIENTRY gl_dispatch_stub_1121(GLenum target, GLuint index, GLsizei num, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_1122(GLsizei n, const GLuint * ids);
+void GLAPIENTRY gl_dispatch_stub_1123(GLenum target, GLuint address, GLenum matrix, GLenum transform);
+void GLAPIENTRY gl_dispatch_stub_1124(GLuint index, GLdouble x);
+void GLAPIENTRY gl_dispatch_stub_1125(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1126(GLuint index, GLfloat x);
+void GLAPIENTRY gl_dispatch_stub_1127(GLuint index, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1128(GLuint index, GLshort x);
+void GLAPIENTRY gl_dispatch_stub_1129(GLuint index, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1130(GLuint index, GLdouble x, GLdouble y);
+void GLAPIENTRY gl_dispatch_stub_1131(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1132(GLuint index, GLfloat x, GLfloat y);
+void GLAPIENTRY gl_dispatch_stub_1133(GLuint index, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1134(GLuint index, GLshort x, GLshort y);
+void GLAPIENTRY gl_dispatch_stub_1135(GLuint index, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1136(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+void GLAPIENTRY gl_dispatch_stub_1137(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1138(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+void GLAPIENTRY gl_dispatch_stub_1139(GLuint index, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1140(GLuint index, GLshort x, GLshort y, GLshort z);
+void GLAPIENTRY gl_dispatch_stub_1141(GLuint index, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1142(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+void GLAPIENTRY gl_dispatch_stub_1143(GLuint index, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1144(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+void GLAPIENTRY gl_dispatch_stub_1145(GLuint index, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1146(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+void GLAPIENTRY gl_dispatch_stub_1147(GLuint index, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1148(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+void GLAPIENTRY gl_dispatch_stub_1149(GLuint index, const GLubyte * v);
+void GLAPIENTRY gl_dispatch_stub_1150(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
+void GLAPIENTRY gl_dispatch_stub_1151(GLuint index, GLsizei n, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1152(GLuint index, GLsizei n, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1153(GLuint index, GLsizei n, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1154(GLuint index, GLsizei n, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1155(GLuint index, GLsizei n, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1156(GLuint index, GLsizei n, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1157(GLuint index, GLsizei n, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1158(GLuint index, GLsizei n, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1159(GLuint index, GLsizei n, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1160(GLuint index, GLsizei n, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1161(GLuint index, GLsizei n, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1162(GLuint index, GLsizei n, const GLshort * v);
+void GLAPIENTRY gl_dispatch_stub_1163(GLuint index, GLsizei n, const GLubyte * v);
+void GLAPIENTRY gl_dispatch_stub_1164(GLenum pname, GLfloat * param);
+void GLAPIENTRY gl_dispatch_stub_1165(GLenum pname, GLint * param);
+void GLAPIENTRY gl_dispatch_stub_1166(GLenum pname, const GLfloat * param);
+void GLAPIENTRY gl_dispatch_stub_1167(GLenum pname, const GLint * param);
+void GLAPIENTRY gl_dispatch_stub_1168(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+void GLAPIENTRY gl_dispatch_stub_1169(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+void GLAPIENTRY gl_dispatch_stub_1170(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+void GLAPIENTRY gl_dispatch_stub_1171(void);
+void GLAPIENTRY gl_dispatch_stub_1172(GLuint id);
+void GLAPIENTRY gl_dispatch_stub_1173(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+void GLAPIENTRY gl_dispatch_stub_1174(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+void GLAPIENTRY gl_dispatch_stub_1175(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+void GLAPIENTRY gl_dispatch_stub_1176(GLuint id);
+void GLAPIENTRY gl_dispatch_stub_1177(void);
+GLuint GLAPIENTRY gl_dispatch_stub_1178(GLuint range);
+void GLAPIENTRY gl_dispatch_stub_1179(GLuint dst, GLuint coord, GLenum swizzle);
+void GLAPIENTRY gl_dispatch_stub_1180(GLuint dst, GLuint interp, GLenum swizzle);
+void GLAPIENTRY gl_dispatch_stub_1181(GLuint dst, const GLfloat * value);
+void GLAPIENTRY gl_dispatch_stub_1182(GLenum face);
+void GLAPIENTRY gl_dispatch_stub_1183(GLuint array);
+void GLAPIENTRY gl_dispatch_stub_1184(GLsizei n, GLuint * arrays);
+void GLAPIENTRY gl_dispatch_stub_1185(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params);
+void GLAPIENTRY gl_dispatch_stub_1186(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_1187(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+void GLAPIENTRY gl_dispatch_stub_1188(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v);
+void GLAPIENTRY gl_dispatch_stub_1189(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+void GLAPIENTRY gl_dispatch_stub_1190(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v);
+void GLAPIENTRY gl_dispatch_stub_1192(GLenum coord, GLenum pname, GLfixed * params);
+void GLAPIENTRY gl_dispatch_stub_1193(GLenum coord, GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_1194(GLenum coord, GLenum pname, const GLfixed * params);
+void GLAPIENTRY gl_dispatch_stub_1195(GLclampd zmin, GLclampd zmax);
+void GLAPIENTRY gl_dispatch_stub_1198(GLenum target, GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_1199(GLenum target, GLintptr offset, GLsizeiptr size);
+void GLAPIENTRY gl_dispatch_stub_1216(GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+void GLAPIENTRY gl_dispatch_stub_1217(GLuint monitor);
+void GLAPIENTRY gl_dispatch_stub_1218(GLsizei n, GLuint * monitors);
+void GLAPIENTRY gl_dispatch_stub_1219(GLuint monitor);
+void GLAPIENTRY gl_dispatch_stub_1220(GLsizei n, GLuint * monitors);
+void GLAPIENTRY gl_dispatch_stub_1221(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten);
+void GLAPIENTRY gl_dispatch_stub_1222(GLuint group, GLuint counter, GLenum pname, GLvoid * data);
+void GLAPIENTRY gl_dispatch_stub_1223(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString);
+void GLAPIENTRY gl_dispatch_stub_1224(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei countersSize, GLuint * counters);
+void GLAPIENTRY gl_dispatch_stub_1225(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString);
+void GLAPIENTRY gl_dispatch_stub_1226(GLint * numGroups, GLsizei groupsSize, GLuint * groups);
+void GLAPIENTRY gl_dispatch_stub_1227(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList);
+void GLAPIENTRY gl_dispatch_stub_1228(GLenum objectType, GLuint name, GLenum pname, GLint * value);
+GLenum GLAPIENTRY gl_dispatch_stub_1229(GLenum objectType, GLuint name, GLenum option);
+GLenum GLAPIENTRY gl_dispatch_stub_1230(GLenum objectType, GLuint name, GLenum option);
+void GLAPIENTRY gl_dispatch_stub_1231(GLuint program);
+GLuint GLAPIENTRY gl_dispatch_stub_1232(GLenum type, const GLchar * string);
+void GLAPIENTRY gl_dispatch_stub_1233(GLenum type, GLuint program);
+void GLAPIENTRY gl_dispatch_stub_1235(void);
+void GLAPIENTRY gl_dispatch_stub_1236(GLintptr surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values);
+void GLAPIENTRY gl_dispatch_stub_1237(const GLvoid * vdpDevice, const GLvoid * getProcAddress);
+GLboolean GLAPIENTRY gl_dispatch_stub_1238(GLintptr surface);
+void GLAPIENTRY gl_dispatch_stub_1239(GLsizei numSurfaces, const GLintptr * surfaces);
+GLintptr GLAPIENTRY gl_dispatch_stub_1240(const GLvoid * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames);
+GLintptr GLAPIENTRY gl_dispatch_stub_1241(const GLvoid * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames);
+void GLAPIENTRY gl_dispatch_stub_1242(GLintptr surface, GLenum access);
+void GLAPIENTRY gl_dispatch_stub_1243(GLsizei numSurfaces, const GLintptr * surfaces);
+void GLAPIENTRY gl_dispatch_stub_1244(GLintptr surface);
+void GLAPIENTRY gl_dispatch_stub_1245(GLuint queryHandle);
+void GLAPIENTRY gl_dispatch_stub_1246(GLuint queryId, GLuint * queryHandle);
+void GLAPIENTRY gl_dispatch_stub_1247(GLuint queryHandle);
void GLAPIENTRY gl_dispatch_stub_1248(GLuint queryHandle);
-void GLAPIENTRY gl_dispatch_stub_1249(GLuint queryHandle);
-void GLAPIENTRY gl_dispatch_stub_1250(GLuint * queryId);
-void GLAPIENTRY gl_dispatch_stub_1251(GLuint queryId, GLuint * nextQueryId);
-void GLAPIENTRY gl_dispatch_stub_1252(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue);
-void GLAPIENTRY gl_dispatch_stub_1253(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten);
-void GLAPIENTRY gl_dispatch_stub_1254(GLchar * queryName, GLuint * queryId);
-void GLAPIENTRY gl_dispatch_stub_1255(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask);
-void GLAPIENTRY gl_dispatch_stub_1257(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+void GLAPIENTRY gl_dispatch_stub_1249(GLuint * queryId);
+void GLAPIENTRY gl_dispatch_stub_1250(GLuint queryId, GLuint * nextQueryId);
+void GLAPIENTRY gl_dispatch_stub_1251(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue);
+void GLAPIENTRY gl_dispatch_stub_1252(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten);
+void GLAPIENTRY gl_dispatch_stub_1253(GLchar * queryName, GLuint * queryId);
+void GLAPIENTRY gl_dispatch_stub_1254(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask);
+void GLAPIENTRY gl_dispatch_stub_1255(GLfloat factor, GLfloat units, GLfloat clamp);
+void GLAPIENTRY gl_dispatch_stub_1256(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+void GLAPIENTRY gl_dispatch_stub_1257(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
void GLAPIENTRY gl_dispatch_stub_1258(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_1259(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_1259(GLenum target, GLvoid * writeOffset);
+void GLAPIENTRY gl_dispatch_stub_1260(GLenum target, GLvoid * writeOffset);
#endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */
static const glprocs_table_t static_functions[] = {
@@ -2786,1143 +3289,1142 @@ static const glprocs_table_t static_functions[] = {
NAME_FUNC_OFFSET(10747, glIsRenderbuffer, glIsRenderbuffer, NULL, 677),
NAME_FUNC_OFFSET(10764, glRenderbufferStorage, glRenderbufferStorage, NULL, 678),
NAME_FUNC_OFFSET(10786, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 679),
- NAME_FUNC_OFFSET(10819, glFramebufferTextureFaceARB, glFramebufferTextureFaceARB, NULL, 680),
- NAME_FUNC_OFFSET(10847, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 681),
- NAME_FUNC_OFFSET(10872, glMapBufferRange, glMapBufferRange, NULL, 682),
- NAME_FUNC_OFFSET(10889, glBindVertexArray, glBindVertexArray, NULL, 683),
- NAME_FUNC_OFFSET(10907, glDeleteVertexArrays, glDeleteVertexArrays, NULL, 684),
- NAME_FUNC_OFFSET(10928, glGenVertexArrays, glGenVertexArrays, NULL, 685),
- NAME_FUNC_OFFSET(10946, glIsVertexArray, glIsVertexArray, NULL, 686),
- NAME_FUNC_OFFSET(10962, glGetActiveUniformBlockName, glGetActiveUniformBlockName, NULL, 687),
- NAME_FUNC_OFFSET(10990, glGetActiveUniformBlockiv, glGetActiveUniformBlockiv, NULL, 688),
- NAME_FUNC_OFFSET(11016, glGetActiveUniformName, glGetActiveUniformName, NULL, 689),
- NAME_FUNC_OFFSET(11039, glGetActiveUniformsiv, glGetActiveUniformsiv, NULL, 690),
- NAME_FUNC_OFFSET(11061, glGetUniformBlockIndex, glGetUniformBlockIndex, NULL, 691),
- NAME_FUNC_OFFSET(11084, glGetUniformIndices, glGetUniformIndices, NULL, 692),
- NAME_FUNC_OFFSET(11104, glUniformBlockBinding, glUniformBlockBinding, NULL, 693),
- NAME_FUNC_OFFSET(11126, glCopyBufferSubData, glCopyBufferSubData, NULL, 694),
- NAME_FUNC_OFFSET(11146, glClientWaitSync, glClientWaitSync, NULL, 695),
- NAME_FUNC_OFFSET(11163, glDeleteSync, glDeleteSync, NULL, 696),
- NAME_FUNC_OFFSET(11176, glFenceSync, glFenceSync, NULL, 697),
- NAME_FUNC_OFFSET(11188, glGetInteger64v, glGetInteger64v, NULL, 698),
- NAME_FUNC_OFFSET(11204, glGetSynciv, glGetSynciv, NULL, 699),
- NAME_FUNC_OFFSET(11216, glIsSync, glIsSync, NULL, 700),
- NAME_FUNC_OFFSET(11225, glWaitSync, glWaitSync, NULL, 701),
- NAME_FUNC_OFFSET(11236, glDrawElementsBaseVertex, glDrawElementsBaseVertex, NULL, 702),
- NAME_FUNC_OFFSET(11261, glDrawElementsInstancedBaseVertex, glDrawElementsInstancedBaseVertex, NULL, 703),
- NAME_FUNC_OFFSET(11295, glDrawRangeElementsBaseVertex, glDrawRangeElementsBaseVertex, NULL, 704),
- NAME_FUNC_OFFSET(11325, glMultiDrawElementsBaseVertex, glMultiDrawElementsBaseVertex, NULL, 705),
- NAME_FUNC_OFFSET(11355, glProvokingVertex, glProvokingVertex, NULL, 706),
- NAME_FUNC_OFFSET(11373, glGetMultisamplefv, glGetMultisamplefv, NULL, 707),
- NAME_FUNC_OFFSET(11392, glSampleMaski, glSampleMaski, NULL, 708),
- NAME_FUNC_OFFSET(11406, glTexImage2DMultisample, glTexImage2DMultisample, NULL, 709),
- NAME_FUNC_OFFSET(11430, glTexImage3DMultisample, glTexImage3DMultisample, NULL, 710),
- NAME_FUNC_OFFSET(11454, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 711),
- NAME_FUNC_OFFSET(11482, glBlendEquationiARB, glBlendEquationiARB, NULL, 712),
- NAME_FUNC_OFFSET(11502, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 713),
- NAME_FUNC_OFFSET(11526, glBlendFunciARB, glBlendFunciARB, NULL, 714),
- NAME_FUNC_OFFSET(11542, glBindFragDataLocationIndexed, glBindFragDataLocationIndexed, NULL, 715),
- NAME_FUNC_OFFSET(11572, glGetFragDataIndex, glGetFragDataIndex, NULL, 716),
- NAME_FUNC_OFFSET(11591, glBindSampler, glBindSampler, NULL, 717),
- NAME_FUNC_OFFSET(11605, glDeleteSamplers, glDeleteSamplers, NULL, 718),
- NAME_FUNC_OFFSET(11622, glGenSamplers, glGenSamplers, NULL, 719),
- NAME_FUNC_OFFSET(11636, glGetSamplerParameterIiv, glGetSamplerParameterIiv, NULL, 720),
- NAME_FUNC_OFFSET(11661, glGetSamplerParameterIuiv, glGetSamplerParameterIuiv, NULL, 721),
- NAME_FUNC_OFFSET(11687, glGetSamplerParameterfv, glGetSamplerParameterfv, NULL, 722),
- NAME_FUNC_OFFSET(11711, glGetSamplerParameteriv, glGetSamplerParameteriv, NULL, 723),
- NAME_FUNC_OFFSET(11735, glIsSampler, glIsSampler, NULL, 724),
- NAME_FUNC_OFFSET(11747, glSamplerParameterIiv, glSamplerParameterIiv, NULL, 725),
- NAME_FUNC_OFFSET(11769, glSamplerParameterIuiv, glSamplerParameterIuiv, NULL, 726),
- NAME_FUNC_OFFSET(11792, glSamplerParameterf, glSamplerParameterf, NULL, 727),
- NAME_FUNC_OFFSET(11812, glSamplerParameterfv, glSamplerParameterfv, NULL, 728),
- NAME_FUNC_OFFSET(11833, glSamplerParameteri, glSamplerParameteri, NULL, 729),
- NAME_FUNC_OFFSET(11853, glSamplerParameteriv, glSamplerParameteriv, NULL, 730),
- NAME_FUNC_OFFSET(11874, gl_dispatch_stub_731, gl_dispatch_stub_731, NULL, 731),
- NAME_FUNC_OFFSET(11895, gl_dispatch_stub_732, gl_dispatch_stub_732, NULL, 732),
- NAME_FUNC_OFFSET(11917, gl_dispatch_stub_733, gl_dispatch_stub_733, NULL, 733),
- NAME_FUNC_OFFSET(11932, glColorP3ui, glColorP3ui, NULL, 734),
- NAME_FUNC_OFFSET(11944, glColorP3uiv, glColorP3uiv, NULL, 735),
- NAME_FUNC_OFFSET(11957, glColorP4ui, glColorP4ui, NULL, 736),
- NAME_FUNC_OFFSET(11969, glColorP4uiv, glColorP4uiv, NULL, 737),
- NAME_FUNC_OFFSET(11982, glMultiTexCoordP1ui, glMultiTexCoordP1ui, NULL, 738),
- NAME_FUNC_OFFSET(12002, glMultiTexCoordP1uiv, glMultiTexCoordP1uiv, NULL, 739),
- NAME_FUNC_OFFSET(12023, glMultiTexCoordP2ui, glMultiTexCoordP2ui, NULL, 740),
- NAME_FUNC_OFFSET(12043, glMultiTexCoordP2uiv, glMultiTexCoordP2uiv, NULL, 741),
- NAME_FUNC_OFFSET(12064, glMultiTexCoordP3ui, glMultiTexCoordP3ui, NULL, 742),
- NAME_FUNC_OFFSET(12084, glMultiTexCoordP3uiv, glMultiTexCoordP3uiv, NULL, 743),
- NAME_FUNC_OFFSET(12105, glMultiTexCoordP4ui, glMultiTexCoordP4ui, NULL, 744),
- NAME_FUNC_OFFSET(12125, glMultiTexCoordP4uiv, glMultiTexCoordP4uiv, NULL, 745),
- NAME_FUNC_OFFSET(12146, glNormalP3ui, glNormalP3ui, NULL, 746),
- NAME_FUNC_OFFSET(12159, glNormalP3uiv, glNormalP3uiv, NULL, 747),
- NAME_FUNC_OFFSET(12173, glSecondaryColorP3ui, glSecondaryColorP3ui, NULL, 748),
- NAME_FUNC_OFFSET(12194, glSecondaryColorP3uiv, glSecondaryColorP3uiv, NULL, 749),
- NAME_FUNC_OFFSET(12216, glTexCoordP1ui, glTexCoordP1ui, NULL, 750),
- NAME_FUNC_OFFSET(12231, glTexCoordP1uiv, glTexCoordP1uiv, NULL, 751),
- NAME_FUNC_OFFSET(12247, glTexCoordP2ui, glTexCoordP2ui, NULL, 752),
- NAME_FUNC_OFFSET(12262, glTexCoordP2uiv, glTexCoordP2uiv, NULL, 753),
- NAME_FUNC_OFFSET(12278, glTexCoordP3ui, glTexCoordP3ui, NULL, 754),
- NAME_FUNC_OFFSET(12293, glTexCoordP3uiv, glTexCoordP3uiv, NULL, 755),
- NAME_FUNC_OFFSET(12309, glTexCoordP4ui, glTexCoordP4ui, NULL, 756),
- NAME_FUNC_OFFSET(12324, glTexCoordP4uiv, glTexCoordP4uiv, NULL, 757),
- NAME_FUNC_OFFSET(12340, glVertexAttribP1ui, glVertexAttribP1ui, NULL, 758),
- NAME_FUNC_OFFSET(12359, glVertexAttribP1uiv, glVertexAttribP1uiv, NULL, 759),
- NAME_FUNC_OFFSET(12379, glVertexAttribP2ui, glVertexAttribP2ui, NULL, 760),
- NAME_FUNC_OFFSET(12398, glVertexAttribP2uiv, glVertexAttribP2uiv, NULL, 761),
- NAME_FUNC_OFFSET(12418, glVertexAttribP3ui, glVertexAttribP3ui, NULL, 762),
- NAME_FUNC_OFFSET(12437, glVertexAttribP3uiv, glVertexAttribP3uiv, NULL, 763),
- NAME_FUNC_OFFSET(12457, glVertexAttribP4ui, glVertexAttribP4ui, NULL, 764),
- NAME_FUNC_OFFSET(12476, glVertexAttribP4uiv, glVertexAttribP4uiv, NULL, 765),
- NAME_FUNC_OFFSET(12496, glVertexP2ui, glVertexP2ui, NULL, 766),
- NAME_FUNC_OFFSET(12509, glVertexP2uiv, glVertexP2uiv, NULL, 767),
- NAME_FUNC_OFFSET(12523, glVertexP3ui, glVertexP3ui, NULL, 768),
- NAME_FUNC_OFFSET(12536, glVertexP3uiv, glVertexP3uiv, NULL, 769),
- NAME_FUNC_OFFSET(12550, glVertexP4ui, glVertexP4ui, NULL, 770),
- NAME_FUNC_OFFSET(12563, glVertexP4uiv, glVertexP4uiv, NULL, 771),
- NAME_FUNC_OFFSET(12577, glDrawArraysIndirect, glDrawArraysIndirect, NULL, 772),
- NAME_FUNC_OFFSET(12598, glDrawElementsIndirect, glDrawElementsIndirect, NULL, 773),
- NAME_FUNC_OFFSET(12621, glGetUniformdv, glGetUniformdv, NULL, 774),
- NAME_FUNC_OFFSET(12636, glUniform1d, glUniform1d, NULL, 775),
- NAME_FUNC_OFFSET(12648, glUniform1dv, glUniform1dv, NULL, 776),
- NAME_FUNC_OFFSET(12661, glUniform2d, glUniform2d, NULL, 777),
- NAME_FUNC_OFFSET(12673, glUniform2dv, glUniform2dv, NULL, 778),
- NAME_FUNC_OFFSET(12686, glUniform3d, glUniform3d, NULL, 779),
- NAME_FUNC_OFFSET(12698, glUniform3dv, glUniform3dv, NULL, 780),
- NAME_FUNC_OFFSET(12711, glUniform4d, glUniform4d, NULL, 781),
- NAME_FUNC_OFFSET(12723, glUniform4dv, glUniform4dv, NULL, 782),
- NAME_FUNC_OFFSET(12736, glUniformMatrix2dv, glUniformMatrix2dv, NULL, 783),
- NAME_FUNC_OFFSET(12755, glUniformMatrix2x3dv, glUniformMatrix2x3dv, NULL, 784),
- NAME_FUNC_OFFSET(12776, glUniformMatrix2x4dv, glUniformMatrix2x4dv, NULL, 785),
- NAME_FUNC_OFFSET(12797, glUniformMatrix3dv, glUniformMatrix3dv, NULL, 786),
- NAME_FUNC_OFFSET(12816, glUniformMatrix3x2dv, glUniformMatrix3x2dv, NULL, 787),
- NAME_FUNC_OFFSET(12837, glUniformMatrix3x4dv, glUniformMatrix3x4dv, NULL, 788),
- NAME_FUNC_OFFSET(12858, glUniformMatrix4dv, glUniformMatrix4dv, NULL, 789),
- NAME_FUNC_OFFSET(12877, glUniformMatrix4x2dv, glUniformMatrix4x2dv, NULL, 790),
- NAME_FUNC_OFFSET(12898, glUniformMatrix4x3dv, glUniformMatrix4x3dv, NULL, 791),
- NAME_FUNC_OFFSET(12919, glBindTransformFeedback, glBindTransformFeedback, NULL, 792),
- NAME_FUNC_OFFSET(12943, glDeleteTransformFeedbacks, glDeleteTransformFeedbacks, NULL, 793),
- NAME_FUNC_OFFSET(12970, glDrawTransformFeedback, glDrawTransformFeedback, NULL, 794),
- NAME_FUNC_OFFSET(12994, glGenTransformFeedbacks, glGenTransformFeedbacks, NULL, 795),
- NAME_FUNC_OFFSET(13018, glIsTransformFeedback, glIsTransformFeedback, NULL, 796),
- NAME_FUNC_OFFSET(13040, glPauseTransformFeedback, glPauseTransformFeedback, NULL, 797),
- NAME_FUNC_OFFSET(13065, glResumeTransformFeedback, glResumeTransformFeedback, NULL, 798),
- NAME_FUNC_OFFSET(13091, glBeginQueryIndexed, glBeginQueryIndexed, NULL, 799),
- NAME_FUNC_OFFSET(13111, glDrawTransformFeedbackStream, glDrawTransformFeedbackStream, NULL, 800),
- NAME_FUNC_OFFSET(13141, glEndQueryIndexed, glEndQueryIndexed, NULL, 801),
- NAME_FUNC_OFFSET(13159, glGetQueryIndexediv, glGetQueryIndexediv, NULL, 802),
- NAME_FUNC_OFFSET(13179, glClearDepthf, glClearDepthf, NULL, 803),
- NAME_FUNC_OFFSET(13193, glDepthRangef, glDepthRangef, NULL, 804),
- NAME_FUNC_OFFSET(13207, glGetShaderPrecisionFormat, glGetShaderPrecisionFormat, NULL, 805),
- NAME_FUNC_OFFSET(13234, glReleaseShaderCompiler, glReleaseShaderCompiler, NULL, 806),
- NAME_FUNC_OFFSET(13258, glShaderBinary, glShaderBinary, NULL, 807),
- NAME_FUNC_OFFSET(13273, glGetProgramBinary, glGetProgramBinary, NULL, 808),
- NAME_FUNC_OFFSET(13292, glProgramBinary, glProgramBinary, NULL, 809),
- NAME_FUNC_OFFSET(13308, glProgramParameteri, glProgramParameteri, NULL, 810),
- NAME_FUNC_OFFSET(13328, glGetVertexAttribLdv, glGetVertexAttribLdv, NULL, 811),
- NAME_FUNC_OFFSET(13349, glVertexAttribL1d, glVertexAttribL1d, NULL, 812),
- NAME_FUNC_OFFSET(13367, glVertexAttribL1dv, glVertexAttribL1dv, NULL, 813),
- NAME_FUNC_OFFSET(13386, glVertexAttribL2d, glVertexAttribL2d, NULL, 814),
- NAME_FUNC_OFFSET(13404, glVertexAttribL2dv, glVertexAttribL2dv, NULL, 815),
- NAME_FUNC_OFFSET(13423, glVertexAttribL3d, glVertexAttribL3d, NULL, 816),
- NAME_FUNC_OFFSET(13441, glVertexAttribL3dv, glVertexAttribL3dv, NULL, 817),
- NAME_FUNC_OFFSET(13460, glVertexAttribL4d, glVertexAttribL4d, NULL, 818),
- NAME_FUNC_OFFSET(13478, glVertexAttribL4dv, glVertexAttribL4dv, NULL, 819),
- NAME_FUNC_OFFSET(13497, glVertexAttribLPointer, glVertexAttribLPointer, NULL, 820),
- NAME_FUNC_OFFSET(13520, glDepthRangeArrayv, glDepthRangeArrayv, NULL, 821),
- NAME_FUNC_OFFSET(13539, glDepthRangeIndexed, glDepthRangeIndexed, NULL, 822),
- NAME_FUNC_OFFSET(13559, glGetDoublei_v, glGetDoublei_v, NULL, 823),
- NAME_FUNC_OFFSET(13574, glGetFloati_v, glGetFloati_v, NULL, 824),
- NAME_FUNC_OFFSET(13588, glScissorArrayv, glScissorArrayv, NULL, 825),
- NAME_FUNC_OFFSET(13604, glScissorIndexed, glScissorIndexed, NULL, 826),
- NAME_FUNC_OFFSET(13621, glScissorIndexedv, glScissorIndexedv, NULL, 827),
- NAME_FUNC_OFFSET(13639, glViewportArrayv, glViewportArrayv, NULL, 828),
- NAME_FUNC_OFFSET(13656, glViewportIndexedf, glViewportIndexedf, NULL, 829),
- NAME_FUNC_OFFSET(13675, glViewportIndexedfv, glViewportIndexedfv, NULL, 830),
- NAME_FUNC_OFFSET(13695, glGetGraphicsResetStatusARB, glGetGraphicsResetStatusARB, NULL, 831),
- NAME_FUNC_OFFSET(13723, glGetnColorTableARB, glGetnColorTableARB, NULL, 832),
- NAME_FUNC_OFFSET(13743, glGetnCompressedTexImageARB, glGetnCompressedTexImageARB, NULL, 833),
- NAME_FUNC_OFFSET(13771, glGetnConvolutionFilterARB, glGetnConvolutionFilterARB, NULL, 834),
- NAME_FUNC_OFFSET(13798, glGetnHistogramARB, glGetnHistogramARB, NULL, 835),
- NAME_FUNC_OFFSET(13817, glGetnMapdvARB, glGetnMapdvARB, NULL, 836),
- NAME_FUNC_OFFSET(13832, glGetnMapfvARB, glGetnMapfvARB, NULL, 837),
- NAME_FUNC_OFFSET(13847, glGetnMapivARB, glGetnMapivARB, NULL, 838),
- NAME_FUNC_OFFSET(13862, glGetnMinmaxARB, glGetnMinmaxARB, NULL, 839),
- NAME_FUNC_OFFSET(13878, glGetnPixelMapfvARB, glGetnPixelMapfvARB, NULL, 840),
- NAME_FUNC_OFFSET(13898, glGetnPixelMapuivARB, glGetnPixelMapuivARB, NULL, 841),
- NAME_FUNC_OFFSET(13919, glGetnPixelMapusvARB, glGetnPixelMapusvARB, NULL, 842),
- NAME_FUNC_OFFSET(13940, glGetnPolygonStippleARB, glGetnPolygonStippleARB, NULL, 843),
- NAME_FUNC_OFFSET(13964, glGetnSeparableFilterARB, glGetnSeparableFilterARB, NULL, 844),
- NAME_FUNC_OFFSET(13989, glGetnTexImageARB, glGetnTexImageARB, NULL, 845),
- NAME_FUNC_OFFSET(14007, glGetnUniformdvARB, glGetnUniformdvARB, NULL, 846),
- NAME_FUNC_OFFSET(14026, glGetnUniformfvARB, glGetnUniformfvARB, NULL, 847),
- NAME_FUNC_OFFSET(14045, glGetnUniformivARB, glGetnUniformivARB, NULL, 848),
- NAME_FUNC_OFFSET(14064, glGetnUniformuivARB, glGetnUniformuivARB, NULL, 849),
- NAME_FUNC_OFFSET(14084, glReadnPixelsARB, glReadnPixelsARB, NULL, 850),
- NAME_FUNC_OFFSET(14101, glDrawArraysInstancedBaseInstance, glDrawArraysInstancedBaseInstance, NULL, 851),
- NAME_FUNC_OFFSET(14135, glDrawElementsInstancedBaseInstance, glDrawElementsInstancedBaseInstance, NULL, 852),
- NAME_FUNC_OFFSET(14171, glDrawElementsInstancedBaseVertexBaseInstance, glDrawElementsInstancedBaseVertexBaseInstance, NULL, 853),
- NAME_FUNC_OFFSET(14217, glDrawTransformFeedbackInstanced, glDrawTransformFeedbackInstanced, NULL, 854),
- NAME_FUNC_OFFSET(14250, glDrawTransformFeedbackStreamInstanced, glDrawTransformFeedbackStreamInstanced, NULL, 855),
- NAME_FUNC_OFFSET(14289, gl_dispatch_stub_856, gl_dispatch_stub_856, NULL, 856),
- NAME_FUNC_OFFSET(14311, glGetActiveAtomicCounterBufferiv, glGetActiveAtomicCounterBufferiv, NULL, 857),
- NAME_FUNC_OFFSET(14344, glBindImageTexture, glBindImageTexture, NULL, 858),
- NAME_FUNC_OFFSET(14363, glMemoryBarrier, glMemoryBarrier, NULL, 859),
- NAME_FUNC_OFFSET(14379, glTexStorage1D, glTexStorage1D, NULL, 860),
- NAME_FUNC_OFFSET(14394, glTexStorage2D, glTexStorage2D, NULL, 861),
- NAME_FUNC_OFFSET(14409, glTexStorage3D, glTexStorage3D, NULL, 862),
- NAME_FUNC_OFFSET(14424, glTextureStorage1DEXT, glTextureStorage1DEXT, NULL, 863),
- NAME_FUNC_OFFSET(14446, glTextureStorage2DEXT, glTextureStorage2DEXT, NULL, 864),
- NAME_FUNC_OFFSET(14468, glTextureStorage3DEXT, glTextureStorage3DEXT, NULL, 865),
- NAME_FUNC_OFFSET(14490, glClearBufferData, glClearBufferData, NULL, 866),
- NAME_FUNC_OFFSET(14508, glClearBufferSubData, glClearBufferSubData, NULL, 867),
- NAME_FUNC_OFFSET(14529, glDispatchCompute, glDispatchCompute, NULL, 868),
- NAME_FUNC_OFFSET(14547, glDispatchComputeIndirect, glDispatchComputeIndirect, NULL, 869),
- NAME_FUNC_OFFSET(14573, glCopyImageSubData, glCopyImageSubData, NULL, 870),
- NAME_FUNC_OFFSET(14592, glTextureView, glTextureView, NULL, 871),
- NAME_FUNC_OFFSET(14606, glBindVertexBuffer, glBindVertexBuffer, NULL, 872),
- NAME_FUNC_OFFSET(14625, glVertexAttribBinding, glVertexAttribBinding, NULL, 873),
- NAME_FUNC_OFFSET(14647, glVertexAttribFormat, glVertexAttribFormat, NULL, 874),
- NAME_FUNC_OFFSET(14668, glVertexAttribIFormat, glVertexAttribIFormat, NULL, 875),
- NAME_FUNC_OFFSET(14690, glVertexAttribLFormat, glVertexAttribLFormat, NULL, 876),
- NAME_FUNC_OFFSET(14712, glVertexBindingDivisor, glVertexBindingDivisor, NULL, 877),
- NAME_FUNC_OFFSET(14735, glMultiDrawArraysIndirect, glMultiDrawArraysIndirect, NULL, 878),
- NAME_FUNC_OFFSET(14761, glMultiDrawElementsIndirect, glMultiDrawElementsIndirect, NULL, 879),
- NAME_FUNC_OFFSET(14789, glGetProgramInterfaceiv, glGetProgramInterfaceiv, NULL, 880),
- NAME_FUNC_OFFSET(14813, glGetProgramResourceIndex, glGetProgramResourceIndex, NULL, 881),
- NAME_FUNC_OFFSET(14839, glGetProgramResourceLocation, glGetProgramResourceLocation, NULL, 882),
- NAME_FUNC_OFFSET(14868, glGetProgramResourceLocationIndex, glGetProgramResourceLocationIndex, NULL, 883),
- NAME_FUNC_OFFSET(14902, glGetProgramResourceName, glGetProgramResourceName, NULL, 884),
- NAME_FUNC_OFFSET(14927, glGetProgramResourceiv, glGetProgramResourceiv, NULL, 885),
- NAME_FUNC_OFFSET(14950, glTexBufferRange, glTexBufferRange, NULL, 886),
- NAME_FUNC_OFFSET(14967, glTexStorage2DMultisample, glTexStorage2DMultisample, NULL, 887),
- NAME_FUNC_OFFSET(14993, glTexStorage3DMultisample, glTexStorage3DMultisample, NULL, 888),
- NAME_FUNC_OFFSET(15019, glBufferStorage, glBufferStorage, NULL, 889),
- NAME_FUNC_OFFSET(15035, glClearTexImage, glClearTexImage, NULL, 890),
- NAME_FUNC_OFFSET(15051, glClearTexSubImage, glClearTexSubImage, NULL, 891),
- NAME_FUNC_OFFSET(15070, glBindBuffersBase, glBindBuffersBase, NULL, 892),
- NAME_FUNC_OFFSET(15088, glBindBuffersRange, glBindBuffersRange, NULL, 893),
- NAME_FUNC_OFFSET(15107, glBindImageTextures, glBindImageTextures, NULL, 894),
- NAME_FUNC_OFFSET(15127, glBindSamplers, glBindSamplers, NULL, 895),
- NAME_FUNC_OFFSET(15142, glBindTextures, glBindTextures, NULL, 896),
- NAME_FUNC_OFFSET(15157, glBindVertexBuffers, glBindVertexBuffers, NULL, 897),
- NAME_FUNC_OFFSET(15177, glClipControl, glClipControl, NULL, 898),
- NAME_FUNC_OFFSET(15191, glBindTextureUnit, glBindTextureUnit, NULL, 899),
- NAME_FUNC_OFFSET(15209, glBlitNamedFramebuffer, glBlitNamedFramebuffer, NULL, 900),
- NAME_FUNC_OFFSET(15232, glCheckNamedFramebufferStatus, glCheckNamedFramebufferStatus, NULL, 901),
- NAME_FUNC_OFFSET(15262, glClearNamedBufferData, glClearNamedBufferData, NULL, 902),
- NAME_FUNC_OFFSET(15285, glClearNamedBufferSubData, glClearNamedBufferSubData, NULL, 903),
- NAME_FUNC_OFFSET(15311, glClearNamedFramebufferfi, glClearNamedFramebufferfi, NULL, 904),
- NAME_FUNC_OFFSET(15337, glClearNamedFramebufferfv, glClearNamedFramebufferfv, NULL, 905),
- NAME_FUNC_OFFSET(15363, glClearNamedFramebufferiv, glClearNamedFramebufferiv, NULL, 906),
- NAME_FUNC_OFFSET(15389, glClearNamedFramebufferuiv, glClearNamedFramebufferuiv, NULL, 907),
- NAME_FUNC_OFFSET(15416, glCompressedTextureSubImage1D, glCompressedTextureSubImage1D, NULL, 908),
- NAME_FUNC_OFFSET(15446, glCompressedTextureSubImage2D, glCompressedTextureSubImage2D, NULL, 909),
- NAME_FUNC_OFFSET(15476, glCompressedTextureSubImage3D, glCompressedTextureSubImage3D, NULL, 910),
- NAME_FUNC_OFFSET(15506, glCopyNamedBufferSubData, glCopyNamedBufferSubData, NULL, 911),
- NAME_FUNC_OFFSET(15531, glCopyTextureSubImage1D, glCopyTextureSubImage1D, NULL, 912),
- NAME_FUNC_OFFSET(15555, glCopyTextureSubImage2D, glCopyTextureSubImage2D, NULL, 913),
- NAME_FUNC_OFFSET(15579, glCopyTextureSubImage3D, glCopyTextureSubImage3D, NULL, 914),
- NAME_FUNC_OFFSET(15603, glCreateBuffers, glCreateBuffers, NULL, 915),
- NAME_FUNC_OFFSET(15619, glCreateFramebuffers, glCreateFramebuffers, NULL, 916),
- NAME_FUNC_OFFSET(15640, glCreateProgramPipelines, glCreateProgramPipelines, NULL, 917),
- NAME_FUNC_OFFSET(15665, glCreateQueries, glCreateQueries, NULL, 918),
- NAME_FUNC_OFFSET(15681, glCreateRenderbuffers, glCreateRenderbuffers, NULL, 919),
- NAME_FUNC_OFFSET(15703, glCreateSamplers, glCreateSamplers, NULL, 920),
- NAME_FUNC_OFFSET(15720, glCreateTextures, glCreateTextures, NULL, 921),
- NAME_FUNC_OFFSET(15737, glCreateTransformFeedbacks, glCreateTransformFeedbacks, NULL, 922),
- NAME_FUNC_OFFSET(15764, glCreateVertexArrays, glCreateVertexArrays, NULL, 923),
- NAME_FUNC_OFFSET(15785, glDisableVertexArrayAttrib, glDisableVertexArrayAttrib, NULL, 924),
- NAME_FUNC_OFFSET(15812, glEnableVertexArrayAttrib, glEnableVertexArrayAttrib, NULL, 925),
- NAME_FUNC_OFFSET(15838, glFlushMappedNamedBufferRange, glFlushMappedNamedBufferRange, NULL, 926),
- NAME_FUNC_OFFSET(15868, glGenerateTextureMipmap, glGenerateTextureMipmap, NULL, 927),
- NAME_FUNC_OFFSET(15892, glGetCompressedTextureImage, glGetCompressedTextureImage, NULL, 928),
- NAME_FUNC_OFFSET(15920, glGetNamedBufferParameteri64v, glGetNamedBufferParameteri64v, NULL, 929),
- NAME_FUNC_OFFSET(15950, glGetNamedBufferParameteriv, glGetNamedBufferParameteriv, NULL, 930),
- NAME_FUNC_OFFSET(15978, glGetNamedBufferPointerv, glGetNamedBufferPointerv, NULL, 931),
- NAME_FUNC_OFFSET(16003, glGetNamedBufferSubData, glGetNamedBufferSubData, NULL, 932),
- NAME_FUNC_OFFSET(16027, glGetNamedFramebufferAttachmentParameteriv, glGetNamedFramebufferAttachmentParameteriv, NULL, 933),
- NAME_FUNC_OFFSET(16070, glGetNamedFramebufferParameteriv, glGetNamedFramebufferParameteriv, NULL, 934),
- NAME_FUNC_OFFSET(16103, glGetNamedRenderbufferParameteriv, glGetNamedRenderbufferParameteriv, NULL, 935),
- NAME_FUNC_OFFSET(16137, glGetQueryBufferObjecti64v, glGetQueryBufferObjecti64v, NULL, 936),
- NAME_FUNC_OFFSET(16164, glGetQueryBufferObjectiv, glGetQueryBufferObjectiv, NULL, 937),
- NAME_FUNC_OFFSET(16189, glGetQueryBufferObjectui64v, glGetQueryBufferObjectui64v, NULL, 938),
- NAME_FUNC_OFFSET(16217, glGetQueryBufferObjectuiv, glGetQueryBufferObjectuiv, NULL, 939),
- NAME_FUNC_OFFSET(16243, glGetTextureImage, glGetTextureImage, NULL, 940),
- NAME_FUNC_OFFSET(16261, glGetTextureLevelParameterfv, glGetTextureLevelParameterfv, NULL, 941),
- NAME_FUNC_OFFSET(16290, glGetTextureLevelParameteriv, glGetTextureLevelParameteriv, NULL, 942),
- NAME_FUNC_OFFSET(16319, glGetTextureParameterIiv, glGetTextureParameterIiv, NULL, 943),
- NAME_FUNC_OFFSET(16344, glGetTextureParameterIuiv, glGetTextureParameterIuiv, NULL, 944),
- NAME_FUNC_OFFSET(16370, glGetTextureParameterfv, glGetTextureParameterfv, NULL, 945),
- NAME_FUNC_OFFSET(16394, glGetTextureParameteriv, glGetTextureParameteriv, NULL, 946),
- NAME_FUNC_OFFSET(16418, glGetTransformFeedbacki64_v, glGetTransformFeedbacki64_v, NULL, 947),
- NAME_FUNC_OFFSET(16446, glGetTransformFeedbacki_v, glGetTransformFeedbacki_v, NULL, 948),
- NAME_FUNC_OFFSET(16472, glGetTransformFeedbackiv, glGetTransformFeedbackiv, NULL, 949),
- NAME_FUNC_OFFSET(16497, glGetVertexArrayIndexed64iv, glGetVertexArrayIndexed64iv, NULL, 950),
- NAME_FUNC_OFFSET(16525, glGetVertexArrayIndexediv, glGetVertexArrayIndexediv, NULL, 951),
- NAME_FUNC_OFFSET(16551, glGetVertexArrayiv, glGetVertexArrayiv, NULL, 952),
- NAME_FUNC_OFFSET(16570, glInvalidateNamedFramebufferData, glInvalidateNamedFramebufferData, NULL, 953),
- NAME_FUNC_OFFSET(16603, glInvalidateNamedFramebufferSubData, glInvalidateNamedFramebufferSubData, NULL, 954),
- NAME_FUNC_OFFSET(16639, glMapNamedBuffer, glMapNamedBuffer, NULL, 955),
- NAME_FUNC_OFFSET(16656, glMapNamedBufferRange, glMapNamedBufferRange, NULL, 956),
- NAME_FUNC_OFFSET(16678, glNamedBufferData, glNamedBufferData, NULL, 957),
- NAME_FUNC_OFFSET(16696, glNamedBufferStorage, glNamedBufferStorage, NULL, 958),
- NAME_FUNC_OFFSET(16717, glNamedBufferSubData, glNamedBufferSubData, NULL, 959),
- NAME_FUNC_OFFSET(16738, glNamedFramebufferDrawBuffer, glNamedFramebufferDrawBuffer, NULL, 960),
- NAME_FUNC_OFFSET(16767, glNamedFramebufferDrawBuffers, glNamedFramebufferDrawBuffers, NULL, 961),
- NAME_FUNC_OFFSET(16797, glNamedFramebufferParameteri, glNamedFramebufferParameteri, NULL, 962),
- NAME_FUNC_OFFSET(16826, glNamedFramebufferReadBuffer, glNamedFramebufferReadBuffer, NULL, 963),
- NAME_FUNC_OFFSET(16855, glNamedFramebufferRenderbuffer, glNamedFramebufferRenderbuffer, NULL, 964),
- NAME_FUNC_OFFSET(16886, glNamedFramebufferTexture, glNamedFramebufferTexture, NULL, 965),
- NAME_FUNC_OFFSET(16912, glNamedFramebufferTextureLayer, glNamedFramebufferTextureLayer, NULL, 966),
- NAME_FUNC_OFFSET(16943, glNamedRenderbufferStorage, glNamedRenderbufferStorage, NULL, 967),
- NAME_FUNC_OFFSET(16970, glNamedRenderbufferStorageMultisample, glNamedRenderbufferStorageMultisample, NULL, 968),
- NAME_FUNC_OFFSET(17008, glTextureBuffer, glTextureBuffer, NULL, 969),
- NAME_FUNC_OFFSET(17024, glTextureBufferRange, glTextureBufferRange, NULL, 970),
- NAME_FUNC_OFFSET(17045, glTextureParameterIiv, glTextureParameterIiv, NULL, 971),
- NAME_FUNC_OFFSET(17067, glTextureParameterIuiv, glTextureParameterIuiv, NULL, 972),
- NAME_FUNC_OFFSET(17090, glTextureParameterf, glTextureParameterf, NULL, 973),
- NAME_FUNC_OFFSET(17110, glTextureParameterfv, glTextureParameterfv, NULL, 974),
- NAME_FUNC_OFFSET(17131, glTextureParameteri, glTextureParameteri, NULL, 975),
- NAME_FUNC_OFFSET(17151, glTextureParameteriv, glTextureParameteriv, NULL, 976),
- NAME_FUNC_OFFSET(17172, glTextureStorage1D, glTextureStorage1D, NULL, 977),
- NAME_FUNC_OFFSET(17191, glTextureStorage2D, glTextureStorage2D, NULL, 978),
- NAME_FUNC_OFFSET(17210, glTextureStorage2DMultisample, glTextureStorage2DMultisample, NULL, 979),
- NAME_FUNC_OFFSET(17240, glTextureStorage3D, glTextureStorage3D, NULL, 980),
- NAME_FUNC_OFFSET(17259, glTextureStorage3DMultisample, glTextureStorage3DMultisample, NULL, 981),
- NAME_FUNC_OFFSET(17289, glTextureSubImage1D, glTextureSubImage1D, NULL, 982),
- NAME_FUNC_OFFSET(17309, glTextureSubImage2D, glTextureSubImage2D, NULL, 983),
- NAME_FUNC_OFFSET(17329, glTextureSubImage3D, glTextureSubImage3D, NULL, 984),
- NAME_FUNC_OFFSET(17349, glTransformFeedbackBufferBase, glTransformFeedbackBufferBase, NULL, 985),
- NAME_FUNC_OFFSET(17379, glTransformFeedbackBufferRange, glTransformFeedbackBufferRange, NULL, 986),
- NAME_FUNC_OFFSET(17410, glUnmapNamedBuffer, glUnmapNamedBuffer, NULL, 987),
- NAME_FUNC_OFFSET(17429, glVertexArrayAttribBinding, glVertexArrayAttribBinding, NULL, 988),
- NAME_FUNC_OFFSET(17456, glVertexArrayAttribFormat, glVertexArrayAttribFormat, NULL, 989),
- NAME_FUNC_OFFSET(17482, glVertexArrayAttribIFormat, glVertexArrayAttribIFormat, NULL, 990),
- NAME_FUNC_OFFSET(17509, glVertexArrayAttribLFormat, glVertexArrayAttribLFormat, NULL, 991),
- NAME_FUNC_OFFSET(17536, glVertexArrayBindingDivisor, glVertexArrayBindingDivisor, NULL, 992),
- NAME_FUNC_OFFSET(17564, glVertexArrayElementBuffer, glVertexArrayElementBuffer, NULL, 993),
- NAME_FUNC_OFFSET(17591, glVertexArrayVertexBuffer, glVertexArrayVertexBuffer, NULL, 994),
- NAME_FUNC_OFFSET(17617, glVertexArrayVertexBuffers, glVertexArrayVertexBuffers, NULL, 995),
- NAME_FUNC_OFFSET(17644, glInvalidateBufferData, glInvalidateBufferData, NULL, 996),
- NAME_FUNC_OFFSET(17667, glInvalidateBufferSubData, glInvalidateBufferSubData, NULL, 997),
- NAME_FUNC_OFFSET(17693, glInvalidateFramebuffer, glInvalidateFramebuffer, NULL, 998),
- NAME_FUNC_OFFSET(17717, glInvalidateSubFramebuffer, glInvalidateSubFramebuffer, NULL, 999),
- NAME_FUNC_OFFSET(17744, glInvalidateTexImage, glInvalidateTexImage, NULL, 1000),
- NAME_FUNC_OFFSET(17765, glInvalidateTexSubImage, glInvalidateTexSubImage, NULL, 1001),
- NAME_FUNC_OFFSET(17789, glPolygonOffsetEXT, glPolygonOffsetEXT, NULL, 1002),
- NAME_FUNC_OFFSET(17808, gl_dispatch_stub_1003, gl_dispatch_stub_1003, NULL, 1003),
- NAME_FUNC_OFFSET(17822, gl_dispatch_stub_1004, gl_dispatch_stub_1004, NULL, 1004),
- NAME_FUNC_OFFSET(17837, gl_dispatch_stub_1005, gl_dispatch_stub_1005, NULL, 1005),
- NAME_FUNC_OFFSET(17851, gl_dispatch_stub_1006, gl_dispatch_stub_1006, NULL, 1006),
- NAME_FUNC_OFFSET(17866, gl_dispatch_stub_1007, gl_dispatch_stub_1007, NULL, 1007),
- NAME_FUNC_OFFSET(17880, gl_dispatch_stub_1008, gl_dispatch_stub_1008, NULL, 1008),
- NAME_FUNC_OFFSET(17895, gl_dispatch_stub_1009, gl_dispatch_stub_1009, NULL, 1009),
- NAME_FUNC_OFFSET(17909, gl_dispatch_stub_1010, gl_dispatch_stub_1010, NULL, 1010),
- NAME_FUNC_OFFSET(17924, glPointSizePointerOES, glPointSizePointerOES, NULL, 1011),
- NAME_FUNC_OFFSET(17946, gl_dispatch_stub_1012, gl_dispatch_stub_1012, NULL, 1012),
- NAME_FUNC_OFFSET(17964, gl_dispatch_stub_1013, gl_dispatch_stub_1013, NULL, 1013),
- NAME_FUNC_OFFSET(17981, gl_dispatch_stub_1014, gl_dispatch_stub_1014, NULL, 1014),
- NAME_FUNC_OFFSET(18001, glColorPointerEXT, glColorPointerEXT, NULL, 1015),
- NAME_FUNC_OFFSET(18019, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, 1016),
- NAME_FUNC_OFFSET(18040, glIndexPointerEXT, glIndexPointerEXT, NULL, 1017),
- NAME_FUNC_OFFSET(18058, glNormalPointerEXT, glNormalPointerEXT, NULL, 1018),
- NAME_FUNC_OFFSET(18077, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, 1019),
- NAME_FUNC_OFFSET(18098, glVertexPointerEXT, glVertexPointerEXT, NULL, 1020),
- NAME_FUNC_OFFSET(18117, gl_dispatch_stub_1021, gl_dispatch_stub_1021, NULL, 1021),
- NAME_FUNC_OFFSET(18141, gl_dispatch_stub_1022, gl_dispatch_stub_1022, NULL, 1022),
- NAME_FUNC_OFFSET(18163, gl_dispatch_stub_1023, gl_dispatch_stub_1023, NULL, 1023),
- NAME_FUNC_OFFSET(18185, gl_dispatch_stub_1024, gl_dispatch_stub_1024, NULL, 1024),
- NAME_FUNC_OFFSET(18208, gl_dispatch_stub_1025, gl_dispatch_stub_1025, NULL, 1025),
- NAME_FUNC_OFFSET(18233, gl_dispatch_stub_1026, gl_dispatch_stub_1026, NULL, 1026),
+ NAME_FUNC_OFFSET(10819, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 680),
+ NAME_FUNC_OFFSET(10844, glMapBufferRange, glMapBufferRange, NULL, 681),
+ NAME_FUNC_OFFSET(10861, glBindVertexArray, glBindVertexArray, NULL, 682),
+ NAME_FUNC_OFFSET(10879, glDeleteVertexArrays, glDeleteVertexArrays, NULL, 683),
+ NAME_FUNC_OFFSET(10900, glGenVertexArrays, glGenVertexArrays, NULL, 684),
+ NAME_FUNC_OFFSET(10918, glIsVertexArray, glIsVertexArray, NULL, 685),
+ NAME_FUNC_OFFSET(10934, glGetActiveUniformBlockName, glGetActiveUniformBlockName, NULL, 686),
+ NAME_FUNC_OFFSET(10962, glGetActiveUniformBlockiv, glGetActiveUniformBlockiv, NULL, 687),
+ NAME_FUNC_OFFSET(10988, glGetActiveUniformName, glGetActiveUniformName, NULL, 688),
+ NAME_FUNC_OFFSET(11011, glGetActiveUniformsiv, glGetActiveUniformsiv, NULL, 689),
+ NAME_FUNC_OFFSET(11033, glGetUniformBlockIndex, glGetUniformBlockIndex, NULL, 690),
+ NAME_FUNC_OFFSET(11056, glGetUniformIndices, glGetUniformIndices, NULL, 691),
+ NAME_FUNC_OFFSET(11076, glUniformBlockBinding, glUniformBlockBinding, NULL, 692),
+ NAME_FUNC_OFFSET(11098, glCopyBufferSubData, glCopyBufferSubData, NULL, 693),
+ NAME_FUNC_OFFSET(11118, glClientWaitSync, glClientWaitSync, NULL, 694),
+ NAME_FUNC_OFFSET(11135, glDeleteSync, glDeleteSync, NULL, 695),
+ NAME_FUNC_OFFSET(11148, glFenceSync, glFenceSync, NULL, 696),
+ NAME_FUNC_OFFSET(11160, glGetInteger64v, glGetInteger64v, NULL, 697),
+ NAME_FUNC_OFFSET(11176, glGetSynciv, glGetSynciv, NULL, 698),
+ NAME_FUNC_OFFSET(11188, glIsSync, glIsSync, NULL, 699),
+ NAME_FUNC_OFFSET(11197, glWaitSync, glWaitSync, NULL, 700),
+ NAME_FUNC_OFFSET(11208, glDrawElementsBaseVertex, glDrawElementsBaseVertex, NULL, 701),
+ NAME_FUNC_OFFSET(11233, glDrawElementsInstancedBaseVertex, glDrawElementsInstancedBaseVertex, NULL, 702),
+ NAME_FUNC_OFFSET(11267, glDrawRangeElementsBaseVertex, glDrawRangeElementsBaseVertex, NULL, 703),
+ NAME_FUNC_OFFSET(11297, glMultiDrawElementsBaseVertex, glMultiDrawElementsBaseVertex, NULL, 704),
+ NAME_FUNC_OFFSET(11327, glProvokingVertex, glProvokingVertex, NULL, 705),
+ NAME_FUNC_OFFSET(11345, glGetMultisamplefv, glGetMultisamplefv, NULL, 706),
+ NAME_FUNC_OFFSET(11364, glSampleMaski, glSampleMaski, NULL, 707),
+ NAME_FUNC_OFFSET(11378, glTexImage2DMultisample, glTexImage2DMultisample, NULL, 708),
+ NAME_FUNC_OFFSET(11402, glTexImage3DMultisample, glTexImage3DMultisample, NULL, 709),
+ NAME_FUNC_OFFSET(11426, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 710),
+ NAME_FUNC_OFFSET(11454, glBlendEquationiARB, glBlendEquationiARB, NULL, 711),
+ NAME_FUNC_OFFSET(11474, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 712),
+ NAME_FUNC_OFFSET(11498, glBlendFunciARB, glBlendFunciARB, NULL, 713),
+ NAME_FUNC_OFFSET(11514, glBindFragDataLocationIndexed, glBindFragDataLocationIndexed, NULL, 714),
+ NAME_FUNC_OFFSET(11544, glGetFragDataIndex, glGetFragDataIndex, NULL, 715),
+ NAME_FUNC_OFFSET(11563, glBindSampler, glBindSampler, NULL, 716),
+ NAME_FUNC_OFFSET(11577, glDeleteSamplers, glDeleteSamplers, NULL, 717),
+ NAME_FUNC_OFFSET(11594, glGenSamplers, glGenSamplers, NULL, 718),
+ NAME_FUNC_OFFSET(11608, glGetSamplerParameterIiv, glGetSamplerParameterIiv, NULL, 719),
+ NAME_FUNC_OFFSET(11633, glGetSamplerParameterIuiv, glGetSamplerParameterIuiv, NULL, 720),
+ NAME_FUNC_OFFSET(11659, glGetSamplerParameterfv, glGetSamplerParameterfv, NULL, 721),
+ NAME_FUNC_OFFSET(11683, glGetSamplerParameteriv, glGetSamplerParameteriv, NULL, 722),
+ NAME_FUNC_OFFSET(11707, glIsSampler, glIsSampler, NULL, 723),
+ NAME_FUNC_OFFSET(11719, glSamplerParameterIiv, glSamplerParameterIiv, NULL, 724),
+ NAME_FUNC_OFFSET(11741, glSamplerParameterIuiv, glSamplerParameterIuiv, NULL, 725),
+ NAME_FUNC_OFFSET(11764, glSamplerParameterf, glSamplerParameterf, NULL, 726),
+ NAME_FUNC_OFFSET(11784, glSamplerParameterfv, glSamplerParameterfv, NULL, 727),
+ NAME_FUNC_OFFSET(11805, glSamplerParameteri, glSamplerParameteri, NULL, 728),
+ NAME_FUNC_OFFSET(11825, glSamplerParameteriv, glSamplerParameteriv, NULL, 729),
+ NAME_FUNC_OFFSET(11846, gl_dispatch_stub_730, gl_dispatch_stub_730, NULL, 730),
+ NAME_FUNC_OFFSET(11867, gl_dispatch_stub_731, gl_dispatch_stub_731, NULL, 731),
+ NAME_FUNC_OFFSET(11889, gl_dispatch_stub_732, gl_dispatch_stub_732, NULL, 732),
+ NAME_FUNC_OFFSET(11904, glColorP3ui, glColorP3ui, NULL, 733),
+ NAME_FUNC_OFFSET(11916, glColorP3uiv, glColorP3uiv, NULL, 734),
+ NAME_FUNC_OFFSET(11929, glColorP4ui, glColorP4ui, NULL, 735),
+ NAME_FUNC_OFFSET(11941, glColorP4uiv, glColorP4uiv, NULL, 736),
+ NAME_FUNC_OFFSET(11954, glMultiTexCoordP1ui, glMultiTexCoordP1ui, NULL, 737),
+ NAME_FUNC_OFFSET(11974, glMultiTexCoordP1uiv, glMultiTexCoordP1uiv, NULL, 738),
+ NAME_FUNC_OFFSET(11995, glMultiTexCoordP2ui, glMultiTexCoordP2ui, NULL, 739),
+ NAME_FUNC_OFFSET(12015, glMultiTexCoordP2uiv, glMultiTexCoordP2uiv, NULL, 740),
+ NAME_FUNC_OFFSET(12036, glMultiTexCoordP3ui, glMultiTexCoordP3ui, NULL, 741),
+ NAME_FUNC_OFFSET(12056, glMultiTexCoordP3uiv, glMultiTexCoordP3uiv, NULL, 742),
+ NAME_FUNC_OFFSET(12077, glMultiTexCoordP4ui, glMultiTexCoordP4ui, NULL, 743),
+ NAME_FUNC_OFFSET(12097, glMultiTexCoordP4uiv, glMultiTexCoordP4uiv, NULL, 744),
+ NAME_FUNC_OFFSET(12118, glNormalP3ui, glNormalP3ui, NULL, 745),
+ NAME_FUNC_OFFSET(12131, glNormalP3uiv, glNormalP3uiv, NULL, 746),
+ NAME_FUNC_OFFSET(12145, glSecondaryColorP3ui, glSecondaryColorP3ui, NULL, 747),
+ NAME_FUNC_OFFSET(12166, glSecondaryColorP3uiv, glSecondaryColorP3uiv, NULL, 748),
+ NAME_FUNC_OFFSET(12188, glTexCoordP1ui, glTexCoordP1ui, NULL, 749),
+ NAME_FUNC_OFFSET(12203, glTexCoordP1uiv, glTexCoordP1uiv, NULL, 750),
+ NAME_FUNC_OFFSET(12219, glTexCoordP2ui, glTexCoordP2ui, NULL, 751),
+ NAME_FUNC_OFFSET(12234, glTexCoordP2uiv, glTexCoordP2uiv, NULL, 752),
+ NAME_FUNC_OFFSET(12250, glTexCoordP3ui, glTexCoordP3ui, NULL, 753),
+ NAME_FUNC_OFFSET(12265, glTexCoordP3uiv, glTexCoordP3uiv, NULL, 754),
+ NAME_FUNC_OFFSET(12281, glTexCoordP4ui, glTexCoordP4ui, NULL, 755),
+ NAME_FUNC_OFFSET(12296, glTexCoordP4uiv, glTexCoordP4uiv, NULL, 756),
+ NAME_FUNC_OFFSET(12312, glVertexAttribP1ui, glVertexAttribP1ui, NULL, 757),
+ NAME_FUNC_OFFSET(12331, glVertexAttribP1uiv, glVertexAttribP1uiv, NULL, 758),
+ NAME_FUNC_OFFSET(12351, glVertexAttribP2ui, glVertexAttribP2ui, NULL, 759),
+ NAME_FUNC_OFFSET(12370, glVertexAttribP2uiv, glVertexAttribP2uiv, NULL, 760),
+ NAME_FUNC_OFFSET(12390, glVertexAttribP3ui, glVertexAttribP3ui, NULL, 761),
+ NAME_FUNC_OFFSET(12409, glVertexAttribP3uiv, glVertexAttribP3uiv, NULL, 762),
+ NAME_FUNC_OFFSET(12429, glVertexAttribP4ui, glVertexAttribP4ui, NULL, 763),
+ NAME_FUNC_OFFSET(12448, glVertexAttribP4uiv, glVertexAttribP4uiv, NULL, 764),
+ NAME_FUNC_OFFSET(12468, glVertexP2ui, glVertexP2ui, NULL, 765),
+ NAME_FUNC_OFFSET(12481, glVertexP2uiv, glVertexP2uiv, NULL, 766),
+ NAME_FUNC_OFFSET(12495, glVertexP3ui, glVertexP3ui, NULL, 767),
+ NAME_FUNC_OFFSET(12508, glVertexP3uiv, glVertexP3uiv, NULL, 768),
+ NAME_FUNC_OFFSET(12522, glVertexP4ui, glVertexP4ui, NULL, 769),
+ NAME_FUNC_OFFSET(12535, glVertexP4uiv, glVertexP4uiv, NULL, 770),
+ NAME_FUNC_OFFSET(12549, glDrawArraysIndirect, glDrawArraysIndirect, NULL, 771),
+ NAME_FUNC_OFFSET(12570, glDrawElementsIndirect, glDrawElementsIndirect, NULL, 772),
+ NAME_FUNC_OFFSET(12593, gl_dispatch_stub_773, gl_dispatch_stub_773, NULL, 773),
+ NAME_FUNC_OFFSET(12608, gl_dispatch_stub_774, gl_dispatch_stub_774, NULL, 774),
+ NAME_FUNC_OFFSET(12620, gl_dispatch_stub_775, gl_dispatch_stub_775, NULL, 775),
+ NAME_FUNC_OFFSET(12633, gl_dispatch_stub_776, gl_dispatch_stub_776, NULL, 776),
+ NAME_FUNC_OFFSET(12645, gl_dispatch_stub_777, gl_dispatch_stub_777, NULL, 777),
+ NAME_FUNC_OFFSET(12658, gl_dispatch_stub_778, gl_dispatch_stub_778, NULL, 778),
+ NAME_FUNC_OFFSET(12670, gl_dispatch_stub_779, gl_dispatch_stub_779, NULL, 779),
+ NAME_FUNC_OFFSET(12683, gl_dispatch_stub_780, gl_dispatch_stub_780, NULL, 780),
+ NAME_FUNC_OFFSET(12695, gl_dispatch_stub_781, gl_dispatch_stub_781, NULL, 781),
+ NAME_FUNC_OFFSET(12708, gl_dispatch_stub_782, gl_dispatch_stub_782, NULL, 782),
+ NAME_FUNC_OFFSET(12727, gl_dispatch_stub_783, gl_dispatch_stub_783, NULL, 783),
+ NAME_FUNC_OFFSET(12748, gl_dispatch_stub_784, gl_dispatch_stub_784, NULL, 784),
+ NAME_FUNC_OFFSET(12769, gl_dispatch_stub_785, gl_dispatch_stub_785, NULL, 785),
+ NAME_FUNC_OFFSET(12788, gl_dispatch_stub_786, gl_dispatch_stub_786, NULL, 786),
+ NAME_FUNC_OFFSET(12809, gl_dispatch_stub_787, gl_dispatch_stub_787, NULL, 787),
+ NAME_FUNC_OFFSET(12830, gl_dispatch_stub_788, gl_dispatch_stub_788, NULL, 788),
+ NAME_FUNC_OFFSET(12849, gl_dispatch_stub_789, gl_dispatch_stub_789, NULL, 789),
+ NAME_FUNC_OFFSET(12870, gl_dispatch_stub_790, gl_dispatch_stub_790, NULL, 790),
+ NAME_FUNC_OFFSET(12891, glBindTransformFeedback, glBindTransformFeedback, NULL, 791),
+ NAME_FUNC_OFFSET(12915, glDeleteTransformFeedbacks, glDeleteTransformFeedbacks, NULL, 792),
+ NAME_FUNC_OFFSET(12942, glDrawTransformFeedback, glDrawTransformFeedback, NULL, 793),
+ NAME_FUNC_OFFSET(12966, glGenTransformFeedbacks, glGenTransformFeedbacks, NULL, 794),
+ NAME_FUNC_OFFSET(12990, glIsTransformFeedback, glIsTransformFeedback, NULL, 795),
+ NAME_FUNC_OFFSET(13012, glPauseTransformFeedback, glPauseTransformFeedback, NULL, 796),
+ NAME_FUNC_OFFSET(13037, glResumeTransformFeedback, glResumeTransformFeedback, NULL, 797),
+ NAME_FUNC_OFFSET(13063, glBeginQueryIndexed, glBeginQueryIndexed, NULL, 798),
+ NAME_FUNC_OFFSET(13083, glDrawTransformFeedbackStream, glDrawTransformFeedbackStream, NULL, 799),
+ NAME_FUNC_OFFSET(13113, glEndQueryIndexed, glEndQueryIndexed, NULL, 800),
+ NAME_FUNC_OFFSET(13131, glGetQueryIndexediv, glGetQueryIndexediv, NULL, 801),
+ NAME_FUNC_OFFSET(13151, glClearDepthf, glClearDepthf, NULL, 802),
+ NAME_FUNC_OFFSET(13165, glDepthRangef, glDepthRangef, NULL, 803),
+ NAME_FUNC_OFFSET(13179, glGetShaderPrecisionFormat, glGetShaderPrecisionFormat, NULL, 804),
+ NAME_FUNC_OFFSET(13206, glReleaseShaderCompiler, glReleaseShaderCompiler, NULL, 805),
+ NAME_FUNC_OFFSET(13230, glShaderBinary, glShaderBinary, NULL, 806),
+ NAME_FUNC_OFFSET(13245, glGetProgramBinary, glGetProgramBinary, NULL, 807),
+ NAME_FUNC_OFFSET(13264, glProgramBinary, glProgramBinary, NULL, 808),
+ NAME_FUNC_OFFSET(13280, glProgramParameteri, glProgramParameteri, NULL, 809),
+ NAME_FUNC_OFFSET(13300, gl_dispatch_stub_810, gl_dispatch_stub_810, NULL, 810),
+ NAME_FUNC_OFFSET(13321, gl_dispatch_stub_811, gl_dispatch_stub_811, NULL, 811),
+ NAME_FUNC_OFFSET(13339, gl_dispatch_stub_812, gl_dispatch_stub_812, NULL, 812),
+ NAME_FUNC_OFFSET(13358, gl_dispatch_stub_813, gl_dispatch_stub_813, NULL, 813),
+ NAME_FUNC_OFFSET(13376, gl_dispatch_stub_814, gl_dispatch_stub_814, NULL, 814),
+ NAME_FUNC_OFFSET(13395, gl_dispatch_stub_815, gl_dispatch_stub_815, NULL, 815),
+ NAME_FUNC_OFFSET(13413, gl_dispatch_stub_816, gl_dispatch_stub_816, NULL, 816),
+ NAME_FUNC_OFFSET(13432, gl_dispatch_stub_817, gl_dispatch_stub_817, NULL, 817),
+ NAME_FUNC_OFFSET(13450, gl_dispatch_stub_818, gl_dispatch_stub_818, NULL, 818),
+ NAME_FUNC_OFFSET(13469, gl_dispatch_stub_819, gl_dispatch_stub_819, NULL, 819),
+ NAME_FUNC_OFFSET(13492, glDepthRangeArrayv, glDepthRangeArrayv, NULL, 820),
+ NAME_FUNC_OFFSET(13511, glDepthRangeIndexed, glDepthRangeIndexed, NULL, 821),
+ NAME_FUNC_OFFSET(13531, glGetDoublei_v, glGetDoublei_v, NULL, 822),
+ NAME_FUNC_OFFSET(13546, glGetFloati_v, glGetFloati_v, NULL, 823),
+ NAME_FUNC_OFFSET(13560, glScissorArrayv, glScissorArrayv, NULL, 824),
+ NAME_FUNC_OFFSET(13576, glScissorIndexed, glScissorIndexed, NULL, 825),
+ NAME_FUNC_OFFSET(13593, glScissorIndexedv, glScissorIndexedv, NULL, 826),
+ NAME_FUNC_OFFSET(13611, glViewportArrayv, glViewportArrayv, NULL, 827),
+ NAME_FUNC_OFFSET(13628, glViewportIndexedf, glViewportIndexedf, NULL, 828),
+ NAME_FUNC_OFFSET(13647, glViewportIndexedfv, glViewportIndexedfv, NULL, 829),
+ NAME_FUNC_OFFSET(13667, glGetGraphicsResetStatusARB, glGetGraphicsResetStatusARB, NULL, 830),
+ NAME_FUNC_OFFSET(13695, glGetnColorTableARB, glGetnColorTableARB, NULL, 831),
+ NAME_FUNC_OFFSET(13715, glGetnCompressedTexImageARB, glGetnCompressedTexImageARB, NULL, 832),
+ NAME_FUNC_OFFSET(13743, glGetnConvolutionFilterARB, glGetnConvolutionFilterARB, NULL, 833),
+ NAME_FUNC_OFFSET(13770, glGetnHistogramARB, glGetnHistogramARB, NULL, 834),
+ NAME_FUNC_OFFSET(13789, glGetnMapdvARB, glGetnMapdvARB, NULL, 835),
+ NAME_FUNC_OFFSET(13804, glGetnMapfvARB, glGetnMapfvARB, NULL, 836),
+ NAME_FUNC_OFFSET(13819, glGetnMapivARB, glGetnMapivARB, NULL, 837),
+ NAME_FUNC_OFFSET(13834, glGetnMinmaxARB, glGetnMinmaxARB, NULL, 838),
+ NAME_FUNC_OFFSET(13850, glGetnPixelMapfvARB, glGetnPixelMapfvARB, NULL, 839),
+ NAME_FUNC_OFFSET(13870, glGetnPixelMapuivARB, glGetnPixelMapuivARB, NULL, 840),
+ NAME_FUNC_OFFSET(13891, glGetnPixelMapusvARB, glGetnPixelMapusvARB, NULL, 841),
+ NAME_FUNC_OFFSET(13912, glGetnPolygonStippleARB, glGetnPolygonStippleARB, NULL, 842),
+ NAME_FUNC_OFFSET(13936, glGetnSeparableFilterARB, glGetnSeparableFilterARB, NULL, 843),
+ NAME_FUNC_OFFSET(13961, glGetnTexImageARB, glGetnTexImageARB, NULL, 844),
+ NAME_FUNC_OFFSET(13979, glGetnUniformdvARB, glGetnUniformdvARB, NULL, 845),
+ NAME_FUNC_OFFSET(13998, glGetnUniformfvARB, glGetnUniformfvARB, NULL, 846),
+ NAME_FUNC_OFFSET(14017, glGetnUniformivARB, glGetnUniformivARB, NULL, 847),
+ NAME_FUNC_OFFSET(14036, glGetnUniformuivARB, glGetnUniformuivARB, NULL, 848),
+ NAME_FUNC_OFFSET(14056, glReadnPixelsARB, glReadnPixelsARB, NULL, 849),
+ NAME_FUNC_OFFSET(14073, glDrawArraysInstancedBaseInstance, glDrawArraysInstancedBaseInstance, NULL, 850),
+ NAME_FUNC_OFFSET(14107, glDrawElementsInstancedBaseInstance, glDrawElementsInstancedBaseInstance, NULL, 851),
+ NAME_FUNC_OFFSET(14143, glDrawElementsInstancedBaseVertexBaseInstance, glDrawElementsInstancedBaseVertexBaseInstance, NULL, 852),
+ NAME_FUNC_OFFSET(14189, glDrawTransformFeedbackInstanced, glDrawTransformFeedbackInstanced, NULL, 853),
+ NAME_FUNC_OFFSET(14222, glDrawTransformFeedbackStreamInstanced, glDrawTransformFeedbackStreamInstanced, NULL, 854),
+ NAME_FUNC_OFFSET(14261, gl_dispatch_stub_855, gl_dispatch_stub_855, NULL, 855),
+ NAME_FUNC_OFFSET(14283, glGetActiveAtomicCounterBufferiv, glGetActiveAtomicCounterBufferiv, NULL, 856),
+ NAME_FUNC_OFFSET(14316, glBindImageTexture, glBindImageTexture, NULL, 857),
+ NAME_FUNC_OFFSET(14335, glMemoryBarrier, glMemoryBarrier, NULL, 858),
+ NAME_FUNC_OFFSET(14351, glTexStorage1D, glTexStorage1D, NULL, 859),
+ NAME_FUNC_OFFSET(14366, glTexStorage2D, glTexStorage2D, NULL, 860),
+ NAME_FUNC_OFFSET(14381, glTexStorage3D, glTexStorage3D, NULL, 861),
+ NAME_FUNC_OFFSET(14396, glTextureStorage1DEXT, glTextureStorage1DEXT, NULL, 862),
+ NAME_FUNC_OFFSET(14418, glTextureStorage2DEXT, glTextureStorage2DEXT, NULL, 863),
+ NAME_FUNC_OFFSET(14440, glTextureStorage3DEXT, glTextureStorage3DEXT, NULL, 864),
+ NAME_FUNC_OFFSET(14462, glClearBufferData, glClearBufferData, NULL, 865),
+ NAME_FUNC_OFFSET(14480, glClearBufferSubData, glClearBufferSubData, NULL, 866),
+ NAME_FUNC_OFFSET(14501, glDispatchCompute, glDispatchCompute, NULL, 867),
+ NAME_FUNC_OFFSET(14519, glDispatchComputeIndirect, glDispatchComputeIndirect, NULL, 868),
+ NAME_FUNC_OFFSET(14545, glCopyImageSubData, glCopyImageSubData, NULL, 869),
+ NAME_FUNC_OFFSET(14564, glTextureView, glTextureView, NULL, 870),
+ NAME_FUNC_OFFSET(14578, glBindVertexBuffer, glBindVertexBuffer, NULL, 871),
+ NAME_FUNC_OFFSET(14597, glVertexAttribBinding, glVertexAttribBinding, NULL, 872),
+ NAME_FUNC_OFFSET(14619, glVertexAttribFormat, glVertexAttribFormat, NULL, 873),
+ NAME_FUNC_OFFSET(14640, glVertexAttribIFormat, glVertexAttribIFormat, NULL, 874),
+ NAME_FUNC_OFFSET(14662, glVertexAttribLFormat, glVertexAttribLFormat, NULL, 875),
+ NAME_FUNC_OFFSET(14684, glVertexBindingDivisor, glVertexBindingDivisor, NULL, 876),
+ NAME_FUNC_OFFSET(14707, glMultiDrawArraysIndirect, glMultiDrawArraysIndirect, NULL, 877),
+ NAME_FUNC_OFFSET(14733, glMultiDrawElementsIndirect, glMultiDrawElementsIndirect, NULL, 878),
+ NAME_FUNC_OFFSET(14761, gl_dispatch_stub_879, gl_dispatch_stub_879, NULL, 879),
+ NAME_FUNC_OFFSET(14785, gl_dispatch_stub_880, gl_dispatch_stub_880, NULL, 880),
+ NAME_FUNC_OFFSET(14811, gl_dispatch_stub_881, gl_dispatch_stub_881, NULL, 881),
+ NAME_FUNC_OFFSET(14840, gl_dispatch_stub_882, gl_dispatch_stub_882, NULL, 882),
+ NAME_FUNC_OFFSET(14874, gl_dispatch_stub_883, gl_dispatch_stub_883, NULL, 883),
+ NAME_FUNC_OFFSET(14899, gl_dispatch_stub_884, gl_dispatch_stub_884, NULL, 884),
+ NAME_FUNC_OFFSET(14922, glTexBufferRange, glTexBufferRange, NULL, 885),
+ NAME_FUNC_OFFSET(14939, glTexStorage2DMultisample, glTexStorage2DMultisample, NULL, 886),
+ NAME_FUNC_OFFSET(14965, glTexStorage3DMultisample, glTexStorage3DMultisample, NULL, 887),
+ NAME_FUNC_OFFSET(14991, glBufferStorage, glBufferStorage, NULL, 888),
+ NAME_FUNC_OFFSET(15007, glClearTexImage, glClearTexImage, NULL, 889),
+ NAME_FUNC_OFFSET(15023, glClearTexSubImage, glClearTexSubImage, NULL, 890),
+ NAME_FUNC_OFFSET(15042, glBindBuffersBase, glBindBuffersBase, NULL, 891),
+ NAME_FUNC_OFFSET(15060, glBindBuffersRange, glBindBuffersRange, NULL, 892),
+ NAME_FUNC_OFFSET(15079, glBindImageTextures, glBindImageTextures, NULL, 893),
+ NAME_FUNC_OFFSET(15099, glBindSamplers, glBindSamplers, NULL, 894),
+ NAME_FUNC_OFFSET(15114, glBindTextures, glBindTextures, NULL, 895),
+ NAME_FUNC_OFFSET(15129, glBindVertexBuffers, glBindVertexBuffers, NULL, 896),
+ NAME_FUNC_OFFSET(15149, gl_dispatch_stub_897, gl_dispatch_stub_897, NULL, 897),
+ NAME_FUNC_OFFSET(15163, gl_dispatch_stub_898, gl_dispatch_stub_898, NULL, 898),
+ NAME_FUNC_OFFSET(15181, gl_dispatch_stub_899, gl_dispatch_stub_899, NULL, 899),
+ NAME_FUNC_OFFSET(15204, gl_dispatch_stub_900, gl_dispatch_stub_900, NULL, 900),
+ NAME_FUNC_OFFSET(15234, gl_dispatch_stub_901, gl_dispatch_stub_901, NULL, 901),
+ NAME_FUNC_OFFSET(15257, gl_dispatch_stub_902, gl_dispatch_stub_902, NULL, 902),
+ NAME_FUNC_OFFSET(15283, gl_dispatch_stub_903, gl_dispatch_stub_903, NULL, 903),
+ NAME_FUNC_OFFSET(15309, gl_dispatch_stub_904, gl_dispatch_stub_904, NULL, 904),
+ NAME_FUNC_OFFSET(15335, gl_dispatch_stub_905, gl_dispatch_stub_905, NULL, 905),
+ NAME_FUNC_OFFSET(15361, gl_dispatch_stub_906, gl_dispatch_stub_906, NULL, 906),
+ NAME_FUNC_OFFSET(15388, gl_dispatch_stub_907, gl_dispatch_stub_907, NULL, 907),
+ NAME_FUNC_OFFSET(15418, gl_dispatch_stub_908, gl_dispatch_stub_908, NULL, 908),
+ NAME_FUNC_OFFSET(15448, gl_dispatch_stub_909, gl_dispatch_stub_909, NULL, 909),
+ NAME_FUNC_OFFSET(15478, gl_dispatch_stub_910, gl_dispatch_stub_910, NULL, 910),
+ NAME_FUNC_OFFSET(15503, gl_dispatch_stub_911, gl_dispatch_stub_911, NULL, 911),
+ NAME_FUNC_OFFSET(15527, gl_dispatch_stub_912, gl_dispatch_stub_912, NULL, 912),
+ NAME_FUNC_OFFSET(15551, gl_dispatch_stub_913, gl_dispatch_stub_913, NULL, 913),
+ NAME_FUNC_OFFSET(15575, gl_dispatch_stub_914, gl_dispatch_stub_914, NULL, 914),
+ NAME_FUNC_OFFSET(15591, gl_dispatch_stub_915, gl_dispatch_stub_915, NULL, 915),
+ NAME_FUNC_OFFSET(15612, gl_dispatch_stub_916, gl_dispatch_stub_916, NULL, 916),
+ NAME_FUNC_OFFSET(15637, gl_dispatch_stub_917, gl_dispatch_stub_917, NULL, 917),
+ NAME_FUNC_OFFSET(15653, gl_dispatch_stub_918, gl_dispatch_stub_918, NULL, 918),
+ NAME_FUNC_OFFSET(15675, gl_dispatch_stub_919, gl_dispatch_stub_919, NULL, 919),
+ NAME_FUNC_OFFSET(15692, gl_dispatch_stub_920, gl_dispatch_stub_920, NULL, 920),
+ NAME_FUNC_OFFSET(15709, gl_dispatch_stub_921, gl_dispatch_stub_921, NULL, 921),
+ NAME_FUNC_OFFSET(15736, gl_dispatch_stub_922, gl_dispatch_stub_922, NULL, 922),
+ NAME_FUNC_OFFSET(15757, gl_dispatch_stub_923, gl_dispatch_stub_923, NULL, 923),
+ NAME_FUNC_OFFSET(15784, gl_dispatch_stub_924, gl_dispatch_stub_924, NULL, 924),
+ NAME_FUNC_OFFSET(15810, gl_dispatch_stub_925, gl_dispatch_stub_925, NULL, 925),
+ NAME_FUNC_OFFSET(15840, gl_dispatch_stub_926, gl_dispatch_stub_926, NULL, 926),
+ NAME_FUNC_OFFSET(15864, gl_dispatch_stub_927, gl_dispatch_stub_927, NULL, 927),
+ NAME_FUNC_OFFSET(15892, gl_dispatch_stub_928, gl_dispatch_stub_928, NULL, 928),
+ NAME_FUNC_OFFSET(15922, gl_dispatch_stub_929, gl_dispatch_stub_929, NULL, 929),
+ NAME_FUNC_OFFSET(15950, gl_dispatch_stub_930, gl_dispatch_stub_930, NULL, 930),
+ NAME_FUNC_OFFSET(15975, gl_dispatch_stub_931, gl_dispatch_stub_931, NULL, 931),
+ NAME_FUNC_OFFSET(15999, gl_dispatch_stub_932, gl_dispatch_stub_932, NULL, 932),
+ NAME_FUNC_OFFSET(16042, gl_dispatch_stub_933, gl_dispatch_stub_933, NULL, 933),
+ NAME_FUNC_OFFSET(16075, gl_dispatch_stub_934, gl_dispatch_stub_934, NULL, 934),
+ NAME_FUNC_OFFSET(16109, gl_dispatch_stub_935, gl_dispatch_stub_935, NULL, 935),
+ NAME_FUNC_OFFSET(16136, gl_dispatch_stub_936, gl_dispatch_stub_936, NULL, 936),
+ NAME_FUNC_OFFSET(16161, gl_dispatch_stub_937, gl_dispatch_stub_937, NULL, 937),
+ NAME_FUNC_OFFSET(16189, gl_dispatch_stub_938, gl_dispatch_stub_938, NULL, 938),
+ NAME_FUNC_OFFSET(16215, gl_dispatch_stub_939, gl_dispatch_stub_939, NULL, 939),
+ NAME_FUNC_OFFSET(16233, gl_dispatch_stub_940, gl_dispatch_stub_940, NULL, 940),
+ NAME_FUNC_OFFSET(16262, gl_dispatch_stub_941, gl_dispatch_stub_941, NULL, 941),
+ NAME_FUNC_OFFSET(16291, gl_dispatch_stub_942, gl_dispatch_stub_942, NULL, 942),
+ NAME_FUNC_OFFSET(16316, gl_dispatch_stub_943, gl_dispatch_stub_943, NULL, 943),
+ NAME_FUNC_OFFSET(16342, gl_dispatch_stub_944, gl_dispatch_stub_944, NULL, 944),
+ NAME_FUNC_OFFSET(16366, gl_dispatch_stub_945, gl_dispatch_stub_945, NULL, 945),
+ NAME_FUNC_OFFSET(16390, gl_dispatch_stub_946, gl_dispatch_stub_946, NULL, 946),
+ NAME_FUNC_OFFSET(16418, gl_dispatch_stub_947, gl_dispatch_stub_947, NULL, 947),
+ NAME_FUNC_OFFSET(16444, gl_dispatch_stub_948, gl_dispatch_stub_948, NULL, 948),
+ NAME_FUNC_OFFSET(16469, gl_dispatch_stub_949, gl_dispatch_stub_949, NULL, 949),
+ NAME_FUNC_OFFSET(16497, gl_dispatch_stub_950, gl_dispatch_stub_950, NULL, 950),
+ NAME_FUNC_OFFSET(16523, gl_dispatch_stub_951, gl_dispatch_stub_951, NULL, 951),
+ NAME_FUNC_OFFSET(16542, gl_dispatch_stub_952, gl_dispatch_stub_952, NULL, 952),
+ NAME_FUNC_OFFSET(16575, gl_dispatch_stub_953, gl_dispatch_stub_953, NULL, 953),
+ NAME_FUNC_OFFSET(16611, gl_dispatch_stub_954, gl_dispatch_stub_954, NULL, 954),
+ NAME_FUNC_OFFSET(16628, gl_dispatch_stub_955, gl_dispatch_stub_955, NULL, 955),
+ NAME_FUNC_OFFSET(16650, gl_dispatch_stub_956, gl_dispatch_stub_956, NULL, 956),
+ NAME_FUNC_OFFSET(16668, gl_dispatch_stub_957, gl_dispatch_stub_957, NULL, 957),
+ NAME_FUNC_OFFSET(16689, gl_dispatch_stub_958, gl_dispatch_stub_958, NULL, 958),
+ NAME_FUNC_OFFSET(16710, gl_dispatch_stub_959, gl_dispatch_stub_959, NULL, 959),
+ NAME_FUNC_OFFSET(16739, gl_dispatch_stub_960, gl_dispatch_stub_960, NULL, 960),
+ NAME_FUNC_OFFSET(16769, gl_dispatch_stub_961, gl_dispatch_stub_961, NULL, 961),
+ NAME_FUNC_OFFSET(16798, gl_dispatch_stub_962, gl_dispatch_stub_962, NULL, 962),
+ NAME_FUNC_OFFSET(16827, gl_dispatch_stub_963, gl_dispatch_stub_963, NULL, 963),
+ NAME_FUNC_OFFSET(16858, gl_dispatch_stub_964, gl_dispatch_stub_964, NULL, 964),
+ NAME_FUNC_OFFSET(16884, gl_dispatch_stub_965, gl_dispatch_stub_965, NULL, 965),
+ NAME_FUNC_OFFSET(16915, gl_dispatch_stub_966, gl_dispatch_stub_966, NULL, 966),
+ NAME_FUNC_OFFSET(16942, gl_dispatch_stub_967, gl_dispatch_stub_967, NULL, 967),
+ NAME_FUNC_OFFSET(16980, gl_dispatch_stub_968, gl_dispatch_stub_968, NULL, 968),
+ NAME_FUNC_OFFSET(16996, gl_dispatch_stub_969, gl_dispatch_stub_969, NULL, 969),
+ NAME_FUNC_OFFSET(17017, gl_dispatch_stub_970, gl_dispatch_stub_970, NULL, 970),
+ NAME_FUNC_OFFSET(17039, gl_dispatch_stub_971, gl_dispatch_stub_971, NULL, 971),
+ NAME_FUNC_OFFSET(17062, gl_dispatch_stub_972, gl_dispatch_stub_972, NULL, 972),
+ NAME_FUNC_OFFSET(17082, gl_dispatch_stub_973, gl_dispatch_stub_973, NULL, 973),
+ NAME_FUNC_OFFSET(17103, gl_dispatch_stub_974, gl_dispatch_stub_974, NULL, 974),
+ NAME_FUNC_OFFSET(17123, gl_dispatch_stub_975, gl_dispatch_stub_975, NULL, 975),
+ NAME_FUNC_OFFSET(17144, gl_dispatch_stub_976, gl_dispatch_stub_976, NULL, 976),
+ NAME_FUNC_OFFSET(17163, gl_dispatch_stub_977, gl_dispatch_stub_977, NULL, 977),
+ NAME_FUNC_OFFSET(17182, gl_dispatch_stub_978, gl_dispatch_stub_978, NULL, 978),
+ NAME_FUNC_OFFSET(17212, gl_dispatch_stub_979, gl_dispatch_stub_979, NULL, 979),
+ NAME_FUNC_OFFSET(17231, gl_dispatch_stub_980, gl_dispatch_stub_980, NULL, 980),
+ NAME_FUNC_OFFSET(17261, gl_dispatch_stub_981, gl_dispatch_stub_981, NULL, 981),
+ NAME_FUNC_OFFSET(17281, gl_dispatch_stub_982, gl_dispatch_stub_982, NULL, 982),
+ NAME_FUNC_OFFSET(17301, gl_dispatch_stub_983, gl_dispatch_stub_983, NULL, 983),
+ NAME_FUNC_OFFSET(17321, gl_dispatch_stub_984, gl_dispatch_stub_984, NULL, 984),
+ NAME_FUNC_OFFSET(17351, gl_dispatch_stub_985, gl_dispatch_stub_985, NULL, 985),
+ NAME_FUNC_OFFSET(17382, gl_dispatch_stub_986, gl_dispatch_stub_986, NULL, 986),
+ NAME_FUNC_OFFSET(17401, gl_dispatch_stub_987, gl_dispatch_stub_987, NULL, 987),
+ NAME_FUNC_OFFSET(17428, gl_dispatch_stub_988, gl_dispatch_stub_988, NULL, 988),
+ NAME_FUNC_OFFSET(17454, gl_dispatch_stub_989, gl_dispatch_stub_989, NULL, 989),
+ NAME_FUNC_OFFSET(17481, gl_dispatch_stub_990, gl_dispatch_stub_990, NULL, 990),
+ NAME_FUNC_OFFSET(17508, gl_dispatch_stub_991, gl_dispatch_stub_991, NULL, 991),
+ NAME_FUNC_OFFSET(17536, gl_dispatch_stub_992, gl_dispatch_stub_992, NULL, 992),
+ NAME_FUNC_OFFSET(17563, gl_dispatch_stub_993, gl_dispatch_stub_993, NULL, 993),
+ NAME_FUNC_OFFSET(17589, gl_dispatch_stub_994, gl_dispatch_stub_994, NULL, 994),
+ NAME_FUNC_OFFSET(17616, glInvalidateBufferData, glInvalidateBufferData, NULL, 995),
+ NAME_FUNC_OFFSET(17639, glInvalidateBufferSubData, glInvalidateBufferSubData, NULL, 996),
+ NAME_FUNC_OFFSET(17665, glInvalidateFramebuffer, glInvalidateFramebuffer, NULL, 997),
+ NAME_FUNC_OFFSET(17689, glInvalidateSubFramebuffer, glInvalidateSubFramebuffer, NULL, 998),
+ NAME_FUNC_OFFSET(17716, glInvalidateTexImage, glInvalidateTexImage, NULL, 999),
+ NAME_FUNC_OFFSET(17737, glInvalidateTexSubImage, glInvalidateTexSubImage, NULL, 1000),
+ NAME_FUNC_OFFSET(17761, gl_dispatch_stub_1001, gl_dispatch_stub_1001, NULL, 1001),
+ NAME_FUNC_OFFSET(17780, gl_dispatch_stub_1002, gl_dispatch_stub_1002, NULL, 1002),
+ NAME_FUNC_OFFSET(17794, gl_dispatch_stub_1003, gl_dispatch_stub_1003, NULL, 1003),
+ NAME_FUNC_OFFSET(17809, gl_dispatch_stub_1004, gl_dispatch_stub_1004, NULL, 1004),
+ NAME_FUNC_OFFSET(17823, gl_dispatch_stub_1005, gl_dispatch_stub_1005, NULL, 1005),
+ NAME_FUNC_OFFSET(17838, gl_dispatch_stub_1006, gl_dispatch_stub_1006, NULL, 1006),
+ NAME_FUNC_OFFSET(17852, gl_dispatch_stub_1007, gl_dispatch_stub_1007, NULL, 1007),
+ NAME_FUNC_OFFSET(17867, gl_dispatch_stub_1008, gl_dispatch_stub_1008, NULL, 1008),
+ NAME_FUNC_OFFSET(17881, gl_dispatch_stub_1009, gl_dispatch_stub_1009, NULL, 1009),
+ NAME_FUNC_OFFSET(17896, glPointSizePointerOES, glPointSizePointerOES, NULL, 1010),
+ NAME_FUNC_OFFSET(17918, gl_dispatch_stub_1011, gl_dispatch_stub_1011, NULL, 1011),
+ NAME_FUNC_OFFSET(17936, gl_dispatch_stub_1012, gl_dispatch_stub_1012, NULL, 1012),
+ NAME_FUNC_OFFSET(17953, gl_dispatch_stub_1013, gl_dispatch_stub_1013, NULL, 1013),
+ NAME_FUNC_OFFSET(17973, glColorPointerEXT, glColorPointerEXT, NULL, 1014),
+ NAME_FUNC_OFFSET(17991, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, 1015),
+ NAME_FUNC_OFFSET(18012, glIndexPointerEXT, glIndexPointerEXT, NULL, 1016),
+ NAME_FUNC_OFFSET(18030, glNormalPointerEXT, glNormalPointerEXT, NULL, 1017),
+ NAME_FUNC_OFFSET(18049, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, 1018),
+ NAME_FUNC_OFFSET(18070, glVertexPointerEXT, glVertexPointerEXT, NULL, 1019),
+ NAME_FUNC_OFFSET(18089, gl_dispatch_stub_1020, gl_dispatch_stub_1020, NULL, 1020),
+ NAME_FUNC_OFFSET(18113, gl_dispatch_stub_1021, gl_dispatch_stub_1021, NULL, 1021),
+ NAME_FUNC_OFFSET(18135, gl_dispatch_stub_1022, gl_dispatch_stub_1022, NULL, 1022),
+ NAME_FUNC_OFFSET(18157, gl_dispatch_stub_1023, gl_dispatch_stub_1023, NULL, 1023),
+ NAME_FUNC_OFFSET(18180, gl_dispatch_stub_1024, gl_dispatch_stub_1024, NULL, 1024),
+ NAME_FUNC_OFFSET(18205, gl_dispatch_stub_1025, gl_dispatch_stub_1025, NULL, 1025),
+ NAME_FUNC_OFFSET(18227, gl_dispatch_stub_1026, gl_dispatch_stub_1026, NULL, 1026),
NAME_FUNC_OFFSET(18255, gl_dispatch_stub_1027, gl_dispatch_stub_1027, NULL, 1027),
- NAME_FUNC_OFFSET(18283, gl_dispatch_stub_1028, gl_dispatch_stub_1028, NULL, 1028),
- NAME_FUNC_OFFSET(18306, gl_dispatch_stub_1029, gl_dispatch_stub_1029, NULL, 1029),
- NAME_FUNC_OFFSET(18326, glLockArraysEXT, glLockArraysEXT, NULL, 1030),
- NAME_FUNC_OFFSET(18342, gl_dispatch_stub_1031, gl_dispatch_stub_1031, NULL, 1031),
- NAME_FUNC_OFFSET(18361, gl_dispatch_stub_1032, gl_dispatch_stub_1032, NULL, 1032),
- NAME_FUNC_OFFSET(18381, gl_dispatch_stub_1033, gl_dispatch_stub_1033, NULL, 1033),
- NAME_FUNC_OFFSET(18400, gl_dispatch_stub_1034, gl_dispatch_stub_1034, NULL, 1034),
- NAME_FUNC_OFFSET(18420, gl_dispatch_stub_1035, gl_dispatch_stub_1035, NULL, 1035),
- NAME_FUNC_OFFSET(18439, gl_dispatch_stub_1036, gl_dispatch_stub_1036, NULL, 1036),
- NAME_FUNC_OFFSET(18459, gl_dispatch_stub_1037, gl_dispatch_stub_1037, NULL, 1037),
- NAME_FUNC_OFFSET(18479, gl_dispatch_stub_1038, gl_dispatch_stub_1038, NULL, 1038),
- NAME_FUNC_OFFSET(18500, gl_dispatch_stub_1039, gl_dispatch_stub_1039, NULL, 1039),
- NAME_FUNC_OFFSET(18519, gl_dispatch_stub_1040, gl_dispatch_stub_1040, NULL, 1040),
- NAME_FUNC_OFFSET(18539, gl_dispatch_stub_1041, gl_dispatch_stub_1041, NULL, 1041),
- NAME_FUNC_OFFSET(18558, gl_dispatch_stub_1042, gl_dispatch_stub_1042, NULL, 1042),
- NAME_FUNC_OFFSET(18578, gl_dispatch_stub_1043, gl_dispatch_stub_1043, NULL, 1043),
- NAME_FUNC_OFFSET(18597, gl_dispatch_stub_1044, gl_dispatch_stub_1044, NULL, 1044),
- NAME_FUNC_OFFSET(18617, gl_dispatch_stub_1045, gl_dispatch_stub_1045, NULL, 1045),
- NAME_FUNC_OFFSET(18637, gl_dispatch_stub_1046, gl_dispatch_stub_1046, NULL, 1046),
- NAME_FUNC_OFFSET(18658, gl_dispatch_stub_1047, gl_dispatch_stub_1047, NULL, 1047),
- NAME_FUNC_OFFSET(18677, gl_dispatch_stub_1048, gl_dispatch_stub_1048, NULL, 1048),
- NAME_FUNC_OFFSET(18697, gl_dispatch_stub_1049, gl_dispatch_stub_1049, NULL, 1049),
- NAME_FUNC_OFFSET(18716, gl_dispatch_stub_1050, gl_dispatch_stub_1050, NULL, 1050),
- NAME_FUNC_OFFSET(18736, gl_dispatch_stub_1051, gl_dispatch_stub_1051, NULL, 1051),
- NAME_FUNC_OFFSET(18755, gl_dispatch_stub_1052, gl_dispatch_stub_1052, NULL, 1052),
- NAME_FUNC_OFFSET(18775, gl_dispatch_stub_1053, gl_dispatch_stub_1053, NULL, 1053),
- NAME_FUNC_OFFSET(18795, gl_dispatch_stub_1054, gl_dispatch_stub_1054, NULL, 1054),
- NAME_FUNC_OFFSET(18816, gl_dispatch_stub_1055, gl_dispatch_stub_1055, NULL, 1055),
- NAME_FUNC_OFFSET(18835, gl_dispatch_stub_1056, gl_dispatch_stub_1056, NULL, 1056),
- NAME_FUNC_OFFSET(18855, gl_dispatch_stub_1057, gl_dispatch_stub_1057, NULL, 1057),
- NAME_FUNC_OFFSET(18874, gl_dispatch_stub_1058, gl_dispatch_stub_1058, NULL, 1058),
- NAME_FUNC_OFFSET(18894, gl_dispatch_stub_1059, gl_dispatch_stub_1059, NULL, 1059),
- NAME_FUNC_OFFSET(18913, gl_dispatch_stub_1060, gl_dispatch_stub_1060, NULL, 1060),
- NAME_FUNC_OFFSET(18933, gl_dispatch_stub_1061, gl_dispatch_stub_1061, NULL, 1061),
- NAME_FUNC_OFFSET(18953, gl_dispatch_stub_1062, gl_dispatch_stub_1062, NULL, 1062),
- NAME_FUNC_OFFSET(18974, gl_dispatch_stub_1063, gl_dispatch_stub_1063, NULL, 1063),
- NAME_FUNC_OFFSET(19000, gl_dispatch_stub_1064, gl_dispatch_stub_1064, NULL, 1064),
+ NAME_FUNC_OFFSET(18278, gl_dispatch_stub_1028, gl_dispatch_stub_1028, NULL, 1028),
+ NAME_FUNC_OFFSET(18298, glLockArraysEXT, glLockArraysEXT, NULL, 1029),
+ NAME_FUNC_OFFSET(18314, gl_dispatch_stub_1030, gl_dispatch_stub_1030, NULL, 1030),
+ NAME_FUNC_OFFSET(18333, gl_dispatch_stub_1031, gl_dispatch_stub_1031, NULL, 1031),
+ NAME_FUNC_OFFSET(18353, gl_dispatch_stub_1032, gl_dispatch_stub_1032, NULL, 1032),
+ NAME_FUNC_OFFSET(18372, gl_dispatch_stub_1033, gl_dispatch_stub_1033, NULL, 1033),
+ NAME_FUNC_OFFSET(18392, gl_dispatch_stub_1034, gl_dispatch_stub_1034, NULL, 1034),
+ NAME_FUNC_OFFSET(18411, gl_dispatch_stub_1035, gl_dispatch_stub_1035, NULL, 1035),
+ NAME_FUNC_OFFSET(18431, gl_dispatch_stub_1036, gl_dispatch_stub_1036, NULL, 1036),
+ NAME_FUNC_OFFSET(18451, gl_dispatch_stub_1037, gl_dispatch_stub_1037, NULL, 1037),
+ NAME_FUNC_OFFSET(18472, gl_dispatch_stub_1038, gl_dispatch_stub_1038, NULL, 1038),
+ NAME_FUNC_OFFSET(18491, gl_dispatch_stub_1039, gl_dispatch_stub_1039, NULL, 1039),
+ NAME_FUNC_OFFSET(18511, gl_dispatch_stub_1040, gl_dispatch_stub_1040, NULL, 1040),
+ NAME_FUNC_OFFSET(18530, gl_dispatch_stub_1041, gl_dispatch_stub_1041, NULL, 1041),
+ NAME_FUNC_OFFSET(18550, gl_dispatch_stub_1042, gl_dispatch_stub_1042, NULL, 1042),
+ NAME_FUNC_OFFSET(18569, gl_dispatch_stub_1043, gl_dispatch_stub_1043, NULL, 1043),
+ NAME_FUNC_OFFSET(18589, gl_dispatch_stub_1044, gl_dispatch_stub_1044, NULL, 1044),
+ NAME_FUNC_OFFSET(18609, gl_dispatch_stub_1045, gl_dispatch_stub_1045, NULL, 1045),
+ NAME_FUNC_OFFSET(18630, gl_dispatch_stub_1046, gl_dispatch_stub_1046, NULL, 1046),
+ NAME_FUNC_OFFSET(18649, gl_dispatch_stub_1047, gl_dispatch_stub_1047, NULL, 1047),
+ NAME_FUNC_OFFSET(18669, gl_dispatch_stub_1048, gl_dispatch_stub_1048, NULL, 1048),
+ NAME_FUNC_OFFSET(18688, gl_dispatch_stub_1049, gl_dispatch_stub_1049, NULL, 1049),
+ NAME_FUNC_OFFSET(18708, gl_dispatch_stub_1050, gl_dispatch_stub_1050, NULL, 1050),
+ NAME_FUNC_OFFSET(18727, gl_dispatch_stub_1051, gl_dispatch_stub_1051, NULL, 1051),
+ NAME_FUNC_OFFSET(18747, gl_dispatch_stub_1052, gl_dispatch_stub_1052, NULL, 1052),
+ NAME_FUNC_OFFSET(18767, gl_dispatch_stub_1053, gl_dispatch_stub_1053, NULL, 1053),
+ NAME_FUNC_OFFSET(18788, gl_dispatch_stub_1054, gl_dispatch_stub_1054, NULL, 1054),
+ NAME_FUNC_OFFSET(18807, gl_dispatch_stub_1055, gl_dispatch_stub_1055, NULL, 1055),
+ NAME_FUNC_OFFSET(18827, gl_dispatch_stub_1056, gl_dispatch_stub_1056, NULL, 1056),
+ NAME_FUNC_OFFSET(18846, gl_dispatch_stub_1057, gl_dispatch_stub_1057, NULL, 1057),
+ NAME_FUNC_OFFSET(18866, gl_dispatch_stub_1058, gl_dispatch_stub_1058, NULL, 1058),
+ NAME_FUNC_OFFSET(18885, gl_dispatch_stub_1059, gl_dispatch_stub_1059, NULL, 1059),
+ NAME_FUNC_OFFSET(18905, gl_dispatch_stub_1060, gl_dispatch_stub_1060, NULL, 1060),
+ NAME_FUNC_OFFSET(18925, gl_dispatch_stub_1061, gl_dispatch_stub_1061, NULL, 1061),
+ NAME_FUNC_OFFSET(18946, gl_dispatch_stub_1062, gl_dispatch_stub_1062, NULL, 1062),
+ NAME_FUNC_OFFSET(18972, gl_dispatch_stub_1063, gl_dispatch_stub_1063, NULL, 1063),
+ NAME_FUNC_OFFSET(18998, gl_dispatch_stub_1064, gl_dispatch_stub_1064, NULL, 1064),
NAME_FUNC_OFFSET(19026, gl_dispatch_stub_1065, gl_dispatch_stub_1065, NULL, 1065),
NAME_FUNC_OFFSET(19054, gl_dispatch_stub_1066, gl_dispatch_stub_1066, NULL, 1066),
NAME_FUNC_OFFSET(19082, gl_dispatch_stub_1067, gl_dispatch_stub_1067, NULL, 1067),
NAME_FUNC_OFFSET(19110, gl_dispatch_stub_1068, gl_dispatch_stub_1068, NULL, 1068),
- NAME_FUNC_OFFSET(19138, gl_dispatch_stub_1069, gl_dispatch_stub_1069, NULL, 1069),
- NAME_FUNC_OFFSET(19164, gl_dispatch_stub_1070, gl_dispatch_stub_1070, NULL, 1070),
+ NAME_FUNC_OFFSET(19136, gl_dispatch_stub_1069, gl_dispatch_stub_1069, NULL, 1069),
+ NAME_FUNC_OFFSET(19162, gl_dispatch_stub_1070, gl_dispatch_stub_1070, NULL, 1070),
NAME_FUNC_OFFSET(19190, gl_dispatch_stub_1071, gl_dispatch_stub_1071, NULL, 1071),
NAME_FUNC_OFFSET(19218, gl_dispatch_stub_1072, gl_dispatch_stub_1072, NULL, 1072),
NAME_FUNC_OFFSET(19246, gl_dispatch_stub_1073, gl_dispatch_stub_1073, NULL, 1073),
NAME_FUNC_OFFSET(19274, gl_dispatch_stub_1074, gl_dispatch_stub_1074, NULL, 1074),
- NAME_FUNC_OFFSET(19302, gl_dispatch_stub_1075, gl_dispatch_stub_1075, NULL, 1075),
- NAME_FUNC_OFFSET(19328, gl_dispatch_stub_1076, gl_dispatch_stub_1076, NULL, 1076),
+ NAME_FUNC_OFFSET(19300, gl_dispatch_stub_1075, gl_dispatch_stub_1075, NULL, 1075),
+ NAME_FUNC_OFFSET(19326, gl_dispatch_stub_1076, gl_dispatch_stub_1076, NULL, 1076),
NAME_FUNC_OFFSET(19354, gl_dispatch_stub_1077, gl_dispatch_stub_1077, NULL, 1077),
NAME_FUNC_OFFSET(19382, gl_dispatch_stub_1078, gl_dispatch_stub_1078, NULL, 1078),
NAME_FUNC_OFFSET(19410, gl_dispatch_stub_1079, gl_dispatch_stub_1079, NULL, 1079),
- NAME_FUNC_OFFSET(19438, gl_dispatch_stub_1080, gl_dispatch_stub_1080, NULL, 1080),
- NAME_FUNC_OFFSET(19466, glUnlockArraysEXT, glUnlockArraysEXT, NULL, 1081),
- NAME_FUNC_OFFSET(19484, gl_dispatch_stub_1082, gl_dispatch_stub_1082, NULL, 1082),
- NAME_FUNC_OFFSET(19503, gl_dispatch_stub_1083, gl_dispatch_stub_1083, NULL, 1083),
- NAME_FUNC_OFFSET(19529, glDebugMessageCallback, glDebugMessageCallback, NULL, 1084),
- NAME_FUNC_OFFSET(19552, glDebugMessageControl, glDebugMessageControl, NULL, 1085),
- NAME_FUNC_OFFSET(19574, glDebugMessageInsert, glDebugMessageInsert, NULL, 1086),
- NAME_FUNC_OFFSET(19595, glGetDebugMessageLog, glGetDebugMessageLog, NULL, 1087),
- NAME_FUNC_OFFSET(19616, glGetObjectLabel, glGetObjectLabel, NULL, 1088),
- NAME_FUNC_OFFSET(19633, glGetObjectPtrLabel, glGetObjectPtrLabel, NULL, 1089),
- NAME_FUNC_OFFSET(19653, glObjectLabel, glObjectLabel, NULL, 1090),
- NAME_FUNC_OFFSET(19667, glObjectPtrLabel, glObjectPtrLabel, NULL, 1091),
- NAME_FUNC_OFFSET(19684, glPopDebugGroup, glPopDebugGroup, NULL, 1092),
- NAME_FUNC_OFFSET(19700, glPushDebugGroup, glPushDebugGroup, NULL, 1093),
- NAME_FUNC_OFFSET(19717, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 1094),
- NAME_FUNC_OFFSET(19739, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 1095),
- NAME_FUNC_OFFSET(19762, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 1096),
- NAME_FUNC_OFFSET(19785, glFogCoordfEXT, glFogCoordfEXT, NULL, 1097),
- NAME_FUNC_OFFSET(19800, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 1098),
- NAME_FUNC_OFFSET(19816, glResizeBuffersMESA, glResizeBuffersMESA, NULL, 1099),
- NAME_FUNC_OFFSET(19836, glWindowPos4dMESA, glWindowPos4dMESA, NULL, 1100),
- NAME_FUNC_OFFSET(19854, glWindowPos4dvMESA, glWindowPos4dvMESA, NULL, 1101),
- NAME_FUNC_OFFSET(19873, glWindowPos4fMESA, glWindowPos4fMESA, NULL, 1102),
- NAME_FUNC_OFFSET(19891, glWindowPos4fvMESA, glWindowPos4fvMESA, NULL, 1103),
- NAME_FUNC_OFFSET(19910, glWindowPos4iMESA, glWindowPos4iMESA, NULL, 1104),
- NAME_FUNC_OFFSET(19928, glWindowPos4ivMESA, glWindowPos4ivMESA, NULL, 1105),
- NAME_FUNC_OFFSET(19947, glWindowPos4sMESA, glWindowPos4sMESA, NULL, 1106),
- NAME_FUNC_OFFSET(19965, glWindowPos4svMESA, glWindowPos4svMESA, NULL, 1107),
- NAME_FUNC_OFFSET(19984, gl_dispatch_stub_1108, gl_dispatch_stub_1108, NULL, 1108),
- NAME_FUNC_OFFSET(20009, gl_dispatch_stub_1109, gl_dispatch_stub_1109, NULL, 1109),
- NAME_FUNC_OFFSET(20036, glAreProgramsResidentNV, glAreProgramsResidentNV, NULL, 1110),
- NAME_FUNC_OFFSET(20060, glExecuteProgramNV, glExecuteProgramNV, NULL, 1111),
- NAME_FUNC_OFFSET(20079, glGetProgramParameterdvNV, glGetProgramParameterdvNV, NULL, 1112),
- NAME_FUNC_OFFSET(20105, glGetProgramParameterfvNV, glGetProgramParameterfvNV, NULL, 1113),
- NAME_FUNC_OFFSET(20131, glGetProgramStringNV, glGetProgramStringNV, NULL, 1114),
- NAME_FUNC_OFFSET(20152, glGetProgramivNV, glGetProgramivNV, NULL, 1115),
- NAME_FUNC_OFFSET(20169, glGetTrackMatrixivNV, glGetTrackMatrixivNV, NULL, 1116),
- NAME_FUNC_OFFSET(20190, glGetVertexAttribdvNV, glGetVertexAttribdvNV, NULL, 1117),
- NAME_FUNC_OFFSET(20212, glGetVertexAttribfvNV, glGetVertexAttribfvNV, NULL, 1118),
- NAME_FUNC_OFFSET(20234, glGetVertexAttribivNV, glGetVertexAttribivNV, NULL, 1119),
- NAME_FUNC_OFFSET(20256, glLoadProgramNV, glLoadProgramNV, NULL, 1120),
- NAME_FUNC_OFFSET(20272, glProgramParameters4dvNV, glProgramParameters4dvNV, NULL, 1121),
- NAME_FUNC_OFFSET(20297, glProgramParameters4fvNV, glProgramParameters4fvNV, NULL, 1122),
- NAME_FUNC_OFFSET(20322, glRequestResidentProgramsNV, glRequestResidentProgramsNV, NULL, 1123),
- NAME_FUNC_OFFSET(20350, glTrackMatrixNV, glTrackMatrixNV, NULL, 1124),
- NAME_FUNC_OFFSET(20366, glVertexAttrib1dNV, glVertexAttrib1dNV, NULL, 1125),
- NAME_FUNC_OFFSET(20385, glVertexAttrib1dvNV, glVertexAttrib1dvNV, NULL, 1126),
- NAME_FUNC_OFFSET(20405, glVertexAttrib1fNV, glVertexAttrib1fNV, NULL, 1127),
- NAME_FUNC_OFFSET(20424, glVertexAttrib1fvNV, glVertexAttrib1fvNV, NULL, 1128),
- NAME_FUNC_OFFSET(20444, glVertexAttrib1sNV, glVertexAttrib1sNV, NULL, 1129),
- NAME_FUNC_OFFSET(20463, glVertexAttrib1svNV, glVertexAttrib1svNV, NULL, 1130),
- NAME_FUNC_OFFSET(20483, glVertexAttrib2dNV, glVertexAttrib2dNV, NULL, 1131),
- NAME_FUNC_OFFSET(20502, glVertexAttrib2dvNV, glVertexAttrib2dvNV, NULL, 1132),
- NAME_FUNC_OFFSET(20522, glVertexAttrib2fNV, glVertexAttrib2fNV, NULL, 1133),
- NAME_FUNC_OFFSET(20541, glVertexAttrib2fvNV, glVertexAttrib2fvNV, NULL, 1134),
- NAME_FUNC_OFFSET(20561, glVertexAttrib2sNV, glVertexAttrib2sNV, NULL, 1135),
- NAME_FUNC_OFFSET(20580, glVertexAttrib2svNV, glVertexAttrib2svNV, NULL, 1136),
- NAME_FUNC_OFFSET(20600, glVertexAttrib3dNV, glVertexAttrib3dNV, NULL, 1137),
- NAME_FUNC_OFFSET(20619, glVertexAttrib3dvNV, glVertexAttrib3dvNV, NULL, 1138),
- NAME_FUNC_OFFSET(20639, glVertexAttrib3fNV, glVertexAttrib3fNV, NULL, 1139),
- NAME_FUNC_OFFSET(20658, glVertexAttrib3fvNV, glVertexAttrib3fvNV, NULL, 1140),
- NAME_FUNC_OFFSET(20678, glVertexAttrib3sNV, glVertexAttrib3sNV, NULL, 1141),
- NAME_FUNC_OFFSET(20697, glVertexAttrib3svNV, glVertexAttrib3svNV, NULL, 1142),
- NAME_FUNC_OFFSET(20717, glVertexAttrib4dNV, glVertexAttrib4dNV, NULL, 1143),
- NAME_FUNC_OFFSET(20736, glVertexAttrib4dvNV, glVertexAttrib4dvNV, NULL, 1144),
- NAME_FUNC_OFFSET(20756, glVertexAttrib4fNV, glVertexAttrib4fNV, NULL, 1145),
- NAME_FUNC_OFFSET(20775, glVertexAttrib4fvNV, glVertexAttrib4fvNV, NULL, 1146),
- NAME_FUNC_OFFSET(20795, glVertexAttrib4sNV, glVertexAttrib4sNV, NULL, 1147),
- NAME_FUNC_OFFSET(20814, glVertexAttrib4svNV, glVertexAttrib4svNV, NULL, 1148),
- NAME_FUNC_OFFSET(20834, glVertexAttrib4ubNV, glVertexAttrib4ubNV, NULL, 1149),
- NAME_FUNC_OFFSET(20854, glVertexAttrib4ubvNV, glVertexAttrib4ubvNV, NULL, 1150),
- NAME_FUNC_OFFSET(20875, glVertexAttribPointerNV, glVertexAttribPointerNV, NULL, 1151),
- NAME_FUNC_OFFSET(20899, glVertexAttribs1dvNV, glVertexAttribs1dvNV, NULL, 1152),
- NAME_FUNC_OFFSET(20920, glVertexAttribs1fvNV, glVertexAttribs1fvNV, NULL, 1153),
- NAME_FUNC_OFFSET(20941, glVertexAttribs1svNV, glVertexAttribs1svNV, NULL, 1154),
- NAME_FUNC_OFFSET(20962, glVertexAttribs2dvNV, glVertexAttribs2dvNV, NULL, 1155),
- NAME_FUNC_OFFSET(20983, glVertexAttribs2fvNV, glVertexAttribs2fvNV, NULL, 1156),
- NAME_FUNC_OFFSET(21004, glVertexAttribs2svNV, glVertexAttribs2svNV, NULL, 1157),
- NAME_FUNC_OFFSET(21025, glVertexAttribs3dvNV, glVertexAttribs3dvNV, NULL, 1158),
- NAME_FUNC_OFFSET(21046, glVertexAttribs3fvNV, glVertexAttribs3fvNV, NULL, 1159),
- NAME_FUNC_OFFSET(21067, glVertexAttribs3svNV, glVertexAttribs3svNV, NULL, 1160),
- NAME_FUNC_OFFSET(21088, glVertexAttribs4dvNV, glVertexAttribs4dvNV, NULL, 1161),
- NAME_FUNC_OFFSET(21109, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, 1162),
- NAME_FUNC_OFFSET(21130, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, 1163),
- NAME_FUNC_OFFSET(21151, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, 1164),
- NAME_FUNC_OFFSET(21173, glGetTexBumpParameterfvATI, glGetTexBumpParameterfvATI, NULL, 1165),
- NAME_FUNC_OFFSET(21200, glGetTexBumpParameterivATI, glGetTexBumpParameterivATI, NULL, 1166),
- NAME_FUNC_OFFSET(21227, glTexBumpParameterfvATI, glTexBumpParameterfvATI, NULL, 1167),
- NAME_FUNC_OFFSET(21251, glTexBumpParameterivATI, glTexBumpParameterivATI, NULL, 1168),
- NAME_FUNC_OFFSET(21275, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, 1169),
- NAME_FUNC_OFFSET(21297, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, 1170),
- NAME_FUNC_OFFSET(21319, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, 1171),
- NAME_FUNC_OFFSET(21341, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, 1172),
- NAME_FUNC_OFFSET(21366, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, 1173),
- NAME_FUNC_OFFSET(21390, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, 1174),
- NAME_FUNC_OFFSET(21412, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, 1175),
- NAME_FUNC_OFFSET(21434, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, 1176),
- NAME_FUNC_OFFSET(21456, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, 1177),
- NAME_FUNC_OFFSET(21482, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, 1178),
- NAME_FUNC_OFFSET(21505, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, 1179),
- NAME_FUNC_OFFSET(21529, glPassTexCoordATI, glPassTexCoordATI, NULL, 1180),
- NAME_FUNC_OFFSET(21547, glSampleMapATI, glSampleMapATI, NULL, 1181),
- NAME_FUNC_OFFSET(21562, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, 1182),
- NAME_FUNC_OFFSET(21593, gl_dispatch_stub_1183, gl_dispatch_stub_1183, NULL, 1183),
- NAME_FUNC_OFFSET(21616, gl_dispatch_stub_1184, gl_dispatch_stub_1184, NULL, 1184),
- NAME_FUNC_OFFSET(21639, gl_dispatch_stub_1185, gl_dispatch_stub_1185, NULL, 1185),
- NAME_FUNC_OFFSET(21662, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, 1186),
- NAME_FUNC_OFFSET(21693, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, 1187),
- NAME_FUNC_OFFSET(21724, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, 1188),
- NAME_FUNC_OFFSET(21752, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, 1189),
- NAME_FUNC_OFFSET(21781, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, 1190),
- NAME_FUNC_OFFSET(21809, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, 1191),
- NAME_FUNC_OFFSET(21838, glPrimitiveRestartNV, glPrimitiveRestartNV, NULL, 1192),
- NAME_FUNC_OFFSET(21859, gl_dispatch_stub_1193, gl_dispatch_stub_1193, NULL, 1193),
- NAME_FUNC_OFFSET(21876, gl_dispatch_stub_1194, gl_dispatch_stub_1194, NULL, 1194),
- NAME_FUNC_OFFSET(21889, gl_dispatch_stub_1195, gl_dispatch_stub_1195, NULL, 1195),
- NAME_FUNC_OFFSET(21903, gl_dispatch_stub_1196, gl_dispatch_stub_1196, NULL, 1196),
- NAME_FUNC_OFFSET(21920, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 1197),
- NAME_FUNC_OFFSET(21941, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 1198),
- NAME_FUNC_OFFSET(21963, gl_dispatch_stub_1199, gl_dispatch_stub_1199, NULL, 1199),
- NAME_FUNC_OFFSET(21987, gl_dispatch_stub_1200, gl_dispatch_stub_1200, NULL, 1200),
- NAME_FUNC_OFFSET(22017, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 1201),
- NAME_FUNC_OFFSET(22038, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 1202),
- NAME_FUNC_OFFSET(22060, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 1203),
- NAME_FUNC_OFFSET(22081, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 1204),
- NAME_FUNC_OFFSET(22103, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 1205),
- NAME_FUNC_OFFSET(22125, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 1206),
- NAME_FUNC_OFFSET(22148, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 1207),
- NAME_FUNC_OFFSET(22169, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 1208),
- NAME_FUNC_OFFSET(22191, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 1209),
- NAME_FUNC_OFFSET(22213, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 1210),
- NAME_FUNC_OFFSET(22236, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 1211),
- NAME_FUNC_OFFSET(22257, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 1212),
- NAME_FUNC_OFFSET(22279, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 1213),
- NAME_FUNC_OFFSET(22301, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 1214),
- NAME_FUNC_OFFSET(22324, glClearColorIiEXT, glClearColorIiEXT, NULL, 1215),
- NAME_FUNC_OFFSET(22342, glClearColorIuiEXT, glClearColorIuiEXT, NULL, 1216),
- NAME_FUNC_OFFSET(22361, glBindBufferOffsetEXT, glBindBufferOffsetEXT, NULL, 1217),
- NAME_FUNC_OFFSET(22383, glBeginPerfMonitorAMD, glBeginPerfMonitorAMD, NULL, 1218),
- NAME_FUNC_OFFSET(22405, glDeletePerfMonitorsAMD, glDeletePerfMonitorsAMD, NULL, 1219),
- NAME_FUNC_OFFSET(22429, glEndPerfMonitorAMD, glEndPerfMonitorAMD, NULL, 1220),
- NAME_FUNC_OFFSET(22449, glGenPerfMonitorsAMD, glGenPerfMonitorsAMD, NULL, 1221),
- NAME_FUNC_OFFSET(22470, glGetPerfMonitorCounterDataAMD, glGetPerfMonitorCounterDataAMD, NULL, 1222),
- NAME_FUNC_OFFSET(22501, glGetPerfMonitorCounterInfoAMD, glGetPerfMonitorCounterInfoAMD, NULL, 1223),
- NAME_FUNC_OFFSET(22532, glGetPerfMonitorCounterStringAMD, glGetPerfMonitorCounterStringAMD, NULL, 1224),
- NAME_FUNC_OFFSET(22565, glGetPerfMonitorCountersAMD, glGetPerfMonitorCountersAMD, NULL, 1225),
- NAME_FUNC_OFFSET(22593, glGetPerfMonitorGroupStringAMD, glGetPerfMonitorGroupStringAMD, NULL, 1226),
- NAME_FUNC_OFFSET(22624, glGetPerfMonitorGroupsAMD, glGetPerfMonitorGroupsAMD, NULL, 1227),
- NAME_FUNC_OFFSET(22650, glSelectPerfMonitorCountersAMD, glSelectPerfMonitorCountersAMD, NULL, 1228),
- NAME_FUNC_OFFSET(22681, glGetObjectParameterivAPPLE, glGetObjectParameterivAPPLE, NULL, 1229),
- NAME_FUNC_OFFSET(22709, glObjectPurgeableAPPLE, glObjectPurgeableAPPLE, NULL, 1230),
- NAME_FUNC_OFFSET(22732, glObjectUnpurgeableAPPLE, glObjectUnpurgeableAPPLE, NULL, 1231),
- NAME_FUNC_OFFSET(22757, glActiveProgramEXT, glActiveProgramEXT, NULL, 1232),
- NAME_FUNC_OFFSET(22776, glCreateShaderProgramEXT, glCreateShaderProgramEXT, NULL, 1233),
- NAME_FUNC_OFFSET(22801, glUseShaderProgramEXT, glUseShaderProgramEXT, NULL, 1234),
- NAME_FUNC_OFFSET(22823, glTextureBarrierNV, glTextureBarrierNV, NULL, 1235),
- NAME_FUNC_OFFSET(22842, glVDPAUFiniNV, glVDPAUFiniNV, NULL, 1236),
- NAME_FUNC_OFFSET(22856, glVDPAUGetSurfaceivNV, glVDPAUGetSurfaceivNV, NULL, 1237),
- NAME_FUNC_OFFSET(22878, glVDPAUInitNV, glVDPAUInitNV, NULL, 1238),
- NAME_FUNC_OFFSET(22892, glVDPAUIsSurfaceNV, glVDPAUIsSurfaceNV, NULL, 1239),
- NAME_FUNC_OFFSET(22911, glVDPAUMapSurfacesNV, glVDPAUMapSurfacesNV, NULL, 1240),
- NAME_FUNC_OFFSET(22932, glVDPAURegisterOutputSurfaceNV, glVDPAURegisterOutputSurfaceNV, NULL, 1241),
- NAME_FUNC_OFFSET(22963, glVDPAURegisterVideoSurfaceNV, glVDPAURegisterVideoSurfaceNV, NULL, 1242),
- NAME_FUNC_OFFSET(22993, glVDPAUSurfaceAccessNV, glVDPAUSurfaceAccessNV, NULL, 1243),
- NAME_FUNC_OFFSET(23016, glVDPAUUnmapSurfacesNV, glVDPAUUnmapSurfacesNV, NULL, 1244),
- NAME_FUNC_OFFSET(23039, glVDPAUUnregisterSurfaceNV, glVDPAUUnregisterSurfaceNV, NULL, 1245),
- NAME_FUNC_OFFSET(23066, gl_dispatch_stub_1246, gl_dispatch_stub_1246, NULL, 1246),
- NAME_FUNC_OFFSET(23088, gl_dispatch_stub_1247, gl_dispatch_stub_1247, NULL, 1247),
- NAME_FUNC_OFFSET(23111, gl_dispatch_stub_1248, gl_dispatch_stub_1248, NULL, 1248),
- NAME_FUNC_OFFSET(23134, gl_dispatch_stub_1249, gl_dispatch_stub_1249, NULL, 1249),
- NAME_FUNC_OFFSET(23154, gl_dispatch_stub_1250, gl_dispatch_stub_1250, NULL, 1250),
- NAME_FUNC_OFFSET(23181, gl_dispatch_stub_1251, gl_dispatch_stub_1251, NULL, 1251),
- NAME_FUNC_OFFSET(23207, gl_dispatch_stub_1252, gl_dispatch_stub_1252, NULL, 1252),
- NAME_FUNC_OFFSET(23233, gl_dispatch_stub_1253, gl_dispatch_stub_1253, NULL, 1253),
+ NAME_FUNC_OFFSET(19438, glUnlockArraysEXT, glUnlockArraysEXT, NULL, 1080),
+ NAME_FUNC_OFFSET(19456, gl_dispatch_stub_1081, gl_dispatch_stub_1081, NULL, 1081),
+ NAME_FUNC_OFFSET(19475, gl_dispatch_stub_1082, gl_dispatch_stub_1082, NULL, 1082),
+ NAME_FUNC_OFFSET(19501, glDebugMessageCallback, glDebugMessageCallback, NULL, 1083),
+ NAME_FUNC_OFFSET(19524, glDebugMessageControl, glDebugMessageControl, NULL, 1084),
+ NAME_FUNC_OFFSET(19546, glDebugMessageInsert, glDebugMessageInsert, NULL, 1085),
+ NAME_FUNC_OFFSET(19567, glGetDebugMessageLog, glGetDebugMessageLog, NULL, 1086),
+ NAME_FUNC_OFFSET(19588, glGetObjectLabel, glGetObjectLabel, NULL, 1087),
+ NAME_FUNC_OFFSET(19605, glGetObjectPtrLabel, glGetObjectPtrLabel, NULL, 1088),
+ NAME_FUNC_OFFSET(19625, glObjectLabel, glObjectLabel, NULL, 1089),
+ NAME_FUNC_OFFSET(19639, glObjectPtrLabel, glObjectPtrLabel, NULL, 1090),
+ NAME_FUNC_OFFSET(19656, glPopDebugGroup, glPopDebugGroup, NULL, 1091),
+ NAME_FUNC_OFFSET(19672, glPushDebugGroup, glPushDebugGroup, NULL, 1092),
+ NAME_FUNC_OFFSET(19689, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 1093),
+ NAME_FUNC_OFFSET(19711, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 1094),
+ NAME_FUNC_OFFSET(19734, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 1095),
+ NAME_FUNC_OFFSET(19757, glFogCoordfEXT, glFogCoordfEXT, NULL, 1096),
+ NAME_FUNC_OFFSET(19772, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 1097),
+ NAME_FUNC_OFFSET(19788, gl_dispatch_stub_1098, gl_dispatch_stub_1098, NULL, 1098),
+ NAME_FUNC_OFFSET(19808, gl_dispatch_stub_1099, gl_dispatch_stub_1099, NULL, 1099),
+ NAME_FUNC_OFFSET(19826, gl_dispatch_stub_1100, gl_dispatch_stub_1100, NULL, 1100),
+ NAME_FUNC_OFFSET(19845, gl_dispatch_stub_1101, gl_dispatch_stub_1101, NULL, 1101),
+ NAME_FUNC_OFFSET(19863, gl_dispatch_stub_1102, gl_dispatch_stub_1102, NULL, 1102),
+ NAME_FUNC_OFFSET(19882, gl_dispatch_stub_1103, gl_dispatch_stub_1103, NULL, 1103),
+ NAME_FUNC_OFFSET(19900, gl_dispatch_stub_1104, gl_dispatch_stub_1104, NULL, 1104),
+ NAME_FUNC_OFFSET(19919, gl_dispatch_stub_1105, gl_dispatch_stub_1105, NULL, 1105),
+ NAME_FUNC_OFFSET(19937, gl_dispatch_stub_1106, gl_dispatch_stub_1106, NULL, 1106),
+ NAME_FUNC_OFFSET(19956, gl_dispatch_stub_1107, gl_dispatch_stub_1107, NULL, 1107),
+ NAME_FUNC_OFFSET(19981, gl_dispatch_stub_1108, gl_dispatch_stub_1108, NULL, 1108),
+ NAME_FUNC_OFFSET(20008, gl_dispatch_stub_1109, gl_dispatch_stub_1109, NULL, 1109),
+ NAME_FUNC_OFFSET(20032, gl_dispatch_stub_1110, gl_dispatch_stub_1110, NULL, 1110),
+ NAME_FUNC_OFFSET(20051, gl_dispatch_stub_1111, gl_dispatch_stub_1111, NULL, 1111),
+ NAME_FUNC_OFFSET(20077, gl_dispatch_stub_1112, gl_dispatch_stub_1112, NULL, 1112),
+ NAME_FUNC_OFFSET(20103, gl_dispatch_stub_1113, gl_dispatch_stub_1113, NULL, 1113),
+ NAME_FUNC_OFFSET(20124, gl_dispatch_stub_1114, gl_dispatch_stub_1114, NULL, 1114),
+ NAME_FUNC_OFFSET(20141, gl_dispatch_stub_1115, gl_dispatch_stub_1115, NULL, 1115),
+ NAME_FUNC_OFFSET(20162, gl_dispatch_stub_1116, gl_dispatch_stub_1116, NULL, 1116),
+ NAME_FUNC_OFFSET(20184, gl_dispatch_stub_1117, gl_dispatch_stub_1117, NULL, 1117),
+ NAME_FUNC_OFFSET(20206, gl_dispatch_stub_1118, gl_dispatch_stub_1118, NULL, 1118),
+ NAME_FUNC_OFFSET(20228, gl_dispatch_stub_1119, gl_dispatch_stub_1119, NULL, 1119),
+ NAME_FUNC_OFFSET(20244, gl_dispatch_stub_1120, gl_dispatch_stub_1120, NULL, 1120),
+ NAME_FUNC_OFFSET(20269, gl_dispatch_stub_1121, gl_dispatch_stub_1121, NULL, 1121),
+ NAME_FUNC_OFFSET(20294, gl_dispatch_stub_1122, gl_dispatch_stub_1122, NULL, 1122),
+ NAME_FUNC_OFFSET(20322, gl_dispatch_stub_1123, gl_dispatch_stub_1123, NULL, 1123),
+ NAME_FUNC_OFFSET(20338, gl_dispatch_stub_1124, gl_dispatch_stub_1124, NULL, 1124),
+ NAME_FUNC_OFFSET(20357, gl_dispatch_stub_1125, gl_dispatch_stub_1125, NULL, 1125),
+ NAME_FUNC_OFFSET(20377, gl_dispatch_stub_1126, gl_dispatch_stub_1126, NULL, 1126),
+ NAME_FUNC_OFFSET(20396, gl_dispatch_stub_1127, gl_dispatch_stub_1127, NULL, 1127),
+ NAME_FUNC_OFFSET(20416, gl_dispatch_stub_1128, gl_dispatch_stub_1128, NULL, 1128),
+ NAME_FUNC_OFFSET(20435, gl_dispatch_stub_1129, gl_dispatch_stub_1129, NULL, 1129),
+ NAME_FUNC_OFFSET(20455, gl_dispatch_stub_1130, gl_dispatch_stub_1130, NULL, 1130),
+ NAME_FUNC_OFFSET(20474, gl_dispatch_stub_1131, gl_dispatch_stub_1131, NULL, 1131),
+ NAME_FUNC_OFFSET(20494, gl_dispatch_stub_1132, gl_dispatch_stub_1132, NULL, 1132),
+ NAME_FUNC_OFFSET(20513, gl_dispatch_stub_1133, gl_dispatch_stub_1133, NULL, 1133),
+ NAME_FUNC_OFFSET(20533, gl_dispatch_stub_1134, gl_dispatch_stub_1134, NULL, 1134),
+ NAME_FUNC_OFFSET(20552, gl_dispatch_stub_1135, gl_dispatch_stub_1135, NULL, 1135),
+ NAME_FUNC_OFFSET(20572, gl_dispatch_stub_1136, gl_dispatch_stub_1136, NULL, 1136),
+ NAME_FUNC_OFFSET(20591, gl_dispatch_stub_1137, gl_dispatch_stub_1137, NULL, 1137),
+ NAME_FUNC_OFFSET(20611, gl_dispatch_stub_1138, gl_dispatch_stub_1138, NULL, 1138),
+ NAME_FUNC_OFFSET(20630, gl_dispatch_stub_1139, gl_dispatch_stub_1139, NULL, 1139),
+ NAME_FUNC_OFFSET(20650, gl_dispatch_stub_1140, gl_dispatch_stub_1140, NULL, 1140),
+ NAME_FUNC_OFFSET(20669, gl_dispatch_stub_1141, gl_dispatch_stub_1141, NULL, 1141),
+ NAME_FUNC_OFFSET(20689, gl_dispatch_stub_1142, gl_dispatch_stub_1142, NULL, 1142),
+ NAME_FUNC_OFFSET(20708, gl_dispatch_stub_1143, gl_dispatch_stub_1143, NULL, 1143),
+ NAME_FUNC_OFFSET(20728, gl_dispatch_stub_1144, gl_dispatch_stub_1144, NULL, 1144),
+ NAME_FUNC_OFFSET(20747, gl_dispatch_stub_1145, gl_dispatch_stub_1145, NULL, 1145),
+ NAME_FUNC_OFFSET(20767, gl_dispatch_stub_1146, gl_dispatch_stub_1146, NULL, 1146),
+ NAME_FUNC_OFFSET(20786, gl_dispatch_stub_1147, gl_dispatch_stub_1147, NULL, 1147),
+ NAME_FUNC_OFFSET(20806, gl_dispatch_stub_1148, gl_dispatch_stub_1148, NULL, 1148),
+ NAME_FUNC_OFFSET(20826, gl_dispatch_stub_1149, gl_dispatch_stub_1149, NULL, 1149),
+ NAME_FUNC_OFFSET(20847, gl_dispatch_stub_1150, gl_dispatch_stub_1150, NULL, 1150),
+ NAME_FUNC_OFFSET(20871, gl_dispatch_stub_1151, gl_dispatch_stub_1151, NULL, 1151),
+ NAME_FUNC_OFFSET(20892, gl_dispatch_stub_1152, gl_dispatch_stub_1152, NULL, 1152),
+ NAME_FUNC_OFFSET(20913, gl_dispatch_stub_1153, gl_dispatch_stub_1153, NULL, 1153),
+ NAME_FUNC_OFFSET(20934, gl_dispatch_stub_1154, gl_dispatch_stub_1154, NULL, 1154),
+ NAME_FUNC_OFFSET(20955, gl_dispatch_stub_1155, gl_dispatch_stub_1155, NULL, 1155),
+ NAME_FUNC_OFFSET(20976, gl_dispatch_stub_1156, gl_dispatch_stub_1156, NULL, 1156),
+ NAME_FUNC_OFFSET(20997, gl_dispatch_stub_1157, gl_dispatch_stub_1157, NULL, 1157),
+ NAME_FUNC_OFFSET(21018, gl_dispatch_stub_1158, gl_dispatch_stub_1158, NULL, 1158),
+ NAME_FUNC_OFFSET(21039, gl_dispatch_stub_1159, gl_dispatch_stub_1159, NULL, 1159),
+ NAME_FUNC_OFFSET(21060, gl_dispatch_stub_1160, gl_dispatch_stub_1160, NULL, 1160),
+ NAME_FUNC_OFFSET(21081, gl_dispatch_stub_1161, gl_dispatch_stub_1161, NULL, 1161),
+ NAME_FUNC_OFFSET(21102, gl_dispatch_stub_1162, gl_dispatch_stub_1162, NULL, 1162),
+ NAME_FUNC_OFFSET(21123, gl_dispatch_stub_1163, gl_dispatch_stub_1163, NULL, 1163),
+ NAME_FUNC_OFFSET(21145, gl_dispatch_stub_1164, gl_dispatch_stub_1164, NULL, 1164),
+ NAME_FUNC_OFFSET(21172, gl_dispatch_stub_1165, gl_dispatch_stub_1165, NULL, 1165),
+ NAME_FUNC_OFFSET(21199, gl_dispatch_stub_1166, gl_dispatch_stub_1166, NULL, 1166),
+ NAME_FUNC_OFFSET(21223, gl_dispatch_stub_1167, gl_dispatch_stub_1167, NULL, 1167),
+ NAME_FUNC_OFFSET(21247, gl_dispatch_stub_1168, gl_dispatch_stub_1168, NULL, 1168),
+ NAME_FUNC_OFFSET(21269, gl_dispatch_stub_1169, gl_dispatch_stub_1169, NULL, 1169),
+ NAME_FUNC_OFFSET(21291, gl_dispatch_stub_1170, gl_dispatch_stub_1170, NULL, 1170),
+ NAME_FUNC_OFFSET(21313, gl_dispatch_stub_1171, gl_dispatch_stub_1171, NULL, 1171),
+ NAME_FUNC_OFFSET(21338, gl_dispatch_stub_1172, gl_dispatch_stub_1172, NULL, 1172),
+ NAME_FUNC_OFFSET(21362, gl_dispatch_stub_1173, gl_dispatch_stub_1173, NULL, 1173),
+ NAME_FUNC_OFFSET(21384, gl_dispatch_stub_1174, gl_dispatch_stub_1174, NULL, 1174),
+ NAME_FUNC_OFFSET(21406, gl_dispatch_stub_1175, gl_dispatch_stub_1175, NULL, 1175),
+ NAME_FUNC_OFFSET(21428, gl_dispatch_stub_1176, gl_dispatch_stub_1176, NULL, 1176),
+ NAME_FUNC_OFFSET(21454, gl_dispatch_stub_1177, gl_dispatch_stub_1177, NULL, 1177),
+ NAME_FUNC_OFFSET(21477, gl_dispatch_stub_1178, gl_dispatch_stub_1178, NULL, 1178),
+ NAME_FUNC_OFFSET(21501, gl_dispatch_stub_1179, gl_dispatch_stub_1179, NULL, 1179),
+ NAME_FUNC_OFFSET(21519, gl_dispatch_stub_1180, gl_dispatch_stub_1180, NULL, 1180),
+ NAME_FUNC_OFFSET(21534, gl_dispatch_stub_1181, gl_dispatch_stub_1181, NULL, 1181),
+ NAME_FUNC_OFFSET(21565, gl_dispatch_stub_1182, gl_dispatch_stub_1182, NULL, 1182),
+ NAME_FUNC_OFFSET(21588, gl_dispatch_stub_1183, gl_dispatch_stub_1183, NULL, 1183),
+ NAME_FUNC_OFFSET(21611, gl_dispatch_stub_1184, gl_dispatch_stub_1184, NULL, 1184),
+ NAME_FUNC_OFFSET(21634, gl_dispatch_stub_1185, gl_dispatch_stub_1185, NULL, 1185),
+ NAME_FUNC_OFFSET(21665, gl_dispatch_stub_1186, gl_dispatch_stub_1186, NULL, 1186),
+ NAME_FUNC_OFFSET(21696, gl_dispatch_stub_1187, gl_dispatch_stub_1187, NULL, 1187),
+ NAME_FUNC_OFFSET(21724, gl_dispatch_stub_1188, gl_dispatch_stub_1188, NULL, 1188),
+ NAME_FUNC_OFFSET(21753, gl_dispatch_stub_1189, gl_dispatch_stub_1189, NULL, 1189),
+ NAME_FUNC_OFFSET(21781, gl_dispatch_stub_1190, gl_dispatch_stub_1190, NULL, 1190),
+ NAME_FUNC_OFFSET(21810, glPrimitiveRestartNV, glPrimitiveRestartNV, NULL, 1191),
+ NAME_FUNC_OFFSET(21831, gl_dispatch_stub_1192, gl_dispatch_stub_1192, NULL, 1192),
+ NAME_FUNC_OFFSET(21848, gl_dispatch_stub_1193, gl_dispatch_stub_1193, NULL, 1193),
+ NAME_FUNC_OFFSET(21861, gl_dispatch_stub_1194, gl_dispatch_stub_1194, NULL, 1194),
+ NAME_FUNC_OFFSET(21875, gl_dispatch_stub_1195, gl_dispatch_stub_1195, NULL, 1195),
+ NAME_FUNC_OFFSET(21892, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 1196),
+ NAME_FUNC_OFFSET(21913, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 1197),
+ NAME_FUNC_OFFSET(21935, gl_dispatch_stub_1198, gl_dispatch_stub_1198, NULL, 1198),
+ NAME_FUNC_OFFSET(21959, gl_dispatch_stub_1199, gl_dispatch_stub_1199, NULL, 1199),
+ NAME_FUNC_OFFSET(21989, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 1200),
+ NAME_FUNC_OFFSET(22010, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 1201),
+ NAME_FUNC_OFFSET(22032, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 1202),
+ NAME_FUNC_OFFSET(22053, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 1203),
+ NAME_FUNC_OFFSET(22075, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 1204),
+ NAME_FUNC_OFFSET(22097, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 1205),
+ NAME_FUNC_OFFSET(22120, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 1206),
+ NAME_FUNC_OFFSET(22141, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 1207),
+ NAME_FUNC_OFFSET(22163, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 1208),
+ NAME_FUNC_OFFSET(22185, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 1209),
+ NAME_FUNC_OFFSET(22208, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 1210),
+ NAME_FUNC_OFFSET(22229, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 1211),
+ NAME_FUNC_OFFSET(22251, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 1212),
+ NAME_FUNC_OFFSET(22273, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 1213),
+ NAME_FUNC_OFFSET(22296, glClearColorIiEXT, glClearColorIiEXT, NULL, 1214),
+ NAME_FUNC_OFFSET(22314, glClearColorIuiEXT, glClearColorIuiEXT, NULL, 1215),
+ NAME_FUNC_OFFSET(22333, gl_dispatch_stub_1216, gl_dispatch_stub_1216, NULL, 1216),
+ NAME_FUNC_OFFSET(22355, gl_dispatch_stub_1217, gl_dispatch_stub_1217, NULL, 1217),
+ NAME_FUNC_OFFSET(22377, gl_dispatch_stub_1218, gl_dispatch_stub_1218, NULL, 1218),
+ NAME_FUNC_OFFSET(22401, gl_dispatch_stub_1219, gl_dispatch_stub_1219, NULL, 1219),
+ NAME_FUNC_OFFSET(22421, gl_dispatch_stub_1220, gl_dispatch_stub_1220, NULL, 1220),
+ NAME_FUNC_OFFSET(22442, gl_dispatch_stub_1221, gl_dispatch_stub_1221, NULL, 1221),
+ NAME_FUNC_OFFSET(22473, gl_dispatch_stub_1222, gl_dispatch_stub_1222, NULL, 1222),
+ NAME_FUNC_OFFSET(22504, gl_dispatch_stub_1223, gl_dispatch_stub_1223, NULL, 1223),
+ NAME_FUNC_OFFSET(22537, gl_dispatch_stub_1224, gl_dispatch_stub_1224, NULL, 1224),
+ NAME_FUNC_OFFSET(22565, gl_dispatch_stub_1225, gl_dispatch_stub_1225, NULL, 1225),
+ NAME_FUNC_OFFSET(22596, gl_dispatch_stub_1226, gl_dispatch_stub_1226, NULL, 1226),
+ NAME_FUNC_OFFSET(22622, gl_dispatch_stub_1227, gl_dispatch_stub_1227, NULL, 1227),
+ NAME_FUNC_OFFSET(22653, gl_dispatch_stub_1228, gl_dispatch_stub_1228, NULL, 1228),
+ NAME_FUNC_OFFSET(22681, gl_dispatch_stub_1229, gl_dispatch_stub_1229, NULL, 1229),
+ NAME_FUNC_OFFSET(22704, gl_dispatch_stub_1230, gl_dispatch_stub_1230, NULL, 1230),
+ NAME_FUNC_OFFSET(22729, gl_dispatch_stub_1231, gl_dispatch_stub_1231, NULL, 1231),
+ NAME_FUNC_OFFSET(22748, gl_dispatch_stub_1232, gl_dispatch_stub_1232, NULL, 1232),
+ NAME_FUNC_OFFSET(22773, gl_dispatch_stub_1233, gl_dispatch_stub_1233, NULL, 1233),
+ NAME_FUNC_OFFSET(22795, glTextureBarrierNV, glTextureBarrierNV, NULL, 1234),
+ NAME_FUNC_OFFSET(22814, gl_dispatch_stub_1235, gl_dispatch_stub_1235, NULL, 1235),
+ NAME_FUNC_OFFSET(22828, gl_dispatch_stub_1236, gl_dispatch_stub_1236, NULL, 1236),
+ NAME_FUNC_OFFSET(22850, gl_dispatch_stub_1237, gl_dispatch_stub_1237, NULL, 1237),
+ NAME_FUNC_OFFSET(22864, gl_dispatch_stub_1238, gl_dispatch_stub_1238, NULL, 1238),
+ NAME_FUNC_OFFSET(22883, gl_dispatch_stub_1239, gl_dispatch_stub_1239, NULL, 1239),
+ NAME_FUNC_OFFSET(22904, gl_dispatch_stub_1240, gl_dispatch_stub_1240, NULL, 1240),
+ NAME_FUNC_OFFSET(22935, gl_dispatch_stub_1241, gl_dispatch_stub_1241, NULL, 1241),
+ NAME_FUNC_OFFSET(22965, gl_dispatch_stub_1242, gl_dispatch_stub_1242, NULL, 1242),
+ NAME_FUNC_OFFSET(22988, gl_dispatch_stub_1243, gl_dispatch_stub_1243, NULL, 1243),
+ NAME_FUNC_OFFSET(23011, gl_dispatch_stub_1244, gl_dispatch_stub_1244, NULL, 1244),
+ NAME_FUNC_OFFSET(23038, gl_dispatch_stub_1245, gl_dispatch_stub_1245, NULL, 1245),
+ NAME_FUNC_OFFSET(23060, gl_dispatch_stub_1246, gl_dispatch_stub_1246, NULL, 1246),
+ NAME_FUNC_OFFSET(23083, gl_dispatch_stub_1247, gl_dispatch_stub_1247, NULL, 1247),
+ NAME_FUNC_OFFSET(23106, gl_dispatch_stub_1248, gl_dispatch_stub_1248, NULL, 1248),
+ NAME_FUNC_OFFSET(23126, gl_dispatch_stub_1249, gl_dispatch_stub_1249, NULL, 1249),
+ NAME_FUNC_OFFSET(23153, gl_dispatch_stub_1250, gl_dispatch_stub_1250, NULL, 1250),
+ NAME_FUNC_OFFSET(23179, gl_dispatch_stub_1251, gl_dispatch_stub_1251, NULL, 1251),
+ NAME_FUNC_OFFSET(23205, gl_dispatch_stub_1252, gl_dispatch_stub_1252, NULL, 1252),
+ NAME_FUNC_OFFSET(23229, gl_dispatch_stub_1253, gl_dispatch_stub_1253, NULL, 1253),
NAME_FUNC_OFFSET(23257, gl_dispatch_stub_1254, gl_dispatch_stub_1254, NULL, 1254),
- NAME_FUNC_OFFSET(23285, gl_dispatch_stub_1255, gl_dispatch_stub_1255, NULL, 1255),
- NAME_FUNC_OFFSET(23309, glPolygonOffsetClampEXT, glPolygonOffsetClampEXT, NULL, 1256),
- NAME_FUNC_OFFSET(23333, gl_dispatch_stub_1257, gl_dispatch_stub_1257, NULL, 1257),
- NAME_FUNC_OFFSET(23358, gl_dispatch_stub_1258, gl_dispatch_stub_1258, NULL, 1258),
- NAME_FUNC_OFFSET(23387, gl_dispatch_stub_1259, gl_dispatch_stub_1259, NULL, 1259),
- NAME_FUNC_OFFSET(23418, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, 1260),
- NAME_FUNC_OFFSET(23457, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, 1261),
- NAME_FUNC_OFFSET(23486, glAlphaFuncx, glAlphaFuncx, NULL, 1262),
- NAME_FUNC_OFFSET(23499, glClearColorx, glClearColorx, NULL, 1263),
- NAME_FUNC_OFFSET(23513, glClearDepthx, glClearDepthx, NULL, 1264),
- NAME_FUNC_OFFSET(23527, glColor4x, glColor4x, NULL, 1265),
- NAME_FUNC_OFFSET(23537, glDepthRangex, glDepthRangex, NULL, 1266),
- NAME_FUNC_OFFSET(23551, glFogx, glFogx, NULL, 1267),
- NAME_FUNC_OFFSET(23558, glFogxv, glFogxv, NULL, 1268),
- NAME_FUNC_OFFSET(23566, glFrustumf, glFrustumf, NULL, 1269),
- NAME_FUNC_OFFSET(23577, glFrustumx, glFrustumx, NULL, 1270),
- NAME_FUNC_OFFSET(23588, glLightModelx, glLightModelx, NULL, 1271),
- NAME_FUNC_OFFSET(23602, glLightModelxv, glLightModelxv, NULL, 1272),
- NAME_FUNC_OFFSET(23617, glLightx, glLightx, NULL, 1273),
- NAME_FUNC_OFFSET(23626, glLightxv, glLightxv, NULL, 1274),
- NAME_FUNC_OFFSET(23636, glLineWidthx, glLineWidthx, NULL, 1275),
- NAME_FUNC_OFFSET(23649, glLoadMatrixx, glLoadMatrixx, NULL, 1276),
- NAME_FUNC_OFFSET(23663, glMaterialx, glMaterialx, NULL, 1277),
- NAME_FUNC_OFFSET(23675, glMaterialxv, glMaterialxv, NULL, 1278),
- NAME_FUNC_OFFSET(23688, glMultMatrixx, glMultMatrixx, NULL, 1279),
- NAME_FUNC_OFFSET(23702, glMultiTexCoord4x, glMultiTexCoord4x, NULL, 1280),
- NAME_FUNC_OFFSET(23720, glNormal3x, glNormal3x, NULL, 1281),
- NAME_FUNC_OFFSET(23731, glOrthof, glOrthof, NULL, 1282),
- NAME_FUNC_OFFSET(23740, glOrthox, glOrthox, NULL, 1283),
- NAME_FUNC_OFFSET(23749, glPointSizex, glPointSizex, NULL, 1284),
- NAME_FUNC_OFFSET(23762, glPolygonOffsetx, glPolygonOffsetx, NULL, 1285),
- NAME_FUNC_OFFSET(23779, glRotatex, glRotatex, NULL, 1286),
- NAME_FUNC_OFFSET(23789, glSampleCoveragex, glSampleCoveragex, NULL, 1287),
- NAME_FUNC_OFFSET(23807, glScalex, glScalex, NULL, 1288),
- NAME_FUNC_OFFSET(23816, glTexEnvx, glTexEnvx, NULL, 1289),
- NAME_FUNC_OFFSET(23826, glTexEnvxv, glTexEnvxv, NULL, 1290),
- NAME_FUNC_OFFSET(23837, glTexParameterx, glTexParameterx, NULL, 1291),
- NAME_FUNC_OFFSET(23853, glTranslatex, glTranslatex, NULL, 1292),
- NAME_FUNC_OFFSET(23866, glClipPlanef, glClipPlanef, NULL, 1293),
- NAME_FUNC_OFFSET(23879, glClipPlanex, glClipPlanex, NULL, 1294),
- NAME_FUNC_OFFSET(23892, glGetClipPlanef, glGetClipPlanef, NULL, 1295),
- NAME_FUNC_OFFSET(23908, glGetClipPlanex, glGetClipPlanex, NULL, 1296),
- NAME_FUNC_OFFSET(23924, glGetFixedv, glGetFixedv, NULL, 1297),
- NAME_FUNC_OFFSET(23936, glGetLightxv, glGetLightxv, NULL, 1298),
- NAME_FUNC_OFFSET(23949, glGetMaterialxv, glGetMaterialxv, NULL, 1299),
- NAME_FUNC_OFFSET(23965, glGetTexEnvxv, glGetTexEnvxv, NULL, 1300),
- NAME_FUNC_OFFSET(23979, glGetTexParameterxv, glGetTexParameterxv, NULL, 1301),
- NAME_FUNC_OFFSET(23999, glPointParameterx, glPointParameterx, NULL, 1302),
- NAME_FUNC_OFFSET(24017, glPointParameterxv, glPointParameterxv, NULL, 1303),
- NAME_FUNC_OFFSET(24036, glTexParameterxv, glTexParameterxv, NULL, 1304),
- NAME_FUNC_OFFSET(24053, glTexGenf, glTexGenf, NULL, 190),
- NAME_FUNC_OFFSET(24066, glTexGenfv, glTexGenfv, NULL, 191),
- NAME_FUNC_OFFSET(24080, glTexGeni, glTexGeni, NULL, 192),
- NAME_FUNC_OFFSET(24093, glTexGeniv, glTexGeniv, NULL, 193),
- NAME_FUNC_OFFSET(24107, glReadBuffer, glReadBuffer, NULL, 254),
- NAME_FUNC_OFFSET(24122, glGetTexGenfv, glGetTexGenfv, NULL, 279),
- NAME_FUNC_OFFSET(24139, glGetTexGeniv, glGetTexGeniv, NULL, 280),
- NAME_FUNC_OFFSET(24156, glArrayElement, glArrayElement, NULL, 306),
- NAME_FUNC_OFFSET(24174, glBindTexture, glBindTexture, NULL, 307),
- NAME_FUNC_OFFSET(24191, glDrawArrays, glDrawArrays, NULL, 310),
- NAME_FUNC_OFFSET(24207, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, 322),
- NAME_FUNC_OFFSET(24232, glCopyTexImage1D, glCopyTexImage1D, NULL, 323),
- NAME_FUNC_OFFSET(24252, glCopyTexImage2D, glCopyTexImage2D, NULL, 324),
- NAME_FUNC_OFFSET(24272, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, 325),
- NAME_FUNC_OFFSET(24295, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, 326),
- NAME_FUNC_OFFSET(24318, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, 327),
- NAME_FUNC_OFFSET(24338, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, 328),
- NAME_FUNC_OFFSET(24355, glGetPointerv, glGetPointerv, NULL, 329),
- NAME_FUNC_OFFSET(24372, glIsTexture, glIsTextureEXT, glIsTextureEXT, 330),
- NAME_FUNC_OFFSET(24387, glPrioritizeTextures, glPrioritizeTextures, NULL, 331),
- NAME_FUNC_OFFSET(24411, glTexSubImage1D, glTexSubImage1D, NULL, 332),
- NAME_FUNC_OFFSET(24430, glTexSubImage2D, glTexSubImage2D, NULL, 333),
- NAME_FUNC_OFFSET(24449, glBlendColor, glBlendColor, NULL, 336),
- NAME_FUNC_OFFSET(24465, glBlendEquation, glBlendEquation, NULL, 337),
- NAME_FUNC_OFFSET(24484, glBlendEquation, glBlendEquation, NULL, 337),
- NAME_FUNC_OFFSET(24503, glDrawRangeElements, glDrawRangeElements, NULL, 338),
- NAME_FUNC_OFFSET(24526, glColorTable, glColorTable, NULL, 339),
- NAME_FUNC_OFFSET(24542, glColorTable, glColorTable, NULL, 339),
- NAME_FUNC_OFFSET(24558, glColorTableParameterfv, glColorTableParameterfv, NULL, 340),
- NAME_FUNC_OFFSET(24585, glColorTableParameteriv, glColorTableParameteriv, NULL, 341),
- NAME_FUNC_OFFSET(24612, glCopyColorTable, glCopyColorTable, NULL, 342),
- NAME_FUNC_OFFSET(24632, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
- NAME_FUNC_OFFSET(24651, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
- NAME_FUNC_OFFSET(24670, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
- NAME_FUNC_OFFSET(24700, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
- NAME_FUNC_OFFSET(24730, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
- NAME_FUNC_OFFSET(24760, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
- NAME_FUNC_OFFSET(24790, glColorSubTable, glColorSubTable, NULL, 346),
- NAME_FUNC_OFFSET(24809, glCopyColorSubTable, glCopyColorSubTable, NULL, 347),
- NAME_FUNC_OFFSET(24832, glConvolutionFilter1D, glConvolutionFilter1D, NULL, 348),
- NAME_FUNC_OFFSET(24857, glConvolutionFilter2D, glConvolutionFilter2D, NULL, 349),
- NAME_FUNC_OFFSET(24882, glConvolutionParameterf, glConvolutionParameterf, NULL, 350),
- NAME_FUNC_OFFSET(24909, glConvolutionParameterfv, glConvolutionParameterfv, NULL, 351),
- NAME_FUNC_OFFSET(24937, glConvolutionParameteri, glConvolutionParameteri, NULL, 352),
- NAME_FUNC_OFFSET(24964, glConvolutionParameteriv, glConvolutionParameteriv, NULL, 353),
- NAME_FUNC_OFFSET(24992, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, 354),
- NAME_FUNC_OFFSET(25021, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, 355),
- NAME_FUNC_OFFSET(25050, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, 356),
- NAME_FUNC_OFFSET(25076, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, 357),
- NAME_FUNC_OFFSET(25107, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, 358),
- NAME_FUNC_OFFSET(25138, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, 359),
- NAME_FUNC_OFFSET(25162, glSeparableFilter2D, glSeparableFilter2D, NULL, 360),
- NAME_FUNC_OFFSET(25185, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, 361),
- NAME_FUNC_OFFSET(25203, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, 362),
- NAME_FUNC_OFFSET(25232, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, 363),
- NAME_FUNC_OFFSET(25261, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, 364),
- NAME_FUNC_OFFSET(25276, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, 365),
- NAME_FUNC_OFFSET(25302, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, 366),
- NAME_FUNC_OFFSET(25328, glHistogram, glHistogram, NULL, 367),
- NAME_FUNC_OFFSET(25343, glMinmax, glMinmax, NULL, 368),
- NAME_FUNC_OFFSET(25355, glResetHistogram, glResetHistogram, NULL, 369),
- NAME_FUNC_OFFSET(25375, glResetMinmax, glResetMinmax, NULL, 370),
- NAME_FUNC_OFFSET(25392, glTexImage3D, glTexImage3D, NULL, 371),
- NAME_FUNC_OFFSET(25408, glTexImage3D, glTexImage3D, NULL, 371),
- NAME_FUNC_OFFSET(25424, glTexSubImage3D, glTexSubImage3D, NULL, 372),
- NAME_FUNC_OFFSET(25443, glTexSubImage3D, glTexSubImage3D, NULL, 372),
- NAME_FUNC_OFFSET(25462, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
- NAME_FUNC_OFFSET(25485, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
- NAME_FUNC_OFFSET(25508, glActiveTexture, glActiveTexture, NULL, 374),
- NAME_FUNC_OFFSET(25527, glClientActiveTexture, glClientActiveTexture, NULL, 375),
- NAME_FUNC_OFFSET(25552, glMultiTexCoord1d, glMultiTexCoord1d, NULL, 376),
- NAME_FUNC_OFFSET(25573, glMultiTexCoord1dv, glMultiTexCoord1dv, NULL, 377),
- NAME_FUNC_OFFSET(25595, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, 378),
- NAME_FUNC_OFFSET(25613, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, 379),
- NAME_FUNC_OFFSET(25632, glMultiTexCoord1i, glMultiTexCoord1i, NULL, 380),
- NAME_FUNC_OFFSET(25653, glMultiTexCoord1iv, glMultiTexCoord1iv, NULL, 381),
- NAME_FUNC_OFFSET(25675, glMultiTexCoord1s, glMultiTexCoord1s, NULL, 382),
- NAME_FUNC_OFFSET(25696, glMultiTexCoord1sv, glMultiTexCoord1sv, NULL, 383),
- NAME_FUNC_OFFSET(25718, glMultiTexCoord2d, glMultiTexCoord2d, NULL, 384),
- NAME_FUNC_OFFSET(25739, glMultiTexCoord2dv, glMultiTexCoord2dv, NULL, 385),
- NAME_FUNC_OFFSET(25761, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, 386),
- NAME_FUNC_OFFSET(25779, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, 387),
- NAME_FUNC_OFFSET(25798, glMultiTexCoord2i, glMultiTexCoord2i, NULL, 388),
- NAME_FUNC_OFFSET(25819, glMultiTexCoord2iv, glMultiTexCoord2iv, NULL, 389),
- NAME_FUNC_OFFSET(25841, glMultiTexCoord2s, glMultiTexCoord2s, NULL, 390),
- NAME_FUNC_OFFSET(25862, glMultiTexCoord2sv, glMultiTexCoord2sv, NULL, 391),
- NAME_FUNC_OFFSET(25884, glMultiTexCoord3d, glMultiTexCoord3d, NULL, 392),
- NAME_FUNC_OFFSET(25905, glMultiTexCoord3dv, glMultiTexCoord3dv, NULL, 393),
- NAME_FUNC_OFFSET(25927, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, 394),
- NAME_FUNC_OFFSET(25945, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, 395),
- NAME_FUNC_OFFSET(25964, glMultiTexCoord3i, glMultiTexCoord3i, NULL, 396),
- NAME_FUNC_OFFSET(25985, glMultiTexCoord3iv, glMultiTexCoord3iv, NULL, 397),
- NAME_FUNC_OFFSET(26007, glMultiTexCoord3s, glMultiTexCoord3s, NULL, 398),
- NAME_FUNC_OFFSET(26028, glMultiTexCoord3sv, glMultiTexCoord3sv, NULL, 399),
- NAME_FUNC_OFFSET(26050, glMultiTexCoord4d, glMultiTexCoord4d, NULL, 400),
- NAME_FUNC_OFFSET(26071, glMultiTexCoord4dv, glMultiTexCoord4dv, NULL, 401),
- NAME_FUNC_OFFSET(26093, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, 402),
- NAME_FUNC_OFFSET(26111, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, 403),
- NAME_FUNC_OFFSET(26130, glMultiTexCoord4i, glMultiTexCoord4i, NULL, 404),
- NAME_FUNC_OFFSET(26151, glMultiTexCoord4iv, glMultiTexCoord4iv, NULL, 405),
- NAME_FUNC_OFFSET(26173, glMultiTexCoord4s, glMultiTexCoord4s, NULL, 406),
- NAME_FUNC_OFFSET(26194, glMultiTexCoord4sv, glMultiTexCoord4sv, NULL, 407),
- NAME_FUNC_OFFSET(26216, glCompressedTexImage1D, glCompressedTexImage1D, NULL, 408),
- NAME_FUNC_OFFSET(26242, glCompressedTexImage2D, glCompressedTexImage2D, NULL, 409),
- NAME_FUNC_OFFSET(26268, glCompressedTexImage3D, glCompressedTexImage3D, NULL, 410),
- NAME_FUNC_OFFSET(26294, glCompressedTexImage3D, glCompressedTexImage3D, NULL, 410),
- NAME_FUNC_OFFSET(26320, glCompressedTexSubImage1D, glCompressedTexSubImage1D, NULL, 411),
- NAME_FUNC_OFFSET(26349, glCompressedTexSubImage2D, glCompressedTexSubImage2D, NULL, 412),
- NAME_FUNC_OFFSET(26378, glCompressedTexSubImage3D, glCompressedTexSubImage3D, NULL, 413),
- NAME_FUNC_OFFSET(26407, glCompressedTexSubImage3D, glCompressedTexSubImage3D, NULL, 413),
- NAME_FUNC_OFFSET(26436, glGetCompressedTexImage, glGetCompressedTexImage, NULL, 414),
- NAME_FUNC_OFFSET(26463, glLoadTransposeMatrixd, glLoadTransposeMatrixd, NULL, 415),
- NAME_FUNC_OFFSET(26489, glLoadTransposeMatrixf, glLoadTransposeMatrixf, NULL, 416),
- NAME_FUNC_OFFSET(26515, glMultTransposeMatrixd, glMultTransposeMatrixd, NULL, 417),
- NAME_FUNC_OFFSET(26541, glMultTransposeMatrixf, glMultTransposeMatrixf, NULL, 418),
- NAME_FUNC_OFFSET(26567, glSampleCoverage, glSampleCoverage, NULL, 419),
- NAME_FUNC_OFFSET(26587, glBlendFuncSeparate, glBlendFuncSeparate, NULL, 420),
- NAME_FUNC_OFFSET(26610, glBlendFuncSeparate, glBlendFuncSeparate, NULL, 420),
- NAME_FUNC_OFFSET(26634, glBlendFuncSeparate, glBlendFuncSeparate, NULL, 420),
- NAME_FUNC_OFFSET(26657, glFogCoordPointer, glFogCoordPointer, NULL, 421),
- NAME_FUNC_OFFSET(26678, glFogCoordd, glFogCoordd, NULL, 422),
- NAME_FUNC_OFFSET(26693, glFogCoorddv, glFogCoorddv, NULL, 423),
- NAME_FUNC_OFFSET(26709, glMultiDrawArrays, glMultiDrawArrays, NULL, 424),
- NAME_FUNC_OFFSET(26730, glPointParameterf, glPointParameterf, NULL, 425),
- NAME_FUNC_OFFSET(26751, glPointParameterf, glPointParameterf, NULL, 425),
- NAME_FUNC_OFFSET(26772, glPointParameterf, glPointParameterf, NULL, 425),
- NAME_FUNC_OFFSET(26794, glPointParameterfv, glPointParameterfv, NULL, 426),
- NAME_FUNC_OFFSET(26816, glPointParameterfv, glPointParameterfv, NULL, 426),
- NAME_FUNC_OFFSET(26838, glPointParameterfv, glPointParameterfv, NULL, 426),
- NAME_FUNC_OFFSET(26861, glPointParameteri, glPointParameteri, NULL, 427),
- NAME_FUNC_OFFSET(26881, glPointParameteriv, glPointParameteriv, NULL, 428),
- NAME_FUNC_OFFSET(26902, glSecondaryColor3b, glSecondaryColor3b, NULL, 429),
- NAME_FUNC_OFFSET(26924, glSecondaryColor3bv, glSecondaryColor3bv, NULL, 430),
- NAME_FUNC_OFFSET(26947, glSecondaryColor3d, glSecondaryColor3d, NULL, 431),
- NAME_FUNC_OFFSET(26969, glSecondaryColor3dv, glSecondaryColor3dv, NULL, 432),
- NAME_FUNC_OFFSET(26992, glSecondaryColor3i, glSecondaryColor3i, NULL, 433),
- NAME_FUNC_OFFSET(27014, glSecondaryColor3iv, glSecondaryColor3iv, NULL, 434),
- NAME_FUNC_OFFSET(27037, glSecondaryColor3s, glSecondaryColor3s, NULL, 435),
- NAME_FUNC_OFFSET(27059, glSecondaryColor3sv, glSecondaryColor3sv, NULL, 436),
- NAME_FUNC_OFFSET(27082, glSecondaryColor3ub, glSecondaryColor3ub, NULL, 437),
- NAME_FUNC_OFFSET(27105, glSecondaryColor3ubv, glSecondaryColor3ubv, NULL, 438),
- NAME_FUNC_OFFSET(27129, glSecondaryColor3ui, glSecondaryColor3ui, NULL, 439),
- NAME_FUNC_OFFSET(27152, glSecondaryColor3uiv, glSecondaryColor3uiv, NULL, 440),
- NAME_FUNC_OFFSET(27176, glSecondaryColor3us, glSecondaryColor3us, NULL, 441),
- NAME_FUNC_OFFSET(27199, glSecondaryColor3usv, glSecondaryColor3usv, NULL, 442),
- NAME_FUNC_OFFSET(27223, glSecondaryColorPointer, glSecondaryColorPointer, NULL, 443),
- NAME_FUNC_OFFSET(27250, glWindowPos2d, glWindowPos2d, NULL, 444),
- NAME_FUNC_OFFSET(27267, glWindowPos2d, glWindowPos2d, NULL, 444),
- NAME_FUNC_OFFSET(27285, glWindowPos2dv, glWindowPos2dv, NULL, 445),
- NAME_FUNC_OFFSET(27303, glWindowPos2dv, glWindowPos2dv, NULL, 445),
- NAME_FUNC_OFFSET(27322, glWindowPos2f, glWindowPos2f, NULL, 446),
- NAME_FUNC_OFFSET(27339, glWindowPos2f, glWindowPos2f, NULL, 446),
- NAME_FUNC_OFFSET(27357, glWindowPos2fv, glWindowPos2fv, NULL, 447),
- NAME_FUNC_OFFSET(27375, glWindowPos2fv, glWindowPos2fv, NULL, 447),
- NAME_FUNC_OFFSET(27394, glWindowPos2i, glWindowPos2i, NULL, 448),
- NAME_FUNC_OFFSET(27411, glWindowPos2i, glWindowPos2i, NULL, 448),
- NAME_FUNC_OFFSET(27429, glWindowPos2iv, glWindowPos2iv, NULL, 449),
- NAME_FUNC_OFFSET(27447, glWindowPos2iv, glWindowPos2iv, NULL, 449),
- NAME_FUNC_OFFSET(27466, glWindowPos2s, glWindowPos2s, NULL, 450),
- NAME_FUNC_OFFSET(27483, glWindowPos2s, glWindowPos2s, NULL, 450),
- NAME_FUNC_OFFSET(27501, glWindowPos2sv, glWindowPos2sv, NULL, 451),
- NAME_FUNC_OFFSET(27519, glWindowPos2sv, glWindowPos2sv, NULL, 451),
- NAME_FUNC_OFFSET(27538, glWindowPos3d, glWindowPos3d, NULL, 452),
- NAME_FUNC_OFFSET(27555, glWindowPos3d, glWindowPos3d, NULL, 452),
- NAME_FUNC_OFFSET(27573, glWindowPos3dv, glWindowPos3dv, NULL, 453),
- NAME_FUNC_OFFSET(27591, glWindowPos3dv, glWindowPos3dv, NULL, 453),
- NAME_FUNC_OFFSET(27610, glWindowPos3f, glWindowPos3f, NULL, 454),
- NAME_FUNC_OFFSET(27627, glWindowPos3f, glWindowPos3f, NULL, 454),
- NAME_FUNC_OFFSET(27645, glWindowPos3fv, glWindowPos3fv, NULL, 455),
- NAME_FUNC_OFFSET(27663, glWindowPos3fv, glWindowPos3fv, NULL, 455),
- NAME_FUNC_OFFSET(27682, glWindowPos3i, glWindowPos3i, NULL, 456),
- NAME_FUNC_OFFSET(27699, glWindowPos3i, glWindowPos3i, NULL, 456),
- NAME_FUNC_OFFSET(27717, glWindowPos3iv, glWindowPos3iv, NULL, 457),
- NAME_FUNC_OFFSET(27735, glWindowPos3iv, glWindowPos3iv, NULL, 457),
- NAME_FUNC_OFFSET(27754, glWindowPos3s, glWindowPos3s, NULL, 458),
- NAME_FUNC_OFFSET(27771, glWindowPos3s, glWindowPos3s, NULL, 458),
- NAME_FUNC_OFFSET(27789, glWindowPos3sv, glWindowPos3sv, NULL, 459),
- NAME_FUNC_OFFSET(27807, glWindowPos3sv, glWindowPos3sv, NULL, 459),
- NAME_FUNC_OFFSET(27826, glBeginQuery, glBeginQuery, NULL, 460),
- NAME_FUNC_OFFSET(27842, glBindBuffer, glBindBuffer, NULL, 461),
- NAME_FUNC_OFFSET(27858, glBufferData, glBufferData, NULL, 462),
- NAME_FUNC_OFFSET(27874, glBufferSubData, glBufferSubData, NULL, 463),
- NAME_FUNC_OFFSET(27893, glDeleteBuffers, glDeleteBuffers, NULL, 464),
- NAME_FUNC_OFFSET(27912, glDeleteQueries, glDeleteQueries, NULL, 465),
- NAME_FUNC_OFFSET(27931, glEndQuery, glEndQuery, NULL, 466),
- NAME_FUNC_OFFSET(27945, glGenBuffers, glGenBuffers, NULL, 467),
- NAME_FUNC_OFFSET(27961, glGenQueries, glGenQueries, NULL, 468),
- NAME_FUNC_OFFSET(27977, glGetBufferParameteriv, glGetBufferParameteriv, NULL, 469),
- NAME_FUNC_OFFSET(28003, glGetBufferPointerv, glGetBufferPointerv, NULL, 470),
- NAME_FUNC_OFFSET(28026, glGetBufferPointerv, glGetBufferPointerv, NULL, 470),
- NAME_FUNC_OFFSET(28049, glGetBufferSubData, glGetBufferSubData, NULL, 471),
- NAME_FUNC_OFFSET(28071, glGetQueryObjectiv, glGetQueryObjectiv, NULL, 472),
- NAME_FUNC_OFFSET(28093, glGetQueryObjectuiv, glGetQueryObjectuiv, NULL, 473),
- NAME_FUNC_OFFSET(28116, glGetQueryiv, glGetQueryiv, NULL, 474),
- NAME_FUNC_OFFSET(28132, glIsBuffer, glIsBuffer, NULL, 475),
- NAME_FUNC_OFFSET(28146, glIsQuery, glIsQuery, NULL, 476),
- NAME_FUNC_OFFSET(28159, glMapBuffer, glMapBuffer, NULL, 477),
- NAME_FUNC_OFFSET(28174, glMapBuffer, glMapBuffer, NULL, 477),
- NAME_FUNC_OFFSET(28189, glUnmapBuffer, glUnmapBuffer, NULL, 478),
- NAME_FUNC_OFFSET(28206, glUnmapBuffer, glUnmapBuffer, NULL, 478),
- NAME_FUNC_OFFSET(28223, glBindAttribLocation, glBindAttribLocation, NULL, 480),
- NAME_FUNC_OFFSET(28247, glBlendEquationSeparate, glBlendEquationSeparate, NULL, 481),
- NAME_FUNC_OFFSET(28274, glBlendEquationSeparate, glBlendEquationSeparate, NULL, 481),
- NAME_FUNC_OFFSET(28301, glBlendEquationSeparate, glBlendEquationSeparate, NULL, 481),
- NAME_FUNC_OFFSET(28328, glCompileShader, glCompileShader, NULL, 482),
- NAME_FUNC_OFFSET(28347, glDisableVertexAttribArray, glDisableVertexAttribArray, NULL, 488),
- NAME_FUNC_OFFSET(28377, glDrawBuffers, glDrawBuffers, NULL, 489),
- NAME_FUNC_OFFSET(28394, glDrawBuffers, glDrawBuffers, NULL, 489),
- NAME_FUNC_OFFSET(28411, glDrawBuffers, glDrawBuffers, NULL, 489),
- NAME_FUNC_OFFSET(28427, glDrawBuffers, glDrawBuffers, NULL, 489),
- NAME_FUNC_OFFSET(28444, glEnableVertexAttribArray, glEnableVertexAttribArray, NULL, 490),
- NAME_FUNC_OFFSET(28473, glGetActiveAttrib, glGetActiveAttrib, NULL, 491),
- NAME_FUNC_OFFSET(28494, glGetActiveUniform, glGetActiveUniform, NULL, 492),
- NAME_FUNC_OFFSET(28516, glGetAttribLocation, glGetAttribLocation, NULL, 494),
- NAME_FUNC_OFFSET(28539, glGetShaderSource, glGetShaderSource, NULL, 498),
- NAME_FUNC_OFFSET(28560, glGetUniformLocation, glGetUniformLocation, NULL, 500),
- NAME_FUNC_OFFSET(28584, glGetUniformfv, glGetUniformfv, NULL, 501),
- NAME_FUNC_OFFSET(28602, glGetUniformiv, glGetUniformiv, NULL, 502),
- NAME_FUNC_OFFSET(28620, glGetVertexAttribPointerv, glGetVertexAttribPointerv, NULL, 503),
- NAME_FUNC_OFFSET(28649, glGetVertexAttribPointerv, glGetVertexAttribPointerv, NULL, 503),
- NAME_FUNC_OFFSET(28677, glGetVertexAttribdv, glGetVertexAttribdv, NULL, 504),
- NAME_FUNC_OFFSET(28700, glGetVertexAttribfv, glGetVertexAttribfv, NULL, 505),
- NAME_FUNC_OFFSET(28723, glGetVertexAttribiv, glGetVertexAttribiv, NULL, 506),
- NAME_FUNC_OFFSET(28746, glLinkProgram, glLinkProgram, NULL, 509),
- NAME_FUNC_OFFSET(28763, glShaderSource, glShaderSource, NULL, 510),
- NAME_FUNC_OFFSET(28781, glStencilOpSeparate, glStencilOpSeparate, NULL, 513),
- NAME_FUNC_OFFSET(28804, glUniform1f, glUniform1f, NULL, 514),
- NAME_FUNC_OFFSET(28819, glUniform1fv, glUniform1fv, NULL, 515),
- NAME_FUNC_OFFSET(28835, glUniform1i, glUniform1i, NULL, 516),
- NAME_FUNC_OFFSET(28850, glUniform1iv, glUniform1iv, NULL, 517),
- NAME_FUNC_OFFSET(28866, glUniform2f, glUniform2f, NULL, 518),
- NAME_FUNC_OFFSET(28881, glUniform2fv, glUniform2fv, NULL, 519),
- NAME_FUNC_OFFSET(28897, glUniform2i, glUniform2i, NULL, 520),
- NAME_FUNC_OFFSET(28912, glUniform2iv, glUniform2iv, NULL, 521),
- NAME_FUNC_OFFSET(28928, glUniform3f, glUniform3f, NULL, 522),
- NAME_FUNC_OFFSET(28943, glUniform3fv, glUniform3fv, NULL, 523),
- NAME_FUNC_OFFSET(28959, glUniform3i, glUniform3i, NULL, 524),
- NAME_FUNC_OFFSET(28974, glUniform3iv, glUniform3iv, NULL, 525),
- NAME_FUNC_OFFSET(28990, glUniform4f, glUniform4f, NULL, 526),
- NAME_FUNC_OFFSET(29005, glUniform4fv, glUniform4fv, NULL, 527),
- NAME_FUNC_OFFSET(29021, glUniform4i, glUniform4i, NULL, 528),
- NAME_FUNC_OFFSET(29036, glUniform4iv, glUniform4iv, NULL, 529),
- NAME_FUNC_OFFSET(29052, glUniformMatrix2fv, glUniformMatrix2fv, NULL, 530),
- NAME_FUNC_OFFSET(29074, glUniformMatrix3fv, glUniformMatrix3fv, NULL, 531),
- NAME_FUNC_OFFSET(29096, glUniformMatrix4fv, glUniformMatrix4fv, NULL, 532),
- NAME_FUNC_OFFSET(29118, glUseProgram, glUseProgram, NULL, 533),
- NAME_FUNC_OFFSET(29140, glValidateProgram, glValidateProgram, NULL, 534),
- NAME_FUNC_OFFSET(29161, glVertexAttrib1d, glVertexAttrib1d, NULL, 535),
- NAME_FUNC_OFFSET(29181, glVertexAttrib1dv, glVertexAttrib1dv, NULL, 536),
- NAME_FUNC_OFFSET(29202, glVertexAttrib1s, glVertexAttrib1s, NULL, 537),
- NAME_FUNC_OFFSET(29222, glVertexAttrib1sv, glVertexAttrib1sv, NULL, 538),
- NAME_FUNC_OFFSET(29243, glVertexAttrib2d, glVertexAttrib2d, NULL, 539),
- NAME_FUNC_OFFSET(29263, glVertexAttrib2dv, glVertexAttrib2dv, NULL, 540),
- NAME_FUNC_OFFSET(29284, glVertexAttrib2s, glVertexAttrib2s, NULL, 541),
- NAME_FUNC_OFFSET(29304, glVertexAttrib2sv, glVertexAttrib2sv, NULL, 542),
- NAME_FUNC_OFFSET(29325, glVertexAttrib3d, glVertexAttrib3d, NULL, 543),
- NAME_FUNC_OFFSET(29345, glVertexAttrib3dv, glVertexAttrib3dv, NULL, 544),
- NAME_FUNC_OFFSET(29366, glVertexAttrib3s, glVertexAttrib3s, NULL, 545),
- NAME_FUNC_OFFSET(29386, glVertexAttrib3sv, glVertexAttrib3sv, NULL, 546),
- NAME_FUNC_OFFSET(29407, glVertexAttrib4Nbv, glVertexAttrib4Nbv, NULL, 547),
- NAME_FUNC_OFFSET(29429, glVertexAttrib4Niv, glVertexAttrib4Niv, NULL, 548),
- NAME_FUNC_OFFSET(29451, glVertexAttrib4Nsv, glVertexAttrib4Nsv, NULL, 549),
- NAME_FUNC_OFFSET(29473, glVertexAttrib4Nub, glVertexAttrib4Nub, NULL, 550),
- NAME_FUNC_OFFSET(29495, glVertexAttrib4Nubv, glVertexAttrib4Nubv, NULL, 551),
- NAME_FUNC_OFFSET(29518, glVertexAttrib4Nuiv, glVertexAttrib4Nuiv, NULL, 552),
- NAME_FUNC_OFFSET(29541, glVertexAttrib4Nusv, glVertexAttrib4Nusv, NULL, 553),
- NAME_FUNC_OFFSET(29564, glVertexAttrib4bv, glVertexAttrib4bv, NULL, 554),
- NAME_FUNC_OFFSET(29585, glVertexAttrib4d, glVertexAttrib4d, NULL, 555),
- NAME_FUNC_OFFSET(29605, glVertexAttrib4dv, glVertexAttrib4dv, NULL, 556),
- NAME_FUNC_OFFSET(29626, glVertexAttrib4iv, glVertexAttrib4iv, NULL, 557),
- NAME_FUNC_OFFSET(29647, glVertexAttrib4s, glVertexAttrib4s, NULL, 558),
- NAME_FUNC_OFFSET(29667, glVertexAttrib4sv, glVertexAttrib4sv, NULL, 559),
- NAME_FUNC_OFFSET(29688, glVertexAttrib4ubv, glVertexAttrib4ubv, NULL, 560),
- NAME_FUNC_OFFSET(29710, glVertexAttrib4uiv, glVertexAttrib4uiv, NULL, 561),
- NAME_FUNC_OFFSET(29732, glVertexAttrib4usv, glVertexAttrib4usv, NULL, 562),
- NAME_FUNC_OFFSET(29754, glVertexAttribPointer, glVertexAttribPointer, NULL, 563),
- NAME_FUNC_OFFSET(29779, glBeginConditionalRender, glBeginConditionalRender, NULL, 570),
- NAME_FUNC_OFFSET(29806, glBeginTransformFeedback, glBeginTransformFeedback, NULL, 571),
- NAME_FUNC_OFFSET(29834, glBindBufferBase, glBindBufferBase, NULL, 572),
- NAME_FUNC_OFFSET(29854, glBindBufferRange, glBindBufferRange, NULL, 573),
- NAME_FUNC_OFFSET(29875, glBindFragDataLocation, glBindFragDataLocation, NULL, 574),
- NAME_FUNC_OFFSET(29901, glClampColor, glClampColor, NULL, 575),
- NAME_FUNC_OFFSET(29917, glColorMaski, glColorMaski, NULL, 580),
- NAME_FUNC_OFFSET(29939, glDisablei, glDisablei, NULL, 581),
- NAME_FUNC_OFFSET(29959, glEnablei, glEnablei, NULL, 582),
- NAME_FUNC_OFFSET(29978, glEndConditionalRender, glEndConditionalRender, NULL, 583),
- NAME_FUNC_OFFSET(30003, glEndTransformFeedback, glEndTransformFeedback, NULL, 584),
- NAME_FUNC_OFFSET(30029, glGetBooleani_v, glGetBooleani_v, NULL, 585),
- NAME_FUNC_OFFSET(30053, glGetFragDataLocation, glGetFragDataLocation, NULL, 586),
- NAME_FUNC_OFFSET(30078, glGetIntegeri_v, glGetIntegeri_v, NULL, 587),
- NAME_FUNC_OFFSET(30102, glGetTexParameterIiv, glGetTexParameterIiv, NULL, 589),
- NAME_FUNC_OFFSET(30126, glGetTexParameterIuiv, glGetTexParameterIuiv, NULL, 590),
- NAME_FUNC_OFFSET(30151, glGetTransformFeedbackVarying, glGetTransformFeedbackVarying, NULL, 591),
- NAME_FUNC_OFFSET(30184, glGetUniformuiv, glGetUniformuiv, NULL, 592),
- NAME_FUNC_OFFSET(30203, glGetVertexAttribIiv, glGetVertexAttribIiv, NULL, 593),
- NAME_FUNC_OFFSET(30227, glGetVertexAttribIuiv, glGetVertexAttribIuiv, NULL, 594),
- NAME_FUNC_OFFSET(30252, glIsEnabledi, glIsEnabledi, NULL, 595),
- NAME_FUNC_OFFSET(30274, glTexParameterIiv, glTexParameterIiv, NULL, 596),
- NAME_FUNC_OFFSET(30295, glTexParameterIuiv, glTexParameterIuiv, NULL, 597),
- NAME_FUNC_OFFSET(30317, glTransformFeedbackVaryings, glTransformFeedbackVaryings, NULL, 598),
- NAME_FUNC_OFFSET(30348, glUniform1ui, glUniform1ui, NULL, 599),
- NAME_FUNC_OFFSET(30364, glUniform1uiv, glUniform1uiv, NULL, 600),
- NAME_FUNC_OFFSET(30381, glUniform2ui, glUniform2ui, NULL, 601),
- NAME_FUNC_OFFSET(30397, glUniform2uiv, glUniform2uiv, NULL, 602),
- NAME_FUNC_OFFSET(30414, glUniform3ui, glUniform3ui, NULL, 603),
- NAME_FUNC_OFFSET(30430, glUniform3uiv, glUniform3uiv, NULL, 604),
- NAME_FUNC_OFFSET(30447, glUniform4ui, glUniform4ui, NULL, 605),
- NAME_FUNC_OFFSET(30463, glUniform4uiv, glUniform4uiv, NULL, 606),
- NAME_FUNC_OFFSET(30480, glVertexAttribI1iv, glVertexAttribI1iv, NULL, 607),
- NAME_FUNC_OFFSET(30502, glVertexAttribI1uiv, glVertexAttribI1uiv, NULL, 608),
- NAME_FUNC_OFFSET(30525, glVertexAttribI4bv, glVertexAttribI4bv, NULL, 609),
- NAME_FUNC_OFFSET(30547, glVertexAttribI4sv, glVertexAttribI4sv, NULL, 610),
- NAME_FUNC_OFFSET(30569, glVertexAttribI4ubv, glVertexAttribI4ubv, NULL, 611),
- NAME_FUNC_OFFSET(30592, glVertexAttribI4usv, glVertexAttribI4usv, NULL, 612),
- NAME_FUNC_OFFSET(30615, glVertexAttribIPointer, glVertexAttribIPointer, NULL, 613),
- NAME_FUNC_OFFSET(30641, glPrimitiveRestartIndex, glPrimitiveRestartIndex, NULL, 614),
- NAME_FUNC_OFFSET(30667, glTexBuffer, glTexBuffer, NULL, 615),
- NAME_FUNC_OFFSET(30682, glFramebufferTexture, glFramebufferTexture, NULL, 616),
- NAME_FUNC_OFFSET(30706, glVertexAttribDivisor, glVertexAttribDivisor, NULL, 619),
- NAME_FUNC_OFFSET(30731, glMinSampleShading, glMinSampleShading, NULL, 620),
- NAME_FUNC_OFFSET(30753, glBindProgramARB, glBindProgramARB, NULL, 621),
- NAME_FUNC_OFFSET(30769, glDeleteProgramsARB, glDeleteProgramsARB, NULL, 622),
- NAME_FUNC_OFFSET(30788, glGenProgramsARB, glGenProgramsARB, NULL, 623),
- NAME_FUNC_OFFSET(30804, glIsProgramARB, glIsProgramARB, NULL, 630),
- NAME_FUNC_OFFSET(30818, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, 631),
- NAME_FUNC_OFFSET(30841, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, 632),
- NAME_FUNC_OFFSET(30865, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, 633),
- NAME_FUNC_OFFSET(30888, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, 634),
- NAME_FUNC_OFFSET(30912, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, 640),
- NAME_FUNC_OFFSET(30929, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, 641),
- NAME_FUNC_OFFSET(30947, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, 642),
- NAME_FUNC_OFFSET(30964, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, 643),
- NAME_FUNC_OFFSET(30982, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, 644),
- NAME_FUNC_OFFSET(30999, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, 645),
- NAME_FUNC_OFFSET(31017, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, 646),
- NAME_FUNC_OFFSET(31034, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, 647),
- NAME_FUNC_OFFSET(31052, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 658),
- NAME_FUNC_OFFSET(31077, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 658),
- NAME_FUNC_OFFSET(31099, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 659),
- NAME_FUNC_OFFSET(31126, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 659),
- NAME_FUNC_OFFSET(31150, glBindFramebuffer, glBindFramebuffer, NULL, 660),
- NAME_FUNC_OFFSET(31171, glBindRenderbuffer, glBindRenderbuffer, NULL, 661),
- NAME_FUNC_OFFSET(31193, glBlitFramebuffer, glBlitFramebuffer, NULL, 662),
+ NAME_FUNC_OFFSET(23281, gl_dispatch_stub_1255, gl_dispatch_stub_1255, NULL, 1255),
+ NAME_FUNC_OFFSET(23305, gl_dispatch_stub_1256, gl_dispatch_stub_1256, NULL, 1256),
+ NAME_FUNC_OFFSET(23330, gl_dispatch_stub_1257, gl_dispatch_stub_1257, NULL, 1257),
+ NAME_FUNC_OFFSET(23359, gl_dispatch_stub_1258, gl_dispatch_stub_1258, NULL, 1258),
+ NAME_FUNC_OFFSET(23390, gl_dispatch_stub_1259, gl_dispatch_stub_1259, NULL, 1259),
+ NAME_FUNC_OFFSET(23429, gl_dispatch_stub_1260, gl_dispatch_stub_1260, NULL, 1260),
+ NAME_FUNC_OFFSET(23458, glAlphaFuncx, glAlphaFuncx, NULL, 1261),
+ NAME_FUNC_OFFSET(23471, glClearColorx, glClearColorx, NULL, 1262),
+ NAME_FUNC_OFFSET(23485, glClearDepthx, glClearDepthx, NULL, 1263),
+ NAME_FUNC_OFFSET(23499, glColor4x, glColor4x, NULL, 1264),
+ NAME_FUNC_OFFSET(23509, glDepthRangex, glDepthRangex, NULL, 1265),
+ NAME_FUNC_OFFSET(23523, glFogx, glFogx, NULL, 1266),
+ NAME_FUNC_OFFSET(23530, glFogxv, glFogxv, NULL, 1267),
+ NAME_FUNC_OFFSET(23538, glFrustumf, glFrustumf, NULL, 1268),
+ NAME_FUNC_OFFSET(23549, glFrustumx, glFrustumx, NULL, 1269),
+ NAME_FUNC_OFFSET(23560, glLightModelx, glLightModelx, NULL, 1270),
+ NAME_FUNC_OFFSET(23574, glLightModelxv, glLightModelxv, NULL, 1271),
+ NAME_FUNC_OFFSET(23589, glLightx, glLightx, NULL, 1272),
+ NAME_FUNC_OFFSET(23598, glLightxv, glLightxv, NULL, 1273),
+ NAME_FUNC_OFFSET(23608, glLineWidthx, glLineWidthx, NULL, 1274),
+ NAME_FUNC_OFFSET(23621, glLoadMatrixx, glLoadMatrixx, NULL, 1275),
+ NAME_FUNC_OFFSET(23635, glMaterialx, glMaterialx, NULL, 1276),
+ NAME_FUNC_OFFSET(23647, glMaterialxv, glMaterialxv, NULL, 1277),
+ NAME_FUNC_OFFSET(23660, glMultMatrixx, glMultMatrixx, NULL, 1278),
+ NAME_FUNC_OFFSET(23674, glMultiTexCoord4x, glMultiTexCoord4x, NULL, 1279),
+ NAME_FUNC_OFFSET(23692, glNormal3x, glNormal3x, NULL, 1280),
+ NAME_FUNC_OFFSET(23703, glOrthof, glOrthof, NULL, 1281),
+ NAME_FUNC_OFFSET(23712, glOrthox, glOrthox, NULL, 1282),
+ NAME_FUNC_OFFSET(23721, glPointSizex, glPointSizex, NULL, 1283),
+ NAME_FUNC_OFFSET(23734, glPolygonOffsetx, glPolygonOffsetx, NULL, 1284),
+ NAME_FUNC_OFFSET(23751, glRotatex, glRotatex, NULL, 1285),
+ NAME_FUNC_OFFSET(23761, glSampleCoveragex, glSampleCoveragex, NULL, 1286),
+ NAME_FUNC_OFFSET(23779, glScalex, glScalex, NULL, 1287),
+ NAME_FUNC_OFFSET(23788, glTexEnvx, glTexEnvx, NULL, 1288),
+ NAME_FUNC_OFFSET(23798, glTexEnvxv, glTexEnvxv, NULL, 1289),
+ NAME_FUNC_OFFSET(23809, glTexParameterx, glTexParameterx, NULL, 1290),
+ NAME_FUNC_OFFSET(23825, glTranslatex, glTranslatex, NULL, 1291),
+ NAME_FUNC_OFFSET(23838, glClipPlanef, glClipPlanef, NULL, 1292),
+ NAME_FUNC_OFFSET(23851, glClipPlanex, glClipPlanex, NULL, 1293),
+ NAME_FUNC_OFFSET(23864, glGetClipPlanef, glGetClipPlanef, NULL, 1294),
+ NAME_FUNC_OFFSET(23880, glGetClipPlanex, glGetClipPlanex, NULL, 1295),
+ NAME_FUNC_OFFSET(23896, glGetFixedv, glGetFixedv, NULL, 1296),
+ NAME_FUNC_OFFSET(23908, glGetLightxv, glGetLightxv, NULL, 1297),
+ NAME_FUNC_OFFSET(23921, glGetMaterialxv, glGetMaterialxv, NULL, 1298),
+ NAME_FUNC_OFFSET(23937, glGetTexEnvxv, glGetTexEnvxv, NULL, 1299),
+ NAME_FUNC_OFFSET(23951, glGetTexParameterxv, glGetTexParameterxv, NULL, 1300),
+ NAME_FUNC_OFFSET(23971, glPointParameterx, glPointParameterx, NULL, 1301),
+ NAME_FUNC_OFFSET(23989, glPointParameterxv, glPointParameterxv, NULL, 1302),
+ NAME_FUNC_OFFSET(24008, glTexParameterxv, glTexParameterxv, NULL, 1303),
+ NAME_FUNC_OFFSET(24025, glTexGenf, glTexGenf, NULL, 190),
+ NAME_FUNC_OFFSET(24038, glTexGenfv, glTexGenfv, NULL, 191),
+ NAME_FUNC_OFFSET(24052, glTexGeni, glTexGeni, NULL, 192),
+ NAME_FUNC_OFFSET(24065, glTexGeniv, glTexGeniv, NULL, 193),
+ NAME_FUNC_OFFSET(24079, glReadBuffer, glReadBuffer, NULL, 254),
+ NAME_FUNC_OFFSET(24094, glGetTexGenfv, glGetTexGenfv, NULL, 279),
+ NAME_FUNC_OFFSET(24111, glGetTexGeniv, glGetTexGeniv, NULL, 280),
+ NAME_FUNC_OFFSET(24128, glArrayElement, glArrayElement, NULL, 306),
+ NAME_FUNC_OFFSET(24146, glBindTexture, glBindTexture, NULL, 307),
+ NAME_FUNC_OFFSET(24163, glDrawArrays, glDrawArrays, NULL, 310),
+ NAME_FUNC_OFFSET(24179, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, 322),
+ NAME_FUNC_OFFSET(24204, glCopyTexImage1D, glCopyTexImage1D, NULL, 323),
+ NAME_FUNC_OFFSET(24224, glCopyTexImage2D, glCopyTexImage2D, NULL, 324),
+ NAME_FUNC_OFFSET(24244, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, 325),
+ NAME_FUNC_OFFSET(24267, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, 326),
+ NAME_FUNC_OFFSET(24290, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, 327),
+ NAME_FUNC_OFFSET(24310, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, 328),
+ NAME_FUNC_OFFSET(24327, glGetPointerv, glGetPointerv, NULL, 329),
+ NAME_FUNC_OFFSET(24344, glIsTexture, glIsTextureEXT, glIsTextureEXT, 330),
+ NAME_FUNC_OFFSET(24359, glPrioritizeTextures, glPrioritizeTextures, NULL, 331),
+ NAME_FUNC_OFFSET(24383, glTexSubImage1D, glTexSubImage1D, NULL, 332),
+ NAME_FUNC_OFFSET(24402, glTexSubImage2D, glTexSubImage2D, NULL, 333),
+ NAME_FUNC_OFFSET(24421, glBlendColor, glBlendColor, NULL, 336),
+ NAME_FUNC_OFFSET(24437, glBlendEquation, glBlendEquation, NULL, 337),
+ NAME_FUNC_OFFSET(24456, glBlendEquation, glBlendEquation, NULL, 337),
+ NAME_FUNC_OFFSET(24475, glDrawRangeElements, glDrawRangeElements, NULL, 338),
+ NAME_FUNC_OFFSET(24498, glColorTable, glColorTable, NULL, 339),
+ NAME_FUNC_OFFSET(24514, glColorTable, glColorTable, NULL, 339),
+ NAME_FUNC_OFFSET(24530, glColorTableParameterfv, glColorTableParameterfv, NULL, 340),
+ NAME_FUNC_OFFSET(24557, glColorTableParameteriv, glColorTableParameteriv, NULL, 341),
+ NAME_FUNC_OFFSET(24584, glCopyColorTable, glCopyColorTable, NULL, 342),
+ NAME_FUNC_OFFSET(24604, glGetColorTable, gl_dispatch_stub_343, gl_dispatch_stub_343, 343),
+ NAME_FUNC_OFFSET(24623, glGetColorTable, gl_dispatch_stub_343, gl_dispatch_stub_343, 343),
+ NAME_FUNC_OFFSET(24642, glGetColorTableParameterfv, gl_dispatch_stub_344, gl_dispatch_stub_344, 344),
+ NAME_FUNC_OFFSET(24672, glGetColorTableParameterfv, gl_dispatch_stub_344, gl_dispatch_stub_344, 344),
+ NAME_FUNC_OFFSET(24702, glGetColorTableParameteriv, gl_dispatch_stub_345, gl_dispatch_stub_345, 345),
+ NAME_FUNC_OFFSET(24732, glGetColorTableParameteriv, gl_dispatch_stub_345, gl_dispatch_stub_345, 345),
+ NAME_FUNC_OFFSET(24762, glColorSubTable, glColorSubTable, NULL, 346),
+ NAME_FUNC_OFFSET(24781, glCopyColorSubTable, glCopyColorSubTable, NULL, 347),
+ NAME_FUNC_OFFSET(24804, glConvolutionFilter1D, glConvolutionFilter1D, NULL, 348),
+ NAME_FUNC_OFFSET(24829, glConvolutionFilter2D, glConvolutionFilter2D, NULL, 349),
+ NAME_FUNC_OFFSET(24854, glConvolutionParameterf, glConvolutionParameterf, NULL, 350),
+ NAME_FUNC_OFFSET(24881, glConvolutionParameterfv, glConvolutionParameterfv, NULL, 351),
+ NAME_FUNC_OFFSET(24909, glConvolutionParameteri, glConvolutionParameteri, NULL, 352),
+ NAME_FUNC_OFFSET(24936, glConvolutionParameteriv, glConvolutionParameteriv, NULL, 353),
+ NAME_FUNC_OFFSET(24964, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, 354),
+ NAME_FUNC_OFFSET(24993, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, 355),
+ NAME_FUNC_OFFSET(25022, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, 356),
+ NAME_FUNC_OFFSET(25048, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, 357),
+ NAME_FUNC_OFFSET(25079, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, 358),
+ NAME_FUNC_OFFSET(25110, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, 359),
+ NAME_FUNC_OFFSET(25134, glSeparableFilter2D, glSeparableFilter2D, NULL, 360),
+ NAME_FUNC_OFFSET(25157, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, 361),
+ NAME_FUNC_OFFSET(25175, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, 362),
+ NAME_FUNC_OFFSET(25204, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, 363),
+ NAME_FUNC_OFFSET(25233, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, 364),
+ NAME_FUNC_OFFSET(25248, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, 365),
+ NAME_FUNC_OFFSET(25274, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, 366),
+ NAME_FUNC_OFFSET(25300, glHistogram, glHistogram, NULL, 367),
+ NAME_FUNC_OFFSET(25315, glMinmax, glMinmax, NULL, 368),
+ NAME_FUNC_OFFSET(25327, glResetHistogram, glResetHistogram, NULL, 369),
+ NAME_FUNC_OFFSET(25347, glResetMinmax, glResetMinmax, NULL, 370),
+ NAME_FUNC_OFFSET(25364, glTexImage3D, glTexImage3D, NULL, 371),
+ NAME_FUNC_OFFSET(25380, glTexImage3D, glTexImage3D, NULL, 371),
+ NAME_FUNC_OFFSET(25396, glTexSubImage3D, glTexSubImage3D, NULL, 372),
+ NAME_FUNC_OFFSET(25415, glTexSubImage3D, glTexSubImage3D, NULL, 372),
+ NAME_FUNC_OFFSET(25434, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
+ NAME_FUNC_OFFSET(25457, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
+ NAME_FUNC_OFFSET(25480, glActiveTexture, glActiveTexture, NULL, 374),
+ NAME_FUNC_OFFSET(25499, glClientActiveTexture, glClientActiveTexture, NULL, 375),
+ NAME_FUNC_OFFSET(25524, glMultiTexCoord1d, glMultiTexCoord1d, NULL, 376),
+ NAME_FUNC_OFFSET(25545, glMultiTexCoord1dv, glMultiTexCoord1dv, NULL, 377),
+ NAME_FUNC_OFFSET(25567, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, 378),
+ NAME_FUNC_OFFSET(25585, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, 379),
+ NAME_FUNC_OFFSET(25604, glMultiTexCoord1i, glMultiTexCoord1i, NULL, 380),
+ NAME_FUNC_OFFSET(25625, glMultiTexCoord1iv, glMultiTexCoord1iv, NULL, 381),
+ NAME_FUNC_OFFSET(25647, glMultiTexCoord1s, glMultiTexCoord1s, NULL, 382),
+ NAME_FUNC_OFFSET(25668, glMultiTexCoord1sv, glMultiTexCoord1sv, NULL, 383),
+ NAME_FUNC_OFFSET(25690, glMultiTexCoord2d, glMultiTexCoord2d, NULL, 384),
+ NAME_FUNC_OFFSET(25711, glMultiTexCoord2dv, glMultiTexCoord2dv, NULL, 385),
+ NAME_FUNC_OFFSET(25733, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, 386),
+ NAME_FUNC_OFFSET(25751, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, 387),
+ NAME_FUNC_OFFSET(25770, glMultiTexCoord2i, glMultiTexCoord2i, NULL, 388),
+ NAME_FUNC_OFFSET(25791, glMultiTexCoord2iv, glMultiTexCoord2iv, NULL, 389),
+ NAME_FUNC_OFFSET(25813, glMultiTexCoord2s, glMultiTexCoord2s, NULL, 390),
+ NAME_FUNC_OFFSET(25834, glMultiTexCoord2sv, glMultiTexCoord2sv, NULL, 391),
+ NAME_FUNC_OFFSET(25856, glMultiTexCoord3d, glMultiTexCoord3d, NULL, 392),
+ NAME_FUNC_OFFSET(25877, glMultiTexCoord3dv, glMultiTexCoord3dv, NULL, 393),
+ NAME_FUNC_OFFSET(25899, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, 394),
+ NAME_FUNC_OFFSET(25917, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, 395),
+ NAME_FUNC_OFFSET(25936, glMultiTexCoord3i, glMultiTexCoord3i, NULL, 396),
+ NAME_FUNC_OFFSET(25957, glMultiTexCoord3iv, glMultiTexCoord3iv, NULL, 397),
+ NAME_FUNC_OFFSET(25979, glMultiTexCoord3s, glMultiTexCoord3s, NULL, 398),
+ NAME_FUNC_OFFSET(26000, glMultiTexCoord3sv, glMultiTexCoord3sv, NULL, 399),
+ NAME_FUNC_OFFSET(26022, glMultiTexCoord4d, glMultiTexCoord4d, NULL, 400),
+ NAME_FUNC_OFFSET(26043, glMultiTexCoord4dv, glMultiTexCoord4dv, NULL, 401),
+ NAME_FUNC_OFFSET(26065, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, 402),
+ NAME_FUNC_OFFSET(26083, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, 403),
+ NAME_FUNC_OFFSET(26102, glMultiTexCoord4i, glMultiTexCoord4i, NULL, 404),
+ NAME_FUNC_OFFSET(26123, glMultiTexCoord4iv, glMultiTexCoord4iv, NULL, 405),
+ NAME_FUNC_OFFSET(26145, glMultiTexCoord4s, glMultiTexCoord4s, NULL, 406),
+ NAME_FUNC_OFFSET(26166, glMultiTexCoord4sv, glMultiTexCoord4sv, NULL, 407),
+ NAME_FUNC_OFFSET(26188, glCompressedTexImage1D, glCompressedTexImage1D, NULL, 408),
+ NAME_FUNC_OFFSET(26214, glCompressedTexImage2D, glCompressedTexImage2D, NULL, 409),
+ NAME_FUNC_OFFSET(26240, glCompressedTexImage3D, glCompressedTexImage3D, NULL, 410),
+ NAME_FUNC_OFFSET(26266, glCompressedTexImage3D, glCompressedTexImage3D, NULL, 410),
+ NAME_FUNC_OFFSET(26292, glCompressedTexSubImage1D, glCompressedTexSubImage1D, NULL, 411),
+ NAME_FUNC_OFFSET(26321, glCompressedTexSubImage2D, glCompressedTexSubImage2D, NULL, 412),
+ NAME_FUNC_OFFSET(26350, glCompressedTexSubImage3D, glCompressedTexSubImage3D, NULL, 413),
+ NAME_FUNC_OFFSET(26379, glCompressedTexSubImage3D, glCompressedTexSubImage3D, NULL, 413),
+ NAME_FUNC_OFFSET(26408, glGetCompressedTexImage, glGetCompressedTexImage, NULL, 414),
+ NAME_FUNC_OFFSET(26435, glLoadTransposeMatrixd, glLoadTransposeMatrixd, NULL, 415),
+ NAME_FUNC_OFFSET(26461, glLoadTransposeMatrixf, glLoadTransposeMatrixf, NULL, 416),
+ NAME_FUNC_OFFSET(26487, glMultTransposeMatrixd, glMultTransposeMatrixd, NULL, 417),
+ NAME_FUNC_OFFSET(26513, glMultTransposeMatrixf, glMultTransposeMatrixf, NULL, 418),
+ NAME_FUNC_OFFSET(26539, glSampleCoverage, glSampleCoverage, NULL, 419),
+ NAME_FUNC_OFFSET(26559, glBlendFuncSeparate, glBlendFuncSeparate, NULL, 420),
+ NAME_FUNC_OFFSET(26582, glBlendFuncSeparate, glBlendFuncSeparate, NULL, 420),
+ NAME_FUNC_OFFSET(26606, glBlendFuncSeparate, glBlendFuncSeparate, NULL, 420),
+ NAME_FUNC_OFFSET(26629, glFogCoordPointer, glFogCoordPointer, NULL, 421),
+ NAME_FUNC_OFFSET(26650, glFogCoordd, glFogCoordd, NULL, 422),
+ NAME_FUNC_OFFSET(26665, glFogCoorddv, glFogCoorddv, NULL, 423),
+ NAME_FUNC_OFFSET(26681, glMultiDrawArrays, glMultiDrawArrays, NULL, 424),
+ NAME_FUNC_OFFSET(26702, glPointParameterf, glPointParameterf, NULL, 425),
+ NAME_FUNC_OFFSET(26723, glPointParameterf, glPointParameterf, NULL, 425),
+ NAME_FUNC_OFFSET(26744, glPointParameterf, glPointParameterf, NULL, 425),
+ NAME_FUNC_OFFSET(26766, glPointParameterfv, glPointParameterfv, NULL, 426),
+ NAME_FUNC_OFFSET(26788, glPointParameterfv, glPointParameterfv, NULL, 426),
+ NAME_FUNC_OFFSET(26810, glPointParameterfv, glPointParameterfv, NULL, 426),
+ NAME_FUNC_OFFSET(26833, glPointParameteri, glPointParameteri, NULL, 427),
+ NAME_FUNC_OFFSET(26853, glPointParameteriv, glPointParameteriv, NULL, 428),
+ NAME_FUNC_OFFSET(26874, glSecondaryColor3b, glSecondaryColor3b, NULL, 429),
+ NAME_FUNC_OFFSET(26896, glSecondaryColor3bv, glSecondaryColor3bv, NULL, 430),
+ NAME_FUNC_OFFSET(26919, glSecondaryColor3d, glSecondaryColor3d, NULL, 431),
+ NAME_FUNC_OFFSET(26941, glSecondaryColor3dv, glSecondaryColor3dv, NULL, 432),
+ NAME_FUNC_OFFSET(26964, glSecondaryColor3i, glSecondaryColor3i, NULL, 433),
+ NAME_FUNC_OFFSET(26986, glSecondaryColor3iv, glSecondaryColor3iv, NULL, 434),
+ NAME_FUNC_OFFSET(27009, glSecondaryColor3s, glSecondaryColor3s, NULL, 435),
+ NAME_FUNC_OFFSET(27031, glSecondaryColor3sv, glSecondaryColor3sv, NULL, 436),
+ NAME_FUNC_OFFSET(27054, glSecondaryColor3ub, glSecondaryColor3ub, NULL, 437),
+ NAME_FUNC_OFFSET(27077, glSecondaryColor3ubv, glSecondaryColor3ubv, NULL, 438),
+ NAME_FUNC_OFFSET(27101, glSecondaryColor3ui, glSecondaryColor3ui, NULL, 439),
+ NAME_FUNC_OFFSET(27124, glSecondaryColor3uiv, glSecondaryColor3uiv, NULL, 440),
+ NAME_FUNC_OFFSET(27148, glSecondaryColor3us, glSecondaryColor3us, NULL, 441),
+ NAME_FUNC_OFFSET(27171, glSecondaryColor3usv, glSecondaryColor3usv, NULL, 442),
+ NAME_FUNC_OFFSET(27195, glSecondaryColorPointer, glSecondaryColorPointer, NULL, 443),
+ NAME_FUNC_OFFSET(27222, glWindowPos2d, glWindowPos2d, NULL, 444),
+ NAME_FUNC_OFFSET(27239, glWindowPos2d, glWindowPos2d, NULL, 444),
+ NAME_FUNC_OFFSET(27257, glWindowPos2dv, glWindowPos2dv, NULL, 445),
+ NAME_FUNC_OFFSET(27275, glWindowPos2dv, glWindowPos2dv, NULL, 445),
+ NAME_FUNC_OFFSET(27294, glWindowPos2f, glWindowPos2f, NULL, 446),
+ NAME_FUNC_OFFSET(27311, glWindowPos2f, glWindowPos2f, NULL, 446),
+ NAME_FUNC_OFFSET(27329, glWindowPos2fv, glWindowPos2fv, NULL, 447),
+ NAME_FUNC_OFFSET(27347, glWindowPos2fv, glWindowPos2fv, NULL, 447),
+ NAME_FUNC_OFFSET(27366, glWindowPos2i, glWindowPos2i, NULL, 448),
+ NAME_FUNC_OFFSET(27383, glWindowPos2i, glWindowPos2i, NULL, 448),
+ NAME_FUNC_OFFSET(27401, glWindowPos2iv, glWindowPos2iv, NULL, 449),
+ NAME_FUNC_OFFSET(27419, glWindowPos2iv, glWindowPos2iv, NULL, 449),
+ NAME_FUNC_OFFSET(27438, glWindowPos2s, glWindowPos2s, NULL, 450),
+ NAME_FUNC_OFFSET(27455, glWindowPos2s, glWindowPos2s, NULL, 450),
+ NAME_FUNC_OFFSET(27473, glWindowPos2sv, glWindowPos2sv, NULL, 451),
+ NAME_FUNC_OFFSET(27491, glWindowPos2sv, glWindowPos2sv, NULL, 451),
+ NAME_FUNC_OFFSET(27510, glWindowPos3d, glWindowPos3d, NULL, 452),
+ NAME_FUNC_OFFSET(27527, glWindowPos3d, glWindowPos3d, NULL, 452),
+ NAME_FUNC_OFFSET(27545, glWindowPos3dv, glWindowPos3dv, NULL, 453),
+ NAME_FUNC_OFFSET(27563, glWindowPos3dv, glWindowPos3dv, NULL, 453),
+ NAME_FUNC_OFFSET(27582, glWindowPos3f, glWindowPos3f, NULL, 454),
+ NAME_FUNC_OFFSET(27599, glWindowPos3f, glWindowPos3f, NULL, 454),
+ NAME_FUNC_OFFSET(27617, glWindowPos3fv, glWindowPos3fv, NULL, 455),
+ NAME_FUNC_OFFSET(27635, glWindowPos3fv, glWindowPos3fv, NULL, 455),
+ NAME_FUNC_OFFSET(27654, glWindowPos3i, glWindowPos3i, NULL, 456),
+ NAME_FUNC_OFFSET(27671, glWindowPos3i, glWindowPos3i, NULL, 456),
+ NAME_FUNC_OFFSET(27689, glWindowPos3iv, glWindowPos3iv, NULL, 457),
+ NAME_FUNC_OFFSET(27707, glWindowPos3iv, glWindowPos3iv, NULL, 457),
+ NAME_FUNC_OFFSET(27726, glWindowPos3s, glWindowPos3s, NULL, 458),
+ NAME_FUNC_OFFSET(27743, glWindowPos3s, glWindowPos3s, NULL, 458),
+ NAME_FUNC_OFFSET(27761, glWindowPos3sv, glWindowPos3sv, NULL, 459),
+ NAME_FUNC_OFFSET(27779, glWindowPos3sv, glWindowPos3sv, NULL, 459),
+ NAME_FUNC_OFFSET(27798, glBeginQuery, glBeginQuery, NULL, 460),
+ NAME_FUNC_OFFSET(27814, glBindBuffer, glBindBuffer, NULL, 461),
+ NAME_FUNC_OFFSET(27830, glBufferData, glBufferData, NULL, 462),
+ NAME_FUNC_OFFSET(27846, glBufferSubData, glBufferSubData, NULL, 463),
+ NAME_FUNC_OFFSET(27865, glDeleteBuffers, glDeleteBuffers, NULL, 464),
+ NAME_FUNC_OFFSET(27884, glDeleteQueries, glDeleteQueries, NULL, 465),
+ NAME_FUNC_OFFSET(27903, glEndQuery, glEndQuery, NULL, 466),
+ NAME_FUNC_OFFSET(27917, glGenBuffers, glGenBuffers, NULL, 467),
+ NAME_FUNC_OFFSET(27933, glGenQueries, glGenQueries, NULL, 468),
+ NAME_FUNC_OFFSET(27949, glGetBufferParameteriv, glGetBufferParameteriv, NULL, 469),
+ NAME_FUNC_OFFSET(27975, glGetBufferPointerv, glGetBufferPointerv, NULL, 470),
+ NAME_FUNC_OFFSET(27998, glGetBufferPointerv, glGetBufferPointerv, NULL, 470),
+ NAME_FUNC_OFFSET(28021, glGetBufferSubData, glGetBufferSubData, NULL, 471),
+ NAME_FUNC_OFFSET(28043, glGetQueryObjectiv, glGetQueryObjectiv, NULL, 472),
+ NAME_FUNC_OFFSET(28065, glGetQueryObjectuiv, glGetQueryObjectuiv, NULL, 473),
+ NAME_FUNC_OFFSET(28088, glGetQueryiv, glGetQueryiv, NULL, 474),
+ NAME_FUNC_OFFSET(28104, glIsBuffer, glIsBuffer, NULL, 475),
+ NAME_FUNC_OFFSET(28118, glIsQuery, glIsQuery, NULL, 476),
+ NAME_FUNC_OFFSET(28131, glMapBuffer, glMapBuffer, NULL, 477),
+ NAME_FUNC_OFFSET(28146, glMapBuffer, glMapBuffer, NULL, 477),
+ NAME_FUNC_OFFSET(28161, glUnmapBuffer, glUnmapBuffer, NULL, 478),
+ NAME_FUNC_OFFSET(28178, glUnmapBuffer, glUnmapBuffer, NULL, 478),
+ NAME_FUNC_OFFSET(28195, glBindAttribLocation, glBindAttribLocation, NULL, 480),
+ NAME_FUNC_OFFSET(28219, glBlendEquationSeparate, glBlendEquationSeparate, NULL, 481),
+ NAME_FUNC_OFFSET(28246, glBlendEquationSeparate, glBlendEquationSeparate, NULL, 481),
+ NAME_FUNC_OFFSET(28273, glBlendEquationSeparate, glBlendEquationSeparate, NULL, 481),
+ NAME_FUNC_OFFSET(28300, glCompileShader, glCompileShader, NULL, 482),
+ NAME_FUNC_OFFSET(28319, glDisableVertexAttribArray, glDisableVertexAttribArray, NULL, 488),
+ NAME_FUNC_OFFSET(28349, glDrawBuffers, glDrawBuffers, NULL, 489),
+ NAME_FUNC_OFFSET(28366, glDrawBuffers, glDrawBuffers, NULL, 489),
+ NAME_FUNC_OFFSET(28383, glDrawBuffers, glDrawBuffers, NULL, 489),
+ NAME_FUNC_OFFSET(28399, glDrawBuffers, glDrawBuffers, NULL, 489),
+ NAME_FUNC_OFFSET(28416, glEnableVertexAttribArray, glEnableVertexAttribArray, NULL, 490),
+ NAME_FUNC_OFFSET(28445, glGetActiveAttrib, glGetActiveAttrib, NULL, 491),
+ NAME_FUNC_OFFSET(28466, glGetActiveUniform, glGetActiveUniform, NULL, 492),
+ NAME_FUNC_OFFSET(28488, glGetAttribLocation, glGetAttribLocation, NULL, 494),
+ NAME_FUNC_OFFSET(28511, glGetShaderSource, glGetShaderSource, NULL, 498),
+ NAME_FUNC_OFFSET(28532, glGetUniformLocation, glGetUniformLocation, NULL, 500),
+ NAME_FUNC_OFFSET(28556, glGetUniformfv, glGetUniformfv, NULL, 501),
+ NAME_FUNC_OFFSET(28574, glGetUniformiv, glGetUniformiv, NULL, 502),
+ NAME_FUNC_OFFSET(28592, glGetVertexAttribPointerv, glGetVertexAttribPointerv, NULL, 503),
+ NAME_FUNC_OFFSET(28621, glGetVertexAttribPointerv, glGetVertexAttribPointerv, NULL, 503),
+ NAME_FUNC_OFFSET(28649, glGetVertexAttribdv, glGetVertexAttribdv, NULL, 504),
+ NAME_FUNC_OFFSET(28672, glGetVertexAttribfv, glGetVertexAttribfv, NULL, 505),
+ NAME_FUNC_OFFSET(28695, glGetVertexAttribiv, glGetVertexAttribiv, NULL, 506),
+ NAME_FUNC_OFFSET(28718, glLinkProgram, glLinkProgram, NULL, 509),
+ NAME_FUNC_OFFSET(28735, glShaderSource, glShaderSource, NULL, 510),
+ NAME_FUNC_OFFSET(28753, glStencilOpSeparate, glStencilOpSeparate, NULL, 513),
+ NAME_FUNC_OFFSET(28776, glUniform1f, glUniform1f, NULL, 514),
+ NAME_FUNC_OFFSET(28791, glUniform1fv, glUniform1fv, NULL, 515),
+ NAME_FUNC_OFFSET(28807, glUniform1i, glUniform1i, NULL, 516),
+ NAME_FUNC_OFFSET(28822, glUniform1iv, glUniform1iv, NULL, 517),
+ NAME_FUNC_OFFSET(28838, glUniform2f, glUniform2f, NULL, 518),
+ NAME_FUNC_OFFSET(28853, glUniform2fv, glUniform2fv, NULL, 519),
+ NAME_FUNC_OFFSET(28869, glUniform2i, glUniform2i, NULL, 520),
+ NAME_FUNC_OFFSET(28884, glUniform2iv, glUniform2iv, NULL, 521),
+ NAME_FUNC_OFFSET(28900, glUniform3f, glUniform3f, NULL, 522),
+ NAME_FUNC_OFFSET(28915, glUniform3fv, glUniform3fv, NULL, 523),
+ NAME_FUNC_OFFSET(28931, glUniform3i, glUniform3i, NULL, 524),
+ NAME_FUNC_OFFSET(28946, glUniform3iv, glUniform3iv, NULL, 525),
+ NAME_FUNC_OFFSET(28962, glUniform4f, glUniform4f, NULL, 526),
+ NAME_FUNC_OFFSET(28977, glUniform4fv, glUniform4fv, NULL, 527),
+ NAME_FUNC_OFFSET(28993, glUniform4i, glUniform4i, NULL, 528),
+ NAME_FUNC_OFFSET(29008, glUniform4iv, glUniform4iv, NULL, 529),
+ NAME_FUNC_OFFSET(29024, glUniformMatrix2fv, glUniformMatrix2fv, NULL, 530),
+ NAME_FUNC_OFFSET(29046, glUniformMatrix3fv, glUniformMatrix3fv, NULL, 531),
+ NAME_FUNC_OFFSET(29068, glUniformMatrix4fv, glUniformMatrix4fv, NULL, 532),
+ NAME_FUNC_OFFSET(29090, glUseProgram, glUseProgram, NULL, 533),
+ NAME_FUNC_OFFSET(29112, glValidateProgram, glValidateProgram, NULL, 534),
+ NAME_FUNC_OFFSET(29133, glVertexAttrib1d, glVertexAttrib1d, NULL, 535),
+ NAME_FUNC_OFFSET(29153, glVertexAttrib1dv, glVertexAttrib1dv, NULL, 536),
+ NAME_FUNC_OFFSET(29174, glVertexAttrib1s, glVertexAttrib1s, NULL, 537),
+ NAME_FUNC_OFFSET(29194, glVertexAttrib1sv, glVertexAttrib1sv, NULL, 538),
+ NAME_FUNC_OFFSET(29215, glVertexAttrib2d, glVertexAttrib2d, NULL, 539),
+ NAME_FUNC_OFFSET(29235, glVertexAttrib2dv, glVertexAttrib2dv, NULL, 540),
+ NAME_FUNC_OFFSET(29256, glVertexAttrib2s, glVertexAttrib2s, NULL, 541),
+ NAME_FUNC_OFFSET(29276, glVertexAttrib2sv, glVertexAttrib2sv, NULL, 542),
+ NAME_FUNC_OFFSET(29297, glVertexAttrib3d, glVertexAttrib3d, NULL, 543),
+ NAME_FUNC_OFFSET(29317, glVertexAttrib3dv, glVertexAttrib3dv, NULL, 544),
+ NAME_FUNC_OFFSET(29338, glVertexAttrib3s, glVertexAttrib3s, NULL, 545),
+ NAME_FUNC_OFFSET(29358, glVertexAttrib3sv, glVertexAttrib3sv, NULL, 546),
+ NAME_FUNC_OFFSET(29379, glVertexAttrib4Nbv, glVertexAttrib4Nbv, NULL, 547),
+ NAME_FUNC_OFFSET(29401, glVertexAttrib4Niv, glVertexAttrib4Niv, NULL, 548),
+ NAME_FUNC_OFFSET(29423, glVertexAttrib4Nsv, glVertexAttrib4Nsv, NULL, 549),
+ NAME_FUNC_OFFSET(29445, glVertexAttrib4Nub, glVertexAttrib4Nub, NULL, 550),
+ NAME_FUNC_OFFSET(29467, glVertexAttrib4Nubv, glVertexAttrib4Nubv, NULL, 551),
+ NAME_FUNC_OFFSET(29490, glVertexAttrib4Nuiv, glVertexAttrib4Nuiv, NULL, 552),
+ NAME_FUNC_OFFSET(29513, glVertexAttrib4Nusv, glVertexAttrib4Nusv, NULL, 553),
+ NAME_FUNC_OFFSET(29536, glVertexAttrib4bv, glVertexAttrib4bv, NULL, 554),
+ NAME_FUNC_OFFSET(29557, glVertexAttrib4d, glVertexAttrib4d, NULL, 555),
+ NAME_FUNC_OFFSET(29577, glVertexAttrib4dv, glVertexAttrib4dv, NULL, 556),
+ NAME_FUNC_OFFSET(29598, glVertexAttrib4iv, glVertexAttrib4iv, NULL, 557),
+ NAME_FUNC_OFFSET(29619, glVertexAttrib4s, glVertexAttrib4s, NULL, 558),
+ NAME_FUNC_OFFSET(29639, glVertexAttrib4sv, glVertexAttrib4sv, NULL, 559),
+ NAME_FUNC_OFFSET(29660, glVertexAttrib4ubv, glVertexAttrib4ubv, NULL, 560),
+ NAME_FUNC_OFFSET(29682, glVertexAttrib4uiv, glVertexAttrib4uiv, NULL, 561),
+ NAME_FUNC_OFFSET(29704, glVertexAttrib4usv, glVertexAttrib4usv, NULL, 562),
+ NAME_FUNC_OFFSET(29726, glVertexAttribPointer, glVertexAttribPointer, NULL, 563),
+ NAME_FUNC_OFFSET(29751, glBeginConditionalRender, glBeginConditionalRender, NULL, 570),
+ NAME_FUNC_OFFSET(29778, glBeginTransformFeedback, glBeginTransformFeedback, NULL, 571),
+ NAME_FUNC_OFFSET(29806, glBindBufferBase, glBindBufferBase, NULL, 572),
+ NAME_FUNC_OFFSET(29826, glBindBufferRange, glBindBufferRange, NULL, 573),
+ NAME_FUNC_OFFSET(29847, glBindFragDataLocation, glBindFragDataLocation, NULL, 574),
+ NAME_FUNC_OFFSET(29873, glClampColor, glClampColor, NULL, 575),
+ NAME_FUNC_OFFSET(29889, glColorMaski, glColorMaski, NULL, 580),
+ NAME_FUNC_OFFSET(29911, glDisablei, glDisablei, NULL, 581),
+ NAME_FUNC_OFFSET(29931, glEnablei, glEnablei, NULL, 582),
+ NAME_FUNC_OFFSET(29950, glEndConditionalRender, glEndConditionalRender, NULL, 583),
+ NAME_FUNC_OFFSET(29975, glEndTransformFeedback, glEndTransformFeedback, NULL, 584),
+ NAME_FUNC_OFFSET(30001, glGetBooleani_v, glGetBooleani_v, NULL, 585),
+ NAME_FUNC_OFFSET(30025, glGetFragDataLocation, glGetFragDataLocation, NULL, 586),
+ NAME_FUNC_OFFSET(30050, glGetIntegeri_v, glGetIntegeri_v, NULL, 587),
+ NAME_FUNC_OFFSET(30074, glGetTexParameterIiv, glGetTexParameterIiv, NULL, 589),
+ NAME_FUNC_OFFSET(30098, glGetTexParameterIuiv, glGetTexParameterIuiv, NULL, 590),
+ NAME_FUNC_OFFSET(30123, glGetTransformFeedbackVarying, glGetTransformFeedbackVarying, NULL, 591),
+ NAME_FUNC_OFFSET(30156, glGetUniformuiv, glGetUniformuiv, NULL, 592),
+ NAME_FUNC_OFFSET(30175, glGetVertexAttribIiv, glGetVertexAttribIiv, NULL, 593),
+ NAME_FUNC_OFFSET(30199, glGetVertexAttribIuiv, glGetVertexAttribIuiv, NULL, 594),
+ NAME_FUNC_OFFSET(30224, glIsEnabledi, glIsEnabledi, NULL, 595),
+ NAME_FUNC_OFFSET(30246, glTexParameterIiv, glTexParameterIiv, NULL, 596),
+ NAME_FUNC_OFFSET(30267, glTexParameterIuiv, glTexParameterIuiv, NULL, 597),
+ NAME_FUNC_OFFSET(30289, glTransformFeedbackVaryings, glTransformFeedbackVaryings, NULL, 598),
+ NAME_FUNC_OFFSET(30320, glUniform1ui, glUniform1ui, NULL, 599),
+ NAME_FUNC_OFFSET(30336, glUniform1uiv, glUniform1uiv, NULL, 600),
+ NAME_FUNC_OFFSET(30353, glUniform2ui, glUniform2ui, NULL, 601),
+ NAME_FUNC_OFFSET(30369, glUniform2uiv, glUniform2uiv, NULL, 602),
+ NAME_FUNC_OFFSET(30386, glUniform3ui, glUniform3ui, NULL, 603),
+ NAME_FUNC_OFFSET(30402, glUniform3uiv, glUniform3uiv, NULL, 604),
+ NAME_FUNC_OFFSET(30419, glUniform4ui, glUniform4ui, NULL, 605),
+ NAME_FUNC_OFFSET(30435, glUniform4uiv, glUniform4uiv, NULL, 606),
+ NAME_FUNC_OFFSET(30452, glVertexAttribI1iv, glVertexAttribI1iv, NULL, 607),
+ NAME_FUNC_OFFSET(30474, glVertexAttribI1uiv, glVertexAttribI1uiv, NULL, 608),
+ NAME_FUNC_OFFSET(30497, glVertexAttribI4bv, glVertexAttribI4bv, NULL, 609),
+ NAME_FUNC_OFFSET(30519, glVertexAttribI4sv, glVertexAttribI4sv, NULL, 610),
+ NAME_FUNC_OFFSET(30541, glVertexAttribI4ubv, glVertexAttribI4ubv, NULL, 611),
+ NAME_FUNC_OFFSET(30564, glVertexAttribI4usv, glVertexAttribI4usv, NULL, 612),
+ NAME_FUNC_OFFSET(30587, glVertexAttribIPointer, glVertexAttribIPointer, NULL, 613),
+ NAME_FUNC_OFFSET(30613, glPrimitiveRestartIndex, glPrimitiveRestartIndex, NULL, 614),
+ NAME_FUNC_OFFSET(30639, glTexBuffer, glTexBuffer, NULL, 615),
+ NAME_FUNC_OFFSET(30654, glFramebufferTexture, glFramebufferTexture, NULL, 616),
+ NAME_FUNC_OFFSET(30678, glVertexAttribDivisor, glVertexAttribDivisor, NULL, 619),
+ NAME_FUNC_OFFSET(30703, glMinSampleShading, glMinSampleShading, NULL, 620),
+ NAME_FUNC_OFFSET(30725, glBindProgramARB, glBindProgramARB, NULL, 621),
+ NAME_FUNC_OFFSET(30741, glDeleteProgramsARB, glDeleteProgramsARB, NULL, 622),
+ NAME_FUNC_OFFSET(30760, glGenProgramsARB, glGenProgramsARB, NULL, 623),
+ NAME_FUNC_OFFSET(30776, glIsProgramARB, glIsProgramARB, NULL, 630),
+ NAME_FUNC_OFFSET(30790, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, 631),
+ NAME_FUNC_OFFSET(30813, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, 632),
+ NAME_FUNC_OFFSET(30837, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, 633),
+ NAME_FUNC_OFFSET(30860, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, 634),
+ NAME_FUNC_OFFSET(30884, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, 640),
+ NAME_FUNC_OFFSET(30901, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, 641),
+ NAME_FUNC_OFFSET(30919, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, 642),
+ NAME_FUNC_OFFSET(30936, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, 643),
+ NAME_FUNC_OFFSET(30954, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, 644),
+ NAME_FUNC_OFFSET(30971, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, 645),
+ NAME_FUNC_OFFSET(30989, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, 646),
+ NAME_FUNC_OFFSET(31006, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, 647),
+ NAME_FUNC_OFFSET(31024, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 658),
+ NAME_FUNC_OFFSET(31049, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 658),
+ NAME_FUNC_OFFSET(31071, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 659),
+ NAME_FUNC_OFFSET(31098, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 659),
+ NAME_FUNC_OFFSET(31122, glBindFramebuffer, glBindFramebuffer, NULL, 660),
+ NAME_FUNC_OFFSET(31143, glBindRenderbuffer, glBindRenderbuffer, NULL, 661),
+ NAME_FUNC_OFFSET(31165, glBlitFramebuffer, glBlitFramebuffer, NULL, 662),
+ NAME_FUNC_OFFSET(31186, glCheckFramebufferStatus, glCheckFramebufferStatus, NULL, 663),
NAME_FUNC_OFFSET(31214, glCheckFramebufferStatus, glCheckFramebufferStatus, NULL, 663),
- NAME_FUNC_OFFSET(31242, glCheckFramebufferStatus, glCheckFramebufferStatus, NULL, 663),
- NAME_FUNC_OFFSET(31270, glDeleteFramebuffers, glDeleteFramebuffers, NULL, 664),
- NAME_FUNC_OFFSET(31294, glDeleteFramebuffers, glDeleteFramebuffers, NULL, 664),
- NAME_FUNC_OFFSET(31318, glDeleteRenderbuffers, glDeleteRenderbuffers, NULL, 665),
- NAME_FUNC_OFFSET(31343, glDeleteRenderbuffers, glDeleteRenderbuffers, NULL, 665),
- NAME_FUNC_OFFSET(31368, glFramebufferRenderbuffer, glFramebufferRenderbuffer, NULL, 666),
- NAME_FUNC_OFFSET(31397, glFramebufferRenderbuffer, glFramebufferRenderbuffer, NULL, 666),
- NAME_FUNC_OFFSET(31426, glFramebufferTexture1D, glFramebufferTexture1D, NULL, 667),
- NAME_FUNC_OFFSET(31452, glFramebufferTexture2D, glFramebufferTexture2D, NULL, 668),
- NAME_FUNC_OFFSET(31478, glFramebufferTexture2D, glFramebufferTexture2D, NULL, 668),
- NAME_FUNC_OFFSET(31504, glFramebufferTexture3D, glFramebufferTexture3D, NULL, 669),
- NAME_FUNC_OFFSET(31530, glFramebufferTexture3D, glFramebufferTexture3D, NULL, 669),
- NAME_FUNC_OFFSET(31556, glFramebufferTextureLayer, glFramebufferTextureLayer, NULL, 670),
- NAME_FUNC_OFFSET(31585, glFramebufferTextureLayer, glFramebufferTextureLayer, NULL, 670),
- NAME_FUNC_OFFSET(31614, glGenFramebuffers, glGenFramebuffers, NULL, 671),
- NAME_FUNC_OFFSET(31635, glGenFramebuffers, glGenFramebuffers, NULL, 671),
- NAME_FUNC_OFFSET(31656, glGenRenderbuffers, glGenRenderbuffers, NULL, 672),
- NAME_FUNC_OFFSET(31678, glGenRenderbuffers, glGenRenderbuffers, NULL, 672),
- NAME_FUNC_OFFSET(31700, glGenerateMipmap, glGenerateMipmap, NULL, 673),
- NAME_FUNC_OFFSET(31720, glGenerateMipmap, glGenerateMipmap, NULL, 673),
- NAME_FUNC_OFFSET(31740, glGetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameteriv, NULL, 674),
- NAME_FUNC_OFFSET(31781, glGetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameteriv, NULL, 674),
- NAME_FUNC_OFFSET(31822, glGetRenderbufferParameteriv, glGetRenderbufferParameteriv, NULL, 675),
- NAME_FUNC_OFFSET(31854, glGetRenderbufferParameteriv, glGetRenderbufferParameteriv, NULL, 675),
- NAME_FUNC_OFFSET(31886, glIsFramebuffer, glIsFramebuffer, NULL, 676),
- NAME_FUNC_OFFSET(31905, glIsFramebuffer, glIsFramebuffer, NULL, 676),
- NAME_FUNC_OFFSET(31924, glIsRenderbuffer, glIsRenderbuffer, NULL, 677),
- NAME_FUNC_OFFSET(31944, glIsRenderbuffer, glIsRenderbuffer, NULL, 677),
- NAME_FUNC_OFFSET(31964, glRenderbufferStorage, glRenderbufferStorage, NULL, 678),
- NAME_FUNC_OFFSET(31989, glRenderbufferStorage, glRenderbufferStorage, NULL, 678),
- NAME_FUNC_OFFSET(32014, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 679),
- NAME_FUNC_OFFSET(32050, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 681),
- NAME_FUNC_OFFSET(32078, glMapBufferRange, glMapBufferRange, NULL, 682),
- NAME_FUNC_OFFSET(32098, glBindVertexArray, glBindVertexArray, NULL, 683),
- NAME_FUNC_OFFSET(32119, glDeleteVertexArrays, glDeleteVertexArrays, NULL, 684),
- NAME_FUNC_OFFSET(32145, glDeleteVertexArrays, glDeleteVertexArrays, NULL, 684),
- NAME_FUNC_OFFSET(32169, glGenVertexArrays, glGenVertexArrays, NULL, 685),
- NAME_FUNC_OFFSET(32190, glIsVertexArray, glIsVertexArray, NULL, 686),
- NAME_FUNC_OFFSET(32211, glIsVertexArray, glIsVertexArray, NULL, 686),
- NAME_FUNC_OFFSET(32230, glProvokingVertex, glProvokingVertex, NULL, 706),
- NAME_FUNC_OFFSET(32251, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 711),
- NAME_FUNC_OFFSET(32285, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 711),
- NAME_FUNC_OFFSET(32310, glBlendEquationiARB, glBlendEquationiARB, NULL, 712),
- NAME_FUNC_OFFSET(32336, glBlendEquationiARB, glBlendEquationiARB, NULL, 712),
- NAME_FUNC_OFFSET(32353, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 713),
- NAME_FUNC_OFFSET(32383, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 713),
- NAME_FUNC_OFFSET(32404, glBlendFunciARB, glBlendFunciARB, NULL, 714),
- NAME_FUNC_OFFSET(32426, glBlendFunciARB, glBlendFunciARB, NULL, 714),
- NAME_FUNC_OFFSET(32439, gl_dispatch_stub_731, gl_dispatch_stub_731, NULL, 731),
- NAME_FUNC_OFFSET(32463, gl_dispatch_stub_732, gl_dispatch_stub_732, NULL, 732),
- NAME_FUNC_OFFSET(32488, glClearDepthf, glClearDepthf, NULL, 803),
- NAME_FUNC_OFFSET(32505, glDepthRangef, glDepthRangef, NULL, 804),
- NAME_FUNC_OFFSET(32522, glGetProgramBinary, glGetProgramBinary, NULL, 808),
- NAME_FUNC_OFFSET(32544, glProgramBinary, glProgramBinary, NULL, 809),
- NAME_FUNC_OFFSET(32563, glProgramParameteri, glProgramParameteri, NULL, 810),
- NAME_FUNC_OFFSET(32586, glProgramParameteri, glProgramParameteri, NULL, 810),
- NAME_FUNC_OFFSET(32609, gl_dispatch_stub_1013, gl_dispatch_stub_1013, NULL, 1013),
- NAME_FUNC_OFFSET(32625, gl_dispatch_stub_1014, gl_dispatch_stub_1014, NULL, 1014),
- NAME_FUNC_OFFSET(32644, gl_dispatch_stub_1022, gl_dispatch_stub_1022, NULL, 1022),
- NAME_FUNC_OFFSET(32669, gl_dispatch_stub_1023, gl_dispatch_stub_1023, NULL, 1023),
- NAME_FUNC_OFFSET(32694, gl_dispatch_stub_1024, gl_dispatch_stub_1024, NULL, 1024),
+ NAME_FUNC_OFFSET(31242, glDeleteFramebuffers, glDeleteFramebuffers, NULL, 664),
+ NAME_FUNC_OFFSET(31266, glDeleteFramebuffers, glDeleteFramebuffers, NULL, 664),
+ NAME_FUNC_OFFSET(31290, glDeleteRenderbuffers, glDeleteRenderbuffers, NULL, 665),
+ NAME_FUNC_OFFSET(31315, glDeleteRenderbuffers, glDeleteRenderbuffers, NULL, 665),
+ NAME_FUNC_OFFSET(31340, glFramebufferRenderbuffer, glFramebufferRenderbuffer, NULL, 666),
+ NAME_FUNC_OFFSET(31369, glFramebufferRenderbuffer, glFramebufferRenderbuffer, NULL, 666),
+ NAME_FUNC_OFFSET(31398, glFramebufferTexture1D, glFramebufferTexture1D, NULL, 667),
+ NAME_FUNC_OFFSET(31424, glFramebufferTexture2D, glFramebufferTexture2D, NULL, 668),
+ NAME_FUNC_OFFSET(31450, glFramebufferTexture2D, glFramebufferTexture2D, NULL, 668),
+ NAME_FUNC_OFFSET(31476, glFramebufferTexture3D, glFramebufferTexture3D, NULL, 669),
+ NAME_FUNC_OFFSET(31502, glFramebufferTexture3D, glFramebufferTexture3D, NULL, 669),
+ NAME_FUNC_OFFSET(31528, glFramebufferTextureLayer, glFramebufferTextureLayer, NULL, 670),
+ NAME_FUNC_OFFSET(31557, glFramebufferTextureLayer, glFramebufferTextureLayer, NULL, 670),
+ NAME_FUNC_OFFSET(31586, glGenFramebuffers, glGenFramebuffers, NULL, 671),
+ NAME_FUNC_OFFSET(31607, glGenFramebuffers, glGenFramebuffers, NULL, 671),
+ NAME_FUNC_OFFSET(31628, glGenRenderbuffers, glGenRenderbuffers, NULL, 672),
+ NAME_FUNC_OFFSET(31650, glGenRenderbuffers, glGenRenderbuffers, NULL, 672),
+ NAME_FUNC_OFFSET(31672, glGenerateMipmap, glGenerateMipmap, NULL, 673),
+ NAME_FUNC_OFFSET(31692, glGenerateMipmap, glGenerateMipmap, NULL, 673),
+ NAME_FUNC_OFFSET(31712, glGetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameteriv, NULL, 674),
+ NAME_FUNC_OFFSET(31753, glGetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameteriv, NULL, 674),
+ NAME_FUNC_OFFSET(31794, glGetRenderbufferParameteriv, glGetRenderbufferParameteriv, NULL, 675),
+ NAME_FUNC_OFFSET(31826, glGetRenderbufferParameteriv, glGetRenderbufferParameteriv, NULL, 675),
+ NAME_FUNC_OFFSET(31858, glIsFramebuffer, glIsFramebuffer, NULL, 676),
+ NAME_FUNC_OFFSET(31877, glIsFramebuffer, glIsFramebuffer, NULL, 676),
+ NAME_FUNC_OFFSET(31896, glIsRenderbuffer, glIsRenderbuffer, NULL, 677),
+ NAME_FUNC_OFFSET(31916, glIsRenderbuffer, glIsRenderbuffer, NULL, 677),
+ NAME_FUNC_OFFSET(31936, glRenderbufferStorage, glRenderbufferStorage, NULL, 678),
+ NAME_FUNC_OFFSET(31961, glRenderbufferStorage, glRenderbufferStorage, NULL, 678),
+ NAME_FUNC_OFFSET(31986, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 679),
+ NAME_FUNC_OFFSET(32022, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 680),
+ NAME_FUNC_OFFSET(32050, glMapBufferRange, glMapBufferRange, NULL, 681),
+ NAME_FUNC_OFFSET(32070, glBindVertexArray, glBindVertexArray, NULL, 682),
+ NAME_FUNC_OFFSET(32091, glDeleteVertexArrays, glDeleteVertexArrays, NULL, 683),
+ NAME_FUNC_OFFSET(32117, glDeleteVertexArrays, glDeleteVertexArrays, NULL, 683),
+ NAME_FUNC_OFFSET(32141, glGenVertexArrays, glGenVertexArrays, NULL, 684),
+ NAME_FUNC_OFFSET(32162, glIsVertexArray, glIsVertexArray, NULL, 685),
+ NAME_FUNC_OFFSET(32183, glIsVertexArray, glIsVertexArray, NULL, 685),
+ NAME_FUNC_OFFSET(32202, glProvokingVertex, glProvokingVertex, NULL, 705),
+ NAME_FUNC_OFFSET(32223, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 710),
+ NAME_FUNC_OFFSET(32257, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 710),
+ NAME_FUNC_OFFSET(32282, glBlendEquationiARB, glBlendEquationiARB, NULL, 711),
+ NAME_FUNC_OFFSET(32308, glBlendEquationiARB, glBlendEquationiARB, NULL, 711),
+ NAME_FUNC_OFFSET(32325, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 712),
+ NAME_FUNC_OFFSET(32355, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 712),
+ NAME_FUNC_OFFSET(32376, glBlendFunciARB, glBlendFunciARB, NULL, 713),
+ NAME_FUNC_OFFSET(32398, glBlendFunciARB, glBlendFunciARB, NULL, 713),
+ NAME_FUNC_OFFSET(32411, gl_dispatch_stub_730, gl_dispatch_stub_730, NULL, 730),
+ NAME_FUNC_OFFSET(32435, gl_dispatch_stub_731, gl_dispatch_stub_731, NULL, 731),
+ NAME_FUNC_OFFSET(32460, glClearDepthf, glClearDepthf, NULL, 802),
+ NAME_FUNC_OFFSET(32477, glDepthRangef, glDepthRangef, NULL, 803),
+ NAME_FUNC_OFFSET(32494, glGetProgramBinary, glGetProgramBinary, NULL, 807),
+ NAME_FUNC_OFFSET(32516, glProgramBinary, glProgramBinary, NULL, 808),
+ NAME_FUNC_OFFSET(32535, glProgramParameteri, glProgramParameteri, NULL, 809),
+ NAME_FUNC_OFFSET(32558, glProgramParameteri, glProgramParameteri, NULL, 809),
+ NAME_FUNC_OFFSET(32581, gl_dispatch_stub_1012, gl_dispatch_stub_1012, NULL, 1012),
+ NAME_FUNC_OFFSET(32597, gl_dispatch_stub_1013, gl_dispatch_stub_1013, NULL, 1013),
+ NAME_FUNC_OFFSET(32616, gl_dispatch_stub_1021, gl_dispatch_stub_1021, NULL, 1021),
+ NAME_FUNC_OFFSET(32641, gl_dispatch_stub_1022, gl_dispatch_stub_1022, NULL, 1022),
+ NAME_FUNC_OFFSET(32666, gl_dispatch_stub_1023, gl_dispatch_stub_1023, NULL, 1023),
+ NAME_FUNC_OFFSET(32692, gl_dispatch_stub_1024, gl_dispatch_stub_1024, NULL, 1024),
NAME_FUNC_OFFSET(32720, gl_dispatch_stub_1025, gl_dispatch_stub_1025, NULL, 1025),
- NAME_FUNC_OFFSET(32748, gl_dispatch_stub_1026, gl_dispatch_stub_1026, NULL, 1026),
- NAME_FUNC_OFFSET(32773, gl_dispatch_stub_1027, gl_dispatch_stub_1027, NULL, 1027),
- NAME_FUNC_OFFSET(32804, gl_dispatch_stub_1028, gl_dispatch_stub_1028, NULL, 1028),
- NAME_FUNC_OFFSET(32830, gl_dispatch_stub_1029, gl_dispatch_stub_1029, NULL, 1029),
- NAME_FUNC_OFFSET(32853, gl_dispatch_stub_1033, gl_dispatch_stub_1033, NULL, 1033),
- NAME_FUNC_OFFSET(32875, gl_dispatch_stub_1034, gl_dispatch_stub_1034, NULL, 1034),
- NAME_FUNC_OFFSET(32898, gl_dispatch_stub_1035, gl_dispatch_stub_1035, NULL, 1035),
- NAME_FUNC_OFFSET(32920, gl_dispatch_stub_1036, gl_dispatch_stub_1036, NULL, 1036),
- NAME_FUNC_OFFSET(32943, gl_dispatch_stub_1037, gl_dispatch_stub_1037, NULL, 1037),
- NAME_FUNC_OFFSET(32966, gl_dispatch_stub_1038, gl_dispatch_stub_1038, NULL, 1038),
- NAME_FUNC_OFFSET(32990, gl_dispatch_stub_1041, gl_dispatch_stub_1041, NULL, 1041),
- NAME_FUNC_OFFSET(33012, gl_dispatch_stub_1042, gl_dispatch_stub_1042, NULL, 1042),
- NAME_FUNC_OFFSET(33035, gl_dispatch_stub_1043, gl_dispatch_stub_1043, NULL, 1043),
- NAME_FUNC_OFFSET(33057, gl_dispatch_stub_1044, gl_dispatch_stub_1044, NULL, 1044),
- NAME_FUNC_OFFSET(33080, gl_dispatch_stub_1045, gl_dispatch_stub_1045, NULL, 1045),
- NAME_FUNC_OFFSET(33103, gl_dispatch_stub_1046, gl_dispatch_stub_1046, NULL, 1046),
- NAME_FUNC_OFFSET(33127, gl_dispatch_stub_1049, gl_dispatch_stub_1049, NULL, 1049),
- NAME_FUNC_OFFSET(33149, gl_dispatch_stub_1050, gl_dispatch_stub_1050, NULL, 1050),
- NAME_FUNC_OFFSET(33172, gl_dispatch_stub_1051, gl_dispatch_stub_1051, NULL, 1051),
- NAME_FUNC_OFFSET(33194, gl_dispatch_stub_1052, gl_dispatch_stub_1052, NULL, 1052),
- NAME_FUNC_OFFSET(33217, gl_dispatch_stub_1053, gl_dispatch_stub_1053, NULL, 1053),
- NAME_FUNC_OFFSET(33240, gl_dispatch_stub_1054, gl_dispatch_stub_1054, NULL, 1054),
- NAME_FUNC_OFFSET(33264, gl_dispatch_stub_1057, gl_dispatch_stub_1057, NULL, 1057),
- NAME_FUNC_OFFSET(33286, gl_dispatch_stub_1058, gl_dispatch_stub_1058, NULL, 1058),
- NAME_FUNC_OFFSET(33309, gl_dispatch_stub_1059, gl_dispatch_stub_1059, NULL, 1059),
- NAME_FUNC_OFFSET(33331, gl_dispatch_stub_1060, gl_dispatch_stub_1060, NULL, 1060),
- NAME_FUNC_OFFSET(33354, gl_dispatch_stub_1061, gl_dispatch_stub_1061, NULL, 1061),
- NAME_FUNC_OFFSET(33377, gl_dispatch_stub_1062, gl_dispatch_stub_1062, NULL, 1062),
- NAME_FUNC_OFFSET(33401, gl_dispatch_stub_1064, gl_dispatch_stub_1064, NULL, 1064),
- NAME_FUNC_OFFSET(33430, gl_dispatch_stub_1066, gl_dispatch_stub_1066, NULL, 1066),
- NAME_FUNC_OFFSET(33461, gl_dispatch_stub_1068, gl_dispatch_stub_1068, NULL, 1068),
- NAME_FUNC_OFFSET(33492, gl_dispatch_stub_1070, gl_dispatch_stub_1070, NULL, 1070),
- NAME_FUNC_OFFSET(33521, gl_dispatch_stub_1072, gl_dispatch_stub_1072, NULL, 1072),
- NAME_FUNC_OFFSET(33552, gl_dispatch_stub_1074, gl_dispatch_stub_1074, NULL, 1074),
- NAME_FUNC_OFFSET(33583, gl_dispatch_stub_1076, gl_dispatch_stub_1076, NULL, 1076),
- NAME_FUNC_OFFSET(33612, gl_dispatch_stub_1078, gl_dispatch_stub_1078, NULL, 1078),
- NAME_FUNC_OFFSET(33643, gl_dispatch_stub_1080, gl_dispatch_stub_1080, NULL, 1080),
- NAME_FUNC_OFFSET(33674, gl_dispatch_stub_1082, gl_dispatch_stub_1082, NULL, 1082),
- NAME_FUNC_OFFSET(33696, gl_dispatch_stub_1083, gl_dispatch_stub_1083, NULL, 1083),
- NAME_FUNC_OFFSET(33725, glDebugMessageCallback, glDebugMessageCallback, NULL, 1084),
- NAME_FUNC_OFFSET(33751, glDebugMessageControl, glDebugMessageControl, NULL, 1085),
- NAME_FUNC_OFFSET(33776, glDebugMessageInsert, glDebugMessageInsert, NULL, 1086),
- NAME_FUNC_OFFSET(33800, glGetDebugMessageLog, glGetDebugMessageLog, NULL, 1087),
- NAME_FUNC_OFFSET(33824, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 1094),
- NAME_FUNC_OFFSET(33843, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 1095),
- NAME_FUNC_OFFSET(33863, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 1096),
- NAME_FUNC_OFFSET(33883, glFogCoordfEXT, glFogCoordfEXT, NULL, 1097),
- NAME_FUNC_OFFSET(33895, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 1098),
- NAME_FUNC_OFFSET(33908, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 1201),
- NAME_FUNC_OFFSET(33926, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 1202),
- NAME_FUNC_OFFSET(33945, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 1203),
- NAME_FUNC_OFFSET(33963, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 1204),
- NAME_FUNC_OFFSET(33982, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 1205),
- NAME_FUNC_OFFSET(34001, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 1206),
- NAME_FUNC_OFFSET(34021, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 1207),
- NAME_FUNC_OFFSET(34039, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 1208),
- NAME_FUNC_OFFSET(34058, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 1209),
- NAME_FUNC_OFFSET(34077, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 1210),
- NAME_FUNC_OFFSET(34097, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 1211),
- NAME_FUNC_OFFSET(34115, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 1212),
- NAME_FUNC_OFFSET(34134, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 1213),
- NAME_FUNC_OFFSET(34153, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 1214),
- NAME_FUNC_OFFSET(34173, glTextureBarrierNV, glTextureBarrierNV, NULL, 1235),
- NAME_FUNC_OFFSET(34190, glAlphaFuncx, glAlphaFuncx, NULL, 1262),
- NAME_FUNC_OFFSET(34206, glClearColorx, glClearColorx, NULL, 1263),
- NAME_FUNC_OFFSET(34223, glClearDepthx, glClearDepthx, NULL, 1264),
- NAME_FUNC_OFFSET(34240, glColor4x, glColor4x, NULL, 1265),
- NAME_FUNC_OFFSET(34253, glDepthRangex, glDepthRangex, NULL, 1266),
- NAME_FUNC_OFFSET(34270, glFogx, glFogx, NULL, 1267),
- NAME_FUNC_OFFSET(34280, glFogxv, glFogxv, NULL, 1268),
- NAME_FUNC_OFFSET(34291, glFrustumf, glFrustumf, NULL, 1269),
- NAME_FUNC_OFFSET(34305, glFrustumx, glFrustumx, NULL, 1270),
- NAME_FUNC_OFFSET(34319, glLightModelx, glLightModelx, NULL, 1271),
- NAME_FUNC_OFFSET(34336, glLightModelxv, glLightModelxv, NULL, 1272),
- NAME_FUNC_OFFSET(34354, glLightx, glLightx, NULL, 1273),
- NAME_FUNC_OFFSET(34366, glLightxv, glLightxv, NULL, 1274),
- NAME_FUNC_OFFSET(34379, glLineWidthx, glLineWidthx, NULL, 1275),
- NAME_FUNC_OFFSET(34395, glLoadMatrixx, glLoadMatrixx, NULL, 1276),
- NAME_FUNC_OFFSET(34412, glMaterialx, glMaterialx, NULL, 1277),
- NAME_FUNC_OFFSET(34427, glMaterialxv, glMaterialxv, NULL, 1278),
- NAME_FUNC_OFFSET(34443, glMultMatrixx, glMultMatrixx, NULL, 1279),
- NAME_FUNC_OFFSET(34460, glMultiTexCoord4x, glMultiTexCoord4x, NULL, 1280),
- NAME_FUNC_OFFSET(34481, glNormal3x, glNormal3x, NULL, 1281),
- NAME_FUNC_OFFSET(34495, glOrthof, glOrthof, NULL, 1282),
- NAME_FUNC_OFFSET(34507, glOrthox, glOrthox, NULL, 1283),
- NAME_FUNC_OFFSET(34519, glPointSizex, glPointSizex, NULL, 1284),
- NAME_FUNC_OFFSET(34535, glPolygonOffsetx, glPolygonOffsetx, NULL, 1285),
- NAME_FUNC_OFFSET(34555, glRotatex, glRotatex, NULL, 1286),
- NAME_FUNC_OFFSET(34568, glSampleCoveragex, glSampleCoveragex, NULL, 1287),
- NAME_FUNC_OFFSET(34589, glScalex, glScalex, NULL, 1288),
- NAME_FUNC_OFFSET(34601, glTexEnvx, glTexEnvx, NULL, 1289),
- NAME_FUNC_OFFSET(34614, glTexEnvxv, glTexEnvxv, NULL, 1290),
- NAME_FUNC_OFFSET(34628, glTexParameterx, glTexParameterx, NULL, 1291),
- NAME_FUNC_OFFSET(34647, glTranslatex, glTranslatex, NULL, 1292),
- NAME_FUNC_OFFSET(34663, glClipPlanef, glClipPlanef, NULL, 1293),
- NAME_FUNC_OFFSET(34679, glClipPlanex, glClipPlanex, NULL, 1294),
- NAME_FUNC_OFFSET(34695, glGetClipPlanef, glGetClipPlanef, NULL, 1295),
- NAME_FUNC_OFFSET(34714, glGetClipPlanex, glGetClipPlanex, NULL, 1296),
- NAME_FUNC_OFFSET(34733, glGetFixedv, glGetFixedv, NULL, 1297),
- NAME_FUNC_OFFSET(34748, glGetLightxv, glGetLightxv, NULL, 1298),
- NAME_FUNC_OFFSET(34764, glGetMaterialxv, glGetMaterialxv, NULL, 1299),
- NAME_FUNC_OFFSET(34783, glGetTexEnvxv, glGetTexEnvxv, NULL, 1300),
- NAME_FUNC_OFFSET(34800, glGetTexParameterxv, glGetTexParameterxv, NULL, 1301),
- NAME_FUNC_OFFSET(34823, glPointParameterx, glPointParameterx, NULL, 1302),
- NAME_FUNC_OFFSET(34844, glPointParameterxv, glPointParameterxv, NULL, 1303),
- NAME_FUNC_OFFSET(34866, glTexParameterxv, glTexParameterxv, NULL, 1304),
+ NAME_FUNC_OFFSET(32745, gl_dispatch_stub_1026, gl_dispatch_stub_1026, NULL, 1026),
+ NAME_FUNC_OFFSET(32776, gl_dispatch_stub_1027, gl_dispatch_stub_1027, NULL, 1027),
+ NAME_FUNC_OFFSET(32802, gl_dispatch_stub_1028, gl_dispatch_stub_1028, NULL, 1028),
+ NAME_FUNC_OFFSET(32825, gl_dispatch_stub_1032, gl_dispatch_stub_1032, NULL, 1032),
+ NAME_FUNC_OFFSET(32847, gl_dispatch_stub_1033, gl_dispatch_stub_1033, NULL, 1033),
+ NAME_FUNC_OFFSET(32870, gl_dispatch_stub_1034, gl_dispatch_stub_1034, NULL, 1034),
+ NAME_FUNC_OFFSET(32892, gl_dispatch_stub_1035, gl_dispatch_stub_1035, NULL, 1035),
+ NAME_FUNC_OFFSET(32915, gl_dispatch_stub_1036, gl_dispatch_stub_1036, NULL, 1036),
+ NAME_FUNC_OFFSET(32938, gl_dispatch_stub_1037, gl_dispatch_stub_1037, NULL, 1037),
+ NAME_FUNC_OFFSET(32962, gl_dispatch_stub_1040, gl_dispatch_stub_1040, NULL, 1040),
+ NAME_FUNC_OFFSET(32984, gl_dispatch_stub_1041, gl_dispatch_stub_1041, NULL, 1041),
+ NAME_FUNC_OFFSET(33007, gl_dispatch_stub_1042, gl_dispatch_stub_1042, NULL, 1042),
+ NAME_FUNC_OFFSET(33029, gl_dispatch_stub_1043, gl_dispatch_stub_1043, NULL, 1043),
+ NAME_FUNC_OFFSET(33052, gl_dispatch_stub_1044, gl_dispatch_stub_1044, NULL, 1044),
+ NAME_FUNC_OFFSET(33075, gl_dispatch_stub_1045, gl_dispatch_stub_1045, NULL, 1045),
+ NAME_FUNC_OFFSET(33099, gl_dispatch_stub_1048, gl_dispatch_stub_1048, NULL, 1048),
+ NAME_FUNC_OFFSET(33121, gl_dispatch_stub_1049, gl_dispatch_stub_1049, NULL, 1049),
+ NAME_FUNC_OFFSET(33144, gl_dispatch_stub_1050, gl_dispatch_stub_1050, NULL, 1050),
+ NAME_FUNC_OFFSET(33166, gl_dispatch_stub_1051, gl_dispatch_stub_1051, NULL, 1051),
+ NAME_FUNC_OFFSET(33189, gl_dispatch_stub_1052, gl_dispatch_stub_1052, NULL, 1052),
+ NAME_FUNC_OFFSET(33212, gl_dispatch_stub_1053, gl_dispatch_stub_1053, NULL, 1053),
+ NAME_FUNC_OFFSET(33236, gl_dispatch_stub_1056, gl_dispatch_stub_1056, NULL, 1056),
+ NAME_FUNC_OFFSET(33258, gl_dispatch_stub_1057, gl_dispatch_stub_1057, NULL, 1057),
+ NAME_FUNC_OFFSET(33281, gl_dispatch_stub_1058, gl_dispatch_stub_1058, NULL, 1058),
+ NAME_FUNC_OFFSET(33303, gl_dispatch_stub_1059, gl_dispatch_stub_1059, NULL, 1059),
+ NAME_FUNC_OFFSET(33326, gl_dispatch_stub_1060, gl_dispatch_stub_1060, NULL, 1060),
+ NAME_FUNC_OFFSET(33349, gl_dispatch_stub_1061, gl_dispatch_stub_1061, NULL, 1061),
+ NAME_FUNC_OFFSET(33373, gl_dispatch_stub_1063, gl_dispatch_stub_1063, NULL, 1063),
+ NAME_FUNC_OFFSET(33402, gl_dispatch_stub_1065, gl_dispatch_stub_1065, NULL, 1065),
+ NAME_FUNC_OFFSET(33433, gl_dispatch_stub_1067, gl_dispatch_stub_1067, NULL, 1067),
+ NAME_FUNC_OFFSET(33464, gl_dispatch_stub_1069, gl_dispatch_stub_1069, NULL, 1069),
+ NAME_FUNC_OFFSET(33493, gl_dispatch_stub_1071, gl_dispatch_stub_1071, NULL, 1071),
+ NAME_FUNC_OFFSET(33524, gl_dispatch_stub_1073, gl_dispatch_stub_1073, NULL, 1073),
+ NAME_FUNC_OFFSET(33555, gl_dispatch_stub_1075, gl_dispatch_stub_1075, NULL, 1075),
+ NAME_FUNC_OFFSET(33584, gl_dispatch_stub_1077, gl_dispatch_stub_1077, NULL, 1077),
+ NAME_FUNC_OFFSET(33615, gl_dispatch_stub_1079, gl_dispatch_stub_1079, NULL, 1079),
+ NAME_FUNC_OFFSET(33646, gl_dispatch_stub_1081, gl_dispatch_stub_1081, NULL, 1081),
+ NAME_FUNC_OFFSET(33668, gl_dispatch_stub_1082, gl_dispatch_stub_1082, NULL, 1082),
+ NAME_FUNC_OFFSET(33697, glDebugMessageCallback, glDebugMessageCallback, NULL, 1083),
+ NAME_FUNC_OFFSET(33723, glDebugMessageControl, glDebugMessageControl, NULL, 1084),
+ NAME_FUNC_OFFSET(33748, glDebugMessageInsert, glDebugMessageInsert, NULL, 1085),
+ NAME_FUNC_OFFSET(33772, glGetDebugMessageLog, glGetDebugMessageLog, NULL, 1086),
+ NAME_FUNC_OFFSET(33796, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 1093),
+ NAME_FUNC_OFFSET(33815, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 1094),
+ NAME_FUNC_OFFSET(33835, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 1095),
+ NAME_FUNC_OFFSET(33855, glFogCoordfEXT, glFogCoordfEXT, NULL, 1096),
+ NAME_FUNC_OFFSET(33867, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 1097),
+ NAME_FUNC_OFFSET(33880, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 1200),
+ NAME_FUNC_OFFSET(33898, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 1201),
+ NAME_FUNC_OFFSET(33917, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 1202),
+ NAME_FUNC_OFFSET(33935, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 1203),
+ NAME_FUNC_OFFSET(33954, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 1204),
+ NAME_FUNC_OFFSET(33973, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 1205),
+ NAME_FUNC_OFFSET(33993, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 1206),
+ NAME_FUNC_OFFSET(34011, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 1207),
+ NAME_FUNC_OFFSET(34030, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 1208),
+ NAME_FUNC_OFFSET(34049, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 1209),
+ NAME_FUNC_OFFSET(34069, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 1210),
+ NAME_FUNC_OFFSET(34087, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 1211),
+ NAME_FUNC_OFFSET(34106, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 1212),
+ NAME_FUNC_OFFSET(34125, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 1213),
+ NAME_FUNC_OFFSET(34145, glTextureBarrierNV, glTextureBarrierNV, NULL, 1234),
+ NAME_FUNC_OFFSET(34162, glAlphaFuncx, glAlphaFuncx, NULL, 1261),
+ NAME_FUNC_OFFSET(34178, glClearColorx, glClearColorx, NULL, 1262),
+ NAME_FUNC_OFFSET(34195, glClearDepthx, glClearDepthx, NULL, 1263),
+ NAME_FUNC_OFFSET(34212, glColor4x, glColor4x, NULL, 1264),
+ NAME_FUNC_OFFSET(34225, glDepthRangex, glDepthRangex, NULL, 1265),
+ NAME_FUNC_OFFSET(34242, glFogx, glFogx, NULL, 1266),
+ NAME_FUNC_OFFSET(34252, glFogxv, glFogxv, NULL, 1267),
+ NAME_FUNC_OFFSET(34263, glFrustumf, glFrustumf, NULL, 1268),
+ NAME_FUNC_OFFSET(34277, glFrustumx, glFrustumx, NULL, 1269),
+ NAME_FUNC_OFFSET(34291, glLightModelx, glLightModelx, NULL, 1270),
+ NAME_FUNC_OFFSET(34308, glLightModelxv, glLightModelxv, NULL, 1271),
+ NAME_FUNC_OFFSET(34326, glLightx, glLightx, NULL, 1272),
+ NAME_FUNC_OFFSET(34338, glLightxv, glLightxv, NULL, 1273),
+ NAME_FUNC_OFFSET(34351, glLineWidthx, glLineWidthx, NULL, 1274),
+ NAME_FUNC_OFFSET(34367, glLoadMatrixx, glLoadMatrixx, NULL, 1275),
+ NAME_FUNC_OFFSET(34384, glMaterialx, glMaterialx, NULL, 1276),
+ NAME_FUNC_OFFSET(34399, glMaterialxv, glMaterialxv, NULL, 1277),
+ NAME_FUNC_OFFSET(34415, glMultMatrixx, glMultMatrixx, NULL, 1278),
+ NAME_FUNC_OFFSET(34432, glMultiTexCoord4x, glMultiTexCoord4x, NULL, 1279),
+ NAME_FUNC_OFFSET(34453, glNormal3x, glNormal3x, NULL, 1280),
+ NAME_FUNC_OFFSET(34467, glOrthof, glOrthof, NULL, 1281),
+ NAME_FUNC_OFFSET(34479, glOrthox, glOrthox, NULL, 1282),
+ NAME_FUNC_OFFSET(34491, glPointSizex, glPointSizex, NULL, 1283),
+ NAME_FUNC_OFFSET(34507, glPolygonOffsetx, glPolygonOffsetx, NULL, 1284),
+ NAME_FUNC_OFFSET(34527, glRotatex, glRotatex, NULL, 1285),
+ NAME_FUNC_OFFSET(34540, glSampleCoveragex, glSampleCoveragex, NULL, 1286),
+ NAME_FUNC_OFFSET(34561, glScalex, glScalex, NULL, 1287),
+ NAME_FUNC_OFFSET(34573, glTexEnvx, glTexEnvx, NULL, 1288),
+ NAME_FUNC_OFFSET(34586, glTexEnvxv, glTexEnvxv, NULL, 1289),
+ NAME_FUNC_OFFSET(34600, glTexParameterx, glTexParameterx, NULL, 1290),
+ NAME_FUNC_OFFSET(34619, glTranslatex, glTranslatex, NULL, 1291),
+ NAME_FUNC_OFFSET(34635, glClipPlanef, glClipPlanef, NULL, 1292),
+ NAME_FUNC_OFFSET(34651, glClipPlanex, glClipPlanex, NULL, 1293),
+ NAME_FUNC_OFFSET(34667, glGetClipPlanef, glGetClipPlanef, NULL, 1294),
+ NAME_FUNC_OFFSET(34686, glGetClipPlanex, glGetClipPlanex, NULL, 1295),
+ NAME_FUNC_OFFSET(34705, glGetFixedv, glGetFixedv, NULL, 1296),
+ NAME_FUNC_OFFSET(34720, glGetLightxv, glGetLightxv, NULL, 1297),
+ NAME_FUNC_OFFSET(34736, glGetMaterialxv, glGetMaterialxv, NULL, 1298),
+ NAME_FUNC_OFFSET(34755, glGetTexEnvxv, glGetTexEnvxv, NULL, 1299),
+ NAME_FUNC_OFFSET(34772, glGetTexParameterxv, glGetTexParameterxv, NULL, 1300),
+ NAME_FUNC_OFFSET(34795, glPointParameterx, glPointParameterx, NULL, 1301),
+ NAME_FUNC_OFFSET(34816, glPointParameterxv, glPointParameterxv, NULL, 1302),
+ NAME_FUNC_OFFSET(34838, glTexParameterxv, glTexParameterxv, NULL, 1303),
NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)
};
diff --git a/xorg-server/glx/remap_helper.h b/xorg-server/glx/remap_helper.h
index 57eeeaf8e..a9102c3cb 100644
--- a/xorg-server/glx/remap_helper.h
+++ b/xorg-server/glx/remap_helper.h
@@ -2845,7 +2845,7 @@ static const char _mesa_function_pool[] =
"glSampleMaskSGIS\0"
"glSampleMaskEXT\0"
"\0"
- /* _mesa_function_pool[21047]: FramebufferTextureFaceARB (will be remapped) */
+ /* _mesa_function_pool[21047]: FramebufferTextureFaceARB (dynamic) */
"iiiii\0"
"glFramebufferTextureFaceARB\0"
"\0"
@@ -6974,7 +6974,6 @@ static const struct gl_function_pool_remap MESA_remap_table_functions[] = {
{ 28219, IsRenderbuffer_remap_index },
{ 669, RenderbufferStorage_remap_index },
{ 16529, RenderbufferStorageMultisample_remap_index },
- { 21047, FramebufferTextureFaceARB_remap_index },
{ 5802, FlushMappedBufferRange_remap_index },
{ 34313, MapBufferRange_remap_index },
{ 14518, BindVertexArray_remap_index },
diff --git a/xorg-server/hw/xfree86/common/xf86Module.h b/xorg-server/hw/xfree86/common/xf86Module.h
index 25a8869b0..66c2bb5a9 100644
--- a/xorg-server/hw/xfree86/common/xf86Module.h
+++ b/xorg-server/hw/xfree86/common/xf86Module.h
@@ -81,7 +81,7 @@ typedef enum {
*/
#define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4)
#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(19, 0)
-#define ABI_XINPUT_VERSION SET_ABI_VERSION(22, 0)
+#define ABI_XINPUT_VERSION SET_ABI_VERSION(22, 1)
#define ABI_EXTENSION_VERSION SET_ABI_VERSION(9, 0)
#define ABI_FONT_VERSION SET_ABI_VERSION(0, 6)
diff --git a/xorg-server/hw/xfree86/common/xf86Xinput.c b/xorg-server/hw/xfree86/common/xf86Xinput.c
index 55bf2bbe4..a5b056881 100644
--- a/xorg-server/hw/xfree86/common/xf86Xinput.c
+++ b/xorg-server/hw/xfree86/common/xf86Xinput.c
@@ -1138,12 +1138,16 @@ xf86CheckMotionEvent4DGA(DeviceIntPtr device, int is_absolute,
dx = valuator_mask_get(mask, 0);
if (is_absolute)
dx -= device->last.valuators[0];
+ else if (valuator_mask_has_unaccelerated(mask))
+ dx = valuator_mask_get_unaccelerated(mask, 0);
}
if (valuator_mask_isset(mask, 1)) {
dy = valuator_mask_get(mask, 1);
if (is_absolute)
dy -= device->last.valuators[1];
+ else if (valuator_mask_has_unaccelerated(mask))
+ dy = valuator_mask_get_unaccelerated(mask, 1);
}
if (DGAStealMotionEvent(device, idx, dx, dy))
diff --git a/xorg-server/hw/xfree86/os-support/linux/lnx_init.c b/xorg-server/hw/xfree86/os-support/linux/lnx_init.c
index 94853070d..a0e6782b0 100644
--- a/xorg-server/hw/xfree86/os-support/linux/lnx_init.c
+++ b/xorg-server/hw/xfree86/os-support/linux/lnx_init.c
@@ -190,18 +190,6 @@ xf86OpenConsole(void)
else
activeVT = vts.v_active;
-#if 0
- if (!KeepTty) {
- /*
- * Detach from the controlling tty to avoid char loss
- */
- if ((i = open("/dev/tty", O_RDWR)) >= 0) {
- SYSCALL(ioctl(i, TIOCNOTTY, 0));
- close(i);
- }
- }
-#endif
-
if (!xf86Info.ShareVTs) {
struct termios nTty;
diff --git a/xorg-server/hw/xwayland/xwayland-cursor.c b/xorg-server/hw/xwayland/xwayland-cursor.c
index 5a9d1fe70..c137e1ec0 100644
--- a/xorg-server/hw/xwayland/xwayland-cursor.c
+++ b/xorg-server/hw/xwayland/xwayland-cursor.c
@@ -82,6 +82,23 @@ xwl_unrealize_cursor(DeviceIntPtr device, ScreenPtr screen, CursorPtr cursor)
return xwl_shm_destroy_pixmap(pixmap);
}
+static void
+frame_callback(void *data,
+ struct wl_callback *callback,
+ uint32_t time)
+{
+ struct xwl_seat *xwl_seat = data;
+ xwl_seat->cursor_frame_cb = NULL;
+ if (xwl_seat->cursor_needs_update) {
+ xwl_seat->cursor_needs_update = FALSE;
+ xwl_seat_set_cursor(xwl_seat);
+ }
+}
+
+static const struct wl_callback_listener frame_listener = {
+ frame_callback
+};
+
void
xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
{
@@ -98,6 +115,11 @@ xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
return;
}
+ if (xwl_seat->cursor_frame_cb) {
+ xwl_seat->cursor_needs_update = TRUE;
+ return;
+ }
+
cursor = xwl_seat->x_cursor;
pixmap = dixGetPrivate(&cursor->devPrivates, &xwl_cursor_private_key);
stride = cursor->bits->width * 4;
@@ -117,6 +139,10 @@ xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
wl_surface_damage(xwl_seat->cursor, 0, 0,
xwl_seat->x_cursor->bits->width,
xwl_seat->x_cursor->bits->height);
+
+ xwl_seat->cursor_frame_cb = wl_surface_frame(xwl_seat->cursor);
+ wl_callback_add_listener(xwl_seat->cursor_frame_cb, &frame_listener, xwl_seat);
+
wl_surface_commit(xwl_seat->cursor);
}
diff --git a/xorg-server/hw/xwayland/xwayland-input.c b/xorg-server/hw/xwayland/xwayland-input.c
index 78d9702ac..a6fbab5bb 100644
--- a/xorg-server/hw/xwayland/xwayland-input.c
+++ b/xorg-server/hw/xwayland/xwayland-input.c
@@ -563,6 +563,8 @@ xwl_seat_destroy(struct xwl_seat *xwl_seat)
RemoveDevice(xwl_seat->keyboard, FALSE);
wl_seat_destroy(xwl_seat->seat);
wl_surface_destroy(xwl_seat->cursor);
+ if (xwl_seat->cursor_frame_cb)
+ wl_callback_destroy(xwl_seat->cursor_frame_cb);
wl_array_release(&xwl_seat->keys);
free(xwl_seat);
}
diff --git a/xorg-server/hw/xwayland/xwayland.c b/xorg-server/hw/xwayland/xwayland.c
index 7e8d667d6..bc92beb38 100644
--- a/xorg-server/hw/xwayland/xwayland.c
+++ b/xorg-server/hw/xwayland/xwayland.c
@@ -483,7 +483,7 @@ listen_on_fds(struct xwl_screen *xwl_screen)
int i;
for (i = 0; i < xwl_screen->listen_fd_count; i++)
- ListenOnOpenFD(xwl_screen->listen_fds[i], TRUE);
+ ListenOnOpenFD(xwl_screen->listen_fds[i], FALSE);
}
static void
@@ -702,4 +702,6 @@ InitOutput(ScreenInfo * screen_info, int argc, char **argv)
if (AddScreen(xwl_screen_init, argc, argv) == -1) {
FatalError("Couldn't add screen\n");
}
+
+ LocalAccessScopeUser();
}
diff --git a/xorg-server/hw/xwayland/xwayland.h b/xorg-server/hw/xwayland/xwayland.h
index cfb343d36..28b0c995e 100644
--- a/xorg-server/hw/xwayland/xwayland.h
+++ b/xorg-server/hw/xwayland/xwayland.h
@@ -115,12 +115,14 @@ struct xwl_seat {
struct wl_pointer *wl_pointer;
struct wl_keyboard *wl_keyboard;
struct wl_array keys;
- struct wl_surface *cursor;
struct xwl_window *focus_window;
uint32_t id;
uint32_t pointer_enter_serial;
struct xorg_list link;
CursorPtr x_cursor;
+ struct wl_surface *cursor;
+ struct wl_callback *cursor_frame_cb;
+ Bool cursor_needs_update;
size_t keymap_size;
char *keymap;
diff --git a/xorg-server/include/input.h b/xorg-server/include/input.h
index ceb665aa8..8f72835c7 100755
--- a/xorg-server/include/input.h
+++ b/xorg-server/include/input.h
@@ -673,6 +673,21 @@ extern _X_EXPORT Bool valuator_mask_fetch(const ValuatorMask *mask,
extern _X_EXPORT Bool valuator_mask_fetch_double(const ValuatorMask *mask,
int valnum, double *val);
+extern _X_EXPORT Bool valuator_mask_has_unaccelerated(const ValuatorMask *mask);
+extern _X_EXPORT void valuator_mask_set_unaccelerated(ValuatorMask *mask,
+ int valuator,
+ double accel,
+ double unaccel);
+extern _X_EXPORT double valuator_mask_get_accelerated(const ValuatorMask *mask,
+ int valuator);
+extern _X_EXPORT double valuator_mask_get_unaccelerated(const ValuatorMask *mask,
+ int valuator);
+extern _X_EXPORT Bool valuator_mask_fetch_unaccelerated(const ValuatorMask *mask,
+ int valuator,
+ double *accel,
+ double *unaccel);
+extern _X_HIDDEN void valuator_mask_drop_unaccelerated(ValuatorMask *mask);
+
/* InputOption handling interface */
extern _X_EXPORT InputOption *input_option_new(InputOption *list,
const char *key,
diff --git a/xorg-server/include/inpututils.h b/xorg-server/include/inpututils.h
index 53c96ba1c..4e9081563 100644
--- a/xorg-server/include/inpututils.h
+++ b/xorg-server/include/inpututils.h
@@ -36,8 +36,10 @@ extern Mask event_filters[MAXDEVICES][MAXEVENTS];
struct _ValuatorMask {
int8_t last_bit; /* highest bit set in mask */
+ int8_t has_unaccelerated;
uint8_t mask[(MAX_VALUATORS + 7) / 8];
double valuators[MAX_VALUATORS]; /* valuator data */
+ double unaccelerated[MAX_VALUATORS]; /* valuator data */
};
extern void verify_internal_event(const InternalEvent *ev);
diff --git a/xorg-server/include/os.h b/xorg-server/include/os.h
index ede9707e8..c696be5ce 100755
--- a/xorg-server/include/os.h
+++ b/xorg-server/include/os.h
@@ -433,11 +433,28 @@ extern _X_EXPORT void
ResetHosts(const char *display);
extern _X_EXPORT void
+EnableLocalAccess(void);
+
+extern _X_EXPORT void
+DisableLocalAccess(void);
+
+extern _X_EXPORT void
EnableLocalHost(void);
extern _X_EXPORT void
DisableLocalHost(void);
+#ifndef NO_LOCAL_CLIENT_CRED
+extern _X_EXPORT void
+EnableLocalUser(void);
+
+extern _X_EXPORT void
+DisableLocalUser(void);
+
+extern _X_EXPORT void
+LocalAccessScopeUser(void);
+#endif
+
extern _X_EXPORT void
AccessUsingXdmcp(void);
diff --git a/xorg-server/os/access.c b/xorg-server/os/access.c
index 23eb404ed..0b49ef703 100644
--- a/xorg-server/os/access.c
+++ b/xorg-server/os/access.c
@@ -102,6 +102,10 @@ SOFTWARE.
#include <sys/ioctl.h>
#include <ctype.h>
+#ifndef NO_LOCAL_CLIENT_CRED
+#include <pwd.h>
+#endif
+
#if defined(TCPCONN) || defined(STREAMSCONN)
#include <netinet/in.h>
#endif /* TCPCONN || STREAMSCONN */
@@ -229,6 +233,13 @@ static int ActiveInterfaces = 0;
void match_interface(u_long u_lQuery);
+static enum {
+ LOCAL_ACCESS_SCOPE_HOST = 0,
+#ifndef NO_LOCAL_CLIENT_CRED
+ LOCAL_ACCESS_SCOPE_USER,
+#endif
+} LocalAccessScope;
+
/* FamilyServerInterpreted implementation */
static Bool siAddrMatch(int family, void *addr, int len, HOST * host,
ClientPtr client);
@@ -319,6 +330,21 @@ int inet_pton(int af, const char *src, void *dst)
*/
void
+EnableLocalAccess(void)
+{
+ switch (LocalAccessScope) {
+ case LOCAL_ACCESS_SCOPE_HOST:
+ EnableLocalHost();
+ break;
+#ifndef NO_LOCAL_CLIENT_CRED
+ case LOCAL_ACCESS_SCOPE_USER:
+ EnableLocalUser();
+ break;
+#endif
+ }
+}
+
+void
EnableLocalHost(void)
{
if (!UsingXdmcp) {
@@ -331,6 +357,21 @@ EnableLocalHost(void)
* called when authorization is enabled to keep us secure
*/
void
+DisableLocalAccess(void)
+{
+ switch (LocalAccessScope) {
+ case LOCAL_ACCESS_SCOPE_HOST:
+ DisableLocalHost();
+ break;
+#ifndef NO_LOCAL_CLIENT_CRED
+ case LOCAL_ACCESS_SCOPE_USER:
+ DisableLocalUser();
+ break;
+#endif
+ }
+}
+
+void
DisableLocalHost(void)
{
HOST *self;
@@ -344,6 +385,74 @@ DisableLocalHost(void)
}
}
+#ifndef NO_LOCAL_CLIENT_CRED
+static int GetLocalUserAddr(char **addr)
+{
+ static const char *type = "localuser";
+ static const char delimiter = '\0';
+ static const char *value;
+ struct passwd *pw;
+ int length = -1;
+
+ pw = getpwuid(getuid());
+
+ if (pw == NULL || pw->pw_name == NULL)
+ goto out;
+
+ value = pw->pw_name;
+
+ length = asprintf(addr, "%s%c%s", type, delimiter, value);
+
+ if (length == -1) {
+ goto out;
+ }
+
+ /* Trailing NUL */
+ length++;
+
+out:
+ return length;
+}
+
+void
+EnableLocalUser(void)
+{
+ char *addr = NULL;
+ int length = -1;
+
+ length = GetLocalUserAddr(&addr);
+
+ if (length == -1)
+ return;
+
+ NewHost(FamilyServerInterpreted, addr, length, TRUE);
+
+ free(addr);
+}
+
+void
+DisableLocalUser(void)
+{
+ char *addr = NULL;
+ int length = -1;
+
+ length = GetLocalUserAddr(&addr);
+
+ if (length == -1)
+ return;
+
+ RemoveHost(NULL, FamilyServerInterpreted, length, addr);
+
+ free(addr);
+}
+
+void
+LocalAccessScopeUser(void)
+{
+ LocalAccessScope = LOCAL_ACCESS_SCOPE_USER;
+}
+#endif
+
/*
* called at init time when XDMCP will be used; xdmcp always
* adds local hosts manually when needed
diff --git a/xorg-server/os/auth.c b/xorg-server/os/auth.c
index df05a5717..b5ae2540c 100644
--- a/xorg-server/os/auth.c
+++ b/xorg-server/os/auth.c
@@ -181,11 +181,11 @@ CheckAuthorization(unsigned int name_length,
/*
* If the authorization file has at least one entry for this server,
- * disable local host access. (loadauth > 0)
+ * disable local access. (loadauth > 0)
*
* If there are zero entries (either initially or when the
* authorization file is later reloaded), or if a valid
- * authorization file was never loaded, enable local host access.
+ * authorization file was never loaded, enable local access.
* (loadauth == 0 || !loaded)
*
* If the authorization file was loaded initially (with valid
@@ -194,11 +194,11 @@ CheckAuthorization(unsigned int name_length,
*/
if (loadauth > 0) {
- DisableLocalHost(); /* got at least one */
+ DisableLocalAccess(); /* got at least one */
loaded = TRUE;
}
else if (loadauth == 0 || !loaded)
- EnableLocalHost();
+ EnableLocalAccess();
}
if (name_length) {
for (i = 0; i < NUM_AUTHORIZATION; i++) {
diff --git a/xorg-server/os/backtrace.c b/xorg-server/os/backtrace.c
index 3d1195b86..fd129ef21 100644
--- a/xorg-server/os/backtrace.c
+++ b/xorg-server/os/backtrace.c
@@ -87,7 +87,7 @@ xorg_backtrace(void)
procname[1] = 0;
}
- if (dladdr((void *)(pip.start_ip + off), &dlinfo) && dlinfo.dli_fname &&
+ if (dladdr((void *)(uintptr_t)(pip.start_ip + off), &dlinfo) && dlinfo.dli_fname &&
*dlinfo.dli_fname)
filename = dlinfo.dli_fname;
else
@@ -95,7 +95,7 @@ xorg_backtrace(void)
ErrorFSigSafe("%u: %s (%s%s+0x%x) [%p]\n", i++, filename, procname,
ret == -UNW_ENOMEM ? "..." : "", (int)off,
- (void *)(pip.start_ip + off));
+ (void *)(uintptr_t)(pip.start_ip + off));
ret = unw_step(&cursor);
if (ret < 0)
diff --git a/xorg-server/os/makefile b/xorg-server/os/makefile
index ba7720a25..b129301e9 100644
--- a/xorg-server/os/makefile
+++ b/xorg-server/os/makefile
@@ -3,6 +3,7 @@ LIBRARY=libos
ifeq ($(DEBUG),1)
DEFINES += XSERVER_DTRACE
endif
+DEFINES += NO_LOCAL_CLIENT_CRED
SECURE_RPC=1
XDMCP=1
NEED_STRLCAT=1
diff --git a/xorg-server/present/present.c b/xorg-server/present/present.c
index b1bb3d160..76d7e003d 100644
--- a/xorg-server/present/present.c
+++ b/xorg-server/present/present.c
@@ -409,20 +409,20 @@ static void
present_unflip(ScreenPtr screen)
{
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
+ PixmapPtr pixmap = (*screen->GetScreenPixmap)(screen);
assert (!screen_priv->unflip_event_id);
assert (!screen_priv->flip_pending);
if (screen_priv->flip_window)
- present_set_tree_pixmap(screen_priv->flip_window,
- (*screen->GetScreenPixmap)(screen));
+ present_set_tree_pixmap(screen_priv->flip_window, pixmap);
- present_set_tree_pixmap(screen->root, (*screen->GetScreenPixmap)(screen));
+ present_set_tree_pixmap(screen->root, pixmap);
/* Update the screen pixmap with the current flip pixmap contents
*/
if (screen_priv->flip_pixmap && screen_priv->flip_window) {
- present_copy_region(&screen_priv->flip_window->drawable,
+ present_copy_region(&pixmap->drawable,
screen_priv->flip_pixmap,
NULL, 0, 0);
}
diff --git a/xorg-server/test/input.c b/xorg-server/test/input.c
index a4615c9c9..91ee43c46 100644
--- a/xorg-server/test/input.c
+++ b/xorg-server/test/input.c
@@ -1358,6 +1358,68 @@ dix_valuator_mode(void)
}
static void
+dix_input_valuator_masks_unaccel(void)
+{
+ ValuatorMask *mask = NULL;
+ double x, ux;
+
+ /* set mask normally */
+ mask = valuator_mask_new(MAX_VALUATORS);
+ assert(!valuator_mask_has_unaccelerated(mask));
+ valuator_mask_set_double(mask, 0, 1.0);
+ assert(!valuator_mask_has_unaccelerated(mask));
+ valuator_mask_unset(mask, 0);
+ assert(!valuator_mask_has_unaccelerated(mask));
+
+ /* all unset, now set accel mask */
+ valuator_mask_set_unaccelerated(mask, 0, 1.0, 2.0);
+ assert(valuator_mask_has_unaccelerated(mask));
+ assert(valuator_mask_isset(mask, 0));
+ assert(!valuator_mask_isset(mask, 1));
+ assert(valuator_mask_get_accelerated(mask, 0) == 1.0);
+ assert(valuator_mask_get_unaccelerated(mask, 0) == 2.0);
+ assert(valuator_mask_fetch_unaccelerated(mask, 0, &x, &ux));
+ assert(x == 1.0);
+ assert(ux == 2.0);
+ x = 0xff;
+ ux = 0xfe;
+ assert(!valuator_mask_fetch_unaccelerated(mask, 1, &x, &ux));
+ assert(x == 0xff);
+ assert(ux == 0xfe);
+
+ /* all unset, now set normally again */
+ valuator_mask_unset(mask, 0);
+ assert(!valuator_mask_has_unaccelerated(mask));
+ assert(!valuator_mask_isset(mask, 0));
+ valuator_mask_set_double(mask, 0, 1.0);
+ assert(!valuator_mask_has_unaccelerated(mask));
+ valuator_mask_unset(mask, 0);
+ assert(!valuator_mask_has_unaccelerated(mask));
+
+ valuator_mask_zero(mask);
+ assert(!valuator_mask_has_unaccelerated(mask));
+
+ valuator_mask_set_unaccelerated(mask, 0, 1.0, 2.0);
+ valuator_mask_set_unaccelerated(mask, 1, 3.0, 4.5);
+ assert(valuator_mask_isset(mask, 0));
+ assert(valuator_mask_isset(mask, 1));
+ assert(!valuator_mask_isset(mask, 2));
+ assert(valuator_mask_has_unaccelerated(mask));
+ assert(valuator_mask_get_accelerated(mask, 0) == 1.0);
+ assert(valuator_mask_get_accelerated(mask, 1) == 3.0);
+ assert(valuator_mask_get_unaccelerated(mask, 0) == 2.0);
+ assert(valuator_mask_get_unaccelerated(mask, 1) == 4.5);
+ assert(valuator_mask_fetch_unaccelerated(mask, 0, &x, &ux));
+ assert(x == 1.0);
+ assert(ux == 2.0);
+ assert(valuator_mask_fetch_unaccelerated(mask, 1, &x, &ux));
+ assert(x == 3.0);
+ assert(ux == 4.5);
+
+ valuator_mask_free(&mask);
+}
+
+static void
include_bit_test_macros(void)
{
uint8_t mask[9] = { 0 };
@@ -1847,6 +1909,7 @@ main(int argc, char **argv)
dix_enqueue_events();
dix_double_fp_conversion();
dix_input_valuator_masks();
+ dix_input_valuator_masks_unaccel();
dix_input_attributes();
dix_init_valuators();
dix_event_to_core_conversion();
diff --git a/xorg-server/xkeyboard-config/NEWS b/xorg-server/xkeyboard-config/NEWS
index cef7453d2..0919ab1d0 100644
--- a/xorg-server/xkeyboard-config/NEWS
+++ b/xorg-server/xkeyboard-config/NEWS
@@ -1,3 +1,5 @@
+2.15 7 bugs fixed
+ Translations updated
2.14 9 bugs fixed
Translations updated
2.13 7 bugs fixed
diff --git a/xorg-server/xkeyboard-config/configure.ac b/xorg-server/xkeyboard-config/configure.ac
index 28ac1703f..4315e5c31 100644
--- a/xorg-server/xkeyboard-config/configure.ac
+++ b/xorg-server/xkeyboard-config/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT(xkeyboard-config, 2.14)
+AC_INIT(xkeyboard-config, 2.15)
AC_CONFIG_SRCDIR(rules/base.xml.in)
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
diff --git a/xorg-server/xkeyboard-config/po/ca.po b/xorg-server/xkeyboard-config/po/ca.po
index af91f987e..6efb4af85 100644
--- a/xorg-server/xkeyboard-config/po/ca.po
+++ b/xorg-server/xkeyboard-config/po/ca.po
@@ -5,17 +5,17 @@
# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.13.99\n"
+"Project-Id-Version: xkeyboard-config-2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-17 19:26+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-14 22:45+0200\n"
"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ../rules/base.xml.in.h:1
@@ -921,3088 +921,3100 @@ msgstr "Àrab (qwerty/dígits)"
msgid "Arabic (Buckwalter)"
msgstr "Àrab (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Àrab (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albanès"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albanès (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armeni"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armeni (fonètic)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armeni (fonètic alternatiu)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armeni (oriental)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armeni (occidental)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armeni (oriental alternatiu)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Alemany (Àustria)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Alemany (Àustria, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Alemany (Àustria, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Alemany (Àustria, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Àzeri"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Àzeri (ciríl·lic)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Bielorús"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Bielorús (antic)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Bielorús (llatí)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belga"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belga (alternatiu)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belga (alternatiu, només llatí-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belga (alternatiu, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belga (alternatiu ISO)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belga (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belga (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belga (Wang model 724 azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengalí"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengalí (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indi"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengalí (Índia)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengalí (Índia, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengalí (Índia, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengalí (Índia, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengalí (Índia, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengalí (Índia, Inscript Baishakhi)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Panjabi (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Panjabi (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (fonètic KaGaPa)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malaiàlam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malaiàlam (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malaiàlam (Inscript realçat, amb el signe de rupia)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tàmil (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tàmil (teclat amb nombres)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tàmil (tipus d'escriptura TAB)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tàmil (tipus d'escriptura TSCII)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tàmil"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (fonètic KaGaPa)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdú (fonètic)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdú (fonètic alternatiu)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdú (tecles Win)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (fonètic KaGaPa)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sànscrit (fonètic KaGaPa)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (fonètic KaGaPa)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Anglès (Índia, amb signe de rupia)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnià"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnià (amb cometes angulars per les cometes)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnià (amb dígrafs bosnians)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnià (teclat EUA amb dígrafs bosnians)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnià (teclat EUA amb lletres bosnianes)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portuguès (Brasil)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portuguès (Brasil, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portuguès (Brasil, dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portuguès (Brasil, natiu)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portuguès (Brasil, natiu per als teclats EUA)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (Portugal, natiu)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Búlgar"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Búlgar (fonètic tradicional)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Búlgar (fonètic nou)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Àrab (Marroc)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Francès (Marroc)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berber (Marroc, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berber (Marroc, Tifinagh alternatiu)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berber (Marroc, Tifinagh fonètic alternatiu)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berber (Marroc, Tifinagh ampliat)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berber (Marroc, Tifinagh fonètic)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berber (Marroc, Tifinagh fonètic ampliat)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Anglès (Camerun)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Francès (Camerun)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Camerun multilingüe (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Camerun multilingüe (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Camerun multilingüe (dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Birmà"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Francès (Canadà)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Francès (Canadà, dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Francès (Canadà, antic)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Canadenc multilingüe"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Canadenc multilingüe (primera part)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Canadenc multilingüe (segona part)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Anglès (Canadà)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Francès (República Democràtica del Congo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Xinès"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetà"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetà (amb nombres ASCII)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Uigur"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Croat"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Croat (amb cometes angulars per les cometes)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Croat (amb dígrafs croats)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Croat (teclat EUA amb dígrafs croats)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Croat (teclat EUA amb lletres croates)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Txec"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Txec (amb la tecla &lt;\\|&gt;)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Txec (qwerty)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Txec (qwerty, barra inversa ampliada)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Txec (disposició UCW, només lletres accentuades)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Txec (dvorak EUA que permet UCW CZ)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Danès"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Danès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Danès (tecles Win)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Danès (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Danès (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Danès (dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Holandès"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Holandès (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Holandès (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Holandès (estàndard)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estonià"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estonià (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estonià (dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estonià (teclat EUA amb lletres estonianes)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persa"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persa (amb teclat persa)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurd (Iran, llatí Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurd (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurd (Iran, llatí Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurd (Iran, àrab-llatí)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Iraquià"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurd (Iraq, llatí Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurd (Iraq, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurd (Iraq, llatí Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurd (Iraq, àrab-llatí)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Feroès"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Feroès (elimina les tecles mortes)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finès"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finès (clàssic)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finès (clàssic, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finès (tecles Win)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Sami Nord (Finlàndia)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finès (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Francès"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Francès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Francès (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Francès (alternatiu)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Francès (alternatiu, només llatí-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Francès (alternatiu, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Francès (alternatiu, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Francès (antic, alternatiu)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Francès (antic, alternatiu, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Francès (antic, alternatiu, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Francès (Bepo, ergonòmic, tipus dvorak)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Francès (Bepo, ergonòmic, tipus dvorak, només llatí-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Francès (dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Francès (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Francès (Bretó)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occità"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Georgià (França, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Anglès (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Anglès (Ghana, multilingüe)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Haussa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Anglès (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Francès (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Georgià"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgià (ergonòmic)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgià (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Rus (Geòrgia)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Osset (Geòrgia)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Alemany"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Alemany (accent mort)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Alemany (accent greu mort)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Alemany (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Alemany (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Romanès (Alemanya)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Romanès (Alemanya, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Alemany (dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Alemany (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Alemany (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Alemany (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Alemany (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Baix sòrab"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Baix sòrab (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Alemany (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turc (Alemanya)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Rus (alemany, fonètic)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Alemany (antic)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Grec"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Grec (senzill)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Grec (ampliat)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Grec (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Grec (politònic)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Hongarès"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Hongarès (estàndard)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Hongarès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Hongarès (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Hongarès (101/qwertz/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Hongarès (101/qwertz/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Hongarès (101/qwertz/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Hongarès (101/qwertz/punt/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Hongarès (101/qwerty/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Hongarès (101/qwerty/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Hongarès (101/qwerty/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Hongarès (101/qwerty/punt/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Hongarès (102/qwertz/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Hongarès (102/qwertz/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Hongarès (102/qwertz/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Hongarès (102/qwertz/punt/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Hongarès (102/qwerty/coma/tecles mortes)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Hongarès (102/qwerty/coma/elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Hongarès (102/qwerty/punt/tecles mortes)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Hongarès (102/qwerty/punt/elimina les tecles mortes)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandès"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandès (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandès (Macintosh, antic)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandès (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandès (dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebreu"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebreu (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebreu (fonètic)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebreu (bíblic, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italià"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italià (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italià (tecles Win)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italià (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italià (teclat EUA amb lletres italianes)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgià (Itàlia)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italià (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japonès"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japonès (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japonès (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japonès (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japonès (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japonès (dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirguís"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirguís (fonètic)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Cambotja)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazakh"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Rus (Kazakhstan amb Kazakh)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazakh (amb rus)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Laosià"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Laosià (disposició estàndard proposada per STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Espanyol (llatinoamericà)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Espanyol (llatinoamericà, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Espanyol (llatinoamericà, inclou la titlla morta)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Espanyol (llatinoamericà, tecles mortes de Sun)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Espanyol (llatinoamericà, dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Lituà"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Lituà (estàndard)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Lituà (teclat EUA amb lletres lituanes)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Lituà (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Lituà (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Lituà (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Letó"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Letó (variant amb apòstrof)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Letó (variant titlla)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Letó (variant F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Letó (modern)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Letó (ergonòmic, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Letó (adaptat)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrí"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrí (ciríl·lic)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrí (ciríl·lic, ZE i ZHE intercanviades)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrí (llatí Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrí (llatí qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrí (llatí Unicode qwerty)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrí (ciríl·lic amb cometes angulars)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrí (llatí amb cometes angulars)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Macedoni"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedoni (elimina les tecles mortes)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltès"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltès (amb disposició EUA)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongol"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Noruec"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Noruec (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Noruec (tecles Win)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Noruec (dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Sami Nord (Noruega)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Sami Nord (Noruega, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Noruec (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Noruec (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Noruec (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polonès"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polonès (antic)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polonès (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polonès (dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polonès (dvorak, cometes poloneses a la tecla cometes)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polonès (dvorak, cometes poloneses a la tecla 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Caixubi"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Silesià"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Rus (Polònia, fonètic dvorak)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polonès (dvorak de programador)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portuguès"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portuguès (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portuguès (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portuguès (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portuguès (Macintosh, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portuguès (Macintosh, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portuguès (natiu)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portuguès (natiu per als teclats EUA)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, natiu)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Romanès"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Romanès (ce trencada)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Romanès (estàndard)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Romanès (ce trencada estàndard)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Romanès (tecles Win)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Rus"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Rus (fonètic)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Rus (fonètic tecles Win)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Rus (màquina d'escriure)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Rus (antic)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Rus (màquina d'escriure, antic)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tàtar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Osset (antic)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Osset (tecles Win)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Chuvash"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Chuvash (llatí)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurt"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Iacut"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Calmuc"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Rus (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Rus (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbi (Rússia)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Baixkir"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Rus (fonètic azerty)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Rus (fonètic francès)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbi"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbi (ciríl·lic, ZE i ZHE intercanviades)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbi (llatí)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbi (llatí Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbi (llatí qwerty)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbi (llatí Unicode qwerty)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbi (ciríl·lic amb cometes angulars)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbi (llatí amb cometes angulars)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Rutè Pannònic"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Eslovè"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Eslovè (amb cometes angulars per les cometes)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Eslovè (teclat EUA amb lletres eslovenes)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Eslovac"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Eslovac (barra inversa ampliada)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Eslovac (qwerty)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Eslovac (qwerty, barra inversa ampliada)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Espanyol"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Espanyol (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Espanyol (tecles Win)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Espanyol (inclou la titlla morta)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Espanyol (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Espanyol (dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturià (Espanya, amb H punt baix i L amb punt baix)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Català (Espanya, L amb punt volat)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Espanyol (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Suec"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Suec (elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Suec (dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Rus (Suècia, fonètic)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Rus (Suècia, fonètic, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Sami del nord (Suècia)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Suec (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Suec (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Idioma de signes suec"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Alemany (Suïssa)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Alemany (Suïssa, antic)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Alemany (Suïssa, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Alemany (Suïssa, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Francès (Suïssa)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francès (Suïssa, elimina les tecles mortes)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francès (Suïssa, tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Francès (Suïssa, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Alemany (Suïssa, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Àrab (Síria)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Siri"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Siríac (fonètic)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurd (Síria, llatí Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurd (Síria, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurd (Síria, llatí Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadjik"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadjik (antic)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Singalès (fonètic)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tàmil (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tàmil (Sri Lanka, tipus d'escriptura TAB)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Singalès (teclat EUA amb lletres singaleses)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Tai"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Tai (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Tai (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turc"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turc (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turc (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turc (tecles mortes de Sun)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurd (Turquia, llatí Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurd (Turquia, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurd (Turquia, llatí Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turc (internacional amb tecles mortes)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Tàtar de Crimea (Turc Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Tàtar de Crimea (Turc F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Tàtar de Crimea (Turc Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanès"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanès (indígena)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ucraïnès"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ucraïnès (fonètic)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ucraïnès (màquina d'escriure)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ucraïnès (tecles Win)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ucraïnès (antic)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ucraïnès (estàndard RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Rus (Ucraïna, estàndard RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ucraïnès (homofònic)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Anglès (RU)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Anglès (RU, tecles Win ampliades)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Anglès (RU, internacional amb tecles mortes)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Anglès (RU, dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Anglès (RU, dvorak amb puntuació RU)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Anglès (RU, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Anglès (RU, Macintosh internacional)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Anglès (RU, Colemak)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Usbec"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Usbec (llatí)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamita"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Coreà"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Coreà (compatible de 101/104 tecles)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japonès (sèries PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irlandès"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irlandès (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdú (Pakistan)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdú (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdú (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Àrab (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Diveí"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Anglès (Sud-àfrica)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (punt i coma i cometa desplaçats, obsolet)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalès"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Anglès (Nigèria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Ioruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amhàric"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (ma esquerra)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (ma dretà)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turcman"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turcman (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Francès (Mali, alternatiu)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Anglès (Mali, Macintosh EUA)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Anglès (Mali, internacional EUA)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Suahili (Tanzània)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Suahili (Kenya)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipí"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipí (QWERTY Baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipí (Capewell-dvorak llatí)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipí (Capewell-dvorak Baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipí (Capewell-QWERF 2006 llatí)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipí (Capewell-QWERF 2006 Baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipí (Colemak llatí)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipí (Colemak Baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipí (dvorak llatí)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipí (dvorak Baybayin)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldau"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldau (Gagauz)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Canvi a una altra disposició"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Alt dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Alt esquerra (mentre està premuda)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Win esquerra (mentre està premuda)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Win dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Qualsevol tecla Win (mentre estan premudes)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Bloq Maj (mentre està premuda), Alt+Bloq Maj efectua l'acció de Bloq Maj original"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Ctrl dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Alt dreta"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Alt esquerra"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Bloq Majús"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Maj+Bloq Maj"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Bloq Maj (a la primera disposició), Maj+Bloq Maj (a la darrera disposició)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Win esquerra (a la primera disposició), Win/Menú dreta (a la darrera disposició)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ctrl esquerra (a la primera disposició), Ctrl dreta (a la darrera disposició)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Bloq Maj"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Les dues tecles Maj juntes"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Les dues tecles Alt juntes"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Les dues tecles Ctrl juntes"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Maj"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Ctrl esquerra+Maj esquerra"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Ctrl dreta+Maj dreta"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Maj"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Alt esquerra+Maj esquerra"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Espai"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menú"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Win esquerra"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Tecla Win+Espai"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Win dreta"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Maj esquerra"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Maj dreta"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Ctrl esquerra"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Ctrl dreta"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Bloq Despl"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ctrl esquerra+Win esquerra (a la primera disposició), Ctrl dreta+Menú (a la segona disposició)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Tecla per a seleccionar el 3r nivell"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Qualsevol tecla Win"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Qualsevol tecla Alt"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Alt dreta, Maj+Alt dreta és la «Compose»"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "La tecla Alt dreta mai selecciona el 3r nivell"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Retorn en el teclat numèric"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Barra inversa"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Més petit/Més gran&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Bloq Maj selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Barra inversa selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de 3r nivell"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Posició de la tecla Ctrl"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Bloq Majús com a Ctrl"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Ctrl esquerra com a Meta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Intercanvia Ctrl i Bloq Maj"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "A l'esquerra d'«A»"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "A baix esquerra"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Ctrl dreta com a Alt dreta"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menú com a Ctrl dreta"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Alt dreta com a Ctrl dreta"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Intercanvia la tecla Alt esquerra per la tecla Ctrl esquerra"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Intercanvia la tecla Win esquerra per la tecla Ctrl esquerra"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Intercanvia la tecla Win dreta per la tecla Ctrl dreta"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Alt esquerra com a Ctrl, Ctrl esquerra com a Win, Win esquerra com a Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Usa el LED del teclat per a mostrar la disposició alternativa"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Bloq Núm"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Disposició del teclat numèric"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Antic"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Addicions Unicode (fletxes i operadors matemàtics)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Addicions Unicode (fletxes i operadors matemàtics; els operadors matemàtics al nivell per defecte)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Wang 724 antic"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics; els operadors matemàtics en el nivell per defecte)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadecimal"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "Estil ATM/telèfon"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Comportament de la tecla de supressió del teclat numèric"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Tecla antiga amb punt"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Tecla antiga amb coma"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Tecla de quatre nivells amb punt"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Tecla de quatre nivells amb punt, només llatí-9"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Tecla de quatre nivells amb coma"
# Què collons és momayyez? jm
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Tecla de quatre nivells amb momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Tecla de quatre nivells amb separadors abstractes"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Punt i coma al tercer nivell"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Comportament de la tecla Bloq Maj"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Bloq Maj usa internament les majúscules; Maj «pausa» Bloq Maj"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Bloq Maj usa internament les majúscules; Maj no afecta a Bloq Maj"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Bloq Maj actua com a Maj amb bloqueig; Maj «pausa» Bloq Maj"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Bloq Maj actua com a Maj amb bloqueig; Maj no afecta a Bloq Maj"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Bloq Maj commuta les majúscules normals dels caràcters alfabètics"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Converteix Bloq Maj en un Bloq Núm addicional"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Intercanvia Esc i Bloq Maj"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Converteix Bloq Maj en un Esc addicional"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Converteix Bloq Maj en un Retrocés addicional"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Converteix Bloq Maj en un Super addicional"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Converteix Bloq Maj en un Hyper addicional"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Bloq Maj commuta Maj (afecta a totes les tecles)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Bloq Maj està deshabilitat"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Converteix Bloq Maj en un Ctrl addicional"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Comportament de la tecla Alt/Win"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Afegeix el comportament estàndard a la tecla Menú"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt i Meta són a les tecles Alt"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt s'assigna a les tecles Win (i a les tecles Alt habituals)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl s'assigna a les tecles Win (i a les tecles Ctrl habituals)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl s'assigna a les tecles Alt, Alt s'assigna a les tecles Win"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta s'assigna a les tecles Win"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta s'assigna a la tecla Win esquerra"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper s'assigna a les tecles Win"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt s'assigna a la tecla Win dreta i Super a Menú"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt està intercanviada amb la tecla Win"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Posició de la tecla «Compose»"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "3r nivell de Win esquerra"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "3r nivell de Win dreta"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "3r nivell de Menú"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "3r nivell de Ctrl esquerra"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "3r nivell de Ctrl dreta"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "3r nivell de Bloq Maj"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "3r nivell de &lt;Més petit/Més gran&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pausa"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "ImprPant"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Opcions de compatibilitat diverses"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Tecles del teclat numèric per defecte"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Les tecles del teclat numèric sempre introdueixen dígits (com en el Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "BloqNúm actiu: dígits, Maj commuta a les tecles de cursor, BloqNúm inactiu: sempre les tecles de cursor (com en el MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Maj no cancel·la Bloq Núm, en el seu lloc selecciona el 3r nivell"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Tecles especials (Ctrl+Alt+&lt;tecla&gt;) gestionades en un servidor"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Teclat Apple Aluminium: emula les tecles del PC (Impr, Bloq Despl, Pausa, Bloq Núm)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Maj cancel·la Bloq Maj"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Habilita els caràcters tipogràfics extres"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Les dues tecles Maj juntes commuten Bloq Maj, una tecla Maj ho desactiva"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Maj + BloqNúm commuta les tecles de cursor"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Permetre trencar la captura amb accions del teclat (avís: risc de seguretat)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Permetre l'enregistrament de captura i de l'arbre de finestres"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "S'afegeix el signe de moneda a certes tecles"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro en la E "
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro en el 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro en el 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro en el 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupia en el 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Tecla per a seleccionar el 5è nivell"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Usa la tecla d'espai per a introduir un caràcter d'espai sense salt"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Espai normal en qualsevol nivell"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell segon"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Caràcter d'espai sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Caràcter d'espai sense salt al nivell quart, i un caràcter d'espai fi sense salt al nivell sisè"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Caràcter d'espai sense salt al nivell quart, un caràcter d'espai fi sense salt al nivell sisè (via Ctrl+Maj)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Caràcter separador d'amplada zero al nivell segon"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer, i un caràcter d'espai sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Caràcter separador d'amplada zero al nivell segon, i un caràcter d'espai sense salt al nivell tercer"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un enllaç d'amplada zero al nivell quart"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Caràcter separador d'amplada zero al nivell tercer, un enllaç d'amplada zero al nivell quart"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Opcions del teclat japonès"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "La tecla de bloqueig Kana està blocant"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Retrocés estil NICOLA-F"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Converteix Zenkaku Hankaku en un Esc addicional"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Coreà tecles Hangul/Hanja"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Tecles Hangul/Hanja de maquinari"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Alt dreta com a Hangul, Ctrl dreta com a Hanja"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Ctrl dreta com a Hangul, Alt dreta com a Hanja"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "S'afegeix les lletres amb diacrític l'esperanto"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "A la tecla corresponent en una disposició qwerty"
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "A la tecla corresponent en una disposició dvorak"
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "A la tecla corresponent en una disposició Coleman"
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Manté la compatibilitat de tecles amb els codis de tecla antics de Solaris"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Compatibilitat amb les tecles Sun"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Seqüència de tecles per a matar el servidor X"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Retrocés"
@@ -4342,690 +4354,3 @@ msgstr "EurKEY (teclat de disposició EUA amb lletres europees)"
#: ../rules/base.extras.xml.in.h:152
msgid "Mmuock"
msgstr "Mmuock"
-
-#~ msgid "Shift with numeric keypad keys works as in MS Windows"
-#~ msgstr "Maj amb el teclat numèric funciona com al MS Windows"
-
-#~ msgid "Bengali"
-#~ msgstr "Bengalí"
-
-#~ msgid "Portuguese (Brazil, nativo for Esperanto)"
-#~ msgstr "Portuguès (Brasil, natiu per a l'esperanto)"
-
-#~ msgid "English (layout toggle on multiply/divide key)"
-#~ msgstr "Anglès (commutació de disposició en la tecla de multiplicació/divisió)"
-
-#~ msgid "Key(s) to change layout"
-#~ msgstr "Tecla(es) per a canviar la disposició"
-
-#~ msgid "Numeric keypad layout selection"
-#~ msgstr "Selecció de la disposició del teclat numèric"
-
-#~ msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
-#~ msgstr "Converteix Bloq Maj en un Bloq Núm addicional però manté el «keysym» «Caps_Lock»"
-
-#~ msgid "Compose key position"
-#~ msgstr "Posició de la tecla Compose"
-
-#~ msgid "Toggle PointerKeys with Shift + NumLock."
-#~ msgstr "Commuta les tecles de cursor amb Maj + BloqNum."
-
-#~ msgid ">German (Switzerland)"
-#~ msgstr ">Alemany (Suïssa)"
-
-#~ msgid "ca"
-#~ msgstr "ca"
-
-#~ msgid "Catalan"
-#~ msgstr "Català"
-
-#~ msgid "Serbian (Cyrillic)"
-#~ msgstr "Serbi (ciríl·lic)"
-
-#~ msgid "Gagauz"
-#~ msgstr "Gagaús"
-
-#~ msgid "Hebrew (Biblical SIL)"
-#~ msgstr "Hebreu (bíblic SIL)"
-
-#~ msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
-#~ msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è i activa el bloqueig del nivell 5è en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
-
-#~ msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-#~ msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
-
-#~ msgid "English (Cameroon Dvorak)"
-#~ msgstr "Anglès (dvorak del Camerun)"
-
-#~ msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-#~ msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
-
-#~ msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
-#~ msgstr "Alt dreta selecciona el nivell 5è i activa el bloqueig de nivell 5è en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
-
-#~ msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-#~ msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
-
-#~ msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-#~ msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
-
-#~ msgid "Serbian (Z and ZHE swapped)"
-#~ msgstr "Serbi (Z i ZHE intercanviades)"
-
-#~ msgid "Serbian (with guillemets)"
-#~ msgstr "Serbi (llatí amb cometes angulars)"
-
-#~ msgid "English (Cameroon qwerty)"
-#~ msgstr "Anglès (qwerty del Camerun)"
-
-#~ msgid "French (Cameroon azerty)"
-#~ msgstr "Francès (azerty del Camerun)"
-
-#~ msgid "Right Ctrl is mapped to Menu"
-#~ msgstr "Ctrl dreta s'assigna a Menú"
-
-#~ msgid "Sinhala"
-#~ msgstr "Singalès"
-
-#~ msgid "Afg"
-#~ msgstr "Afg"
-
-#~ msgid "Chinese (Tibetan)"
-#~ msgstr "Xinès (Tibetà)"
-
-#~ msgid "Chinese (Uyghur)"
-#~ msgstr "Xinès (Uigur)"
-
-#~ msgid "Danish (Mac)"
-#~ msgstr "Danès (Mac)"
-
-#~ msgid "Finnish (Mac)"
-#~ msgstr "Finès (Mac)"
-
-#~ msgid "Finnish (northern Saami)"
-#~ msgstr "Finès (Sami del nord)"
-
-#~ msgid "French (Occitan)"
-#~ msgstr "Francès (Occità)"
-
-#~ msgid "GBr"
-#~ msgstr "GBr"
-
-#~ msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
-#~ msgstr "Alemany (teclat romanès amb lletres alemanyes, elimina les tecles mortes)"
-
-#~ msgid "Irish (Ogham)"
-#~ msgstr "Irlandès (Ogham)"
-
-#~ msgid "Italian (Georgian)"
-#~ msgstr "Italià (Georgià)"
-
-#~ msgid "Kurdish (Iran, latin alt-Q)"
-#~ msgstr "Kurd (Iran, llatí Alt-Q)"
-
-#~ msgid "Māori"
-#~ msgstr "Maori"
-
-#~ msgid "Norwegian (Northern Saami"
-#~ msgstr "Noruec (Sami del nord)"
-
-#~ msgid "Philippines - Dvorak (Baybayin)"
-#~ msgstr "Filipines - Dvorak (Baybayin)"
-
-#~ msgid "Portuguese (Nativo for Esperanto)"
-#~ msgstr "Portuguès (natiu per a l'esperanto)"
-
-#~ msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
-#~ msgstr "Romanès (Tàtar de Crimea Dobruca-2 Q)"
-
-#~ msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
-#~ msgstr "Romanès (Tàtar de Crimea Turc Alt-Q)"
-
-#~ msgid "Romanian (Crimean Tatar Turkish F)"
-#~ msgstr "Romanès (Tàtar de Crimea Turc F)"
-
-#~ msgid "Russian (Chuvash)"
-#~ msgstr "Rus (Chuvash)"
-
-#~ msgid "Russian (Kalmyk)"
-#~ msgstr "Rus (Calmuc)"
-
-#~ msgid "Russian (Komi)"
-#~ msgstr "Rus (Komi)"
-
-#~ msgid "Russian (Mari)"
-#~ msgstr "Rus (Mari)"
-
-#~ msgid "Russian (Ossetian, legacy)"
-#~ msgstr "Rus (Osset, antic)"
-
-#~ msgid "Russian (Serbian)"
-#~ msgstr "Rus (Sèrbia)"
-
-#~ msgid "Russian (Tatar)"
-#~ msgstr "Rus (Tàtar)"
-
-#~ msgid "Russian (Udmurt)"
-#~ msgstr "Rus (Udmurt)"
-
-#~ msgid "Russian (Yakut)"
-#~ msgstr "Rus (Iacut)"
-
-#~ msgid "Spanish (Mac)"
-#~ msgstr "Espanyol (Mac)"
-
-#~ msgid "Swedish (northern Saami)"
-#~ msgstr "Suec (Sami del nord)"
-
-#~ msgid "Swiss"
-#~ msgstr "Suís"
-
-#~ msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
-#~ msgstr "Turc (Tàtar de Crimea Turc Alt-Q)"
-
-#~ msgid "Turkish (Crimean Tatar Turkish F)"
-#~ msgstr "Turc (Tàtar de Crimea Turc F)"
-
-#~ msgid "Turkish (Crimean Tatar Turkish Q)"
-#~ msgstr "Turc (Tàtar de Crimea Turc Q)"
-
-#~ msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
-#~ msgstr "Ucraïnès (Tàtar de Crimea Turc Alt-Q)"
-
-#~ msgid "Ukrainian (Crimean Tatar Turkish F)"
-#~ msgstr "Ucraïnès (Tàtar de Crimea Turc F)"
-
-#~ msgid "Ukrainian (Crimean Tatar Turkish Q)"
-#~ msgstr "Ucraïnès (Tàtar de Crimea Turc Q)"
-
-#~ msgid "Ukrainian (standard RSTU on Russian layout)"
-#~ msgstr "Ucraïnès (estàndard RSTU en una disposició russa)"
-
-#~ msgid "irq"
-#~ msgstr "irq"
-
-#~ msgid "srp"
-#~ msgstr "srp"
-
-#~ msgid "twn"
-#~ msgstr "twn"
-
-#~ msgid "APL"
-#~ msgstr "APL"
-
-#~ msgid "Iran"
-#~ msgstr "Iran"
-
-#~ msgid "Lithuania"
-#~ msgstr "Lituània"
-
-#~ msgid "Lithuania - Dvorak"
-#~ msgstr "Lituània - Dvorak"
-
-#~ msgid "Ltu"
-#~ msgstr "Ltu"
-
-#~ msgid "Romania"
-#~ msgstr "Romania"
-
-#~ msgid "Rou"
-#~ msgstr "Rou"
-
-#~ msgid "Rus"
-#~ msgstr "Rus"
-
-#~ msgid "Russia"
-#~ msgstr "Rússia"
-
-#~ msgid "Serbia"
-#~ msgstr "Sèrbia"
-
-#~ msgid "Srb"
-#~ msgstr "Srb"
-
-#~ msgid "USA"
-#~ msgstr "EUA"
-
-#~ msgid "(F)"
-#~ msgstr "(F)"
-
-#~ msgid "Alb"
-#~ msgstr "Alb"
-
-#~ msgid "Alt-Q"
-#~ msgstr "Alt-Q"
-
-#~ msgid "Alternative"
-#~ msgstr "Alternativa"
-
-#~ msgid "Alternative Phonetic"
-#~ msgstr "Fonètic alternativa"
-
-#~ msgid "Alternative international"
-#~ msgstr "Internacional alternativa"
-
-#~ msgid "And"
-#~ msgstr "And"
-
-#~ msgid "Andorra"
-#~ msgstr "Andorra"
-
-#~ msgid "Ara"
-#~ msgstr "Ara"
-
-#~ msgid "Arm"
-#~ msgstr "Arm"
-
-#~ msgid "Aut"
-#~ msgstr "Aut"
-
-#~ msgid "Aze"
-#~ msgstr "Aze"
-
-#~ msgid "Bel"
-#~ msgstr "Bel"
-
-#~ msgid "Bgd"
-#~ msgstr "Bgd"
-
-#~ msgid "Bhutan"
-#~ msgstr "Bhutan"
-
-#~ msgid "Bih"
-#~ msgstr "Bih"
-
-#~ msgid "Blr"
-#~ msgstr "Blr"
-
-#~ msgid "Bosnia and Herzegovina"
-#~ msgstr "Bòsnia i Hercegovina"
-
-#~ msgid "Bra"
-#~ msgstr "Bra"
-
-#~ msgid "Brazil"
-#~ msgstr "Brasil"
-
-#~ msgid "Breton"
-#~ msgstr "Bretó"
-
-#~ msgid "Bwa"
-#~ msgstr "Bwa"
-
-#~ msgid "COD"
-#~ msgstr "COD"
-
-#~ msgid "CRULP"
-#~ msgstr "CRULP"
-
-#~ msgid "Canada"
-#~ msgstr "Canadà"
-
-#~ msgid "Cedilla"
-#~ msgstr "Trencat"
-
-#~ msgid "Chn"
-#~ msgstr "Chn"
-
-#~ msgid "Classic"
-#~ msgstr "Clàssic"
-
-#~ msgid "Colemak"
-#~ msgstr "Colemak"
-
-#~ msgid "Cyrillic"
-#~ msgstr "Ciríl·lic"
-
-#~ msgid "Cze"
-#~ msgstr "Cze"
-
-#~ msgid "DOS"
-#~ msgstr "DOS"
-
-#~ msgid "Dead acute"
-#~ msgstr "Accent mort"
-
-#~ msgid "Denmark"
-#~ msgstr "Dinamarca"
-
-#~ msgid "Dnk"
-#~ msgstr "Dnk"
-
-#~ msgid "Dvorak"
-#~ msgstr "Dvorak"
-
-#~ msgid "Eastern"
-#~ msgstr "Oriental"
-
-#~ msgid "Epo"
-#~ msgstr "Epo"
-
-#~ msgid "Ergonomic"
-#~ msgstr "Ergonòmic"
-
-#~ msgid "Est"
-#~ msgstr "Est"
-
-#~ msgid "Ethiopia"
-#~ msgstr "Etiòpia"
-
-#~ msgid "Extended"
-#~ msgstr "Ampliat"
-
-#~ msgid "Finland"
-#~ msgstr "Finlàndia"
-
-#~ msgid "Fra"
-#~ msgstr "Fra"
-
-#~ msgid "France"
-#~ msgstr "França"
-
-#~ msgid "GILLBT"
-#~ msgstr "GILLBT"
-
-#~ msgid "Georgia"
-#~ msgstr "Geòrgia"
-
-#~ msgid "Ghana"
-#~ msgstr "Ghana"
-
-#~ msgid "Gin"
-#~ msgstr "Gin"
-
-#~ msgid "Grc"
-#~ msgstr "Grc"
-
-#~ msgid "Guinea"
-#~ msgstr "Guinea"
-
-#~ msgid "Homophonic"
-#~ msgstr "Homofònic"
-
-#~ msgid "Hrv"
-#~ msgstr "Hrv"
-
-#~ msgid "Hun"
-#~ msgstr "Hun"
-
-#~ msgid "Ind"
-#~ msgstr "Ind"
-
-#~ msgid "Ireland"
-#~ msgstr "Irlanda"
-
-#~ msgid "Irl"
-#~ msgstr "Irl"
-
-#~ msgid "Irn"
-#~ msgstr "Irn"
-
-#~ msgid "Israel"
-#~ msgstr "Israel"
-
-#~ msgid "Jpn"
-#~ msgstr "Jpn"
-
-#~ msgid "Kana"
-#~ msgstr "Kana"
-
-#~ msgid "Kana 86"
-#~ msgstr "Kana 86"
-
-#~ msgid "Kenya"
-#~ msgstr "Kenya"
-
-#~ msgid "Kgz"
-#~ msgstr "Kgz"
-
-#~ msgid "Khm"
-#~ msgstr "Khm"
-
-#~ msgid "Korea, Republic of"
-#~ msgstr "Corea, República de"
-
-#~ msgid "Ktunaxa"
-#~ msgstr "Kutenai (Ktunaxa)"
-
-#~ msgid "LEKP"
-#~ msgstr "LEKP"
-
-#~ msgid "LEKPa"
-#~ msgstr "LEKPa"
-
-#~ msgid "Laos"
-#~ msgstr "Laos"
-
-#~ msgid "Latin"
-#~ msgstr "Llatí"
-
-#~ msgid "Left hand"
-#~ msgstr "Esquerrà"
-
-#~ msgid "Lva"
-#~ msgstr "Lva"
-
-#~ msgid "MESS"
-#~ msgstr "MESS"
-
-#~ msgid "MNE"
-#~ msgstr "MNE"
-
-#~ msgid "Macintosh (International)"
-#~ msgstr "Macintosh (Internacional)"
-
-#~ msgid "Maldives"
-#~ msgstr "Maldives"
-
-#~ msgid "Mali"
-#~ msgstr "Mali"
-
-#~ msgid "Mao"
-#~ msgstr "Mao"
-
-#~ msgid "Mkd"
-#~ msgstr "Mkd"
-
-#~ msgid "Mli"
-#~ msgstr "Mli"
-
-#~ msgid "Mng"
-#~ msgstr "Mng"
-
-#~ msgid "Myanmar"
-#~ msgstr "Myanmar"
-
-#~ msgid "NLA"
-#~ msgstr "NLA"
-
-#~ msgid "Nativo"
-#~ msgstr "Nativo"
-
-#~ msgid "Neo 2"
-#~ msgstr "Neo 2"
-
-#~ msgid "Netherlands"
-#~ msgstr "Països Baixos"
-
-#~ msgid "Nigeria"
-#~ msgstr "Nigèria"
-
-#~ msgid "Nld"
-#~ msgstr "Nld"
-
-#~ msgid "Nor"
-#~ msgstr "Nor"
-
-#~ msgid "Norway"
-#~ msgstr "Noruega"
-
-#~ msgid "OLPC Dari"
-#~ msgstr "OLPC Dari"
-
-#~ msgid "OLPC Pashto"
-#~ msgstr "OLPC Paixtu"
-
-#~ msgid "OLPC Southern Uzbek"
-#~ msgstr "OLPC Uzbek del sud"
-
-#~ msgid "Ossetian"
-#~ msgstr "Osset"
-
-#~ msgid "Phonetic"
-#~ msgstr "Fonètic"
-
-#~ msgid "Phonetic Winkeys"
-#~ msgstr "Tecles Win fonètiques"
-
-#~ msgid "Pol"
-#~ msgstr "Pol"
-
-#~ msgid "Poland"
-#~ msgstr "Polònia"
-
-#~ msgid "Probhat"
-#~ msgstr "Probhat"
-
-#~ msgid "Prt"
-#~ msgstr "Prt"
-
-#~ msgid "SRB"
-#~ msgstr "SRB"
-
-#~ msgid "Sen"
-#~ msgstr "Sen"
-
-#~ msgid "Senegal"
-#~ msgstr "Senegal"
-
-#~ msgid "Simple"
-#~ msgstr "Senzill"
-
-#~ msgid "Southern Uzbek"
-#~ msgstr "Uzbek del sud"
-
-#~ msgid "Spain"
-#~ msgstr "Espanya"
-
-#~ msgid "Sri Lanka"
-#~ msgstr "Sri Lanka"
-
-#~ msgid "Standard"
-#~ msgstr "Estàndard"
-
-#~ msgid "Svk"
-#~ msgstr "Svk"
-
-#~ msgid "Svn"
-#~ msgstr "Svn"
-
-#~ msgid "Swe"
-#~ msgstr "Swe"
-
-#~ msgid "Syria"
-#~ msgstr "Síria"
-
-#~ msgid "Tha"
-#~ msgstr "Tha"
-
-#~ msgid "Tifinagh"
-#~ msgstr "Tifinagh"
-
-#~ msgid "Tjk"
-#~ msgstr "Tjk"
-
-#~ msgid "Typewriter"
-#~ msgstr "Màquina d'escriure"
-
-#~ msgid "Tza"
-#~ msgstr "Tza"
-
-#~ msgid "Ukr"
-#~ msgstr "Ukr"
-
-#~ msgid "United Kingdom"
-#~ msgstr "Regne Unit"
-
-#~ msgid "Uzb"
-#~ msgstr "Uzb"
-
-#~ msgid "Vnm"
-#~ msgstr "Vnm"
-
-#~ msgid "Western"
-#~ msgstr "Occidental"
-
-#~ msgid "With EuroSign on 5"
-#~ msgstr "Amb el signe de l'euro al 5"
-
-#~ msgid "With guillemets"
-#~ msgstr "Amb cometes angulars"
-
-#~ msgid "Zaf"
-#~ msgstr "Zaf"
-
-#~ msgid "azerty"
-#~ msgstr "azerty"
-
-#~ msgid "digits"
-#~ msgstr "dígits"
-
-#~ msgid "lyx"
-#~ msgstr "lyx"
-
-#~ msgid "qwertz"
-#~ msgstr "qwertz"
-
-#~ msgid "2"
-#~ msgstr "2"
-
-#~ msgid "4"
-#~ msgstr "4"
-
-#~ msgid "5"
-#~ msgstr "5"
-
-#~ msgid "E"
-#~ msgstr "E"
-
-#~ msgid "LAm"
-#~ msgstr "LAm"
-
-#~ msgid "CapsLock"
-#~ msgstr "BloqMaj"
-
-#~ msgid "ScrollLock"
-#~ msgstr "BloqDespl"
-
-#~ msgid "ACPI Standard"
-#~ msgstr "ACPI estàndard"
-
-#~ msgid "DRC"
-#~ msgstr "DRC"
-
-#~ msgid "Dvorak international"
-#~ msgstr "Dvorak internacional"
-
-#~ msgid "Evdev-managed keyboard"
-#~ msgstr "Teclat gestionat per «evdev»"
-
-#~ msgid "Gre"
-#~ msgstr "Gre"
-
-#~ msgid "Gui"
-#~ msgstr "Gui"
-
-#~ msgid "Lav"
-#~ msgstr "Lav"
-
-#~ msgid "Nep"
-#~ msgstr "Nep"
-
-#~ msgid "SrL"
-#~ msgstr "SrL"
-
-#~ msgid "Baltic+"
-#~ msgstr "Baltic+"
-
-#~ msgid "IBM ThinkPad 560Z/600/600E/A22E, Intl"
-#~ msgstr "IBM ThinkPad 560Z/600/600E/A22E, Intl"
diff --git a/xorg-server/xkeyboard-config/po/cs.po b/xorg-server/xkeyboard-config/po/cs.po
index a5bb116ec..1185d62b6 100644
--- a/xorg-server/xkeyboard-config/po/cs.po
+++ b/xorg-server/xkeyboard-config/po/cs.po
@@ -21,10 +21,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.13.99\n"
+"Project-Id-Version: xkeyboard-config 2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-15 21:14+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-14 21:57+0200\n"
"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
"Language: cs\n"
@@ -936,3087 +936,3099 @@ msgstr "Arabské (QWERTY/číslice)"
msgid "Arabic (Buckwalter)"
msgstr "Arabské (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabské (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albánské"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albánské (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Arménské"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Arménské (fonetické)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Arménské (alternativní fonetické)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Arménské (východní)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Arménské (západní)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Arménské (alternativní východní)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Německé (Rakousko)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Německé (Rakousko, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Německé (Rakousko, mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Německé (Rakousko, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Ázerbájdžánské"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Ázerbájdžánské (cyrilice)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Běloruské"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Běloruské (zděděné)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Běloruské (latinka)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belgické"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belgické (alternativní)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belgické (alternativní, pouze Latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belgické (alternativní, mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belgické (ISO alternativní)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belgické (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belgické (mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belgické (Wang, model 724 AZERTY)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengálské"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengálské (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indické"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengálské (Indie)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengálské (Indie, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengálské (Indie, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengálské (Indie, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengálské (Indie, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengálské (Indie, Baishakhi Inscript)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipurské (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gudžarátské"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Paňdžábské (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Paňdžábské (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannadské"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannadské (fonetické KaGaPa)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malajálamské"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malajálamské (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malajálamské (rozšířený inscript se znakem rupie)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Urijské"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamilské (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamilské (klávesnice s číslicemi)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamilské (psací stroj TAB)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamilské (psací stroj TSCII)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamilské"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugské"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugské (fonetické KaGaPa)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdské (fonetické)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdské (alternativní fonetické)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdské (klávesy Win)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindské (Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindské (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindské (fonetické KaGaPa)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanskrtské (fonetické KaGaPa)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Maráthské (fonetické KaGaPa)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Anglické (Indie, se symbolem rupie)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosenské"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosenské (s francouzskými uvozovkami)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosenské (s bosenskými spřežkami)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosenské (americká klávesnice s bosenskými spřežkami)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosenské (americká klávesnice s bosenskými písmeny)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugalské (Brazílie)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugalské (Brazílie, bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugalské (Brazílie, Dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugalské (Brazílie, nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugalské (Brazílie, nativo pro americké klávesnice)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperantské (Brazílie, nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bulharské"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bulharské (tradiční fonetické)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bulharské (nové fonetické)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabské (Maroko)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Francouzské (Maroko)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berberské (Maroko, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berberské (Maroko, Tifinagh alternativní)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berberské (Maroko, Tifinagh alternativní fonetické)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berberské (Maroko, Tifinagh rozšířené)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berberské (Maroko, Tifinagh fonetické)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berberské (Maroko, Tifinagh rozšířené fonetické)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Anglické (Kamerun)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Francouzské (Kamerun)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Kamerunské vícejazyčné (QWERTY)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Kamerunské vícejazyčné (AZERTY)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Kamerunské vícejazyčné (Dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Barmské"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Francouzské (Kanada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Francouzské (Kanada, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Francouzské (Kanada, zděděné)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Kanadské vícejazyčné"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Kanadské vícejazyčné (první část)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Kanadské vícejazyčné (druhá část)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitutské"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Anglické (Kanada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Francouzské (Konžská demokratická republika)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Čínské"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetské"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetské (s číslicemi ASCII)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Ujgurské"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Chorvatské"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Chorvatské (s francouzskými uvozovkami)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Chorvatské (s chorvatskými spřežkami)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Chorvatské (americká klávesnice s chorvatskými spřežkami)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Chorvatské (americká klávesnice s chorvatskými písmeny)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "České"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "České (s klávesou &lt;\\|&gt;)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "České (QWERTY)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "České (QWERTY, rozšířená klávesa zpětného lomítka)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "České (rozložení UCW, pouze znaky s diakritikou)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "České (americké Dvorak s podporou CZ UCW)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Dánské"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Dánské (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Dánské (klávesy Win)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Dánské (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Dánské (Macintosh, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Dánské (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Nizozemské"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Nizozemské (s mrtvými klávesami Sun)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Nizozemské (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Nizozemské (standardní)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkä"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estonské"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estonské (bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estonské (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estonské (americká klávesnice s estonskými písmeny)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Perské"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Perské (s perskou numerickou klávesnicí)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdské (Írán, latinské Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdské (Írán, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdské (Írán, latinské Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdské (Írán, arabsko-latinské)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Irácké"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdské (Irák, latinské Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdské (Irák, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdské (Irák, latinské Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdské (Irák, arabsko-latinské)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Faerské"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Faerské (bez mrtvých kláves)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finské"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finské (klasické)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finské (klasické, bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finské (klávesy Win)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Severosámské (Finsko)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finské (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Francouzské"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Francouzské (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Francouzské (mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Francouzské (alternativní)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Francouzské (alternativní, pouze Latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Francouzské (alternativní, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Francouzské (alternativní, mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Francouzské (zděděné, alternativní)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Francouzské (zděděné, alternativní, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Francouzské (zděděné, alternativní, mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Francouzské (Bepo, ergonomické, typ Dvorak)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Francouzské (Bepo, ergonomické, typ Dvorak, pouze Latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Francouzské (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Francouzské (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Francouzské (bretonština)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Okcitánské"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Gruzínské (Francie, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Anglické (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Anglické (Ghana, vícejazyčné)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "GA"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Anglické (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Francouzské (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Gruzínské"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Gruzínské (ergonomické)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Gruzínské (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Ruské (Gruzie)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Osetské (Gruzie)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Německé"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Německé (mrtvá čárka)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Německé (mrtvá opačná čárka - gravis)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Německé (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Německé (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumunské (Německo)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumunské (Německo, bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Německé (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Německé (mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Německé (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Německé (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Německé (Macintosh, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Dolnolužické"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Dolnolužické (QWERTZ)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Německé (QWERTY)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turecké (Německo)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Ruské (Německo, fonetické)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Německé (zděděné)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Řecké"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Řecké (jednoduché)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Řecké (rozšířené)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Řecké (bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Řecké (polytónické)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Maďarské"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Maďarské (standardní)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Maďarské (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Maďarské (QWERTY)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Maďarské (101/QWERTZ/čárka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Maďarské (101/QWERTZ/čárka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Maďarské (101/QWERTZ/tečka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Maďarské (101/QWERTZ/tečka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Maďarské (101/QWERTY/čárka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Maďarské (101/QWERTY/čárka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Maďarské (101/QWERTY/tečka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Maďarské (101/QWERTY/tečka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Maďarské (102/QWERTZ/čárka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Maďarské (102/QWERTZ/čárka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Maďarské (102/QWERTZ/tečka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Maďarské (102/QWERTZ/tečka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Maďarské (102/QWERTY/čárka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Maďarské (102/QWERTY/čárka/vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Maďarské (102/QWERTY/tečka/mrtvé klávesy)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Maďarské (102/QWERTY/tečka/vyloučit mrtvé klávesy)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandské"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandské (mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandské (bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandské (Macintosh, zděděné)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandské (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandské (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebrejské"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebrejské (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebrejské (fonetické)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebrejské (biblické, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italské"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italské (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italské (klávesy Win)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italské (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italské (americká klávesnice s italskými znaky)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Gruzínské (Itálie)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italské (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japonské"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japonské (kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japonské (kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japonské (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japonské (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japonské (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kyrgyzské"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kyrgyzské (fonetické)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmérština (Kambodža)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazašské"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Ruské (Kazachstán, s kazaštinou)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazašské (s ruštinou)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Laoské"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Laoské (návrh standardního rozložení STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Španělské (latinskoamerické)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Španělské (latinskoamerické, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Španělské (latinskoamerické, zahrnout mrtvou klávesu vlnovky)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Španělské (latinskoamerické, mrtvé klávesy Sun)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Španělské (latinskoamerické, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Litevské"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Litevské (standardní)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litevské (americká klávesnice s litevskými písmeny)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litevské (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Litevské (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Litevské (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Lotyšské"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Lotyšské (varianta s apostrofem)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Lotyšské (varianta s vlnovkou)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Lotyšské (varianta s F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Lotyšské (moderní)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Lotyšské (ergonomické, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Lotyšské (přizpůsobené)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maorské"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Černohorské"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Černohorské (cyrilice)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Černohorské (cyrilice, prohozené З a Ж)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Černohorské (latinský Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Černohorské (latinské QWERTY)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Černohorské (latinské unicodové QWERTY)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Černohorské (cyrilice s francouzskými uvozovkami)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Černohorské (latinské s francouzskými uvozovkami)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Makedonské"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Makedonské (bez mrtvých kláves)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltézské"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltézské (s americkým rozložením)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongolské"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Norské"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Norské (bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Norské (klávesy Win)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Norské (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Severosámské (Norsko)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Severosámské (Norsko, bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Norské (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norské (Macintosh, bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Norské (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polské"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polské (zděděné)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polské (QWERTZ)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polské (Dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polské (Dvorak, polské uvozovky na klávese uvozovky)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polské (Dvorak, polské uvozovky na klávese 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Kašubské"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Slezské"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Ruské (Polsko, fonetické Dvorak)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polské (programátorské Dvorak)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugalské"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugalské (bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugalské (s mrtvými klávesami Sun)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugalské (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugalské (Macintosh, bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugalské (Macintosh, s mrtvými klávesami Sun)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugalské (nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugalské (nativo pro americké klávesnice)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperantské (Portugalsko, nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumunské"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumunské (se cedillou)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumunské (standardní)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumunské (standardní se cedillou)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumunské (s klávesami Win)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Ruské"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Ruské (fonetické)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Ruské (fonetické klávesy Win)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Ruské (psací stroj)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Ruské (zděděné)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Ruské (psací stroj, zděděné)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatarské"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Osetské (zděděné)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Osetské (s klávesami Win)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Čuvašské"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Čuvašské (latinské)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurtské"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "jakutské"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kalmycké"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Ruské (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Ruské (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Srbské (Rusko)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Baškirské"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Marijské"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Ruské (fonetické AZERTY)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Ruské (fonetické francouzské)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Srbské"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Srbské (cyrilice, prohozené З a Ж)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Srbské (latinka)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Srbské (latinka Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Srbské (latinka QWERTY)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Srbské (latinka Unicode QWERTY)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Srbské (cyrilice s francouzskými uvozovkami)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Srbské (latinka s francouzskými uvozovkami)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Panonsko-rusínské"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Slovinské"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Slovinské (s francouzskými uvozovkami)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovinské (americká klávesnice se slovinskými písmeny)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Slovenské"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Slovenské (rozšířená klávesa zpětného lomítka)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Slovenské (QWERTY)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovenské (QWERTY, rozšířená klávesa zpětného lomítka)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Španělské"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Španělské (vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Španělské (klávesy Win)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Španělské (zahrnout mrtvou klávesu vlnovky)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Španělské (mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Španělské (Dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturské (Španělsko, s H s tečkou pod a L s tečkou pod)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Katalánské (Španělsko, s Ŀ)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Španělské (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Švédské"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Švédské (bez mrtvých kláves)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Švédské (Dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Ruské (Švédsko, fonetické)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Ruské (Švédsko, fonetické, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Severosámské (Švédsko)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Švédské (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Švédské (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Švédský znakový jazyk"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Německé (Švýcarsko)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Německé (Švýcarsko, zděděné)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Německé (Švýcarsko, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Německé (Švýcarsko, mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Francouzské (Švýcarsko)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francouzské (Švýcarsko, vyloučit mrtvé klávesy)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francouzské (Švýcarsko, mrtvé klávesy Sun)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Francouzské (Švýcarsko, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Německé (Švýcarsko, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabské (Sýrie)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syrské"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syrské (fonetické)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdské (Sýrie, latinské Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdské (Sýrie, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdské (Sýrie, latinské Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tádžické"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tádžické (zděděné)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
-msgstr "Synhálské (fonetické)"
+msgstr "Sinhálské (fonetické)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilské (Šrí Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilské (Šrí Lanka, psací stroj TAB)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Sinhálské (americká klávesnice se sinhálskými znaky)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Thajské"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Thajské (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Thajské (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turecké"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turecké (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turecké (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turecké (s mrtvými klávesami Sun)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdské (Turecko, latinské Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdské (Turecko, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdské (Turecko, latinské Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turecké (mezinárodní s mrtvými klávesami)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krymskotatarské (turecké Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Krymskotatarské (turecké F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krymskotatarské (turecké Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Tchajwanské"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Tchajwanské (domorodé)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyatské (Tchaj-wan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ukrajinské"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ukrajinské (fonetické)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ukrajinské (psací stroj)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ukrajinské (klávesy Win)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ukrajinské (zděděné)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrajinské (standardní RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Ruské (Ukrajina, standardní RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ukrajinské (stejně znějící)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Anglické (Británie)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Anglické (Británie, rozšířené - klávesy Win)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Anglické (Británie, mezinárodní s mrtvými klávesami)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Anglické (Británie, Dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Anglické (Británie, Dvorak s britskou interpunkcí)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Anglické (Británie, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Anglické (Británie, mezinárodní Macintosh)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Anglické (Británie, Colemak)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Uzbecké"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Uzbecké (latinka)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamské"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Korejské"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Korejské (kompatibilní se 101/104klávesovou klávesnicí)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japonské (řada PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irské"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "Gaelská latinka"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irské (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogam"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogam (IS434)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdské (Pákistán)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdské (Pákistán, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdské (Pákistán, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabské (Pákistán)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhské"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Divehi"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Anglické (Jižní Afrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (posunutý středník a uvozovka, zastaralé)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepálské"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Anglické (Nigérie)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Jorubské"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharské"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braillovo písmo"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braillovo písmo (levoruké)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braillovo písmo (pravoruké)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkménské"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkménské (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambarské"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Francouzské (Mali, alternativní)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Anglické (Mali, americké Macintosh)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Anglické (Mali, americké mezinárodní)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Svahilské (Tanzanie)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Svahilské (Keňa)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikujské"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Setswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipínské"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipínské (baybayinské QWERTY)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipínské (latinské Capewell-Dvorak)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipínské (baybayinské Capewell-Dvorak)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipínské (latinské Capewell-QWERF 2006)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipínské (baybayinské Capewell-QWERF 2006)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipínské (latinské Colemak)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipínské (baybayinské Colemak)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipínské (latinské Dvorak)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipínské (baybayinské Dvorak)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldavské"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldavské (Gagauzské)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Přepínající do jiného rozložení"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Pravá klávesa Alt (při stisknutí)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Levá klávesa Alt (při stisknutí)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Levá klávesa Win (při stisknutí)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Pravá klávesa Win (při stisknutí)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Libovolná klávesa Win (při stisknutí)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (při stisknutí), Alt+Caps Lock provádí původní akci Caps Lock"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Pravá klávesa Ctrl (při stisknutí)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Pravá klávesa Alt"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Levá klávesa Alt"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (na první rozložení), Shift+Caps Lock (na poslední rozložení)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Levá klávesa Win (na první rozložení), pravá klávesa Win/Menu (na poslední rozložení)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Levá klávesa Ctrl (na první rozložení), pravá klávesa Ctrl (na poslední rozložení)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Obě klávesy Shift dohromady"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Obě klávesy Alt dohromady"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Obě klávesy Ctrl dohromady"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Levá klávesa Ctrl + levá klávesa Shift"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Pravá klávesa Ctrl + pravá klávesa Shift"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Levý Alt + levý Shift"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Mezerník"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Levá klávesa Win"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Klávesa Win + Mezerník"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Pravá klávesa Win"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Levá klávesa Shift"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Pravá klávesa Shift"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Levá klávesa Ctrl"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Pravá klávesa Ctrl"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Levý Ctrl + Levý Win (na první rozložení), pravý Ctrl + Menu (na druhém rozložení)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Klávesa umožňující výběr 3. úrovně"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Libovolná klávesa Win"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Libovolná klávesa Alt"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Pravý Alt, Shift a pravá klávesa Alt je Compose"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Pravá klávesa Alt nikdy neumožní výběr 3. úrovně"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Enter na numerické klávesnici"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Zpětné lomítko"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Menší než/větší než&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock vybírá 3. úroveň, jednorázově uzamyká při stisknutí společně s jinou výběrovou klávesou 3. úrovně"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Zpětné lomítko vybírá 3. úroveň, jednorázově uzamyká při stisknutí společně s jinou výběrovou klávesou 3. úrovně"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Menší než/Větší než&gt; vybírá 3. úroveň, jednorázově uzamyká při stisknutí společně s jinou výběrovou klávesou 3. úrovně"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Umístění klávesy Ctrl"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock jako Ctrl"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Levý Ctrl jako Meta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Zaměnit Ctrl a Caps Lock"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Nalevo od „A“"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Vlevo dole"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Pravá klávesa Ctrl funguje jako pravá klávesa Alt"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu jako pravý Ctrl"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Pravý Alt jako pravý Ctrl"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Levá klávesa Alt je prohozena s levou klávesou Ctrl"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Levá klávesa Win je prohozena s levou klávesou Ctrl"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Pravá klávesa Win je prohozena s pravou klávesou Ctrl"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Levý Alt jako Ctrl, Levý Ctrl jako Win, levý Win jako Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Použít LED klávesnice k zobrazení alternativního rozložení"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Rozložení numerické klávesnice"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Zděděné"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Doplňky Unicode (šipky a matematické operátory)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Doplňky Unicode (šipky a matematické operátory; matematické operátory na výchozí úrovni)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Zděděná Wang 724"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Numerická klávesnice Wang 724 s doplňky Unicode (šipky a matematické operátory)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Numerická klávesnice Wang 724 s doplňky Unicode (šipky a matematické operátory; matematické operátory na výchozí úrovni)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadecimální"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "ATM/telefonní typ"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Chování klávesy Delete na numerické klávesnici"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Zděděná klávesa s tečkou"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Zděděná klávesa s čárkou"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Klávesa čtvrté úrovně s tečkou"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Klávesa čtvrté úrovně s tečkou, pouze Latin-9"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Klávesa čtvrté úrovně s čárkou"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Klávesa čtvrté úrovně se znakem momajjez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Klávesa čtvrté úrovně s abstraktními oddělovači"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Středník na třetí úrovni"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Chování klávesy Caps Lock"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock používá vnitřní převod na verzálky, Shift přerušuje Caps Lock"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Caps Lock používá vnitřní převod na verzálky, Shift neovlivňuje Caps Lock"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock funguje jako Shift s uzamčením, Shift přerušuje Caps Lock"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Caps Lock funguje jako Shift s uzamčením, Shift neovlivňuje Caps Lock"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock přepne běžný převod abecedních znaků na verzálky"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Vytvořit z klávesy Caps Lock další Num Lock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Zaměnit Esc a Caps Lock"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Vytvořit z klávesy Caps Lock další Esc"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Vytvořit z klávesy Caps Lock další Backspace"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Vytvořit z klávesy Caps Lock další Super"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Vytvořit z klávesy Caps Lock další Hyper"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Caps Lock přepne ShiftLock (ovlivňuje všechny klávesy)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Klávesa Caps Lock je vypnuta"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Vytvořit z klávesy Caps Lock další Ctrl"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Chování klávesy Alt/Win"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Přidá standardní chování ke klávese Menu"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt a Meta na klávesách Alt"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt je přiřazen ke klávesám Win (a obvyklým klávesám Alt)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl je přiřazen ke klávesám Win (a obvyklým klávesám Ctrl)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl je přiřazen ke klávesám Alt, Alt je přiřazen ke klávesám Win"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta je přiřazena ke klávesám Win"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta je přiřazena k levé klávese Win"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper je přiřazena ke klávesám Win"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt je přiřazena k pravé klávese Win a Super k Menu"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt je prohozen s klávesou Win"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Umístění klávesy Compose"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "3. úroveň levého Win"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "3. úroveň pravého Win"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "3. úroveň Menu"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "3. úroveň levého Ctrl"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "3. úroveň pravého Ctrl"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "3. úroveň klávesy Caps Lock"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "3. úroveň &lt;Menší než/větší než&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause (Pauza)"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Dodatečné volby kompatibility"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Výchozí numerická klávesnice"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Klávesy numerické klávesnice vždy vrací číslice (jako u Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "Zapnutý Num Lock: číslice, Shift přepíná na šipky, vypnutý Num Lock: vždy šipky (jako v MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift neruší Num Lock, namísto toho vybírá 3. úroveň"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Speciální klávesy (Ctrl+Alt+&lt;klávesa&gt;) zpracovány v serveru"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: emulovat klávesy PC (Print, Scroll Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Shift ruší Caps Lock"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Povolit přídavné znaky hladké sazby"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Obě klávesy Shift dohromady přepnou Caps Lock"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Obě klávesy Shift dohromady zapnou Caps Lock, jediná klávesa Shift jej vypne"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Obě klávesy Shift dohromady přepnou ShiftLock"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Shift + Num Lock přepne PointerKeys (ovládání ukazatele)"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Umožní porušit uzamčení vstupů pomocí akcí klávesnice (pozor: bezpečnostní riziko)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Umožní protokolování uzamčení vstupů a stromu oken"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Přidává znaky měny k určitým klávesám"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro na E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro na 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro na 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro na 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupie na 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Klávesa umožňující výběr 5. úrovně"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Menší než/Větší než&gt; vybírá 5. úroveň, uzamyká při stisknutí společně s jinou výběrovou klávesou 5. úrovně"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Pravá klávesa Alt vybírá 5. úroveň, uzamyká při stisknutí společně s jinou výběrovou klávesou 5. úrovně"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Levá klávesa Win vybírá 5. úroveň, uzamyká při stisknutí společně s jinou výběrovou klávesou 5. úrovně"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Pravá klávesa Win vybírá 5. úroveň, uzamyká při stisknutí společně s jinou výběrovou klávesou 5. úrovně"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Používání mezerníku k zadávání znaku nedělitelné mezery"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Na jakékoliv úrovni znak běžné mezery"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Na druhé úrovni znak nedělitelné mezery"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Na třetí úrovni znak nedělitelné mezery"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Na třetí úrovni znak nedělitelné mezery, nic na úrovni čtvrté"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Na třetí úrovni znak nedělitelné mezery, tenká nedělitelná mezera na čtvrté úrovni"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Na čtvrté úrovni znak nedělitelné mezery"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Na čtvrté úrovni znak nedělitelné mezery, tenká nedělitelná mezera na šesté úrovni"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Na čtvrté úrovni znak nedělitelné mezery, tenká nedělitelná mezera na šesté úrovni (přes Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky, znak spojovače nulové šířky na třetí úrovni"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky, znak spojovače nulové šířky na třetí úrovni, nedělitelná mezera na čtvrté úrovni"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky, nedělitelná mezera na třetí úrovni"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky, na třetí úrovni nedělitelná mezera, nic na úrovni čtvrté"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky, nedělitelná mezera na třetí úrovni, spojovač nulové šířky na úrovni čtvrté"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Na druhé úrovni znak nespojovače nulové šířky, nedělitelná mezera na třetí úrovni, tenká nedělitelná mezera na čtvrté úrovni"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Na třetí úrovni znak nespojovače nulové šířky, znak spojovače nulové šířky na úrovni čtvrté"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Volby japonské klávesnice"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Klávesa Kana Lock uzamyká"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Backspace typu NICOLA-F"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Vytvoří z klávesy Zenkaku/Hankaku další Esc"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Korejský hangul/klávesy handža"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Hardwarový hangul/klávesy handža"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Pravý Alt jako Hangul, pravý Ctrl jako Handža"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Pravá klávesa Ctrl jako Hangul, pravý Alt jako Handža"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Přidává diakritiku jazyka esperanto"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "K odpovídající klávese na rozložení QWERTY"
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "K odpovídající klávese na rozložení Dvorak"
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "K odpovídající klávese na rozložení Colemak"
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Udržovat kompatibilitu kláves se starými kódy kláves Solarisu"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Kompatibilita se Sun Key"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Pořadí kláves zabíjející server X"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Backspace"
diff --git a/xorg-server/xkeyboard-config/po/da.po b/xorg-server/xkeyboard-config/po/da.po
index d0d212891..d6ea2a7cc 100644
--- a/xorg-server/xkeyboard-config/po/da.po
+++ b/xorg-server/xkeyboard-config/po/da.po
@@ -1,8 +1,8 @@
# Danish translation of xkeyboard-config.
-# Copyright (C) 2014 Free Software Foundation, Inc.
+# Copyright (C) 2015 Free Software Foundation, Inc.
# This file is distributed under the same license as the xkeyboard-config package.
# Ole Laursen <olau@hardworking.dk>, 2003.
-# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
+# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
# Korrekturlæsning "Lars Christian Jensen" <larschrjensen@gmail.com>, 2010.
# Korrekturlæsning "Ask Hjorth Larsen" <asklarsen@gmail.com>, 2011.
#
@@ -31,10 +31,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.12.99\n"
+"Project-Id-Version: xkeyboard-config-2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2014-09-18 23:46+0100\n"
-"PO-Revision-Date: 2014-10-04 23:06+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-14 23:06+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -780,11 +780,11 @@ msgid "Htc Dream phone"
msgstr "Htc Dream-telefon"
#. Keyboard indicator for English layouts
-#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:47
msgid "en"
msgstr "en"
-#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:48
msgid "English (US)"
msgstr "Engelsk (US)"
@@ -842,7 +842,7 @@ msgid "English (programmer Dvorak)"
msgstr "Engelsk (programmørdvorak)"
#. Keyboard indicator for Russian layouts
-#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:69
+#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:70
msgid "ru"
msgstr "ru"
@@ -875,7 +875,7 @@ msgid "English (Workman, international with dead keys)"
msgstr "Engelsk (Workman, international med døde taster)"
#. Keyboard indicator for Persian layouts
-#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:28
+#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:29
msgid "fa"
msgstr "fa"
@@ -914,11 +914,11 @@ msgid "Uzbek (Afghanistan, OLPC)"
msgstr "Usbekisk (Afghanistan, OLPC)"
#. Keyboard indicator for Arabic layouts
-#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:80
+#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:81
msgid "ar"
msgstr "ar"
-#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:81
+#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:82
msgid "Arabic"
msgstr "Arabisk"
@@ -946,1787 +946,1803 @@ msgstr "Arabisk (qwerty/cifre)"
msgid "Arabic (Buckwalter)"
msgstr "Arabisk (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabisk (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albansk"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albansk (plisi d1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:74
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armensk"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armensk (fonetisk)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armensk (alternativ fonetisk)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armensk (østlig)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armensk (vestlig)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armensk (alternativ østlig)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Tysk (Østrig)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Tysk (Østrig, slå døde taster fra)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Tysk (Østrig, Sun døde taster)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Tysk (Østrig, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Aserbajdsjansk"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Aserbajdsjansk (kyrillisk)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Hviderussisk"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Hviderussisk (forældet)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Hviderussisk (latin)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:83
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belgisk"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belgisk (alternativ)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belgisk (alternativ, kun latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belgisk (alternativ, Sun døde taster)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belgisk (ISO-alternativ)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belgisk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belgisk (Sun døde taster)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belgisk (Wang model 724 azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengali"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengali (probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indisk"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengali (Indien)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengali (Indien, probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengali (Indien, baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengali (Indien, bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengali (Indien, uni gitanjali)"
# http://en.wikipedia.org/wiki/InScript_keyboard
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengali (Indien, baishakhi inscript)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Punjabi (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Punjabi (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (KaGaPa fonetisk)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayalam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayalamsk (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malayalamsk (udvidet inscript med rupeetegn)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamilsk (unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamilsk (tastatur med numre)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamilsk (TAB-skrivemaskine)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamilsk (TSCII-skrivemaskine)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamilsk"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (KaGaPa fonetisk)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdu (fonetisk)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdu (alternativ fonetisk)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdu (Win-taster)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (KaGaPa fonetisk)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanskrit (KaGaPa fonetisk)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (KaGaPa fonetisk)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Engelsk (Indien, med rupeetegn)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnisk"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnisk (med »« som anførelsestegn)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnisk (med bosniske digrafer)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnisk (US-tastatur med bosniske digrafer)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnisk (US-tastatur med bosniske bogstaver)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:86
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugisisk (brasiliansk)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugisisk (brasiliansk, slå døde taster fra)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugisisk (brasiliansk, dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugisisk (brasiliansk, nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugisisk (brasiliansk, nativo for USA-tastaturer)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (brasiliansk, nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bulgarsk"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bulgarsk (traditionel fonetisk)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bulgarsk (ny fonetisk)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabisk (Marokko)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Fransk (Marokko)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berbisk (Marokko, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berbisk (Marokko, Tifinagh alternativ)"
# http://retskrivningsordbogen.dk/ro/ro.htm?q=berb
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berbisk (Marokko, tifinagh alternativ fonetisk)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berbisk (Marokko, Tifinagh udvidet)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berbisk (Marokko, Tifinagh fonetisk)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berbisk (Marokko, Tifinagh udvidet fonetisk)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:149
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Engelsk (camerounsk)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Fransk (camerounsk)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Camerounsk flersproget (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Camerounsk flersproget (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Camerounsk flersproget (dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Burmesisk"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Fransk (Canada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Fransk (Canada, dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Fransk (Canada, forældet)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Canadisk flersproget"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Canadisk flersproget (første del)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Canadisk flersproget (anden del)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Engelsk (Canada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Fransk (Congo, Den Demokratiske Republik)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Kinesisk"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetansk"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetansk (med ASCII-numre)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Uyghur"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Kroatisk"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Kroatisk (med »« som anførelsestegn)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Kroatisk (med kroatiske digrafer)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Kroatisk (US-tastatur med kroatiske digrafer)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Kroatisk (US-tastatur med kroatiske bogstaver)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:89
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Tjekkisk"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Tjekkisk (med &lt;\\|&gt;-tast)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Tjekkisk (qwerty)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Tjekkisk (qwerty, udvidet omvendt skråstreg)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Tjekkisk (UCW-layout, kun bogstaver med accent)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Tjekkisk (US Dvorak med CZ UCW-understøttelse)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:92
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Dansk"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Dansk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Dansk (Wintaster)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Dansk (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Dansk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Dansk (dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:95
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Hollandsk"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Hollandsk (Sun døde taster)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Hollandsk (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Hollandsk (standard)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:98
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estisk"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estisk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estisk (dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estisk (US-tastatur med estiske bogstaver)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:29
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persisk"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persisk (med persisk numerisk tastatur)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdisk (Iran, latin Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdisk (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdisk (Iran, latin Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdisk (Iran, arabisk-latin)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Irakisk"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdisk (Irak, latin Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdisk (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdisk (Irak, latin Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdisk (Irak, arabisk-latin)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Færøsk"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Færøsk (slå døde taster fra)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finsk"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finsk (klassisk)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finsk (klassisk, slå døde taster fra)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finsk (Wintaster)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Nordligt samisk (Finland)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finsk (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Fransk"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Fransk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Fransk (Sun døde taster)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Fransk (alternativ)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Fransk (alternativ, kun latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Fransk (alternativ, slå døde taster fra)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Fransk (alternativ, Sun døde taster)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Fransk (forældet, alternativ)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Fransk (forældet, alternativ, slå døde taster fra)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Fransk (forældet, alternativ, Sun døde taster)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Fransk (Bepo, ergonomisk, dvorakmåde)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Fransk (Bepo, ergonomisk, dvorakmåde, kun latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Fransk (dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Fransk (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Fransk (bretonsk)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occitansk"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Geogrisk (Frankrig, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Engelsk (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Engelsk (Ghana, flersproget)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
# The Avatime are an Akan people who live in Volta region of Ghana. History has it
# that they are Ahanta people who migrated to the Volta region.
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Engelsk (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Fransk (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Georgisk"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgisk (ergonomisk)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgisk (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Russisk (georgisk)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Occitansk (Georgien)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Tysk"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Tysk (død accent)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Tysk (død accent grave)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Tysk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Tysk (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumænsk (Tyskland)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumænsk (Tyskland, slå døde taster fra)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Tysk (dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Tysk (Sun døde taster)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Tysk (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Tysk (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Tysk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Nedersorbisk"
# nedersorbisk, tror jeg
# (el. nedre Lausitz)
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Nedersorbisk (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Tysk (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Tyrkisk (Tyskland)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Russisk (Tyskland, fonetisk)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Tysk (forældet)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Græsk"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Græsk (simpel)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Græsk (udvidet)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Græsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Græsk (polytonisk)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Ungarsk"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Ungarsk (standard)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Ungarsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Ungarsk (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Ungarsk (101/qwertz/komma/døde taster)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Ungarsk (101/qwertz/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Ungarsk (101/qwertz/punktum/døde taster)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Ungarsk (101/qwertz/punktum/slå døde taster fra)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Ungarsk (101/qwerty/komma/døde taster)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Ungarsk (101/qwerty/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Ungarsk (101/qwerty/punktum/døde taster)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Ungarsk (101/qwerty/punktum/slå døde taster fra)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Ungarsk (102/qwertz/komma/døde taster)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Ungarsk (102/qwertz/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Ungarsk (102/qwertz/punktum/døde taster)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Ungarsk (102/qwertz/punktum/slå døde taster fra)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Ungarsk (102/qwerty/komma/døde taster)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Ungarsk (102/qwerty/komma/slå døde taster fra)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Ungarsk (102/qwerty/punktum/døde taster)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Ungarsk (102/qwerty/punktum/slå døde taster fra)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandsk"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandsk (Sun døde taster)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandsk (Macintosh, forældet)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandsk (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandsk (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:77
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebraisk"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebraisk (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebraisk (fonetisk)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebraisk (bibelsk, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italiensk"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italiensk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italiensk (Wintaster)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italiensk (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italiensk (US-tastatur med italienske bogstaver)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgisk (Italien)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italiensk (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japansk"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japansk (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japansk (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japansk (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japansk (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japansk (dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirgisisk"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirgisisk (fonetisk)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmerisk (Cambodja)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kasakhisk"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russisk (Kasakhstan, med kazakhisk)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kasakhisk (med russisk)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (STEA-foreslået standardlayout)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:125
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Spansk (latinamerikansk)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Spansk (latinamerikansk, slå døde taster fra)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Spansk (latinamerikansk, inkluder død tilde)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Spansk (latinamerikansk, Sun døde taster)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Spansk (latinamerikansk, dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:31
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Litauisk"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Litauisk (standard)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litauisk (US-tastatur med litauiske bogstaver)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litauisk (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Litauisk (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Litauisk (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:35
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Lettisk"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Lettisk (apostrofvariant)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Lettisk (tildevariant)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Lettisk (F-variant)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Lettisk (moderne)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Lettisk (ergonomisk, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Lettisk (adapteret)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:66
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrinsk"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrinsk (kyrillisk)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrinsk (kyrillisk, ZE og ZHE ombyttet)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrinsk (latin Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrinsk (latin qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrinsk (latin Unicode qwerty)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrinsk (kyrillisk med anførelsestegnene »«)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrinsk (latin med anførelsestegnene »«)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Makedonsk"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Makedonsk (slå døde taster fra)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltesisk"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltesisk (med US-layout)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongolsk"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:117
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Norsk"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Norsk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Norsk (Wintaster)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Norsk (dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Nordligt samisk (Norge)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Nordligt samisk (Norge, slå døde taster fra)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Norsk (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norsk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Norsk (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polsk"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polsk (forældet)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polsk (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polsk (dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polsk (dvorak, polske anførelsestegn på anførelsestast)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polsk (dvorak, polske anførelsestegn på tast 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Kashubian"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Schlesisk"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russisk (Polen, fonetisk dvorak)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polsk (programmørdvorak)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:120
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugisisk"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugisisk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugisisk (Sun døde taster)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugisisk (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugisisk (Macintosh, slå døde taster fra)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugisisk (Macintosh, Sun døde taster)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugisisk (nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugisisk (nativo for USA-tastaturer)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:60
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumænsk"
# http://da.wikipedia.org/wiki/%C3%87
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumænsk (cedille)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumænsk (standard)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumænsk (standardcedille)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumænsk (Wintaster)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:70
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Russisk"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Russisk (fonetisk)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Russisk (fonetisk Wintaster)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Russisk (skrivemaskine)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Russisk (forældet)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Russisk (skrivemaskine, forældet)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Occitansk (forældet)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Occitansk (Wintaster)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Chuvash"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Chuvash (latin)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurt"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Yakut"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Russisk (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Russisk (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbisk (Rusland)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Bashkirisk"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:701
+msgid "Russian (phonetic azerty)"
+msgstr "Russisk (fonetisk azerty)"
+
+#: ../rules/base.xml.in.h:702
+msgid "Russian (phonetic French)"
+msgstr "Russisk (fonetisk fransk)"
+
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbisk"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbisk (kyrillisk, ZE og ZHE ombyttet)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbisk (latin)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbisk (latin unicode)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbisk (latin qwerty)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbisk (latin unicode qwerty)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbisk (kyrillisk med anførelsestegnene »«)"
# guillemets er dem her: »«
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbisk (latin med anførelsestegnene »«)"
# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
# in north-western Serbia and eastern Croatia
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Pannonisk rusyn"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Slovensk"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Slovensk (med »« som anførelsestegn)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovensk (US-tastatur med slovenske bogstaver)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:715 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Slovakisk"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Slovakisk (udvidet omvendt skråstreg)"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Slovakisk (qwerty)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovakisk (qwerty, udvidet omvendt skråstreg)"
-#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Spansk"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Spansk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Spansk (Wintaster)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Spansk (inkluder død tilde)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Spansk (Sun døde taster)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Spansk (dvorak)"
@@ -2734,1147 +2750,1151 @@ msgstr "Spansk (dvorak)"
# language of the West Iberian group, Astur-Leonese
# Subgroup, spoken in the Spanish province of Asturias
# by the Asturian people.
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturisk (Spanien, med bundpunktum H og bundpunktum L)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalansk (Spanien, med midterpunktum L)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Spansk (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:128
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:730 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Svensk"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Svensk (slå døde taster fra)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Svensk (dvorak)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Russisk (Sverige, fonetisk)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russisk (Sverige, fonetisk, slå døde taster fra)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Nordligt samisk (Sverige)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Svensk (Macintosh)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Svensk (svdvorak)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Svensk tegnsprog"
-#: ../rules/base.xml.in.h:739 ../rules/base.extras.xml.in.h:132
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Tysk (Schweiz)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Tysk (Schweiz, forældet)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Tysk (Schweiz, slå døde taster fra)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Tysk (Schweiz, Sun døde taster)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Fransk (Schweiz)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Fransk (Schweiz, slå døde taster fra)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Fransk (Schweiz, Sun døde taster)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Fransk (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Tysk (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabisk (Syrien)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syrisk"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syrisk (fonetisk)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdisk (Syrien, latin Q)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdisk (Syrien, F)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdisk (Syrien, latin Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:758
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadsjikisk"
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadsjikisk (forældet)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Singalesisk (fonetisk)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilsk (Sri Lanka, unicode)"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilsk (Sri Lanka, TAB-skrivemaskine)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Singhala (US-tastatur med singhala bogstaver)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Thai"
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Thai (TIS-820.2538)"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Thai (pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:135
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Tyrkisk"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Tyrkisk (F)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Tyrkisk (Alt-Q)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Tyrkisk (Sun døde taster)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdisk (Tyrkiet, latin Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdisk (Tyrkiet, F)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdisk (Tyrkiet, latin Alt-Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Tyrkisk (international med døde taster)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krimtatarsk (tyrkisk Q)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Krimtatarsk (tyrkisk F)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krimtatarsk (tyrkisk Alt-Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanesisk"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanesisk (indfødte)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:791 ../rules/base.extras.xml.in.h:138
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ukrainsk"
-#: ../rules/base.xml.in.h:793
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ukrainsk (fonetisk)"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ukrainsk (skrivemaskine)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainsk (Wintaster)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ukrainsk (forældet)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainsk (standard RSTU)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russisk (Ukraine, standard RSTU)"
# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
# in north-western Serbia and eastern Croatia
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ukrainsk (homofonisk)"
-#: ../rules/base.xml.in.h:800 ../rules/base.extras.xml.in.h:141
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Engelsk (UK)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Engelsk (UK, udvidede Wintaster)"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Engelsk (UK, international med døde taster)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Engelsk (UK, Dvorak)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Engelsk (UK, Dvorak med UK-tegnsætning)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Engelsk (UK, Macintosh)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Engelsk (UK, Macintosh international)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Engelsk (UK, Colemak)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Usbekisk"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Usbekisk (latin)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamesisk"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:814 ../rules/base.extras.xml.in.h:143
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:815 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Koreansk"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Koreansk (101/104 tastkompatibel)"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japansk (pc-98xx-serie)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irsk"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irsk (UnicodeExpert)"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabisk (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:831
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:834
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Engelsk (Sydafrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (forkert placeret semikolon og anførelsestegn, forældet)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalesisk"
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Engelsk (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:849
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
# http://da.wikipedia.org/wiki/Amharisk
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharisk"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Blindeskrift"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Blindeskrift (venstre hånd)"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Blindeskrift (højre hånd)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmensk"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmensk (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Fransk (Mali, alternativ)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Engelsk (Mali, US Macintosh)"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Engelsk (Mali, US international)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzania)"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenya)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filippinsk"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filippinsk (QWERTY baybayin)"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filippinsk (Capewell-dvorak latin)"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filippinsk (Capewell-dvorak baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filippinsk (Capewell-QWERF 2006 latin)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filippinsk (Capewell-QWERF 2006 baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filippinsk (Colemak latin)"
# http://en.wikipedia.org/wiki/Baybayin
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filippinsk (Colemak baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filippinsk (Dvorak latin)"
# http://en.wikipedia.org/wiki/Baybayin
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filippinsk (Dvorak baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldavisk"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
# http://www.denstoredanske.dk/Sprog,_religion_og_filosofi/Sprog/Alle_lande_-_sprogoversigt/Altaiske_sprog/gagausisk
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldavisk (gagausisk)"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Skifter til et andet layout"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Højre Alt (mens trykket ned)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Venstre Alt (mens trykket ned)"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Venstre Win-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Højre Win-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Enhver Win-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (mens presset ned), Alt+Caps Lock udfører den oprindleige capslockhandling"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Højre Ctrl-tast (mens trykket ned)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Højre Alt"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Venstre Alt"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Skift+Caps Lock"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (skifter til første layout), Skift+Caps Lock (skifter til sidste layout)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Venstre Win (skifter til første layout), Højre Win/Menu (skifter til sidste layout)"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Venstre Ctrl (skifter til første layout), Højre Ctrl (skifter til sidste layout)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Begge skift-taster sammen"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Begge Alt-taster sammen"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Begge Ctrl-taster sammen"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Skift"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Venstre Ctrl+Venstre Skift"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Højre Ctrl+Højre Skift"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Skift"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Venstre Alt+Venstre Skift"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Mellemrum"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Venstre Win"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Wintast+mellemrum"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Højre Win"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Venstre Skift"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Højre Skift"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Venstre Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Højre Ctrl"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Venstre Ctrl+Venstre Win (til første layout), Højre Ctrl+Menu (til andet layout)"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Tast for at vælge tredje niveau"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Enhver Win-tast"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Enhver Alt-tast"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Højre Alt-tast, Skift+højre Alt-tast er sammensat (compose)"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Højre Alt-tast vælger aldrig tredje niveau"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Retur på numerisk tastatur"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Omvendt skråstreg"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mindre end/Større end&gt;"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Omvendt skråstreg vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mindre end/Større end&gt; (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Ctrl-tast placering"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock som Ctrl"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Venstre Ctrl som Meta"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Ombyt Ctrl og Caps Lock"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Til venstre for 'A'"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Nederst til venstre"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Højre Ctrl-tast virker som højre Alt"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu som højre Ctrl"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Højre Alt-tast virker som højre Ctrl"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Byt venstre Alt-tast om med venstre Ctrl-tast"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Byt venstre Win-tast om med venstre Ctrl-tast"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Byt højre Win-tast om med højre Ctrl-tast"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Venstre Alt som Ctrl, venstre Ctrl som Win, venstre Win som Alt"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Brug tastatur-LED til at vise alternativ layout"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Layout for numerisk tastatur"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Forældet"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode tilføjelser (pile og matematiske tegn)"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Unicode-tilføjelser (pile og matematiske tegn; matematiske tegn på standardniveau)"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Forældet Wang 724"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 numerisk tastatur med Unicode-tilføjelser (pile og matematiske tegn)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Wang 724 numerisk tastatur med Unicode-tilføjelser (pile og matematiske tegn; matematiske tegn på standardniveau)"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Sekstentals"
# ATM = hæveautomat, måske skal det oversættes.
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "ATM/telefonstil"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Numerisk tastatur slettetast opførsel"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Forældet tast med punktum"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Forældet tast med komma"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Niveau fire tast med punktum"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Niveau fire tast med punktum, latin-9 begrænsning"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Niveau fire tast med komma"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Niveau fire tast med momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Niveau fire tast med abstrakt adskillelser"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Semikolon på tredje niveau"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Opførsel for Caps Lock-tast"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift sætter Caps Lock »på hold«"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift påvirker ikke Caps Lock"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock agerer som skiftetasten med lås. Skift »pauser« Caps Lock"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Caps Lock agerer som skiftetasten med lås. Skift påvirker ikke Caps Lock"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock slår små/store bogstaver til/fra"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Gør Caps Lock til en ekstra NumLock"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Ombyt ESC og Caps Lock"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Gør Caps Lock til en ekstra Esc"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Gør Caps Lock til en ekstra rettelsestast"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Gør Caps Lock til en ekstra Super"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Gør Caps Lock til en ekstra Hyper"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Caps Lock ændrer SkiftLock (påvirker alle taster)"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Caps Lock er slået fra"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Gør Caps Lock til en ekstra Ctrl"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Alt/Win-tasteopførsel"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Tilføj standardopførslen til menutasten"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt og Meta er på Alt-tasterne"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt ligger på Win-tasterne (og de normale Alt-taster)"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl ligger på Win-tasterne (og de normale Ctrl-taster)"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl ligger på Alt-tasterne, Alt ligger på Win-tasterne"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta ligger på Win-tasterne"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta ligger på venstre Win-tast"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper ligger på Win-tasterne"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt ligger på den højre Win-tast og Super på Menu"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt-tast ombyttes med Win-tast"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Position for sammensat (compose) tast"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "Tredje niveau for venstre Win"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "Tredje niveau for højre Win"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "Tredje niveau for Menu"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "Tredje niveau for venstre Ctrl"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "Tredje niveau for højre Ctrl"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "Tredje niveau for Caps Lock (lås skift)"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "Tredje niveau for &lt;Mindre end/Større end&gt;"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "Prtsc"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Diverse kompatibilitetsvalg"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Standard numerisk tastatur taster"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Numerisk tastatur indtaster altid tal (som på Mac OS)"
-#: ../rules/base.xml.in.h:1017
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Skift med numeriske taster virker som i MS Windows"
+#: ../rules/base.xml.in.h:1022
+msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
+msgstr "NumLock aktiveret: tal, skift skifter til piletaster, NumLock deaktiveret: piletaster aktiveret (som i MS Windows)"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Skift afbryder ikke Num Lock, vælger tredje niveau i steden for"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Specialtaster (Ctrl+Alt+&lt;key&gt;) håndteret i en server"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apples aluminiumstastatur: Emuler PC-taster (Udskriv, Scroll Lock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Skift afbryder Caps Lock"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Slå ekstra typografiske karakterer til"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Begge skift-taster sammen skifter Caps Lock"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Begge skift-taster sammen aktiverer Caps Lock, en Skift-tast deaktiverer"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Begge skift-taster sammen skifter SkiftLock"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Skift + NumLock skifter PointerKeys"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Tillader afbrydelsesgreb med tastaturhandlinger (advarsel: sikkerhedsrisiko)"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Tillader afbrydelsesgreb med vinduestrælogning"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Tilføjelse af valutategn til bestemte taster"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro på E"
@@ -3883,75 +3903,75 @@ msgstr "Euro på E"
# på to" mere beskrivende, selv om strengen isoleret set stadig kan være
# forvirrende. Når teksten står i en sammenhæng, er det nok ikke så
# vigtigt om det er det ene eller det andet.
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro på 2"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro på 4"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro på 5"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupee på 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Tast for at vælge femte niveau"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Højre Alt vælge femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Venstre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Højre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Brug mellemrum for at indtaste ubrydelig mellemrumskarakter"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Normal mellemrum på alle niveauer"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Ubrydelig mellemrumskarakter på andet niveau"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Ubrydelig mellemrumskarakter på tredje niveau"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Ubrydelig mellemrumskarakter på tredje niveau, intet på fjerde niveau"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Ubrydelig mellemrumskarakter på tredje niveau, tynd ubrydelig mellemrumskarakter på fjerde niveau"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Ubrydelig mellemrumskarakter på fjerde niveau"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau (via Ctrl+Skift)"
@@ -3963,84 +3983,100 @@ msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemru
# is desirable to keep the words closer together. The ZWNJ is represented in Unicode
# is U+200C, and can be represented in HTML as &#x200C;, &#8204; or &zwnj;. Kilde eng.
# wikipedia 12. maj 2010
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ombrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ombrydeligt mellemrumstegn på tredje niveau, ubrydeligt mellemrumsteng på fjerde niveau"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt på mellemrum på tredje niveau"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau, ubrydeligt mellemrumstegn (ZWNJ) på fjerde niveau"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på tredje niveau, ombrydeligt mellemrumstegn på fjerde niveau"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Japanske tastaturvalg"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Kana låsetast låser"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F-stil rettelsestast"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Gør Zenkaku Hankaku til en ekstra Esc"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1066
+msgid "Korean Hangul/Hanja keys"
+msgstr "Koreanske hangul/hanja-taster"
+
+#: ../rules/base.xml.in.h:1067
+msgid "Hardware Hangul/Hanja keys"
+msgstr "Udstyrs hangul/hanja-taster"
+
+#: ../rules/base.xml.in.h:1068
+msgid "Right Alt as Hangul, right Ctrl as Hanja"
+msgstr "Højre Alt-tast som hangul, højre Ctrl som hanga"
+
+#: ../rules/base.xml.in.h:1069
+msgid "Right Ctrl as Hangul, right Alt as Hanja"
+msgstr "Højre Ctrl-tast som hangul, højre Alt som hanja"
+
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Tilføjelse af esperanto supersigned bogstaver"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Til den tilsvarende tast på et Qwertytastatur"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Til den tilsvarende tast i et Dvoraktastatur"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Til den tilsvarende tast i et Colemaktastatur"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Vedligehold tastkompatibilitet med gamle tastkoder for Solaris"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Kompatibilitet med Suntast"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Tastsekvens for at slå X-serveren ned"
# Backspace kunne også være Slet tilbage
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Rettelsestast"
@@ -4129,255 +4165,262 @@ msgid "German (with Hungarian letters and no dead keys)"
msgstr "Tysk (med ungarske bogstaver og ingen døde taster)"
#: ../rules/base.extras.xml.in.h:26
+msgid "Polish (Germany, eliminate dead keys)"
+msgstr "Polsk (Tyskland, slå døde taster fra)"
+
+#: ../rules/base.extras.xml.in.h:27
msgid "German (Sun Type 6/7)"
msgstr "Tysk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:27
+#: ../rules/base.extras.xml.in.h:28
msgid "German (Aus der Neo-Welt)"
msgstr "Tysk (Aus der Neo-Welt)"
# Avestisk er et uddødt iransk sprog
-#: ../rules/base.extras.xml.in.h:30
+#: ../rules/base.extras.xml.in.h:31
msgid "Avestan"
msgstr "Avestisk"
-#: ../rules/base.extras.xml.in.h:33
+#: ../rules/base.extras.xml.in.h:34
msgid "Lithuanian (US Dvorak with Lithuanian letters)"
msgstr "Litauisk (US dvorak med litauiske bogstaver)"
-#: ../rules/base.extras.xml.in.h:34
+#: ../rules/base.extras.xml.in.h:35
msgid "Lithuanian (Sun Type 6/7)"
msgstr "Litauisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:37
+#: ../rules/base.extras.xml.in.h:38
msgid "Latvian (US Dvorak)"
msgstr "Lettisk (US dvorak)"
-#: ../rules/base.extras.xml.in.h:38
+#: ../rules/base.extras.xml.in.h:39
msgid "Latvian (US Dvorak, Y variant)"
msgstr "Lettisk (US dvorak, Y-variant)"
-#: ../rules/base.extras.xml.in.h:39
+#: ../rules/base.extras.xml.in.h:40
msgid "Latvian (US Dvorak, minus variant)"
msgstr "Lettisk (US dvorak, minus variant)"
-#: ../rules/base.extras.xml.in.h:40
+#: ../rules/base.extras.xml.in.h:41
msgid "Latvian (programmer US Dvorak)"
msgstr "Lettisk (programmør US dvorak)"
-#: ../rules/base.extras.xml.in.h:41
+#: ../rules/base.extras.xml.in.h:42
msgid "Latvian (programmer US Dvorak, Y variant)"
msgstr "Lettisk (programmør US dvorak, Y-variant)"
-#: ../rules/base.extras.xml.in.h:42
+#: ../rules/base.extras.xml.in.h:43
msgid "Latvian (programmer US Dvorak, minus variant)"
msgstr "Lettisk (programmør US dvorak, minus variant)"
-#: ../rules/base.extras.xml.in.h:43
+#: ../rules/base.extras.xml.in.h:44
msgid "Latvian (US Colemak)"
msgstr "Lettisk (US Colemak)"
-#: ../rules/base.extras.xml.in.h:44
+#: ../rules/base.extras.xml.in.h:45
msgid "Latvian (US Colemak, apostrophe variant)"
msgstr "Lettisk (US Colemak, apostrofvariant)"
-#: ../rules/base.extras.xml.in.h:45
+#: ../rules/base.extras.xml.in.h:46
msgid "Latvian (Sun Type 6/7)"
msgstr "Lettisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:48
+#: ../rules/base.extras.xml.in.h:49
msgid "English (US, international AltGr Unicode combining)"
msgstr "Engelsk (US, international AltGr Unicode-sammensætning)"
-#: ../rules/base.extras.xml.in.h:49
+#: ../rules/base.extras.xml.in.h:50
msgid "English (US, international AltGr Unicode combining, alternative)"
msgstr "Engelsk (US, international AltGr Unicode-sammensætning, alternativ)"
-#: ../rules/base.extras.xml.in.h:50
+#: ../rules/base.extras.xml.in.h:51
msgid "Atsina"
msgstr "Atsina"
# http://en.wikipedia.org/wiki/Interior_Salish_languages
-#: ../rules/base.extras.xml.in.h:51
+#: ../rules/base.extras.xml.in.h:52
msgid "Coeur d'Alene Salish"
msgstr "Couer d'alene Salish"
-#: ../rules/base.extras.xml.in.h:52
+#: ../rules/base.extras.xml.in.h:53
msgid "Czech Slovak and German (US)"
msgstr "Tjekkisk slovakisk og tysk (US)"
-#: ../rules/base.extras.xml.in.h:53
+#: ../rules/base.extras.xml.in.h:54
msgid "English (US, Sun Type 6/7)"
msgstr "Engelsk (US, Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:54
+#: ../rules/base.extras.xml.in.h:55
msgid "English (Norman)"
msgstr "Engelsk (norman)"
-#: ../rules/base.extras.xml.in.h:57
+#: ../rules/base.extras.xml.in.h:58
msgid "Polish (international with dead keys)"
msgstr "Polsk (international med døde taster)"
-#: ../rules/base.extras.xml.in.h:58
+#: ../rules/base.extras.xml.in.h:59
msgid "Polish (Colemak)"
msgstr "Polsk (Colemak)"
-#: ../rules/base.extras.xml.in.h:59
+#: ../rules/base.extras.xml.in.h:60
msgid "Polish (Sun Type 6/7)"
msgstr "Polsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:63
+#: ../rules/base.extras.xml.in.h:64
msgid "Crimean Tatar (Dobruja Q)"
msgstr "Krimtatarsk (Dobruja Q)"
# touchtype = blindskrift (altså at skrive uden at kigge)
-#: ../rules/base.extras.xml.in.h:64
+#: ../rules/base.extras.xml.in.h:65
msgid "Romanian (ergonomic Touchtype)"
msgstr "Rumænsk (ergonomisk maskinskrivning)"
-#: ../rules/base.extras.xml.in.h:65
+#: ../rules/base.extras.xml.in.h:66
msgid "Romanian (Sun Type 6/7)"
msgstr "Rumænsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:68
+#: ../rules/base.extras.xml.in.h:69
msgid "Serbian (combining accents instead of dead keys)"
msgstr "Serbisk (sammensætte accenter frem for døde taster)"
-#: ../rules/base.extras.xml.in.h:71
+#: ../rules/base.extras.xml.in.h:72
msgid "Church Slavonic"
msgstr "Kirkeslavisk"
-#: ../rules/base.extras.xml.in.h:72
+#: ../rules/base.extras.xml.in.h:73
msgid "Russian (with Ukrainian-Belorussian layout)"
msgstr "Russisk (med ukrainsk-hviderussisk layout)"
-#: ../rules/base.extras.xml.in.h:73
+#: ../rules/base.extras.xml.in.h:74
msgid "Russian (Sun Type 6/7)"
msgstr "Russisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:76
+#: ../rules/base.extras.xml.in.h:77
msgid "Armenian (OLPC phonetic)"
msgstr "Armensk (OLPC-fonetisk)"
# Er lidt usikker på betydningen af SIL, men antager at det drejer sig om:
# http://www.sil.org/sil/
-#: ../rules/base.extras.xml.in.h:79
+#: ../rules/base.extras.xml.in.h:80
msgid "Hebrew (Biblical, SIL phonetic)"
msgstr "Hebraisk (bibelsk, SIL-fonetik)"
-#: ../rules/base.extras.xml.in.h:82
+#: ../rules/base.extras.xml.in.h:83
msgid "Arabic (Sun Type 6/7)"
msgstr "Arabisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:85
+#: ../rules/base.extras.xml.in.h:86
msgid "Belgian (Sun Type 6/7)"
msgstr "Belgisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:88
+#: ../rules/base.extras.xml.in.h:89
msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugisisk (brasiliansk, Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:91
+#: ../rules/base.extras.xml.in.h:92
msgid "Czech (Sun Type 6/7)"
msgstr "Tjekkisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:94
+#: ../rules/base.extras.xml.in.h:95
msgid "Danish (Sun Type 6/7)"
msgstr "Dansk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:97
+#: ../rules/base.extras.xml.in.h:98
msgid "Dutch (Sun Type 6/7)"
msgstr "Hollandsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:100
+#: ../rules/base.extras.xml.in.h:101
msgid "Estonian (Sun Type 6/7)"
msgstr "Estisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:103
+#: ../rules/base.extras.xml.in.h:104
msgid "Finnish (Sun Type 6/7)"
msgstr "Finsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:105
+#: ../rules/base.extras.xml.in.h:106
msgid "French (Sun Type 6/7)"
msgstr "Fransk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:108
+#: ../rules/base.extras.xml.in.h:109
msgid "Greek (Sun Type 6/7)"
msgstr "Græsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:111
+#: ../rules/base.extras.xml.in.h:112
msgid "Italian (Sun Type 6/7)"
msgstr "Italiensk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:114
+#: ../rules/base.extras.xml.in.h:115
msgid "Japanese (Sun Type 6)"
msgstr "Japansk (Sun type 6)"
-#: ../rules/base.extras.xml.in.h:115
+#: ../rules/base.extras.xml.in.h:116
msgid "Japanese (Sun Type 7 - pc compatible)"
msgstr "Japansk (Sun type 7 - pc-kompatibel)"
-#: ../rules/base.extras.xml.in.h:116
+#: ../rules/base.extras.xml.in.h:117
msgid "Japanese (Sun Type 7 - sun compatible)"
msgstr "Japansk (Sun type 7 - sun-kompatibel)"
-#: ../rules/base.extras.xml.in.h:119
+#: ../rules/base.extras.xml.in.h:120
msgid "Norwegian (Sun Type 6/7)"
msgstr "Norsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:121
+#: ../rules/base.extras.xml.in.h:122
msgid "Portuguese (Sun Type 6/7)"
msgstr "Portugisisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:124
+#: ../rules/base.extras.xml.in.h:125
msgid "Slovak (Sun Type 6/7)"
msgstr "Slovakisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:127
+#: ../rules/base.extras.xml.in.h:128
msgid "Spanish (Sun Type 6/7)"
msgstr "Spansk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:130
+#: ../rules/base.extras.xml.in.h:131
msgid "Swedish (Dvorak A5)"
msgstr "Svensk (dvorak A5)"
-#: ../rules/base.extras.xml.in.h:131
+#: ../rules/base.extras.xml.in.h:132
msgid "Swedish (Sun Type 6/7)"
msgstr "Svensk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:133
+#: ../rules/base.extras.xml.in.h:134
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Tysk (Schweiz, Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:134
+#: ../rules/base.extras.xml.in.h:135
msgid "French (Switzerland, Sun Type 6/7)"
msgstr "Fransk (Schweiz, Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:137
+#: ../rules/base.extras.xml.in.h:138
msgid "Turkish (Sun Type 6/7)"
msgstr "Tyrkisk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:140
+#: ../rules/base.extras.xml.in.h:141
msgid "Ukrainian (Sun Type 6/7)"
msgstr "Ukrainsk (Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:142
+#: ../rules/base.extras.xml.in.h:143
msgid "English (UK, Sun Type 6/7)"
msgstr "Engelsk (UK, Sun type 6/7)"
-#: ../rules/base.extras.xml.in.h:145
+#: ../rules/base.extras.xml.in.h:146
msgid "Korean (Sun Type 6/7)"
msgstr "Koreansk (Sun type 6/7)"
#. Keyboard indicator for European layouts
-#: ../rules/base.extras.xml.in.h:147
+#: ../rules/base.extras.xml.in.h:148
msgid "eu"
msgstr "eu"
-#: ../rules/base.extras.xml.in.h:148
+#: ../rules/base.extras.xml.in.h:149
msgid "EurKEY (US based layout with european letters)"
msgstr "EurKEY (US-baseret tastatur med europæiske bogstaver)"
-#: ../rules/base.extras.xml.in.h:151
+#: ../rules/base.extras.xml.in.h:152
msgid "Mmuock"
msgstr "Mmuock"
+
+#~ msgid "Shift with numeric keypad keys works as in MS Windows"
+#~ msgstr "Skift med numeriske taster virker som i MS Windows"
diff --git a/xorg-server/xkeyboard-config/po/de.po b/xorg-server/xkeyboard-config/po/de.po
index 1225c965c..a29fe729f 100644
--- a/xorg-server/xkeyboard-config/po/de.po
+++ b/xorg-server/xkeyboard-config/po/de.po
@@ -5,17 +5,17 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.13.99\n"
+"Project-Id-Version: xkeyboard-config-2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-15 20:23+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-14 22:58+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.7.3\n"
+"X-Generator: Poedit 1.7.6\n"
#: ../rules/base.xml.in.h:1
msgid "Generic 101-key PC"
@@ -920,3088 +920,3100 @@ msgstr "Arabisch (qwerty/Ziffern)"
msgid "Arabic (Buckwalter)"
msgstr "Arabisch (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabisch (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albanisch"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albanisch (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armenisch"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armenisch (phonetisch)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armenisch (alternativ, phonetisch)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armenisch (östlich)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armenisch (westlich)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armenisch (alternativ, östlich)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Deutsch (Österreich)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Deutsch (Österreich, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Deutsch (Österreich, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Deutsch (Österreich, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Aserbaidschanisch"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Aserbaidschanisch (kyrillisch)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Weißrussisch"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Weißrussisch (veraltet)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Weißrussisch (Lateinisch)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belgisch"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belgisch (Alternative)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belgisch (Alternative, nur latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belgisch (Alternative, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belgisch (ISO-Alternative)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belgisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belgisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belgisch (Wang Modell 724, azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bangla"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengalisch (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indisch"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengalisch (Indien)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengalisch (Indien, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengalisch (Indien, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengalisch (Indien, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengalisch (Indien, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengalisch (Indien, Baishakhi Inscript)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Punjabi (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Punjabi (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (KaGaPa phonetisch)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayalam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayalam (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malayalam (verbessertes Inscript mit Rupie-Symbol)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamilisch (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamilisch (Tastatur mit Ziffern)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamilisch (TAB Schreibmaschine)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamilisch (TSCII Schreibmaschine)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamilisch"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (KaGaPa phonetisch)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdu (phonetisch)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdu (Alternative, phonetisch)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdu (Windows-Tasten)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (KaGaPa phonetisch)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanskrit (KaGaPa phonetisch)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (KaGaPa phonetisch)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Englisch (Indien, mit Rupie-Symbol)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnisch"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnisch (mit Anführungszeichen für Zitate)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnisch (mit bosnischen Digraphen)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnisch (US-Tastatur mit bosnischen Digraphen)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnisch (US-Tastatur mit bosnischen Buchstaben)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugiesisch (Brasilien)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugiesisch (Brasilien, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugiesisch (Brasilien, Dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugiesisch (Brasilien, nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugiesisch (Brasilien, Nativo für US-Tastaturen)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Portugiesisch (Brasilien, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bulgarisch"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bulgarisch (traditionell phonetisch)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bulgarisch (neu phonetisch)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabisch (Marokko)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Französisch (Marokko)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berber (Marokko, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "TBerber (Marokko, Tifinagh alternativ)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berber (Marokko, Tifinagh alternativ, phonetisch)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berber (Marokko, Tifinagh erweitert)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berber (Marokko, Tifinagh phonetisch)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berber (Marokko, Tifinagh erweitert, phonetisch)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Englisch (Kamerun)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Französisch (Kamerun)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Kamerunisch, mehrsprachig (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Kamerunisch, mehrsprachig (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Kamerunisch, mehrsprachig (Dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Burmesisch"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Französisch (Kanada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Französisch (Kanada, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Französisch (Kanada, veraltet)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Kanadisch, mehrsprachig"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Kanadisch, mehrsprachig (erster Teil)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Kanadisch, mehrsprachig (zweiter Teil)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Englisch (Kanada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Französisch (Demokratische Republik Kongo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Chinesisch"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetanisch"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetanisch (mit ASCII-Ziffern)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Uigurisch"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Kroatisch"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Kroatisch (mit Anführungszeichen für Zitate)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Kroatisch (mit kroatischen Digraphen)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Kroatisch (US-Tastatur mit kroatischen Digraphen)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Kroatisch (US-Tastatur mit kroatischen Buchstaben)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Tschechisch"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Tschechisch (mit &lt;\\|&gt;-Taste)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Tschechisch (qwerty)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Tschechisch (qwerty, erweiterter Backslash)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Tschechisch (UCW-Belegung, nur akzentuierte Buchstaben)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Tschechisch (US Dvorak mit CZ-UCW-Unterstützung)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Dänisch"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Dänisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Dänisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Dänisch (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Dänisch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Dänisch (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Niederländisch"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Niederländisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Niederländisch (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Niederländisch (Standard)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estnisch"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estnisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estnisch (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estnisch (US-Tastatur mit estnischen Buchstaben)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persisch"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persisch (mit persischem Nummernblock)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdisch (Iran, Lateinisches Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdisch (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdisch (Iran, Lateinisches Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdisch (Iran, Arabisch-Lateinisch)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Irakisch"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdisch (Irak, lateinisches Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdisch (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdisch (Irak, Lateinisches Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdisch (Irak, Arabisch-Lateinisch)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Färöisch"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Färöisch (ohne Akzenttasten)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finnisch"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finnisch (klassisch)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finnisch (klassisch, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finnisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Nördliches Saami (Finnland)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finnisch (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Französisch"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Französisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Französisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Französisch (alternativ)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Französisch (Alternative, nur latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Französisch (Alternative, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Französisch (Alternative, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Französisch (Alternative, veraltet)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Französisch (Alternative, veraltet, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Französisch (Alternative, veraltet, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Französich (Bepo, ergonomisch, Dvorak-ähnlich)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Französisch (Bepo, ergonomisch, Dvorak-ähnlich, nur latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Französisch (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Französisch (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Französisch (Bretonisch)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Okzitanisch"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Georgisch (Frankreich, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Englisch (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Englisch (Ghana, mehrsprachig)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Haussa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Englisch (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Französisch (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Georgisch"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgisch (ergonomisch)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgisch (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Russisch (Georgien)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Ossetisch (Georgien)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Deutsch"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Deutsch (Nur Acute-(')Akzentzeichen)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Deutsch (Nur Grave-(`) und Acute-(')Akzentzeichen)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Deutsch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Deutsch (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumänisch (Deutschland)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumänisch (Deutschland, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Deutsch (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Deutsch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Deutsch (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Deutsch (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Deutsch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Niedersorbisch"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Niedersorbisch (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Deutsch (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Türkisch (Deutschland)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Russisch (Deutschland, phonetisch)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Deutsch (veraltet)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Griechisch"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Griechisch (vereinfacht)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Griechisch (erweitert)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Griechisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Griechisch (polytonisch)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Ungarisch"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Ungarisch (Standard)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Ungarisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Ungarisch (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Ungarisch (101/qwertz/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Ungarisch (101/qwertz/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Ungarisch (101/qwertz/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Ungarisch (101/qwertz/Punkt/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Ungarisch (101/qwerty/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Ungarisch (101/qwerty/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Ungarisch (101/qwerty/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Ungarisch (101/qwerty/Punkt/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Ungarisch (102/qwertz/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Ungarisch (102/qwertz/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Ungarisch (102/qwertz/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Ungarisch (102/qwertz/Punkt/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Ungarisch (102/qwerty/Komma/Akzenttasten)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Ungarisch (102/qwerty/Komma/ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Ungarisch (102/qwerty/Punkt/Akzenttasten)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Ungarisch (102/qwerty/Punkt/ohne Akzenttasten)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Isländisch"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Isländisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Isländisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Isländisch (Macintosh, veraltet)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Isländisch (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Isländisch (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebräisch"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebräisch (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebräisch (phonetisch)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebräisch (Biblisch, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italienisch"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italienisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italienisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italienisch (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italienisch (US-Tastatur mit italienischen Buchstaben)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgisch (Italien)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italienisch (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japanisch"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japanisch (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japanisch (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japanisch (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japanisch (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japanisch (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirgisisch"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirgisisch (phonetisch)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Kambodscha)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kasachisch"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russisch (Kasachstan, mit Kasachisch)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kasachisch (mit russischer Belegung)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Laotisch (durch STEA vorgeschlagene Standardbelegung)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Spanisch (Lateinamerikanisch)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Spanisch (Lateinamerikanisch, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Spanisch (Lateinamerikanisch, Akzent-Tilde einschließen)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Spanisch (Lateinamerikanisch, Sun-Akzenttasten)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Spanisch (Lateinamerikanisch, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Litauisch"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Litauisch (Standard)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litauisch (US-Tastatur mit litauischen Buchstaben)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litauisch (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Litauisch (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Litauisch (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Lettisch"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Lettisch, (Apostroph-Variante)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Lettisch (Tilde-Variante)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Lettisch (F-Variante)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Lettisch (modern)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Georgisch (ergonomisch, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Lettisch (angepasst)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrinisch"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrinisch (kyrillisch)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrinisch (Kyrillisch, »З« und »Ж« vertauscht)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrinisch (lateinisch, Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrinisch (lateinische qwerty-Tastatur)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrinisch (lateinische qwerty-Tastatur, Unicode)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrinisch (Kyrillisch mit Anführungszeichen)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrinisch (lateinisch mit Anführungszeichen)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Mazedonisch"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Mazedonisch (ohne Akzenttasten)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltesisch"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltesisch (mit US-Belegung)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongolisch"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Norwegisch"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Norwegisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Norwegisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Norwegisch (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Nördliches Saami (Norwegen)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Nördliches Saami (Norwegen, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Norwegisch (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norwegisch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Norwegisch (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polnisch"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polnisch (veraltet)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polnisch (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polnisch (Dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste mit Zitatzeichen)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Kaschubisch"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Schlesisch"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russisch (Polen, phonetisch, Dvorak)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polnisch (Dvorak für Programmierer)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugiesisch"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugiesisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugiesisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugiesisch (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugiesisch (Macintosh, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugiesisch (Macintosh, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugiesisch (Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugiesisch (Nativo für US-Tastaturen)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumänisch"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumänisch (Cedilla)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumänisch (Standard)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumänisch (Standard Cedilla)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumänisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Russisch"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Russisch (phonetisch)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Russisch (phonetisch mit Windows-Tasten)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Russisch (Schreibmaschine)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Russisch (veraltet)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Russisch (Schreibmaschine, veraltet)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatarisch"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Ossetisch (veraltet)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Ossetisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Tschuwaschisch"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Tschuwaschisch (lateinische Schrift)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurtisch"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Jakutisch"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kalmykisch"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Russisch (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Russisch (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbisch (Russland)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Baschkirisch"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Russisch (AZERTY, phonetisch)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Russisch (Französisch, phonetisch)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbisch"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbisch (Kyrillisch, »З« und »Ж« vertauscht)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbisch (Lateinisch)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbisch (Lateinisch Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbisch (Lateinische qwerty-Tastatur)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbisch (lateinische qwerty-Tastatur, Unicode)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbisch (Kyrillisch mit Anführungszeichen)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbisch (Lateinisch mit Anführungszeichen)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Pannonisches Russinisch"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Slowenisch"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Slowenisch (mit Anführungszeichen für Zitate)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slowenisch (US-Tastatur mit slowenischen Buchstaben)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Slowakisch"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Slowakisch (erweiterter Backslash)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Slowakisch (qwerty)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slowakisch (qwerty, erweiterter Backslash)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Spanisch"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Spanisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Spanisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Spanisch (Akzent-Tilde einschließen)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Spanisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Spanisch (Dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturisch (Spanien, mit unterpunktetem L und H)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Katalanisch (Spanische Variante mit mittelpunktiertem L)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Spanisch (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Schwedisch"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Schwedisch (ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Schwedisch (Dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Russisch (Schweden, phonetisch)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russisch (Schweden, phonetisch, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Nördliches Saami (Schweden)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Schwedisch (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Schwedisch (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Schwedische Gebärdensprache"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Deutsch (Schweiz)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Deutsch (Schweiz, veraltet)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Deutsch (Schweiz, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Deutsch (Schweiz, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Französisch (Schweiz)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Französisch (Schweiz, ohne Akzenttasten)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Französisch (Schweiz, Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Französisch (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Deutsch (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabisch (Syrien)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syrisch"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syrisch (phonetisch)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdisch (Syrien, lateinisches Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdisch (Syrien, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdisch (Syrien, lateinisches Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadschikisch"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadschikisch (veraltet)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Sinhala (phonetisch)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilisch (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilisch (Sri Lanka, TAB Schreibmaschine)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Singhalesisch (US-Tastatur mit singhalesischen Buchstaben)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Thailändisch"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Thailändisch (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Thailändisch (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Türkisch"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Türkisch, (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Türkisch (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Türkisch (Sun-Akzenttasten)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdisch (Türkei, lateinisches Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdisch (Türkei, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdisch (Türkei, lateinisches Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Türkisch (International, mit Akzenttasten)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krimtatarisch (Türkisch Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Krimtatarisch (Türkisch F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krimtatarisch (Türkisch Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanesisch"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanesisch (indigen)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ukrainisch"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ukrainisch (phonetisch)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ukrainisch (Schreibmaschine)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainisch (Windows-Tasten)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ukrainisch (veraltet)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainisch (Standard-RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russisch (Ukraine, Standard-RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ukrainisch (homophon)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Englisch (Britisch)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Englisch (Britisch erweitert, Windows-Tasten)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Englisch (Britisch international, mit Akzenttasten)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Englisch (Britisch, Dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Englisch (Dvorak mit britischer Punktierung)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Englisch (Britisch, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Englisch (Britisch, Macintosh international)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "English (Britisch, Colemak)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Usbekisch"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Usbekisch (lateinische Schrift)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamesisch"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Koreanisch"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Koreanisch (101/104-Tasten kompatibel)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japanisch (PC-98xx-Serie)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irisch"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irisch (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabisch (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Englisch (Südafrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (falsch platziertes Semikolon und Anführungszeichen, veraltet)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalesisch"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Englisch (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Joruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharisch"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (linkshändig)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (rechtshändig)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmenisch"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmenisch (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Französisch (Mali, Alternative)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Englisch (Mali, USA Macintosh)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Englisch (Mali, USA International)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tansania)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenia)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Philippinisch"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Philippinisch (QWERTY, Baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Philippinisch (Capewell-Dvorak, Lateinisch)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Philippinisch (Capewell-Dvorak, Baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Philippinisch (Capewell-QWERF 2006, lateinisch)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Philippinisch (Capewell-QWERF 2006, Baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Philippinisch (Colemak, lateinisch)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Philippinisch (Colemak, Baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Philippinisch (Dvorak, lateinisch)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Philippinisch (Dvorak, Baybayin)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldawisch"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldauisch (Gagauz)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Wechseln in eine andere Belegung"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Rechte Alt-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Linke Alt-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Linke Windows-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Rechte Windows-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Beliebige Windows-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Feststelltaste (gedrückt halten), Alt+Feststelltaste führen die normale Feststelltasten-Aktion aus"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Rechte Strg-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Rechte Alt-Taste"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Linke Alt-Taste"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Feststelltaste"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Umschalt-+Feststelltaste"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Feststelltaste (zur ersten Belegung), Umschalttaste+Feststelltaste (zur letzten Belegung)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Linke Windows-Taste (zur ersten Belegung), rechte Windows/Menütaste (zur letzten Belegung)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Linke Strg-Taste (zur ersten Belegung), rechte Strg-Taste (zur letzten Belegung)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Feststelltaste"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Beide Umschalttasten gleichzeitig"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Beide Alt-Tasten gleichzeitig"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Beide Steuerungstasten gleichzeitig"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Strg+Umschalttaste"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Linke Strg-Taste+Linke Umschalttaste"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Rechte Strg-Taste und rechte Umschalttaste"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Strg"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Umschalttaste"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Linke Alt-Taste+Linke Umschalttaste"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Leertaste"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menü"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Linke Windows-Taste"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Windows-Taste + Leertaste"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Rechte Windows-Taste"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Linke Umschalttaste"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Rechte Umschalttaste"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Linke Strg-Taste"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Rechte Strg-Taste"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Rollen"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Linke Strg-Taste und linke Windows-Taste (zur ersten Belegung), rechte Strg-Taste und Menütaste (zur zweiten Belegung)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Taste zum Wechsel in die dritte Tastaturebene"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Beliebige Windows-Taste"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Beliebige Alt-Taste"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Rechte Alt-Taste, Umschalttaste + rechte Alt-Taste ist Compose-Taste"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Rechte Alt-Taste wählt niemals die dritte Tastaturebene."
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Eingabetaste im Nummernblock"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Backslash"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Kleiner als/größer als&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Feststelltaste wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Backslash wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Kleiner als/Größer als&gt; wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Position der Strg-Taste"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Feststelltaste als Strg-Taste"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Linke Strg-Taste als Meta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Strg-Taste und Feststelltaste vertauschen"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Links von »A«"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Unten links"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Rechte Strg-Taste wie rechte Alt-Taste"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menü als rechte Strg-Taste"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Rechte Alt-Taste als rechte Strg-Taste"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Linke Alt-Taste und linke Strg-Taste vertauschen"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Linke Win-Taste und linke Strg-Taste vertauschen"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Rechte Win-Taste und rechte Strg-Taste vertauschen"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Linke Alt als Strg, linke Strg als Win, linke Win als Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Tastatur-LED zur Anzeige der alternativen Belegung verwenden"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "NumLock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Belegung des Nummernblocks"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Veraltet"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren befinden sich in der Standardebene."
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Wang 724 (veraltet)"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren in der Standardebene"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadezimal"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "ATM/Telefonstil"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Verhalten der Löschtaste des Nummernblocks"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Veraltete Taste mit Punkt"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Veraltete Taste mit Komma"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Taste der vierten Ebene mit Punkt"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Taste der vierten Ebene mit Punkt, Latin-9-Einschränkung"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Taste der vierten Ebene mit Komma"
# momayyez? Was ist das?
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Taste der vierten Ebene mit »momayyez«"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Taste der vierten Ebene mit abstrakten Trennern"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Semikolon in der dritten Tastaturebene"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Verhalten der Feststelltaste"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste »unterbricht« Feststelltaste"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste beeinflusst Feststelltaste nicht"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste »unterbricht« Feststelltaste"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste beeinflusst Feststelltaste nicht"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Feststelltaste kehrt die normale Großschreibung alphabetischer Zeichen um"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Feststelltaste als zusätzliche NumLock-Taste verwenden"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Esc und Feststelltaste vertauschen"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Feststelltaste als zusätzliche Esc-Taste verwenden"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Feststelltaste als zusätzliche Löschtaste verwenden"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Feststelltaste als zusätzliche Super-Taste verwenden"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Feststelltaste als zusätzliche Hyper-Taste verwenden"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Feststelltaste kehrt Umschalttaste um, so dass alle Tasten beeinflusst werden"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Feststelltaste ist deaktiviert"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Verhalten der Alt/Windows-Tasten"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Standardverhalten zur Menütaste hinzufügen"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt und Meta befinden sich auf den Alt-Tasten."
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt ist den Windows-Tasten zugeordnet (und den üblichen Alt-Tasten)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Strg ist den Windows-Tasten zugeordnet (und den üblichen Strg-Tasten)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Strg ist den Alt-Tasten zugeordnet, Alt ist den Windows-Tasten zugeordnet"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta ist den Windows-Tasten zugeordnet"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta ist der linken Windows-Taste zugeordnet"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper ist den Windows-Tasten zugeordnet"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt ist der rechten Windows-Taste zugeordnet und Super der Menü-Taste."
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt-Taste ist gegen Windows-Taste vertauscht"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Position der Compose-Taste"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "Dritte Ebene der linken Windows-Taste"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "Dritte Ebene der rechten Windows-Taste"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "Dritte Ebene der Menü-Taste"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "Dritte Ebene der linken Strg-Taste"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "Dritte Ebene der rechten Strg-Taste"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "Dritte Ebene der Feststelltaste"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "Dritte Ebene von &lt;Kleiner als/größer als&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "Druck"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Verschiedene Optionen zur Kompatibilität"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Vorgegebene Nummernblocktasten"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Tasten des Nummernblocks geben immer Ziffern ein (wie bei Mac)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "NumLock an: Ziffern, Umschalttaste wechselt zu Pfeiltasten, Numlock aus: immer Pfeiltasten (wie in MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Umschalttaste deaktiviert NumLock nicht, wechselt stattdessen in die dritte Tastaturebene"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Spezialtasten für Server (Strg+Alt+&lt;Taste&gt;)"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: PC-Tasten emulieren (Druck, Scroll_Lock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Umschalttaste deaktiviert Feststelltaste"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Typographische Sonderzeichen aktivieren"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein, eine Umschalttaste deaktiviert"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Beide Umschalttasten gleichzeitig schalten ShiftLock ein und aus"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Umschalttaste + NumLock schaltet Tastaturmaus ein und aus"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Erlauben, Grabs mit Tastaturaktionen abzubrechen (Achtung: Sicherheitsrisiko)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Protokollieren von Grabs und Baumansichtsaktionen erlauben"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Währungssymbole zu verschiedenen Tasten hinzufügen"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro auf E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro auf 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro auf 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro auf 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupie-Symbol auf 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Taste zum Wechsel in die fünfte Tastaturebene"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Linke Windows-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Rechte Windows-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Leertaste zur Eingabe nicht umbrechbarer Zeichen verwenden"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Leertaste gibt in jeder Ebene stets Leerzeichen aus"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Nicht umbrechbares Leerzeichen in der zweiten Tastaturebene"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene (mit Strg + Umschalttaste)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene, nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Ebene"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Nicht verbindendes Zeichen der Breite Null in der dritten Ebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Japanische Tastaturoptionen"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Kana-Sperrtaste ist gesperrt"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Löschtaste wie NICOLA-F"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Zenkaku Hankaku als zusätzliche Esc-Taste verwenden"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Koreanische Hangul/Hanja-Tasten"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Hardware-Hangul/Hanja-Tasten"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Rechte Alt-Taste als Hangul, rechte Strg-Taste als Hanja"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Rechte Strg-Taste als Hangul, rechte Alt-Taste als Hanja"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Zeichen mit Esperanto-Circumflex hinzufügen"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Zur entsprechenden Taste einer Qwerty-Belegung."
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Zur entsprechenden Taste einer Dvorak-Belegung."
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Zur entsprechenden Taste einer Colemak-Belegung."
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Tastenkompatibilität mit veralteten Solaris-Tastencodes sicher stellen"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Sun-Tastenkompatibilität"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Tastenkombination zum erzwungenen Beenden des X-Servers"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Strg + Alt + Löschtaste"
diff --git a/xorg-server/xkeyboard-config/po/es.po b/xorg-server/xkeyboard-config/po/es.po
index 25a45d4d3..163e6962d 100644
--- a/xorg-server/xkeyboard-config/po/es.po
+++ b/xorg-server/xkeyboard-config/po/es.po
@@ -1,17 +1,16 @@
-# translation of xkeyboard-config-2.11.99.po to Spanish
+# translation of xkeyboard-config-2.14.99.po to Spanish
# This file is distributed under the same license as the xkeyboard-config package.
# Copyright (C) 2006 The free software foundation
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
-# Facundo Dario Illanes <fdillanes@gmail.com>, 2013, 2014.
-# Facundo Dario Illanes <fdillanes@gmail.com>, 2014.
+# Facundo Dario Illanes <fdillanes@gmail.com>, 2013, 2014, 2015.
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.12.99\n"
+"Project-Id-Version: xkeyboard-config-2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2014-09-18 23:46+0100\n"
-"PO-Revision-Date: 2014-09-19 16:54-0300\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-21 18:12-0300\n"
"Last-Translator: Facundo Dario Illanes <fdillanes@gmail.com>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
"Language: es\n"
@@ -758,11 +757,11 @@ msgid "Htc Dream phone"
msgstr "Teléfono HTC Dream"
#. Keyboard indicator for English layouts
-#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:47
msgid "en"
msgstr "en"
-#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:48
msgid "English (US)"
msgstr "Inglés (EE. UU.)"
@@ -820,7 +819,7 @@ msgid "English (programmer Dvorak)"
msgstr "Inglés (Dvorak de programador)"
#. Keyboard indicator for Russian layouts
-#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:69
+#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:70
msgid "ru"
msgstr "ru"
@@ -853,7 +852,7 @@ msgid "English (Workman, international with dead keys)"
msgstr "Inglés (Workman, internacional con teclas muertas)"
#. Keyboard indicator for Persian layouts
-#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:28
+#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:29
msgid "fa"
msgstr "fa"
@@ -892,11 +891,11 @@ msgid "Uzbek (Afghanistan, OLPC)"
msgstr "Uzbeco (Afganistán, OLPC)"
#. Keyboard indicator for Arabic layouts
-#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:80
+#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:81
msgid "ar"
msgstr "ar"
-#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:81
+#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:82
msgid "Arabic"
msgstr "Árabe"
@@ -924,3065 +923,3101 @@ msgstr "Árabe (qwerty/dígitos)"
msgid "Arabic (Buckwalter)"
msgstr "Árabe (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Árabe (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albanés"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albanés (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:74
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armenio"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armenio (fonético)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armenio (alternativo fonético)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armenio (oriental)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armenio (occidental)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armenio (alternativo oriental)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Alemán (Austria)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Alemán (Austria, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Alemán (Austria, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Alemán (Austria, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Azerbaijaní"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Azerbajaní (cirílico)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Bielorruso"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Bielorruso (arcaico)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Bielorruso (latino)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:83
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belga"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belga (alternativo)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belga (alternativo, sólo latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belga (alternativo, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belga (alternativo ISO)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belga (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belga (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belga (modelo azerty 724 de Wang)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bangladesh"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengalí (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indio"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengalí (India)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengalí (India, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengalí (India, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengalí (India, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengalí (India, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengalí (India, Inscript Baishakhi)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Panyabí (gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Panyabí (gurmukhi jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Canarés (fonético KaGaPa)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayalam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayalam (lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malayalam (Inscript mejorado con signo de rupia)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamil (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamil (teclado con números)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamil (máquina de escribir TAB)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamil (máquina de escribir TSCII)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamil"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (fonético KaPaGa)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdu (fonético)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdu (fonético alternativo)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdu (teclas Windows)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (fonético KaGaPa)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sánscrito (fonético KaGaPa)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Maratí (fonético KaGaPa)"
# no entiendo por que este mensaje aparece como difuso
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Inglés (India, con signo de rupia)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnio"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnio (usar guillemots para comillas)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnio (con dígrafos bosnios)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnio (teclado de EE. UU. con dígrafos bosnios)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnio (teclado de EE. UU. con letras bosnias)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:86
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugués (Brasil)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugués (Brasil, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugués (Brasil, Dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugués (Brasil, Nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugués (Brasil, Nativo para teclados de EE. UU.)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (Brasil, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Búlgaro"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Búlgaro (fonética tradicional)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Búlgaro (fonética nueva)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Árabbe (Marruecos)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Francés (Marruecos)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Bereber (Marruecos, tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Bereber (Marruecos, alternativo tifinagh)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Bereber (Marruecos, alternativo fonético tifinagh)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Bereber (Marruecos, tifinagh extendido)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Bereber (Marruecos, tifinagh fonético)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Bereber (Marruecos, tifinagh fonético extendido)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:149
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Inglés (Camerún)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Francés (Camerún)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Camerunés multilingüe (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Camerunés multilingüe (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Camerunés multilingüe (Dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Burmese"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Francés (Canadá)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Francés (Canadá, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Francés (Canadá, arcaico)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Canadiense multilingüe"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Canadiense multilingüe (primera parte)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Canadiense multilingüe (segunda parte)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Inglés (Canadá)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Francés (República Democrática del Congo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Chino"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetano"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetano (con numerales ASCII)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Uigur"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Croata"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Croata (usar guillemots para comillas)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Croata (con dígrafos croatas)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Croata (teclado de EE. UU. con dígrafos croatas)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Croata (teclado de EE. UU. con letras croatas)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:89
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Checo"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Checo (con tecla «\\|»)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Checo (qwery)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Checo (qwerty, contrabarra extendida)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Checo (distribución UCW, sólo teclas con tilde)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:92
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Danés"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Danés (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Danés (teclas Windows)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Danés (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Danés (Macintosh, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Danés (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:95
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Holandés"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Holandés (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Holandés (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Holandés (estándar)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:98
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estonio"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estonio (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estonio (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estonio (teclado EE. UU. con letras estonias)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:29
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persa"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persa (con teclado numérico persa)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdo (Irán latino Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdo (Irán, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdo (Irán, latino Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdo (Irán, arábigolatino)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Iraquí"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdo (Irak, latino Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdo (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdo (Irak, latino Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdo (Irak, arábigolatino)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Faroés"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Faroés (eliminar teclas muertas)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finlandés"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finlandés (clásico)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finlandés (clásico, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finlandés (teclas Windows)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Lapón del norte (Finlandia)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finlandés (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Francés"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Francés (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Francés (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Francés (alternativo)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Francés (alternativo, sólo latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Francés (alternativo, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Francés (alternativo, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Francés (arcaico, alternativo)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Francés (arcaico, alternativo, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Francés (arcaico, alternativo, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Francés (bepo, ergonómico, forma Dvorak)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Francés (bepo, ergonómico, forma Dvorak, sólo latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Francés (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Francés (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Francés (bretón)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occitano"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Georgiano (Francia, AZERTY tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Inglés (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Inglés (Ghana, multilingüe)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Inglés (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Francés (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Georgiano"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgiano (ergonómico)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgiano (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Ruso (Georgia)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Osetio (Georgia)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Alemán"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Alemán (acento muerto)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Alemán (acento grave muerto)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Alemán (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Alemán (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumano (Alemania)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumano (Alemania, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Alemán (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Alemán (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Alemán (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Alemán (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Alemán (Macintosh, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Bajo sorbio"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Bajo sorbio (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Alemán (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turco (Alemania)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Ruso (Alemania, fonético)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Alemán (arcaico)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Griego"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Griego (simple)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Griego (extendido)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Griego (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Griego (politónico)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Húngaro"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Húngaro (estándar)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Húngaro (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Húngaro (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Húngaro (101/qwertz/coma/teclas muertas)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Húngaro (101/qwertz/coma/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Húngaro (101/qwertz/punto/teclas muertas)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Húngaro (101/qwertz/punto/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Húngaro (101/qwerty/coma/teclas muertas)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Húngaro (101/qwerty/coma/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Húngaro (101/qwerty/punto/teclas muertas)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Húngaro (101/qwerty/punto/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Húngaro (102/qwertz/coma/teclas muertas)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Húngaro (102/qwertz/coma/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Húngaro (102/qwertz/punto/teclas muertas)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Húngaro (102/qwertz/punto/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Húngaro (102/qwerty/coma/teclas muertas)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Húngaro (102/qwerty/coma/eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Húngaro (102/qwerty/punto/teclas muertas)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Húngaro (102/qwerty/punto/eliminar teclas muertas)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandés"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandés (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandés (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandés (Macintosh, arcaico)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandés (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandés (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:77
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebreo"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebreo (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebreo (fonético)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebreo (bíblico, tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italiano"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italiano (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italiano (teclas Windows)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italiano (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italiano (teclado EE. UU. con letras italianas)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgiano (Italia)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italiano (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japones"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japonés (kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japonés (kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japonés (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japonés (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japonés (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirguí"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirguí (fonético)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Camboya)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazajo"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Ruso (Kazajstán, con kazajo)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazajo (con ruso)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (distribución propuesta STEA estándar)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:125
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Español (latinoamericano)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Español (latinoamericano, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Español (latinoamericano, incluir tilde muerta)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Español (latinoamericano, teclas muertas de Sun)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Español (latinoamericano, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:31
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Lituano"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Lituano (estándar)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Lituano (teclado de EE. UU. con letras lituanas)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Lituano (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Lituano (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Lituano (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:35
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Letón"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Letón (variante con apóstrofo)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Letón (variante virgulilla)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Letón (variante de letra F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Letón (moderno)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Letón (ergonómico, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Letón (adaptado)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maorí"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:66
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrino"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrino (cirílico)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrino (cirílico, ZE y ZHE intercambiados)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrino (latino Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrino (latino qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrino (latino Unicode qwerty)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrino (cirílico con guillemots)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrino (latino con guillemots)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Macedonio"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedonio (eliminar teclas muertas)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltés"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltés (con distribución para EE. UU.)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongol"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:117
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Noruego"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Noruego (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Noruego (teclas Windows)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Noruego (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Lapón del norte (Noruega)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Lapón del norte (Noruego, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Noruego (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Noruego (Macintosh, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Noruego (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polaco"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polaco (arcaico)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polaco (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polaco (Dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polaco (Dvorak, comillas polacas en la tecla de comillas)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polaco (Dvorak, comillas polacas en la tecla 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Casubio"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Silesiano"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Ruso (Polonia, Dvorak fonético)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polaco (Dvorak de programador)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:120
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugués"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugués (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugués (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugués (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugués (Macintosh, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugués (Macintosh, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugués (Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugués (Nativo para teclados de EE. UU.)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:60
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumano"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumano (cedilla)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumano (estándar)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumano (cedilla estándar)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumano (teclas Windows)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:70
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Ruso"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Ruso (fonético)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Ruso (fonético con teclas Windows)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Ruso (máquina de escribir)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Ruso (arcaico)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Ruso (máquina de escribir, arcaico)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Osetio (arcaico)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Osetio (teclas Windows)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Chuvash"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Cuvash (latino)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurto"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Yakuto"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Calmuco"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Ruso (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Ruso (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbio (Rusia)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Bashkiriano"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:701
+msgid "Russian (phonetic azerty)"
+msgstr "Ruso (fonético azerty)"
+
+#: ../rules/base.xml.in.h:702
+msgid "Russian (phonetic French)"
+msgstr "Ruso (fonético francés)"
+
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbio"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbio (cirílico, ZE y ZHE intercambiados)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbio (latino)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbio (latino Unicode)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbio (latino qwerty)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbio (latino Unicode qwerty)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbio (cirílico con guillemots)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbio (latino con guillemots)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Rusino de Panonia"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Esloveno"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Esloveno (con guillemots para comillas)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Esloveno (teclado EE. UU. con letras eslovenas)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:715 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Eslovaco"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Eslovaco (contrabarra extendida)"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Eslovaco (qwerty)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Eslovaco (qwerty, contrabarra extendida)"
-#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Español"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Español (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Español (teclas Windows)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Español (incluir tilde muerta)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Español (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Español (Dvorak)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturiano (España, con H y L con punto bajo)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalán (España, con L con punto medio)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Español (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:128
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:730 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Sueco"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Sueco (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Sueco (Dvorak)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Ruso (sueco, fonético)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Ruso (sueco, fonético, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Lapón del norte (Suecia)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Sueco (Macintosh)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Sueco (Svdvorak)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Lenguaje de signos sueco"
-#: ../rules/base.xml.in.h:739 ../rules/base.extras.xml.in.h:132
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Alemán (Suiza)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Alemán (Suiza, arcaico)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Alemán (Suiza, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Alemán (Suiza, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Francés (Suiza)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francés (Suiza, eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francés (Suiza, teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Francés (Suiza, Macintosh)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Alemán (Suiza, Macintosh)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Árabe (Siria)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Sirio"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Sirio (fonético)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdo (Siria, latino Q)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdo (Siria, F)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdo (Siria, latino Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:758
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tajico"
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tajico (arcaico)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Cingalés (fonético)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamil (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamil (Sri Lanka, máquina de escribir TAB)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Cingalés (teclado EE. UU. con letras cingalesas)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Tailandés"
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Tailandés (TIS-820.2538)"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Tailandés (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:135
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turco"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turco (F)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turco (Alt-Q)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turco (teclas muertas de Sun)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdo (Turquía, latino Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdo (Turquía, F)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdo (Turquía, latino Alt-Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turco (internacional con teclas muertas)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Tártaro de Crimea (Q turca)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Tártaro de Crimea (F turca)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Tártaro de Crimea (Alt-Q turca)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanés"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanés (autóctono)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwán)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:791 ../rules/base.extras.xml.in.h:138
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ucraniano"
-#: ../rules/base.xml.in.h:793
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ucraniano (fonético)"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ucraniano (máquina de escribir)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ucraniano (teclas Windows)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ucraniano (arcaico)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ucraniano (estándar RSTU)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Ruso (ucraniano estándar RSTU)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ucraniano (homofónico)"
-#: ../rules/base.xml.in.h:800 ../rules/base.extras.xml.in.h:141
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Inglés (RU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Inglés (RU, extendido con teclas Windows)"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Inglés (RU, internacional con teclas muertas)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Inglés (RU, Dvorak)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Inglés (RU, Dvorak con puntuación para RU)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Inglés (RU, Macintosh)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Inglés (RU, Macintosh internacional)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Inglés (RU, Colemak)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Uzbeco"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Uzbeco (latino)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamita"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:814 ../rules/base.extras.xml.in.h:143
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:815 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Coreano"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Coreano (101/104 teclas compatible)"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japonés (series PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irlandés"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "Cló Gaelach"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irlandés (UnicodeExperto)"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogam (IS434)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistán)"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistán, CRULP)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistán, NLA)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Árabe (Pakistán)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:831
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:834
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Inglés (Sudáfrica)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Estonio (punto y coma y comilla desplazadas, obsoleto)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalí"
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Inglés (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:849
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharico"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (zurdo)"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (diestro)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmenistano"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmenistano (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Francés (Malí, alternativo)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Inglés (Malí, Macintosh de EE. UU.)"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Inglés (Malí, EE. UU. internacional)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzania)"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenia)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipino"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (QWERTY baybayin)"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipino (Capewell-Dvorak latino)"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipino (Capewell-Dvorak baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipino (Capewell-QWERF 2006 latino)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipino (Capewell-QWERF 2006 baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipino (Colemak latino)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipino (Colemak baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipino (Dvorak latino)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipino (Dvorak baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldavo"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldavo (Gagauzia)"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Cambiar a otra distribución"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Alt derecho (mientras está pulsado)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Alt izquierdo (mientras está pulsado)"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Tecla Windows izquierda (al pulsarla)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "La tecla Windows (mientras está pulsada)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Cualquier tecla Windows (al pulsarla)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Bloq Mayús (al pulsarse), Alt+Bloq Mayús realiza la acción original de bloqueo de mayúsculas"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Ctrl derecho (mientras está pulsado)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Alt derecho"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Alt izquierdo"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Bloqueo de mayúsculas"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Mayús+Bloq Mayús"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Bloq Mayús (a la primera distribución), Mayús+Bloq Mayús (a la última distribución)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Win izquierdo (a la primera distribución), Win/Menu derecho (a la última distribución)"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ctrl izquierdo (a la primera distribución), Ctrl derecho (a la última distribución)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Bloq Mayús"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Ambas teclas Mayús juntas"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Ambas teclas Alt juntas"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Ambas teclas Ctrl juntas"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Mayús"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Ctrl izquierdo + Mayús izquierdo"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Ctrl derecho + Mayús derecho"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Mayús"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Alt izquierdo + Mayús izquierdo"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Espacio"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Win izquierdo"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Tecla Windows + espaciadora"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Windows derecho"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Mayús izquierdo"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Mayús derecho"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Ctrl izquierdo"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Ctrl derecho"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Bloq Despl"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ctrl izquierdo + Ctrl derecho (a la primera distribución), Ctrl derecho + Menú (a la segunda distribución)"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Tecla para seleccionar el tercer nivel"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Cualquier tecla Windows"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Cualquier tecla Alt"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "La tecla Alt derecho, Mayús+Alt derecho es tecla Componer"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "La tecla Alt derecho nunca elige el tercer nivel"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Intro en el teclado numérico"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Contrabarra"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Menor que/Mayor que&gt;"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Bloq Mayús elige el tercer nivel, actúa como un bloqueo de una sola vez al pulsarse junto con otro selector de tercer nivel"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Contrabarra elige el tercer nivel, bloquea solo una vez al pulsarse junto con otro selector de tercer nivel"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Menor que/Mayor que&gt; elige el 3º nivel, bloquea solo una vez al pulsarse junto con otro selector de 3º nivel"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Posición de la tecla Ctrl"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Bloq Mayús como Ctrl"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Ctrl izquierdo como Meta"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Intercambiar Ctrl y Bloq Mayús"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "A la izquierda de la «A»"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "En la parte inferior izquierda"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Ctrl derecho como Alt derecho"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menú como Ctrl derecho"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Alt derecho como Ctrl derecho"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Intercambiar tecla Alt Izquierda con tecla Ctrl Izquierda"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Intercambiar tecla Windows Izquierda con tecla Ctrl Izquierda"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Intercambiar tecla Windows Derecha con tecla Ctrl Derecha"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Tecla Alt como tecla Ctrl, Tecla Ctrl izquierda como tecla Windows, tecla Windows como tecla Alt"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Usar LED del teclado para mostrar la distribución alternativa"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Bloq Num"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Distribución del teclado numérico "
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Arcaico"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Adiciones Unicode (flechas y operadores matemáticos)"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Adiciones Unicode (flechas y operadores matemáticos; operadores matemáticos en el nivel predeterminado)"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Wang 724 arcaico"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos; operadores matemáticos en el nivel predeterminado)"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadecimal"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "Estilo de cajero automático ó teléfono"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Comportamiento de la tecla Supr del teclado numérico"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Tecla arcaica con punto"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Tecla arcaica con coma"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Tecla de cuarto nivel con punto"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Tecla de cuarto nivel con punto, restricción latin-9"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Tecla de cuarto nivel con coma"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Tecla de cuarto nivel con momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Tecla de cuarto nivel con separadores abstractos"
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Punto y coma en tercer nivel"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Comportamiento de Bloq Mayús"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Bloq Mayús usa la capitalización interna; Mayús «pausa» el Bloq Mayús"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Bloq Mayús usa la capitalización interna; Mayús no afecta a Bloq Mayús"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús «pausa» Bloq Mayús"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús no afecta a Bloq Mayús"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Bloq Mayús cambia la capitalización normal de los caracteres alfabéticos"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Hacer de Bloq Mayús un Bloq Num adicional"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Intercambiar ESC y Bloq Mayús"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Hacer de Bloq Mayús un Esc adicional"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Hacer de Bloq Mayús un Retroceso adicional"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Hacer de Bloq Mayús un Super adicional"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Hacer de Bloq Mayús un Hyper adicional"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Bloq Mayús cambia Mayús de forma que todas las teclas están afectadas"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Bloq Mayús está desactivado"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Hacer de Bloq Mayús un Ctrl adicional"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Comportamiento de la tecla Alt/Windows"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Añadir el comportamiento estándar a la tecla Menú."
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt y Meta están en las teclas Alt"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt está mapeada en las teclas Windows (y las teclas Alt usuales)"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control está mapeada en las teclas Windows (y las teclas Ctrl usuales)"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control está mapeada en las teclas Alt, Alt está mapeado en las teclas Windows"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta está mapeada a las teclas Windows"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta está mapeada a la tecla Windows izquierdo"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper está mapeada a las teclas Windows"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt está mapeada a la tecla Windows derecho y Super a la tecla Menú"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt está cambiado con la tecla Windows"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Posición de la tecla Componer"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "3er nivel de tecla windows izquierda"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "3er nivel de tecla windows derecha"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "3er nivel de tecla Menu"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "3er nivel de Ctrl izquierdo"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "3er nivel de Control derecho"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "3er nivel de tecla Bloq Mayús"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "3er nivel de &lt;Menor que/Mayor que&gt;"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pausa"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Opciones misceláneas de compatiblidad"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Teclas del teclado numérico predeterminado"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Las teclas del teclado numérico siempre introducen dígitos (como en Mac OS)"
-#: ../rules/base.xml.in.h:1017
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Mayús con las teclas del teclado numérico funcionan como en MS Windows"
+#: ../rules/base.xml.in.h:1022
+msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
+msgstr "Bloq Num encendido: dígitos, Mayús cambia a teclas con flecha, Block Num apagado: siempre teclas con flecha (como en MS Windows)"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Mayús no cancela Bloq Num, en su lugar elije el 3er nivel"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Teclado de aluminio de Apple: emular teclas PC (Imprimir, Bloq Despl, Pausa, Bloq Num)"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Mayús cancela Bloq Mayús"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Activar caracteres tipográficos adicionales"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús, una tecla Mayús lo desactiva"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Shift + Bloq Num cambia las teclas de flechas"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Permitir tomar interrupciones con el teclado (Peligro: riesgos de seguridad)"
# dice literalmente "árbol" he visto que se utiliza como sinónimo de servidor.
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Permitir tomar y loguearse al árbol windows"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Añadir símbolo de divisa a algunas teclas"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro en la E"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro en el 2"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro en el 4"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro en el 5"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupia en el 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Tecla para seleccionar el 5o nivel"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Menor que/Mayor que&gt; elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Usar la tecla espacio para introducir un carácter de espacio no separable"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Espacio usual en cualquier nivel"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Carácter de espacio no separable en el segundo nivel"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Carácter de espacio no separable en el tercer nivel"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Carácter de espacio no separable en el tercer nivel, carácter de espacio estrecho no separable en el cuarto nivel"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Carácter de espacio no separable en el cuarto nivel"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel (a través de Ctrl+Mayús)"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel, caracter de espacio no separable en el cuarto nivel"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio de anchura cero rompible («ZWJ») en el cuarto nivel"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio estrecho no separable en el cuarto nivel"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el tercer nivel, carácter de anchura cero rompible («ZWJ») en el cuarto nivel"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Opciones de teclado japonés"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "La tecla Bloq Kana está bloqueando"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Retroceso estilo NICOLA-F"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Hacer de Zenkaku Hankaku un Esc adicional"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1066
+msgid "Korean Hangul/Hanja keys"
+msgstr "Hangul koreano/ teclas Hanja"
+
+#: ../rules/base.xml.in.h:1067
+msgid "Hardware Hangul/Hanja keys"
+msgstr "Hardware Hangul/ teclas Hanja"
+
+#: ../rules/base.xml.in.h:1068
+msgid "Right Alt as Hangul, right Ctrl as Hanja"
+msgstr "Alt derecho para Hangul, Ctrl derecho para Hanja"
+
+#: ../rules/base.xml.in.h:1069
+msgid "Right Ctrl as Hangul, right Alt as Hanja"
+msgstr "Ctrl derecho para Hangul, Alt derecho para Hanja"
+
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Añadir las tildes del esperanto"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "A la tecla correspondiente en un teclado Qwerty."
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "A la tecla correspondiente en un teclado Dvorak."
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "A la tecla correspondiente en un teclado Colemak."
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Mantener compatibilidad de teclas con los viejos códigos de Solaris"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Compatibilidad con tecla Sun"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Secuencia de teclas para matar el servidor X"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Control + Alt + Retroceso"
@@ -4071,256 +4106,263 @@ msgid "German (with Hungarian letters and no dead keys)"
msgstr "Alemán (con letras húngaras y sin teclas muertas)"
#: ../rules/base.extras.xml.in.h:26
+msgid "Polish (Germany, eliminate dead keys)"
+msgstr "Rumano (Alemán, teclas muertas eliminadas)"
+
+#: ../rules/base.extras.xml.in.h:27
msgid "German (Sun Type 6/7)"
msgstr "Alemán (Sun tipo 6/7)"
# literalmente: "Desde el nuevo mundo"
-#: ../rules/base.extras.xml.in.h:27
+#: ../rules/base.extras.xml.in.h:28
msgid "German (Aus der Neo-Welt)"
msgstr "Alemán (Aus der Neo-Welt)"
-#: ../rules/base.extras.xml.in.h:30
+#: ../rules/base.extras.xml.in.h:31
msgid "Avestan"
msgstr "Avéstico"
-#: ../rules/base.extras.xml.in.h:33
+#: ../rules/base.extras.xml.in.h:34
msgid "Lithuanian (US Dvorak with Lithuanian letters)"
msgstr "Lituano (Dvorak de EE. UU. con letras lituanas)"
-#: ../rules/base.extras.xml.in.h:34
+#: ../rules/base.extras.xml.in.h:35
msgid "Lithuanian (Sun Type 6/7)"
msgstr "Lituano (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:37
+#: ../rules/base.extras.xml.in.h:38
msgid "Latvian (US Dvorak)"
msgstr "Letón (Dvorak de EE. UU.)"
-#: ../rules/base.extras.xml.in.h:38
+#: ../rules/base.extras.xml.in.h:39
msgid "Latvian (US Dvorak, Y variant)"
msgstr "Letón (Dvorak de EE. UU., variante Y)"
-#: ../rules/base.extras.xml.in.h:39
+#: ../rules/base.extras.xml.in.h:40
msgid "Latvian (US Dvorak, minus variant)"
msgstr "Letón (Dvorak de EE. UU., variante menos)"
-#: ../rules/base.extras.xml.in.h:40
+#: ../rules/base.extras.xml.in.h:41
msgid "Latvian (programmer US Dvorak)"
msgstr "Letón (programador, Dvorak de EE. UU.)"
-#: ../rules/base.extras.xml.in.h:41
+#: ../rules/base.extras.xml.in.h:42
msgid "Latvian (programmer US Dvorak, Y variant)"
msgstr "Letón (programador, Dvorak de EE. UU., variante Y)"
-#: ../rules/base.extras.xml.in.h:42
+#: ../rules/base.extras.xml.in.h:43
msgid "Latvian (programmer US Dvorak, minus variant)"
msgstr "Letón (programador, Dvorak de EE. UU., variante menos)"
-#: ../rules/base.extras.xml.in.h:43
+#: ../rules/base.extras.xml.in.h:44
msgid "Latvian (US Colemak)"
msgstr "Letón (Colemak EE.UU.)"
-#: ../rules/base.extras.xml.in.h:44
+#: ../rules/base.extras.xml.in.h:45
msgid "Latvian (US Colemak, apostrophe variant)"
msgstr "Letón (Colemak EE.UU., variante con apóstrofo)"
-#: ../rules/base.extras.xml.in.h:45
+#: ../rules/base.extras.xml.in.h:46
msgid "Latvian (Sun Type 6/7)"
msgstr "Letón (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:48
+#: ../rules/base.extras.xml.in.h:49
msgid "English (US, international AltGr Unicode combining)"
msgstr "Inglés (EE. UU., internacional combinando Unicode por AltGr)"
-#: ../rules/base.extras.xml.in.h:49
+#: ../rules/base.extras.xml.in.h:50
msgid "English (US, international AltGr Unicode combining, alternative)"
msgstr "Inglés (EE. UU., internacional combinando Unicode por AltGr, alternativo)"
-#: ../rules/base.extras.xml.in.h:50
+#: ../rules/base.extras.xml.in.h:51
msgid "Atsina"
msgstr "Atsina"
-#: ../rules/base.extras.xml.in.h:51
+#: ../rules/base.extras.xml.in.h:52
msgid "Coeur d'Alene Salish"
msgstr "Cœur d’Alene Salish"
-#: ../rules/base.extras.xml.in.h:52
+#: ../rules/base.extras.xml.in.h:53
msgid "Czech Slovak and German (US)"
msgstr "Checo Eslovaco y Alemán (EE.UU)"
-#: ../rules/base.extras.xml.in.h:53
+#: ../rules/base.extras.xml.in.h:54
msgid "English (US, Sun Type 6/7)"
msgstr "Inglés (EE. UU, Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:54
+#: ../rules/base.extras.xml.in.h:55
msgid "English (Norman)"
msgstr "Inglés (Norman)"
-#: ../rules/base.extras.xml.in.h:57
+#: ../rules/base.extras.xml.in.h:58
msgid "Polish (international with dead keys)"
msgstr "Polaco (internacional con teclas muertas)"
-#: ../rules/base.extras.xml.in.h:58
+#: ../rules/base.extras.xml.in.h:59
msgid "Polish (Colemak)"
msgstr "Polaco (Colemak)"
-#: ../rules/base.extras.xml.in.h:59
+#: ../rules/base.extras.xml.in.h:60
msgid "Polish (Sun Type 6/7)"
msgstr "Polaco (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:63
+#: ../rules/base.extras.xml.in.h:64
msgid "Crimean Tatar (Dobruja Q)"
msgstr "Tártaro de Crimea (Dobruca Q)"
-#: ../rules/base.extras.xml.in.h:64
+#: ../rules/base.extras.xml.in.h:65
msgid "Romanian (ergonomic Touchtype)"
msgstr "Rumanía (tipo de pulsación ergonómica)"
-#: ../rules/base.extras.xml.in.h:65
+#: ../rules/base.extras.xml.in.h:66
msgid "Romanian (Sun Type 6/7)"
msgstr "Rumano (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:68
+#: ../rules/base.extras.xml.in.h:69
msgid "Serbian (combining accents instead of dead keys)"
msgstr "Serbio (combinar tildes en lugar de teclas muertas)"
-#: ../rules/base.extras.xml.in.h:71
+#: ../rules/base.extras.xml.in.h:72
msgid "Church Slavonic"
msgstr "Eslavo eclesiástico"
-#: ../rules/base.extras.xml.in.h:72
+#: ../rules/base.extras.xml.in.h:73
msgid "Russian (with Ukrainian-Belorussian layout)"
msgstr "Ruso (con distribución ucraniana y bielorrusa)"
-#: ../rules/base.extras.xml.in.h:73
+#: ../rules/base.extras.xml.in.h:74
msgid "Russian (Sun Type 6/7)"
msgstr "Ruso (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:76
+#: ../rules/base.extras.xml.in.h:77
msgid "Armenian (OLPC phonetic)"
msgstr "Armenio (OLPC fonético)"
-#: ../rules/base.extras.xml.in.h:79
+#: ../rules/base.extras.xml.in.h:80
msgid "Hebrew (Biblical, SIL phonetic)"
msgstr "Hebreo (bíblico, fonética SIL)"
-#: ../rules/base.extras.xml.in.h:82
+#: ../rules/base.extras.xml.in.h:83
msgid "Arabic (Sun Type 6/7)"
msgstr "Árabe (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:85
+#: ../rules/base.extras.xml.in.h:86
msgid "Belgian (Sun Type 6/7)"
msgstr "Belga (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:88
+#: ../rules/base.extras.xml.in.h:89
msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Portugués (Brasil, Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:91
+#: ../rules/base.extras.xml.in.h:92
msgid "Czech (Sun Type 6/7)"
msgstr "Checo (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:94
+#: ../rules/base.extras.xml.in.h:95
msgid "Danish (Sun Type 6/7)"
msgstr "Danés (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:97
+#: ../rules/base.extras.xml.in.h:98
msgid "Dutch (Sun Type 6/7)"
msgstr "Holandés (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:100
+#: ../rules/base.extras.xml.in.h:101
msgid "Estonian (Sun Type 6/7)"
msgstr "Estonio (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:103
+#: ../rules/base.extras.xml.in.h:104
msgid "Finnish (Sun Type 6/7)"
msgstr "Finlandés (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:105
+#: ../rules/base.extras.xml.in.h:106
msgid "French (Sun Type 6/7)"
msgstr "Francés (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:108
+#: ../rules/base.extras.xml.in.h:109
msgid "Greek (Sun Type 6/7)"
msgstr "Griego (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:111
+#: ../rules/base.extras.xml.in.h:112
msgid "Italian (Sun Type 6/7)"
msgstr "Italiano (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:114
+#: ../rules/base.extras.xml.in.h:115
msgid "Japanese (Sun Type 6)"
msgstr "Japonés (Sun tipo 6)"
-#: ../rules/base.extras.xml.in.h:115
+#: ../rules/base.extras.xml.in.h:116
msgid "Japanese (Sun Type 7 - pc compatible)"
msgstr "Japonés (Sun tipo 7 - compatible con PC)"
-#: ../rules/base.extras.xml.in.h:116
+#: ../rules/base.extras.xml.in.h:117
msgid "Japanese (Sun Type 7 - sun compatible)"
msgstr "Japonés (Sun tipo 7 - compatible con Sun)"
-#: ../rules/base.extras.xml.in.h:119
+#: ../rules/base.extras.xml.in.h:120
msgid "Norwegian (Sun Type 6/7)"
msgstr "Noruego (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:121
+#: ../rules/base.extras.xml.in.h:122
msgid "Portuguese (Sun Type 6/7)"
msgstr "Portugués (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:124
+#: ../rules/base.extras.xml.in.h:125
msgid "Slovak (Sun Type 6/7)"
msgstr "Eslovaco (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:127
+#: ../rules/base.extras.xml.in.h:128
msgid "Spanish (Sun Type 6/7)"
msgstr "Español (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:130
+#: ../rules/base.extras.xml.in.h:131
msgid "Swedish (Dvorak A5)"
msgstr "Sueco (Dvorak A5)"
-#: ../rules/base.extras.xml.in.h:131
+#: ../rules/base.extras.xml.in.h:132
msgid "Swedish (Sun Type 6/7)"
msgstr "Sueco (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:133
+#: ../rules/base.extras.xml.in.h:134
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Alemán (Suiza, Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:134
+#: ../rules/base.extras.xml.in.h:135
msgid "French (Switzerland, Sun Type 6/7)"
msgstr "Francés (Suiza, Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:137
+#: ../rules/base.extras.xml.in.h:138
msgid "Turkish (Sun Type 6/7)"
msgstr "Turco (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:140
+#: ../rules/base.extras.xml.in.h:141
msgid "Ukrainian (Sun Type 6/7)"
msgstr "Ucraniano (Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:142
+#: ../rules/base.extras.xml.in.h:143
msgid "English (UK, Sun Type 6/7)"
msgstr "Inglés (UK, Sun tipo 6/7)"
-#: ../rules/base.extras.xml.in.h:145
+#: ../rules/base.extras.xml.in.h:146
msgid "Korean (Sun Type 6/7)"
msgstr "Coreano (Sun tipo 6/7)"
#. Keyboard indicator for European layouts
-#: ../rules/base.extras.xml.in.h:147
+#: ../rules/base.extras.xml.in.h:148
msgid "eu"
msgstr "eu"
-#: ../rules/base.extras.xml.in.h:148
+#: ../rules/base.extras.xml.in.h:149
msgid "EurKEY (US based layout with european letters)"
msgstr "EurKEY (teclado estadounidense con letras europeas)"
# raro dialecto africano en http://som.mmouck.org pueden conseguir un libro en inglés donde explican un poco más. Ni siquiera el nombre del idioma está suficientemente fijado
-#: ../rules/base.extras.xml.in.h:151
+#: ../rules/base.extras.xml.in.h:152
msgid "Mmuock"
msgstr "Mmuock"
+#~ msgid "Shift with numeric keypad keys works as in MS Windows"
+#~ msgstr "Mayús con las teclas del teclado numérico funcionan como en MS Windows"
+
#~ msgid "Bengali"
#~ msgstr "Bengalí"
diff --git a/xorg-server/xkeyboard-config/po/fr.po b/xorg-server/xkeyboard-config/po/fr.po
index 10345ee27..397a00b1e 100644
--- a/xorg-server/xkeyboard-config/po/fr.po
+++ b/xorg-server/xkeyboard-config/po/fr.po
@@ -9,10 +9,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.13.99\n"
+"Project-Id-Version: xkeyboard-config 2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-18 21:29+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-15 12:02+0200\n"
"Last-Translator: Jean-Philippe Guérard <jean-philippe.guerard@corbeaunoir.org>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
@@ -934,3189 +934,3201 @@ msgstr "Arabe (qwerty/chiffres)"
msgid "Arabic (Buckwalter)"
msgstr "Arabe (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabe (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albanais"
# https://en.wikipedia.org/wiki/Albanian_keyboard_layout
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albanais (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Arménien"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Arménien (phonétique)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Arménien (variante, phonétique)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Arménien (orientale)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Arménien (occidentale)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Arménien (variante, orientale)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Allemand (Autriche)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Allemand (Autriche, sans touche morte)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Allemand (Autriche, touches mortes Sun)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Allemand (Autriche, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Azéri"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Azéri (cyrillique)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Biélorusse"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Biélorusse (obsolète)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Biélorusse (latin)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belge"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belge (variante)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belge (variante, Latin-9 uniquement)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belge (variante, touches mortes Sun)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belge (variante ISO)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belge (sans touche morte)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belge (touches mortes Sun)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belge (Wang modèle 724 azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengali"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengali (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indien"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengali (Inde)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengali (Inde, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengali (Inde, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengali (Inde, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengali (Inde, Uni Gitanjali)"
# InScript = Indian Script
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengali (Inde, Inscript Baishakhi)"
# https://fr.wikipedia.org/wiki/Meitei
# http://tabish.freeshell.org/eeyek/
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Meitei (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Gujar%C3%A2t%C3%AE
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujarâtî"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Penjabi (Gurmukhî)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Penjabi
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Penjabi (Gurmukhî, Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kannada
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (phonétique KaGaPa)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Malay%C3%A2lam
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayâlam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayâlam (lalitha)"
# https://secure.wikimedia.org/wikipedia/en/wiki/InScript_keyboard
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malayâlam (Inscript amélioré avec le symbole monétaire Roupie)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamoul (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamoul (clavier avec chiffres)"
# TAB et TSCII sont des codages tamouls.
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamoul (machine à écrire, TAB)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamoul (machine à écrire, TSCII)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tamoul
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamoul"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
# https://secure.wikimedia.org/wikipedia/fr/wiki/T%C3%A9lougou
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Télougou"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Télougou (phonétique KaGaPa)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Ourdou (phonétique)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Ourdou (variante, phonétique)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Ourdou (touches Windows)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Hindi
# http://indlinux.org/wiki/index.php/BolNagri
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (phonétique KaGaPa)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanscrit (phonétique KaGaPa)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (phonétique KaGaPa)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Anglais (Inde, avec le symbole Roupie)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosniaque"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosniaque (guillemets typographiques à la place des guillemets simples)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosniaque (utilise les digraphes bosniaques)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosniaque (clavier US avec digraphes bosniaques)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosniaque (clavier US avec lettres bosniaques)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugais (Brésil)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugais (Brésil, sans touche morte)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugais (Brésil, Dvorak)"
# https://secure.wikimedia.org/wikipedia/en/wiki/Dvorak_Simplified_Keyboard#Other_languages
# http://tecladobrasileiro.com.br/images/stories/br-nativo/br-nativo-simples.svg
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugais (Brésil, Nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugais (Brésil, Nativo pour claviers US)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Espéranto (Brésil, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bulgare"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bulgare (phonétique, traditionnel)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bulgare (phonétique, nouveau)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabe (Maroc)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Français (Maroc)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berbère (Maroc, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berbère (Maroc, variante Tifinagh)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berbère (Maroc, variante Tifinagh phonétique)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berbère (Maroc, Tifinagh étendu)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berbère (Maroc, Tifinagh phonétique)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berbère (Maroc, Tifinagh étendu phonétique)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Cameroun
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Anglais (Cameroun)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Français (Cameroun)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Cameroun multilingue (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Cameroun multilingue (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Cameroun multilingue (Dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Birman"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Français (Canada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Français (Canada, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Français (Canada, obsolète)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Canadien multilingue"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Canadien multilingue (première partie)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Canadien multilingue (seconde partie)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Inuktitut
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Anglais (Canada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Français (République démocratique du Congo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Chinois"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibétain"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibétain (avec chiffres ASCII)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ou%C3%AFghour
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Ouïghour"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Croate"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Croate (guillemets typographiques au lieu des guillemets simples)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Croate (avec les digraphes croates)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Croate (clavier US avec digraphes croates)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Croate (clavier US avec lettres croates)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Tchèque"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Tchèque (avec la touche &lt;\\|&gt;)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Tchèque (qwerty)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Tchèque (qwerty, barre oblique inverse étendue)"
# http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README
# http://www.ucw.cz/
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Tchèque (disposition UCW, lettres accentuées seulement)"
# http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README
# http://www.ucw.cz/
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Tchèque (Dvorak US avec support UCW CZ)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Danois"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Danois (sans touche morte)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Danois (Touches Windows)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Danois (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Danois (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Danois (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Néerlandais"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Néerlandais (touches mortes Sun)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Néerlandais (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Néerlandais (standard)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estonien"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estonien (sans touche morte)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estonien (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estonien (clavier US avec lettres estoniennes)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Persan
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persan"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persan (avec pavé numérique persan)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurde (Iran, Q latin)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurde (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurde (Iran, Alt-Q latin)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurde (Iran, arabe-latin)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Irakien"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurde (Irak, Q latin)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurde (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurde (Irak, Alt-Q latin)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurde (Irak, arabe-latin)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Féroïen"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Féroïen (sans touche morte)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finnois"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finnois (classique)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finnois (classique, sans touche morte)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finnois (Touches Windows)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Sami du Nord (Finlande)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finnois (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Français"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Français (sans touche morte)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Français (touches mortes Sun)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Français (variante)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Français (variante, Latin-9 uniquement)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Français (variante, sans touche morte)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Français (variante, touches mortes Sun)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Français (variante obsolète)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Français (variante obsolète, sans touche morte)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Français (variante obsolète, touches mortes Sun)"
# http://bepo.fr
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Français (Bépo, ergonomique, façon Dvorak)"
# http://bepo.fr
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Français (Bépo, ergonomique, façon Dvorak, Latin-9 uniquement)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Français (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Français (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Français (breton)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occitan"
# As the name suggests, this layout is based on French AZERTY keyboard. The layout is based on the Georgian AZERTY layout model by Georgian language and localizaton expert Vasil "Tskapo" Kekelia.
#
# http://www.gakartuleba.org/layouts/index.php
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Géorgien (France, azerty Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Anglais (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Anglais (Ghana, multilingue)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Éwé"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
# https://secure.wikimedia.org/wikipedia/en/wiki/Fula_language
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Peul"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
# Langue du Ghana.
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Haoussa
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Haoussa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
# http://www.gillbt.org/
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Anglais (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Français (Guinée)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Géorgien"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Géorgien (ergonomique)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Géorgien (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Russe (Géorgie)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Ossète (Géorgie)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Allemand"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Allemand (accent aigu en touche morte)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Allemand (accents aigu et grave en touches mortes)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Allemand (sans touche morte)"
# https://de.wikipedia.org/wiki/ISO/IEC_9995
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Allemand (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Roumain (Allemagne)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Roumain (Allemagne, sans touche morte)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Allemand (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Allemand (touches mortes Sun)"
# https://secure.wikimedia.org/wikipedia/en/wiki/Keyboard_layout#Neo
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Allemand (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Allemand (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Allemand (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Bas-sorabe"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Bas-sorabe
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Bas-sorabe (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Allemand (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turc (Allemagne)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Russe (Allemagne, phonétique)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Allemand (obsolète)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Grec"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Grec (simple)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Grec (étendu)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Grec (sans touche morte)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Diacritiques_de_l%27alphabet_grec
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Grec (polytonique)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Hongrois
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Hongrois"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Hongrois (standard)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Hongrois (sans touche morte)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Hongrois (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Hongrois (101, qwertz, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Hongrois (101, qwertz, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Hongrois (101, qwertz, point, touches mortes)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Hongrois (101, qwertz, point, sans touche morte)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Hongrois (101, qwerty, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Hongrois (101, qwerty, virgule, sans touche morte)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Hongrois (101, qwerty, point, touches mortes)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Hongrois (101, qwerty, point, sans touche morte)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Hongrois (102, qwertz, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Hongrois (102, qwertz, virgule, sans touche morte)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Hongrois (102, qwertz, point, touches mortes)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Hongrois (102, qwertz, point, sans touche morte)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Hongrois (102, qwerty, virgule, touches mortes)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Hongrois (102, qwerty, virgule, sans touche morte)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Hongrois (102, qwerty, point, touches mortes)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Hongrois (102, qwerty, point, sans touche morte)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Islandais
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandais"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandais (touches mortes Sun)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandais (sans touche morte)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandais (Macintosh, obsolète)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandais (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandais (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hébreu"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hébreu (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hébreu (phonétique)"
# http://wiki.jewishliturgy.org/Hebrew_Font_and_Keyboard_Layout_Setup
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hébreu (biblique, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italien"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italien (sans touche morte)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italien (touche Windows)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italien (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italien (clavier US avec lettres italiennes)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Géorgien (Italie)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italien (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japonais"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japonais (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japonais (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japonais (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japonais (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japonais (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kirghize_%28langue%29
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirghize"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirghize (phonétique)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Khmer
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Cambodge)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazakh"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakhstan
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russe (Kazakhstan, avec kazakh)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazakh (avec russe)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Lao_%28langue%29
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
# STEA = Agence pour la science, la technologie et l'environnement.
# http://www.clear-vu.com.hk/resources/lao_keyboard.asp
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (disposition proposée par la STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Espagnol (Amérique latine)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Espagnol (Amérique latine, sans touche morte)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Espagnol (Amérique latine, y compris la touche morte tilde)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Espagnol (Amérique latine, touches mortes Sun)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Espagnol (Amérique latine, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Lituanien
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Lituanien"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Lituanien (standard)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Lituanien (clavier US avec lettres lituaniennes)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Lituanien (IBM LST 1205-92)"
# http://lekp.info/LithuanianErgonomic
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Lituanien (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Lituanien (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Letton"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Letton (variante apostrophe)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Letton (variante tilde)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Letton (variante F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Letton (moderne)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Letton (ergonomique, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Letton (adapté)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mont%C3%A9n%C3%A9grin
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Monténégrin"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Monténégrin (cyrillique)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Monténégrin (cyrillique, ZE et ZHE intervertis)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Monténégrin (Unicode latin)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Monténégrin (qwerty latin)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Monténégrin (qwerty Unicode latin)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Monténégrin (cyrillique avec guillemets)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Monténégrin (latin avec guillemets)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mac%C3%A9donien
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Macédonien"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Macédonien (sans touche morte)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Maltais
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltais"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltais (avec disposition US)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mongol
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongol"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Norv%C3%A9gien
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Norvégien"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Norvégien (sans touche morte)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Norvégien (Touches Windows)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Norvégien (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Sami du Nord (Norvège)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Sami du Nord (Norvège, sans touche morte)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Norvégien (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norvégien (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Norvégien (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Polonais
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polonais"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polonais (obsolète)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polonais (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polonais (Dvorak)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Disposition_Dvorak
#
# Sur le clavier Dvorak, les guillemets sont sur une seule et même touche.
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polonais (Dvorak, guillemets polonais sur la touche guillemets)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polonais (Dvorak, guillemets polonais sur le « 1 »)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Cachoube
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Cachoube"
# https://fr.wikipedia.org/wiki/Sil%C3%A9sien_%28langue_slave%29
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Silésien"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russe (Pologne, Dvorak phonétique)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polonais (Dvorak pour le programmeur)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugais"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugais (sans touche morte)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugais (touches mortes Sun)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugais (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugais (Macintosh, sans touche morte)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugais (Macintosh, touches mortes Sun)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugais (PT-Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugais (Nativo pour claviers US)"
# http://tecladobrasileiro.com.br/index.php?option=com_content&task=view&id=20&Itemid=62
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Espéranto (Portugal, PT-Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Roumain
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Roumain"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Roumain (cédille)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Roumain (standard)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Roumain (standard, cédille)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Roumain (touche Windows)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Russe"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Russe (phonétique)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Russe (phonétique, touches Windows)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Russe (machine à écrire)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Russe (obsolète)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Russe (machine à écrire, obsolète)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Ossète (obsolète)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Ossète (touches Windows)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Chuvash"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tchouvache
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Tchouvache (latin)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Oudmourte"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Komi_%28langue%29
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Iakoute
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Iakute"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Russe (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Russe (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbe (Russe)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Bachkir
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Bachkir"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Mari_%28langue%29
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Russe (azerty phonétique)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Russe (français phonétique)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbe"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbe (cyrillique, ZE et ZHE intervertis)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbe (Latin)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbe (latin, Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbe (latin, qwerty)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbe (latin, Unicode, qwerty)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbe (cyrillique avec guillemets)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbe (Latin avec guillemets)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Ruthène pannonien"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Slov%C3%A8ne
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Slovène"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Slovène (guillemets typographiques à la place des guillemets simples)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovène (clavier US avec lettres slovènes)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Slovaque
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Slovaque"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Slovaque (barre oblique inverse étendue)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Slovaque (qwerty)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovaque (qwerty, barre oblique inverse étendue)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Espagnol"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Espagnol (sans touche morte)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Espagnol (touches Windows)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Espagnol (y compris la touche morte tilde)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Espagnol (touches mortes Sun)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Espagnol (Dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturien (Espagne, avec H point bas et L point bas)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalan (Espagne, avec L point médian)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Espagnol (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Su%C3%A9dois
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Suédois"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Suédois (sans touche morte)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Suédois (Dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Russe (Suède, phonétique)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russe (Suède, phonétique, sans touche morte)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Sami du Nord (Suède)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Suédois (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Suédois (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Langue des signes suédoise"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Allemand (Suisse)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Allemand (Suisse, obsolète)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Allemand (Suisse, sans touche morte)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Allemand (Suisse, touches mortes Sun)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Français (Suisse)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Français (Suisse, sans touche morte)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Français (Suisse, touches mortes Sun)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Français (Suisse, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Allemand (Suisse, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabe (Syrie)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Syriaque
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syriaque"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syriaque (phonétique)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurde (Syrie, Q latin)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurde (Syrie, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurde (Syrie, Alt-Q latin)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tadjik
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadjik"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadjik (obsolète)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Cingalais (phonétique)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamoul (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamoul (Sri Lanka, machine à écrire, TAB)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Cingalais (clavier US avec lettres cingalaises)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tha%C3%AF_%28langue%29
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Thaï"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Thaï (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Thaï (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Turc
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turc"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turc (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turc (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turc (touches mortes Sun)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurde (Turquie, Q latin)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurde (Turquie, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurde (Turquie, Alt-Q latin)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turc (international avec touches mortes)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Tatar de Crimée (Q turc)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Tatar de Crimée (F turc)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Tatar de Crimée (Alt-Q turc)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taïwanais"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taïwanais (indigène)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taïwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ukrainien
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ukrainien"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ukrainien (phonétique)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ukrainien (machine à écrire)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainien (touches Windows)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ukrainien (obsolète)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainien (RSTU standard)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russe (Ukraine, RSTU standard)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ukrainien (homophonique)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Anglais (Royaume-Uni)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Anglais (Royaume-Uni, touche Windows étendue)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Anglais (Royaume-Uni, international, avec touches mortes)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Anglais (Royaume-Uni, Dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Anglais (Royaume-Uni, Dvorak, ponctuation britannique)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Anglais (Royaume-Uni, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Anglais (Royaume-Uni, Macintosh international)"
# http://colemak.com/
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Anglais (Royaume-Uni, Colemak)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ouzbek
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Ouzbek"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Ouzbek (latin)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamien"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Coréen"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Coréen (compatible 101/104 touches)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japonais (PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irlandais"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "Cló Gaelach"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irlandais (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Ourdou
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Ourdou (Pakistan)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Ourdou (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Ourdou (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabe (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Sindhi
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhî"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Divehi"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Anglais (Afrique du Sud)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Espéranto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Espéranto (point-virgule et guillemets simples déplacés, obsolète)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
# https://secure.wikimedia.org/wikipedia/fr/wiki/N%C3%A9palais
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Népalais"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Anglais (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Igbo
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Yoruba
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharique"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Wolof_%28langue%29
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (main gauche)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (main droite)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Turkm%C3%A8ne
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmène"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmène (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Français (Mali, variante)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Anglais (Mali, Macintosh US)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Anglais (Mali, US international)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzanie)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Swahili
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenya)"
# Langue bantoue.
# https://secure.wikimedia.org/wikipedia/fr/wiki/Kikuyu_%28langue%29
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Tswana
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipino"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (baybayin, qwerty)"
# http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipino (Capewell-Dvorak, latin)"
# http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipino (Capewell-Dvorak, baybayin)"
# http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipino (Capewell-QWERF 2006, latin)"
# http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipino (Capewell-QWERF 2006, baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipino (Colemak, latin)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipino (Colemak, baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipino (Dvorak, latin)"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Baybayin
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipino (Dvorak, baybayin)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldave"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
# https://fr.wikipedia.org/wiki/Gagaouze
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldave (Gagaouze)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Passage à une autre disposition"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Alt droite (si enfoncé)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Alt gauche (si enfoncé)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Windows gauche (si enfoncé)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Windows droite (si enfoncé)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "N'importe quelle touche Windows (enfoncée)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Verr. maj. (si enfoncé), Alt+Verr. maj. joue le rôle original de Verr. maj."
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Ctrl droite (si enfoncé)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Alt droite"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Alt gauche"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Verr. maj."
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Maj.+ Verr. maj."
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Verr. maj. (première disposition), Maj.+Verr. maj. (dernière disposition)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Touche Windows gauche (première disposition), touche Windows droite (dernière disposition)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ctrl gauche (première disposition), Ctrl droit (dernière disposition)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Verr. maj."
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Les deux Maj. ensemble"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Les deux Alt ensemble"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Les deux Ctrl ensemble"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Maj."
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Ctrl gauche+Maj. gauche"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Ctrl droite + Maj. droite"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Maj."
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Alt gauche+Maj. gauche"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Espace"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Touche Windows gauche"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Windows+Espace"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Windows droite"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Maj. gauche"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Maj. droite"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Ctrl gauche"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Ctrl droite"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Arrêt défilement"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ctrl gauche + Windows gauche (première disposition), Ctrl droit + Menu (seconde disposition)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Touche sélectionnant le niveau 3"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "N'importe quelle touche Windows"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "N'importe quelle touche Alt"
# https://secure.wikimedia.org/wikipedia/fr/wiki/Touche_compose
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Alt droite, Maj. + Alt droite est la touche compose"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Alt droite ne sélectionne jamais le niveau 3"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Entrée sur le pavé numérique"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Barre oblique inverse"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Plus petit/Plus grand&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Verr. maj. sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "La barre oblique inverse sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Position de la touche Ctrl"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Verr. maj. comme Ctrl"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Ctrl gauche comme Méta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Intervertir Ctrl et Verr. maj."
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "À gauche du « A »"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "En bas à gauche"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Ctrl droite comme Alt droite"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu comme Ctrl droite"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Alt droite comme Ctrl droite"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Échange Alt. gauche et Ctrl gauche"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Échange Win gauche et Ctrl gauche"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Échange Win droite et Ctrl droite"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Alt. gauche pour Ctrl, Ctrl pour Win, Win gauche pour Alt."
# https://bugzilla.gnome.org/show_bug.cgi?id=518156
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Utiliser les voyants du clavier pour indiquer une disposition alternative"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Verr. Num."
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Disposition du pavé numérique"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Obsolète"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Ajouts Unicode (opérateurs mathématiques et flèches)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Ajouts Unicode (opérateurs mathématiques et flèches ; opérateurs mathématiques au niveau par défaut)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Wang 724 (clavier obsolète)"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 avec ajouts Unicode (opérateurs mathématiques et flèches)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Wang 724 avec ajouts Unicode (opérateurs mathématiques et flèches ; opérateurs mathématiques au niveau par défaut)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadécimal"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "Clavier de type téléphonique"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Comportement de la touche de Suppr. du pavé numérique"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Touche obsolète avec point"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Touche obsolète avec virgule"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Touche à quatre niveaux avec point"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Touche à quatre niveaux avec point, Latin-9 uniquement"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Touche à quatre niveaux avec virgule"
# Le momayyez est le séparateur décimal perse.
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Touche à quatre niveaux avec le séparateur décimal momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Touche à quatre niveaux avec le séparateur décimal abstrait"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Point-virgule au niveau 3"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Comportement de la touche Verr. maj."
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Verr. maj. utilise la mise en majuscule interne ; Maj. annule temporairement Verr. maj."
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Verr. maj. utilise la mise en majuscule interne ; Maj. n'a pas d'effet sur Verr. maj."
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Verr. maj. agit comme un verrouillage de maj ; Maj. l'annule temporairement"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Verr. maj. agit comme Maj. quand il est verrouillé ; Maj. n'a pas d'effet sur verr. Maj."
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Verr. maj. active ou désactive la mise en majuscule usuelle des caractères alphabétiques"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Faire de Verr. maj. un Verr. Num. supplémentaire"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Intervertir Échap. et Verr. maj."
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Faire de Verr. maj. un Échap. supplémentaire."
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Faire de Verr. maj. un Effacement. arriière supplémentaire."
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Faire de Verr. maj. un Super supplémentaire."
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Faire de Verr. maj. un Hyper supplémentaire"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Verr. maj. bascule le blocage majuscule (affecte toutes les touches)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Verr. maj. est désactivé"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Faire de Verr. maj. un Ctrl supplémentaire."
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Comportement des touches Alt et Windows"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Ajouter du comportement standard à la touche Menu"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt et Meta sont sur les touches Alt"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt est placé sur les touches Windows (et les touches Alt habituelles)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl est placé sur les touches Windows (et les touches Ctrl habituelles)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl est placé sur les touches Alt, Alt sur les touches Windows"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Méta est placé sur les touches Windows"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Méta est placé sur Windows gauche"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper est placé sur les touches Windows"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt est placé sur Windows droite, Super sur Menu"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt échangé avec Windows"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Position de la touche Compose"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "Niveau 3 de la touche Windows de gauche"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "Niveau 3 de la touche Windows de droite"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "Niveau 3 de menu"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "Niveau 3 de la touche Ctrl de gauche"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "Niveau 3 de la touche Ctrl de droite"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "Niveau 3 de Verr. Maj."
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "Niveau 3 de &lt;Plus petit/Plus grand&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "Impr. Écr."
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Diverses options de compatibilité"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Touches du pavé numérique par défaut"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Les touches du pavé numérique sont toujours numériques (comme sur Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "Verr. maj. activé : chiffres ; maj. pour les flèches. Verr. maj. désactivé : flèches (comme Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Maj. n'annule pas Verr. maj., mais sélectionne le niveau 3"
# https://help.ubuntu.com/7.04/user-guide/C/prefs-hardware.html
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Les combinaisons spéciales (Ctrl+Alt+&lt;touche&gt;) sont traitées par le serveur X"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Clavier aluminium Apple : émulation des touches PC (Impr. écr. ; défil. ; pause ; Verr. Num.)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Maj. annule Verr. maj."
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Active des caractères typographiques supplémentaires"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Les deux touches Maj. activent ou désactivent Verr. maj."
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Les deux touches Maj. activent le verrouillage majuscule, une le désactive"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Les deux touches Maj. activent ou désactivent le blocage majuscule"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Maj. + VerrNum bascule le contrôle souris au clavier (PointerKeys) "
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Autorise des actions clavier à casser les captures (attention : faille de sécurité)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Autorise l'enregistrement des captures et arborescences de fenêtres"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Ajout des signes monétaires sur certaines touches"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro sur le E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro sur le 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro sur le 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro sur le 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Roupie sur le 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Touche sélectionnant le niveau 5"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Alt droite sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Windows gauche sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Windows droite sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur du niveau 5"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Utiliser la barre d'espacement pour insérer une espace insécable"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "L'espace habituelle quelque-soit le niveau"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Espace insécable au niveau 2"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Espace insécable au niveau 3"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Espace insécable au niveau 3, rien au niveau 4"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Espace insécable au niveau 3, espace fine insécable au niveau 4"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Espace insécable au niveau 4"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Espace insécable au niveau 4, espace fine insécable au niveau 6"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Espace insécable au niveau 4, espace fine insécable au niveau 6 (via Ctrl+Maj.)"
# http://hapax.qc.ca/glossaire.htm
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Antiliant à chasse nulle au niveau 2"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Antiliant à chasse nulle au niveau 2, liant à chasse nulle au niveau 3"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2, liant à chasse nulle au niveau 3, espace insécable au niveau 4"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, rien au niveau 4"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, liant à chasse nulle au niveau 4"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, espace fine insécable au niveau 4"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Antiliant à chasse nulle au niveau 3, liant à chasse nulle au niveau 4"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Options des claviers japonais"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "La touche « verrouillage Kana » verrouille"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Eff. Arr. du type NICOLA-F"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Faire du Zenkaku Hankaku un Échap. supplémentaire."
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Touches Hangeul/Hanja coréennes"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Touches Hangeul/Hanja matérielles"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Alt droite pour le Hangeul, Ctrl droite pour le Hanja"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Ctrl droite pour le Hangeul, Alt droite pour le Hanja"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Ajout des lettres accentuées Espéranto"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Vers la touche correspondante sur une disposition Qwerty."
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Vers la touche correspondante sur une disposition Dvorak."
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Vers la touche correspondante sur une disposition Dvorak."
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Rester compatible avec les anciens code clavier Solaris"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Compatibilité avec les touches Sun"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Séquence de touches pour tuer le serveur X"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Eff. arrière"
diff --git a/xorg-server/xkeyboard-config/po/gl.po b/xorg-server/xkeyboard-config/po/gl.po
index a038779d2..38aeef537 100644
--- a/xorg-server/xkeyboard-config/po/gl.po
+++ b/xorg-server/xkeyboard-config/po/gl.po
@@ -7,11 +7,11 @@
# Marcos Lans <marcoslansgarza@gmail.com>, 2015.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.13.99\n"
+"Project-Id-Version: xkeyboard-config 2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-24 12:10+0100\n"
-"Last-Translator: Marcos Lans <marcoslansgarza@gmail.com>\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-15 16:54+0100\n"
+"Last-Translator: marcos <marcoslansgarza@gmail.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
@@ -924,3087 +924,3099 @@ msgstr "Árabe (qwerty/díxitos)"
msgid "Arabic (Buckwalter)"
msgstr "Árabe (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Árabe (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albanés"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albanés (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armenio"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armenio (fonético)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armenio (alternativa fonética)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armenio (oriental)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armenio (occidental)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armenio (alternativa oriental)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Alemán (Austria)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Alemán (Austria, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Alemán (Austria, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Alemán (Austria, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Azerbaixaní"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Azerbaxaní (cirílico)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Bielorruso"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Bielorruso (herdado)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Bielorruso (latino)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belga"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belga (alternativa)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belga (alternativa, só latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belga (alternativa, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belga (alternativa ISO)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belga (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belga (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belga (modelo azerti 724 de Wang)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengalí"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengalí (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indio"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengalí (India)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengalí (India, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengalí (India, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengalí (India, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengalí (India, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengalí (India, Inscript Baishakhi)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Guxarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Panyabí (gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Panyabí (gurmukhi jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (KaGaPa fonético)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayalam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayalam (lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malaio (Inscript mellorado con signo de rupia)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Orixa"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamil (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamil (teclado con números)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamil (máquina de escribir TAB)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamil (máquina de escribir TSCII)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamil"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (KaGaPa fonético)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdú (fonético)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdú (fonético alternativo)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdú (teclas Windows)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (KaGaPa fonético)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sánscrito (KaGaPa fonético)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (KaGaPa fonético)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Inglés (India, con signo de rupia)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnio"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnio (con comiñas para citas)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnio (usar dígrafos bosnios)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnio (teclado de EE. UU. con dígrafos bosnios)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnio (teclado de EE. UU. con letras bosnias)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugués (Brasil)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugués (Brasil, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugués (Brasil, Dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugués (Brasil, nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugués (Brasil, nativo para teclados de EE. UU.)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (Brasil, nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Búlgaro"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Búlgaro (fonética tradicional)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Búlgaro (fonética nova)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Árabbe (Marrocos)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Francés (Marrocos)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Bereber (Marrocos, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Bereber (Marrocos, alternativa tifinagh)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Bereber (Marrocos, alternativa fonética tifinagh)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Bereber (Marrocos, tifinagh estendido)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Bereber (Marrocos, tifinagh fonético)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Bereber (Marrocos, tifinagh fonético estendido)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Inglés (Camerún)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Francés (Camerún)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Camerunés multilingüe (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Camerunés multilingüe (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Camerunés multilingüe (azerty)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Burmese"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Francés (Canadá)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Francés (Canadá, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Francés (Canadá, herdado)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Canadiense multilingüe"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Canadiense multilingüe (primera parte)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Canadiense multilingüe (segunda parte)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Inglés (Canadá)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Francés (República Democrática do Congo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Chinés"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetano"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetano (con numerais ASCII)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Uigur"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Croata"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Croata (con comiñas para citas)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Croata (usar dígrafos croatas)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Croata (teclado de EE. UU. con dígrafos croatas)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Croata (teclado de EE. UU. con letras croatas)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Checo"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Checo (con tecla «\\|»)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Checo (qwery)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Checo (qwerty, contrabarra estendida)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Checo (distribución UCW, só teclas con til)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Danés"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Danés (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Danés (Macintosh)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Danés (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Danés (Macintosh, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Danés (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Holandés"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Holandés (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Holandés (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Holandés (estándar)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estoniano"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estoniano (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estoniano (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estonio (teclado EE. UU. con letras estonianas)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persa"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persa (con teclado persa)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdo (Irán latino Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdo (Irán, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdo (Irán, latino Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdo (Irán, arábigolatino)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Iraquí"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdo (Irak, latino Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdo (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdo (Irak, latino Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdo (Irak, arábigolatino)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Faroés"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Faroés (eliminar teclas mortas)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finlandés"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finlandés (clásico)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finlandés (clásico, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finlandés (teclas Windows)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Lapón do norte (Finlandia)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finlandés (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Francés"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Francés (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Francés (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Francés (alternativa)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Francés (alternativa, só latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Francés (alternativa, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Francés (alternativa, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Francés (herdado, alternativa)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Francés (herdado, alternativa, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Francés (herdado, alternativa, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Francés (bepo, ergonómico, forma Dvorak)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Francés (bepo, ergonómico, forma Dvorak, só latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Francés (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Francés (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Francés (bretón)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occitano"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Georgiano (Francia, AZERTY tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Inglés (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Inglés (Ghana, multilingüe)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Inglés (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Francés (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Xeorxiano"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgiano (ergonómico)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgiano (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Ruso (Xeorxia)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Osetio (Xeorxia)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Alemán"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Alemán (acento morto)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Alemán (acento grave morto)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Alemán (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Alemán (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumano (Alemania)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumano (Alemania, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Alemán (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Alemán (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Alemán (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Alemán (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Alemán (Macintosh, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Baixo sorbio"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Baixo sorbio (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Alemán (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turco (Alemaña)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Ruso (Alemania, fonético)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Alemán (herdado)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Grego"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Grego (simple)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Grego (estendido)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Grego (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Grego (politónico)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Húngaro"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Húngaro (estándar)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Húngaro (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Húngaro (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Húngaro (101/qwertz/coma/teclas mortas)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Húngaro (101/qwertz/coma/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Húngaro (101/qwertz/punto/teclas mortas)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Húngaro (101/qwertz/punto/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Húngaro (101/qwerty/coma/teclas mortas)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Húngaro (101/qwerty/coma/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Húngaro (101/qwerty/punto/teclas mortas)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Húngaro (101/qwerty/punto/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Húngaro (102/qwertz/coma/teclas mortas)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Húngaro (102/qwertz/coma/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Húngaro (102/qwertz/punto/teclas mortas)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Húngaro (102/qwertz/punto/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Húngaro (102/qwerty/coma/teclas mortas)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Húngaro (102/qwerty/coma/eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Húngaro (102/qwerty/punto/teclas mortas)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Húngaro (102/qwerty/punto/eliminar teclas mortas)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandés"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandés (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandés (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandés (Macintosh, herdado)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandés (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandés (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebreo"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebreo (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebreo (fonético)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebreo (bíblico, tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italiano"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italiano (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italiano (teclas Windows)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italiano (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italiano (teclado EE. UU. con letras italianas)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgiano (Italia)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italiano (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Xaponés"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Xaponés (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Xaponés (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Xaponés (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Xaponés (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Xaponés (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirguí"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirguí (fonético)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Camboia)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazajo"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Ruso (Kazajstán, con kazajo)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazajo (con ruso)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (distribución proposta STEA estándar)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Español (latinoamericano)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Español (latinoamericano, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Español (latinoamericano, incluír til morta)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Español (latinoamericano, teclas mortas de Sun)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Español (latinoamericano, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Lituano"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Lituano (estándar)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Lituano (teclado de EE. UU. con letras lituanas)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Lituano (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Lituano (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Lituano (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Letón"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Letón (variante con apóstrofo)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Letón (variante virguliña)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Letón (variante de letra F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Letón (moderno)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Letón (ergonómico, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Letón (adaptado)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maorí"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrino"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrino (cirílico)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrino (cirílico, Z e ZHE trocados)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrino (latino Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrino (latino qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrino (latino Unicode qwerty)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrino (cirílico con guillemots)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrino (latino con guillemots)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Macedonio"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedonio (eliminar teclas mortas)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltés"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltés (con distribución para EE. UU.)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongol"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Noruego"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Noruego (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Noruegués (teclas Windows)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Noruego (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Lapón do norte (Noruega)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Lapón do norte (Noruego, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Noruego (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Noruego (Macintosh, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Noruegués (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polaco"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polaco (herdado)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polaco (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polaco (Dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polaco (Dvorak, comillas polacas na tecla de comillas)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polaco (Dvorak, comillas polacas na tecla 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Casubio"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Silesio"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Ruso (Polonia, Dvorak fonético)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polaco (Dvorak de programador)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugués"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugués (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugués (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugués (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugués (Macintosh, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugués (Macintosh, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugués (nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugués (nativo para teclados de EE. UU.)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumano"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumano (cedilla)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumano (estándar)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumano (cedilla estándar)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumano (teclas Windows)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Ruso"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Ruso (fonético)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Ruso (fonético con teclas Windows)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Ruso (máquina de escribir)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Ruso (herdado)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Ruso (máquina de escribir, heredado)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Osetio (herdado)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Osetio (teclas Windows)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Chuvash"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Cuvash (latino)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurto"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Yakuto"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Calmuco"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Ruso (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Ruso (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbio (Rusia)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Bashkiriano"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Ruso (azerty fonético)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Ruso (francés fonético)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbio"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbio (cirílico, Z e ZHE trocados)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbio (latino)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbio (latino Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbio (latino qwerty)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbio (latino Unicode qwerty)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Montenegrino (cirílico con guillemots)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbio (latino con guillemots)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Rusino de Panonia"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Esloveno"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Esloveno (con comiñas para citas)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Esloveno (teclado EE. UU. con letras eslovenas)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Eslovaco"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Eslovaco (contrabarra estendida)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Eslovaco (qwerty)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Eslovaco (qwerty, contrabarra estendida)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Español"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Español (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Español (tecla Windows)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Español (incluír til morta)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Español (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Español (Dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturiano (español, con H de medio punto e L de medio punto)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalán (español, con L de medio punto)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Español (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Sueco"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Sueco (eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Sueco (Dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Ruso (sueco, fonético)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Ruso (sueco, fonético, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Lapón do norte (Suecia)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Sueco (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Sueco (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Lingua de signos sueco"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Alemán (Suíza)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Alemán (Suíza, herdado)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Alemán (Suíza, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Alemán (Suíza, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Francés (Suíza)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francés (Suíza, eliminar teclas mortas)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francés (Suíza, teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Francés (Suíza, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Alemán (Suíza, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Árabe (Siria)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Sirio"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Sirio (fonético)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdo (Siria, latino Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdo (Siria, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdo (Siria, latino Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Taxico"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Taxico (herdado)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Cingalés (fonético)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamil (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamil (Sri Lanka, máquina de escribir TAB)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Singhala (teclado EE. UU. con letras Singhala)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Tailandés"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Tailandés (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Tailandés (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turco"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turco (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turco (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turco (teclas mortas de Sun)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdo (Turquía, latino Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdo (Turquía, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdo (Turquía, latino Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turco (internacional con teclas mortas)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Tártaro de Crimea (turco Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Tártaro de Crimea (turco F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Tártaro de Crimea (turco Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanés"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanés (autóctono)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwán)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ucraíno"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ucraíno (fonético)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ucraíno (máquina de escribir)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ucraíno (teclas Windows)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ucraíno (herdado)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ucraíno (estándar RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Ruso (Ucraíno estándar RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ucraíno (homofónico)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Inglés (RU)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Inglés (UK, estendido con teclas Windows)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Inglés (RU, internacional con teclas mortas)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Inglés (RU, Dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Inglés (RU, Dvorak con puntuación para RU)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Inglés (RU, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Inglés (RU, Macintosh internacional)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Inglés (RU, Colemark)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Uzbeco"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Uzbeco (latino)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamita"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Coreano"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Coreano (101/104 teclas compatíbeis)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Xaponés (PC-98xx Series)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irlandés"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irlandés (UnicodeExperto)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogam (IS434)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdú (Paquistán)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdú (Paquistán, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdú (Paquistán, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Árabe (Paquistán)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Inglés (Sudáfrica)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Estoniano (punto e coma e comiña desprazadas, obsoleto)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalí"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Inglés (Nixeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharico"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (zurdo)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (destro)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmenistano"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmenistano (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Francés (Malí, alternativa)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Inglés (Malí, Macintosh de EE. UU.)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Inglés (Malí, EE. UU. internacional)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzania)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenia)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipino"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (QWERTY baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipino (Capewell-Dvorak latino)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipino (Capewell-Dvorak baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipino (Capewell-QWERF 2006 latino)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipino (Capewell-QWERF 2006 baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipino (Colemak latino)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipino (Colemak baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipino (Dvorak latino)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipino (Dvorak baybayin)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldavo"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldavo (Gagauz)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Cambiando a outra disposición"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Alt dereito (mentres está premido)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Alt esquerda (mentres está premida)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Tecla Windows esquerda (ao premela)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "A tecla Windows (mentres está premida)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Calquera tecla Windows (ao pulsala)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Bloqueo de maiúsculas (ao pulsarse), Alt+Bloq Maiús realiza a acción orixinal de bloqueo de maiúsculas"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Ctrl dereito (mentres está premido)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Alt dereito"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Alt esquerda"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Bloqueo de maiúsculas"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Maiús+BloqMaiús"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Bloqueo de maiúsculas (á primeira disposición), Maiús+Bloq Maiús (á última disposición)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Win esquerda (á primeira disposición), Win/Menu dereita (á última disposición)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ctrl esquerda (á primeira disposición), Ctrl dereita (á última disposición)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Bloq Maiús"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Ámbalas teclas «Maiús» xuntas"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Ámbalas teclas Alt xuntas"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Ámbalas teclas Ctrl xuntas"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Maiús"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Ctrl esquerda + Maiús esquerda"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Ctrl dereito + Maiús dereito"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Maiús"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Alt esquerda + Maiús. esquerda"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Espazo"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Win esquerda"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Tecla Win+Espazo"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Windows dereito"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Maiús esquerda"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Maiús dereito"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Ctrl esquerda"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Ctrl dereito"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Bloq Despl"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ctrl esquerda + Ctrl dereito (á primeira disposición), Ctrl dereita + Menú(á última disposición)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Tecla para seleccionar o 3º nivel"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Calquera tecla Windows"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Calquera tecla Alt"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "A tecla Alt dereita, Maiús+Alt dereita e tecla Compose"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "A tecla Alt dereita nunca elixe o 3º nivel"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Intro no teclado numérico"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Contrabarra"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Menor que/Maior que&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Bloq Maiús escolle o 3º nivel, actúa como un bloqueo dunha vez ao premelo xunto con outro selector de 3º nivel"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Contra barra selecciona o 3º nivel, bloquea ao premerse xunto con outro selector de 3º nivel"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Menor que/Maior que&gt; elixe o 3º nivel, actúa como un bloqueo unitario ao premerse xunto con outro selector de 3º nivel"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Posición da tecla Ctrl"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Bloq Maiús como Ctrl"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Ctrl esquerdo como Meta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Intercambiar Ctrl e Bloq Maiús"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Á esquerda do «A»"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Na parte inferior esquerda"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Ctrl dereito como Alt dereito"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menú como Ctrl dereito"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Alt dereito como Ctrl dereito"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Trocar Alt esquerda con Ctrl esquerda"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Trocar Win esquerda con Ctrl esquerda"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Trocar tecla Win dereita por tecla Ctrl dereita"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Alt esquerda como Ctrl, Ctrl esquerda com Win, Win esquerda como ALt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Usar o LED do teclado para mostrar a disposición alternativa"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Bloq Num"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Disposición do teclado numérico"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Herdado"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Adicións unicode (frechas e operadores matemáticos)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Adicións unicode (frechas e operadores matemáticos); operadores matemáticos no nivel predeterminado"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Wang 724 herdado"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Teclado numérico Wang 724 con adicións Unicode (frechas e operadores matemáticos)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Teclado numérico Wang 724 con adicións Unicode (frechas e operadores matemáticos); operadores matemáticos no nivel predeterminado"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadecimal"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "Caixeiro automático/estilo teléfono"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Comportamento da tecla Supr do teclado numérico"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Tecla herdada con punto"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Tecla herdada con coma"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Tecla de cuarto nivel con punto"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Tecla de cuarto nivel con punto, restrición latin-9"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Tecla de cuarto nivel con coma"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Tecla de cuarto nivel con momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Tecla de cuarto nivel con separadores abstractos"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Punto e coma no terceiro nivel"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Comportamento da tecla Bloq. Maiús."
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Bloq Maiús usa a capitalización interna; Maiús «suspende» o Bloq Maiús"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Bloq Maiús usa a capitalización interna; Maiús non afecta a Bloq Maiús"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Bloq Maiús actúa como Maiús con bloqueo; Maiús «suspende» Bloq Maiús"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Bloq Maiús actúa como Maiús con bloqueo; Maiús non afecta ao Bloq Maiús"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Bloq Maiús cambia a capitalización normal dos caracteres alfabéticos"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Facer de Bloq Maiús un Bloq Num adicional"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Intercambiar ESC e Bloq Maiús"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Facer de Bloq Maiús un Esc adicional"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Facer de Bloq Maiús un Retroceso adicional"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Facer de Bloq Maiús un Super adicional"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Facer de Bloq Maiús un Hyper adicional"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Bloq Maiús cambia a Maiús con bloqueo (afecta a todas as teclas)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Bloq Maiús está desactivado"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Facer de Bloq Maiús un Ctrl adicional"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Comportamento da tecla Alt/Windows"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Engadir o comportamiento estándar á tecla Menú."
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt e Meta están nas teclas Alt"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt asígnase ás teclas Win (e as teclas Alt usuais)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Control asígnase ás teclas Win (e as teclas Ctrl usuais)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Control está asignada ás teclas Alt, Alt está asingado ás teclas Win"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta está asignada ás teclas Windows"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta está asignada á tecla Windows esquerda"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper está asignada ás teclas Windows"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt está asignada á tecla Windows dereita e Super a tecla Menú"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt está cambiada con Win"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Posición da tecla Compose"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "3º nivel da Win esquerda"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "3º nivel da Win dereita"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "3º nivel do menú"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "3º nivel da Ctrl esquerda"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "3º nivel da Ctrl dereita"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "3º nivel do Bloq Maiús"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "3º nivel do &lt;Menor/Maior&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pausa"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Opcións varias de compatiblidade"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Teclas do teclado numérico por omisión"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "As teclas do teclado numérico sempre escriben díxitos (como en Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "Bloq. Num. activo: díxitos, Maiús. cambia a teclas de frechas, Bloq. Num. inactivo: sempre teclas de frechas (como en MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Maiús non cancela Bloq Num, no seu lugar elixe o 3er nivel"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Teclas especiais (Ctrl+Alt+«tecla») manipuladas nun servidor"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Teclado de aluminio de Apple: emular teclas PC (Imprimir, Bloq Despl, Pausa, Bloq Núm)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Maiús cancela BloqMaiús"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Activar caracteres tipográficos adicionais"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Ambas as teclas «Maiús» xuntas cambian o Bloqueo de maiúsculas"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Ambas as teclas Maiús xuntas activan o Bloq Maiús, unha tecla Maiús desactívao"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Ambas as teclas Maiús xuntas activan Maiús con bloqueo"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Maiús + Bloqueo numérico cambia a teclas do punteiro"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Permitir que accións do teclado liberen as capturas (aviso: risco de seguranza)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Permitir captura e rexistro da árbore de xanelas"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Engadir o símbolo de divisa a certas teclas"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro no E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro no 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro no 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro no 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupia no 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Tecla para seleccionar o 5º nivel"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Menor que/Maior que&gt; elixe o 5º nivel, actúa como un bloqueo unitario ao premerse xunto con outro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Alt dereita elixe o 5º nivel, bloquea ao premerse xunto con outro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win esquerda elixe o 5º nivel, bloquea ao premerse xunto con outro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Win dereita elixe o 5º nivel, bloquea ao premerse xunto con outro selector de 5º nivel"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Usando a tecla espazo para introducir un carácter de espazo non separábel"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Espacio usual en calquera nivel"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Carácter de espazo non separábel no segundo nivel"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Carácter de espazo non separábel no terceiro nivel"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Carácter de espazo non separábel no terceiro nivel, nada no cuarto nivel"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Carácter de espazo non separábel no terceiro nivel, carácter de espazo estreito non separábel no cuarto nivel"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Carácter de espazo non separábel no cuarto nivel"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Carácter de espazo non separábel no cuarto nivel, carácter de espacio estreito non separábel no sexto nivel"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Carácter de espazo non separábel no cuarto nivel, carácter de espazo estreito non separábel o sexto nivel (a través de Ctrl+Maiús)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel, carácter de espazo de anchura cero rompíbel («ZWJ») no terceiro nivel"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel, carácter de espazo de anchura cero rompíbel («ZWJ») no terceiro nivel, caracter de espazo non separábel no cuarto nivel"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel, carácter de espazo non separábel no terceiro nivel"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel, carácter de espazo non separábel no terceiro nivel, nada no cuarto nivel"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Carácter de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel, carácter de espazo non separábel no terceiro nivel, espazo de anchura cero rompíbel («ZWJ») no cuarto nivel"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no segundo nivel, carácter de espazo non separábel no terceiro nivel, espazo estreito non separábel no cuarto nivel"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Carácer de espazo irrompíbel de anchura cero («ZWNJ») no terceiro nivel, carácter de anchura cero rompíbel («ZWJ») no cuarto nivel"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Opcións de teclado xaponés"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "A tecla Bloq Kana está bloqueando"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Retroceso estilo NICOLA-F"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Facer Zenkaku Hankaku un ESC adicional"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Coreano teclas Hangul/Hania"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Hardware teclas Hangul/Hania"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Alt dereito como Hangul, Ctrl dereito como Hania"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Ctrl dereito como Hangul, Alt dereito como Hania"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Engadir as letras acentuadas do esperanto"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Á tecla correspondente nunha disposición Qwerty."
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Á tecla correspondente nunha disposición Dvorak."
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Á tecla correspondente nunha disposición Colemak."
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Manter a compatibilidade das teclas cos códigos de teclas antigos de Solaris"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Compatibilidade coas teclas de Sun"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Secuencia de teclas para matar o servidor X"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Control + Alt + Retroceso"
diff --git a/xorg-server/xkeyboard-config/po/ko.po b/xorg-server/xkeyboard-config/po/ko.po
index 85799a0e4..ccf9eddc0 100644
--- a/xorg-server/xkeyboard-config/po/ko.po
+++ b/xorg-server/xkeyboard-config/po/ko.po
@@ -10,10 +10,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.13.99\n"
+"Project-Id-Version: xkeyboard-config 2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-21 13:01+0900\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-16 05:35+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: Korean <translation-team-ko@lists.sourceforge.net>\n"
"Language: ko\n"
@@ -955,3131 +955,3143 @@ msgstr "아랍어(QWERTY/숫자)"
msgid "Arabic (Buckwalter)"
msgstr "아랍어(버크월터)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "아랍어(매킨토시)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "알바니아"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "알바니아(Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "아르메니아"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "아르메니아(음성 기호)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "아르메니아(다른 음성 기호)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "아르메니아(동부)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "아르메니아(서부)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "아르메니아(다른 동부)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "독일어(오스트리아)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "독일어(오스트리아, 데드키 없음)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "독일어(오스트리아, 썬 데드키)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "독일어(오스트리아, 매킨토시)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "아제르바이잔어"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "아제르바이잔어(키릴 문자)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "벨라루스어"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "벨라루시아어(구형)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "벨라루스어(라틴)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "벨기에어"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "벨기에어(다른 버전)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "벨기에어(다른 버전, Latin-9 전용)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "벨기에어(다른 버전, 썬 데드키)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "벨기에어(ISO 다른 버전)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "벨기에어(데드키 없음)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "벨기에어(썬 데드키)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "벨기에어(Wang model 724 AZERTY)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "벵골어"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "벵골어(프롭해트)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "인도"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "벵골어(인도)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "벵골어(인도, 프롭해트)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "벵골어(인도, 바이샤키)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "벵골어(인도, 보르노나)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "벵골어(인도, 유니 기탄잘리)"
# inscript - 인도 키보드 표준
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "벵골어(인도, 바이샤키 인스크립트)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "마니푸르어(Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "구자라트어"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "펀자브어(구르무키 문자)"
# 젤룸 - 파키스탄 지역
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "펀자브어(구르무키 문자, 젤룸)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "칸나다어"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "칸나다어(KaGaPa 음성 기호)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "말라얄람어"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "말라얄람어(라리타)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "말라얄람어(발전된 Inscript, 루피 기호 포함)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
# Oriya - 인도 방언
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "오리야어"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "타밀어(유니코드)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "타밀어(숫자 포함 키보드)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "타밀어(TAB 타자기)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "타밀어(TSCII 타자기)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "타밀어"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "텔루구어"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "텔루구어(KaGaPa 음성 표기)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "우르두어(음성 표기)"
# Urdu, 인도 방언
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "우르두어(다른 음성 기호 버전)"
# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "우르두어(윈도우 키)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
# Bolnagri: x input method 이름, http://indlinux.org/wiki/index.php/BolNagri
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "힌두어(Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "힌두어(Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "힌두어(KaGaPa 음성 기호)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "산스크리트(KaGaPa 음성 기호)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "마라티어(KaGaPa 음성 기호)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "영어(인도, 루피 기호 포함)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "보스니아어"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "보스니아어(따옴표에 각괄호 포함)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "보스니아어(보스니아 이중 문자 포함)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "보스니아어(미국식 키보드, 보스니아 이중 문자 포함)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "보스니아어(미국식 키보드, 보스니아 문자 포함)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "포르투갈어(브라질)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "포르투갈어(브라질, 데드키 없음)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "포르투갈어(브라질, 드보락)"
# 나티보 - 아메리카 소수 언어
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "포르투갈어(브라질, 나티보)"
# 나티보 - 아메리카 소수 언어
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "포르투갈어(브라질, 미국 키보드 나티보)"
# 나티보 - 아메리카 소수 언어
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "에스페란토(브라질, 나티보)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "불가리아어"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "불가리아어(구식 음성 기호)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "불가리아어(새 음성 기호)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "아랍어(모로코)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "프랑스어(모로코)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
# 베르베르어파
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "베르베르어(모로코, 티피나그)"
# 베르베르어파
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "베르베르어(모로코, 티피나그 다른 버전)"
# 베르베르어파
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "베르베르어(모로코, 티피나그 다른 음성 기호 버전)"
# 베르베르어파
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "베르베르어(모로코, 티피나그 확장)"
# 베르베르어파
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "베르베르어(모로코, 티피나그 음성 기호)"
# 베르베르어파
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "베르베르어(모로코, 티피나그 확장 음성 기호)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "영어(카메룬)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "프랑스어(카메룬)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "카메룬 여러 언어 지원(QWERTY)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "카메룬 여러 언어 지원(AZERTY)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "카메룬 여러 언어 지원(드보락)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "미얀마어"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "프랑스어(캐나다)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "프랑스어(캐나다, 드보락)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "프랑스어(캐나다, 구형)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "캐나다 여러 언어 지원"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "캐나다 여러 언어 지원(첫번째)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "캐나다 여러 언어 지원(두번째)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "이누이트어"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "영어(캐나다)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "프랑스어(콩고 민주 공화국)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "중국어"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "티베트어"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "티베트어(ASCII 숫자 포함)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "위구르어"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "크로아티아어"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "크로아티아어(따옴표에 각괄호 포함)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "크로아티아어(크로아티아 이중 문자 포함)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "크로아티아어(미국식 키보드, 크로아티아 이중 문자 포함)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "크로아티아어(미국식 키보드, 크로아티아 문자 포함)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "체코어"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "체코어(&lt;\\|&gt; 키 포함)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "체코어(QWERTY)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "체코어(QWERTY, 백슬래시 확장)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "체코어(UCW 배치, 액센트 문자만)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "체코어(US 드보락, CZ UCW 지원)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "덴마크어"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "덴마크어(데드키 없음)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "덴마크어(윈도우 키)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "덴마크어(매킨토시)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "덴마크어(매킨토시, 데드키 없음)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "덴마크어(드보락)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "네덜란드어"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "네덜란드어(썬 데드키)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "네덜란드어(매킨토시)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "네덜란드어(표준)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "종카어"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "에스토니아어"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "에스토니아어(데드키 없음)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "에스토니아어(드보락)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "에스토니아어(미국식 키보드, 에스토니아 문자 포함)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "페르시아어"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "페르시아어(페르시아어 키패드 포함)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "쿠르드어(이란, 라틴 Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "쿠르드어(이란, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "쿠르드어(이란, 라틴 Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "쿠르드어(이란, 아랍어 라틴)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "이라크"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "쿠르드어(이라크, 라틴 Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "쿠르드어(이라크, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "쿠르드어(이라크, 라틴 Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "쿠르드어(이라크, 아랍어 라틴)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "페로어"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "페로어(데드키 없음)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "핀란드어"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "핀란드어(클래식)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "핀란드어(클래식, 데드키 없음)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "핀란드어(윈도우 키)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "북 사오미(핀란드)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "핀란드어(매킨토시)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "프랑스어"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "프랑스어(데드키 없음)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "프랑스어(썬 데드키)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "프랑스어(다른 버전)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "프랑스어(다른 버전, Latin-9 전용)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "프랑스어(다른 버전, 데드키 없음)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "프랑스어(다른 버전, 썬 데드키)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "프랑스어(구형, 다른 버전)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "프랑스어(구형, 다른 버전, 데드키 없음)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "프랑스어(구형, 다른 버전, 썬 데드키)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "프랑스어(Bepo, ergonomic, 드보락 방식)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "프랑스어(Bepo, ergonomic, 드보락 방식, Latin-9 전용)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "프랑스어(드보락)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "프랑스어(매킨토시)"
# 브르타뉴어 - 프랑스 지방 언어
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "프랑스어(브르타뉴어)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "오크어"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "조지아어(프랑스, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "영어(가나)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "영어(가나, 다국어)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "아칸"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
# 가나 부족어
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "에베어"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "풀라"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
# 가나의 언어
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "가어"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
# 나이지리아 변종
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "하우사어"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
# 아프리카 지역 언어
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "애버타임어"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "영어(가나, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "프랑스어(기니)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "조지아어"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "조지아어(어고노믹)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "조지아어(MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "러시아어(그루지아)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "오세트어(그루지아)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "독일어"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "독일어(어큐트 데드키)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "독일어(그레이브 어큐트 데드키)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "독일어(데드키 없음)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "독일어(T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "루마니아어(독일)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "루마니아어(독일, 데드키 없음)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "독일어(드보락)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "독일어(썬 데드키)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "독일어(Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "독일어(매킨토시)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "독일어(매킨토시, 데드키 없음)"
# http://ko.wikipedia.org/wiki/저지_소르브어
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "저지 소르브어"
# http://ko.wikipedia.org/wiki/저지_소르브어
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "저지 소르브어(QWERTZ)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "독일어(QWERTY)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "터키어(독일)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "러시아어(독일, 음성 표기)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "독일어(구형)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "그리스어"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "그리스어(간단)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "그리스어(확장)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "그리스어(데드키 없음)"
# 그리스어 발음 표기 http://en.wikipedia.org/wiki/Polytonic_orthography
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "그리스어(폴리토닉)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "헝가리어"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "헝가리어(표준)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "헝가리어(데드키 없음)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "헝가리어(QWERTY)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "헝가리어(101/QWERTZ/쉼표/데드키)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "헝가리어(101/QWERTZ/쉼표/데드키 없음0"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "헝가리어(101/QWERTZ/점/데드키)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "헝가리어(101/QWERTZ/점/데드키 없음)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "헝가리어(101/QWERTY/쉼표/데드키)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "헝가리어(101/QWERTY/쉼표/데드키 없음)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "헝가리어(101/QWERTY/점/데드키)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "헝가리어(101/QWERTY/점/데드키 없음)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "헝가리어(102/QWERTZ/쉼표/데드키)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "헝가리어(102/QWERTZ/쉼표/데드키 없음)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "헝가리어(102/QWERTZ/점/데드키)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "헝가리어(102/QWERTZ/점/데드키 없음)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "헝가리어(102/QWERTY/쉼표/데드키)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "헝가리어(102/QWERTY/쉼표/데드키 없음)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "헝가리어(102/QWERTY/점/데드키)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "헝가리어(102/QWERTY/점/데드키 없음)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "아이슬란드어"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "아이슬란드어(썬 데드키)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "아이슬란드어(데드키 없음)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "아이슬란드어(매킨토시, 구형)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "아이슬란드어(매킨토시)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "아이슬란드어(드보락)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "히브리어"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "히브리어(lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "히브리어(음성 표기)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "히브리어(성서 방식, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "이탈리아어"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "이탈리아어(데드키 없음)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "이탈리아어(윈도우 키)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "이탈리아어(매킨토시)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "이탈리아어(미국식 키보드, 이탈리아어 문자 포함)"
# 오세트 - 러시아 및 조지아 지역 오세트족
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "조지아어(이탈리아)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "이탈리아어(IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "일본어"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "일본어(가나)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "일본어(가나 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "일본어(OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "일본어(매킨토시)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "일본어(드보락)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "키르기스어"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "키르기스어(음성 기호)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "크메르어(캄보디아)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "카자흐어"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "러시아어(카자흐스탄, 카자흐어 포함)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "카자흐어(러시아어 포함)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "라오어"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "라오어(STEA 제안 표준 키 배치)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "스페인어(라틴 아메리카)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "스페인어(라틴 아메리카, 데드키 없음)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "스페인어(라틴 아메리카, 물결 데드키 포함)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "스페인어(라틴 아메리카, 썬 데드키)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "스페인어(라틴 아메리카, 드보락)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "리투아니아어"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "리투아니아어(표준)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "리투아니아어(미국식 키보드, 리투아니아 문자 포함)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "리투아니아어(IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "리투아니아어(LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "리투아니아어(LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "라트비아어"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "라트비아어(아포스트로피 변종)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "라트비아어(물결 변종)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "라트비아어(F 변종)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "라트비아어(현대 버전)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "라트비아어(어고노믹, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "라트비아어(개조 버전)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "마오리어"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "몬테네그로어"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "몬테네그로어(키릴 문자)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "몬테네그로어(키릴 문자, ZE와 ZHE 뒤바꾸기)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "몬테네그로어(라틴 유니코드)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "몬테네그로어(라틴 QWERTY)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "몬테네그로어(라틴 유니코드 QWERTY)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "몬테네그로어(키릴 문자, 각괄호 포함)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "몬테네그로어(라틴, 각괄호 포함)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "마케도니아어"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "마케도니아어(데드키 없음)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "몰타어"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "몰타어(미국식 키 배치)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "몽골어"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "노르웨이어"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "노르웨이어(데드키 없음)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "노르웨이어(윈도우 키)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "노르웨이어(드보락)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "북 사오미(노르웨이)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "북 사오미(노르웨이, 데드키 없음)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "노르웨이어(매킨토시)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "노르웨이어(매킨토시, 데드키 없음)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "노르웨이어(콜맥)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "폴란드어"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "폴란드어(구형)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "폴란드어(QWERTZ)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "폴란드어(드보락)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "폴란드어(드보락, 따옴표 키에 폴란드어 따옴표)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "폴란드어(드보락, 1 키에 폴란드어 따옴표)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "카슈브어"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "실레지아어"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "러시아어(폴란드, 음성 표기 드보락)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "폴란드어(프로그래머 드보락)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "포르투갈어"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "포르투갈어(데드키 없음)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "포르투갈어(썬 데드키)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "포르투갈어(매킨토시)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "포르투갈어(매킨토시, 데드키 없음)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "포르투갈어(매킨토시, 썬 데드키)"
# 나티보 - 아메리카 소수 언어
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "포르투갈어(나티보)"
# 나티보 - 아메리카 소수 언어
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "포르투갈어(나티보, 미국 키보드)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "에스페란토(포르투갈, 네이티브)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "루마니아어"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "루미니아어(세디유)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "루마니아어(표준)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "루마니아어(표준 세디유)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "루마니아어(윈도우 키)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "러시아어"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "러시아어(음성 표기)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "러시아어(음성 표기, 윈도우 키)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "러시아어(타자기)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "러시아어(구형)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "러시아어(타자기, 구형)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "타타르어"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "오세트어(구형)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "오세트어(윈도우 키)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "추바시어"
# http://ko.wikipedia.org/wiki/%EC%B6%94%EB%B0%94%EC%8B%9C%EC%96%B4
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "추바시어(라틴)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "우드무르트어"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "코미어"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "야큐트어"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "칼미크어"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "러시아어(DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "러시아어(매킨토시)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "세르비아어(러시아)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "바시키르어"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "마리어"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "러시아어(음성 표기 AZERTY)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "러시아어(음성 표기 프랑스식)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "세르비아어"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "세르비아어(키릴 문자, ZE와 ZHE 뒤바꾸기)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "세르비아어(라틴)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "세르비아어(라틴 유니코드)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "세르비아어(라틴 QWERTY)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "세르비아어(라틴 유니코드 QWERTY)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "세르비아어(키릴 문자, 각괄호 포함)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "세르비아어(라틴, 각괄호 포함)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "판노니아 루테니아"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "슬로베니아어"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "슬로베니아어(따옴표에 각괄호 포함)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "슬로베니아어(미국식 키보드, 슬로베니아 문자 포함)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "슬로바키아어"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "슬로바키아어(확장 백슬래시)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "슬로바키아어(QWERTY)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "슬로바키아어(QWERTY, 백슬래시 확장)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "스페인어"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "스페인어(데드키 없음)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "스페인어(윈도우 키)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "스페인어(물결 데드키 포함)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "스페인어(썬 데드키)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "스페인어(드보락)"
# 아스투리아스 - 스페인 지역
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "아스투리아스어(스페인, 가운데점 H 및 가운데점 L 포함)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "카탈로니아어(스페인, 가운데점 L 포함)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "스페인어(매킨토시)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "스웨덴어"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "스웨덴어(데드키 없음)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "스웨덴어(드보락)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "러시아어(스웨덴, 음성 표기)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "러시아어(스웨덴, 음성 표기, 데드키 없음)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "북 사오미(스웨덴)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "스웨덴어(매킨토시)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "스웨덴어(SV 드보락)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "스웨덴 기호 언어"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "독일어(스위스)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "독일어(스위스, 구형)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "독일어(스위스, 데드키 없음)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "독일어(스위스, 썬 데드키)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "프랑스어(스위스)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "프랑스어(스위스, 데드키 없음)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "프랑스어(스위스, 썬 데드키)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "프랑스어(스위스, 매킨토시)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "독일어(스위스, 매킨토시)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "아랍어(시리아)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "시리아어"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "시리아어(음성 기호)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "쿠르드어(시리아, 라틴 Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "쿠르드어(시리아, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "쿠르드어(시리아, 라틴 Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "타지키스탄"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "타지키스탄(구형)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "싱할라어(음성 기호)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "타밀어(스리랑카, 유니코드)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "타밀어(스리랑카, TAB 타자기)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "싱할라어(미국식 키보드, 싱할라 문자 포함)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "타이어"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "타이어(TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "타이어(Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "터키어"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "터키어(F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "터키어(Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "터키어(썬 데드키)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "쿠르드어(터키, 라틴 Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "쿠르드어(터키, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "쿠르드어(터키, 라틴 Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "터키어(국제 버전, 데드키 포함)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "크림타타르(터키어 Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "크림타타르(터키어 F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "크림타타르(터키어 Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "타이완"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "타이완(원주민)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
# 사이시얏트(賽夏族) - 타이완 원주민
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "사이시얏트(타이완)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "우크라이나어"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "우크라이나어(음성 기호)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "우크라이나어(타자기)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "우크라이나어(윈도우 키)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "우크라이나어(구형)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "우크라이나어(표준 RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "러시아어(우크라이나, 표준 RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "우크라이나어(homophonic)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "영어(영국)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "영어(영국, 확장 윈도우 키)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "영어(영국, 국제 버전, 데드키 포함)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "영어(영국, 드보락)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "영어(영국, 영국 문장 부호 포함 드보락)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "영어(영국, 매킨토시)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "영어(영국, 매킨토시 국제 버전)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "영어(영국, 콜맥)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "우즈베크어"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "우즈베크어(라틴)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "베트남어"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "한국어"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "한국어(101/104키 호환)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "일본어(PC-98xx 시리즈)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "아일랜드"
# 아일랜드 변종
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "클로개라치어"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "아일랜드(UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "오검 문자"
# 아일랜드 변종
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "오검 문자(IS434)"
# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "우르두어(파키스탄)"
# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "우르두어(파키스탄, CRULP)"
# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "우르두어(파키스탄, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "아랍어(파키스탄)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
# 인도
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "신디어"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
# 몰디브 공용어
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "디베히어"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "영어(남아공)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "에스페란토"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "에스페란토(세미콜론과 따옴표 없애기, 없어진 기능)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "네팔어"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "영어(나이지리아)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
# 나이지리아 변종
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "이그보어"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
# 나이지리아 변종
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "요루바어"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "암하라어"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
# 월로프어 - 세네갈, 감비아, 모리타니에서 쓰이는 아프리카 언어
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "월로프어"
# Braille
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "점자"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "점자(왼손잡이)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "점자(오른손잡이)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "투르크멘어"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "투르크멘어(Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "밤바라어"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "프랑스어(말리, 다른 버전)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "영어(말리, 미국 매킨토시)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "영어(말리, 미국 국제 버전)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "스와힐리어(탄자니아)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "스와힐리어(케냐)"
# http://en.wikipedia.org/wiki/Kikuyu#Language
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "키쿠유어"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "츠와나어"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "필리핀어"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "필리핀어(QWERTY 베이베이인)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "필리핀어(케이프웰 드보락 라틴)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "필리핀어(케이프웰 드보락 베이베이인)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "필리핀어(케이프웰 QWERF 2006 라틴)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "필리핀어(케이프웰 QWERF 2006 베이베이인)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "필리핀어(콜맥 라틴)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "필리핀어(콜맥 베이베이인)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "필리핀어(드보락 라틴)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "필리핀어(드보락 베이베이인)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "몰디브어"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
# 가가우지아 지역의 몰디브어
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "몰티브어(가가우지아)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "다른 키 배치로 전환"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "오른쪽 Alt(누르고 있는 동안)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "왼쪽 Alt(누르고 있는 동안)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "왼쪽 윈도우(누르고 있는 동안)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "오른쪽 윈도우(누르고 있는 동안)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "모든 윈도우 키(누르고 있는 동안)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock(누르고 있는 동안), Alt+Caps Lock을 누르면 원래 Caps Lock 기능"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "오른쪽 Ctrl(누르고 있는 동안)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "오른쪽 Alt"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "왼쪽 Alt"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock(1번으로), Shift+Caps Lock(마지막으로)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "왼쪽 윈도우(1번으로), 오른쪽 윈도우/메뉴(마지막으로)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "왼쪽 Ctrl(1번 키보드 배치로), 오른쪽 Ctrl (마지막 키보드 배치로)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Shift 키 2개 동시 누름"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Alt 키 2개 동시 누름"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Ctrl 키 2개 동시 누름"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "왼쪽 Ctrl+왼쪽 Shift"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "오른쪽 Ctrl+오른쪽 Alt"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "왼쪽 Alt+왼쪽 Shift"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+스페이스"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "메뉴"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "왼쪽 윈도우"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "윈도우 키+스페이스"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "오른쪽 윈도우"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "왼쪽 Shift"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "오른쪽 Shift"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "왼쪽 Ctrl"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "오른쪽 Ctrl"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "왼쪽 Ctrl+왼쪽 윈도우(1번 키보드 배치로), 오른쪽 Ctrl+Menu (2번째 키보드 배치로)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "3번째 단계를 선택하는 키"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "모든 윈도우 키"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "모든 Alt 키"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "오른쪽 Alt, Shift+오른쪽 Alt가 Compose"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "오른쪽 Alt는 3번째 단계를 선택하지 않음"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "키패드에 Enter"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "백슬래시"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt; 및 &gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock으로 3번째 단계 선택, 다른 3번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "백슬래시로 3번째 단계 선택, 다른 3번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt; 및 &gt; 키로 3번째 단계 선택, 다른 3번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Ctrl 키 위치"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock 키를 Ctrl 키로"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "왼쪽 Ctrl 키를 Meta 키로"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Ctrl과 Caps Lock 뒤바꾸기"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "'A' 왼쪽에"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "맨 아래 왼쪽에"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "오른쪽 Ctrl 키를 오른쪽 Alt 키로"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu 키를 오른쪽 Ctrl 키로"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "오른쪽 Alt 키를 오른쪽 Ctrl 키로"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "왼쪽 Alt와 왼쪽 Ctrl 뒤바꾸기"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "왼쪽 윈도우와 왼쪽 Ctrl 뒤바꾸기"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "오른쪽 윈도우와 오른쪽 Ctrl 뒤바꾸기"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "왼쪽 Alt를 Ctrl, 왼쪽 Ctrl을 윈도우, 왼쪽 윈도우를 Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "키보드 LED에서 다른 키보드 배치 사용 표시"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "숫자 키패드의 키 배치"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "구형 방식"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "유니코드 추가(화살표 및 수학 기호)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "유니코드 추가(화살표 및 수학 기호, 수학 기호를 기본 단계에)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "구형 방식 Wang 724 키패드"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 키패드, 유니코드 추가(화살표 및 수학 기호)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Wang 724 키패드, 유니코드 추가(화살표 및 수학 기호, 수학 기호를 기본 단계에)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "십육진법"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "ATM/전화기형태"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "숫자 키패드의 Delete 키 동작"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "구형 방식 키, 점 포함"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "구형 방식 키, 쉼표 포함"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "네번째 단계, 점 사용"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "네번째 단계, 점 사용, Latin-9 전용"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "네번째 단계, 쉼표 사용"
# momayyez: http://en.wikipedia.org/wiki/Momayyez
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "네번째 단계, 아랍식 쉼표(momayyez) 사용"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "네번째 단계, 가상 구분 문자 사용"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "3번째 단계에서 세미콜론"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Caps Lock 키 동작"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock이 내부 대문자 기능 사용, Shift가 Caps Lock을 \"일시 중지\""
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Caps Lock이 내부 대문자 기능 사용, Shift가 Caps Lock 상태에 영향 없음"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock이 Shift처럼 동작하고 상태 고정, Shift가 Caps Lock을 \"일시 중지\""
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Caps Lock이 Shift처럼 동작하고 상태 고정, Shift가 Caps Lock 상태에 영향 없음"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock이 일반적인 알파벳 대문자 상태를 토글"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Caps Lock을 추가 Num Lock으로 사용"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "ESC와 Caps Lock 뒤바꾸기"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Caps Lock을 추가 ESC로 사용"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Caps Lock을 추가 백스페이스로 사용"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Caps Lock을 추가 Super로 사용"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Caps Lock을 추가 Hyper로 사용"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Caps Lock이 Shift 상태를 토글(모든 키가 영향을 받음)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Caps Lock 사용 안 함"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Caps Lock을 추가 Ctrl로 사용"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Alt/Win 키 동작"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "메뉴 키에 기본 동작 추가"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt와 Meta를 Alt 키에"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt 키를 윈도우 키로 매핑(일반 Alt 키로도 동작)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl 키를 윈도우 키로 매핑(일반 Ctrl 키로도 동작)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl 키를 윈도우 키로 매핑, Alt 키를 윈도우 키로 매핑"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "메타 키를 윈도우 키로 매핑"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "메타 키를 왼쪽 윈도우 키로 매핑"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper 키를 윈도우 키로 매핑"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt 키를 오른쪽 윈도우 키로 매핑, Super 키를 메뉴 키로 매핑"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt와 윈도우 키 뒤바꾸기"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Compose 키의 위치"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "3번째 단계에서 왼쪽 윈도우"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "3번째 단계에서 오른쪽 윈도우"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "3번째 단계에서 메뉴"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "3번째 단계에서 왼쪽 Ctrl"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "3번째 단계에서 오른쪽 Ctrl"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "3번째 단계에서 Caps Lock"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "3번째 단계에서 &lt;Less/Greater&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "기타 호환성 옵션"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "기본 숫자 키패드 키"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "숫자 키패드 키가 항상 숫자를 입력(맥 OS처럼 동작)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "NumLock 켜면: 숫자, Shift 누르면 화살표 키, NumLock 끔: 항상 화살표 키 (MS 윈도우 방식)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift를 누르면 Num Lock을 끄지 않고, 3번째 단계를 선택"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "특수 키는(Ctrl+Alt+&lt;키&gt;) 서버에서 처리"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: PC 키 에뮬레이션(Print, Scroll_Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Shift를 누르면 Caps Lock 끄기"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "추가 타이포그라피 문자 사용"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Shift 키 동시 눌러 Caps Lock 토글"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Shift 키 동시 눌러 Caps Lock 켜기, Shift 키 한 개로 해제"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Shift 키 동시 눌러 ShiftLock 토글"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Shift + NumLock으로 PointerKeys 토글"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "키보드 동작으로 키 잡기 해제 허용(경고: 보안 위험)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "키 잡기 및 창 단계 기록 허용"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "화폐 기호를 특정 키에 추가"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "유로를 E 키에"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "유로를 2 키에"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "유로를 4 키에"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "유로를 5 키에"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "루피를 4 키에"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "5번째 단계를 선택하는 키"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt; 및 &gt; 키로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "오른쪽 Alt로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "왼쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "오른쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
-msgstr "스페이스 키가 강제 공백 출력."
+msgstr "스페이스 키가 강제 공백 출력"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "모든 단계에서 일반 공백 문자"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "2번째 단계에서 강제 공백 문자"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "3번째 단계에서 강제 공백 문자"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 출력 없음."
+msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 출력 없음"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자."
+msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "4번째 단계에서 강제 공백 문자"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "4번째 단계에서 강제 공백 문자, 6번째 단계에서 얇은 강제 공백 문자"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "4번째 단계에서 강제 공백 문자, 6번째 단계에서 얇은 강제 공백 문자(Ctrl+Shift 사용)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 폭 없는 연결 문자"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 폭 없는 연결 문자, 4번째에서는 강제 공백 문자"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 없음"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 폭 없는 연결 문자"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "3번째 단계에서 폭 없는 연결 금지 문자, 4번째에서는 폭 없는 연결 문자"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "일본어 키보드 옵션"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Kana Lock 키 상태 고정"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F 방식 백스페이스"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Zenkaku Hankaku를 추가 ESC로 사용"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "한국어 한/영, 한자 키"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "하드웨어 한/영, 한자 키"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "오른쪽 Alt 키를 한/영, 오른쪽 Ctrl 키를 한자 키로"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "오른쪽 Ctrl 키를 한/영, 오른쪽 Alt 키를 한자 키로"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "에스페란토 수퍼사인 문자 추가"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "QWERTY 키 배치에서 해당하는 키로"
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "드보락 키 배치에서 해당하는 키로"
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "콜맥 키 배치에서 해당하는 키로"
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "과거 솔라리스 키코드와 키 호환성 유지"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "썬 키 호환성"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "X 서버를 멈추는 키 조합"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + 백스페이스"
diff --git a/xorg-server/xkeyboard-config/po/nl.po b/xorg-server/xkeyboard-config/po/nl.po
index b3f512406..7c6c6e1c9 100644
--- a/xorg-server/xkeyboard-config/po/nl.po
+++ b/xorg-server/xkeyboard-config/po/nl.po
@@ -2,7 +2,7 @@
# Copyright (C) 2015 Free Software Foundation, Inc.
# This file is distributed under the same license as the xkeyboard-config package.
#
-# »Eine schöne, leichte Schwere.«
+# "Of niet."
#
# ------------------------------------------------------------------------------
# *** Vocabulair ***
@@ -26,15 +26,16 @@
# Er zijn maximaal acht niveaus -- Shift gaat normaal naar tweede,
# AltGr naar derde en (+Shift) vierde, en Ctrl naar de bovenste vier.
# ------------------------------------------------------------------------------
+#
# Taco Witte <tcwitte@cs.uu.nl>, 2003, 2004, 2005, 2006.
# Tino Meinen <tino.meinen@gmail.com>, 2007, 2008, 2009, 2011, 2012.
# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2014, 2015.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.13.99\n"
+"Project-Id-Version: xkeyboard-config-2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-17 17:21+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-19 10:51+0200\n"
"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
@@ -601,7 +602,7 @@ msgstr "Symplon PaceBook (tablet PC)"
msgid "Toshiba Satellite S3000"
msgstr "Toshiba Satellite S3000"
-# "Classic" is hier onderdeel van de merknaam?
+# Is "Classic" hier onderdeel van de merknaam?
#: ../rules/base.xml.in.h:140
msgid "Trust Wireless Keyboard Classic"
msgstr "Trust Wireless Keyboard Classic"
@@ -951,924 +952,928 @@ msgstr "Arabisch (qwerty/cijfers)"
msgid "Arabic (Buckwalter)"
msgstr "Arabisch (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabisch (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albanees"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albanees (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armeens"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armeens (fonetisch)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armeens (alternatief fonetisch)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armeens (Oosters)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armeens (Westers)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armeens (alternatief Oosters)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Duits (Oostenrijk)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Duits (Oostenrijk, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Duits (Oostenrijk, Sun dode toetsen)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Duits (Oostenrijk, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Azerbeidzjaans"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Azerbeidzjaans (Cyrillisch)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Wit-Russisch"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Wit-Russisch (historisch)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Wit-Russisch (Latijns)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belgisch"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belgisch (alternatief)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belgisch (alternatief, enkel Latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belgisch (alternatief, Sun dode toetsen)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belgisch (ISO alternatief)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belgisch (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belgisch (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belgisch (Wang model 724 azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengaals"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengaals (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indisch"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengaals (India)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengaals (India, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengaals (India, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengaals (India, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengaals (India, Uni Gitanjali)"
# "Baishakhi Inscript" is een toetsenbordindeling.
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengaals (India, Baishakhi Inscript)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Meitei (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Punjabi (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Punjabi (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (KaGaPa-fonetisch)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
# Een van de 23 Indische talen.
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayalam"
# Een van de 23 Indische talen.
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayalam (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malayalam (verbeterd Inscript, met roepie-teken)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamil (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamil (toetsenbord met cijfertekens)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamil (TAB-typmachine)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamil (TSCII-typmachine)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamil"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (KaGaPa-fonetisch)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdu (fonetisch)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdu (alternatief fonetisch)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdu (Windows-toetsen)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (KaGaPa-fonetisch)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanskriet (KaGaPa-fonetisch)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (KaGaPa-fonetisch)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Engels (India, met roepie-teken)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnisch"
# Guillemets (of ook quillemets) zijn Franse aanhalingstekens.
# Voorbeeld: "Nederlandse" en «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnisch (met Franse aanhalingstekens)"
# Digraaf - teken samengesteld uit twee letters.
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnisch (met Bosnische digrafen)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnisch (VS-toetsenbord met Bosnische digrafen)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnisch (VS-toetsenbord met Bosnische lettertekens)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugees (Brazilië)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugees (Brazilië, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugees (Brazilië, Dvorak)"
# Nativo is een soort indeling, net als Dvorak en Colemak.
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugees (Brazilië, Nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugees (Brazilië, Nativo voor US-toetsenborden)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (Brazilië, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bulgaars"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bulgaars (traditioneel fonetisch)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bulgaars (nieuw fonetisch)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabisch (Marokko)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Frans (Marokko)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berbers (Marokko, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berbers (Marokko, Tifinagh alternatief)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berbers (Marokko, Tifinagh alternatief fonetisch)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berbers (Marokko, Tifinagh uitgebreid)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berbers (Marokko, Tifinagh fonetisch)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berbers (Marokko, Tifinagh fonetisch uitgebreid)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Engels (Kameroen)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Frans (Kameroen)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Kameroens meertalig (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Kameroens meertalig (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Kameroens meertalig (Dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Burmees"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Frans (Canada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Frans (Canada, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Frans (Canada, historisch)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Canadees meertalig"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Canadees meertalig (eerste deel)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Canadees meertalig (tweede deel)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Engels (Canada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Frans (Democratische Republiek Congo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Chinees"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetaans"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetaans (met ASCII-cijfers)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Oeigoers"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Kroatisch"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is de "Nederlandse" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Kroatisch (met Franse aanhalingstekens)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Kroatisch (met Kroatische digrafen)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Kroatisch (VS-toetsenbord met Kroatische digrafen)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Kroatisch (VS-toetsenbord met Kroatische lettertekens)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Tsjechisch"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Tsjechisch (met &lt;\\|&gt;-toets)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Tsjechisch (qwerty)"
# XXX: brede backslash/uitgebreide backslash -- wat is dit?
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Tsjechisch (qwerty, brede backslash-toets)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Tsjechisch (UCW-indeling, alleen lettertekens met accenten)"
-# XXX: CZ?
-#: ../rules/base.xml.in.h:404
+# XXX: Wat is CZ?
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Tsjechisch (VS, Dvorak met Tsjechische UCW-ondersteuning)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Deens"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Deens (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Deens (Windows-toetsen)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Deens (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Deens (Macintosh, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Deens (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Nederlands"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Nederlands (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Nederlands (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Nederlands (standaard)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
# Dzongkha is een taal die is afgeleid van het oud-Tibetaans.
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
# Estisch, de taal die ook Estlands of Ests wordt genoemd,
# heeft ongeveer 1 miljoen sprekers.
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estisch"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estisch (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estisch (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estisch (VS-toetsenbord met Estische lettertekens)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Perzisch"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Perzisch (met Perzisch cijferblok)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Koerdisch (Iran, Latijns Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Koerdisch (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Koerdisch (Iran, Latijns Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Koerdisch (Iran, Arabisch-Latijns)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Irakees"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Koerdisch (Irak, Latijns Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Koerdisch (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Koerdisch (Irak, Latijns Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Koerdisch (Irak, Arabisch-Latijns)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Faeröers"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Faeröers (zonder dode toetsen)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Fins"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Fins (klassiek)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Fins (klassiek, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Fins (Windows-toetsen)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Noord-Samisch (Finland)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Fins (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Frans"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Frans (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Frans (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Frans (alternatief)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Frans (alternatief, enkel Latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Frans (alternatief, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Frans (alternatief, Sun dode toetsen)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Frans (historisch, alternatief)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Frans (historisch, alternatief, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Frans (historisch, alternatief, Sun dode toetsen)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Frans (Bepo, ergonomisch, op Dvorak-wijze)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Frans (Bepo, ergonomisch, Dvorak-wijze, enkel Latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Frans (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Frans (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Frans (Bretons)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occitaans"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Georgisch (Frankrijk, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Engels (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Engels (Ghana, meertalig)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akaans"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Engels (Ghana, GILLBT)"
@@ -1876,828 +1881,831 @@ msgstr "Engels (Ghana, GILLBT)"
# de Republiek Guinee, is grondwettelijk een presidentiële republiek in
# West-Afrika, gelegen aan de Atlantische Oceaan tussen Guinee-Bissau en
# Sierra Leone. De hoofdstad is Conakry.
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Frans (Guinee)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Georgisch"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgisch (ergonomisch)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgisch (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Russisch (Georgisch)"
-# Russisch (Georgisch)
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Ossetisch (Georgië)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Duits"
# acute - aigu (bijv. á)
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Duits (dode aigu)"
# grave (bijv: à)
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Duits (dode grave en aigu)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Duits (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Duits (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Roemeens (Duitsland)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Roemeens (Duitsland, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Duits (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Duits (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Duits (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Duits (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Duits (Macintosh, zonder dode toetsen)"
# Het Nedersorbisch is de noordelijke versie van de in Brandenburg
# gesproken Sorbische taal.
# http://nl.wikipedia.org/wiki/Nedersorbisch
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Nedersorbisch"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Nedersorbisch (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Duits (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turks (Duitsland)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Russisch (Duitsland, fonetisch)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Duits (historisch)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Grieks"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Grieks (eenvoudig)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Grieks (uitgebreid)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Grieks (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Grieks (meertonig)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Hongaars"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Hongaars (standaard)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Hongaars (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Hongaars (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Hongaars (101/qwertz/komma/dode toetsen)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Hongaars (101/qwertz/komma/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Hongaars (101/qwertz/punt/dode toetsen)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Hongaars (101/qwertz/punt/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Hongaars (101/qwerty/komma/dode toetsen)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Hongaars (101/qwerty/komma/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Hongaars (101/qwerty/punt/dode toetsen)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Hongaars (101/qwerty/punt/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Hongaars (102/qwertz/komma/dode toetsen)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Hongaars (102/qwertz/komma/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Hongaars (102/qwertz/punt/dode toetsen)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Hongaars (102/qwertz/punt/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Hongaars (102/qwerty/komma/dode toetsen)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Hongaars (102/qwerty/komma/zonder dode toetsen)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Hongaars (102/qwerty/punt/dode toetsen)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Hongaars (102/qwerty/punt/zonder dode toetsen)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "IJslands"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "IJslands (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "IJslands (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "IJslands (Macintosh, historisch)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "IJslands (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "IJslands (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebreeuws"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebreeuws (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebreeuws (fonetisch)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebreeuws (Bijbels, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italiaans"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italiaans (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italiaans (Windows-toetsen)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italiaans (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italiaans (VS-toetsenbord met Italiaanse lettertekens)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgisch (Italië)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italiaans (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japans"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japans (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japans (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japans (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japans (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japans (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirgizisch"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirgizisch (fonetisch)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Cambodja)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazachstaans"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Russisch (Kazachstan, met Kazachstaans)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazachstaans (met Russisch)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (STEA voorgestelde standaard indeling)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Spaans (Latijns-Amerika)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Spaans (Latijns-Amerika, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Spaans (Latijns-Amerika, met dode tilde)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Spaans (Latijns-Amerika, Sun dode toetsen)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Spaans (Latijns-Amerika, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Litouws"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Litouws (standaard)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litouws (VS-toetsenbord met Litouwse lettertekens)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litouws (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Litouws (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Litouws (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Lets"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Lets (apostrof-variant)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Lets (tilde-variant)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Lets (F-variant)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Lets (modern)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Lets (ergonomisch, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Lets (aangepast)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-# Montenegrijns is het Servo-Kroatische (Štokavische) dialect
+# Montenegrijns is het Servo-Kroatische (štokavische) dialect
# dat in Montenegro wordt gesproken.
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrijns"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrijns (Cyrillisch)"
# verwisseld/gewisseld/omgewisseld
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrijns (Cyrillisch, ZE en ZHE omgewisseld)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrijns (Latijns Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrijns (Latijns qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrijns (Latijns Unicode qwerty)"
# Guillemets (of ook quillemets) zijn Franse aanhalingstekens.
# Voorbeeld: "Nederlandse" en «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrijns (Cyrillisch met Franse aanhalingstekens)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrijns (Latijns met Franse aanhalingstekens)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Macedonisch"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedonisch (zonder dode toetsen)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltees"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltees (met US-indeling)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongools"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Noors"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Noors (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Noors (Windows-toetsen)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Noors (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Noord-Samisch (Noorwegen)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Noord-Samisch (Noorwegen, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Noors (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Noors (Macintosh, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Noors (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Pools"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Pools (historisch)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Pools (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Pools (Dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Pools (Dvorak, Poolse aanhalingstekens op aanhalingstekentoets)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Pools (Dvorak, Poolse aanhalingstekens op toets 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Kasjoebisch"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Silezisch"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Russisch (Polen, fonetisch Dvorak)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Pools (programmeer-Dvorak)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugees"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugees (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugees (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugees (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugees (Macintosh, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugees (Macintosh, Sun dode toetsen)"
# Nativo is een soort indeling, net als Dvorak en Colemak.
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugees (Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugees (Nativo voor US-toetsenborden)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Roemeens"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Roemeens (cedilla)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Roemeens (standaard)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Roemeens (standaard cedilla)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Roemeens (Windows-toetsen)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Russisch"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Russisch (fonetisch)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Russisch (fonetisch, Windows-toetsen)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Russisch (typmachine)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Russisch (historisch)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Russisch (typmachine, historisch)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Ossetisch (historisch)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Ossetisch (Windows-toetsen)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Tsjoevasjisch"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Tsjoevasjisch (Latijns)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurts"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
# Het Jakoets is een Turkse taal met ongeveer 360 duizend sprekers.
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Jakoets"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Russisch (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Russisch (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Servisch (Rusland)"
# Het Basjkiers is een Turkse taal, voornamelijk gesproken door de Basjkieren.
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Basjkiers"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Russisch (fonetisch, azerty)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Russisch (fonetisch, Frans)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Servisch"
# verwisseld/gewisseld/omgewisseld
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Servisch (Cyrillisch, ZE en ZHE omgewisseld)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Servisch (Latijns)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Servisch (Latijns Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Servisch (Latijns qwerty)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Servisch (Latijns Unicode qwerty)"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is "Nederlands" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Servisch (Cyrillisch met Franse aanhalingstekens)"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is "Nederlands" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Servisch (Latijns met Franse aanhalingstekens)"
@@ -2706,1350 +2714,1342 @@ msgstr "Servisch (Latijns met Franse aanhalingstekens)"
# north-western Serbia (Bačka region) and eastern Croatia
# (therefore also called Yugoslavo-Ruthenian, Vojvodina-Ruthenian
# or Bačka-Ruthenian).
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Pannonisch Rusyn"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Sloveens"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Sloveens (met Franse aanhalingstekens)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Sloveens (VS-toetsenbord met Sloveense lettertekens)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Slowaaks"
# XXX: brede backslash/uitgebreide backslash
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Slowaaks (brede backslash-toets)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Slowaaks (qwerty)"
# XXX: brede backslash/uitgebreide backslash
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slowaaks (qwerty, brede backslash-toets)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Spaans"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Spaans (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Spaans (Windows-toetsen)"
-# inactieve/dode/latente
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Spaans (met dode tilde)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Spaans (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Spaans (Dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturisch (Spanje, met onderpunts H en onderpunts L)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Catalaans (Spanje, met middenpunts L)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Spaans (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Zweeds"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Zweeds (zonder dode toetsen)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Zweeds (Dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Russisch (Zweden, fonetisch)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Russisch (Zweden, fonetisch, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Noord-Samisch (Zweden)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Zweeds (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Zweeds (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Zweedse gebarentaal"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Duits (Zwitserland)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Duits (Zwitserland, historisch)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Duits (Zwitserland, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Duits (Zwitserland, Sun dode toetsen)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Frans (Zwitserland)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Frans (Zwitserland, zonder dode toetsen)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Frans (Zwitserland, Sun dode toetsen)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Frans (Zwitserland, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Duits (Zwitserland, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabisch (Syrië)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syrisch"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syrisch (fonetisch)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Koerdisch (Syrië, Latijns Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Koerdisch (Syrië, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Koerdisch (Syrië, Latijns Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
# Het Tadzjieks of Tajiki.
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadzjieks"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadzjieks (historisch)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Singalees (fonetisch)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamil (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamil (Sri Lanka, TAB-typmachine)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Singalees (VS-toetsenbord met Singalese lettertekens)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
# Het Thai is de officiële taal van Thailand.
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Thai"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Thai (TIS-820.2538)"
# Pattachote en Kedmanee zijn de twee toetsenbordindelingen voor Thai.
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Thai (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turks"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turks (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turks (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turks (Sun dode toetsen)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
-msgstr "Koerdisch (Turks, Latijns Q)"
+msgstr "Koerdisch (Turkije, Latijns Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
-msgstr "Koerdisch (Turks, F)"
+msgstr "Koerdisch (Turkije, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
-msgstr "Koerdisch (Turks, Latijns Alt-Q)"
+msgstr "Koerdisch (Turkije, Latijns Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turks (internationaal, met dode toetsen)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krim-Tataars (Turks Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Krim-Tataars (Turks F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krim-Tataars (Turks Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanees"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanees (oorspronkelijk)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
# Saisiyat, ook Saiset, Seisirat, Saisett, Saisiat, Saisiett, Saisirat,
# Saisyet, Saisyett, Amutoura of Bouiok.
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Oekraïens"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Oekraïens (fonetisch)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Oekraïens (typmachine)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Oekraïens (Windows-toetsen)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Oekraïens (historisch)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Oekraïens (standaard RSTU)"
-# Oekraïens (standaard RSTU).
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Russisch (Oekraïne, standaard RSTU)"
-# Pannonian Rusyn (руска бешеда) or simply Rusyn (or Ruthenian) is a Slavic language
-# or dialect spoken by Pannonian Rusyns in north-western Serbia (Bačka region) and eastern
-# Croatia (therefore also called Yugoslavo-Ruthenian, Vojvodina-Ruthenian or Bačka-Ruthenian).
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
-msgstr "Oekraïens (homophonisch)"
+msgstr "Oekraïens (homofonisch)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Engels (GB)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Engels (GB, uitgebreid, Windows-toetsen)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Engels (GB, internationaal, met dode toetsen)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Engels (GB, Dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Engels (GB, Dvorak met Britse leestekens)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Engels (GB, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Engels (GB, Macintosh internationaal)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Engels (GB, Colemak)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Oezbeeks"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Oezbeeks (Latijns)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Viëtnamees"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Koreaans"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Koreaans (101/104-toetsen compatibel)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japans (PC-98xx serie)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Iers"
# Iers.
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Iers (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
# Iers (Ogham IS434).
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
# Het Urdu, vroeger door Westerse taalkundigen vaak Hindoestani genoemd,
# is de officiële taal van Pakistan.
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabisch (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Engels (Zuid-Afrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (puntkomma en aanhalingsteken op afwijkende plek, historisch)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalees"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Engels (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
# Het Yoruba is een Afrikaanse taal. Het is de taal van de Yoruba
# en wordt gesproken in Nigeria, Benin en Togo.
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
# Het Amhaars is een Semitische taal die in Ethiopië gesproken wordt.
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amhaars"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (linkerhand)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (rechterhand)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmeens"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmeens (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
# Bambara, ook bekend onder de naam Bamanankan, is een Mande-taal die door meer
# dan zes miljoen mensen gesproken wordt, voornamelijk in Mali.
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Frans (Mali, alternatief)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Engels (Mali, US Macintosh)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Engels (Mali, US internationaal)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahili (Tanzania)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahili (Kenia)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
# Tswana of Setswana is een Bantoetaal die wordt gesproken in Botswana.
# Andere benamingen voor Tswana zijn onder meer Sechuana en Beetjuans.
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
# Het Filipijns (Filipino of Pilipino).
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipijns"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipijns (QWERTY Baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipijns (Capewell-Dvorak, Latijns)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipijns (Capewell-Dvorak, Baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipijns (Capewell-QWERF 2006 Latijns)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipijns (Capewell-QWERF 2006 Baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipijns (Colemak, Latijns)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipijns (Colemak, Baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipijns (Dvorak, Latijns)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipijns (Dvorak, Baybayin)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldavisch"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldavisch (Gagauz)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Overschakelen naar een andere indeling"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Rechter Alt-toets (ingedrukt gehouden)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Linker Alt-toets (ingedrukt gehouden)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Linker Windows-toets (ingedrukt gehouden)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Rechter Windows-toets (ingedrukt gehouden)"
# Beide Win-toetsen wisselen de indeling gedurende het indrukken.
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Elke Windows-toets (ingedrukt gehouden)"
# XXX: what IS original capslock action?
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "CapsLock (ingedrukt gehouden); Alt+CapsLock geeft de oorspronkelijke caps-lock actie"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Rechter Ctrl-toets (ingedrukt gehouden)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Rechter Alt-toets"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Linker Alt-toets"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "CapsLock"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Shift + CapsLock"
# CapsLock wisselt naar de eerste indeling, Shift+CapsLock wisselt naar de laatste indeling.
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "CapsLock (naar eerste indeling), Shift+CapsLock (naar laatste indeling)"
# Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling.
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Linker Windows-toets (naar eerste indeling), rechter Windows/Menu-toets (naar laatste indeling)"
# Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling.
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Linker Ctrl-toets (naar eerste indeling), rechter Ctrl-toets (naar laatste indeling)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt + CapsLock"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Beide Shift-toetsen samen"
-# verandert/wijzigt is hier beter dan veranderen/wijzigen
-# "Beide Alt-toetsen samen verandert de groep."
-#
# tezamen/samen/tegelijk
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Beide Alt-toetsen samen"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Beide Ctrl-toetsen samen"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl + Shift"
-# Linker Ctrl + Shift-toets
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Linker Ctrl + linker Shift-toets"
-# Rechter Ctrl + Shift-toets
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Rechter Ctrl + rechter Shift-toets"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt + Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt + Shift"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Linker Alt + linker Shift-toets"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt + Spatie"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Linker Windows-toets"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Windows-toets + Spatie"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Rechter Windows-toets"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Linker Shift-toets"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Rechter Shift-toets"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Linker Ctrl-toets"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Rechter Ctrl-toets"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Scroll-Lock"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Linker Ctrl + linker Windows-toets (naar eerste indeling), rechter Ctrl + Menu-toets (naar tweede indeling)"
# aan te zetten/te kiezen/te selecteren/te krijgen/te bereiken
# 'to choose' is hier een slechte woordkeuze IMO
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Toegang tot het derde niveau"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Elke Windows-toets"
# Beide/Willekeurige/Een van de/Een/Elke
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Elke Alt-toets"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Rechter Alt-toets (Shift + rechter Alt-toets is samensteltoets)"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Rechter Alt-toets geeft nooit het derde niveau"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Enter op cijferblok"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Backslash"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Kleiner dan/Groter dan&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "CapsLock, vergrendelt eenmalig samen met andere derdeniveaukiezer"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Backslash, vergrendelt eenmalig samen met andere derdeniveaukiezer"
# locks - op slot gezet/blijvend/in stand houden
# latches - vergrendelt
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Kleiner dan/Groter dan&gt;, vergrendelt eenmalig samen met andere derdeniveaukiezer"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Positie van Ctrl-toets"
# Ctrl-toets is hier duidelijker
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "CapsLock is Ctrl-toets"
# fungeert als/werkt als/is
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Linker Ctrl is Meta-toets"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Ctrl en CapsLock omwisselen"
# Ctrl-toets links van ‘A’
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Links van de A"
# "Ctrl-toets zit linksonder"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Linksonder"
# fungeert als/werkt als/is
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Rechter Ctrl is rechter Alt-toets"
# fungeert als/werkt als/is
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu is rechter Ctrl-toets"
# fungeert als/werkt als/is
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Rechter Alt is rechter Ctrl-toets"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Linker Alt- en linker Ctrl-toets omwisselen"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Linker Windows- en linker Ctrl-toets omwisselen"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Rechter Windows- en rechter Ctrl-toets omwisselen"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Linker Alt is Ctrl, linker Ctrl is Windows-toets, linker Windows-toets is Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Toetsenbord-LED gebruiken om alternatieve indeling te tonen"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "NumLock"
-# dubbelop numeriek/cijfer
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Indeling van het cijferblok"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Historisch"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren; de laatste op standaardniveau)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Historisch Wang 724"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 cijferblok met Unicode-aanvullingen (pijlen en wiskundige operatoren)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Wang 724 cijferblok met Unicode aanvullingen (pijlen en wiskundige operatoren; de laatste op standaardniveau)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadecimaal"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "ATM/telefoonstijl"
-# Op het cijferblok is de delete toets aangegeven met "Del", maar
+# Op het cijferblok is de Delete-toets aangegeven met "Del", maar
# voor de duidelijkheid maar "Delete-toetsgedrag" van gemaakt.
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Gedrag van Delete-toets op cijferblok"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Historisch met punt"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Historisch met komma"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Vierniveaus-toets met punt"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Vierniveaus-toets met punt, beperkt tot Latin-9"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Vierniveaus-toets met komma"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Vierniveaus-toets met momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Vierniveaus-toets met abstracte scheidingstekens"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Puntkomma op derde niveau"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Gedrag van CapsLock-toets"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "CapsLock gebruikt interne conversie naar hoofdletters; Shift heft CapsLock tijdelijk op"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "CapsLock gebruikt interne conversie naar hoofdletters; Shift heft CapsLock niet op"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "CapsLock werkt als Shift met vergrendeling; Shift heft CapsLock tijdelijk op"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "CapsLock werkt als Shift met vergrendeling; Shift heft CapsLock niet op"
# heeft alleen effect op/werkt alleen op/beïnvloedt alleen ~
# de alfabetische toetsen/
# bepaalt hoofdletters/kleine letters bij alfabetische tekens.<
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "CapsLock beïnvloedt alleen alfabetische tekens"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Van CapsLock een extra NumLock maken"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Esc en CapsLock omwisselen"
# ESC-toets.
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Van CapsLock een extra Esc maken"
# Backspace-toets.
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Van CapsLock een extra Backspace maken"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Van CapsLock een extra Super maken"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Van CapsLock een extra Hyper maken"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "CapsLock schakelt Shift-vergrendeling aan/uit (beïnvloedt alle toetsen)"
# heeft geen functie/geen effect
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "CapsLock is uitgeschakeld"
# Ctrl-toets
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Van CapsLock een extra Ctrl maken"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Gedrag van Alt/Windows-toetsen"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Het standaardgedrag toevoegen aan de Menu-toets"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt en Meta zitten op de Alt-toetsen"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt zit op de Windows-toetsen (én op de gebruikelijke Alt-toetsen)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl zit op de Windows-toetsen (én op de gebruikelijke Ctrl-toetsen)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl zit op de Alt-toetsen, Alt zit op de Windows-toetsen"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta zit op de Windows-toetsen"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta zit op de linker Windows-toets"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper zit op de Windows-toetsen"
# wordt afgebeeld op/zit op
# zit op is veel korter en is ook duidelijker
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt zit op de rechter Windows-toets, Super op de Menu-toets"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt- en Windows-toetsen omwisselen"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Positie van samensteltoets"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "derde niveau van linker Windows-toets"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "derde niveau van rechter Windows-toets"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "derde niveau van Menu"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "derde niveau van linker Ctrl-toets"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "derde niveau van rechter Ctrl-toets"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "derde niveau van CapsLock"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "derde niveau van &lt;Kleiner dan/Groter dan&gt;"
# De tekst op de Pause-toets is meestal "Pause".
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Overige compatibiliteitsopties"
-# dubbelop numeriek/cijfer
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Standaard cijferblok-toetsen"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Cijferblok-toetsen geven altijd cijfers (net als bij Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "NumLock aan geeft cijfers, en Shift schakelt naar cursortoetsen; Numlock uit geeft altijd cursortoetsen (zoals in MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift heft NumLock niet op, maar geeft juist het derde niveau"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Speciale toetsen (Ctrl+Alt+&lt;toets&gt;) afgehandeld in een server"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium-toetsenbord: PC-toetsen emuleren (Print, Scroll-Lock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Shift schakelt CapsLock uit"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Extra typografische tekens aanzetten"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Beide Shift-toetsen samen schakelen CapsLock aan/uit"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Beide Shift-toetsen samen zetten CapsLock aan, één Shift-toets zet uit"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Beide Shift-toetsen samen schakelen ShiftLock aan/uit"
# PointerKeys are the mouse emulation that XKB provides on the press of a key.
# (Test with Shift+NumLock, then the keypad will move the mouse around.)
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Shift + NumLock schakelen 'muistoetsen' aan/uit"
# XXX: what does "grab" mean?
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Het verbreken van 'grabs' via toetsenbord toestaan (veiligheidsrisico)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Het loggen van 'grabs' en 'window trees' toestaan"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Valutatekens aan bepaalde toetsen toevoegen"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euroteken op E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euroteken op 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euroteken op 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euroteken op 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Roepie op 4"
# aan te zetten/te kiezen/te selecteren/te krijgen
# 'to choose' is hier een slechte woordkeuze IMO
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "De toets om het vijde niveau te krijgen"
# locks - op slot gezet/blijvend/in stand houden
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Kleiner dan/Groter dan&gt; geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Rechter Alt-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Linker Windows-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Rechter Windows-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Gebruik van spatiebalk voor het invoeren van harde (niet-afbrekende) spaties"
# Spatiebalk geeft de gebruikelijke spatie op elk niveau.
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Gewone spatie op elk niveau"
# http://en.wikipedia.org/wiki/Non-breaking_space
# niet-afbreekbaar spatieteken/nietafbrekendespatie/
# niet-afbrekende spatie/harde spatie/ vaste spatie
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Harde spatie op het tweede niveau"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Harde spatie op het derde niveau"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Harde spatie op het derde niveau, niets op het vierde niveau"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Harde spatie op het derde niveau, smalle harde spatie op het vierde niveau"
# Spatiebalk geeft harde spatie op het vierde niveau.
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Harde spatie op het vierde niveau"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde niveau"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde niveau (via Ctrl+Shift)"
@@ -4063,103 +4063,103 @@ msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde nive
# Nulbreedte-losmaker/non-verbinder/non-verbindingsteken --
# losmaker is het duidelijkst, het maakt twee tekens los die
# anders verbonden zouden worden. (Tino)
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Nulbreedte-losmaker op het tweede niveau"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Nulbreedte-losmaker op het tweede niveau, nulbreedte-verbinder op het derde niveau"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Nulbreedte-losmaker op het tweede niveau, nulbreedte-verbinder op het derde niveau, harde spatie op het vierde niveau"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, niets op het vierde niveau"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, nulbreedte-verbinder op het vierde niveau"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, smalle harde spatie op het vierde niveau"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Nulbreedte-losmaker op het derde niveau, nulbreedte-verbinder op het vierde niveau"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Japanse toetsenbordopties"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Kana Lock-toets is vergrendelend"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F-stijl backspace"
# De Zenkaku Hankaku toets converteert tussen volle breedte en half breedte karakters.
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Van de Zenkaku Hankaku-toets een extra Esc-toets maken"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Koreaanse Hangul-/Hanja-toetsen"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Fysieke Hangul-/Hanja-toetsen"
# fungeert als/werkt als/is
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Rechter Alt is Hangul, rechter Ctrl is Hanja"
# fungeert als/werkt als/is
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Rechter Ctrl is Hangul, rechter Alt is Hanja"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Esperanto-letters met accenten toevoegen"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Aan de gerelateerde toets in een Qwerty-indeling"
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Aan de gerelateerde toets in een Dvorak-indeling"
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Aan de gerelateerde toets in een Colemak-indeling"
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Toetscompatibiliteit behouden met oude Solaris-toetscodes"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Sun-toetsen-compatibiliteit"
# om zeep te helpen/af te breken/te stoppen/
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Toetscombinatie om de X-server af te breken"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Backspace"
@@ -4219,8 +4219,7 @@ msgstr "aplx"
msgid "APL keyboard symbols (APLX unified)"
msgstr "APL-toetsenbordsymbolen (APLX unified)"
-# Ja! Hee! Dit kan niet!
-# :)
+# Ja, hee! Dit kan niet! :)
#: ../rules/base.extras.xml.in.h:17
msgid "kut"
msgstr "kut"
diff --git a/xorg-server/xkeyboard-config/po/pl.po b/xorg-server/xkeyboard-config/po/pl.po
index b60e09d36..930749bf4 100644
--- a/xorg-server/xkeyboard-config/po/pl.po
+++ b/xorg-server/xkeyboard-config/po/pl.po
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.13.99\n"
+"Project-Id-Version: xkeyboard-config 2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-15 20:16+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-17 11:23+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n"
@@ -918,3087 +918,3099 @@ msgstr "Arabski (QWERTY/cyfry)"
msgid "Arabic (Buckwalter)"
msgstr "Arabski (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabski (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albański"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albański (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armeński"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armeński (fonetyczny)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armeński (alternatywny fonetyczny)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armeński (wschodni)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armeński (zachodni)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armeński (anternatywny wschodni)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Niemiecki (Austria)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Niemiecki (Austria, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Niemiecki (Austria, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Niemiecki (Austria, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "AZ"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Azerbejdżański"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Azerbejdżański (cyrylica)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Białoruski"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Białoruski (stary)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Białoruski (łaciński)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belgijski"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belgijski (alternatywny)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belgijski (alternatywny, tylko Latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belgijski (alternatywny, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belgijski (alternatywny ISO)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belgijski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belgijski (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belgijski (Wang model 724 AZERTY)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengalski"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengalski (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indyjski"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengalski (Indie)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengalski (Indie, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengalski (Indie, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengalski (Indie, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengalski (Indie, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengalski (Indie, Baishakhi Inscript)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gudźarati"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Pendżabski (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Pendżabski (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (fonetyczny KaGaPa)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malajalam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malajalam (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malajalam (rozszerzony Inscript ze znakiem rupii)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Orija"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamilski (unikodowy)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamilski (klawiatura z cyframi)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamilski (maszynistki TAB)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamilski (maszynistki TSCII)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamilski"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (fonetyczny KaGaPa)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdu (fonetyczny)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdu (alternatywny fonetyczny)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdu (klawisze Win)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (fonetyczny KaGaPa)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanskryt (fonetyczny KaGaPa)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (fonetyczny KaGaPa)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Angielski (Indie, ze znakiem rupii)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bośniacki"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bośniacki (z cudzysłowami do cytowania)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bośniacki (z dwuznakami bośniackimi)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bośniacki (klawiatura US z dwuznakami bośniackimi)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bośniacki (klawiatura US z literami bośniackimi)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugalski (Brazylia)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugalski (Brazylia, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugalski (Brazylia, Dvoraka)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugalski (Brazylia, Nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugalski (Brazylia, Nativo dla klawiatur US)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (Brazylia, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bułgarski"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bułgarski (tradycyjny fonetyczny)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bułgarski (nowy fonetyczny)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabski (marokański)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Francuski (Maroko)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berberyjski (Maroko, tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berberyjski (Maroko, alternatywny tifinagh)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berberyjski (Maroko, alternatywny fonetyczny tifinagh)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berberyjski (Maroko, rozszerzony tifinagh)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berberyjski (Maroko, tifinagh fonetyczny"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berberyjski (Maroko, rozszerzony fonetyczny tifinagh)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Angielski (Kamerun)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Francuski (Kamerun)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Kameruński wielojęzyczny (QWERTY)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Kameruński wielojęzyczny (AZERTY)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Kameruński wielojęzyczny (Dvoraka)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Birmański"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Francuski (Kanada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Francuski (kanadyjski, Dvoraka)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Francuski (kanadyjski, stary)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Kanadyjski wielojęzyczny"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Kanadyjski wielojęzyczny (część pierwsza)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Kanadyjski wielojęzyczny (część druga)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Angielski (Kanada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Francuski (Demokratyczna Republika Konga)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Chiński"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tybetański"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tybetański (z liczbami ASCII)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Ujgurski"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Chorwacki"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Chorwacki (z cudzysłowami do cytowania)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Chorwacki (z dwuznakami chorwackimi)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Chorwacki (klawiatura US z dwuznakami chorwackimi)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Chorwacki (klawiatura US z literami chorwackimi)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Czeski"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Czeski (z klawiszem &lt;\\|&gt;)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Czeski (QWERTY)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Czeski (QWERTY, rozszerzony Backslash)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Czeski (układ UCW - tylko litery akcentowane)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Czeski (US Dvoraka z obsługą CZ UCW)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Duński"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Duński (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Duński (klawisze Win)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Duński (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Duński (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Duński (Dvoraka)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Holenderski"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Holenderski (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Holenderski (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Holenderski (standardowy)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongka"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estoński"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estoński (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estoński (Dvoraka)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estoński (klawiatura US z literami estońskimi)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Perski"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Perski (z perską klawiaturą numeryczną)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdyjski (Iran, łaciński Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdyjski (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdyjski (Iran, łaciński Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdyjski (Iran, arabsko-łaciński)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Iracki"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdyjski (Irak, łaciński Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdyjski (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdyjski (Irak, łaciński Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdyjski (Irak, arabsko-łaciński)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Farerski"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Farerski (bez klawiszy akcentów)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Fiński"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Fiński (klasyczny)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Fiński (klasyczny, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Fiński (klawisze Win)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Północnolapoński (Finlandia)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Fiński (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Francuski"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Francuski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Francuski (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Francuski (alternatywny)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Francuski (alternatywny, tylko Latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Francuski (alternatywny, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Francuski (alternatywny, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Francuski (stary, alternatywny)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Francuski (stary alternatywny, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Francuski (stary alternatywny, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka, tylko Latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Francuski (Dvoraka)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Francuski (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Francuski (bretoński)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Okcytański"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Gruziński (Francja, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Angielski (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Angielski (Ghana, wielojęzyczny)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fulani"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Angielski (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Francuski (Gwinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Gruziński"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Gruziński (ergonomiczny)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Gruziński (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Rosyjski (gruziński)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Osetyjski (Gruzja)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Niemiecki"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Niemiecki (akcent ostry)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Niemiecki (akcent gravis)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Niemiecki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Niemiecki (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumuński (Niemcy)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumuński (Niemcy, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Niemiecki (Dvoraka)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Niemiecki (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Niemiecki (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Niemiecki (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Niemiecki (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Dolnołużycki"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Dolnołużycki (QWERTZ)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Niemiecki (QWERTY)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turecki (Niemcy)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Rosyjski (Niemcy, fonetyczny)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Niemiecki (stary)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Grecki"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Grecki (prosty)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Grecki (rozszerzony)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Grecki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Grecki (politoniczny)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Węgierski"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Węgierski (standardowy)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Węgierski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Węgierski (QWERTY)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Węgierski (101/QWERTZ/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Węgierski (101/QWERTZ/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Węgierski (101/QWERTZ/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Węgierski (101/QWERTZ/kropka/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Węgierski (101/QWERTY/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Węgierski (101/QWERTY/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Węgierski (101/QWERTY/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Węgierski (101/QWERTY/kropka/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Węgierski (102/QWERTZ/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Węgierski (102/QWERTZ/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Węgierski (102/QWERTZ/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Węgierski (102/QWERTZ/kropka/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Węgierski (102/QWERTY/przecinek/klawisze akcentów)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Węgierski (102/QWERTY/przecinek/bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Węgierski (102/QWERTY/kropka/klawisze akcentów)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Węgierski (102/QWERTY/kropka/bez klawiszy akcentów)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Islandzki"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Islandzki (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Islandzki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Islandzki (Macintosh, stary)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Islandzki (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Islandzki (Dvoraka)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebrajski"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebrajski (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebrajski (fonetyczny)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebrajski (biblijny, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Włoski"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Włoski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Włoski (klawisze Win)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Włoski (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Włoski (klawiatura US z literami włoskimi)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Gruziński (Włochy)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Włoski (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japoński"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japoński (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japoński (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japoński (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japoński (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japoński (Dvoraka)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirgiski"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirgiski (fonetyczny)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmerski (Kambodża)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazaski"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Rosyjski (Kazahstan, z kazaskim)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazaski (z rosyjskim)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Laotański"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Laotański (proponowany układ standardowy STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Hiszpański (Ameryka Łacińska)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Hiszpański (Ameryka Łacińska, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Hiszpański (Ameryka Łacińska, ze znakiem tyldy)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Hiszpański (Ameryka Łacińska, klawisze akcentów Suna)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Hiszpański (Ameryka Łacińska, Dvoraka)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Litewski"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Litewski (standardowy)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litewski (klawiatura US z literami litewskimi)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litewski (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Litewski (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Litewski (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Łotewski"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Łotewski (wariant z apostrofem)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Łotewski (wariant z tyldą)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Łotewski (wariant F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Łotewski (współczesny)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Łotewski (ergonomiczny ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Łotewski (zaadaptowany)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maoryski"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Czarnogórski"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Czarnogórski (cyrylicki)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Czarnogórski (cyrylicki, zamienione ZE i ŻE)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Czarnogórski (łaciński unikodowy)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Czarnogórski (łaciński QWERTY)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Czarnogórski (łaciński unikodowy QWERTY)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Czarnogórski (cyrylicki z cudzysłowami)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Czarnogórski (łaciński z cudzysłowami)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Macedoński"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Macedoński (bez klawiszy akcentów)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltański"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltański (z układem US)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongolski"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Norweski"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Norweski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Norweski (klawisze Win)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Norweski (Dvoraka)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Północnolapoński (Norwegia)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Północnolapoński (Norwegia, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Norweski (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norweski (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Norweski (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polski"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polski (stary)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polski (QWERTZ)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polski (Dvoraka)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem cudzysłowu)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Kaszubski"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Śląski"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Rosyjski (Polska, fonetyczny Dvoraka)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polski (Dvoraka programisty)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugalski"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugalski (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugalski (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugalski (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugalski (Macintosh, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugalski (Macintosh, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugalski (Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugalski (Nativo dla klawiatur US)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugalia, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumuński"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumuński (cedilla)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumuński (standardowy)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumuński (standardowy cedilla)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumuński (klawisze Win)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Rosyjski"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Rosyjski (fonetyczny)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Rosyjski (fonetyczny, klawisze Win)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Rosyjski (maszynistki)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Rosyjski (stary)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Rosyjski (maszynistki, stary)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatarski"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Osetyjski (stary)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Osetyjski (klawisze Win)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Czuwaski"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Czuwaski (łaciński)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurcki"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Jakucki"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kałmucki"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Rosyjski (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Rosyjski (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbski (Rosja)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Baszkirski"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Maryjski"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Rosyjski (fonetyczny azerty)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Rosyjski (fonetyczny francuski)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbski"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbski (cyrylicki, zamienione ZE i ŻE)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbski (łaciński)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbski (łaciński unikodowy)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbski (łaciński QWERTY)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbski (łaciński unikodowy QWERTY)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbski (cyrylicki z cudzysłowami)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbski (łaciński z cudzysłowami)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Pannońskorusiński"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Słoweński"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Słoweński (z cudzysłowami do cytowania)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Słoweński (klawiatura US z literami słoweńskimi)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Słowacki"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Słowacki (rozszerzony backslash)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Słowacki (QWERTY)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Słowacki (QWERTY, rozszerzony Backslash)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Hiszpański"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Hiszpański (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Hiszpański (klawisze Win)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Hiszpański (ze znakiem tyldy)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Hiszpański (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Hiszpański (Dvoraka)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturski (hiszpański, z H i L z dolną kropką)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Kataloński (hiszpański, z L ze środkową kropką)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Hiszpański (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Szwedzki"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Szwedzki (bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Szwedzki (Dvoraka)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Rosyjski (Szwecja, fonetyczny)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Rosyjski (Szwecja, fonetyczny, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Północnolapoński (Szwecja)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Szwedzki (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Szwedzki (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Szwedzki migowy"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Niemiecki (Szwajcaria)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Niemiecki (Szwajcaria, stary)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Niemiecki (Szwajcaria, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Niemiecki (Szwajcaria, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Francuski (Szwajcaria)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Francuski (Szwajcaria, bez klawiszy akcentów)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Francuski (Szwajcaria, klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Francuski (Szwajcaria, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Niemiecki (Szwajcaria, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabski (syryjski)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syryjski"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syryjski (fonetyczny)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdyjski (Syria, łaciński Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdyjski (Syria, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdyjski (Syria, łaciński Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadżycki"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadżycki (stary)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Syngaleski (fonetyczny)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilski (Sri Lanka, unikodowy)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilski (Sri Lanka, maszynistki TAB)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Syngaleski (klawiatura US z literami syngaleskimi)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Tajski"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Tajski (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Tajski (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turecki"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turecki (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turecki (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turecki (klawisze akcentów Suna)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdyjski (Turcja, łaciński Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdyjski (Turcja, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdyjski (Turcja, łaciński Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turecki (międzynarodowy z klawiszami akcentów)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krymskotatarski (turecki Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Krymskotatarski (turecki F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krymskotatarski (turecki Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Tajwański"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Tajwański (autochtoniczny)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Tajwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ukraiński"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ukraiński (fonetyczny)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ukraiński (maszynistki)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ukraiński (klawisze Win)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ukraiński (stary)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ukraiński (standardowy RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Rosyjski (Ukraina, standardowy RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ukraiński (homofoniczny)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Angielski (Wielka Brytania)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Angielski (Wielka Brytania, rozszerzone klawisze Win)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Angielski (Wielka Brytania, międzynarodowy z klawiszami akcentów)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Angielski (Wielka Brytania, Dvoraka)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Angielski (Wielka Brytania, Dvoraka z brytyjskimi znakami przestankowymi)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Angielski (Wielka Brytania, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Angielski (Wielka Brytania, międzynarodowy Macintosh)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Angielski (Wielka Brytania, Colemak)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Uzbecki"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Uzbecki (łaciński)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Wietnamski"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Koreański"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Koreański (kompatybilny ze 101/104 klawiszami)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japoński (serie PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irlandzki"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "Irlandzki gaelicki"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irlandzki (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogamiczny"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogamiczny (IS434)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabski (pakistański)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Malediwski"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Angielski (Afryka Południowa)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperancki"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (zamieniony średnik i apostrof, przestarzałe)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalski"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Angielski (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Ibo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Joruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharski"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolof"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Braille'a"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Braille (leworęczny)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Braille (praworęczny)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmeński"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmeński (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Francuski (Mali, alternatywny)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Angielski (Mali, USA - Macintosh)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Angielski (Mali, międzynarodowy USA)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Suahili (Tanzania)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Suahili (Kenia)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikiju"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipiński"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (baybain QWERTY)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipiński (łaciński Capewella-Dvoraka)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipiński (baybayin Capewella-Dvoraka)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipiński (łaciński Capewella-QWERF 2006)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipiński (baybayin Capewella-QWERF 2006)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipiński (łaciński Colemak)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipiński (baybain Colemak)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipiński (łaciński Dvoraka)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipiński (baybain Dvoraka)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Mołdawski"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Mołdawski (gagauski)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Przełączenie na inny układ"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Prawy Alt (wciśnięty)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Lewy Alt (wciśnięty)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Lewy Win (wciśnięty)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Prawy Win (wciśnięty)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Dowolny klawisz Win (wciśnięty)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "CapsLock (wciśnięty), Alt+CapsLock działa jak zwykły CapsLock"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Prawy Ctrl (wciśnięty)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Prawy Alt"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Lewy Alt"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "CapsLock"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Shift+CapsLock"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "CapsLock (do pierwszego układu), Shift+CapsLock (do ostatniego układu)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Lewy Win (do pierwszego układu), prawy Win/Menu (do ostatniego układu)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Lewy Ctrl (do pierwszego układu), prawy Ctrl (do ostatniego układu)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+CapsLock"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Oba klawisze Shift naraz"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Oba klawisze Alt naraz"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Oba klawisze Ctrl naraz"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Lewy Ctrl+lewy Shift"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Prawy Ctrl+prawy Shift"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Lewy Alt+lewy Shift"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Spacja"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Lewy Win"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Win+Spacja"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Prawy Win"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Lewy Shift"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Prawy Shift"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Lewy Ctrl"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Prawy Ctrl"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "ScrollLock"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Lewy Ctrl+lewy Win (do pierwszego układu), prawy Ctrl+Menu (do drugiego układu)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Klawisz wybierający poziom 3."
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Dowolny klawisz Win"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Dowolny klawisz Alt"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Prawy Alt, Shift+prawy Alt jako Compose"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Prawy Alt nigdy nie wybierający poziomu 3."
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Enter na klawiaturze numerycznej"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Backslash"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mniejsze/Większe&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "CapsLock wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Odwrotny ukośnik wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Położenie klawisza Ctrl"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "CapsLock jako Ctrl"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Lewy Ctrl jako Meta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Zamiana Ctrl i CapsLocka"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Z lewej 'A'"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "W lewym dolnym rogu"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Prawy Ctrl jako prawy Alt"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu jako prawy Ctrl"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Prawy Alt jako prawy Ctrl"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Zamiana lewego Alta z lewym Ctrl"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Zamiana lewego Win z lewym Ctrl"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Zamiana prawego Win z prawym Ctrl"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Lewy Alt jako Ctrl, lewy Ctrl jako Win, lewy Win jako Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Używanie diody na klawiaturze do sygnalizacji układu alternatywnego"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "NumLock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Układ klawiatury numerycznej"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Stary"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Dodatki Unicode (strzałki i symbole matematyczne)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Dodatki Unicode (strzałki i symbole matematyczne; symbole matematyczne na poziomie domyślnym)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Legacy Wang 724"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne; symbole matematyczne na poziomie domyślnym)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Szesnastkowy"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "ATM/telefoniczna"
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Zachowanie klawisza Delete na klawiaturze numerycznej"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Klawisz tradycyjny z kropką"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Klawisz tradycyjny z przecinkiem"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Klawisz czterofunkcyjny z kropką"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Klawisz czterofunkcyjny z kropką, tylko Latin-9"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Klawisz czterofunkcyjny z przecinkiem"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Klawisz czterofunkcyjny ze znakiem momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Klawisz czterofunkcyjny z abstrakcyjnymi separatorami"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Średnik na poziomie 3."
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Zachowanie klawisza CapsLock"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter; Shift wstrzymuje CapsLock"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter; Shift nie wpływa na CapsLock"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "CapsLock działa jako Shift z blokadą; Shift wstrzymuje CapsLock"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "CapsLock działa jako Shift z blokadą; Shift nie wpływa na CapsLock"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "CapsLock przełącza wielkość znaków alfabetycznych"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "CapsLock jako dodatkowy NumLock"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Zamiana Esc i CapsLocka"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "CapsLock jako dodatkowy Esc"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "CapsLock jako dodatkowy Backspace"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "CapsLock jako dodatkowy Super"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "CapsLock jako dodatkowy Hyper"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "CapsLock przełącza ShiftLock (wpływając na wszystkie klawisze)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "CapsLock wyłączony"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "CapsLock jako dodatkowy Ctrl"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Zachowanie klawiszy Alt/Win"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Dodanie standardowego działania klawisza Menu"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt i Meta pod klawiszami Alt"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt pod klawiszami Win (oraz zwykłymi klawiszami Alt)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl pod klawiszami Win (oraz zwykłymi klawiszami Ctrl)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl pod klawiszami Alt, Alt pod klawiszami Win"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta pod klawiszami Win"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta pod lewym Win"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper pod klawiszami Win"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt pod prawym Win, Super pod Menu"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Lewy zamieniony z Win"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Położenie klawisza Compose"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "Pozion 3. lewego klawisza Win"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "Pozion 3. prawego klawisza Win"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "Poziom 3. klawisza Menu"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "Poziom 3. lewego klawisza Ctrl"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "Poziom 3. prawego klawisza Ctrl"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "Poziom 3. klawisza Caps Lock"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "Poziom 3. klawisza &lt;Mniejsze/Większe&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pauza"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Różne opcje kompatybilności"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Domyślne klawisze klawiatury numerycznej"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Klawiatura numeryczna zawsze prowadza cyfry (jak w Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "NumLock włączony: cyfry, Shift przełącza na strzałki; NumLock wyłączonty: zawsze strzałki (jak w MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift nie anuluje NumLocka, wybiera poziom 3."
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Klawisze specjalne (Ctrl+Alt+&lt;klawisz&gt;) obsługiwane przez serwer"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple Aluminium Keyboard: emulacja klawiszy PC (Print, ScrollLock, Pause, NumLock)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Shift anuluje CapsLock"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Włączenie dodatkowych znaków typograficznych"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Oba klawisze Shift naraz przełączają CapsLock"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Oba klawisze Shift naraz włączają CapsLock, jeden Shift wyłącza"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Oba klawisze Shift naraz przełączają ShiftLock"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Shift + NumLock przełącza klawisze kursorów"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Akcje klawiatury mogą przełamywać przechwytywanie (uwaga: zagrożenie bezpieczeństwa)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Możliwe przechwytywanie i logowanie drzewa okien"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Dodanie znaków walut do pewnych klawiszy"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro pod E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro pod 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro pod 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro pod 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupia pod 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Klawisz wybierający poziom 5."
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Prawy Alt wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Lewy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Prawy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Używanie klawisza spacji do wprowadzania znaku niełamliwej spacji"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Zwykła spacja na dowolnym poziomie"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Znak niełamliwej spacji na poziomie 2."
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Znak niełamliwej spacji na poziomie 3."
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Znak niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6."
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6. (z Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2."
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3."
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3., znak niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3."
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Znak rozdzielający zerowej szerokości na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Opcje klawiatury japońskiej"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Blokujący klawisz Kana Lock"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Backspace w stylu NICOLA-F"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Zenkaku Hankaku jako dodatkowy Esc"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Koreańskie klawisze Hangul/Hanja"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Sprzętowe klawisze Hangul/Hanja"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Prawy Alt jako Hangul, prawy Ctrl jako Hanja"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Prawy Ctrl jako Hangul, prawy Alt jako Hanja"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Dodanie akcentów Esperanto (supersigno)"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Pod odpowiednimi klawiszami wg układu QWERTY"
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Pod odpowiednimi klawiszami wg układu Dvoraka"
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Pod odpowiednimi klawiszami wg układu Colemak"
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Zachowanie zgodności klawiszy ze starymi kodami Solarisa"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Zgodność klawiszy z Sunem"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Sekwencja klawiszy zabijająca serwer X"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Backspace"
diff --git a/xorg-server/xkeyboard-config/po/sv.po b/xorg-server/xkeyboard-config/po/sv.po
index 8954a4c2f..80966cb1c 100644
--- a/xorg-server/xkeyboard-config/po/sv.po
+++ b/xorg-server/xkeyboard-config/po/sv.po
@@ -7,17 +7,17 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.13.99\n"
+"Project-Id-Version: xkeyboard-config 2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2015-01-15 01:16+0000\n"
-"PO-Revision-Date: 2015-01-25 20:50+0100\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-14 22:14+0100\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.7.3\n"
+"X-Generator: Poedit 1.7.6\n"
#: ../rules/base.xml.in.h:1
msgid "Generic 101-key PC"
@@ -922,3089 +922,3102 @@ msgstr "Arabisk (qwerty/siffror)"
msgid "Arabic (Buckwalter)"
msgstr "Arabisk (Buckwalter)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Arabisk (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Albansk"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Albansk (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:76
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Armenisk"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Armenisk (fonetisk)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Armenisk (Alternativ fonetisk)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Armenisk (östlig)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Armenisk (västlig)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Armenisk (Alternativ östlig)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Tysk (Österrike)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Tysk (Österrike, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Tysk (Österrike, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Tysk (Österrike, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Azerbajdzjansk"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Azerbajdzjansk (Kyrillisk)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Vitrysk"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Vitrysk (äldre)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Vitrysk (latin)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:85
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Belgisk"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Belgisk (alternativ)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Belgisk (alternativ, endast Latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Belgisk (alternativ, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Belgisk (ISO-alternativ)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Belgisk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Belgisk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Belgisk (Wang modell 724 azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Bengali"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Bengali (Probhat)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Indisk"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Bengali (Indien)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Bengali (Indien, Probhat)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Bengali (Indien, Baishakhi)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Bengali (Indien, Bornona)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Bengali (Indien, Uni Gitanjali)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Bengali (Indien, Baishakhi Inscript)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Manipuri (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Gujaratisk"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Punjabi (Gurmukhi)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Punjabi (Gurmukhi Jhelum)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
# Även kanaresisk (äldre form)
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Kannada (KaGaPa-fonetisk)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Malayalam"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Malayalamsk (Lalitha)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Malayalam (förbättrad Inscript, med rupietecken)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Oriya"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Tamilsk (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Tamilsk (tangentbord med siffror)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Tamilsk (TAB Typewriter)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Tamilsk (TSCII Typewriter)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Tamilsk"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Telugo"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Telugu (KaGaPa-fonetisk)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Urdu (fonetisk)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Urdu (alternativ fonetisk)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Urdu (Windows-tangenter)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Hindi (Bolnagri)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Hindi (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Hindi (KaGaPa-fonetisk)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Sanskrit (KaGaPa-fonetisk)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Marathi (KaGaPa-fonetisk)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Engelsk (Indien, med rupietecken)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Bosnisk"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Bosnisk (med gåsögon för citattecken)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Bosnisk (med bosniska digrafer)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Bosnisk (USA-tangentbord med bosniska digrafer)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Bosnisk (USA-tangentbord med bosniska bokstäver)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:88
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Portugisisk (Brasilien)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Portugisisk (Brasilien, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Portugisisk (Brasilien, Dvorak)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Portugisisk (Brasilien, Nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Portugisisk (Brasilien, Nativo för USA-tangentbord)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Esperanto (Brasilien, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Bulgarisk"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Bulgarisk (traditionell fonetisk)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Bulgarisk (ny fonetisk)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Arabisk (Marocko)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Fransk (Marocko)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Berberisk (Marocko, Tifinagh)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Berberisk (Marocko, Tifinagh alternativ)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Berberisk (Marocko, Tifinagh alternativ fonetisk)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Berberisk (Marocko, Tifinagh utökad)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Berberisk (Marocko, Tifinagh fonetisk)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Berberisk (Marocko, Tifinagh utökad fonetisk)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:151
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Engelsk (Kamerun)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Fransk (Kamerun)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Kamerun flerspråkig (qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Kamerun flerspråkig (azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Kamerun flerspråkig (Dvorak)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Burmesisk"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Fransk (Kanada)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Fransk (Kanada, Dvorak)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Fransk (Kanada, äldre)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Kanadensisk flerspråkig"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Kanadensisk flerspråkig (första delen)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Kanadensisk flerspråkig (andra delen)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Engelsk (Kanada)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Fransk (Demokratiska republiken Kongo)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Kinesisk"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Tibetansk"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetansk (med ASCII-taltecken)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Uyghur"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Kroatisk"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Kroatisk (med gåsögon för citattecken)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Kroatisk (med kroatiska digrafer)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Kroatisk (USA-tangentbord med kroatiska digrafer)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Kroatisk (USA-tangentbord med kroatiska bokstäver)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:91
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Tjeckisk"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Tjeckisk (med &lt;\\|&gt;-tangent)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Tjeckisk (qwerty)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Tjeckisk (qwerty, utökat omvänt snedstreck)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Tjeckisk (UCW-layout, endast bokstäver med accenter)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Tjeckisk (US Dvorak med CZ UCW-stöd)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:94
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Dansk"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Dansk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Dansk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Dansk (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Dansk (Macintosh, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Dansk (Dvorak)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:97
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Nederländsk"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Nederländsk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Nederländsk (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Nederländsk (standard)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Dzongkha"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:100
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Estnisk"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Estnisk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Estnisk (Dvorak)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Estnisk (USA-tangentbord med estniska bokstäver)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:30
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Persisk"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Persisk (med persiskt numeriskt tangentbord)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Kurdisk (Iran, Latinskt Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Kurdisk (Iran, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Kurdisk (Iran, latinskt Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Kurdisk (Iran, Arabisk-Latin)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Irakisk"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Kurdisk (Irak, latinskt Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Kurdisk (Irak, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Kurdisk (Irak, latinskt Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Kurdisk (Irak, Arabisk-Latin)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Färöisk"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Färöisk (eliminera stumma tangenter)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:103
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Finsk"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Finsk (klassisk)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Finsk (klassisk, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Finsk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Nordsamisk (Finland)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Finska (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:105
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Fransk"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Fransk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Fransk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Fransk (alternativ)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Fransk (alternativ, endast Latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Fransk (alternativ, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Fransk (alternativ, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Franska (äldre, alternativ)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Fransk (äldre, alternativ, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Fransk (äldre, alternativ, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Fransk (Bepo, ergonomisk, Dvorak-liknande)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Fransk (Bepo, ergonomisk, Dvorak-liknande, endast Latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Fransk (Dvorak)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Franska (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Fransk (Bretagnsk)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Occitansk"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Georgisk (Frankrike, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Engelsk (Ghana)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Engelsk (Ghana, flerspråkig)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Akan"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Fula"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Ga"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Avatime"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Engelsk (Ghana, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Fransk (Guinea)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Georgisk"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Georgisk (ergonomisk)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Georgisk (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Rysk (Georgien)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Ossetisk (Georgien)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Tysk"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Tysk (stumma akutaccent)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Tysk (stum grav accent)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Tysk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Tysk (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Rumänska (Tyskland)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Rumänska (Tyskland, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Tysk (Dvorak)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Tysk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Tysk (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Tysk (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Tysk (Macintosh, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Lågsorbisk"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Lågsorbisk (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Tysk (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Turkisk (Tyskland)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Rysk (Tyskland, fonetisk)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Tysk (äldre)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:108
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Grekisk"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Grekisk (enkel)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Grekisk (utökad)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Grekisk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Grekisk (polytonisk)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Ungersk"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Ungersk (standard)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Ungersk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Ungersk (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Ungersk (101/qwertz/komma/stumma tangenter)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Ungersk (101/qwertz/komma/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Ungersk (101/qwertz/punkt/stumma tangenter)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Ungersk (101/qwertz/punkt/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Ungersk (101/qwerty/komma/stumma tangenter)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Ungersk (101/qwerty/komma/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Ungersk (101/qwerty/punkt/stumma tangenter)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Ungersk (101/qwerty/punkt/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Ungersk (102/qwertz/komma/stumma tangenter)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Ungersk (102/qwertz/komma/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Ungersk (102/qwertz/punkt/stumma tangenter)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Ungersk (102/qwertz/punkt/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Ungersk (102/qwerty/komma/stumma tangenter)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Ungersk (102/qwerty/komma/eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Ungersk (102/qwerty/punkt/stumma tangenter)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Ungersk (102/qwerty/punkt/eliminera stumma tangenter)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Isländsk"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Isländsk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Isländsk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Isländsk (Macintosh, äldre)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Isländsk (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Isländsk (Dvorak)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:79
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Hebreisk"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Hebreisk (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Hebreisk (fonetisk)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Hebreisk (Biblisk, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:111
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Italiensk"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Italiensk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Italiensk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Italiensk (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Italiensk (USA-tangentbord med italienska bokstäver)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Georgisk (Italien)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Italiensk (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:114
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Japansk"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Japansk (Kana)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Japansk (Kana 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Japansk (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Japansk (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Japansk (Dvorak)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Kirgizisk"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Kirgizisk (fonetisk)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Khmer (Kambodja)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Kazakisk"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Rysk (Kazakstan, med kazakiska)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Kazakisk (med ryska)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Lao (STEA-föreslagen standardlayout)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Spansk (Latinamerikansk)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Spansk (Latinamerikansk, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Spansk (Latinamerikansk, inkluderar stumma tilde)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Spansk (Latinamerikansk, Sun stumma tangenter)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Spansk (Latinamerikansk, Dvorak)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:33
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Litauisk"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Litauisk (standard)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Litauisk (USA-tangentbord med litauiska bokstäver)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Litauisk (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Litauisk (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Litauisk (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:37
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Lettisk"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Lettisk (apostrof-variant)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Lettisk (tilde-variant)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Lettisk (F-variant)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Lettisk (modern)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Lettisk (ergonomisk, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Lettisk (anpassad)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Maori"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Montenegrinsk"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Montenegrinsk (Kyrillisk)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Montenegrinsk (Kyrillisk, ZE och ZHE utbytta)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Montenegrinsk (Latin Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Montenegrinsk (Latin qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Montenegrinsk (Latin unicode qwerty)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Montenegrinsk (Kyrillisk med gåsögon)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Montenegrinsk (Latin med gåsögon)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Makedonsk"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Makedonsk (eliminera stumma tangenter)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Maltesisk"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Maltesisk (med USA-layout)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Mongolisk"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:119
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Norsk"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Norsk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Norsk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Norsk (Dvorak)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Nordsamisk (Norge)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Nordsamisk (Norge, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Norsk (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Norsk (Macintosh, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Norsk (Colemak)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:57
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Polsk"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Polsk (äldre)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Polsk (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Polsk (Dvorak)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Polsk (Dvorak, polska citattecken på citattangent)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Polsk (Dvorak, polska citattecken på tangent 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Kasjubisk"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Schlesisk"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Rysk (Polen, fonetisk Dvorak)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Polsk (Dvorak för programmerare)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:121
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Portugisisk"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Portugisisk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Portugisisk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Portugisisk (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Portugisisk (Macintosh, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Portugisisk (Macintosh, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Portugisisk (Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Portugisisk (Nativo för USA-tangentbord)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Esperanto (Portugal, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Rumänsk"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Rumänsk (cedilj)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Rumänsk (standard)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Rumänsk (standard cedilj)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Rumänsk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:71
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Rysk"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Rysk (fonetisk)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Rysk (fonetiska Windows-tangenter)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Rysk (skrivmaskin)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Rysk (äldre)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Rysk (skrivmaskin, äldre)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Ossetisk (äldre)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Ossetisk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Tjuvasjisk"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Tjuvasjisk (Latin)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Udmurt"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Yakut"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Rysk (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Rysk (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Serbisk (Ryssland)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Basjkirisk"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Mari"
-#: ../rules/base.xml.in.h:699
+#: ../rules/base.xml.in.h:701
msgid "Russian (phonetic azerty)"
msgstr "Rysk (fonetisk azerty)"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:702
msgid "Russian (phonetic French)"
msgstr "Rysk (fonetisk franska)"
-#: ../rules/base.xml.in.h:701 ../rules/base.extras.xml.in.h:68
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Serbisk"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Serbisk (Kyrillisk, ZE och ZHE utbytta)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Serbisk (Latin)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Serbisk (Latin Unicode)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Serbisk (Latin qwerty)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Serbisk (Latin Unicode qwerty)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Serbisk (Kyrillisk med gåsögon)"
-#: ../rules/base.xml.in.h:708
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Serbisk (Latin med gåsögon)"
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Pannonisk rusinsk"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Slovensk"
-#: ../rules/base.xml.in.h:713
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Slovensk (med gåsögon för citattecken)"
-#: ../rules/base.xml.in.h:714
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Slovensk (USA-tangentbord med slovenska bokstäver)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:716 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:717 ../rules/base.extras.xml.in.h:124
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Slovakisk"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Slovakisk (utökat omvänt snedstreck)"
-#: ../rules/base.xml.in.h:719
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Slovakisk (qwerty)"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Slovakisk (qwerty, utökat omvänt snedstreck)"
-#: ../rules/base.xml.in.h:721 ../rules/base.extras.xml.in.h:127
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Spansk"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Spansk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Spansk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Spansk (Inkludera dött tilde-tecken)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Spansk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Spansk (Dvorak)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Asturisk (Spanien, med nederpunkts H och nederpunkts L)"
-#: ../rules/base.xml.in.h:728
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Katalansk (Spanien, med mittenpunkts L)"
-#: ../rules/base.xml.in.h:729
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Spansk (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:731 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:732 ../rules/base.extras.xml.in.h:130
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Svensk"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Svensk (eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Svensk (Dvorak)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Rysk (Sverige, fonetisk)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Rysk (Sverige, fonetisk, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Nordsamisk (Sverige)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Svenska (Macintosh)"
-#: ../rules/base.xml.in.h:739
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Svensk (Svdvorak)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Svenskt teckenspråk"
-#: ../rules/base.xml.in.h:741 ../rules/base.extras.xml.in.h:133
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Tysk (Schweiz)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Tysk (Schweiz, äldre)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Tysk (Schweiz, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Tysk (Schweiz, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Fransk (Schweiz)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Fransk (Schweiz, eliminera stumma tangenter)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Fransk (Schweiz, Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Fransk (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:749
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Tysk (Schweiz, Macintosh)"
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Arabisk (Syrien)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Syrisk"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Syrisk (fonetisk)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Kurdisk (Syrien, latinskt Q)"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Kurdisk (Syrien, F)"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Kurdisk (Syrien, latinskt Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:760
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Tadjikisk"
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Tadjikisk (äldre)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
-msgstr "Sinhala (fonetisk)"
+msgstr "Singalesisk (fonetisk)"
-#: ../rules/base.xml.in.h:765
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Tamilsk (Sri Lanka, Unicode)"
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Tamilsk (Sri Lanka, TAB Typewriter)"
+# https://bugs.freedesktop.org/show_bug.cgi?id=90456
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Singalesisk (USA-tangentbord med singalesiska bokstäver)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Thailändsk"
-#: ../rules/base.xml.in.h:770
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Thailändsk (TIS-820.2538)"
-#: ../rules/base.xml.in.h:771
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Thailändsk (Pattachote)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:773 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:774 ../rules/base.extras.xml.in.h:137
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Turkisk"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Turkisk (F)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Turkisk (Alt-Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Turkisk (Sun stumma tangenter)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Kurdisk (Turkiet, latinskt Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Kurdisk (Turkiet, F)"
-#: ../rules/base.xml.in.h:780
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Kurdisk (Turkiet, latinskt Alt-Q)"
-#: ../rules/base.xml.in.h:781
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Turkisk (Internationell med stumma tangenter)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:783 ../rules/base.extras.xml.in.h:63
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krimtatarisk (Turkiskt Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Krimtatarisk (Turkiskt F)"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krimtatarisk (Turkisk Alt-Q)"
-#: ../rules/base.xml.in.h:787
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Taiwanesisk"
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Taiwanesisk (inhemsk)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:790
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:791
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Saisiyat (Taiwan)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:793 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:140
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Ukrainsk"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Ukrainsk (fonetisk)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Ukrainsk (skrivmaskin)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Ukrainsk (Windows-tangenter)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Ukrainsk (äldre)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Ukrainsk (Standard RSTU)"
-#: ../rules/base.xml.in.h:800
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Rysk (Ukraina, standard RSTU)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Ukrainsk (homofonisk)"
-#: ../rules/base.xml.in.h:802 ../rules/base.extras.xml.in.h:142
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Engelsk (Storbritannien)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Engelsk (Storbritannien, utökade Windows-tangenter)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Engelsk (Storbritannien, internationell med stumma tangenter)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Engelsk (Storbritannien, Dvorak)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Engelsk (Storbritannien, Dvorak med brittisk-engelska skiljetecken)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Engelsk (Storbritannien, Macintosh)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Engelsk (Storbritannien, Macintosh internationell)"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Engelsk (Storbritannien, Colemak)"
-#: ../rules/base.xml.in.h:810
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Uzbekisk"
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Uzbekisk (Latin)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:813
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:814
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "Vietnamesisk"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:816 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:817 ../rules/base.extras.xml.in.h:145
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Koreansk"
-#: ../rules/base.xml.in.h:818
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Koreansk (101/104-tangenters kompatibel)"
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Japansk (PC-98xx-serien)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Irländsk"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Irländsk (UnicodeExpert)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Ogham"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Ogham (IS434)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Urdu (Pakistan)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Urdu (Pakistan, CRULP)"
-#: ../rules/base.xml.in.h:829
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Urdu (Pakistan, NLA)"
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Arabisk (Pakistan)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:832
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Sindhi"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:836
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Dhivehi"
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Engelsk (Sydafrika)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:840
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Esperanto (flyttat semikolon och citattecken, föråldrat)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:844
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Nepalesisk"
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Engelsk (Nigeria)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:847
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:850
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Yoruba"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:853
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Amharisk"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:856
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Wolofsk"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Punktskrift"
-#: ../rules/base.xml.in.h:861
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Punktskrift (vänster hand)"
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Punktskrift (höger hand)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:865
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Turkmenisk"
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Turkmenisk (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Bambara"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Fransk (Mali, alternativ)"
-#: ../rules/base.xml.in.h:871
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Engelsk (Mali, USA Macintosh)"
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Engelsk (Mali, USA internationell)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Swahilisk (Tanzania)"
-#: ../rules/base.xml.in.h:876
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Swahilisk (Kenya)"
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Kikuyu"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:879
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Tswana"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Filipino"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Filipino (QWERTY Baybayin)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Filipino (Capewell-Dvorak Latin)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Filipino (Capewell-Dvorak Baybayin)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Filipino (Capewell-QWERF 2006 Latin)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Filipino (Capewell-QWERF 2006 Baybayin)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Filipino (Colemak Latin)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Filipino (Colemak Baybayin)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Filipino (Dvorak Latin)"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Filipino (Dvorak Baybayin)"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Moldavisk"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Moldavisk (Gagauz)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Byta till en annan layout"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Höger Alt-tangent (då den trycks ned)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Vänster Alt (då den trycks ned)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Vänster Win-tangent (då den trycks ned)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Höger Win-tangent (då den trycks ned)"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Valfri Win-tangent (då den trycks ned)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (när den trycks ned), Alt+Caps Lock gör ursprunglig capslock-åtgärd"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Höger Ctrl-tangent (då den trycks ned)"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Höger Alt"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Vänster alt"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Skift+Caps Lock"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (till första layouten), Skift+Caps Lock (till sista layouten)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Vänster Win (till första layouten), Höger Win/Meny (till sista layouten)"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Vänster Ctrl (till första layouten), Höger Ctrl (till sista layouten)"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Båda Skift-tangenterna tillsammans"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Båda Alt-tangenterna tillsammans"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Båda Ctrl-tangenterna tillsammans"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Skift"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Vänster ctrl+vänster skift"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Höger Ctrl + höger Skift"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Skift"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Vänster Alt+Vänster Skift"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Blanksteg"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Meny"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Vänster Win-tangent"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Win-tangent+Blanksteg"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Höger Win-tangent"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Vänster skift"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Höger skift"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Vänster Ctrl"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Höger Ctrl"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Vänster Ctrl+ Vänster Win (till första layouten), Höger Ctrl+Meny (till andra layouten)"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Tangent för att välja tredje nivån"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Valfri Win-tangent"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Valfri Alt-tangent"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Höger Alt-tangent, Skift+höger Alt-tangent är Compose"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Höger Alt-tangent väljer aldrig tredje nivån"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Enter på numeriskt tangentbord"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Omvänt snedstreck"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mindre än/Större än&gt;"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock väljer tredje nivån, låses när nedtryckt tillsammans med en annan tredjenivåväljare"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Omvänt snedstreck väljer tredje nivån, låses när nedtryckt tillsammans med en annan tredjenivåväljare"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Mindre än/Större än&gt; väljer tredje nivån, låses när nedtryckt tillsammans med annan tredjenivåväljare"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Position för Ctrl-tangenten"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock som Ctrl"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Vänster Ctrl som Meta"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Byt Ctrl och Caps Lock"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Till vänster om \"A\""
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Nere till vänster"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Höger Ctrl-tangent fungerar som höger Alt"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Meny som Höger Ctrl"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Höger Alt som Höger Ctrl"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Byt vänster Alt-tangent med vänster Ctrl-tangent"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Byt vänster Win-tangent med vänster Ctrl-tangent"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Byt höger Win-tangent med höger Ctrl-tangent"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Vänster Alt som Ctrl, vänster Ctrl som Win, vänster Win som Alt"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Använd tangentbordslampa för att visa alternativ layout"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Layout för numeriskt tangentbord"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Äldre"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode-tillägg (pilar och matematikoperatorer)"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Unicode-tillägg (pilar och matematikoperatorer; matematikoperatorer på standardnivå)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Gammalt Wang 724"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Wang 724 numeriskt tangentbord med Unicode-tillägg (pilar och matematikoperatorer)"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Wang 724 numeriskt tangentbord med Unicode-tillägg (pilar och matematikoperatorer; matematikoperatorer på standardnivå)"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Hexadecimal"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "Knappsats/telefonliknande"
# KONTROLLERA DENNA
-#: ../rules/base.xml.in.h:968
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Beteende för Delete-tangent på numeriskt tangentbord"
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Äldre tangent med punkt"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Äldre tangent med komma"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Fjärdenivåtangent med punkt"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Fjärdenivåtangent med punkt, Latin-9-begränsning"
-#: ../rules/base.xml.in.h:974
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Fjärdenivåtangent med komma"
-#: ../rules/base.xml.in.h:975
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Fjärdenivåtangent med momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Fjärdenivåtangent med abstrakta avgränsare"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Semikolon på tredje nivån"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Beteende för Caps Lock-tangenten"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock använder intern skiftlägesstyrning; Skift \"pausar\" Caps Lock"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Caps Lock använder intern skiftlägesstyrning; Skift påverkar inte Caps Lock"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock fungerar som Skift med låsning; Skift \"pausar\" Caps Lock"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Caps Lock fungerar som Skift med låsning; Skift påverkar inte Caps Lock"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock växlar normalt skiftläge på alfabetiska tecken"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Gör Caps Lock till ytterligare en Num Lock-tangent"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Byt ESC och Caps Lock"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Gör Caps Lock till ytterligare en ESC-tangent"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Gör Caps Lock till ytterligare en backstegstangent"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Gör Caps Lock till ytterligare en Super-tangent"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Gör Caps Lock till ytterligare en Hyper-tangent"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Caps Lock växlar Skift (påverkar alla tangenter)"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Caps Lock är inaktiverad"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Gör Caps Lock till ytterligare en Ctrl-tangent"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Alt/Win-tangentbeteende"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Lägg till standardbeteendet till Meny-tangenten"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt och Meta finns på Alt-tangenterna"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt är mappad till Win-tangenterna (och de vanliga Alt-tangenterna)"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl är mappad till Win-tangenterna (och de vanliga Ctrl-tangenterna)"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl är mappad till Alt-tangenterna, Alt-tangenten är mappad till Win-tangenterna"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta är mappad till Win-tangenterna"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta är mappad till vänster Win-tangent"
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper är mappad till Win-tangenterna"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt är mappad till högra Win-tangenten och Super till Meny"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt är utbytt med Win-tangent"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Placering av Compose-tangent"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "Tredje nivån av vänster Win"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "Tredje nivån av höger Win"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "Tredje nivån av Meny"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "Tredje nivån av vänster Ctrl"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "Tredje nivån av höger Ctrl"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "Tredje nivån av Caps Lock"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "Tredje nivån av &lt;Mindre än/Större än&gt;"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Diverse kompatibilitetsalternativ"
-#: ../rules/base.xml.in.h:1017
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Standardtangenter för numeriskt tangentbord"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "Tangenter på det numeriska tangentbordet ger alltid siffror (som på Mac OS)"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1022
msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
msgstr "NumLock på: siffror, Skift växlar till piltangenter, Numlock av: alltid piltangenter (som i MS Windows)"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Skift avbryter inte Num Lock, väljer tredje nivån istället"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Specialtangenter (Ctrl+Alt+‹tangent›) hanteras i en server"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Apple aluminiumtangentbord: emulera PC-tangenter (Print, Scroll Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Skift avbryter Caps Lock"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Aktivera extra typografiska tecken"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Båda Skifttangenterna tillsammans växlar Caps Lock"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Båda Skifttangenterna tillsammans aktiverar Caps Lock, en Skifttangent inaktiverar"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Båda Skifttangenterna tillsammans växlar ShiftLock"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Skift + NumLock växlar pekartangenter"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Tillåt avbrott av fångad inmatning med tangentbordsåtgärder (varning: säkerhetsrisk)"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Tillåt loggning av fångst och fönsterträd"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Lägga till valutatecken till vissa tangenter"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Euro på E"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Euro på 2"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Euro på 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Euro på 5"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Rupee på 4"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Tangent för att välja femte nivån"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Mindre än/Större än&gt; väljer femte nivån, låses när nedtryckt tillsammans med en annan femtenivåväljare"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Höger Alt-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan femtenivåväljare"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Vänster Win-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan femtenivåväljare"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Höger Win-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan femtenivåväljare"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Använda blankstegstangenten för att mata in icke-brytande blankstegstecken"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Vanligt blanksteg på alla nivåer"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Icke-brytande blankstegstecken på andra nivån"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Icke-brytande blankstegstecken på tredje nivån"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Icke-brytande blankstegstecken på tredje nivån, ingenting på fjärde nivån"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Icke-brytande blankstegstecken på tredje nivån, tunt icke-brytande blankstegstecken på fjärde nivån"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Icke-brytande blankstegstecken på fjärde nivån"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Icke-brytande blankstegstecken på fjärde nivån, tunt icke-brytande blankstegstecken på sjätte nivån"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Icke-brytande blankstegstecken på fjärde nivån, tunt icke-brytande blankstegstecken på sjätte nivån (via Ctrl+Skift)"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, noll-bredd, sammanfogande tecken på tredje nivån"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, noll-bredd, sammanfogande tecken på tredje nivån, icke-brytande blankstegstecken på fjärde nivån"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån, ingenting på fjärde nivån"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån, noll-bredd sammanfogande på fjärde nivån"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån, tunt icke-brytande blanksteg på fjärde nivån"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Noll-bredd, icke-sammanfogande tecken på tredje nivån, noll-bredd, sammanfogande på fjärde nivån"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Tangentbordsalternativ för japanska"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Kana Lock-tangent låser"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "Backsteg i NICOLA-F-stil"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Gör Zenkaku Hankaku till ytterligare en ESC-tangent"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1066
msgid "Korean Hangul/Hanja keys"
msgstr "Koreanska Hangul/Hanja-tangenter"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1067
msgid "Hardware Hangul/Hanja keys"
msgstr "Hårdvarutangenter för Hangul/Hanja"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1068
msgid "Right Alt as Hangul, right Ctrl as Hanja"
msgstr "Höger Alt som Hangul, höger Ctrl som Hanja"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1069
msgid "Right Ctrl as Hangul, right Alt as Hanja"
msgstr "Höger Ctrl som Hangul, höger Alt som Hanja"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Lägga till bokstäver med övertecken för Esperanto"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "Till motsvarande tangent i en Qwerty-layout."
-#: ../rules/base.xml.in.h:1069
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "Till motsvarande tangent i en Dvorak-layout."
-#: ../rules/base.xml.in.h:1070
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "Till motsvarande tangent i en Colemak-layout."
-#: ../rules/base.xml.in.h:1071
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Behåll tangentkompatibilitet med gamla tangentkoder för Solaris"
-#: ../rules/base.xml.in.h:1072
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Kompatibilitet med Sun-tangenter"
-#: ../rules/base.xml.in.h:1073
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Tangentsekvens för att döda X-servern"
-#: ../rules/base.xml.in.h:1074
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Backsteg"
diff --git a/xorg-server/xkeyboard-config/po/uk.po b/xorg-server/xkeyboard-config/po/uk.po
index 772cc753b..cd82ad0fa 100644
--- a/xorg-server/xkeyboard-config/po/uk.po
+++ b/xorg-server/xkeyboard-config/po/uk.po
@@ -7,13 +7,13 @@
# Andriy Rysin <arysin@bcsii.com>, 2007, 2008.
# Andriy Rysin <arysin@gmail.com>, 2008.
# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2011.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014, 2015.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.12.99\n"
+"Project-Id-Version: xkeyboard-config-2.14.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2014-09-18 23:46+0100\n"
-"PO-Revision-Date: 2014-09-19 11:08+0300\n"
+"POT-Creation-Date: 2015-05-13 23:54+0100\n"
+"PO-Revision-Date: 2015-05-15 00:49+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
"Language: uk\n"
@@ -760,11 +760,11 @@ msgid "Htc Dream phone"
msgstr "Телефон HTC Dream"
#. Keyboard indicator for English layouts
-#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:46
+#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:47
msgid "en"
msgstr "en"
-#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:47
+#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:48
msgid "English (US)"
msgstr "Англійська (США)"
@@ -822,7 +822,7 @@ msgid "English (programmer Dvorak)"
msgstr "Англійська (програмістський Дворак)"
#. Keyboard indicator for Russian layouts
-#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:69
+#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:70
msgid "ru"
msgstr "ru"
@@ -855,7 +855,7 @@ msgid "English (Workman, international with dead keys)"
msgstr "Англійська (інтернаціональна Воркмена зі сліпими клавішами)"
#. Keyboard indicator for Persian layouts
-#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:28
+#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:29
msgid "fa"
msgstr "fa"
@@ -894,11 +894,11 @@ msgid "Uzbek (Afghanistan, OLPC)"
msgstr "Узбецька (Афганістан, OLPC)"
#. Keyboard indicator for Arabic layouts
-#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:80
+#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:81
msgid "ar"
msgstr "ar"
-#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:81
+#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:82
msgid "Arabic"
msgstr "Арабська"
@@ -926,3063 +926,3099 @@ msgstr "Арабська (qwerty/цифри)"
msgid "Arabic (Buckwalter)"
msgstr "Арабська (Бакволтера)"
+#: ../rules/base.xml.in.h:232
+msgid "Arabic (Macintosh)"
+msgstr "Арабська (Macintosh)"
+
#. Keyboard indicator for Albanian layouts
-#: ../rules/base.xml.in.h:233
+#: ../rules/base.xml.in.h:234
msgid "sq"
msgstr "sq"
-#: ../rules/base.xml.in.h:234
+#: ../rules/base.xml.in.h:235
msgid "Albanian"
msgstr "Албанська"
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:236
msgid "Albanian (Plisi D1)"
msgstr "Албанська (Plisi D1)"
#. Keyboard indicator for Armenian layouts
-#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:74
+#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
msgid "hy"
msgstr "hy"
-#: ../rules/base.xml.in.h:238 ../rules/base.extras.xml.in.h:75
+#: ../rules/base.xml.in.h:239 ../rules/base.extras.xml.in.h:76
msgid "Armenian"
msgstr "Вірменська"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:240
msgid "Armenian (phonetic)"
msgstr "Вірменська (фонетична)"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:241
msgid "Armenian (alternative phonetic)"
msgstr "Вірменська (альтернативна фонетична)"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:242
msgid "Armenian (eastern)"
msgstr "Вірменська (східна)"
-#: ../rules/base.xml.in.h:242
+#: ../rules/base.xml.in.h:243
msgid "Armenian (western)"
msgstr "Вірменська (західна)"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:244
msgid "Armenian (alternative eastern)"
msgstr "Вірменська (альтернативна східна)"
#. Keyboard indicator for German layouts
-#: ../rules/base.xml.in.h:245 ../rules/base.extras.xml.in.h:22
+#: ../rules/base.xml.in.h:246 ../rules/base.extras.xml.in.h:22
msgid "de"
msgstr "de"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:247
msgid "German (Austria)"
msgstr "Німецька (Австрія)"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:248
msgid "German (Austria, eliminate dead keys)"
msgstr "Німецька (Австрія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:249
msgid "German (Austria, Sun dead keys)"
msgstr "Німецька (Австрія, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:250
msgid "German (Austria, Macintosh)"
msgstr "Німецька (Австрія, Macintosh)"
#. Keyboard indicator for Azerbaijani layouts
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:252
msgid "az"
msgstr "az"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:253
msgid "Azerbaijani"
msgstr "Азербайджанська"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:254
msgid "Azerbaijani (Cyrillic)"
msgstr "Азербайджанська (кирилиця)"
#. Keyboard indicator for Belarusian layouts
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:256
msgid "by"
msgstr "by"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:257
msgid "Belarusian"
msgstr "Білоруська"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:258
msgid "Belarusian (legacy)"
msgstr "Білоруська (застаріла)"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:259
msgid "Belarusian (Latin)"
msgstr "Білоруська (латиниця)"
#. Keyboard indicator for Belgian layouts
-#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:83
+#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
msgid "be"
msgstr "be"
-#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:84
+#: ../rules/base.xml.in.h:262 ../rules/base.extras.xml.in.h:85
msgid "Belgian"
msgstr "Бельгійська"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:263
msgid "Belgian (alternative)"
msgstr "Бельгійська (альтернативна)"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:264
msgid "Belgian (alternative, Latin-9 only)"
msgstr "Бельгійська (альтернативна, лише Latin-9)"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:265
msgid "Belgian (alternative, Sun dead keys)"
msgstr "Бельгійська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:266
msgid "Belgian (ISO alternate)"
msgstr "Бельгійська (додаткова ISO)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:267
msgid "Belgian (eliminate dead keys)"
msgstr "Бельгійська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:268
msgid "Belgian (Sun dead keys)"
msgstr "Бельгійська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:269
msgid "Belgian (Wang model 724 azerty)"
msgstr "Бельгійська (модель Wang 724, azerty)"
#. Keyboard indicator for Bangla layouts
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:271
msgid "bn"
msgstr "bn"
-#: ../rules/base.xml.in.h:271
+#: ../rules/base.xml.in.h:272
msgid "Bangla"
msgstr "Бенгальська"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:273
msgid "Bangla (Probhat)"
msgstr "Бенгальська (пробхат)"
#. Keyboard indicator for Indian layouts
-#: ../rules/base.xml.in.h:274
+#: ../rules/base.xml.in.h:275
msgid "in"
msgstr "in"
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:276
msgid "Indian"
msgstr "Індійська"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:277
msgid "Bangla (India)"
msgstr "Бенгальська (Індія)"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:278
msgid "Bangla (India, Probhat)"
msgstr "Бенгальська (Індія, пробхат)"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:279
msgid "Bangla (India, Baishakhi)"
msgstr "Бенгальська (Індія, байшахі)"
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:280
msgid "Bangla (India, Bornona)"
msgstr "Бенгальська (Індія, борнона)"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:281
msgid "Bangla (India, Uni Gitanjali)"
msgstr "Бенгальська (Індія, уні гітанджалі)"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:282
msgid "Bangla (India, Baishakhi Inscript)"
msgstr "Бенгальська (Індія, байшахі, індійські символи)"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:283
msgid "Manipuri (Eeyek)"
msgstr "Маніпурі (Eeyek)"
#. Keyboard indicator for Gujarati layouts
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:285
msgid "gu"
msgstr "gu"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:286
msgid "Gujarati"
msgstr "Гуджараті"
#. Keyboard indicator for Punjabi layouts
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:288
msgid "pa"
msgstr "pa"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:289
msgid "Punjabi (Gurmukhi)"
msgstr "Пенджабська (гурмухі)"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:290
msgid "Punjabi (Gurmukhi Jhelum)"
msgstr "Пенджабська (гурмухі, джелум)"
#. Keyboard indicator for Kannada layouts
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:292
msgid "kn"
msgstr "kn"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:293
msgid "Kannada"
msgstr "Каннада"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:294
msgid "Kannada (KaGaPa phonetic)"
msgstr "Каннада (KaGaPa, фонетична)"
#. Keyboard indicator for Malayalam layouts
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:296
msgid "ml"
msgstr "ml"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:297
msgid "Malayalam"
msgstr "Малаяламська"
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:298
msgid "Malayalam (Lalitha)"
msgstr "Малаяламська (лаліта)"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:299
msgid "Malayalam (enhanced Inscript, with rupee sign)"
msgstr "Малаяламська (покращений запис індійських мов з символом рупії)"
#. Keyboard indicator for Oriya layouts
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:301
msgid "or"
msgstr "or"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:302
msgid "Oriya"
msgstr "Орія"
#. Keyboard indicator for Tamil layouts
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:304
msgid "ta"
msgstr "ta"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:305
msgid "Tamil (Unicode)"
msgstr "Тамільська (Unicode)"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:306
msgid "Tamil (keyboard with numerals)"
msgstr "Тамільська (клавіатура з цифрами)"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:307
msgid "Tamil (TAB typewriter)"
msgstr "Тамільська (TAB, машинопис)"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:308
msgid "Tamil (TSCII typewriter)"
msgstr "Тамільська (TSCII, машинопис)"
-#: ../rules/base.xml.in.h:308
+#: ../rules/base.xml.in.h:309
msgid "Tamil"
msgstr "Тамільська"
#. Keyboard indicator for Telugu layouts
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:311
msgid "te"
msgstr "te"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:312
msgid "Telugu"
msgstr "Телугу"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:313
msgid "Telugu (KaGaPa phonetic)"
msgstr "Телугу (KaGaPa, фонетична)"
#. Keyboard indicator for Urdu layouts
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:315
msgid "ur"
msgstr "ur"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:316
msgid "Urdu (phonetic)"
msgstr "Урду (фонетична)"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:317
msgid "Urdu (alternative phonetic)"
msgstr "Урду (альтернативна фонетична)"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:318
msgid "Urdu (WinKeys)"
msgstr "Урду (з клавішами Win)"
#. Keyboard indicator for Hindi layouts
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:320
msgid "hi"
msgstr "hi"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:321
msgid "Hindi (Bolnagri)"
msgstr "Хінді (болнагрі)"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:322
msgid "Hindi (Wx)"
msgstr "Хінді (Wx)"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:323
msgid "Hindi (KaGaPa phonetic)"
msgstr "Хінді (KaGaPa, фонетична)"
#. Keyboard indicator for Sanskrit layouts
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:325
msgid "sa"
msgstr "sa"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:326
msgid "Sanskrit (KaGaPa phonetic)"
msgstr "Санскритська (KaGaPa, фонетична)"
#. Keyboard indicator for Marathi layouts
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:328
msgid "mr"
msgstr "mr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:329
msgid "Marathi (KaGaPa phonetic)"
msgstr "Мараті (KaGaPa, фонетична)"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:330
msgid "English (India, with rupee sign)"
msgstr "Англійська (Індія, з підтримкою символу рупії)"
#. Keyboard indicator for Bosnian layouts
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:332
msgid "bs"
msgstr "bs"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:333
msgid "Bosnian"
msgstr "Боснійська"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:334
msgid "Bosnian (with guillemets for quotes)"
msgstr "Боснійська (кутові лапки)"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:335
msgid "Bosnian (with Bosnian digraphs)"
msgstr "Боснійська (з боснійськими диграфами)"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:336
msgid "Bosnian (US keyboard with Bosnian digraphs)"
msgstr "Боснійська (клавіатура США з боснійськими диграфами)"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:337
msgid "Bosnian (US keyboard with Bosnian letters)"
msgstr "Боснійська (клавіатура США з боснійськими літерами)"
#. Keyboard indicator for Portuguese layouts
-#: ../rules/base.xml.in.h:338 ../rules/base.extras.xml.in.h:86
+#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
msgid "pt"
msgstr "pt"
-#: ../rules/base.xml.in.h:339 ../rules/base.extras.xml.in.h:87
+#: ../rules/base.xml.in.h:340 ../rules/base.extras.xml.in.h:88
msgid "Portuguese (Brazil)"
msgstr "Португальська (Бразилія)"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:341
msgid "Portuguese (Brazil, eliminate dead keys)"
msgstr "Португальська (Бразилія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:342
msgid "Portuguese (Brazil, Dvorak)"
msgstr "Португальська (Бразилія, Дворак)"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:343
msgid "Portuguese (Brazil, Nativo)"
msgstr "Португальська (Бразилія, Nativo)"
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:344
msgid "Portuguese (Brazil, Nativo for US keyboards)"
msgstr "Португальська (Бразилія, Nativo для американських клавіатур)"
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:345
msgid "Esperanto (Brazil, Nativo)"
msgstr "Есперанто (бразильська, Nativo)"
#. Keyboard indicator for Bulgarian layouts
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:347
msgid "bg"
msgstr "bg"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:348
msgid "Bulgarian"
msgstr "Болгарська"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:349
msgid "Bulgarian (traditional phonetic)"
msgstr "Болгарська (традиційна фонетична)"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:350
msgid "Bulgarian (new phonetic)"
msgstr "Болгарська (нова фонетична)"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:351
msgid "Arabic (Morocco)"
msgstr "Арабська (Марокко)"
#. Keyboard indicator for French layouts
-#: ../rules/base.xml.in.h:352 ../rules/base.extras.xml.in.h:15
+#: ../rules/base.xml.in.h:353 ../rules/base.extras.xml.in.h:15
msgid "fr"
msgstr "fr"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:354
msgid "French (Morocco)"
msgstr "Французька (Марокко)"
#. Keyboard indicator for Berber layouts
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:356
msgid "ber"
msgstr "ber"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:357
msgid "Berber (Morocco, Tifinagh)"
msgstr "Берберська (Марокко, давньолівійська)"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:358
msgid "Berber (Morocco, Tifinagh alternative)"
msgstr "Берберська (Марокко, тифінаг, альтернативна)"
-#: ../rules/base.xml.in.h:358
+#: ../rules/base.xml.in.h:359
msgid "Berber (Morocco, Tifinagh alternative phonetic)"
msgstr "Берберська (Марокко, тифінаг, альтернативна фонетична)"
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:360
msgid "Berber (Morocco, Tifinagh extended)"
msgstr "Берберська (Марокко, тифінаг, розширена)"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:361
msgid "Berber (Morocco, Tifinagh phonetic)"
msgstr "Берберська (Марокко, тифінаг, фонетична)"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:362
msgid "Berber (Morocco, Tifinagh extended phonetic)"
msgstr "Берберська (Марокко, тифінаг, розширена фонетична)"
#. Keyboard indicator for Cameroon layouts
-#: ../rules/base.xml.in.h:363 ../rules/base.extras.xml.in.h:149
+#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
msgid "cm"
msgstr "cm"
-#: ../rules/base.xml.in.h:364 ../rules/base.extras.xml.in.h:150
+#: ../rules/base.xml.in.h:365 ../rules/base.extras.xml.in.h:151
msgid "English (Cameroon)"
msgstr "Англійська (Камерун)"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:366
msgid "French (Cameroon)"
msgstr "Французька (Камерун)"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:367
msgid "Cameroon Multilingual (qwerty)"
msgstr "Камерунська (багатомовна, qwerty)"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:368
msgid "Cameroon Multilingual (azerty)"
msgstr "Камерунська (багатомовна, azerty)"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:369
msgid "Cameroon Multilingual (Dvorak)"
msgstr "Камерунська (багатомовна, Дворак)"
#. Keyboard indicator for Burmese layouts
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:371
msgid "my"
msgstr "my"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:372
msgid "Burmese"
msgstr "Бірманська"
-#: ../rules/base.xml.in.h:372 ../rules/base.extras.xml.in.h:16
+#: ../rules/base.xml.in.h:373 ../rules/base.extras.xml.in.h:16
msgid "French (Canada)"
msgstr "Французька (Канада)"
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:374
msgid "French (Canada, Dvorak)"
msgstr "Французька (Канада, Дворак)"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:375
msgid "French (Canada, legacy)"
msgstr "Французька (Канада, застаріла)"
-#: ../rules/base.xml.in.h:375
+#: ../rules/base.xml.in.h:376
msgid "Canadian Multilingual"
msgstr "Канадська (багатомовна)"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:377
msgid "Canadian Multilingual (first part)"
msgstr "Канадська (багатомовна, перша частина)"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:378
msgid "Canadian Multilingual (second part)"
msgstr "Канадська (багатомовна, друга частина)"
#. Keyboard indicator for Inuktikut layouts
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:380
msgid "ike"
msgstr "ike"
-#: ../rules/base.xml.in.h:380
+#: ../rules/base.xml.in.h:381
msgid "Inuktitut"
msgstr "Інуктитут"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:382
msgid "English (Canada)"
msgstr "Англійська (Канада)"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:383
msgid "French (Democratic Republic of the Congo)"
msgstr "Французька (Демократична республіка Конго)"
#. Keyboard indicator for Taiwanese layouts
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:385
msgid "zh"
msgstr "zh"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:386
msgid "Chinese"
msgstr "Китайська"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:387
msgid "Tibetan"
msgstr "Тибетська"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:388
msgid "Tibetan (with ASCII numerals)"
msgstr "Тибетська (з ASCII числами)"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:389
msgid "ug"
msgstr "ug"
-#: ../rules/base.xml.in.h:389
+#: ../rules/base.xml.in.h:390
msgid "Uyghur"
msgstr "Уйгурська"
#. Keyboard indicator for Croatian layouts
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:392
msgid "hr"
msgstr "hr"
-#: ../rules/base.xml.in.h:392
+#: ../rules/base.xml.in.h:393
msgid "Croatian"
msgstr "Хорватська"
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:394
msgid "Croatian (with guillemets for quotes)"
msgstr "Хорватська (кутові лапки)"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:395
msgid "Croatian (with Croatian digraphs)"
msgstr "Хорватська (з хорватськими диграфами)"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:396
msgid "Croatian (US keyboard with Croatian digraphs)"
msgstr "Хорватська (клавіатура США з хорватськими диграфами)"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:397
msgid "Croatian (US keyboard with Croatian letters)"
msgstr "Хорватська (клавіатура США з хорватськими літерами)"
#. Keyboard indicator for Chech layouts
-#: ../rules/base.xml.in.h:398 ../rules/base.extras.xml.in.h:89
+#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
msgid "cs"
msgstr "cs"
-#: ../rules/base.xml.in.h:399 ../rules/base.extras.xml.in.h:90
+#: ../rules/base.xml.in.h:400 ../rules/base.extras.xml.in.h:91
msgid "Czech"
msgstr "Чеська"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:401
msgid "Czech (with &lt;\\|&gt; key)"
msgstr "Чеська (з клавішею &lt;\\|&gt;)"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:402
msgid "Czech (qwerty)"
msgstr "Чеська (qwerty)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:403
msgid "Czech (qwerty, extended Backslash)"
msgstr "Чеська (qwerty, розширені функції Backslash)"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:404
msgid "Czech (UCW layout, accented letters only)"
msgstr "Чеська (UCW-розкладка, лише літери з акцентами)"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:405
msgid "Czech (US Dvorak with CZ UCW support)"
msgstr "Чеська (Дворак-США з підтримкою CZ UCW)"
#. Keyboard indicator for Danish layouts
-#: ../rules/base.xml.in.h:406 ../rules/base.extras.xml.in.h:92
+#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
msgid "da"
msgstr "da"
-#: ../rules/base.xml.in.h:407 ../rules/base.extras.xml.in.h:93
+#: ../rules/base.xml.in.h:408 ../rules/base.extras.xml.in.h:94
msgid "Danish"
msgstr "Данська"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:409
msgid "Danish (eliminate dead keys)"
msgstr "Данська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:410
msgid "Danish (Winkeys)"
msgstr "Данська (Winkeys)"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:411
msgid "Danish (Macintosh)"
msgstr "Данська (Macintosh)"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:412
msgid "Danish (Macintosh, eliminate dead keys)"
msgstr "Данська (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:413
msgid "Danish (Dvorak)"
msgstr "Данська (Дворака)"
#. Keyboard indicator for Dutch layouts
-#: ../rules/base.xml.in.h:414 ../rules/base.extras.xml.in.h:95
+#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
msgid "nl"
msgstr "nl"
-#: ../rules/base.xml.in.h:415 ../rules/base.extras.xml.in.h:96
+#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:97
msgid "Dutch"
msgstr "Голландська"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:417
msgid "Dutch (Sun dead keys)"
msgstr "Голландська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:418
msgid "Dutch (Macintosh)"
msgstr "Голландська (Macintosh)"
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:419
msgid "Dutch (standard)"
msgstr "Голландська (стандартна)"
#. Keyboard indicator for Dzongkha layouts
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:421
msgid "dz"
msgstr "dz"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:422
msgid "Dzongkha"
msgstr "Дзонг-ке"
#. Keyboard indicator for Estonian layouts
-#: ../rules/base.xml.in.h:423 ../rules/base.extras.xml.in.h:98
+#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
msgid "et"
msgstr "et"
-#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:99
+#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:100
msgid "Estonian"
msgstr "Естонська"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:426
msgid "Estonian (eliminate dead keys)"
msgstr "Естонська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:427
msgid "Estonian (Dvorak)"
msgstr "Естонська (Дворака)"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:428
msgid "Estonian (US keyboard with Estonian letters)"
msgstr "Естонська (клавіатура США з естонськими літерами)"
-#: ../rules/base.xml.in.h:428 ../rules/base.extras.xml.in.h:29
+#: ../rules/base.xml.in.h:429 ../rules/base.extras.xml.in.h:30
msgid "Persian"
msgstr "Перська"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:430
msgid "Persian (with Persian keypad)"
msgstr "Перська (з перською дод. панеллю)"
#. Keyboard indicator for Kurdish layouts
-#: ../rules/base.xml.in.h:431
+#: ../rules/base.xml.in.h:432
msgid "ku"
msgstr "ku"
-#: ../rules/base.xml.in.h:432
+#: ../rules/base.xml.in.h:433
msgid "Kurdish (Iran, Latin Q)"
msgstr "Курдська (Іран, латиниця Q)"
-#: ../rules/base.xml.in.h:433
+#: ../rules/base.xml.in.h:434
msgid "Kurdish (Iran, F)"
msgstr "Курдська (Іран, F)"
-#: ../rules/base.xml.in.h:434
+#: ../rules/base.xml.in.h:435
msgid "Kurdish (Iran, Latin Alt-Q)"
msgstr "Курдська (Іран, латиниця Alt-Q)"
-#: ../rules/base.xml.in.h:435
+#: ../rules/base.xml.in.h:436
msgid "Kurdish (Iran, Arabic-Latin)"
msgstr "Курдська (Іран, арабсько-латинська)"
-#: ../rules/base.xml.in.h:436
+#: ../rules/base.xml.in.h:437
msgid "Iraqi"
msgstr "Іракська"
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:438
msgid "Kurdish (Iraq, Latin Q)"
msgstr "Курдська (Ірак, латиниця Q)"
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:439
msgid "Kurdish (Iraq, F)"
msgstr "Курдська (Ірак, F)"
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:440
msgid "Kurdish (Iraq, Latin Alt-Q)"
msgstr "Курдська (Ірак, латиниця Alt-Q)"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:441
msgid "Kurdish (Iraq, Arabic-Latin)"
msgstr "Курдська (Ірак, арабсько-латинська)"
#. Keyboard indicator for Faroese layouts
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:443
msgid "fo"
msgstr "fo"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:444
msgid "Faroese"
msgstr "Фарерська"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:445
msgid "Faroese (eliminate dead keys)"
msgstr "Фарерська (вимкнути сліпі клавіші)"
#. Keyboard indicator for Finnish layouts
-#: ../rules/base.xml.in.h:446 ../rules/base.extras.xml.in.h:101
+#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
msgid "fi"
msgstr "fi"
-#: ../rules/base.xml.in.h:447 ../rules/base.extras.xml.in.h:102
+#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:103
msgid "Finnish"
msgstr "Фінська"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:449
msgid "Finnish (classic)"
msgstr "Фінська (класична)"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:450
msgid "Finnish (classic, eliminate dead keys)"
msgstr "Фінська (класична, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:451
msgid "Finnish (Winkeys)"
msgstr "Фінська (Winkeys)"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:452
msgid "Northern Saami (Finland)"
msgstr "Північно-саамська (Фінляндія)"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:453
msgid "Finnish (Macintosh)"
msgstr "Фінська (Macintosh)"
-#: ../rules/base.xml.in.h:453 ../rules/base.extras.xml.in.h:104
+#: ../rules/base.xml.in.h:454 ../rules/base.extras.xml.in.h:105
msgid "French"
msgstr "Французька"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:455
msgid "French (eliminate dead keys)"
msgstr "Французька (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:456
msgid "French (Sun dead keys)"
msgstr "Французька (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:457
msgid "French (alternative)"
msgstr "Французька (альтернативна)"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:458
msgid "French (alternative, Latin-9 only)"
msgstr "Французька (альтернативна, лише Latin-9)"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:459
msgid "French (alternative, eliminate dead keys)"
msgstr "Французька (альтернативна, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:460
msgid "French (alternative, Sun dead keys)"
msgstr "Французька (альтернативна, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:461
msgid "French (legacy, alternative)"
msgstr "Французька (застаріла, альтернативна)"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:462
msgid "French (legacy, alternative, eliminate dead keys)"
msgstr "Французька (застаріла, альтернативна, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:463
msgid "French (legacy, alternative, Sun dead keys)"
msgstr "Французька (застаріла, альтернативна, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:464
msgid "French (Bepo, ergonomic, Dvorak way)"
msgstr "Французька (Bepo, ергономічна, варіант Дворак)"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:465
msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)"
msgstr "Французька (Bepo, ергономічна, варіант Дворак, лише Latin-9)"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:466
msgid "French (Dvorak)"
msgstr "Французька (Дворак)"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:467
msgid "French (Macintosh)"
msgstr "Французька (Macintosh)"
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:468
msgid "French (Breton)"
msgstr "Французька (бретонська)"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:469
msgid "Occitan"
msgstr "Окситанська"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:470
msgid "Georgian (France, AZERTY Tskapo)"
msgstr "Грузинська (Франція, AZERTY Tskapo)"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:471
msgid "English (Ghana)"
msgstr "Англійська (Гана)"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:472
msgid "English (Ghana, multilingual)"
msgstr "Англійська (Гана, інтернаціональна)"
#. Keyboard indicator for Akan layouts
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:474
msgid "ak"
msgstr "ak"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:475
msgid "Akan"
msgstr "Акан"
#. Keyboard indicator for Ewe layouts
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:477
msgid "ee"
msgstr "ee"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:478
msgid "Ewe"
msgstr "Ewe"
#. Keyboard indicator for Fula layouts
-#: ../rules/base.xml.in.h:479
+#: ../rules/base.xml.in.h:480
msgid "ff"
msgstr "ff"
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:481
msgid "Fula"
msgstr "Фула"
#. Keyboard indicator for Ga layouts
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:483
msgid "gaa"
msgstr "gaa"
-#: ../rules/base.xml.in.h:483
+#: ../rules/base.xml.in.h:484
msgid "Ga"
msgstr "Га"
#. Keyboard indicator for Hausa layouts
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:486
msgid "ha"
msgstr "ha"
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:487
msgid "Hausa"
msgstr "Hausa"
#. Keyboard indicator for Avatime layouts
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:489
msgid "avn"
msgstr "avn"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:490
msgid "Avatime"
msgstr "Аватіме"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:491
msgid "English (Ghana, GILLBT)"
msgstr "Англійська (Гана, GILLBT)"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:492
msgid "French (Guinea)"
msgstr "Французька (Гвінея)"
#. Keyboard indicator for Georgian layouts
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:494
msgid "ka"
msgstr "ka"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:495
msgid "Georgian"
msgstr "Грузинська"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:496
msgid "Georgian (ergonomic)"
msgstr "Грузинська (ергономічна)"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:497
msgid "Georgian (MESS)"
msgstr "Грузинська (MESS)"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:498
msgid "Russian (Georgia)"
msgstr "Російська (Грузія)"
-#: ../rules/base.xml.in.h:498
+#: ../rules/base.xml.in.h:499
msgid "Ossetian (Georgia)"
msgstr "Осетинська (Грузія)"
-#: ../rules/base.xml.in.h:499 ../rules/base.extras.xml.in.h:23
+#: ../rules/base.xml.in.h:500 ../rules/base.extras.xml.in.h:23
msgid "German"
msgstr "Німецька"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:501
msgid "German (dead acute)"
msgstr "Німецька (сліпий акут)"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:502
msgid "German (dead grave acute)"
msgstr "Німецька (сліпий наголос-акут)"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:503
msgid "German (eliminate dead keys)"
msgstr "Німецька (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:504
msgid "German (T3)"
msgstr "Німецька (T3)"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:505
msgid "Romanian (Germany)"
msgstr "Румунська (Німеччина)"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:506
msgid "Romanian (Germany, eliminate dead keys)"
msgstr "Німецька (Німеччина, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:507
msgid "German (Dvorak)"
msgstr "Німецька (Дворак)"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:508
msgid "German (Sun dead keys)"
msgstr "Німецька (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:509
msgid "German (Neo 2)"
msgstr "Німецька (Neo 2)"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:510
msgid "German (Macintosh)"
msgstr "Німецька (Macintosh)"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:511
msgid "German (Macintosh, eliminate dead keys)"
msgstr "Німецька (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:512
msgid "Lower Sorbian"
msgstr "Нижньолужицька"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:513
msgid "Lower Sorbian (qwertz)"
msgstr "Нижньолужицька (qwertz)"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:514
msgid "German (qwerty)"
msgstr "Німецька (qwerty)"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:515
msgid "Turkish (Germany)"
msgstr "Турецька (Німеччина)"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:516
msgid "Russian (Germany, phonetic)"
msgstr "Російська (Німеччина, фонетична)"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:517
msgid "German (legacy)"
msgstr "Німецька (застаріла)"
#. Keyboard indicator for Greek layouts
-#: ../rules/base.xml.in.h:518 ../rules/base.extras.xml.in.h:106
+#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
msgid "gr"
msgstr "gr"
-#: ../rules/base.xml.in.h:519 ../rules/base.extras.xml.in.h:107
+#: ../rules/base.xml.in.h:520 ../rules/base.extras.xml.in.h:108
msgid "Greek"
msgstr "Грецька"
-#: ../rules/base.xml.in.h:520
+#: ../rules/base.xml.in.h:521
msgid "Greek (simple)"
msgstr "Грецька (проста)"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:522
msgid "Greek (extended)"
msgstr "Грецька (розширена)"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:523
msgid "Greek (eliminate dead keys)"
msgstr "Грецька (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:524
msgid "Greek (polytonic)"
msgstr "Грецька (поліфонічна)"
#. Keyboard indicator for Hungarian layouts
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:526
msgid "hu"
msgstr "hu"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:527
msgid "Hungarian"
msgstr "Угорська"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:528
msgid "Hungarian (standard)"
msgstr "Угорська (стандартна)"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:529
msgid "Hungarian (eliminate dead keys)"
msgstr "Угорська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:530
msgid "Hungarian (qwerty)"
msgstr "Угорська (qwerty)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:531
msgid "Hungarian (101/qwertz/comma/dead keys)"
msgstr "Угорська (101/qwertz/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:532
msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:533
msgid "Hungarian (101/qwertz/dot/dead keys)"
msgstr "Угорська (101/qwertz/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:534
msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:535
msgid "Hungarian (101/qwerty/comma/dead keys)"
msgstr "Угорська (101/qwerty/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:536
msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
msgstr "Угорська (101/qwerty/кома/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:537
msgid "Hungarian (101/qwerty/dot/dead keys)"
msgstr "Угорська (101/qwerty/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:538
msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
msgstr "Угорська (101/qwerty/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:539
msgid "Hungarian (102/qwertz/comma/dead keys)"
msgstr "Угорська (102/qwertz/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:539
+#: ../rules/base.xml.in.h:540
msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:541
msgid "Hungarian (102/qwertz/dot/dead keys)"
msgstr "Угорська (102/qwertz/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:542
msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:543
msgid "Hungarian (102/qwerty/comma/dead keys)"
msgstr "Угорська (102/qwerty/кома/сліпі клавіші)"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:544
msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
msgstr "Угорська (102/qwerty/кома/вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:545
msgid "Hungarian (102/qwerty/dot/dead keys)"
msgstr "Угорська (102/qwerty/крапка/сліпі клавіші)"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:546
msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
msgstr "Угорська (102/qwerty/крапка/вимкнути сліпі клавіші)"
#. Keyboard indicator for Icelandic layouts
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:548
msgid "is"
msgstr "is"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:549
msgid "Icelandic"
msgstr "Ісландська"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:550
msgid "Icelandic (Sun dead keys)"
msgstr "Ісландська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:551
msgid "Icelandic (eliminate dead keys)"
msgstr "Ісландська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:552
msgid "Icelandic (Macintosh, legacy)"
msgstr "Ісландська (Macintosh, застаріла)"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:553
msgid "Icelandic (Macintosh)"
msgstr "Ісландська (Macintosh)"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:554
msgid "Icelandic (Dvorak)"
msgstr "Ісландська (Дворак)"
#. Keyboard indicator for Hebrew layouts
-#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:77
+#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
msgid "he"
msgstr "he"
-#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:78
+#: ../rules/base.xml.in.h:557 ../rules/base.extras.xml.in.h:79
msgid "Hebrew"
msgstr "Іврит"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:558
msgid "Hebrew (lyx)"
msgstr "Іврит (lyx)"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:559
msgid "Hebrew (phonetic)"
msgstr "Іврит (фонетична)"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:560
msgid "Hebrew (Biblical, Tiro)"
msgstr "Іврит (Біблейська, Tiro)"
#. Keyboard indicator for Italian layouts
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:109
+#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
msgid "it"
msgstr "it"
-#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:110
+#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:111
msgid "Italian"
msgstr "Італійська"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:564
msgid "Italian (eliminate dead keys)"
msgstr "Італійська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:565
msgid "Italian (Winkeys)"
msgstr "Італійська (Winkeys)"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:566
msgid "Italian (Macintosh)"
msgstr "Італійська (Macintosh)"
-#: ../rules/base.xml.in.h:566
+#: ../rules/base.xml.in.h:567
msgid "Italian (US keyboard with Italian letters)"
msgstr "Італійська (клавіатура США з італійськими літерами)"
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:568
msgid "Georgian (Italy)"
msgstr "Грузинська (Італія)"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:569
msgid "Italian (IBM 142)"
msgstr "Італійська (IBM 142)"
#. Keyboard indicator for Japanese layouts
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:112
+#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
msgid "ja"
msgstr "ja"
-#: ../rules/base.xml.in.h:571 ../rules/base.extras.xml.in.h:113
+#: ../rules/base.xml.in.h:572 ../rules/base.extras.xml.in.h:114
msgid "Japanese"
msgstr "Японська"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:573
msgid "Japanese (Kana)"
msgstr "Японська (кана)"
-#: ../rules/base.xml.in.h:573
+#: ../rules/base.xml.in.h:574
msgid "Japanese (Kana 86)"
msgstr "Японська (кана 86)"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:575
msgid "Japanese (OADG 109A)"
msgstr "Японська (OADG 109A)"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:576
msgid "Japanese (Macintosh)"
msgstr "Японська (Macintosh)"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:577
msgid "Japanese (Dvorak)"
msgstr "Японська (Дворак)"
#. Keyboard indicator for Kikuyu layouts
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:579
msgid "ki"
msgstr "ki"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:580
msgid "Kyrgyz"
msgstr "Киргизька"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:581
msgid "Kyrgyz (phonetic)"
msgstr "Киргизька (фонетична)"
#. Keyboard indicator for Khmer layouts
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:583
msgid "km"
msgstr "km"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:584
msgid "Khmer (Cambodia)"
msgstr "Кхмерська (Камбоджа)"
#. Keyboard indicator for Kazakh layouts
-#: ../rules/base.xml.in.h:585
+#: ../rules/base.xml.in.h:586
msgid "kk"
msgstr "kk"
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:587
msgid "Kazakh"
msgstr "Казахська"
-#: ../rules/base.xml.in.h:587
+#: ../rules/base.xml.in.h:588
msgid "Russian (Kazakhstan, with Kazakh)"
msgstr "Російська (Казахстан, з казахською)"
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:589
msgid "Kazakh (with Russian)"
msgstr "Казахська (з російськими)"
#. Keyboard indicator for Lao layouts
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:591
msgid "lo"
msgstr "lo"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:592
msgid "Lao"
msgstr "Лаоська"
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:593
msgid "Lao (STEA proposed standard layout)"
msgstr "Лаоська (стандартна розкладка, запропонована STEA)"
#. Keyboard indicator for Spanish layouts
-#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:125
+#: ../rules/base.xml.in.h:595 ../rules/base.extras.xml.in.h:126
msgid "es"
msgstr "es"
-#: ../rules/base.xml.in.h:595
+#: ../rules/base.xml.in.h:596
msgid "Spanish (Latin American)"
msgstr "Іспанська (латиноамериканська)"
-#: ../rules/base.xml.in.h:596
+#: ../rules/base.xml.in.h:597
msgid "Spanish (Latin American, eliminate dead keys)"
msgstr "Іспанська (латиноамериканська, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:598
msgid "Spanish (Latin American, include dead tilde)"
msgstr "Іспанська (латиноамериканська зі «спеціальною» тильдою)"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:599
msgid "Spanish (Latin American, Sun dead keys)"
msgstr "Іспанська (латиноамериканська, сліпі клавіші Sun)"
+#: ../rules/base.xml.in.h:600
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Іспанська (латиноамериканська, Дворак)"
+
#. Keyboard indicator for Lithuanian layouts
-#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:31
+#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:32
msgid "lt"
msgstr "lt"
-#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:32
+#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:33
msgid "Lithuanian"
msgstr "Литовська"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:604
msgid "Lithuanian (standard)"
msgstr "Литовська (стандартна)"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:605
msgid "Lithuanian (US keyboard with Lithuanian letters)"
msgstr "Литовська (клавіатура США, з литовськими літерами)"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:606
msgid "Lithuanian (IBM LST 1205-92)"
msgstr "Литовська (IBM LST 1205-92)"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:607
msgid "Lithuanian (LEKP)"
msgstr "Литовська (LEKP)"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:608
msgid "Lithuanian (LEKPa)"
msgstr "Литовська (LEKPa)"
#. Keyboard indicator for Latvian layouts
-#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:35
+#: ../rules/base.xml.in.h:610 ../rules/base.extras.xml.in.h:36
msgid "lv"
msgstr "lv"
-#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:36
+#: ../rules/base.xml.in.h:611 ../rules/base.extras.xml.in.h:37
msgid "Latvian"
msgstr "Латвійська"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:612
msgid "Latvian (apostrophe variant)"
msgstr "Латвійська (варіант з апострофом)"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:613
msgid "Latvian (tilde variant)"
msgstr "Латвійська (варіант з тильдою)"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:614
msgid "Latvian (F variant)"
msgstr "Латвійська (варіант з літерою F)"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:615
msgid "Latvian (modern)"
msgstr "Латвійська (сучасна)"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:616
msgid "Latvian (ergonomic, ŪGJRMV)"
msgstr "Латвійська (ергономічна, ŪGJRMV)"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:617
msgid "Latvian (adapted)"
msgstr "Латвійська (адаптована)"
#. Keyboard indicator for Maori layouts
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:619
msgid "mi"
msgstr "mi"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:620
msgid "Maori"
msgstr "Маорійська"
#. Keyboard indicator for Serbian layouts
-#: ../rules/base.xml.in.h:620 ../rules/base.extras.xml.in.h:66
+#: ../rules/base.xml.in.h:622 ../rules/base.extras.xml.in.h:67
msgid "sr"
msgstr "sr"
-#: ../rules/base.xml.in.h:621
+#: ../rules/base.xml.in.h:623
msgid "Montenegrin"
msgstr "Чорногорська"
-#: ../rules/base.xml.in.h:622
+#: ../rules/base.xml.in.h:624
msgid "Montenegrin (Cyrillic)"
msgstr "Чорногорська (кирилиця)"
-#: ../rules/base.xml.in.h:623
+#: ../rules/base.xml.in.h:625
msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
msgstr "Чорногорська (кирилиця, З та Ж поміняні місцями)"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:626
msgid "Montenegrin (Latin Unicode)"
msgstr "Чорногорська (латиниця, Unicode)"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:627
msgid "Montenegrin (Latin qwerty)"
msgstr "Чорногорська (латиниця, qwerty)"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:628
msgid "Montenegrin (Latin Unicode qwerty)"
msgstr "Чорногорська (латиниця, Unicode, qwerty)"
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:629
msgid "Montenegrin (Cyrillic with guillemets)"
msgstr "Чорногорська (кирилиця з кутовими лапками)"
-#: ../rules/base.xml.in.h:628
+#: ../rules/base.xml.in.h:630
msgid "Montenegrin (Latin with guillemets)"
msgstr "Чорногорська (латиниця з кутовими лапками)"
#. Keyboard indicator for Macedonian layouts
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:632
msgid "mk"
msgstr "mk"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:633
msgid "Macedonian"
msgstr "Македонська"
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:634
msgid "Macedonian (eliminate dead keys)"
msgstr "Македонська (вимкнути сліпі клавіші)"
#. Keyboard indicator for Maltese layouts
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:636
msgid "mt"
msgstr "mt"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:637
msgid "Maltese"
msgstr "Мальтійська"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:638
msgid "Maltese (with US layout)"
msgstr "Мальтійська (клавіатура з розкладкою США)"
#. Keyboard indicator for Mongolian layouts
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:640
msgid "mn"
msgstr "mn"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:641
msgid "Mongolian"
msgstr "Монгольська"
#. Keyboard indicator for Norwegian layouts
-#: ../rules/base.xml.in.h:641 ../rules/base.extras.xml.in.h:117
+#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:118
msgid "no"
msgstr "no"
-#: ../rules/base.xml.in.h:642 ../rules/base.extras.xml.in.h:118
+#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:119
msgid "Norwegian"
msgstr "Норвезька"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:645
msgid "Norwegian (eliminate dead keys)"
msgstr "Норвезька (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:646
msgid "Norwegian (Winkeys)"
msgstr "Норвезька (Winkeys)"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:647
msgid "Norwegian (Dvorak)"
msgstr "Норвезька (Дворак)"
-#: ../rules/base.xml.in.h:646
+#: ../rules/base.xml.in.h:648
msgid "Northern Saami (Norway)"
msgstr "Північно-саамська (Норвегія)"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:649
msgid "Northern Saami (Norway, eliminate dead keys)"
msgstr "Північно-саамська (Норвегія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:650
msgid "Norwegian (Macintosh)"
msgstr "Норвезька (Macintosh)"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:651
msgid "Norwegian (Macintosh, eliminate dead keys)"
msgstr "Норвезька (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:652
msgid "Norwegian (Colemak)"
msgstr "Норвезька (Колемак)"
#. Keyboard indicator for Polish layouts
-#: ../rules/base.xml.in.h:652 ../rules/base.extras.xml.in.h:55
+#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:56
msgid "pl"
msgstr "pl"
-#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:56
+#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:57
msgid "Polish"
msgstr "Польська"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:656
msgid "Polish (legacy)"
msgstr "Польська (застаріла)"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:657
msgid "Polish (qwertz)"
msgstr "Польська (qwertz)"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:658
msgid "Polish (Dvorak)"
msgstr "Польська (Дворак)"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:659
msgid "Polish (Dvorak, Polish quotes on quotemark key)"
msgstr "Польська (Дворак, польські лапки на знаку лапки)"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:660
msgid "Polish (Dvorak, Polish quotes on key 1)"
msgstr "Польська (Дворак, польські лапки на клавіші 1)"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:661
msgid "Kashubian"
msgstr "Кашубська"
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:662
msgid "Silesian"
msgstr "Силезька"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:663
msgid "Russian (Poland, phonetic Dvorak)"
msgstr "Російська (Польща, фонетична Дворака)"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:664
msgid "Polish (programmer Dvorak)"
msgstr "Польська (програмістський Дворак)"
-#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:120
+#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:121
msgid "Portuguese"
msgstr "Португальська"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:666
msgid "Portuguese (eliminate dead keys)"
msgstr "Португальська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:667
msgid "Portuguese (Sun dead keys)"
msgstr "Португальська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:668
msgid "Portuguese (Macintosh)"
msgstr "Португальська (Macintosh)"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:669
msgid "Portuguese (Macintosh, eliminate dead keys)"
msgstr "Португальська (Macintosh, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:670
msgid "Portuguese (Macintosh, Sun dead keys)"
msgstr "Португальська (Macintosh, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:671
msgid "Portuguese (Nativo)"
msgstr "Португальська (Nativo)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:672
msgid "Portuguese (Nativo for US keyboards)"
msgstr "Португальська (nativo для клавіатур США)"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:673
msgid "Esperanto (Portugal, Nativo)"
msgstr "Есперанто (португальська, Nativo)"
#. Keyboard indicator for Romanian layouts
-#: ../rules/base.xml.in.h:673 ../rules/base.extras.xml.in.h:60
+#: ../rules/base.xml.in.h:675 ../rules/base.extras.xml.in.h:61
msgid "ro"
msgstr "ro"
-#: ../rules/base.xml.in.h:674 ../rules/base.extras.xml.in.h:61
+#: ../rules/base.xml.in.h:676 ../rules/base.extras.xml.in.h:62
msgid "Romanian"
msgstr "Румунська"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:677
msgid "Romanian (cedilla)"
msgstr "Румунська (седиль)"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:678
msgid "Romanian (standard)"
msgstr "Румунська (стандартна)"
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:679
msgid "Romanian (standard cedilla)"
msgstr "Румунська (стандартна седиль)"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:680
msgid "Romanian (WinKeys)"
msgstr "Румунська (з клавішами Win)"
-#: ../rules/base.xml.in.h:679 ../rules/base.extras.xml.in.h:70
+#: ../rules/base.xml.in.h:681 ../rules/base.extras.xml.in.h:71
msgid "Russian"
msgstr "Російська"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:682
msgid "Russian (phonetic)"
msgstr "Російська (фонетична)"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:683
msgid "Russian (phonetic WinKeys)"
msgstr "Російська (фонетична з клавішами Win)"
-#: ../rules/base.xml.in.h:682
+#: ../rules/base.xml.in.h:684
msgid "Russian (typewriter)"
msgstr "Російська (машинопис)"
-#: ../rules/base.xml.in.h:683
+#: ../rules/base.xml.in.h:685
msgid "Russian (legacy)"
msgstr "Російська (застаріла)"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:686
msgid "Russian (typewriter, legacy)"
msgstr "Російська (машинопис, застаріла)"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:687
msgid "Tatar"
msgstr "Татарська"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:688
msgid "Ossetian (legacy)"
msgstr "Осетинська (застаріла)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:689
msgid "Ossetian (WinKeys)"
msgstr "Осетинська (з клавішами Win)"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:690
msgid "Chuvash"
msgstr "Чуваська"
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:691
msgid "Chuvash (Latin)"
msgstr "Чуваська (латиниця)"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:692
msgid "Udmurt"
msgstr "Удмуртська"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:693
msgid "Komi"
msgstr "Комі"
-#: ../rules/base.xml.in.h:692
+#: ../rules/base.xml.in.h:694
msgid "Yakut"
msgstr "Якутська"
-#: ../rules/base.xml.in.h:693
+#: ../rules/base.xml.in.h:695
msgid "Kalmyk"
msgstr "Калмицька"
-#: ../rules/base.xml.in.h:694
+#: ../rules/base.xml.in.h:696
msgid "Russian (DOS)"
msgstr "Російська (DOS)"
-#: ../rules/base.xml.in.h:695
+#: ../rules/base.xml.in.h:697
msgid "Russian (Macintosh)"
msgstr "Російська (Macintosh)"
-#: ../rules/base.xml.in.h:696
+#: ../rules/base.xml.in.h:698
msgid "Serbian (Russia)"
msgstr "Сербська (Росія)"
-#: ../rules/base.xml.in.h:697
+#: ../rules/base.xml.in.h:699
msgid "Bashkirian"
msgstr "Башкирська"
-#: ../rules/base.xml.in.h:698
+#: ../rules/base.xml.in.h:700
msgid "Mari"
msgstr "Марійська"
-#: ../rules/base.xml.in.h:699 ../rules/base.extras.xml.in.h:67
+#: ../rules/base.xml.in.h:701
+msgid "Russian (phonetic azerty)"
+msgstr "Російська (фонетична azerty)"
+
+#: ../rules/base.xml.in.h:702
+msgid "Russian (phonetic French)"
+msgstr "Російська (фонетична французька)"
+
+#: ../rules/base.xml.in.h:703 ../rules/base.extras.xml.in.h:68
msgid "Serbian"
msgstr "Сербська"
-#: ../rules/base.xml.in.h:700
+#: ../rules/base.xml.in.h:704
msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
msgstr "Сербська (кирилиця, З та Ж поміняні місцями)"
-#: ../rules/base.xml.in.h:701
+#: ../rules/base.xml.in.h:705
msgid "Serbian (Latin)"
msgstr "Сербська (латиниця)"
-#: ../rules/base.xml.in.h:702
+#: ../rules/base.xml.in.h:706
msgid "Serbian (Latin Unicode)"
msgstr "Сербська (латиниця Unicode)"
-#: ../rules/base.xml.in.h:703
+#: ../rules/base.xml.in.h:707
msgid "Serbian (Latin qwerty)"
msgstr "Сербська (латиниця, qwerty)"
-#: ../rules/base.xml.in.h:704
+#: ../rules/base.xml.in.h:708
msgid "Serbian (Latin Unicode qwerty)"
msgstr "Сербська (латиниця, Unicode qwerty)"
-#: ../rules/base.xml.in.h:705
+#: ../rules/base.xml.in.h:709
msgid "Serbian (Cyrillic with guillemets)"
msgstr "Сербська (кирилиця з кутовими лапками)"
-#: ../rules/base.xml.in.h:706
+#: ../rules/base.xml.in.h:710
msgid "Serbian (Latin with guillemets)"
msgstr "Сербська (латиниця з кутовими лапками)"
-#: ../rules/base.xml.in.h:707
+#: ../rules/base.xml.in.h:711
msgid "Pannonian Rusyn"
msgstr "Паннонська русинська"
#. Keyboard indicator for Slovenian layouts
-#: ../rules/base.xml.in.h:709
+#: ../rules/base.xml.in.h:713
msgid "sl"
msgstr "sl"
-#: ../rules/base.xml.in.h:710
+#: ../rules/base.xml.in.h:714
msgid "Slovenian"
msgstr "Словенська"
-#: ../rules/base.xml.in.h:711
+#: ../rules/base.xml.in.h:715
msgid "Slovenian (with guillemets for quotes)"
msgstr "Словенська (кутові лапки)"
-#: ../rules/base.xml.in.h:712
+#: ../rules/base.xml.in.h:716
msgid "Slovenian (US keyboard with Slovenian letters)"
msgstr "Словенська (клавіатура США із словенськими літерами)"
#. Keyboard indicator for Slovak layouts
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:122
+#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:123
msgid "sk"
msgstr "sk"
-#: ../rules/base.xml.in.h:715 ../rules/base.extras.xml.in.h:123
+#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:124
msgid "Slovak"
msgstr "Словацька"
-#: ../rules/base.xml.in.h:716
+#: ../rules/base.xml.in.h:720
msgid "Slovak (extended Backslash)"
msgstr "Словацька (розширені функції Backslash)"
-#: ../rules/base.xml.in.h:717
+#: ../rules/base.xml.in.h:721
msgid "Slovak (qwerty)"
msgstr "Словацька (qwerty)"
-#: ../rules/base.xml.in.h:718
+#: ../rules/base.xml.in.h:722
msgid "Slovak (qwerty, extended Backslash)"
msgstr "Словацька (qwerty, розширені функції Backslash)"
-#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:126
+#: ../rules/base.xml.in.h:723 ../rules/base.extras.xml.in.h:127
msgid "Spanish"
msgstr "Іспанська"
-#: ../rules/base.xml.in.h:720
+#: ../rules/base.xml.in.h:724
msgid "Spanish (eliminate dead keys)"
msgstr "Іспанська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:721
+#: ../rules/base.xml.in.h:725
msgid "Spanish (Winkeys)"
msgstr "Іспанська (Winkeys)"
-#: ../rules/base.xml.in.h:722
+#: ../rules/base.xml.in.h:726
msgid "Spanish (include dead tilde)"
msgstr "Іспанська (зі «спеціальною» тильдою)"
-#: ../rules/base.xml.in.h:723
+#: ../rules/base.xml.in.h:727
msgid "Spanish (Sun dead keys)"
msgstr "Іспанська (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:724
+#: ../rules/base.xml.in.h:728
msgid "Spanish (Dvorak)"
msgstr "Іспанська (Дворак)"
-#: ../rules/base.xml.in.h:725
+#: ../rules/base.xml.in.h:729
msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)"
msgstr "Астурійська (Іспанія, з H та L з нижньою крапкою)"
-#: ../rules/base.xml.in.h:726
+#: ../rules/base.xml.in.h:730
msgid "Catalan (Spain, with middle-dot L)"
msgstr "Іспанська (Іспанія, варіант з L із середньою точкою)"
-#: ../rules/base.xml.in.h:727
+#: ../rules/base.xml.in.h:731
msgid "Spanish (Macintosh)"
msgstr "Іспанська (Macintosh)"
#. Keyboard indicator for Swedish layouts
-#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:128
+#: ../rules/base.xml.in.h:733 ../rules/base.extras.xml.in.h:129
msgid "sv"
msgstr "sv"
-#: ../rules/base.xml.in.h:730 ../rules/base.extras.xml.in.h:129
+#: ../rules/base.xml.in.h:734 ../rules/base.extras.xml.in.h:130
msgid "Swedish"
msgstr "Шведська"
-#: ../rules/base.xml.in.h:731
+#: ../rules/base.xml.in.h:735
msgid "Swedish (eliminate dead keys)"
msgstr "Шведська (вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:732
+#: ../rules/base.xml.in.h:736
msgid "Swedish (Dvorak)"
msgstr "Шведська (Дворак)"
-#: ../rules/base.xml.in.h:733
+#: ../rules/base.xml.in.h:737
msgid "Russian (Sweden, phonetic)"
msgstr "Російська (шведська, фонетична)"
-#: ../rules/base.xml.in.h:734
+#: ../rules/base.xml.in.h:738
msgid "Russian (Sweden, phonetic, eliminate dead keys)"
msgstr "Російська (шведська, фонетична, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:735
+#: ../rules/base.xml.in.h:739
msgid "Northern Saami (Sweden)"
msgstr "Північно-саамська (Швеція)"
-#: ../rules/base.xml.in.h:736
+#: ../rules/base.xml.in.h:740
msgid "Swedish (Macintosh)"
msgstr "Шведська (Macintosh)"
-#: ../rules/base.xml.in.h:737
+#: ../rules/base.xml.in.h:741
msgid "Swedish (Svdvorak)"
msgstr "Шведська (Svdvorak)"
-#: ../rules/base.xml.in.h:738
+#: ../rules/base.xml.in.h:742
msgid "Swedish Sign Language"
msgstr "Шведська мова жестів"
-#: ../rules/base.xml.in.h:739 ../rules/base.extras.xml.in.h:132
+#: ../rules/base.xml.in.h:743 ../rules/base.extras.xml.in.h:133
msgid "German (Switzerland)"
msgstr "Німецька (Швейцарія)"
-#: ../rules/base.xml.in.h:740
+#: ../rules/base.xml.in.h:744
msgid "German (Switzerland, legacy)"
msgstr "Німецька (Швейцарія, застаріла)"
-#: ../rules/base.xml.in.h:741
+#: ../rules/base.xml.in.h:745
msgid "German (Switzerland, eliminate dead keys)"
msgstr "Німецька (Швейцарія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:742
+#: ../rules/base.xml.in.h:746
msgid "German (Switzerland, Sun dead keys)"
msgstr "Німецька (Швейцарія, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:743
+#: ../rules/base.xml.in.h:747
msgid "French (Switzerland)"
msgstr "Французька (Швейцарія)"
-#: ../rules/base.xml.in.h:744
+#: ../rules/base.xml.in.h:748
msgid "French (Switzerland, eliminate dead keys)"
msgstr "Французька (Швейцарія, вимкнути сліпі клавіші)"
-#: ../rules/base.xml.in.h:745
+#: ../rules/base.xml.in.h:749
msgid "French (Switzerland, Sun dead keys)"
msgstr "Французька (Швейцарія, сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:746
+#: ../rules/base.xml.in.h:750
msgid "French (Switzerland, Macintosh)"
msgstr "Французька (Швейцарія, Macintosh)"
-#: ../rules/base.xml.in.h:747
+#: ../rules/base.xml.in.h:751
msgid "German (Switzerland, Macintosh)"
msgstr "Німецька (Швейцарія, Macintosh)"
-#: ../rules/base.xml.in.h:748
+#: ../rules/base.xml.in.h:752
msgid "Arabic (Syria)"
msgstr "Арабська (Сирія)"
#. Keyboard indicator for Syriac layouts
-#: ../rules/base.xml.in.h:750
+#: ../rules/base.xml.in.h:754
msgid "syc"
msgstr "syc"
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:755
msgid "Syriac"
msgstr "Сирійська"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:756
msgid "Syriac (phonetic)"
msgstr "Сирійська (фонетична)"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:757
msgid "Kurdish (Syria, Latin Q)"
msgstr "Курдська (Сирія, латиниця Q)"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:758
msgid "Kurdish (Syria, F)"
msgstr "Курдська (Сирія, F)"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:759
msgid "Kurdish (Syria, Latin Alt-Q)"
msgstr "Курдська (Сирія, латиниця Alt-Q)"
#. Keyboard indicator for Tajik layouts
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:761
msgid "tg"
msgstr "tg"
-#: ../rules/base.xml.in.h:758
+#: ../rules/base.xml.in.h:762
msgid "Tajik"
msgstr "Таджицька"
-#: ../rules/base.xml.in.h:759
+#: ../rules/base.xml.in.h:763
msgid "Tajik (legacy)"
msgstr "Таджицька (застаріла)"
#. Keyboard indicator for Sinhala layouts
-#: ../rules/base.xml.in.h:761
+#: ../rules/base.xml.in.h:765
msgid "si"
msgstr "si"
-#: ../rules/base.xml.in.h:762
+#: ../rules/base.xml.in.h:766
msgid "Sinhala (phonetic)"
msgstr "Сингальська (фонетична)"
-#: ../rules/base.xml.in.h:763
+#: ../rules/base.xml.in.h:767
msgid "Tamil (Sri Lanka, Unicode)"
msgstr "Тамільська (Шрі-Ланка, Unicode)"
-#: ../rules/base.xml.in.h:764
+#: ../rules/base.xml.in.h:768
msgid "Tamil (Sri Lanka, TAB Typewriter)"
msgstr "Тамільська (Шрі-Ланка, TAB, машинопис)"
+#: ../rules/base.xml.in.h:769
+msgid "Singhala (US keyboard with Singhala letters)"
+msgstr "Сингальська (клавіатура США з сингальськими літерами)"
+
#. Keyboard indicator for Thai layouts
-#: ../rules/base.xml.in.h:766
+#: ../rules/base.xml.in.h:771
msgid "th"
msgstr "th"
-#: ../rules/base.xml.in.h:767
+#: ../rules/base.xml.in.h:772
msgid "Thai"
msgstr "Тайська"
-#: ../rules/base.xml.in.h:768
+#: ../rules/base.xml.in.h:773
msgid "Thai (TIS-820.2538)"
msgstr "Тайська (TIS-820.2538)"
-#: ../rules/base.xml.in.h:769
+#: ../rules/base.xml.in.h:774
msgid "Thai (Pattachote)"
msgstr "Тайська (паттачот)"
#. Keyboard indicator for Turkish layouts
-#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:135
+#: ../rules/base.xml.in.h:776 ../rules/base.extras.xml.in.h:136
msgid "tr"
msgstr "tr"
-#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:136
+#: ../rules/base.xml.in.h:777 ../rules/base.extras.xml.in.h:137
msgid "Turkish"
msgstr "Турецька"
-#: ../rules/base.xml.in.h:773
+#: ../rules/base.xml.in.h:778
msgid "Turkish (F)"
msgstr "Турецька (F)"
-#: ../rules/base.xml.in.h:774
+#: ../rules/base.xml.in.h:779
msgid "Turkish (Alt-Q)"
msgstr "Турецька (Alt-Q)"
-#: ../rules/base.xml.in.h:775
+#: ../rules/base.xml.in.h:780
msgid "Turkish (Sun dead keys)"
msgstr "Турецька (сліпі клавіші Sun)"
-#: ../rules/base.xml.in.h:776
+#: ../rules/base.xml.in.h:781
msgid "Kurdish (Turkey, Latin Q)"
msgstr "Курдська (Туреччина, латиниця Q)"
-#: ../rules/base.xml.in.h:777
+#: ../rules/base.xml.in.h:782
msgid "Kurdish (Turkey, F)"
msgstr "Курдська (Туреччина, F)"
-#: ../rules/base.xml.in.h:778
+#: ../rules/base.xml.in.h:783
msgid "Kurdish (Turkey, Latin Alt-Q)"
msgstr "Курдська (Туреччина, латиниця Alt-Q)"
-#: ../rules/base.xml.in.h:779
+#: ../rules/base.xml.in.h:784
msgid "Turkish (international with dead keys)"
msgstr "Турецька (інтернаціональна зі сліпими клавішами)"
#. Keyboard indicator for Crimean Tatar layouts
-#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:62
+#: ../rules/base.xml.in.h:786 ../rules/base.extras.xml.in.h:63
msgid "crh"
msgstr "crh"
-#: ../rules/base.xml.in.h:782
+#: ../rules/base.xml.in.h:787
msgid "Crimean Tatar (Turkish Q)"
msgstr "Кримськотатарська (турецька Q)"
-#: ../rules/base.xml.in.h:783
+#: ../rules/base.xml.in.h:788
msgid "Crimean Tatar (Turkish F)"
msgstr "Кримськотатарська (турецька F)"
-#: ../rules/base.xml.in.h:784
+#: ../rules/base.xml.in.h:789
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Кримськотатарська (турецька Alt-Q)"
-#: ../rules/base.xml.in.h:785
+#: ../rules/base.xml.in.h:790
msgid "Taiwanese"
msgstr "Тайванська"
-#: ../rules/base.xml.in.h:786
+#: ../rules/base.xml.in.h:791
msgid "Taiwanese (indigenous)"
msgstr "Тайванська (місцева)"
#. Keyboard indicator for Saisiyat layouts
-#: ../rules/base.xml.in.h:788
+#: ../rules/base.xml.in.h:793
msgid "xsy"
msgstr "xsy"
-#: ../rules/base.xml.in.h:789
+#: ../rules/base.xml.in.h:794
msgid "Saisiyat (Taiwan)"
msgstr "Сайсіят (Тайвань)"
#. Keyboard indicator for Ukranian layouts
-#: ../rules/base.xml.in.h:791 ../rules/base.extras.xml.in.h:138
+#: ../rules/base.xml.in.h:796 ../rules/base.extras.xml.in.h:139
msgid "uk"
msgstr "uk"
-#: ../rules/base.xml.in.h:792 ../rules/base.extras.xml.in.h:139
+#: ../rules/base.xml.in.h:797 ../rules/base.extras.xml.in.h:140
msgid "Ukrainian"
msgstr "Українська"
-#: ../rules/base.xml.in.h:793
+#: ../rules/base.xml.in.h:798
msgid "Ukrainian (phonetic)"
msgstr "Українська (фонетична)"
-#: ../rules/base.xml.in.h:794
+#: ../rules/base.xml.in.h:799
msgid "Ukrainian (typewriter)"
msgstr "Українська (друкарська машинка)"
-#: ../rules/base.xml.in.h:795
+#: ../rules/base.xml.in.h:800
msgid "Ukrainian (WinKeys)"
msgstr "Українська (з клавішами Win)"
-#: ../rules/base.xml.in.h:796
+#: ../rules/base.xml.in.h:801
msgid "Ukrainian (legacy)"
msgstr "Українська (застаріла)"
-#: ../rules/base.xml.in.h:797
+#: ../rules/base.xml.in.h:802
msgid "Ukrainian (standard RSTU)"
msgstr "Українська (стандартна RSTU)"
-#: ../rules/base.xml.in.h:798
+#: ../rules/base.xml.in.h:803
msgid "Russian (Ukraine, standard RSTU)"
msgstr "Російська (Україна, стандартна RSTU)"
-#: ../rules/base.xml.in.h:799
+#: ../rules/base.xml.in.h:804
msgid "Ukrainian (homophonic)"
msgstr "Українська (гомофонна)"
-#: ../rules/base.xml.in.h:800 ../rules/base.extras.xml.in.h:141
+#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:142
msgid "English (UK)"
msgstr "Англійська (Великобританія)"
-#: ../rules/base.xml.in.h:801
+#: ../rules/base.xml.in.h:806
msgid "English (UK, extended WinKeys)"
msgstr "Англійська (Великобританія, розширена, з клавішами Win)"
-#: ../rules/base.xml.in.h:802
+#: ../rules/base.xml.in.h:807
msgid "English (UK, international with dead keys)"
msgstr "Англійська (Великобританія, інтернаціональна зі сліпими клавішами)"
-#: ../rules/base.xml.in.h:803
+#: ../rules/base.xml.in.h:808
msgid "English (UK, Dvorak)"
msgstr "Англійська (Великобританія, Дворак)"
-#: ../rules/base.xml.in.h:804
+#: ../rules/base.xml.in.h:809
msgid "English (UK, Dvorak with UK punctuation)"
msgstr "Англійська (Великобританія, Дворак з британською пунктуацією)"
-#: ../rules/base.xml.in.h:805
+#: ../rules/base.xml.in.h:810
msgid "English (UK, Macintosh)"
msgstr "Англійська (Великобританія, Macintosh)"
-#: ../rules/base.xml.in.h:806
+#: ../rules/base.xml.in.h:811
msgid "English (UK, Macintosh international)"
msgstr "Англійська (Великобританія, інтернаціональна Macintosh)"
-#: ../rules/base.xml.in.h:807
+#: ../rules/base.xml.in.h:812
msgid "English (UK, Colemak)"
msgstr "Англійська (США, Коулмак)"
-#: ../rules/base.xml.in.h:808
+#: ../rules/base.xml.in.h:813
msgid "Uzbek"
msgstr "Узбецька"
-#: ../rules/base.xml.in.h:809
+#: ../rules/base.xml.in.h:814
msgid "Uzbek (Latin)"
msgstr "Узбецька (латиниця)"
#. Keyboard indicator for Vietnamese layouts
-#: ../rules/base.xml.in.h:811
+#: ../rules/base.xml.in.h:816
msgid "vi"
msgstr "vi"
-#: ../rules/base.xml.in.h:812
+#: ../rules/base.xml.in.h:817
msgid "Vietnamese"
msgstr "В'єтнамська"
#. Keyboard indicator for Korean layouts
-#: ../rules/base.xml.in.h:814 ../rules/base.extras.xml.in.h:143
+#: ../rules/base.xml.in.h:819 ../rules/base.extras.xml.in.h:144
msgid "ko"
msgstr "ko"
-#: ../rules/base.xml.in.h:815 ../rules/base.extras.xml.in.h:144
+#: ../rules/base.xml.in.h:820 ../rules/base.extras.xml.in.h:145
msgid "Korean"
msgstr "Корейська"
-#: ../rules/base.xml.in.h:816
+#: ../rules/base.xml.in.h:821
msgid "Korean (101/104 key compatible)"
msgstr "Корейська (сумісна з 101/104 клавішною)"
-#: ../rules/base.xml.in.h:817
+#: ../rules/base.xml.in.h:822
msgid "Japanese (PC-98xx Series)"
msgstr "Японська (родина PC-98xx)"
#. Keyboard indicator for Irish layouts
-#: ../rules/base.xml.in.h:819
+#: ../rules/base.xml.in.h:824
msgid "ie"
msgstr "ie"
-#: ../rules/base.xml.in.h:820
+#: ../rules/base.xml.in.h:825
msgid "Irish"
msgstr "Ірландська"
-#: ../rules/base.xml.in.h:821
+#: ../rules/base.xml.in.h:826
msgid "CloGaelach"
msgstr "Гаельський шрифт"
-#: ../rules/base.xml.in.h:822
+#: ../rules/base.xml.in.h:827
msgid "Irish (UnicodeExpert)"
msgstr "Ірландська (UnicodeExpert)"
-#: ../rules/base.xml.in.h:823
+#: ../rules/base.xml.in.h:828
msgid "Ogham"
msgstr "Огам"
-#: ../rules/base.xml.in.h:824
+#: ../rules/base.xml.in.h:829
msgid "Ogham (IS434)"
msgstr "Огам (IS434)"
-#: ../rules/base.xml.in.h:825
+#: ../rules/base.xml.in.h:830
msgid "Urdu (Pakistan)"
msgstr "Урду (Пакистан)"
-#: ../rules/base.xml.in.h:826
+#: ../rules/base.xml.in.h:831
msgid "Urdu (Pakistan, CRULP)"
msgstr "Урду (Пакистан, CRULP)"
-#: ../rules/base.xml.in.h:827
+#: ../rules/base.xml.in.h:832
msgid "Urdu (Pakistan, NLA)"
msgstr "Урду (Пакистан, NLA)"
-#: ../rules/base.xml.in.h:828
+#: ../rules/base.xml.in.h:833
msgid "Arabic (Pakistan)"
msgstr "Арабська (Пакистан)"
#. Keyboard indicator for Sindhi layouts
-#: ../rules/base.xml.in.h:830
+#: ../rules/base.xml.in.h:835
msgid "sd"
msgstr "sd"
-#: ../rules/base.xml.in.h:831
+#: ../rules/base.xml.in.h:836
msgid "Sindhi"
msgstr "Синдхі"
#. Keyboard indicator for Dhivehi layouts
-#: ../rules/base.xml.in.h:833
+#: ../rules/base.xml.in.h:838
msgid "dv"
msgstr "dv"
-#: ../rules/base.xml.in.h:834
+#: ../rules/base.xml.in.h:839
msgid "Dhivehi"
msgstr "Мальдивська"
-#: ../rules/base.xml.in.h:835
+#: ../rules/base.xml.in.h:840
msgid "English (South Africa)"
msgstr "Англійська (ПАР)"
#. Keyboard indicator for Esperanto layouts
-#: ../rules/base.xml.in.h:837
+#: ../rules/base.xml.in.h:842
msgid "eo"
msgstr "eo"
-#: ../rules/base.xml.in.h:838
+#: ../rules/base.xml.in.h:843
msgid "Esperanto"
msgstr "Есперанто"
-#: ../rules/base.xml.in.h:839
+#: ../rules/base.xml.in.h:844
msgid "Esperanto (displaced semicolon and quote, obsolete)"
msgstr "Есперанто (посунута крапка з комою та лапки, застаріла)"
#. Keyboard indicator for Nepali layouts
-#: ../rules/base.xml.in.h:841
+#: ../rules/base.xml.in.h:846
msgid "ne"
msgstr "ne"
-#: ../rules/base.xml.in.h:842
+#: ../rules/base.xml.in.h:847
msgid "Nepali"
msgstr "Непальська"
-#: ../rules/base.xml.in.h:843
+#: ../rules/base.xml.in.h:848
msgid "English (Nigeria)"
msgstr "Англійська (Нігерія)"
#. Keyboard indicator for Igbo layouts
-#: ../rules/base.xml.in.h:845
+#: ../rules/base.xml.in.h:850
msgid "ig"
msgstr "ig"
-#: ../rules/base.xml.in.h:846
+#: ../rules/base.xml.in.h:851
msgid "Igbo"
msgstr "Igbo"
#. Keyboard indicator for Yoruba layouts
-#: ../rules/base.xml.in.h:848
+#: ../rules/base.xml.in.h:853
msgid "yo"
msgstr "yo"
-#: ../rules/base.xml.in.h:849
+#: ../rules/base.xml.in.h:854
msgid "Yoruba"
msgstr "Йоруба"
#. Keyboard indicator for Amharic layouts
-#: ../rules/base.xml.in.h:851
+#: ../rules/base.xml.in.h:856
msgid "am"
msgstr "am"
-#: ../rules/base.xml.in.h:852
+#: ../rules/base.xml.in.h:857
msgid "Amharic"
msgstr "Амхарська"
#. Keyboard indicator for Wolof layouts
-#: ../rules/base.xml.in.h:854
+#: ../rules/base.xml.in.h:859
msgid "wo"
msgstr "wo"
-#: ../rules/base.xml.in.h:855
+#: ../rules/base.xml.in.h:860
msgid "Wolof"
msgstr "Волоф"
#. Keyboard indicator for Braille layouts
-#: ../rules/base.xml.in.h:857
+#: ../rules/base.xml.in.h:862
msgid "brl"
msgstr "brl"
-#: ../rules/base.xml.in.h:858
+#: ../rules/base.xml.in.h:863
msgid "Braille"
msgstr "Брайля"
-#: ../rules/base.xml.in.h:859
+#: ../rules/base.xml.in.h:864
msgid "Braille (left hand)"
msgstr "Брайля (для шульги)"
-#: ../rules/base.xml.in.h:860
+#: ../rules/base.xml.in.h:865
msgid "Braille (right hand)"
msgstr "Брайль (для правші)"
#. Keyboard indicator for Turkmen layouts
-#: ../rules/base.xml.in.h:862
+#: ../rules/base.xml.in.h:867
msgid "tk"
msgstr "tk"
-#: ../rules/base.xml.in.h:863
+#: ../rules/base.xml.in.h:868
msgid "Turkmen"
msgstr "Туркменська"
-#: ../rules/base.xml.in.h:864
+#: ../rules/base.xml.in.h:869
msgid "Turkmen (Alt-Q)"
msgstr "Туркменська (Alt-Q)"
#. Keyboard indicator for Bambara layouts
-#: ../rules/base.xml.in.h:866
+#: ../rules/base.xml.in.h:871
msgid "bm"
msgstr "bm"
-#: ../rules/base.xml.in.h:867
+#: ../rules/base.xml.in.h:872
msgid "Bambara"
msgstr "Бамбара"
-#: ../rules/base.xml.in.h:868
+#: ../rules/base.xml.in.h:873
msgid "French (Mali, alternative)"
msgstr "Французька (Малі, альтернативна)"
-#: ../rules/base.xml.in.h:869
+#: ../rules/base.xml.in.h:874
msgid "English (Mali, US Macintosh)"
msgstr "Англійська (Малі, Macintosh США)"
-#: ../rules/base.xml.in.h:870
+#: ../rules/base.xml.in.h:875
msgid "English (Mali, US international)"
msgstr "Англійська (Малі, інтернаціональна США)"
#. Keyboard indicator for Swahili layouts
-#: ../rules/base.xml.in.h:872
+#: ../rules/base.xml.in.h:877
msgid "sw"
msgstr "sw"
-#: ../rules/base.xml.in.h:873
+#: ../rules/base.xml.in.h:878
msgid "Swahili (Tanzania)"
msgstr "Суахілі (Танзанія)"
-#: ../rules/base.xml.in.h:874
+#: ../rules/base.xml.in.h:879
msgid "Swahili (Kenya)"
msgstr "Суахілі (Кенія)"
-#: ../rules/base.xml.in.h:875
+#: ../rules/base.xml.in.h:880
msgid "Kikuyu"
msgstr "Кікуйю"
#. Keyboard indicator for Tswana layouts
-#: ../rules/base.xml.in.h:877
+#: ../rules/base.xml.in.h:882
msgid "tn"
msgstr "tn"
-#: ../rules/base.xml.in.h:878
+#: ../rules/base.xml.in.h:883
msgid "Tswana"
msgstr "Тсвана"
#. Keyboard indicator for Filipino layouts
-#: ../rules/base.xml.in.h:880
+#: ../rules/base.xml.in.h:885
msgid "ph"
msgstr "ph"
-#: ../rules/base.xml.in.h:881
+#: ../rules/base.xml.in.h:886
msgid "Filipino"
msgstr "Філіппінська"
-#: ../rules/base.xml.in.h:882
+#: ../rules/base.xml.in.h:887
msgid "Filipino (QWERTY Baybayin)"
msgstr "Філіппінська (QWERTY, байбаїн)"
-#: ../rules/base.xml.in.h:883
+#: ../rules/base.xml.in.h:888
msgid "Filipino (Capewell-Dvorak Latin)"
msgstr "Філіппінська (Кейпвелл-Дворак, латиниця)"
-#: ../rules/base.xml.in.h:884
+#: ../rules/base.xml.in.h:889
msgid "Filipino (Capewell-Dvorak Baybayin)"
msgstr "Філіппінська (Кейпвелл-Дворак, байбаїн)"
-#: ../rules/base.xml.in.h:885
+#: ../rules/base.xml.in.h:890
msgid "Filipino (Capewell-QWERF 2006 Latin)"
msgstr "Філіппінська (Кейпвелл-QWERF 2006, латиниця)"
-#: ../rules/base.xml.in.h:886
+#: ../rules/base.xml.in.h:891
msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
msgstr "Філіппінська (Кейпвелл-QWERF 2006, байбаїн)"
-#: ../rules/base.xml.in.h:887
+#: ../rules/base.xml.in.h:892
msgid "Filipino (Colemak Latin)"
msgstr "Філіппінська (Коулмак, латиниця)"
-#: ../rules/base.xml.in.h:888
+#: ../rules/base.xml.in.h:893
msgid "Filipino (Colemak Baybayin)"
msgstr "Філіппінська (Коулмак, байбаїн)"
-#: ../rules/base.xml.in.h:889
+#: ../rules/base.xml.in.h:894
msgid "Filipino (Dvorak Latin)"
msgstr "Філіппінська (Дворак, латиниця)"
-#: ../rules/base.xml.in.h:890
+#: ../rules/base.xml.in.h:895
msgid "Filipino (Dvorak Baybayin)"
msgstr "Філіппінська (Дворат, байбаїн)"
-#: ../rules/base.xml.in.h:891
+#: ../rules/base.xml.in.h:896
msgid "md"
msgstr "md"
-#: ../rules/base.xml.in.h:892
+#: ../rules/base.xml.in.h:897
msgid "Moldavian"
msgstr "Молдавська"
-#: ../rules/base.xml.in.h:893
+#: ../rules/base.xml.in.h:898
msgid "gag"
msgstr "gag"
-#: ../rules/base.xml.in.h:894
+#: ../rules/base.xml.in.h:899
msgid "Moldavian (Gagauz)"
msgstr "Молдавська (гагаузька)"
-#: ../rules/base.xml.in.h:895
+#: ../rules/base.xml.in.h:900
msgid "Switching to another layout"
msgstr "Перемикання на іншу розкладку"
-#: ../rules/base.xml.in.h:896
+#: ../rules/base.xml.in.h:901
msgid "Right Alt (while pressed)"
msgstr "Права клавіша Alt (поки натиснена)"
-#: ../rules/base.xml.in.h:897
+#: ../rules/base.xml.in.h:902
msgid "Left Alt (while pressed)"
msgstr "Ліва клавіша Alt (поки натиснена)"
-#: ../rules/base.xml.in.h:898
+#: ../rules/base.xml.in.h:903
msgid "Left Win (while pressed)"
msgstr "Ліва клавіша Win (поки натиснута)"
-#: ../rules/base.xml.in.h:899
+#: ../rules/base.xml.in.h:904
msgid "Right Win (while pressed)"
msgstr "Права клавіша Win (поки натиснена)"
-#: ../rules/base.xml.in.h:900
+#: ../rules/base.xml.in.h:905
msgid "Any Win key (while pressed)"
msgstr "Будь-яка клавіша Win (на час натискання)"
-#: ../rules/base.xml.in.h:901
+#: ../rules/base.xml.in.h:906
msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
msgstr "Caps Lock (поки натиснена), Alt+Caps Lock виконує оригінальну функцію capslock"
-#: ../rules/base.xml.in.h:902
+#: ../rules/base.xml.in.h:907
msgid "Right Ctrl (while pressed)"
msgstr "Права клавіша Ctrl (поки натиснута)"
-#: ../rules/base.xml.in.h:903
+#: ../rules/base.xml.in.h:908
msgid "Right Alt"
msgstr "Права клавіша Alt"
-#: ../rules/base.xml.in.h:904
+#: ../rules/base.xml.in.h:909
msgid "Left Alt"
msgstr "Ліва клавіша Alt"
-#: ../rules/base.xml.in.h:905
+#: ../rules/base.xml.in.h:910
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:906
+#: ../rules/base.xml.in.h:911
msgid "Shift+Caps Lock"
msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:907
+#: ../rules/base.xml.in.h:912
msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
msgstr "Caps Lock (на першу розкладку), Shift+Caps Lock (на останню розкладку)"
-#: ../rules/base.xml.in.h:908
+#: ../rules/base.xml.in.h:913
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Ліва Win (на першу розкладку), Права Win/Menu (на останню розкладку)"
-#: ../rules/base.xml.in.h:909
+#: ../rules/base.xml.in.h:914
msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
msgstr "Ліва Ctrl (на першу розкладку), Правий Ctrl (на останню розкладку)"
-#: ../rules/base.xml.in.h:910
+#: ../rules/base.xml.in.h:915
msgid "Alt+Caps Lock"
msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:911
+#: ../rules/base.xml.in.h:916
msgid "Both Shift keys together"
msgstr "Обидві клавіші Shift разом"
-#: ../rules/base.xml.in.h:912
+#: ../rules/base.xml.in.h:917
msgid "Both Alt keys together"
msgstr "Обидві клавіші Alt разом"
-#: ../rules/base.xml.in.h:913
+#: ../rules/base.xml.in.h:918
msgid "Both Ctrl keys together"
msgstr "Обидві клавіші Ctrl разом"
-#: ../rules/base.xml.in.h:914
+#: ../rules/base.xml.in.h:919
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:915
+#: ../rules/base.xml.in.h:920
msgid "Left Ctrl+Left Shift"
msgstr "Лівий Ctrl+Лівий Shift"
-#: ../rules/base.xml.in.h:916
+#: ../rules/base.xml.in.h:921
msgid "Right Ctrl+Right Shift"
msgstr "Права Ctrl+Права Shift"
-#: ../rules/base.xml.in.h:917
+#: ../rules/base.xml.in.h:922
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:918
+#: ../rules/base.xml.in.h:923
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:919
+#: ../rules/base.xml.in.h:924
msgid "Left Alt+Left Shift"
msgstr "Лівий Alt+Лівий Shift"
-#: ../rules/base.xml.in.h:920
+#: ../rules/base.xml.in.h:925
msgid "Alt+Space"
msgstr "Alt+Пробіл"
-#: ../rules/base.xml.in.h:921
+#: ../rules/base.xml.in.h:926
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:922
+#: ../rules/base.xml.in.h:927
msgid "Left Win"
msgstr "Ліва клавіша Win"
-#: ../rules/base.xml.in.h:923
+#: ../rules/base.xml.in.h:928
msgid "Win Key+Space"
msgstr "Клавіша Win+Пробіл"
-#: ../rules/base.xml.in.h:924
+#: ../rules/base.xml.in.h:929
msgid "Right Win"
msgstr "Права клавіша Win"
-#: ../rules/base.xml.in.h:925
+#: ../rules/base.xml.in.h:930
msgid "Left Shift"
msgstr "Ліва клавіша Shift"
-#: ../rules/base.xml.in.h:926
+#: ../rules/base.xml.in.h:931
msgid "Right Shift"
msgstr "Права клавіша Shift"
-#: ../rules/base.xml.in.h:927
+#: ../rules/base.xml.in.h:932
msgid "Left Ctrl"
msgstr "Ліва клавіша Ctrl"
-#: ../rules/base.xml.in.h:928
+#: ../rules/base.xml.in.h:933
msgid "Right Ctrl"
msgstr "Права клавіша Ctrl"
-#: ../rules/base.xml.in.h:929
+#: ../rules/base.xml.in.h:934
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:930
+#: ../rules/base.xml.in.h:935
msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
msgstr "Ліва Ctrl+ліва Win (на першу розкладку), правий Ctrl+Menu (на другу розкладку)"
-#: ../rules/base.xml.in.h:931
+#: ../rules/base.xml.in.h:936
msgid "Key to choose 3rd level"
msgstr "Клавіша для вибору 3-го ряду"
-#: ../rules/base.xml.in.h:932
+#: ../rules/base.xml.in.h:937
msgid "Any Win key"
msgstr "Будь-яка клавіша Win"
-#: ../rules/base.xml.in.h:933
+#: ../rules/base.xml.in.h:938
msgid "Any Alt key"
msgstr "Будь-яка клавіша Alt"
-#: ../rules/base.xml.in.h:934
+#: ../rules/base.xml.in.h:939
msgid "Right Alt, Shift+Right Alt key is Compose"
msgstr "Правий Alt, Shift+правий Alt діють як Compose"
-#: ../rules/base.xml.in.h:935
+#: ../rules/base.xml.in.h:940
msgid "Right Alt key never chooses 3rd level"
msgstr "Права клавіша Alt ніколи не обирає 3-й рівень"
-#: ../rules/base.xml.in.h:936
+#: ../rules/base.xml.in.h:941
msgid "Enter on keypad"
msgstr "Enter на цифровій клавіатурі"
-#: ../rules/base.xml.in.h:937
+#: ../rules/base.xml.in.h:942
msgid "Backslash"
msgstr "Зворотна риска"
-#: ../rules/base.xml.in.h:938
+#: ../rules/base.xml.in.h:943
msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Менше ніж/Більше ніж&gt;"
-#: ../rules/base.xml.in.h:939
+#: ../rules/base.xml.in.h:944
msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Caps Lock вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h:940
+#: ../rules/base.xml.in.h:945
msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "Зворотна похила риска вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h:941
+#: ../rules/base.xml.in.h:946
msgid "&lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser"
msgstr "&lt;Менше/Більше&gt; вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня"
-#: ../rules/base.xml.in.h:942
+#: ../rules/base.xml.in.h:947
msgid "Ctrl key position"
msgstr "Розташування клавіші Ctrl"
-#: ../rules/base.xml.in.h:943
+#: ../rules/base.xml.in.h:948
msgid "Caps Lock as Ctrl"
msgstr "Caps Lock працює як Ctrl"
-#: ../rules/base.xml.in.h:944
+#: ../rules/base.xml.in.h:949
msgid "Left Ctrl as Meta"
msgstr "Ліва клавіша Ctrl як Meta"
-#: ../rules/base.xml.in.h:945
+#: ../rules/base.xml.in.h:950
msgid "Swap Ctrl and Caps Lock"
msgstr "Поміняти місцями клавіші Ctrl та Caps Lock"
-#: ../rules/base.xml.in.h:946
+#: ../rules/base.xml.in.h:951
msgid "At left of 'A'"
msgstr "Ліворуч від 'A'"
-#: ../rules/base.xml.in.h:947
+#: ../rules/base.xml.in.h:952
msgid "At bottom left"
msgstr "Знизу ліворуч"
-#: ../rules/base.xml.in.h:948
+#: ../rules/base.xml.in.h:953
msgid "Right Ctrl as Right Alt"
msgstr "Права клавіша Ctrl працює як права клавіша Alt"
-#: ../rules/base.xml.in.h:949
+#: ../rules/base.xml.in.h:954
msgid "Menu as Right Ctrl"
msgstr "Menu працює як права клавіша Ctrl"
-#: ../rules/base.xml.in.h:950
+#: ../rules/base.xml.in.h:955
msgid "Right Alt as Right Ctrl"
msgstr "Права клавіша Alt працює як права клавіша Ctrl"
-#: ../rules/base.xml.in.h:951
+#: ../rules/base.xml.in.h:956
msgid "Swap Left Alt key with Left Ctrl key"
msgstr "Поміняти місцями ліву клавішу Alt і ліву клавішу Ctrl"
-#: ../rules/base.xml.in.h:952
+#: ../rules/base.xml.in.h:957
msgid "Swap Left Win key with Left Ctrl key"
msgstr "Поміняти місцями ліву клавішу Win і ліву клавішу Ctrl"
-#: ../rules/base.xml.in.h:953
+#: ../rules/base.xml.in.h:958
msgid "Swap Right Win key with Right Ctrl key"
msgstr "Поміняти місцями праву клавішу Win і праву клавішу Ctrl"
-#: ../rules/base.xml.in.h:954
+#: ../rules/base.xml.in.h:959
msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt"
msgstr "Ліва клавіша Alt працює як Ctrl, ліва Ctrl — як Win, ліва Win — як Alt"
-#: ../rules/base.xml.in.h:955
+#: ../rules/base.xml.in.h:960
msgid "Use keyboard LED to show alternative layout"
msgstr "Використовувати клавіатурні індикатори для індикації альтернативних розкладок"
-#: ../rules/base.xml.in.h:956
+#: ../rules/base.xml.in.h:961
msgid "Num Lock"
msgstr "Num Lock"
-#: ../rules/base.xml.in.h:957
+#: ../rules/base.xml.in.h:962
msgid "Layout of numeric keypad"
msgstr "Розкладка цифрової клавіатури"
-#: ../rules/base.xml.in.h:958
+#: ../rules/base.xml.in.h:963
msgid "Legacy"
msgstr "Застаріла"
-#: ../rules/base.xml.in.h:959
+#: ../rules/base.xml.in.h:964
msgid "Unicode additions (arrows and math operators)"
msgstr "Доповнення Unicode (стрілки та математичні оператори)"
-#: ../rules/base.xml.in.h:960
+#: ../rules/base.xml.in.h:965
msgid "Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Доповнення Unicode (стрілки та математичні оператори; математичні оператори на типовому рівні)"
-#: ../rules/base.xml.in.h:961
+#: ../rules/base.xml.in.h:966
msgid "Legacy Wang 724"
msgstr "Стара Wang 724"
-#: ../rules/base.xml.in.h:962
+#: ../rules/base.xml.in.h:967
msgid "Wang 724 keypad with Unicode additions (arrows and math operators)"
msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори)"
-#: ../rules/base.xml.in.h:963
+#: ../rules/base.xml.in.h:968
msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)"
msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори). Математичні операції на типовому рівні"
-#: ../rules/base.xml.in.h:964
+#: ../rules/base.xml.in.h:969
msgid "Hexadecimal"
msgstr "Шістнадцяткова"
-#: ../rules/base.xml.in.h:965
+#: ../rules/base.xml.in.h:970
msgid "ATM/phone-style"
msgstr "У стилі банкоматної/телефонної"
-#: ../rules/base.xml.in.h:966
+#: ../rules/base.xml.in.h:971
msgid "Numeric keypad delete key behaviour"
msgstr "Вибір поведінки клавіші del на цифровій клавіатурі"
-#: ../rules/base.xml.in.h:967
+#: ../rules/base.xml.in.h:972
msgid "Legacy key with dot"
msgstr "Застаріла клавіша з крапкою"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:969
+#: ../rules/base.xml.in.h:974
msgid "Legacy key with comma"
msgstr "Застаріла клавіша з комою"
-#: ../rules/base.xml.in.h:970
+#: ../rules/base.xml.in.h:975
msgid "Four-level key with dot"
msgstr "Клавіша четвертого рівня з крапкою"
-#: ../rules/base.xml.in.h:971
+#: ../rules/base.xml.in.h:976
msgid "Four-level key with dot, Latin-9 only"
msgstr "Клавіша четвертого рівня з крапкою, обмежена Latin-9"
-#: ../rules/base.xml.in.h:972
+#: ../rules/base.xml.in.h:977
msgid "Four-level key with comma"
msgstr "Клавіша четвертого рівня з комою"
-#: ../rules/base.xml.in.h:973
+#: ../rules/base.xml.in.h:978
msgid "Four-level key with momayyez"
msgstr "Клавіша четвертого рівня з momayyez"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:976
+#: ../rules/base.xml.in.h:981
msgid "Four-level key with abstract separators"
msgstr "Клавіша четвертого рівня з абстрактним розділювачем "
-#: ../rules/base.xml.in.h:977
+#: ../rules/base.xml.in.h:982
msgid "Semicolon on third level"
msgstr "Крапка з комою на третьому рівні"
-#: ../rules/base.xml.in.h:978
+#: ../rules/base.xml.in.h:983
msgid "Caps Lock key behavior"
msgstr "Поведінка клавіші Caps Lock"
-#: ../rules/base.xml.in.h:979
+#: ../rules/base.xml.in.h:984
msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift призупиняє дію Caps Lock"
-#: ../rules/base.xml.in.h:980
+#: ../rules/base.xml.in.h:985
msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock"
msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift не впливає на Caps Lock"
-#: ../rules/base.xml.in.h:981
+#: ../rules/base.xml.in.h:986
msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
msgstr "Caps Lock дія як Shift з блокуванням. Shift призупиняє дію Caps Lock"
-#: ../rules/base.xml.in.h:982
+#: ../rules/base.xml.in.h:987
msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock"
msgstr "Caps Lock діє як Shift з блокуванням. Shift не впливає на Caps Lock"
-#: ../rules/base.xml.in.h:983
+#: ../rules/base.xml.in.h:988
msgid "Caps Lock toggles normal capitalization of alphabetic characters"
msgstr "Caps Lock вмикає звичайну капіталізацію символів алфавіту"
-#: ../rules/base.xml.in.h:984
+#: ../rules/base.xml.in.h:989
msgid "Make Caps Lock an additional Num Lock"
msgstr "Caps Lock — додаткова клавіша Num Lock"
-#: ../rules/base.xml.in.h:985
+#: ../rules/base.xml.in.h:990
msgid "Swap ESC and Caps Lock"
msgstr "Поміняти місцями клавіші ESC та Caps Lock"
-#: ../rules/base.xml.in.h:986
+#: ../rules/base.xml.in.h:991
msgid "Make Caps Lock an additional ESC"
msgstr "Caps Lock — додаткова клавіша ESC"
-#: ../rules/base.xml.in.h:987
+#: ../rules/base.xml.in.h:992
msgid "Make Caps Lock an additional Backspace"
msgstr "Caps Lock — додаткова клавіша Backspace"
-#: ../rules/base.xml.in.h:988
+#: ../rules/base.xml.in.h:993
msgid "Make Caps Lock an additional Super"
msgstr "Caps Lock — додаткова клавіша Super"
-#: ../rules/base.xml.in.h:989
+#: ../rules/base.xml.in.h:994
msgid "Make Caps Lock an additional Hyper"
msgstr "Caps Lock — додаткова клавіша Hyper"
-#: ../rules/base.xml.in.h:990
+#: ../rules/base.xml.in.h:995
msgid "Caps Lock toggles ShiftLock (affects all keys)"
msgstr "Caps Lock перемикає Shift (діє одразу на всі клавіші)"
-#: ../rules/base.xml.in.h:991
+#: ../rules/base.xml.in.h:996
msgid "Caps Lock is disabled"
msgstr "Caps Lock вимкнено"
-#: ../rules/base.xml.in.h:992
+#: ../rules/base.xml.in.h:997
msgid "Make Caps Lock an additional Ctrl"
msgstr "Caps Lock — додаткова клавіша Ctrl"
-#: ../rules/base.xml.in.h:993
+#: ../rules/base.xml.in.h:998
msgid "Alt/Win key behavior"
msgstr "Поведінка клавіш Alt/Win"
-#: ../rules/base.xml.in.h:994
+#: ../rules/base.xml.in.h:999
msgid "Add the standard behavior to Menu key"
msgstr "Додати звичайну поведінку на клавішу Menu"
-#: ../rules/base.xml.in.h:995
+#: ../rules/base.xml.in.h:1000
msgid "Alt and Meta are on Alt keys"
msgstr "Alt та Meta на клавішах Alt"
-#: ../rules/base.xml.in.h:996
+#: ../rules/base.xml.in.h:1001
msgid "Alt is mapped to Win keys (and the usual Alt keys)"
msgstr "Alt використовуються як Win (і як звичайні Alt)"
-#: ../rules/base.xml.in.h:997
+#: ../rules/base.xml.in.h:1002
msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl використовується як Win (і як звичайний Ctrl)"
-#: ../rules/base.xml.in.h:998
+#: ../rules/base.xml.in.h:1003
msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl використовується як клавіші Alt, Alt використовується як Win"
-#: ../rules/base.xml.in.h:999
+#: ../rules/base.xml.in.h:1004
msgid "Meta is mapped to Win keys"
msgstr "Meta відповідає клавішам Win"
-#: ../rules/base.xml.in.h:1000
+#: ../rules/base.xml.in.h:1005
msgid "Meta is mapped to Left Win"
msgstr "Meta відповідає лівій клавіші Win"
-#: ../rules/base.xml.in.h:1001
+#: ../rules/base.xml.in.h:1006
msgid "Hyper is mapped to Win keys"
msgstr "Hyper відповідає клавішам Win"
-#: ../rules/base.xml.in.h:1002
+#: ../rules/base.xml.in.h:1007
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Клавіша Alt відповідає правій клавіші Win, а Super - клавіші Menu."
-#: ../rules/base.xml.in.h:1003
+#: ../rules/base.xml.in.h:1008
msgid "Alt is swapped with Win"
msgstr "Alt міняється з клавішею Win"
-#: ../rules/base.xml.in.h:1004
+#: ../rules/base.xml.in.h:1009
msgid "Position of Compose key"
msgstr "Розташування клавіші Compose"
-#: ../rules/base.xml.in.h:1005
+#: ../rules/base.xml.in.h:1010
msgid "3rd level of Left Win"
msgstr "3-ій рівень лівої Win"
-#: ../rules/base.xml.in.h:1006
+#: ../rules/base.xml.in.h:1011
msgid "3rd level of Right Win"
msgstr "3-ій рівень правої Win"
-#: ../rules/base.xml.in.h:1007
+#: ../rules/base.xml.in.h:1012
msgid "3rd level of Menu"
msgstr "3-ій рівень клавіші меню"
-#: ../rules/base.xml.in.h:1008
+#: ../rules/base.xml.in.h:1013
msgid "3rd level of Left Ctrl"
msgstr "3-ій рівень лівої Ctrl"
-#: ../rules/base.xml.in.h:1009
+#: ../rules/base.xml.in.h:1014
msgid "3rd level of Right Ctrl"
msgstr "3-ій рівень правої Ctrl"
-#: ../rules/base.xml.in.h:1010
+#: ../rules/base.xml.in.h:1015
msgid "3rd level of Caps Lock"
msgstr "3-ій рівень Caps Lock"
-#: ../rules/base.xml.in.h:1011
+#: ../rules/base.xml.in.h:1016
msgid "3rd level of &lt;Less/Greater&gt;"
msgstr "3-ій рівень &lt;Менше/Більше&gt;"
-#: ../rules/base.xml.in.h:1012
+#: ../rules/base.xml.in.h:1017
msgid "Pause"
msgstr "Pause"
-#: ../rules/base.xml.in.h:1013
+#: ../rules/base.xml.in.h:1018
msgid "PrtSc"
msgstr "PrtSc"
-#: ../rules/base.xml.in.h:1014
+#: ../rules/base.xml.in.h:1019
msgid "Miscellaneous compatibility options"
msgstr "Різні параметри сумісності"
-#: ../rules/base.xml.in.h:1015
+#: ../rules/base.xml.in.h:1020
msgid "Default numeric keypad keys"
msgstr "Типові клавіші цифрової клавіатури"
-#: ../rules/base.xml.in.h:1016
+#: ../rules/base.xml.in.h:1021
msgid "Numeric keypad keys always enter digits (as in Mac OS)"
msgstr "За допомогою цифрової клавіатури вводяться лише цифри (як у Mac OS)"
-#: ../rules/base.xml.in.h:1017
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows"
+#: ../rules/base.xml.in.h:1022
+msgid "NumLock on: digits, Shift switches to arrow keys, Numlock off: always arrow keys (as in MS Windows)"
+msgstr "Увімкнено NumLock: цифри, Shift перемикає на клавіші зі стрілками, Numlock вимкнено: завжди клавіші зі стрілками (як у MS Windows)"
-#: ../rules/base.xml.in.h:1018
+#: ../rules/base.xml.in.h:1023
msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
msgstr "Shift не скасовує Num Lock, а вибирає третій рівень"
-#: ../rules/base.xml.in.h:1019
+#: ../rules/base.xml.in.h:1024
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Сліпі клавіші (Ctrl+Alt+&lt;key&gt;) обробляються на сервері"
-#: ../rules/base.xml.in.h:1020
+#: ../rules/base.xml.in.h:1025
msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
msgstr "Клавіатура Apple Aluminium (емуляція клавіш ПК: Print, Scroll Lock, Pause, Num Lock)"
-#: ../rules/base.xml.in.h:1021
+#: ../rules/base.xml.in.h:1026
msgid "Shift cancels Caps Lock"
msgstr "Shift скасовує Caps Lock"
-#: ../rules/base.xml.in.h:1022
+#: ../rules/base.xml.in.h:1027
msgid "Enable extra typographic characters"
msgstr "Увімкнути додаткові типографські символи"
-#: ../rules/base.xml.in.h:1023
+#: ../rules/base.xml.in.h:1028
msgid "Both Shift keys together toggle Caps Lock"
msgstr "Обидві клавіші Shift разом перемикають стан Caps Lock"
-#: ../rules/base.xml.in.h:1024
+#: ../rules/base.xml.in.h:1029
msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates"
msgstr "Натискання обох клавіш Shift вмикають Caps Lock, одна клавіша Shift — вимикає"
-#: ../rules/base.xml.in.h:1025
+#: ../rules/base.xml.in.h:1030
msgid "Both Shift keys together toggle ShiftLock"
msgstr "Обидві клавіші Shift разом перемикають стан Shift"
-#: ../rules/base.xml.in.h:1026
+#: ../rules/base.xml.in.h:1031
msgid "Shift + NumLock toggles PointerKeys"
msgstr "Shift + NumLock перемикає PointerKeys"
-#: ../rules/base.xml.in.h:1027
+#: ../rules/base.xml.in.h:1032
msgid "Allow breaking grabs with keyboard actions (warning: security risk)"
msgstr "Дозволити скасування захоплення діями з клавіатури (увага: небезпечно)"
-#: ../rules/base.xml.in.h:1028
+#: ../rules/base.xml.in.h:1033
msgid "Allow grab and window tree logging"
msgstr "Дозволити захоплення і журналювання ієрархії вікон"
-#: ../rules/base.xml.in.h:1029
+#: ../rules/base.xml.in.h:1034
msgid "Adding currency signs to certain keys"
msgstr "Додавання знаків валюти до деяких клавіш"
-#: ../rules/base.xml.in.h:1030
+#: ../rules/base.xml.in.h:1035
msgid "Euro on E"
msgstr "Євро на E"
-#: ../rules/base.xml.in.h:1031
+#: ../rules/base.xml.in.h:1036
msgid "Euro on 2"
msgstr "Євро на 2"
-#: ../rules/base.xml.in.h:1032
+#: ../rules/base.xml.in.h:1037
msgid "Euro on 4"
msgstr "Євро на 4"
-#: ../rules/base.xml.in.h:1033
+#: ../rules/base.xml.in.h:1038
msgid "Euro on 5"
msgstr "Євро на 5"
-#: ../rules/base.xml.in.h:1034
+#: ../rules/base.xml.in.h:1039
msgid "Rupee on 4"
msgstr "Символ рупії на 4"
-#: ../rules/base.xml.in.h:1035
+#: ../rules/base.xml.in.h:1040
msgid "Key to choose 5th level"
msgstr "Клавіша для вибору 5-го ряду"
-#: ../rules/base.xml.in.h:1036
+#: ../rules/base.xml.in.h:1041
msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "&lt;Менше ніж/Більше ніж&gt; вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1037
+#: ../rules/base.xml.in.h:1042
msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Права клавіша Alt вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1038
+#: ../rules/base.xml.in.h:1043
msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Ліва клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1039
+#: ../rules/base.xml.in.h:1044
msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
msgstr "Права клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
-#: ../rules/base.xml.in.h:1040
+#: ../rules/base.xml.in.h:1045
msgid "Using space key to input non-breakable space character"
msgstr "Клавіша пробіл генерує символ нерозривного пробілу"
-#: ../rules/base.xml.in.h:1041
+#: ../rules/base.xml.in.h:1046
msgid "Usual space at any level"
msgstr "Звичайний пробіл на будь-якому рівні"
-#: ../rules/base.xml.in.h:1042
+#: ../rules/base.xml.in.h:1047
msgid "Non-breakable space character at second level"
msgstr "Символ нерозривного пробілу на другому рівні"
-#: ../rules/base.xml.in.h:1043
+#: ../rules/base.xml.in.h:1048
msgid "Non-breakable space character at third level"
msgstr "Символ нерозривного пробілу на третьому рівні"
-#: ../rules/base.xml.in.h:1044
+#: ../rules/base.xml.in.h:1049
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Символ нерозривного пробілу на третьому рівні, нічого на четвертому"
-#: ../rules/base.xml.in.h:1045
+#: ../rules/base.xml.in.h:1050
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Символ нерозривного пробілу на третьому рівні, символ тонкого нерозривного пробілу на четвертому рівні"
-#: ../rules/base.xml.in.h:1046
+#: ../rules/base.xml.in.h:1051
msgid "Non-breakable space character at fourth level"
msgstr "Символ нерозривного пробілу на четвертому рівні"
-#: ../rules/base.xml.in.h:1047
+#: ../rules/base.xml.in.h:1052
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні"
-#: ../rules/base.xml.in.h:1048
+#: ../rules/base.xml.in.h:1053
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні (через Ctrl+Shift)"
-#: ../rules/base.xml.in.h:1049
+#: ../rules/base.xml.in.h:1054
msgid "Zero-width non-joiner character at second level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні"
-#: ../rules/base.xml.in.h:1050
+#: ../rules/base.xml.in.h:1055
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні"
-#: ../rules/base.xml.in.h:1051
+#: ../rules/base.xml.in.h:1056
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні, символ нерозривного пробілу на четвертому рівні"
-#: ../rules/base.xml.in.h:1052
+#: ../rules/base.xml.in.h:1057
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні"
-#: ../rules/base.xml.in.h:1053
+#: ../rules/base.xml.in.h:1058
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні, нічого на четвертому рівні"
-#: ../rules/base.xml.in.h:1054
+#: ../rules/base.xml.in.h:1059
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, символ нерозривного пробілу на третьому рівні, зв’язувальний символ нульової ширини на четвертому"
-#: ../rules/base.xml.in.h:1055
+#: ../rules/base.xml.in.h:1060
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні, вузький нерозривний пробіл на четвертому рівні"
-#: ../rules/base.xml.in.h:1056
+#: ../rules/base.xml.in.h:1061
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Незв’язувальний символ нульової ширини на третьому рівні, зв’язувальний символ нульової ширини на четвертому"
-#: ../rules/base.xml.in.h:1057
+#: ../rules/base.xml.in.h:1062
msgid "Japanese keyboard options"
msgstr "Параметри японської клавіатури"
-#: ../rules/base.xml.in.h:1058
+#: ../rules/base.xml.in.h:1063
msgid "Kana Lock key is locking"
msgstr "Клавіша Kana Lock фіксується"
-#: ../rules/base.xml.in.h:1059
+#: ../rules/base.xml.in.h:1064
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F style Backspace"
-#: ../rules/base.xml.in.h:1060
+#: ../rules/base.xml.in.h:1065
msgid "Make Zenkaku Hankaku an additional ESC"
msgstr "Клавіша повних/половинних форм — додаткова клавіша ESC"
-#: ../rules/base.xml.in.h:1061
+#: ../rules/base.xml.in.h:1066
+msgid "Korean Hangul/Hanja keys"
+msgstr "Корейські клавіші хангиля/ханчі"
+
+#: ../rules/base.xml.in.h:1067
+msgid "Hardware Hangul/Hanja keys"
+msgstr "Апаратні клавіші хангиля/ханчі"
+
+#: ../rules/base.xml.in.h:1068
+msgid "Right Alt as Hangul, right Ctrl as Hanja"
+msgstr "Права клавіша Alt працює як хангиль, права клавіша Ctrl — як ханча"
+
+#: ../rules/base.xml.in.h:1069
+msgid "Right Ctrl as Hangul, right Alt as Hanja"
+msgstr "Права клавіша Ctrl працює як хангиль, права клавіша Alt — як ханча"
+
+#: ../rules/base.xml.in.h:1070
msgid "Adding Esperanto supersigned letters"
msgstr "Додавання діакритичних знаків есперанто"
-#: ../rules/base.xml.in.h:1062
+#: ../rules/base.xml.in.h:1071
msgid "To the corresponding key in a Qwerty layout"
msgstr "На відповідну клавішу у розкладці Qwerty"
-#: ../rules/base.xml.in.h:1063
+#: ../rules/base.xml.in.h:1072
msgid "To the corresponding key in a Dvorak layout"
msgstr "На відповідну клавішу у розкладці Дворака"
-#: ../rules/base.xml.in.h:1064
+#: ../rules/base.xml.in.h:1073
msgid "To the corresponding key in a Colemak layout"
msgstr "На відповідну клавішу у розкладці Колемака"
-#: ../rules/base.xml.in.h:1065
+#: ../rules/base.xml.in.h:1074
msgid "Maintain key compatibility with old Solaris keycodes"
msgstr "Підтримувати сумісність клавіш з застарілими кодами клавіш Solaris"
-#: ../rules/base.xml.in.h:1066
+#: ../rules/base.xml.in.h:1075
msgid "Sun Key compatibility"
msgstr "Сумісність з кодами клавіш Sun"
-#: ../rules/base.xml.in.h:1067
+#: ../rules/base.xml.in.h:1076
msgid "Key sequence to kill the X server"
msgstr "Комбінація клавіш для переривання роботи X-сервера"
-#: ../rules/base.xml.in.h:1068
+#: ../rules/base.xml.in.h:1077
msgid "Ctrl + Alt + Backspace"
msgstr "Ctrl + Alt + Backspace"
@@ -4071,254 +4107,261 @@ msgid "German (with Hungarian letters and no dead keys)"
msgstr "Німецька (з літерами угорської без сліпих клавіш)"
#: ../rules/base.extras.xml.in.h:26
+msgid "Polish (Germany, eliminate dead keys)"
+msgstr "Польська (Німеччина, вимкнути сліпі клавіші)"
+
+#: ../rules/base.extras.xml.in.h:27
msgid "German (Sun Type 6/7)"
msgstr "Німецька (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:27
+#: ../rules/base.extras.xml.in.h:28
msgid "German (Aus der Neo-Welt)"
msgstr "Німецька (Aus der Neo-Welt)"
-#: ../rules/base.extras.xml.in.h:30
+#: ../rules/base.extras.xml.in.h:31
msgid "Avestan"
msgstr "Авестанська"
-#: ../rules/base.extras.xml.in.h:33
+#: ../rules/base.extras.xml.in.h:34
msgid "Lithuanian (US Dvorak with Lithuanian letters)"
msgstr "Литовська (Дворак, США, з литовськими літерами)"
-#: ../rules/base.extras.xml.in.h:34
+#: ../rules/base.extras.xml.in.h:35
msgid "Lithuanian (Sun Type 6/7)"
msgstr "Литовська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:37
+#: ../rules/base.extras.xml.in.h:38
msgid "Latvian (US Dvorak)"
msgstr "Латвійська (Дворак, США)"
-#: ../rules/base.extras.xml.in.h:38
+#: ../rules/base.extras.xml.in.h:39
msgid "Latvian (US Dvorak, Y variant)"
msgstr "Латвійська (Дворак, США, варіант з літерою Y)"
-#: ../rules/base.extras.xml.in.h:39
+#: ../rules/base.extras.xml.in.h:40
msgid "Latvian (US Dvorak, minus variant)"
msgstr "Латвійська (Дворак, США, варіант з мінусом)"
-#: ../rules/base.extras.xml.in.h:40
+#: ../rules/base.extras.xml.in.h:41
msgid "Latvian (programmer US Dvorak)"
msgstr "Латвійська (програмістський Дворак)"
-#: ../rules/base.extras.xml.in.h:41
+#: ../rules/base.extras.xml.in.h:42
msgid "Latvian (programmer US Dvorak, Y variant)"
msgstr "Латвійська (програмістський Дворак, варіант з літерою Y)"
-#: ../rules/base.extras.xml.in.h:42
+#: ../rules/base.extras.xml.in.h:43
msgid "Latvian (programmer US Dvorak, minus variant)"
msgstr "Латвійська (програмістський Дворак, варіант з мінусом)"
-#: ../rules/base.extras.xml.in.h:43
+#: ../rules/base.extras.xml.in.h:44
msgid "Latvian (US Colemak)"
msgstr "Латвійська (США, Коулмак)"
-#: ../rules/base.extras.xml.in.h:44
+#: ../rules/base.extras.xml.in.h:45
msgid "Latvian (US Colemak, apostrophe variant)"
msgstr "Латвійська (Коулмак, США, варіант з апострофом)"
-#: ../rules/base.extras.xml.in.h:45
+#: ../rules/base.extras.xml.in.h:46
msgid "Latvian (Sun Type 6/7)"
msgstr "Латвійська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:48
+#: ../rules/base.extras.xml.in.h:49
msgid "English (US, international AltGr Unicode combining)"
msgstr "Англійська (США, інтернаціональна, введення Unicode за допомогою AltGr)"
-#: ../rules/base.extras.xml.in.h:49
+#: ../rules/base.extras.xml.in.h:50
msgid "English (US, international AltGr Unicode combining, alternative)"
msgstr "Англійська (США, інтернаціональна, введення Unicode за допомогою AltGr, альтернативна)"
-#: ../rules/base.extras.xml.in.h:50
+#: ../rules/base.extras.xml.in.h:51
msgid "Atsina"
msgstr "Атсінська"
-#: ../rules/base.extras.xml.in.h:51
+#: ../rules/base.extras.xml.in.h:52
msgid "Coeur d'Alene Salish"
msgstr "Салішська кер-д’ален"
-#: ../rules/base.extras.xml.in.h:52
+#: ../rules/base.extras.xml.in.h:53
msgid "Czech Slovak and German (US)"
msgstr "Чеська, словацька і німецька (США)"
-#: ../rules/base.extras.xml.in.h:53
+#: ../rules/base.extras.xml.in.h:54
msgid "English (US, Sun Type 6/7)"
msgstr "Англійська (США, Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:54
+#: ../rules/base.extras.xml.in.h:55
msgid "English (Norman)"
msgstr "Англійська (Норман)"
-#: ../rules/base.extras.xml.in.h:57
+#: ../rules/base.extras.xml.in.h:58
msgid "Polish (international with dead keys)"
msgstr "Польська (інтернаціональна зі сліпими клавішами)"
-#: ../rules/base.extras.xml.in.h:58
+#: ../rules/base.extras.xml.in.h:59
msgid "Polish (Colemak)"
msgstr "Польська (Коулмак)"
-#: ../rules/base.extras.xml.in.h:59
+#: ../rules/base.extras.xml.in.h:60
msgid "Polish (Sun Type 6/7)"
msgstr "Польська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:63
+#: ../rules/base.extras.xml.in.h:64
msgid "Crimean Tatar (Dobruja Q)"
msgstr "Кримськотатарська (Dobruja Q)"
-#: ../rules/base.extras.xml.in.h:64
+#: ../rules/base.extras.xml.in.h:65
msgid "Romanian (ergonomic Touchtype)"
msgstr "Румунська (ергономічна для друку наосліп)"
-#: ../rules/base.extras.xml.in.h:65
+#: ../rules/base.extras.xml.in.h:66
msgid "Romanian (Sun Type 6/7)"
msgstr "Румунська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:68
+#: ../rules/base.extras.xml.in.h:69
msgid "Serbian (combining accents instead of dead keys)"
msgstr "Сербська (комбінації з акцентами замість сліпих клавіш)"
-#: ../rules/base.extras.xml.in.h:71
+#: ../rules/base.extras.xml.in.h:72
msgid "Church Slavonic"
msgstr "Церковнослов’янська"
-#: ../rules/base.extras.xml.in.h:72
+#: ../rules/base.extras.xml.in.h:73
msgid "Russian (with Ukrainian-Belorussian layout)"
msgstr "Російська (з українсько-білоруською розкладкою)"
-#: ../rules/base.extras.xml.in.h:73
+#: ../rules/base.extras.xml.in.h:74
msgid "Russian (Sun Type 6/7)"
msgstr "Російська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:76
+#: ../rules/base.extras.xml.in.h:77
msgid "Armenian (OLPC phonetic)"
msgstr "Вірменська (OLPC, фонетична)"
-#: ../rules/base.extras.xml.in.h:79
+#: ../rules/base.extras.xml.in.h:80
msgid "Hebrew (Biblical, SIL phonetic)"
msgstr "Іврит (біблійна, фонетична, SIL)"
-#: ../rules/base.extras.xml.in.h:82
+#: ../rules/base.extras.xml.in.h:83
msgid "Arabic (Sun Type 6/7)"
msgstr "Арабська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:85
+#: ../rules/base.extras.xml.in.h:86
msgid "Belgian (Sun Type 6/7)"
msgstr "Бельгійська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:88
+#: ../rules/base.extras.xml.in.h:89
msgid "Portuguese (Brazil, Sun Type 6/7)"
msgstr "Португальська (Бразилія, Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:91
+#: ../rules/base.extras.xml.in.h:92
msgid "Czech (Sun Type 6/7)"
msgstr "Чеська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:94
+#: ../rules/base.extras.xml.in.h:95
msgid "Danish (Sun Type 6/7)"
msgstr "Данська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:97
+#: ../rules/base.extras.xml.in.h:98
msgid "Dutch (Sun Type 6/7)"
msgstr "Голландська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:100
+#: ../rules/base.extras.xml.in.h:101
msgid "Estonian (Sun Type 6/7)"
msgstr "Естонська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:103
+#: ../rules/base.extras.xml.in.h:104
msgid "Finnish (Sun Type 6/7)"
msgstr "Фінська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:105
+#: ../rules/base.extras.xml.in.h:106
msgid "French (Sun Type 6/7)"
msgstr "Французька (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:108
+#: ../rules/base.extras.xml.in.h:109
msgid "Greek (Sun Type 6/7)"
msgstr "Грецька (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:111
+#: ../rules/base.extras.xml.in.h:112
msgid "Italian (Sun Type 6/7)"
msgstr "Італійська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:114
+#: ../rules/base.extras.xml.in.h:115
msgid "Japanese (Sun Type 6)"
msgstr "Японська (Sun Type 6)"
-#: ../rules/base.extras.xml.in.h:115
+#: ../rules/base.extras.xml.in.h:116
msgid "Japanese (Sun Type 7 - pc compatible)"
msgstr "Японська (Sun Type 7, сумісна з ПК)"
-#: ../rules/base.extras.xml.in.h:116
+#: ../rules/base.extras.xml.in.h:117
msgid "Japanese (Sun Type 7 - sun compatible)"
msgstr "Японська (Sun Type 7, сумісна з комп’ютерами Sun)"
-#: ../rules/base.extras.xml.in.h:119
+#: ../rules/base.extras.xml.in.h:120
msgid "Norwegian (Sun Type 6/7)"
msgstr "Норвезька (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:121
+#: ../rules/base.extras.xml.in.h:122
msgid "Portuguese (Sun Type 6/7)"
msgstr "Португальська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:124
+#: ../rules/base.extras.xml.in.h:125
msgid "Slovak (Sun Type 6/7)"
msgstr "Словацька (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:127
+#: ../rules/base.extras.xml.in.h:128
msgid "Spanish (Sun Type 6/7)"
msgstr "Іспанська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:130
+#: ../rules/base.extras.xml.in.h:131
msgid "Swedish (Dvorak A5)"
msgstr "Шведська (Дворак A5)"
-#: ../rules/base.extras.xml.in.h:131
+#: ../rules/base.extras.xml.in.h:132
msgid "Swedish (Sun Type 6/7)"
msgstr "Шведська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:133
+#: ../rules/base.extras.xml.in.h:134
msgid "German (Switzerland, Sun Type 6/7)"
msgstr "Німецька (Швейцарія, Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:134
+#: ../rules/base.extras.xml.in.h:135
msgid "French (Switzerland, Sun Type 6/7)"
msgstr "Французька (Швейцарія, Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:137
+#: ../rules/base.extras.xml.in.h:138
msgid "Turkish (Sun Type 6/7)"
msgstr "Турецька (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:140
+#: ../rules/base.extras.xml.in.h:141
msgid "Ukrainian (Sun Type 6/7)"
msgstr "Українська (Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:142
+#: ../rules/base.extras.xml.in.h:143
msgid "English (UK, Sun Type 6/7)"
msgstr "Англійська (Великобританія, Sun Type 6/7)"
-#: ../rules/base.extras.xml.in.h:145
+#: ../rules/base.extras.xml.in.h:146
msgid "Korean (Sun Type 6/7)"
msgstr "Корейська (Sun Type 6/7)"
#. Keyboard indicator for European layouts
-#: ../rules/base.extras.xml.in.h:147
+#: ../rules/base.extras.xml.in.h:148
msgid "eu"
msgstr "eu"
-#: ../rules/base.extras.xml.in.h:148
+#: ../rules/base.extras.xml.in.h:149
msgid "EurKEY (US based layout with european letters)"
msgstr "EurKEY (розкладка на основі американської, з європейськими літерами)"
-#: ../rules/base.extras.xml.in.h:151
+#: ../rules/base.extras.xml.in.h:152
msgid "Mmuock"
msgstr "М’мюок"
+#~ msgid "Shift with numeric keypad keys works as in MS Windows"
+#~ msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows"
+
#~ msgid "Bengali"
#~ msgstr "Бенгальська"
diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in
index c700972d2..c502bc6b0 100644
--- a/xorg-server/xkeyboard-config/rules/base.xml.in
+++ b/xorg-server/xkeyboard-config/rules/base.xml.in
@@ -4942,7 +4942,7 @@
<configItem>
<name>us</name>
<shortDescription>us</shortDescription>
- <_description>Singhala (US keyboard with Singhala letters)</_description>
+ <_description>Sinhala (US keyboard with Sinhala letters)</_description>
</configItem>
</variant>
</variantList>
diff --git a/xorg-server/xkeyboard-config/symbols/cm b/xorg-server/xkeyboard-config/symbols/cm
index 685ef2afa..8ed3f40ae 100644
--- a/xorg-server/xkeyboard-config/symbols/cm
+++ b/xorg-server/xkeyboard-config/symbols/cm
@@ -328,15 +328,25 @@ modifier_map Mod5 { ISO_Level3_Latch };
// ------- begin Mmuock keyboard map ------------------------------------------
// This layout is used for the Mmuock alphabet as described in the book
-// _The Sound of Mmuock: Orthography_ [isbn: 978-9956-645-17-6]. Mmuock
-// is the language of the Mmuock (local: Muòk) people of Western Cameroon.
+// _The Sound of Mmuock: Orthography (2. ed.)_ [isbn: 978-9956-645-28-1].
+// Mmuock is the language of the Mmuock (local: Muòk) people of Western
+// Cameroon.
//
// Author: Tano Fotang <fotang at mmuock dot org>
// Created: 2014-06-24
-// Version: 1.0
+// Version: 1.1
//
-// CHANGES:
+// CHANGES v 1.0:
// 2014-07-06 corrected shifted level3 of <AC11> to quotedbl
+// CHANGES v 1.1:
+// 2015-05-23 1- added dead_tilde to key <TILDE>; this is needed to produce
+// the letter <ñ> which was totally missing from the keyboard
+// 2- added letter <dz> to <AB01>; the letter had been missing.
+// 3- if we're not re-defining particular symbols from the included
+// latin layout, then maintain the original latin mappings.
+// Previously, we had set them to NoSymbol. Now, we want to
+// keep the original latin mappings except for those few that we
+// want to overwrite for our own keyboard.
//
// NOTES:
// 0. This map is based on the Latin layout for the US keyboard.
@@ -361,7 +371,7 @@ modifier_map Mod5 { ISO_Level3_Latch };
//
// 5. The 'Cameroon Multilingual' keyboard that is defined elsewhere, does not
// fit our needs because: (a) it is based on a different alphabet, (b) the
-// vast majority of its symbols are not used in Mmuock, and (b) for the few
+// vast majority of its symbols are not used in Mmuock, and (c) for the few
// symbols that are shared, the placing of the symbols is not egonomic for
// typing Mmuock as the _PRIMARY_ language. The aim of this keyboard, is to
// give priority to symbols that are actually used in the Mmuock alphabet.
@@ -382,6 +392,9 @@ modifier_map Mod5 { ISO_Level3_Latch };
// These fonts are all freely available.
//
// ------the layout-----------
+// Note: this drawing does not show the symbols that are mapped by the included
+// latin sybols files. Shown are only the symbols that are requiired by the
+// Mmuock keyboard.
//
// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
// │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & | * │ ( │ ) │ _ │ + ┃ ⌫ Back- ┃
@@ -391,10 +404,10 @@ modifier_map Mod5 { ISO_Level3_Latch };
// AD┃Tab ↹ ┃ q │ w │ e ǝ │ š r │ t │ y │ u ω │ i ɛ │ o φ │ p π │ ø [ │ σ ] ┃ ⏎ ┃
// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
// ┃ ┃ A │ S │ D │ F │ G │  ̇ H │ J │ K │ L │ Œ : │ " ” │ Æ | ┃ ┃
-// AC┃Caps ⇬ ┃ a │ s  ̃| d  ̀| f  ̌| g  ̈|  ̣ h │ j  ̆│ k  ̏│ l  ̄│ Œ ; │ ' ’ │ æ \ ┃ ┃
+// AC┃Caps ⇬ ┃ a │ s  ̃| d  ̀| f  ̌| g  ̈|  ̣ h │ j  ̆│ k  ̏│ l  ̄│ œ ; │ ' ’ │ æ \ ┃ ┃
// ┣━━━━━━━━┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
-// ┃ │ Z │ X │ C │ V │ B │ N ŋ │ M │ < « │ > » │ ? ┃ ┃
-// AB┃Shift ⇧ │ z │ x │ c │ v │ b │ n Ŋ │ m │ , ‹ │ . › │ / ┃Shift ⇧ ┃
+// ┃ │ Z Dz │ X │ C │ V │ B │ N ŋ │ M │ < « │ > » │ ? ┃ ┃
+// AB┃Shift ⇧ │ z dz │ x │ c │ v │ b │ n Ŋ │ m │ , ‹ │ . › │ / ┃Shift ⇧ ┃
// ┣━━━━━━━┳━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
// AA┃Ctrl ┃Meta ┃Alt ┃ Space ┃AltGr ⇮┃Menu ┃Ctrl ┃
@@ -408,8 +421,8 @@ xkb_symbols "mmuock" {
include "level3(ralt_switch)"
name[Group1]= "Mmuock";
- key <AE06> { [ 6, asciicircum, U0302, NoSymbol ] }; // tone 10
- key <AE07> { [ 7, ampersand, U0311, NoSymbol ] }; // tone 12
+ key <AE06> { [ 6, asciicircum, U0302 ] }; // tone 10
+ key <AE07> { [ 7, ampersand, U0311 ] }; // tone 12
key <AE08> { [ 8, asterisk, U030D, trademark ] }; // tone 13
key <AE09> { [ 9, parenleft, U0313, plusminus ] }; // tone 14
key <AE10> { [ 0, parenright, U030A, degree ] }; // tone 6
@@ -421,16 +434,18 @@ xkb_symbols "mmuock" {
key <AD10> { [ p, P, Greek_pi, Greek_PI ] };
key <AD11> { [ oslash, Ooblique, bracketleft, braceleft ] };
key <AD12> { [Greek_sigma, Greek_SIGMA, bracketright, braceright ] };
- key <AC02> { [ s, S, U0303, NoSymbol ] }; // tone 1
- key <AC03> { [ d, D, U0300, NoSymbol ] }; // tone 4
- key <AC04> { [ f, F, U030C, NoSymbol ] }; // tone 5
- key <AC05> { [ g, G, U0308, NoSymbol ] }; // tone 7
+ key <AC02> { [ s, S, U0303 ] }; // tone 1
+ key <AC03> { [ d, D, U0300 ] }; // tone 4
+ key <AC04> { [ f, F, U030C ] }; // tone 5
+ key <AC05> { [ g, G, U0308 ] }; // tone 7
key <AC06> { [ U0323, U0307, h, H ] }; // COMBINING DOT BELOW, ABOVE
- key <AC07> { [ j, J, U0306, NoSymbol ] }; // tone 9
- key <AC08> { [ k, K, U030F, NoSymbol ] }; // tone 11
- key <AC09> { [ l, L, U0304, NoSymbol ] }; // tone 0
+ key <AC07> { [ j, J, U0306 ] }; // tone 9
+ key <AC08> { [ k, K, U030F ] }; // tone 11
+ key <AC09> { [ l, L, U0304 ] }; // tone 0
key <AC10> { [ oe, OE, semicolon, colon ] };
key <AC11> { [ U0301, U030B, apostrophe, quotedbl ] }; // tone 3, 8
+ key <TLDE> { [ grave, dead_tilde ] };
+ key <AB01> { [ z, Z, U01F3, U01F2 ] }; // U01F3 = letter dz
key <AB06> { [ n, N, eng, ENG ] };
key <AB08> { [ comma, less, guillemotleft, U2039 ] };
key <AB09> { [ period, greater, guillemotright, U203A ] };
@@ -438,9 +453,8 @@ xkb_symbols "mmuock" {
include "cm(solidus_switch)"
};
-
// use slash as special key for switching to level3
-partial hidden modifier_keys
+partial modifier_keys
xkb_symbols "solidus_switch" {
key <AB10> {
symbols[Group1] = [ ISO_Level3_Latch, question, slash, NoSymbol ]
diff --git a/xorg-server/xkeyboard-config/symbols/lk b/xorg-server/xkeyboard-config/symbols/lk
index 017029dfb..0830790c2 100644
--- a/xorg-server/xkeyboard-config/symbols/lk
+++ b/xorg-server/xkeyboard-config/symbols/lk
@@ -88,16 +88,16 @@ xkb_symbols "tam_TAB" {
name[Group1]= "Tamil (Sri Lanka, TAB Typewriter)";
};
-// SINGHALA - US, SUBSTITUTES SOME AND ADDS SOME
+// SINHALA - US, SUBSTITUTES SOME AND ADDS SOME
// =============================================
//
// This started as an upgrade to the first romanized version of
-// Singhala called PTS Pali created in the 1860s. PTS requires
+// Sinhala called PTS Pali created in the 1860s. PTS requires
// dots and bars on letters that are rare in fonts, and impossible
// to type. Its singular purpose was to print Tripitaka, the
// collection of Buddhist discourses.
//
-// This version covers the entire newer Singhala phoneme chart
+// This version covers the entire newer Sinhala phoneme chart
// (Hodiya) that became standard just before the end of the 19th
// century. All the phonemes map to the SBCS. It is easy and
// faster than English to type. It overcomes the setback of
@@ -106,10 +106,10 @@ xkb_symbols "tam_TAB" {
// the SLS1134 specification matching shape and morpheme sets
// violating Sanskrit orthography.
//
-// Most importantly, this romanized version of Singhala has a
+// Most importantly, this romanized version of Sinhala has a
// companion orthographic font that displays the text in the
// native script and a JavaScript converts it to Unicode Sinhala
-// and back dramatically increasing Singhala seen on the web due
+// and back dramatically increasing Sinhala seen on the web due
// to its ease of use
//
// Dedication:
@@ -123,7 +123,7 @@ xkb_symbols "tam_TAB" {
partial alphanumeric_keys modifier_keys
xkb_symbols "us" {
include "us(basic)"
- name[Group1]= "Singhala (US keyboard with Singhala letters)";
+ name[Group1]= "Sinhala (US keyboard with Sinhala letters)";
//
// UNSHIFTED, SHIFT, ALT
// --------------------------------------------
diff --git a/xorg-server/xkeyboard-config/symbols/ph b/xorg-server/xkeyboard-config/symbols/ph
index 6b3defa7b..a5fe5dc42 100644
--- a/xorg-server/xkeyboard-config/symbols/ph
+++ b/xorg-server/xkeyboard-config/symbols/ph
@@ -2,8 +2,6 @@
// Philippines National Keyboard Layout v1.0.0 (2010-10-23) //
// http://laibcoms.com/sandbox/the-philippines-national-keyboard-layout //
// //
-// License: GNU/GPLv3 //
-// //
// Loosely based on ISO/IEC 9995-3:2009 //
// * glyphs that are not used in Philippine Languages and //
// Philippine English were not included //