From 8c74e7257ed453143c53086f884f6c6ff585379a Mon Sep 17 00:00:00 2001 From: marha Date: Tue, 8 Mar 2011 08:20:49 +0000 Subject: xkeyboard-config mesa git update 8 Mar 2011 --- mesalib/configs/autoconf.in | 437 +- mesalib/src/mesa/main/bufferobj.c | 1 + mesalib/src/mesa/main/drawpix.c | 2 - mesalib/src/mesa/main/fbobject.c | 36 +- mesalib/src/mesa/main/mtypes.h | 2 + mesalib/src/mesa/state_tracker/st_cb_fbo.c | 1286 +-- mesalib/src/mesa/state_tracker/st_manager.c | 1845 ++-- xorg-server/xkeyboard-config/rules/base.xml.in | 12397 ++++++++++++----------- xorg-server/xkeyboard-config/symbols/in | 2763 ++--- 9 files changed, 9445 insertions(+), 9324 deletions(-) diff --git a/mesalib/configs/autoconf.in b/mesalib/configs/autoconf.in index ab3fe7dc4..4e931a3a9 100644 --- a/mesalib/configs/autoconf.in +++ b/mesalib/configs/autoconf.in @@ -1,218 +1,219 @@ -# Autoconf configuration - -# Pull in the defaults -include $(TOP)/configs/default - -# This is generated by configure -CONFIG_NAME = autoconf - -# Compiler and flags -CC = @CC@ -CXX = @CXX@ -OPT_FLAGS = @OPT_FLAGS@ -ARCH_FLAGS = @ARCH_FLAGS@ -ASM_FLAGS = @ASM_FLAGS@ -PIC_FLAGS = @PIC_FLAGS@ -DEFINES = @DEFINES@ -API_DEFINES = @API_DEFINES@ -SHARED_GLAPI = @SHARED_GLAPI@ -CFLAGS_NOVISIBILITY = @CPPFLAGS@ @CFLAGS@ \ - $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(ASM_FLAGS) $(DEFINES) -CXXFLAGS_NOVISIBILITY = @CPPFLAGS@ @CXXFLAGS@ \ - $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES) -CFLAGS = $(CFLAGS_NOVISIBILITY) @VISIBILITY_CFLAGS@ -CXXFLAGS = $(CXXFLAGS_NOVISIBILITY) @VISIBILITY_CXXFLAGS@ -LDFLAGS = @LDFLAGS@ -EXTRA_LIB_PATH = @EXTRA_LIB_PATH@ -RADEON_CFLAGS = @RADEON_CFLAGS@ -RADEON_LDFLAGS = @RADEON_LDFLAGS@ -INTEL_LIBS = @INTEL_LIBS@ -INTEL_CFLAGS = @INTEL_CFLAGS@ -X11_LIBS = @X11_LIBS@ -X11_CFLAGS = @X11_CFLAGS@ -LLVM_CFLAGS = @LLVM_CFLAGS@ -LLVM_LDFLAGS = @LLVM_LDFLAGS@ -LLVM_LIBS = @LLVM_LIBS@ -GLW_CFLAGS = @GLW_CFLAGS@ -GLUT_CFLAGS = @GLUT_CFLAGS@ -GLX_TLS = @GLX_TLS@ -DRI_CFLAGS = @DRI_CFLAGS@ -DRI_CXXFLAGS = @DRI_CXXFLAGS@ - -# dlopen -DLOPEN_LIBS = @DLOPEN_LIBS@ - -# Source selection -MESA_ASM_SOURCES = @MESA_ASM_SOURCES@ -GLAPI_ASM_SOURCES = @GLAPI_ASM_SOURCES@ - -# Misc tools and flags -MAKE = @MAKE@ -SHELL = @SHELL@ -MKLIB_OPTIONS = @MKLIB_OPTIONS@ -MKDEP = @MKDEP@ -MKDEP_OPTIONS = @MKDEP_OPTIONS@ -INSTALL = @INSTALL@ - -# Python and flags (generally only needed by the developers) -PYTHON2 = @PYTHON2@ -PYTHON_FLAGS = -t -O -O - -# Library names (base name) -GL_LIB = GL -GLU_LIB = GLU -GLUT_LIB = glut -GLW_LIB = GLw -OSMESA_LIB = @OSMESA_LIB@ -GLESv1_CM_LIB = GLESv1_CM -GLESv2_LIB = GLESv2 -VG_LIB = OpenVG -GLAPI_LIB = glapi -WAYLAND_EGL_LIB = wayland-egl - -# Library names (actual file names) -GL_LIB_NAME = @GL_LIB_NAME@ -GLU_LIB_NAME = @GLU_LIB_NAME@ -GLUT_LIB_NAME = @GLUT_LIB_NAME@ -GLW_LIB_NAME = @GLW_LIB_NAME@ -OSMESA_LIB_NAME = @OSMESA_LIB_NAME@ -EGL_LIB_NAME = @EGL_LIB_NAME@ -GLESv1_CM_LIB_NAME = @GLESv1_CM_LIB_NAME@ -GLESv2_LIB_NAME = @GLESv2_LIB_NAME@ -VG_LIB_NAME = @VG_LIB_NAME@ -GLAPI_LIB_NAME = @GLAPI_LIB_NAME@ -WAYLAND_EGL_LIB_NAME = @WAYLAND_EGL_LIB_NAME@ - -# Globs used to install the lib and all symlinks -GL_LIB_GLOB = @GL_LIB_GLOB@ -GLU_LIB_GLOB = @GLU_LIB_GLOB@ -GLUT_LIB_GLOB = @GLUT_LIB_GLOB@ -GLW_LIB_GLOB = @GLW_LIB_GLOB@ -OSMESA_LIB_GLOB = @OSMESA_LIB_GLOB@ -EGL_LIB_GLOB = @EGL_LIB_GLOB@ -GLESv1_CM_LIB_GLOB = @GLESv1_CM_LIB_GLOB@ -GLESv2_LIB_GLOB = @GLESv2_LIB_GLOB@ -VG_LIB_GLOB = @VG_LIB_GLOB@ -GLAPI_LIB_GLOB = @GLAPI_LIB_GLOB@ -WAYLAND_EGL_LIB_GLOB = @WAYLAND_EGL_LIB_GLOB@ - -# Directories to build -LIB_DIR = @LIB_DIR@ -SRC_DIRS = @SRC_DIRS@ -GLU_DIRS = @GLU_DIRS@ -DRIVER_DIRS = @DRIVER_DIRS@ -EGL_DRIVERS_DIRS = @EGL_DRIVERS_DIRS@ -GALLIUM_DIRS = @GALLIUM_DIRS@ -GALLIUM_DRIVERS_DIRS = @GALLIUM_DRIVERS_DIRS@ -GALLIUM_WINSYS_DIRS = @GALLIUM_WINSYS_DIRS@ -GALLIUM_TARGET_DIRS = @GALLIUM_TARGET_DIRS@ -GALLIUM_STATE_TRACKERS_DIRS = @GALLIUM_STATE_TRACKERS_DIRS@ -GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a -GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a) - -# Driver specific build vars -DRI_DIRS = @DRI_DIRS@ -DRICORE_GLSL_LIBS = @DRICORE_GLSL_LIBS@ -DRICORE_LIBS = @DRICORE_LIBS@ -DRICORE_LIB_DEPS = @DRICORE_LIB_DEPS@ -EGL_PLATFORMS = @EGL_PLATFORMS@ -EGL_CLIENT_APIS = @EGL_CLIENT_APIS@ - -# Dependencies -X11_INCLUDES = @X11_INCLUDES@ - -# GLw motif setup -GLW_SOURCES = @GLW_SOURCES@ -MOTIF_CFLAGS = @MOTIF_CFLAGS@ - -# Library/program dependencies -GL_LIB_DEPS = $(EXTRA_LIB_PATH) @GL_LIB_DEPS@ -OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @OSMESA_MESA_DEPS@ \ - $(EXTRA_LIB_PATH) @OSMESA_LIB_DEPS@ -EGL_LIB_DEPS = $(EXTRA_LIB_PATH) @EGL_LIB_DEPS@ -GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLU_MESA_DEPS@ \ - $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@ -GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLUT_MESA_DEPS@ \ - $(EXTRA_LIB_PATH) @GLUT_LIB_DEPS@ -GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \ - $(EXTRA_LIB_PATH) @GLW_LIB_DEPS@ -APP_LIB_DEPS = $(EXTRA_LIB_PATH) @APP_LIB_DEPS@ -GLESv1_CM_LIB_DEPS = $(EXTRA_LIB_PATH) @GLESv1_CM_LIB_DEPS@ -GLESv2_LIB_DEPS = $(EXTRA_LIB_PATH) @GLESv2_LIB_DEPS@ -VG_LIB_DEPS = $(EXTRA_LIB_PATH) @VG_LIB_DEPS@ -GLAPI_LIB_DEPS = $(EXTRA_LIB_PATH) @GLAPI_LIB_DEPS@ -WAYLAND_EGL_LIB_DEPS = $(EXTRA_LIBPATH) @WAYLAND_EGL_LIB_DEPS@ - -# DRI dependencies -MESA_MODULES = @MESA_MODULES@ -DRI_LIB_DEPS = $(EXTRA_LIB_PATH) @DRI_LIB_DEPS@ -LIBDRM_CFLAGS = @LIBDRM_CFLAGS@ -LIBDRM_LIB = @LIBDRM_LIBS@ -DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@ -EXPAT_INCLUDES = @EXPAT_INCLUDES@ - -# Autoconf directories -prefix = @prefix@ -exec_prefix = @exec_prefix@ -libdir = @libdir@ -includedir = @includedir@ - -# Installation directories (for make install) -INSTALL_DIR = $(prefix) -INSTALL_LIB_DIR = $(libdir) -INSTALL_INC_DIR = $(includedir) - -# DRI installation directories -DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@ - -# Where libGL will look for DRI hardware drivers -DRI_DRIVER_SEARCH_DIR = @DRI_DRIVER_SEARCH_DIR@ - -# EGL driver install directory -EGL_DRIVER_INSTALL_DIR = @EGL_DRIVER_INSTALL_DIR@ - -# Xorg driver install directory (for xorg state-tracker) -XORG_DRIVER_INSTALL_DIR = @XORG_DRIVER_INSTALL_DIR@ - -# pkg-config substitutions -GL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@ -GL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@ -GL_PC_CFLAGS = @GL_PC_CFLAGS@ -DRI_PC_REQ_PRIV = @DRI_PC_REQ_PRIV@ -GLU_PC_REQ = @GLU_PC_REQ@ -GLU_PC_REQ_PRIV = @GLU_PC_REQ_PRIV@ -GLU_PC_LIB_PRIV = @GLU_PC_LIB_PRIV@ -GLU_PC_CFLAGS = @GLU_PC_CFLAGS@ -GLUT_PC_REQ_PRIV = @GLUT_PC_REQ_PRIV@ -GLUT_PC_LIB_PRIV = @GLUT_PC_LIB_PRIV@ -GLUT_PC_CFLAGS = @GLUT_PC_CFLAGS@ -GLW_PC_REQ_PRIV = @GLW_PC_REQ_PRIV@ -GLW_PC_LIB_PRIV = @GLW_PC_LIB_PRIV@ -GLW_PC_CFLAGS = @GLW_PC_CFLAGS@ -OSMESA_PC_REQ = @OSMESA_PC_REQ@ -OSMESA_PC_LIB_PRIV = @OSMESA_PC_LIB_PRIV@ -GLESv1_CM_PC_LIB_PRIV = @GLESv1_CM_PC_LIB_PRIV@ -GLESv2_PC_LIB_PRIV = @GLESv2_PC_LIB_PRIV@ -EGL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@ -EGL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@ -EGL_PC_CFLAGS = @GL_PC_CFLAGS@ -WAYLAND_EGL_PC_REQ_PRIV = @WAYLAND_EGL_PC_REQ_PRIV@ -WAYLAND_EGL_PC_LIB_PRIV = @WAYLAND_EGL_PC_LIB_PRIV@ -WAYLAND_EGL_PC_CFLAGS = @WAYLAND_EGL_PC_CFLAGS@ - -XCB_DRI2_CFLAGS = @XCB_DRI2_CFLAGS@ -XCB_DRI2_LIBS = @XCB_DRI2_LIBS@ -LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@ -LIBUDEV_LIBS = @LIBUDEV_LIBS@ -WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ -WAYLAND_LIBS = @WAYLAND_LIBS@ - -MESA_LLVM = @MESA_LLVM@ - -LLVM_VERSION = @LLVM_VERSION@ -ifneq ($(LLVM_VERSION),) - HAVE_LLVM := 0x0$(subst .,0,$(LLVM_VERSION:svn=)) - DEFINES += -DHAVE_LLVM=$(HAVE_LLVM) -endif - -HAVE_XF86VIDMODE = @HAVE_XF86VIDMODE@ +# Autoconf configuration + +# Pull in the defaults +include $(TOP)/configs/default + +# This is generated by configure +CONFIG_NAME = autoconf + +# Compiler and flags +CC = @CC@ +CXX = @CXX@ +OPT_FLAGS = @OPT_FLAGS@ +ARCH_FLAGS = @ARCH_FLAGS@ +ASM_FLAGS = @ASM_FLAGS@ +PIC_FLAGS = @PIC_FLAGS@ +DEFINES = @DEFINES@ +API_DEFINES = @API_DEFINES@ +SHARED_GLAPI = @SHARED_GLAPI@ +CFLAGS_NOVISIBILITY = @CPPFLAGS@ @CFLAGS@ \ + $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(ASM_FLAGS) $(DEFINES) +CXXFLAGS_NOVISIBILITY = @CPPFLAGS@ @CXXFLAGS@ \ + $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES) +CFLAGS = $(CFLAGS_NOVISIBILITY) @VISIBILITY_CFLAGS@ +CXXFLAGS = $(CXXFLAGS_NOVISIBILITY) @VISIBILITY_CXXFLAGS@ +LDFLAGS = @LDFLAGS@ +EXTRA_LIB_PATH = @EXTRA_LIB_PATH@ +RADEON_CFLAGS = @RADEON_CFLAGS@ +RADEON_LDFLAGS = @RADEON_LDFLAGS@ +INTEL_LIBS = @INTEL_LIBS@ +INTEL_CFLAGS = @INTEL_CFLAGS@ +X11_LIBS = @X11_LIBS@ +X11_CFLAGS = @X11_CFLAGS@ +LLVM_CFLAGS = @LLVM_CFLAGS@ +LLVM_LDFLAGS = @LLVM_LDFLAGS@ +LLVM_LIBS = @LLVM_LIBS@ +GLW_CFLAGS = @GLW_CFLAGS@ +GLUT_CFLAGS = @GLUT_CFLAGS@ +GLX_TLS = @GLX_TLS@ +DRI_CFLAGS = @DRI_CFLAGS@ +DRI_CXXFLAGS = @DRI_CXXFLAGS@ + +# dlopen +DLOPEN_LIBS = @DLOPEN_LIBS@ + +# Source selection +MESA_ASM_SOURCES = @MESA_ASM_SOURCES@ +GLAPI_ASM_SOURCES = @GLAPI_ASM_SOURCES@ + +# Misc tools and flags +MAKE = @MAKE@ +SHELL = @SHELL@ +MKLIB_OPTIONS = @MKLIB_OPTIONS@ +MKDEP = @MKDEP@ +MKDEP_OPTIONS = @MKDEP_OPTIONS@ +INSTALL = @INSTALL@ + +# Python and flags (generally only needed by the developers) +PYTHON2 = @PYTHON2@ +PYTHON_FLAGS = -t -O -O + +# Library names (base name) +GL_LIB = GL +GLU_LIB = GLU +GLUT_LIB = glut +GLW_LIB = GLw +OSMESA_LIB = @OSMESA_LIB@ +GLESv1_CM_LIB = GLESv1_CM +GLESv2_LIB = GLESv2 +VG_LIB = OpenVG +GLAPI_LIB = glapi +WAYLAND_EGL_LIB = wayland-egl + +# Library names (actual file names) +GL_LIB_NAME = @GL_LIB_NAME@ +GLU_LIB_NAME = @GLU_LIB_NAME@ +GLUT_LIB_NAME = @GLUT_LIB_NAME@ +GLW_LIB_NAME = @GLW_LIB_NAME@ +OSMESA_LIB_NAME = @OSMESA_LIB_NAME@ +EGL_LIB_NAME = @EGL_LIB_NAME@ +GLESv1_CM_LIB_NAME = @GLESv1_CM_LIB_NAME@ +GLESv2_LIB_NAME = @GLESv2_LIB_NAME@ +VG_LIB_NAME = @VG_LIB_NAME@ +GLAPI_LIB_NAME = @GLAPI_LIB_NAME@ +WAYLAND_EGL_LIB_NAME = @WAYLAND_EGL_LIB_NAME@ + +# Globs used to install the lib and all symlinks +GL_LIB_GLOB = @GL_LIB_GLOB@ +GLU_LIB_GLOB = @GLU_LIB_GLOB@ +GLUT_LIB_GLOB = @GLUT_LIB_GLOB@ +GLW_LIB_GLOB = @GLW_LIB_GLOB@ +OSMESA_LIB_GLOB = @OSMESA_LIB_GLOB@ +EGL_LIB_GLOB = @EGL_LIB_GLOB@ +GLESv1_CM_LIB_GLOB = @GLESv1_CM_LIB_GLOB@ +GLESv2_LIB_GLOB = @GLESv2_LIB_GLOB@ +VG_LIB_GLOB = @VG_LIB_GLOB@ +GLAPI_LIB_GLOB = @GLAPI_LIB_GLOB@ +WAYLAND_EGL_LIB_GLOB = @WAYLAND_EGL_LIB_GLOB@ + +# Directories to build +LIB_DIR = @LIB_DIR@ +SRC_DIRS = @SRC_DIRS@ +GLU_DIRS = @GLU_DIRS@ +DRIVER_DIRS = @DRIVER_DIRS@ +EGL_DRIVERS_DIRS = @EGL_DRIVERS_DIRS@ +GALLIUM_DIRS = @GALLIUM_DIRS@ +GALLIUM_DRIVERS_DIRS = @GALLIUM_DRIVERS_DIRS@ +GALLIUM_WINSYS_DIRS = @GALLIUM_WINSYS_DIRS@ +GALLIUM_TARGET_DIRS = @GALLIUM_TARGET_DIRS@ +GALLIUM_STATE_TRACKERS_DIRS = @GALLIUM_STATE_TRACKERS_DIRS@ +GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a +GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a) + +# Driver specific build vars +DRI_DIRS = @DRI_DIRS@ +DRICORE_GLSL_LIBS = @DRICORE_GLSL_LIBS@ +DRICORE_LIBS = @DRICORE_LIBS@ +DRICORE_LIB_DEPS = @DRICORE_LIB_DEPS@ +EGL_PLATFORMS = @EGL_PLATFORMS@ +EGL_CLIENT_APIS = @EGL_CLIENT_APIS@ + +# Dependencies +X11_INCLUDES = @X11_INCLUDES@ + +# GLw motif setup +GLW_SOURCES = @GLW_SOURCES@ +MOTIF_CFLAGS = @MOTIF_CFLAGS@ + +# Library/program dependencies +GL_LIB_DEPS = $(EXTRA_LIB_PATH) @GL_LIB_DEPS@ +OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @OSMESA_MESA_DEPS@ \ + $(EXTRA_LIB_PATH) @OSMESA_LIB_DEPS@ +EGL_LIB_DEPS = $(EXTRA_LIB_PATH) @EGL_LIB_DEPS@ +GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLU_MESA_DEPS@ \ + $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@ +GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLUT_MESA_DEPS@ \ + $(EXTRA_LIB_PATH) @GLUT_LIB_DEPS@ +GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \ + $(EXTRA_LIB_PATH) @GLW_LIB_DEPS@ +APP_LIB_DEPS = $(EXTRA_LIB_PATH) @APP_LIB_DEPS@ +GLESv1_CM_LIB_DEPS = $(EXTRA_LIB_PATH) @GLESv1_CM_LIB_DEPS@ +GLESv2_LIB_DEPS = $(EXTRA_LIB_PATH) @GLESv2_LIB_DEPS@ +VG_LIB_DEPS = $(EXTRA_LIB_PATH) @VG_LIB_DEPS@ +GLAPI_LIB_DEPS = $(EXTRA_LIB_PATH) @GLAPI_LIB_DEPS@ +WAYLAND_EGL_LIB_DEPS = $(EXTRA_LIBPATH) @WAYLAND_EGL_LIB_DEPS@ + +# DRI dependencies +MESA_MODULES = @MESA_MODULES@ +DRI_LIB_DEPS = $(EXTRA_LIB_PATH) @DRI_LIB_DEPS@ +LIBDRM_CFLAGS = @LIBDRM_CFLAGS@ +LIBDRM_LIB = @LIBDRM_LIBS@ +DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@ +GLPROTO_CFLAGS = @GLPROTO_CFLAGS@ +EXPAT_INCLUDES = @EXPAT_INCLUDES@ + +# Autoconf directories +prefix = @prefix@ +exec_prefix = @exec_prefix@ +libdir = @libdir@ +includedir = @includedir@ + +# Installation directories (for make install) +INSTALL_DIR = $(prefix) +INSTALL_LIB_DIR = $(libdir) +INSTALL_INC_DIR = $(includedir) + +# DRI installation directories +DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@ + +# Where libGL will look for DRI hardware drivers +DRI_DRIVER_SEARCH_DIR = @DRI_DRIVER_SEARCH_DIR@ + +# EGL driver install directory +EGL_DRIVER_INSTALL_DIR = @EGL_DRIVER_INSTALL_DIR@ + +# Xorg driver install directory (for xorg state-tracker) +XORG_DRIVER_INSTALL_DIR = @XORG_DRIVER_INSTALL_DIR@ + +# pkg-config substitutions +GL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@ +GL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@ +GL_PC_CFLAGS = @GL_PC_CFLAGS@ +DRI_PC_REQ_PRIV = @DRI_PC_REQ_PRIV@ +GLU_PC_REQ = @GLU_PC_REQ@ +GLU_PC_REQ_PRIV = @GLU_PC_REQ_PRIV@ +GLU_PC_LIB_PRIV = @GLU_PC_LIB_PRIV@ +GLU_PC_CFLAGS = @GLU_PC_CFLAGS@ +GLUT_PC_REQ_PRIV = @GLUT_PC_REQ_PRIV@ +GLUT_PC_LIB_PRIV = @GLUT_PC_LIB_PRIV@ +GLUT_PC_CFLAGS = @GLUT_PC_CFLAGS@ +GLW_PC_REQ_PRIV = @GLW_PC_REQ_PRIV@ +GLW_PC_LIB_PRIV = @GLW_PC_LIB_PRIV@ +GLW_PC_CFLAGS = @GLW_PC_CFLAGS@ +OSMESA_PC_REQ = @OSMESA_PC_REQ@ +OSMESA_PC_LIB_PRIV = @OSMESA_PC_LIB_PRIV@ +GLESv1_CM_PC_LIB_PRIV = @GLESv1_CM_PC_LIB_PRIV@ +GLESv2_PC_LIB_PRIV = @GLESv2_PC_LIB_PRIV@ +EGL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@ +EGL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@ +EGL_PC_CFLAGS = @GL_PC_CFLAGS@ +WAYLAND_EGL_PC_REQ_PRIV = @WAYLAND_EGL_PC_REQ_PRIV@ +WAYLAND_EGL_PC_LIB_PRIV = @WAYLAND_EGL_PC_LIB_PRIV@ +WAYLAND_EGL_PC_CFLAGS = @WAYLAND_EGL_PC_CFLAGS@ + +XCB_DRI2_CFLAGS = @XCB_DRI2_CFLAGS@ +XCB_DRI2_LIBS = @XCB_DRI2_LIBS@ +LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@ +LIBUDEV_LIBS = @LIBUDEV_LIBS@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ + +MESA_LLVM = @MESA_LLVM@ + +LLVM_VERSION = @LLVM_VERSION@ +ifneq ($(LLVM_VERSION),) + HAVE_LLVM := 0x0$(subst .,0,$(LLVM_VERSION:svn=)) + DEFINES += -DHAVE_LLVM=$(HAVE_LLVM) +endif + +HAVE_XF86VIDMODE = @HAVE_XF86VIDMODE@ diff --git a/mesalib/src/mesa/main/bufferobj.c b/mesalib/src/mesa/main/bufferobj.c index 35d92616f..44072fbc5 100644 --- a/mesalib/src/mesa/main/bufferobj.c +++ b/mesalib/src/mesa/main/bufferobj.c @@ -558,6 +558,7 @@ void _mesa_init_buffer_objects( struct gl_context *ctx ) { memset(&DummyBufferObject, 0, sizeof(DummyBufferObject)); + _glthread_INIT_MUTEX(DummyBufferObject.Mutex); DummyBufferObject.RefCount = 1000*1000*1000; /* never delete */ _mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, diff --git a/mesalib/src/mesa/main/drawpix.c b/mesalib/src/mesa/main/drawpix.c index 98e82ef85..fb86036a1 100644 --- a/mesalib/src/mesa/main/drawpix.c +++ b/mesalib/src/mesa/main/drawpix.c @@ -136,8 +136,6 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); - _mesa_finish(ctx); - if (MESA_VERBOSE & VERBOSE_API) _mesa_debug(ctx, "glCopyPixels(%d, %d, %d, %d, %s) // from %s to %s at %d, %d\n", diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index c242e568d..ffdd08425 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -384,6 +384,7 @@ _mesa_framebuffer_renderbuffer(struct gl_context *ctx, assert(att); _mesa_set_renderbuffer_attachment(ctx, att, rb); } + rb->AttachedAnytime = GL_TRUE; } else { _mesa_remove_attachment(ctx, att); @@ -1115,6 +1116,31 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) } +/** + * Invalidate a renderbuffer attachment. Called from _mesa_HashWalk(). + */ +static void +invalidate_rb(GLuint key, void *data, void *userData) +{ + struct gl_framebuffer *fb = (struct gl_framebuffer *) data; + struct gl_renderbuffer *rb = (struct gl_renderbuffer *) userData; + + /* If this is a user-created FBO */ + if (fb->Name) { + GLuint i; + for (i = 0; i < BUFFER_COUNT; i++) { + struct gl_renderbuffer_attachment *att = fb->Attachment + i; + if (att->Type == GL_RENDERBUFFER && + att->Renderbuffer == rb) { + /* Mark fb status as indeterminate to force re-validation */ + fb->_Status = 0; + return; + } + } + } +} + + /** sentinal value, see below */ #define NO_SAMPLES 1000 @@ -1207,12 +1233,10 @@ renderbuffer_storage(GLenum target, GLenum internalFormat, rb->NumSamples = 0; } - /* - test_framebuffer_completeness(ctx, fb); - */ - /* XXX if this renderbuffer is attached anywhere, invalidate attachment - * points??? - */ + /* Invalidate the framebuffers the renderbuffer is attached in. */ + if (rb->AttachedAnytime) { + _mesa_HashWalk(ctx->Shared->FrameBuffers, invalidate_rb, rb); + } } diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index db3eba20c..49ecea59d 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -2376,6 +2376,8 @@ struct gl_renderbuffer GLenum DataType; /**< Type of values passed to the Get/Put functions */ GLvoid *Data; /**< This may not be used by some kinds of RBs */ + GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ + /* Used to wrap one renderbuffer around another: */ struct gl_renderbuffer *Wrapped; diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.c b/mesalib/src/mesa/state_tracker/st_cb_fbo.c index 7e124186c..ae49434ca 100644 --- a/mesalib/src/mesa/state_tracker/st_cb_fbo.c +++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.c @@ -1,641 +1,645 @@ -/************************************************************************** - * - * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - **************************************************************************/ - - -/** - * Framebuffer/renderbuffer functions. - * - * \author Brian Paul - */ - - -#include "main/imports.h" -#include "main/context.h" -#include "main/fbobject.h" -#include "main/framebuffer.h" -#include "main/macros.h" -#include "main/mfeatures.h" -#include "main/renderbuffer.h" - -#include "pipe/p_context.h" -#include "pipe/p_defines.h" -#include "pipe/p_screen.h" -#include "st_context.h" -#include "st_cb_fbo.h" -#include "st_cb_flush.h" -#include "st_format.h" -#include "st_texture.h" -#include "st_manager.h" - -#include "util/u_format.h" -#include "util/u_inlines.h" -#include "util/u_surface.h" - - -/** - * gl_renderbuffer::AllocStorage() - * This is called to allocate the original drawing surface, and - * during window resize. - */ -static GLboolean -st_renderbuffer_alloc_storage(struct gl_context * ctx, - struct gl_renderbuffer *rb, - GLenum internalFormat, - GLuint width, GLuint height) -{ - struct st_context *st = st_context(ctx); - struct pipe_context *pipe = st->pipe; - struct pipe_screen *screen = st->pipe->screen; - struct st_renderbuffer *strb = st_renderbuffer(rb); - enum pipe_format format; - struct pipe_surface surf_tmpl; - - if (strb->format != PIPE_FORMAT_NONE) - format = strb->format; - else - format = st_choose_renderbuffer_format(screen, internalFormat, - rb->NumSamples); - - /* init renderbuffer fields */ - strb->Base.Width = width; - strb->Base.Height = height; - strb->Base.Format = st_pipe_format_to_mesa_format(format); - strb->Base._BaseFormat = _mesa_base_fbo_format(ctx, internalFormat); - strb->Base.DataType = st_format_datatype(format); - - strb->defined = GL_FALSE; /* undefined contents now */ - - if (strb->software) { - size_t size; - - free(strb->data); - - assert(strb->format != PIPE_FORMAT_NONE); - - strb->stride = util_format_get_stride(strb->format, width); - size = util_format_get_2d_size(strb->format, strb->stride, height); - - strb->data = malloc(size); - - return strb->data != NULL; - } - else { - struct pipe_resource template; - - /* Free the old surface and texture - */ - pipe_surface_reference( &strb->surface, NULL ); - pipe_resource_reference( &strb->texture, NULL ); - pipe_sampler_view_reference(&strb->sampler_view, NULL); - - /* Setup new texture template. - */ - memset(&template, 0, sizeof(template)); - template.target = st->internal_target; - template.format = format; - template.width0 = width; - template.height0 = height; - template.depth0 = 1; - template.array_size = 1; - template.last_level = 0; - template.nr_samples = rb->NumSamples; - if (util_format_is_depth_or_stencil(format)) { - template.bind = PIPE_BIND_DEPTH_STENCIL; - } - else { - template.bind = (PIPE_BIND_DISPLAY_TARGET | - PIPE_BIND_RENDER_TARGET); - } - - strb->texture = screen->resource_create(screen, &template); - - if (!strb->texture) - return FALSE; - - memset(&surf_tmpl, 0, sizeof(surf_tmpl)); - u_surface_default_template(&surf_tmpl, strb->texture, template.bind); - strb->surface = pipe->create_surface(pipe, - strb->texture, - &surf_tmpl); - if (strb->surface) { - assert(strb->surface->texture); - assert(strb->surface->format); - assert(strb->surface->width == width); - assert(strb->surface->height == height); - } - - return strb->surface != NULL; - } -} - - -/** - * gl_renderbuffer::Delete() - */ -static void -st_renderbuffer_delete(struct gl_renderbuffer *rb) -{ - struct st_renderbuffer *strb = st_renderbuffer(rb); - ASSERT(strb); - pipe_surface_reference(&strb->surface, NULL); - pipe_resource_reference(&strb->texture, NULL); - pipe_sampler_view_reference(&strb->sampler_view, NULL); - free(strb->data); - free(strb); -} - - -/** - * gl_renderbuffer::GetPointer() - */ -static void * -null_get_pointer(struct gl_context * ctx, struct gl_renderbuffer *rb, - GLint x, GLint y) -{ - /* By returning NULL we force all software rendering to go through - * the span routines. - */ -#if 0 - assert(0); /* Should never get called with softpipe */ -#endif - return NULL; -} - - -/** - * Called via ctx->Driver.NewFramebuffer() - */ -static struct gl_framebuffer * -st_new_framebuffer(struct gl_context *ctx, GLuint name) -{ - /* XXX not sure we need to subclass gl_framebuffer for pipe */ - return _mesa_new_framebuffer(ctx, name); -} - - -/** - * Called via ctx->Driver.NewRenderbuffer() - */ -static struct gl_renderbuffer * -st_new_renderbuffer(struct gl_context *ctx, GLuint name) -{ - struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer); - if (strb) { - _mesa_init_renderbuffer(&strb->Base, name); - strb->Base.Delete = st_renderbuffer_delete; - strb->Base.AllocStorage = st_renderbuffer_alloc_storage; - strb->Base.GetPointer = null_get_pointer; - strb->format = PIPE_FORMAT_NONE; - return &strb->Base; - } - return NULL; -} - - -/** - * Allocate a renderbuffer for a an on-screen window (not a user-created - * renderbuffer). The window system code determines the format. - */ -struct gl_renderbuffer * -st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw) -{ - struct st_renderbuffer *strb; - - strb = ST_CALLOC_STRUCT(st_renderbuffer); - if (!strb) { - _mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer"); - return NULL; - } - - _mesa_init_renderbuffer(&strb->Base, 0); - strb->Base.ClassID = 0x4242; /* just a unique value */ - strb->Base.NumSamples = samples; - strb->Base.Format = st_pipe_format_to_mesa_format(format); - strb->Base._BaseFormat = _mesa_get_format_base_format(strb->Base.Format); - strb->Base.DataType = st_format_datatype(format); - strb->format = format; - strb->software = sw; - - switch (format) { - case PIPE_FORMAT_R8G8B8A8_UNORM: - case PIPE_FORMAT_B8G8R8A8_UNORM: - case PIPE_FORMAT_A8R8G8B8_UNORM: - case PIPE_FORMAT_R8G8B8X8_UNORM: - case PIPE_FORMAT_B8G8R8X8_UNORM: - case PIPE_FORMAT_X8R8G8B8_UNORM: - case PIPE_FORMAT_B5G5R5A1_UNORM: - case PIPE_FORMAT_B4G4R4A4_UNORM: - case PIPE_FORMAT_B5G6R5_UNORM: - strb->Base.InternalFormat = GL_RGBA; - break; - case PIPE_FORMAT_Z16_UNORM: - strb->Base.InternalFormat = GL_DEPTH_COMPONENT16; - break; - case PIPE_FORMAT_Z32_UNORM: - strb->Base.InternalFormat = GL_DEPTH_COMPONENT32; - break; - case PIPE_FORMAT_Z24_UNORM_S8_USCALED: - case PIPE_FORMAT_S8_USCALED_Z24_UNORM: - case PIPE_FORMAT_Z24X8_UNORM: - case PIPE_FORMAT_X8Z24_UNORM: - strb->Base.InternalFormat = GL_DEPTH24_STENCIL8_EXT; - break; - case PIPE_FORMAT_S8_USCALED: - strb->Base.InternalFormat = GL_STENCIL_INDEX8_EXT; - break; - case PIPE_FORMAT_R16G16B16A16_SNORM: - strb->Base.InternalFormat = GL_RGBA16; - break; - case PIPE_FORMAT_R8_UNORM: - strb->Base.InternalFormat = GL_R8; - break; - case PIPE_FORMAT_R8G8_UNORM: - strb->Base.InternalFormat = GL_RG8; - break; - case PIPE_FORMAT_R16_UNORM: - strb->Base.InternalFormat = GL_R16; - break; - case PIPE_FORMAT_R16G16_UNORM: - strb->Base.InternalFormat = GL_RG16; - break; - default: - _mesa_problem(NULL, - "Unexpected format in st_new_renderbuffer_fb"); - free(strb); - return NULL; - } - - /* st-specific methods */ - strb->Base.Delete = st_renderbuffer_delete; - strb->Base.AllocStorage = st_renderbuffer_alloc_storage; - strb->Base.GetPointer = null_get_pointer; - - /* surface is allocated in st_renderbuffer_alloc_storage() */ - strb->surface = NULL; - - return &strb->Base; -} - - - - -/** - * Called via ctx->Driver.BindFramebufferEXT(). - */ -static void -st_bind_framebuffer(struct gl_context *ctx, GLenum target, - struct gl_framebuffer *fb, struct gl_framebuffer *fbread) -{ - -} - -/** - * Called by ctx->Driver.FramebufferRenderbuffer - */ -static void -st_framebuffer_renderbuffer(struct gl_context *ctx, - struct gl_framebuffer *fb, - GLenum attachment, - struct gl_renderbuffer *rb) -{ - /* XXX no need for derivation? */ - _mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb); -} - - -/** - * Called by ctx->Driver.RenderTexture - */ -static void -st_render_texture(struct gl_context *ctx, - struct gl_framebuffer *fb, - struct gl_renderbuffer_attachment *att) -{ - struct st_context *st = st_context(ctx); - struct pipe_context *pipe = st->pipe; - struct st_renderbuffer *strb; - struct gl_renderbuffer *rb; - struct pipe_resource *pt = st_get_texobj_resource(att->Texture); - struct st_texture_object *stObj; - const struct gl_texture_image *texImage; - struct pipe_surface surf_tmpl; - - /* When would this fail? Perhaps assert? */ - if (!pt) - return; - - /* get pointer to texture image we're rendeing to */ - texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel]; - - /* create new renderbuffer which wraps the texture image */ - rb = st_new_renderbuffer(ctx, 0); - if (!rb) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()"); - return; - } - - _mesa_reference_renderbuffer(&att->Renderbuffer, rb); - assert(rb->RefCount == 1); - rb->AllocStorage = NULL; /* should not get called */ - strb = st_renderbuffer(rb); - - assert(strb->Base.RefCount > 0); - - /* get the texture for the texture object */ - stObj = st_texture_object(att->Texture); - - /* point renderbuffer at texobject */ - strb->rtt = stObj; - strb->rtt_level = att->TextureLevel; - strb->rtt_face = att->CubeMapFace; - strb->rtt_slice = att->Zoffset; - - rb->Width = texImage->Width2; - rb->Height = texImage->Height2; - rb->_BaseFormat = texImage->_BaseFormat; - /*printf("***** render to texture level %d: %d x %d\n", att->TextureLevel, rb->Width, rb->Height);*/ - - /*printf("***** pipe texture %d x %d\n", pt->width0, pt->height0);*/ - - pipe_resource_reference( &strb->texture, pt ); - - pipe_surface_reference(&strb->surface, NULL); - - pipe_sampler_view_reference(&strb->sampler_view, - st_get_texture_sampler_view(stObj, pipe)); - - assert(strb->rtt_level <= strb->texture->last_level); - - /* new surface for rendering into the texture */ - memset(&surf_tmpl, 0, sizeof(surf_tmpl)); - surf_tmpl.format = ctx->Color.sRGBEnabled ? strb->texture->format : util_format_linear(strb->texture->format); - surf_tmpl.usage = PIPE_BIND_RENDER_TARGET; - surf_tmpl.u.tex.level = strb->rtt_level; - surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice; - surf_tmpl.u.tex.last_layer = strb->rtt_face + strb->rtt_slice; - strb->surface = pipe->create_surface(pipe, - strb->texture, - &surf_tmpl); - - strb->format = pt->format; - - strb->Base.Format = st_pipe_format_to_mesa_format(pt->format); - strb->Base.DataType = st_format_datatype(pt->format); - - /* - printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p %d x %d\n", - att->Texture, pt, strb->surface, rb->Width, rb->Height); - */ - - /* Invalidate buffer state so that the pipe's framebuffer state - * gets updated. - * That's where the new renderbuffer (which we just created) gets - * passed to the pipe as a (color/depth) render target. - */ - st_invalidate_state(ctx, _NEW_BUFFERS); -} - - -/** - * Called via ctx->Driver.FinishRenderTexture. - */ -static void -st_finish_render_texture(struct gl_context *ctx, - struct gl_renderbuffer_attachment *att) -{ - struct st_context *st = st_context(ctx); - struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer); - - if (!strb) - return; - - st_flush(st, PIPE_FLUSH_RENDER_CACHE, NULL); - - strb->rtt = NULL; - - /* - printf("FINISH RENDER TO TEXTURE surf=%p\n", strb->surface); - */ - - /* restore previous framebuffer state */ - st_invalidate_state(ctx, _NEW_BUFFERS); -} - - -/** - * Validate a renderbuffer attachment for a particular set of bindings. - */ -static GLboolean -st_validate_attachment(struct gl_context *ctx, - struct pipe_screen *screen, - const struct gl_renderbuffer_attachment *att, - unsigned bindings) -{ - const struct st_texture_object *stObj = st_texture_object(att->Texture); - enum pipe_format format; - gl_format texFormat; - - /* Only validate texture attachments for now, since - * st_renderbuffer_alloc_storage makes sure that - * the format is supported. - */ - if (att->Type != GL_TEXTURE) - return GL_TRUE; - - if (!stObj) - return GL_FALSE; - - format = stObj->pt->format; - texFormat = - stObj->base.Image[att->CubeMapFace][att->TextureLevel]->TexFormat; - - /* If the encoding is sRGB and sRGB rendering cannot be enabled, - * check for linear format support instead. - * Later when we create a surface, we change the format to a linear one. */ - if (!ctx->Const.sRGBCapable && - _mesa_get_format_color_encoding(texFormat) == GL_SRGB) { - const gl_format linearFormat = _mesa_get_srgb_format_linear(texFormat); - format = st_mesa_format_to_pipe_format(linearFormat); - } - - return screen->is_format_supported(screen, format, - PIPE_TEXTURE_2D, - stObj->pt->nr_samples, bindings, 0); -} - - -/** - * Check if two renderbuffer attachments name a combined depth/stencil - * renderbuffer. - */ -GLboolean -st_is_depth_stencil_combined(const struct gl_renderbuffer_attachment *depth, - const struct gl_renderbuffer_attachment *stencil) -{ - assert(depth && stencil); - - if (depth->Type == stencil->Type) { - if (depth->Type == GL_RENDERBUFFER_EXT && - depth->Renderbuffer == stencil->Renderbuffer) - return GL_TRUE; - - if (depth->Type == GL_TEXTURE && - depth->Texture == stencil->Texture) - return GL_TRUE; - } - - return GL_FALSE; -} - - -/** - * Check that the framebuffer configuration is valid in terms of what - * the driver can support. - * - * For Gallium we only supports combined Z+stencil, not separate buffers. - */ -static void -st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) -{ - struct st_context *st = st_context(ctx); - struct pipe_screen *screen = st->pipe->screen; - const struct gl_renderbuffer_attachment *depth = - &fb->Attachment[BUFFER_DEPTH]; - const struct gl_renderbuffer_attachment *stencil = - &fb->Attachment[BUFFER_STENCIL]; - GLuint i; - - if (depth->Type && stencil->Type && depth->Type != stencil->Type) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - if (depth->Type == GL_RENDERBUFFER_EXT && - stencil->Type == GL_RENDERBUFFER_EXT && - depth->Renderbuffer != stencil->Renderbuffer) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - if (depth->Type == GL_TEXTURE && - stencil->Type == GL_TEXTURE && - depth->Texture != stencil->Texture) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - - if (!st_validate_attachment(ctx, - screen, - depth, - PIPE_BIND_DEPTH_STENCIL)) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - if (!st_validate_attachment(ctx, - screen, - stencil, - PIPE_BIND_DEPTH_STENCIL)) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - for (i = 0; i < ctx->Const.MaxColorAttachments; i++) { - if (!st_validate_attachment(ctx, - screen, - &fb->Attachment[BUFFER_COLOR0 + i], - PIPE_BIND_RENDER_TARGET)) { - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - return; - } - } -} - - -/** - * Called via glDrawBuffer. - */ -static void -st_DrawBuffers(struct gl_context *ctx, GLsizei count, const GLenum *buffers) -{ - struct st_context *st = st_context(ctx); - struct gl_framebuffer *fb = ctx->DrawBuffer; - GLuint i; - - (void) count; - (void) buffers; - - /* add the renderbuffers on demand */ - for (i = 0; i < fb->_NumColorDrawBuffers; i++) { - gl_buffer_index idx = fb->_ColorDrawBufferIndexes[i]; - st_manager_add_color_renderbuffer(st, fb, idx); - } -} - - -/** - * Called via glReadBuffer. - */ -static void -st_ReadBuffer(struct gl_context *ctx, GLenum buffer) -{ - struct st_context *st = st_context(ctx); - struct gl_framebuffer *fb = ctx->ReadBuffer; - - (void) buffer; - - /* add the renderbuffer on demand */ - st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex); -} - - -void st_init_fbo_functions(struct dd_function_table *functions) -{ -#if FEATURE_EXT_framebuffer_object - functions->NewFramebuffer = st_new_framebuffer; - functions->NewRenderbuffer = st_new_renderbuffer; - functions->BindFramebuffer = st_bind_framebuffer; - functions->FramebufferRenderbuffer = st_framebuffer_renderbuffer; - functions->RenderTexture = st_render_texture; - functions->FinishRenderTexture = st_finish_render_texture; - functions->ValidateFramebuffer = st_validate_framebuffer; -#endif - /* no longer needed by core Mesa, drivers handle resizes... - functions->ResizeBuffers = st_resize_buffers; - */ - - functions->DrawBuffers = st_DrawBuffers; - functions->ReadBuffer = st_ReadBuffer; -} - -/* XXX unused ? */ -struct pipe_sampler_view * -st_get_renderbuffer_sampler_view(struct st_renderbuffer *rb, - struct pipe_context *pipe) -{ - if (!rb->sampler_view) { - rb->sampler_view = st_create_texture_sampler_view(pipe, rb->texture); - } - - return rb->sampler_view; -} +/************************************************************************** + * + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + +/** + * Framebuffer/renderbuffer functions. + * + * \author Brian Paul + */ + + +#include "main/imports.h" +#include "main/context.h" +#include "main/fbobject.h" +#include "main/framebuffer.h" +#include "main/macros.h" +#include "main/mfeatures.h" +#include "main/renderbuffer.h" + +#include "pipe/p_context.h" +#include "pipe/p_defines.h" +#include "pipe/p_screen.h" +#include "st_context.h" +#include "st_cb_fbo.h" +#include "st_cb_flush.h" +#include "st_format.h" +#include "st_texture.h" +#include "st_manager.h" + +#include "util/u_format.h" +#include "util/u_inlines.h" +#include "util/u_surface.h" + + +/** + * gl_renderbuffer::AllocStorage() + * This is called to allocate the original drawing surface, and + * during window resize. + */ +static GLboolean +st_renderbuffer_alloc_storage(struct gl_context * ctx, + struct gl_renderbuffer *rb, + GLenum internalFormat, + GLuint width, GLuint height) +{ + struct st_context *st = st_context(ctx); + struct pipe_context *pipe = st->pipe; + struct pipe_screen *screen = st->pipe->screen; + struct st_renderbuffer *strb = st_renderbuffer(rb); + enum pipe_format format; + struct pipe_surface surf_tmpl; + + if (strb->format != PIPE_FORMAT_NONE) + format = strb->format; + else + format = st_choose_renderbuffer_format(screen, internalFormat, + rb->NumSamples); + + if (format == PIPE_FORMAT_NONE) { + return FALSE; + } + + /* init renderbuffer fields */ + strb->Base.Width = width; + strb->Base.Height = height; + strb->Base.Format = st_pipe_format_to_mesa_format(format); + strb->Base._BaseFormat = _mesa_base_fbo_format(ctx, internalFormat); + strb->Base.DataType = st_format_datatype(format); + + strb->defined = GL_FALSE; /* undefined contents now */ + + if (strb->software) { + size_t size; + + free(strb->data); + + assert(strb->format != PIPE_FORMAT_NONE); + + strb->stride = util_format_get_stride(strb->format, width); + size = util_format_get_2d_size(strb->format, strb->stride, height); + + strb->data = malloc(size); + + return strb->data != NULL; + } + else { + struct pipe_resource template; + + /* Free the old surface and texture + */ + pipe_surface_reference( &strb->surface, NULL ); + pipe_resource_reference( &strb->texture, NULL ); + pipe_sampler_view_reference(&strb->sampler_view, NULL); + + /* Setup new texture template. + */ + memset(&template, 0, sizeof(template)); + template.target = st->internal_target; + template.format = format; + template.width0 = width; + template.height0 = height; + template.depth0 = 1; + template.array_size = 1; + template.last_level = 0; + template.nr_samples = rb->NumSamples; + if (util_format_is_depth_or_stencil(format)) { + template.bind = PIPE_BIND_DEPTH_STENCIL; + } + else { + template.bind = (PIPE_BIND_DISPLAY_TARGET | + PIPE_BIND_RENDER_TARGET); + } + + strb->texture = screen->resource_create(screen, &template); + + if (!strb->texture) + return FALSE; + + memset(&surf_tmpl, 0, sizeof(surf_tmpl)); + u_surface_default_template(&surf_tmpl, strb->texture, template.bind); + strb->surface = pipe->create_surface(pipe, + strb->texture, + &surf_tmpl); + if (strb->surface) { + assert(strb->surface->texture); + assert(strb->surface->format); + assert(strb->surface->width == width); + assert(strb->surface->height == height); + } + + return strb->surface != NULL; + } +} + + +/** + * gl_renderbuffer::Delete() + */ +static void +st_renderbuffer_delete(struct gl_renderbuffer *rb) +{ + struct st_renderbuffer *strb = st_renderbuffer(rb); + ASSERT(strb); + pipe_surface_reference(&strb->surface, NULL); + pipe_resource_reference(&strb->texture, NULL); + pipe_sampler_view_reference(&strb->sampler_view, NULL); + free(strb->data); + free(strb); +} + + +/** + * gl_renderbuffer::GetPointer() + */ +static void * +null_get_pointer(struct gl_context * ctx, struct gl_renderbuffer *rb, + GLint x, GLint y) +{ + /* By returning NULL we force all software rendering to go through + * the span routines. + */ +#if 0 + assert(0); /* Should never get called with softpipe */ +#endif + return NULL; +} + + +/** + * Called via ctx->Driver.NewFramebuffer() + */ +static struct gl_framebuffer * +st_new_framebuffer(struct gl_context *ctx, GLuint name) +{ + /* XXX not sure we need to subclass gl_framebuffer for pipe */ + return _mesa_new_framebuffer(ctx, name); +} + + +/** + * Called via ctx->Driver.NewRenderbuffer() + */ +static struct gl_renderbuffer * +st_new_renderbuffer(struct gl_context *ctx, GLuint name) +{ + struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer); + if (strb) { + _mesa_init_renderbuffer(&strb->Base, name); + strb->Base.Delete = st_renderbuffer_delete; + strb->Base.AllocStorage = st_renderbuffer_alloc_storage; + strb->Base.GetPointer = null_get_pointer; + strb->format = PIPE_FORMAT_NONE; + return &strb->Base; + } + return NULL; +} + + +/** + * Allocate a renderbuffer for a an on-screen window (not a user-created + * renderbuffer). The window system code determines the format. + */ +struct gl_renderbuffer * +st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw) +{ + struct st_renderbuffer *strb; + + strb = ST_CALLOC_STRUCT(st_renderbuffer); + if (!strb) { + _mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer"); + return NULL; + } + + _mesa_init_renderbuffer(&strb->Base, 0); + strb->Base.ClassID = 0x4242; /* just a unique value */ + strb->Base.NumSamples = samples; + strb->Base.Format = st_pipe_format_to_mesa_format(format); + strb->Base._BaseFormat = _mesa_get_format_base_format(strb->Base.Format); + strb->Base.DataType = st_format_datatype(format); + strb->format = format; + strb->software = sw; + + switch (format) { + case PIPE_FORMAT_R8G8B8A8_UNORM: + case PIPE_FORMAT_B8G8R8A8_UNORM: + case PIPE_FORMAT_A8R8G8B8_UNORM: + case PIPE_FORMAT_R8G8B8X8_UNORM: + case PIPE_FORMAT_B8G8R8X8_UNORM: + case PIPE_FORMAT_X8R8G8B8_UNORM: + case PIPE_FORMAT_B5G5R5A1_UNORM: + case PIPE_FORMAT_B4G4R4A4_UNORM: + case PIPE_FORMAT_B5G6R5_UNORM: + strb->Base.InternalFormat = GL_RGBA; + break; + case PIPE_FORMAT_Z16_UNORM: + strb->Base.InternalFormat = GL_DEPTH_COMPONENT16; + break; + case PIPE_FORMAT_Z32_UNORM: + strb->Base.InternalFormat = GL_DEPTH_COMPONENT32; + break; + case PIPE_FORMAT_Z24_UNORM_S8_USCALED: + case PIPE_FORMAT_S8_USCALED_Z24_UNORM: + case PIPE_FORMAT_Z24X8_UNORM: + case PIPE_FORMAT_X8Z24_UNORM: + strb->Base.InternalFormat = GL_DEPTH24_STENCIL8_EXT; + break; + case PIPE_FORMAT_S8_USCALED: + strb->Base.InternalFormat = GL_STENCIL_INDEX8_EXT; + break; + case PIPE_FORMAT_R16G16B16A16_SNORM: + strb->Base.InternalFormat = GL_RGBA16; + break; + case PIPE_FORMAT_R8_UNORM: + strb->Base.InternalFormat = GL_R8; + break; + case PIPE_FORMAT_R8G8_UNORM: + strb->Base.InternalFormat = GL_RG8; + break; + case PIPE_FORMAT_R16_UNORM: + strb->Base.InternalFormat = GL_R16; + break; + case PIPE_FORMAT_R16G16_UNORM: + strb->Base.InternalFormat = GL_RG16; + break; + default: + _mesa_problem(NULL, + "Unexpected format in st_new_renderbuffer_fb"); + free(strb); + return NULL; + } + + /* st-specific methods */ + strb->Base.Delete = st_renderbuffer_delete; + strb->Base.AllocStorage = st_renderbuffer_alloc_storage; + strb->Base.GetPointer = null_get_pointer; + + /* surface is allocated in st_renderbuffer_alloc_storage() */ + strb->surface = NULL; + + return &strb->Base; +} + + + + +/** + * Called via ctx->Driver.BindFramebufferEXT(). + */ +static void +st_bind_framebuffer(struct gl_context *ctx, GLenum target, + struct gl_framebuffer *fb, struct gl_framebuffer *fbread) +{ + +} + +/** + * Called by ctx->Driver.FramebufferRenderbuffer + */ +static void +st_framebuffer_renderbuffer(struct gl_context *ctx, + struct gl_framebuffer *fb, + GLenum attachment, + struct gl_renderbuffer *rb) +{ + /* XXX no need for derivation? */ + _mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb); +} + + +/** + * Called by ctx->Driver.RenderTexture + */ +static void +st_render_texture(struct gl_context *ctx, + struct gl_framebuffer *fb, + struct gl_renderbuffer_attachment *att) +{ + struct st_context *st = st_context(ctx); + struct pipe_context *pipe = st->pipe; + struct st_renderbuffer *strb; + struct gl_renderbuffer *rb; + struct pipe_resource *pt = st_get_texobj_resource(att->Texture); + struct st_texture_object *stObj; + const struct gl_texture_image *texImage; + struct pipe_surface surf_tmpl; + + /* When would this fail? Perhaps assert? */ + if (!pt) + return; + + /* get pointer to texture image we're rendeing to */ + texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel]; + + /* create new renderbuffer which wraps the texture image */ + rb = st_new_renderbuffer(ctx, 0); + if (!rb) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()"); + return; + } + + _mesa_reference_renderbuffer(&att->Renderbuffer, rb); + assert(rb->RefCount == 1); + rb->AllocStorage = NULL; /* should not get called */ + strb = st_renderbuffer(rb); + + assert(strb->Base.RefCount > 0); + + /* get the texture for the texture object */ + stObj = st_texture_object(att->Texture); + + /* point renderbuffer at texobject */ + strb->rtt = stObj; + strb->rtt_level = att->TextureLevel; + strb->rtt_face = att->CubeMapFace; + strb->rtt_slice = att->Zoffset; + + rb->Width = texImage->Width2; + rb->Height = texImage->Height2; + rb->_BaseFormat = texImage->_BaseFormat; + /*printf("***** render to texture level %d: %d x %d\n", att->TextureLevel, rb->Width, rb->Height);*/ + + /*printf("***** pipe texture %d x %d\n", pt->width0, pt->height0);*/ + + pipe_resource_reference( &strb->texture, pt ); + + pipe_surface_reference(&strb->surface, NULL); + + pipe_sampler_view_reference(&strb->sampler_view, + st_get_texture_sampler_view(stObj, pipe)); + + assert(strb->rtt_level <= strb->texture->last_level); + + /* new surface for rendering into the texture */ + memset(&surf_tmpl, 0, sizeof(surf_tmpl)); + surf_tmpl.format = ctx->Color.sRGBEnabled ? strb->texture->format : util_format_linear(strb->texture->format); + surf_tmpl.usage = PIPE_BIND_RENDER_TARGET; + surf_tmpl.u.tex.level = strb->rtt_level; + surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice; + surf_tmpl.u.tex.last_layer = strb->rtt_face + strb->rtt_slice; + strb->surface = pipe->create_surface(pipe, + strb->texture, + &surf_tmpl); + + strb->format = pt->format; + + strb->Base.Format = st_pipe_format_to_mesa_format(pt->format); + strb->Base.DataType = st_format_datatype(pt->format); + + /* + printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p %d x %d\n", + att->Texture, pt, strb->surface, rb->Width, rb->Height); + */ + + /* Invalidate buffer state so that the pipe's framebuffer state + * gets updated. + * That's where the new renderbuffer (which we just created) gets + * passed to the pipe as a (color/depth) render target. + */ + st_invalidate_state(ctx, _NEW_BUFFERS); +} + + +/** + * Called via ctx->Driver.FinishRenderTexture. + */ +static void +st_finish_render_texture(struct gl_context *ctx, + struct gl_renderbuffer_attachment *att) +{ + struct st_context *st = st_context(ctx); + struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer); + + if (!strb) + return; + + st_flush(st, PIPE_FLUSH_RENDER_CACHE, NULL); + + strb->rtt = NULL; + + /* + printf("FINISH RENDER TO TEXTURE surf=%p\n", strb->surface); + */ + + /* restore previous framebuffer state */ + st_invalidate_state(ctx, _NEW_BUFFERS); +} + + +/** + * Validate a renderbuffer attachment for a particular set of bindings. + */ +static GLboolean +st_validate_attachment(struct gl_context *ctx, + struct pipe_screen *screen, + const struct gl_renderbuffer_attachment *att, + unsigned bindings) +{ + const struct st_texture_object *stObj = st_texture_object(att->Texture); + enum pipe_format format; + gl_format texFormat; + + /* Only validate texture attachments for now, since + * st_renderbuffer_alloc_storage makes sure that + * the format is supported. + */ + if (att->Type != GL_TEXTURE) + return GL_TRUE; + + if (!stObj) + return GL_FALSE; + + format = stObj->pt->format; + texFormat = + stObj->base.Image[att->CubeMapFace][att->TextureLevel]->TexFormat; + + /* If the encoding is sRGB and sRGB rendering cannot be enabled, + * check for linear format support instead. + * Later when we create a surface, we change the format to a linear one. */ + if (!ctx->Const.sRGBCapable && + _mesa_get_format_color_encoding(texFormat) == GL_SRGB) { + const gl_format linearFormat = _mesa_get_srgb_format_linear(texFormat); + format = st_mesa_format_to_pipe_format(linearFormat); + } + + return screen->is_format_supported(screen, format, + PIPE_TEXTURE_2D, + stObj->pt->nr_samples, bindings, 0); +} + + +/** + * Check if two renderbuffer attachments name a combined depth/stencil + * renderbuffer. + */ +GLboolean +st_is_depth_stencil_combined(const struct gl_renderbuffer_attachment *depth, + const struct gl_renderbuffer_attachment *stencil) +{ + assert(depth && stencil); + + if (depth->Type == stencil->Type) { + if (depth->Type == GL_RENDERBUFFER_EXT && + depth->Renderbuffer == stencil->Renderbuffer) + return GL_TRUE; + + if (depth->Type == GL_TEXTURE && + depth->Texture == stencil->Texture) + return GL_TRUE; + } + + return GL_FALSE; +} + + +/** + * Check that the framebuffer configuration is valid in terms of what + * the driver can support. + * + * For Gallium we only supports combined Z+stencil, not separate buffers. + */ +static void +st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) +{ + struct st_context *st = st_context(ctx); + struct pipe_screen *screen = st->pipe->screen; + const struct gl_renderbuffer_attachment *depth = + &fb->Attachment[BUFFER_DEPTH]; + const struct gl_renderbuffer_attachment *stencil = + &fb->Attachment[BUFFER_STENCIL]; + GLuint i; + + if (depth->Type && stencil->Type && depth->Type != stencil->Type) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + return; + } + if (depth->Type == GL_RENDERBUFFER_EXT && + stencil->Type == GL_RENDERBUFFER_EXT && + depth->Renderbuffer != stencil->Renderbuffer) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + return; + } + if (depth->Type == GL_TEXTURE && + stencil->Type == GL_TEXTURE && + depth->Texture != stencil->Texture) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + return; + } + + if (!st_validate_attachment(ctx, + screen, + depth, + PIPE_BIND_DEPTH_STENCIL)) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + return; + } + if (!st_validate_attachment(ctx, + screen, + stencil, + PIPE_BIND_DEPTH_STENCIL)) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + return; + } + for (i = 0; i < ctx->Const.MaxColorAttachments; i++) { + if (!st_validate_attachment(ctx, + screen, + &fb->Attachment[BUFFER_COLOR0 + i], + PIPE_BIND_RENDER_TARGET)) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + return; + } + } +} + + +/** + * Called via glDrawBuffer. + */ +static void +st_DrawBuffers(struct gl_context *ctx, GLsizei count, const GLenum *buffers) +{ + struct st_context *st = st_context(ctx); + struct gl_framebuffer *fb = ctx->DrawBuffer; + GLuint i; + + (void) count; + (void) buffers; + + /* add the renderbuffers on demand */ + for (i = 0; i < fb->_NumColorDrawBuffers; i++) { + gl_buffer_index idx = fb->_ColorDrawBufferIndexes[i]; + st_manager_add_color_renderbuffer(st, fb, idx); + } +} + + +/** + * Called via glReadBuffer. + */ +static void +st_ReadBuffer(struct gl_context *ctx, GLenum buffer) +{ + struct st_context *st = st_context(ctx); + struct gl_framebuffer *fb = ctx->ReadBuffer; + + (void) buffer; + + /* add the renderbuffer on demand */ + st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex); +} + + +void st_init_fbo_functions(struct dd_function_table *functions) +{ +#if FEATURE_EXT_framebuffer_object + functions->NewFramebuffer = st_new_framebuffer; + functions->NewRenderbuffer = st_new_renderbuffer; + functions->BindFramebuffer = st_bind_framebuffer; + functions->FramebufferRenderbuffer = st_framebuffer_renderbuffer; + functions->RenderTexture = st_render_texture; + functions->FinishRenderTexture = st_finish_render_texture; + functions->ValidateFramebuffer = st_validate_framebuffer; +#endif + /* no longer needed by core Mesa, drivers handle resizes... + functions->ResizeBuffers = st_resize_buffers; + */ + + functions->DrawBuffers = st_DrawBuffers; + functions->ReadBuffer = st_ReadBuffer; +} + +/* XXX unused ? */ +struct pipe_sampler_view * +st_get_renderbuffer_sampler_view(struct st_renderbuffer *rb, + struct pipe_context *pipe) +{ + if (!rb->sampler_view) { + rb->sampler_view = st_create_texture_sampler_view(pipe, rb->texture); + } + + return rb->sampler_view; +} diff --git a/mesalib/src/mesa/state_tracker/st_manager.c b/mesalib/src/mesa/state_tracker/st_manager.c index 5684e9768..d85bcd4f7 100644 --- a/mesalib/src/mesa/state_tracker/st_manager.c +++ b/mesalib/src/mesa/state_tracker/st_manager.c @@ -1,922 +1,923 @@ -/* - * Mesa 3-D graphics library - * Version: 7.9 - * - * Copyright (C) 2010 LunarG Inc. - * - * 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 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. - * - * Authors: - * Chia-I Wu - */ - -#include "state_tracker/st_gl_api.h" - -#include "pipe/p_context.h" -#include "pipe/p_screen.h" -#include "util/u_format.h" -#include "util/u_pointer.h" -#include "util/u_inlines.h" -#include "util/u_atomic.h" -#include "util/u_surface.h" - -#include "main/mtypes.h" -#include "main/context.h" -#include "main/mfeatures.h" -#include "main/texobj.h" -#include "main/teximage.h" -#include "main/texstate.h" -#include "main/framebuffer.h" -#include "main/fbobject.h" -#include "main/renderbuffer.h" -#include "main/version.h" -#include "st_texture.h" - -#include "st_context.h" -#include "st_format.h" -#include "st_cb_fbo.h" -#include "st_cb_flush.h" -#include "st_manager.h" - -/** - * Cast wrapper to convert a struct gl_framebuffer to an st_framebuffer. - * Return NULL if the struct gl_framebuffer is a user-created framebuffer. - * We'll only return non-null for window system framebuffers. - * Note that this function may fail. - */ -static INLINE struct st_framebuffer * -st_ws_framebuffer(struct gl_framebuffer *fb) -{ - /* FBO cannot be casted. See st_new_framebuffer */ - return (struct st_framebuffer *) ((fb && !fb->Name) ? fb : NULL); -} - -/** - * Map an attachment to a buffer index. - */ -static INLINE gl_buffer_index -attachment_to_buffer_index(enum st_attachment_type statt) -{ - gl_buffer_index index; - - switch (statt) { - case ST_ATTACHMENT_FRONT_LEFT: - index = BUFFER_FRONT_LEFT; - break; - case ST_ATTACHMENT_BACK_LEFT: - index = BUFFER_BACK_LEFT; - break; - case ST_ATTACHMENT_FRONT_RIGHT: - index = BUFFER_FRONT_RIGHT; - break; - case ST_ATTACHMENT_BACK_RIGHT: - index = BUFFER_BACK_RIGHT; - break; - case ST_ATTACHMENT_DEPTH_STENCIL: - index = BUFFER_DEPTH; - break; - case ST_ATTACHMENT_ACCUM: - index = BUFFER_ACCUM; - break; - case ST_ATTACHMENT_SAMPLE: - default: - index = BUFFER_COUNT; - break; - } - - return index; -} - -/** - * Map a buffer index to an attachment. - */ -static INLINE enum st_attachment_type -buffer_index_to_attachment(gl_buffer_index index) -{ - enum st_attachment_type statt; - - switch (index) { - case BUFFER_FRONT_LEFT: - statt = ST_ATTACHMENT_FRONT_LEFT; - break; - case BUFFER_BACK_LEFT: - statt = ST_ATTACHMENT_BACK_LEFT; - break; - case BUFFER_FRONT_RIGHT: - statt = ST_ATTACHMENT_FRONT_RIGHT; - break; - case BUFFER_BACK_RIGHT: - statt = ST_ATTACHMENT_BACK_RIGHT; - break; - case BUFFER_DEPTH: - statt = ST_ATTACHMENT_DEPTH_STENCIL; - break; - case BUFFER_ACCUM: - statt = ST_ATTACHMENT_ACCUM; - break; - default: - statt = ST_ATTACHMENT_INVALID; - break; - } - - return statt; -} - -/** - * Validate a framebuffer to make sure up-to-date pipe_textures are used. - */ -static void -st_framebuffer_validate(struct st_framebuffer *stfb, struct st_context *st) -{ - struct pipe_context *pipe = st->pipe; - struct pipe_resource *textures[ST_ATTACHMENT_COUNT]; - uint width, height; - unsigned i; - boolean changed = FALSE; - - if (!p_atomic_read(&stfb->revalidate)) - return; - - /* validate the fb */ - if (!stfb->iface->validate(stfb->iface, stfb->statts, stfb->num_statts, textures)) - return; - - width = stfb->Base.Width; - height = stfb->Base.Height; - - for (i = 0; i < stfb->num_statts; i++) { - struct st_renderbuffer *strb; - struct pipe_surface *ps, surf_tmpl; - gl_buffer_index idx; - - if (!textures[i]) - continue; - - idx = attachment_to_buffer_index(stfb->statts[i]); - if (idx >= BUFFER_COUNT) { - pipe_resource_reference(&textures[i], NULL); - continue; - } - - strb = st_renderbuffer(stfb->Base.Attachment[idx].Renderbuffer); - assert(strb); - if (strb->texture == textures[i]) { - pipe_resource_reference(&textures[i], NULL); - continue; - } - - memset(&surf_tmpl, 0, sizeof(surf_tmpl)); - u_surface_default_template(&surf_tmpl, textures[i], - PIPE_BIND_RENDER_TARGET); - ps = pipe->create_surface(pipe, textures[i], &surf_tmpl); - if (ps) { - pipe_surface_reference(&strb->surface, ps); - pipe_resource_reference(&strb->texture, ps->texture); - /* ownership transfered */ - pipe_surface_reference(&ps, NULL); - - changed = TRUE; - - strb->Base.Width = strb->surface->width; - strb->Base.Height = strb->surface->height; - - width = strb->Base.Width; - height = strb->Base.Height; - } - - pipe_resource_reference(&textures[i], NULL); - } - - if (changed) { - st->dirty.st |= ST_NEW_FRAMEBUFFER; - _mesa_resize_framebuffer(st->ctx, &stfb->Base, width, height); - - assert(stfb->Base.Width == width); - assert(stfb->Base.Height == height); - } - - p_atomic_set(&stfb->revalidate, FALSE); -} - -/** - * Update the attachments to validate by looping the existing renderbuffers. - */ -static void -st_framebuffer_update_attachments(struct st_framebuffer *stfb) -{ - gl_buffer_index idx; - - stfb->num_statts = 0; - for (idx = 0; idx < BUFFER_COUNT; idx++) { - struct st_renderbuffer *strb; - enum st_attachment_type statt; - - strb = st_renderbuffer(stfb->Base.Attachment[idx].Renderbuffer); - if (!strb || strb->software) - continue; - - statt = buffer_index_to_attachment(idx); - if (statt != ST_ATTACHMENT_INVALID && - st_visual_have_buffers(stfb->iface->visual, 1 << statt)) - stfb->statts[stfb->num_statts++] = statt; - } - - p_atomic_set(&stfb->revalidate, TRUE); -} - -/** - * Add a renderbuffer to the framebuffer. - */ -static boolean -st_framebuffer_add_renderbuffer(struct st_framebuffer *stfb, - gl_buffer_index idx) -{ - struct gl_renderbuffer *rb; - enum pipe_format format; - int samples; - boolean sw; - - if (!stfb->iface) - return FALSE; - - /* do not distinguish depth/stencil buffers */ - if (idx == BUFFER_STENCIL) - idx = BUFFER_DEPTH; - - switch (idx) { - case BUFFER_DEPTH: - format = stfb->iface->visual->depth_stencil_format; - sw = FALSE; - break; - case BUFFER_ACCUM: - format = stfb->iface->visual->accum_format; - sw = TRUE; - break; - default: - format = stfb->iface->visual->color_format; - sw = FALSE; - break; - } - - if (format == PIPE_FORMAT_NONE) - return FALSE; - - samples = stfb->iface->visual->samples; - if (!samples) - samples = st_get_msaa(); - - rb = st_new_renderbuffer_fb(format, samples, sw); - if (!rb) - return FALSE; - - if (idx != BUFFER_DEPTH) { - _mesa_add_renderbuffer(&stfb->Base, idx, rb); - } - else { - if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0)) - _mesa_add_renderbuffer(&stfb->Base, BUFFER_DEPTH, rb); - if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1)) - _mesa_add_renderbuffer(&stfb->Base, BUFFER_STENCIL, rb); - } - - return TRUE; -} - -/** - * Intialize a struct gl_config from a visual. - */ -static void -st_visual_to_context_mode(const struct st_visual *visual, - struct gl_config *mode) -{ - memset(mode, 0, sizeof(*mode)); - - if (st_visual_have_buffers(visual, ST_ATTACHMENT_BACK_LEFT_MASK)) - mode->doubleBufferMode = GL_TRUE; - if (st_visual_have_buffers(visual, - ST_ATTACHMENT_FRONT_RIGHT_MASK | ST_ATTACHMENT_BACK_RIGHT_MASK)) - mode->stereoMode = GL_TRUE; - - if (visual->color_format != PIPE_FORMAT_NONE) { - mode->rgbMode = GL_TRUE; - - mode->redBits = - util_format_get_component_bits(visual->color_format, - UTIL_FORMAT_COLORSPACE_RGB, 0); - mode->greenBits = - util_format_get_component_bits(visual->color_format, - UTIL_FORMAT_COLORSPACE_RGB, 1); - mode->blueBits = - util_format_get_component_bits(visual->color_format, - UTIL_FORMAT_COLORSPACE_RGB, 2); - mode->alphaBits = - util_format_get_component_bits(visual->color_format, - UTIL_FORMAT_COLORSPACE_RGB, 3); - - mode->rgbBits = mode->redBits + - mode->greenBits + mode->blueBits + mode->alphaBits; - } - - if (visual->depth_stencil_format != PIPE_FORMAT_NONE) { - mode->depthBits = - util_format_get_component_bits(visual->depth_stencil_format, - UTIL_FORMAT_COLORSPACE_ZS, 0); - mode->stencilBits = - util_format_get_component_bits(visual->depth_stencil_format, - UTIL_FORMAT_COLORSPACE_ZS, 1); - - mode->haveDepthBuffer = mode->depthBits > 0; - mode->haveStencilBuffer = mode->stencilBits > 0; - } - - if (visual->accum_format != PIPE_FORMAT_NONE) { - mode->haveAccumBuffer = GL_TRUE; - - mode->accumRedBits = - util_format_get_component_bits(visual->accum_format, - UTIL_FORMAT_COLORSPACE_RGB, 0); - mode->accumGreenBits = - util_format_get_component_bits(visual->accum_format, - UTIL_FORMAT_COLORSPACE_RGB, 1); - mode->accumBlueBits = - util_format_get_component_bits(visual->accum_format, - UTIL_FORMAT_COLORSPACE_RGB, 2); - mode->accumAlphaBits = - util_format_get_component_bits(visual->accum_format, - UTIL_FORMAT_COLORSPACE_RGB, 3); - } - - if (visual->samples) { - mode->sampleBuffers = 1; - mode->samples = visual->samples; - } -} - -/** - * Determine the default draw or read buffer from a visual. - */ -static void -st_visual_to_default_buffer(const struct st_visual *visual, - GLenum *buffer, GLint *index) -{ - enum st_attachment_type statt; - GLenum buf; - gl_buffer_index idx; - - statt = visual->render_buffer; - /* do nothing if an invalid render buffer is specified */ - if (statt == ST_ATTACHMENT_INVALID || - !st_visual_have_buffers(visual, 1 << statt)) - return; - - switch (statt) { - case ST_ATTACHMENT_FRONT_LEFT: - buf = GL_FRONT_LEFT; - idx = BUFFER_FRONT_LEFT; - break; - case ST_ATTACHMENT_BACK_LEFT: - buf = GL_BACK_LEFT; - idx = BUFFER_BACK_LEFT; - break; - case ST_ATTACHMENT_FRONT_RIGHT: - buf = GL_FRONT_RIGHT; - idx = BUFFER_FRONT_RIGHT; - break; - case ST_ATTACHMENT_BACK_RIGHT: - buf = GL_BACK_RIGHT; - idx = BUFFER_BACK_RIGHT; - break; - default: - buf = GL_NONE; - idx = BUFFER_COUNT; - break; - } - - if (buf != GL_NONE) { - if (buffer) - *buffer = buf; - if (index) - *index = idx; - } -} - -/** - * Create a framebuffer from a manager interface. - */ -static struct st_framebuffer * -st_framebuffer_create(struct st_framebuffer_iface *stfbi) -{ - struct st_framebuffer *stfb; - struct gl_config mode; - gl_buffer_index idx; - - if (!stfbi) - return NULL; - - stfb = CALLOC_STRUCT(st_framebuffer); - if (!stfb) - return NULL; - - st_visual_to_context_mode(stfbi->visual, &mode); - _mesa_initialize_window_framebuffer(&stfb->Base, &mode); - - /* modify the draw/read buffers of the fb */ - st_visual_to_default_buffer(stfbi->visual, &stfb->Base.ColorDrawBuffer[0], - &stfb->Base._ColorDrawBufferIndexes[0]); - st_visual_to_default_buffer(stfbi->visual, &stfb->Base.ColorReadBuffer, - &stfb->Base._ColorReadBufferIndex); - - stfb->iface = stfbi; - - /* add the color buffer */ - idx = stfb->Base._ColorDrawBufferIndexes[0]; - if (!st_framebuffer_add_renderbuffer(stfb, idx)) { - FREE(stfb); - return NULL; - } - - st_framebuffer_add_renderbuffer(stfb, BUFFER_DEPTH); - st_framebuffer_add_renderbuffer(stfb, BUFFER_ACCUM); - - st_framebuffer_update_attachments(stfb); - - stfb->Base.Initialized = GL_TRUE; - - return stfb; -} - -/** - * Reference a framebuffer. - */ -static void -st_framebuffer_reference(struct st_framebuffer **ptr, - struct st_framebuffer *stfb) -{ - struct gl_framebuffer *fb = &stfb->Base; - _mesa_reference_framebuffer((struct gl_framebuffer **) ptr, fb); -} - -static void -st_context_notify_invalid_framebuffer(struct st_context_iface *stctxi, - struct st_framebuffer_iface *stfbi) -{ - struct st_context *st = (struct st_context *) stctxi; - struct st_framebuffer *stfb; - - /* either draw or read winsys fb */ - stfb = st_ws_framebuffer(st->ctx->WinSysDrawBuffer); - if (!stfb || stfb->iface != stfbi) - stfb = st_ws_framebuffer(st->ctx->WinSysReadBuffer); - - if (stfb && stfb->iface == stfbi) { - p_atomic_set(&stfb->revalidate, TRUE); - } - else { - /* This function is probably getting called when we've detected a - * change in a window's size but the currently bound context is - * not bound to that window. - * If the st_framebuffer_iface structure had a pointer to the - * corresponding st_framebuffer we'd be able to handle this. - */ - } -} - -static void -st_context_flush(struct st_context_iface *stctxi, unsigned flags, - struct pipe_fence_handle **fence) -{ - struct st_context *st = (struct st_context *) stctxi; - st_flush(st, flags, fence); - if (flags & PIPE_FLUSH_RENDER_CACHE) - st_manager_flush_frontbuffer(st); -} - -static boolean -st_context_teximage(struct st_context_iface *stctxi, - enum st_texture_type target, - int level, enum pipe_format internal_format, - struct pipe_resource *tex, boolean mipmap) -{ - struct st_context *st = (struct st_context *) stctxi; - struct gl_context *ctx = st->ctx; - struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); - struct gl_texture_object *texObj; - struct gl_texture_image *texImage; - struct st_texture_object *stObj; - struct st_texture_image *stImage; - GLenum internalFormat; - GLuint width, height, depth; - - switch (target) { - case ST_TEXTURE_1D: - target = GL_TEXTURE_1D; - break; - case ST_TEXTURE_2D: - target = GL_TEXTURE_2D; - break; - case ST_TEXTURE_3D: - target = GL_TEXTURE_3D; - break; - case ST_TEXTURE_RECT: - target = GL_TEXTURE_RECTANGLE_ARB; - break; - default: - return FALSE; - break; - } - - texObj = _mesa_select_tex_object(ctx, texUnit, target); - _mesa_lock_texture(ctx, texObj); - - stObj = st_texture_object(texObj); - /* switch to surface based */ - if (!stObj->surface_based) { - _mesa_clear_texture_object(ctx, texObj); - stObj->surface_based = GL_TRUE; - } - - texImage = _mesa_get_tex_image(ctx, texObj, target, level); - stImage = st_texture_image(texImage); - if (tex) { - gl_format texFormat; - - /* - * XXX When internal_format and tex->format differ, st_finalize_texture - * needs to allocate a new texture with internal_format and copy the - * texture here into the new one. It will result in surface_copy being - * called on surfaces whose formats differ. - * - * To avoid that, internal_format is (wrongly) ignored here. A sane fix - * is to use a sampler view. - */ - if (!st_sampler_compat_formats(tex->format, internal_format)) - internal_format = tex->format; - - if (util_format_get_component_bits(internal_format, - UTIL_FORMAT_COLORSPACE_RGB, 3) > 0) - internalFormat = GL_RGBA; - else - internalFormat = GL_RGB; - - texFormat = st_ChooseTextureFormat(ctx, internalFormat, - GL_RGBA, GL_UNSIGNED_BYTE); - - _mesa_init_teximage_fields(ctx, target, texImage, - tex->width0, tex->height0, 1, 0, - internalFormat, texFormat); - - width = tex->width0; - height = tex->height0; - depth = tex->depth0; - - /* grow the image size until we hit level = 0 */ - while (level > 0) { - if (width != 1) - width <<= 1; - if (height != 1) - height <<= 1; - if (depth != 1) - depth <<= 1; - level--; - } - } - else { - _mesa_clear_texture_image(ctx, texImage); - width = height = depth = 0; - } - - pipe_resource_reference(&stImage->pt, tex); - stObj->width0 = width; - stObj->height0 = height; - stObj->depth0 = depth; - - _mesa_dirty_texobj(ctx, texObj, GL_TRUE); - _mesa_unlock_texture(ctx, texObj); - - return TRUE; -} - -static void -st_context_copy(struct st_context_iface *stctxi, - struct st_context_iface *stsrci, unsigned mask) -{ - struct st_context *st = (struct st_context *) stctxi; - struct st_context *src = (struct st_context *) stsrci; - - _mesa_copy_context(src->ctx, st->ctx, mask); -} - -static boolean -st_context_share(struct st_context_iface *stctxi, - struct st_context_iface *stsrci) -{ - struct st_context *st = (struct st_context *) stctxi; - struct st_context *src = (struct st_context *) stsrci; - - return _mesa_share_state(st->ctx, src->ctx); -} - -static void -st_context_destroy(struct st_context_iface *stctxi) -{ - struct st_context *st = (struct st_context *) stctxi; - st_destroy_context(st); -} - -static struct st_context_iface * -st_api_create_context(struct st_api *stapi, struct st_manager *smapi, - const struct st_context_attribs *attribs, - struct st_context_iface *shared_stctxi) -{ - struct st_context *shared_ctx = (struct st_context *) shared_stctxi; - struct st_context *st; - struct pipe_context *pipe; - struct gl_config mode; - gl_api api; - - if (!(stapi->profile_mask & (1 << attribs->profile))) - return NULL; - - switch (attribs->profile) { - case ST_PROFILE_DEFAULT: - api = API_OPENGL; - break; - case ST_PROFILE_OPENGL_ES1: - api = API_OPENGLES; - break; - case ST_PROFILE_OPENGL_ES2: - api = API_OPENGLES2; - break; - case ST_PROFILE_OPENGL_CORE: - default: - return NULL; - break; - } - - pipe = smapi->screen->context_create(smapi->screen, NULL); - if (!pipe) - return NULL; - - st_visual_to_context_mode(&attribs->visual, &mode); - st = st_create_context(api, pipe, &mode, shared_ctx); - if (!st) { - pipe->destroy(pipe); - return NULL; - } - - /* need to perform version check */ - if (attribs->major > 1 || attribs->minor > 0) { - _mesa_compute_version(st->ctx); - - if (st->ctx->VersionMajor < attribs->major || - st->ctx->VersionMajor < attribs->minor) { - st_destroy_context(st); - return NULL; - } - } - - st->invalidate_on_gl_viewport = - smapi->get_param(smapi, ST_MANAGER_BROKEN_INVALIDATE); - - st->iface.destroy = st_context_destroy; - st->iface.notify_invalid_framebuffer = - st_context_notify_invalid_framebuffer; - st->iface.flush = st_context_flush; - st->iface.teximage = st_context_teximage; - st->iface.copy = st_context_copy; - st->iface.share = st_context_share; - st->iface.st_context_private = (void *) smapi; - - return &st->iface; -} - -static boolean -st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi, - struct st_framebuffer_iface *stdrawi, - struct st_framebuffer_iface *streadi) -{ - struct st_context *st = (struct st_context *) stctxi; - struct st_framebuffer *stdraw, *stread, *stfb; - boolean ret; - - _glapi_check_multithread(); - - if (st) { - /* reuse/create the draw fb */ - stfb = st_ws_framebuffer(st->ctx->WinSysDrawBuffer); - if (stfb && stfb->iface == stdrawi) { - stdraw = NULL; - st_framebuffer_reference(&stdraw, stfb); - } - else { - stdraw = st_framebuffer_create(stdrawi); - } - - /* reuse/create the read fb */ - stfb = st_ws_framebuffer(st->ctx->WinSysReadBuffer); - if (!stfb || stfb->iface != streadi) - stfb = stdraw; - if (stfb && stfb->iface == streadi) { - stread = NULL; - st_framebuffer_reference(&stread, stfb); - } - else { - stread = st_framebuffer_create(streadi); - } - - if (stdraw && stread) { - st_framebuffer_validate(stdraw, st); - if (stread != stdraw) - st_framebuffer_validate(stread, st); - - /* modify the draw/read buffers of the context */ - if (stdraw->iface) { - st_visual_to_default_buffer(stdraw->iface->visual, - &st->ctx->Color.DrawBuffer[0], NULL); - } - if (stread->iface) { - st_visual_to_default_buffer(stread->iface->visual, - &st->ctx->Pixel.ReadBuffer, NULL); - } - - ret = _mesa_make_current(st->ctx, &stdraw->Base, &stread->Base); - } - else { - struct gl_framebuffer *incomplete = _mesa_get_incomplete_framebuffer(); - ret = _mesa_make_current(st->ctx, incomplete, incomplete); - } - - st_framebuffer_reference(&stdraw, NULL); - st_framebuffer_reference(&stread, NULL); - } - else { - ret = _mesa_make_current(NULL, NULL, NULL); - } - - return ret; -} - -static struct st_context_iface * -st_api_get_current(struct st_api *stapi) -{ - GET_CURRENT_CONTEXT(ctx); - struct st_context *st = (ctx) ? ctx->st : NULL; - - return (st) ? &st->iface : NULL; -} - -static st_proc_t -st_api_get_proc_address(struct st_api *stapi, const char *procname) -{ - return (st_proc_t) _glapi_get_proc_address(procname); -} - -static void -st_api_destroy(struct st_api *stapi) -{ -} - -/** - * Flush the front buffer if the current context renders to the front buffer. - */ -void -st_manager_flush_frontbuffer(struct st_context *st) -{ - struct st_framebuffer *stfb = st_ws_framebuffer(st->ctx->DrawBuffer); - struct st_renderbuffer *strb = NULL; - - if (stfb) - strb = st_renderbuffer(stfb->Base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer); - if (!strb) - return; - - /* never a dummy fb */ - assert(stfb->iface); - stfb->iface->flush_front(stfb->iface, ST_ATTACHMENT_FRONT_LEFT); -} - -/** - * Return the surface of an EGLImage. - * FIXME: I think this should operate on resources, not surfaces - */ -struct pipe_surface * -st_manager_get_egl_image_surface(struct st_context *st, - void *eglimg, unsigned usage) -{ - struct st_manager *smapi = - (struct st_manager *) st->iface.st_context_private; - struct st_egl_image stimg; - struct pipe_surface *ps, surf_tmpl; - - if (!smapi || !smapi->get_egl_image) - return NULL; - - memset(&stimg, 0, sizeof(stimg)); - if (!smapi->get_egl_image(smapi, eglimg, &stimg)) - return NULL; - - memset(&surf_tmpl, 0, sizeof(surf_tmpl)); - surf_tmpl.format = stimg.texture->format; - surf_tmpl.usage = usage; - surf_tmpl.u.tex.level = stimg.level; - surf_tmpl.u.tex.first_layer = stimg.layer; - surf_tmpl.u.tex.last_layer = stimg.layer; - ps = st->pipe->create_surface(st->pipe, stimg.texture, &surf_tmpl); - pipe_resource_reference(&stimg.texture, NULL); - - return ps; -} - -/** - * Re-validate the framebuffers. - */ -void -st_manager_validate_framebuffers(struct st_context *st) -{ - struct st_framebuffer *stdraw = st_ws_framebuffer(st->ctx->DrawBuffer); - struct st_framebuffer *stread = st_ws_framebuffer(st->ctx->ReadBuffer); - - if (stdraw) - st_framebuffer_validate(stdraw, st); - if (stread && stread != stdraw) - st_framebuffer_validate(stread, st); -} - -/** - * Add a color renderbuffer on demand. - */ -boolean -st_manager_add_color_renderbuffer(struct st_context *st, - struct gl_framebuffer *fb, - gl_buffer_index idx) -{ - struct st_framebuffer *stfb = st_ws_framebuffer(fb); - - /* FBO */ - if (!stfb) - return FALSE; - - if (stfb->Base.Attachment[idx].Renderbuffer) - return TRUE; - - switch (idx) { - case BUFFER_FRONT_LEFT: - case BUFFER_BACK_LEFT: - case BUFFER_FRONT_RIGHT: - case BUFFER_BACK_RIGHT: - break; - default: - return FALSE; - break; - } - - if (!st_framebuffer_add_renderbuffer(stfb, idx)) - return FALSE; - - st_framebuffer_update_attachments(stfb); - st_invalidate_state(st->ctx, _NEW_BUFFERS); - - return TRUE; -} - -static const struct st_api st_gl_api = { - "Mesa " MESA_VERSION_STRING, - ST_API_OPENGL, -#if FEATURE_GL - ST_PROFILE_DEFAULT_MASK | -#endif -#if FEATURE_ES1 - ST_PROFILE_OPENGL_ES1_MASK | -#endif -#if FEATURE_ES2 - ST_PROFILE_OPENGL_ES2_MASK | -#endif - 0, - st_api_destroy, - st_api_get_proc_address, - st_api_create_context, - st_api_make_current, - st_api_get_current, -}; - -struct st_api * -st_gl_api_create(void) -{ - return (struct st_api *) &st_gl_api; -} +/* + * Mesa 3-D graphics library + * Version: 7.9 + * + * Copyright (C) 2010 LunarG Inc. + * + * 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 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. + * + * Authors: + * Chia-I Wu + */ + +#include "state_tracker/st_gl_api.h" + +#include "pipe/p_context.h" +#include "pipe/p_screen.h" +#include "util/u_format.h" +#include "util/u_pointer.h" +#include "util/u_inlines.h" +#include "util/u_atomic.h" +#include "util/u_surface.h" + +#include "main/mtypes.h" +#include "main/context.h" +#include "main/mfeatures.h" +#include "main/texobj.h" +#include "main/teximage.h" +#include "main/texstate.h" +#include "main/framebuffer.h" +#include "main/fbobject.h" +#include "main/renderbuffer.h" +#include "main/version.h" +#include "st_texture.h" + +#include "st_context.h" +#include "st_format.h" +#include "st_cb_fbo.h" +#include "st_cb_flush.h" +#include "st_manager.h" + +/** + * Cast wrapper to convert a struct gl_framebuffer to an st_framebuffer. + * Return NULL if the struct gl_framebuffer is a user-created framebuffer. + * We'll only return non-null for window system framebuffers. + * Note that this function may fail. + */ +static INLINE struct st_framebuffer * +st_ws_framebuffer(struct gl_framebuffer *fb) +{ + /* FBO cannot be casted. See st_new_framebuffer */ + return (struct st_framebuffer *) ((fb && !fb->Name) ? fb : NULL); +} + +/** + * Map an attachment to a buffer index. + */ +static INLINE gl_buffer_index +attachment_to_buffer_index(enum st_attachment_type statt) +{ + gl_buffer_index index; + + switch (statt) { + case ST_ATTACHMENT_FRONT_LEFT: + index = BUFFER_FRONT_LEFT; + break; + case ST_ATTACHMENT_BACK_LEFT: + index = BUFFER_BACK_LEFT; + break; + case ST_ATTACHMENT_FRONT_RIGHT: + index = BUFFER_FRONT_RIGHT; + break; + case ST_ATTACHMENT_BACK_RIGHT: + index = BUFFER_BACK_RIGHT; + break; + case ST_ATTACHMENT_DEPTH_STENCIL: + index = BUFFER_DEPTH; + break; + case ST_ATTACHMENT_ACCUM: + index = BUFFER_ACCUM; + break; + case ST_ATTACHMENT_SAMPLE: + default: + index = BUFFER_COUNT; + break; + } + + return index; +} + +/** + * Map a buffer index to an attachment. + */ +static INLINE enum st_attachment_type +buffer_index_to_attachment(gl_buffer_index index) +{ + enum st_attachment_type statt; + + switch (index) { + case BUFFER_FRONT_LEFT: + statt = ST_ATTACHMENT_FRONT_LEFT; + break; + case BUFFER_BACK_LEFT: + statt = ST_ATTACHMENT_BACK_LEFT; + break; + case BUFFER_FRONT_RIGHT: + statt = ST_ATTACHMENT_FRONT_RIGHT; + break; + case BUFFER_BACK_RIGHT: + statt = ST_ATTACHMENT_BACK_RIGHT; + break; + case BUFFER_DEPTH: + statt = ST_ATTACHMENT_DEPTH_STENCIL; + break; + case BUFFER_ACCUM: + statt = ST_ATTACHMENT_ACCUM; + break; + default: + statt = ST_ATTACHMENT_INVALID; + break; + } + + return statt; +} + +/** + * Validate a framebuffer to make sure up-to-date pipe_textures are used. + */ +static void +st_framebuffer_validate(struct st_framebuffer *stfb, struct st_context *st) +{ + struct pipe_context *pipe = st->pipe; + struct pipe_resource *textures[ST_ATTACHMENT_COUNT]; + uint width, height; + unsigned i; + boolean changed = FALSE; + + if (!p_atomic_read(&stfb->revalidate)) + return; + + /* validate the fb */ + if (!stfb->iface->validate(stfb->iface, stfb->statts, stfb->num_statts, textures)) + return; + + width = stfb->Base.Width; + height = stfb->Base.Height; + + for (i = 0; i < stfb->num_statts; i++) { + struct st_renderbuffer *strb; + struct pipe_surface *ps, surf_tmpl; + gl_buffer_index idx; + + if (!textures[i]) + continue; + + idx = attachment_to_buffer_index(stfb->statts[i]); + if (idx >= BUFFER_COUNT) { + pipe_resource_reference(&textures[i], NULL); + continue; + } + + strb = st_renderbuffer(stfb->Base.Attachment[idx].Renderbuffer); + assert(strb); + if (strb->texture == textures[i]) { + pipe_resource_reference(&textures[i], NULL); + continue; + } + + memset(&surf_tmpl, 0, sizeof(surf_tmpl)); + u_surface_default_template(&surf_tmpl, textures[i], + PIPE_BIND_RENDER_TARGET); + ps = pipe->create_surface(pipe, textures[i], &surf_tmpl); + if (ps) { + pipe_surface_reference(&strb->surface, ps); + pipe_resource_reference(&strb->texture, ps->texture); + /* ownership transfered */ + pipe_surface_reference(&ps, NULL); + + changed = TRUE; + + strb->Base.Width = strb->surface->width; + strb->Base.Height = strb->surface->height; + + width = strb->Base.Width; + height = strb->Base.Height; + } + + pipe_resource_reference(&textures[i], NULL); + } + + if (changed) { + st->dirty.st |= ST_NEW_FRAMEBUFFER; + _mesa_resize_framebuffer(st->ctx, &stfb->Base, width, height); + + assert(stfb->Base.Width == width); + assert(stfb->Base.Height == height); + } + + p_atomic_set(&stfb->revalidate, FALSE); +} + +/** + * Update the attachments to validate by looping the existing renderbuffers. + */ +static void +st_framebuffer_update_attachments(struct st_framebuffer *stfb) +{ + gl_buffer_index idx; + + stfb->num_statts = 0; + for (idx = 0; idx < BUFFER_COUNT; idx++) { + struct st_renderbuffer *strb; + enum st_attachment_type statt; + + strb = st_renderbuffer(stfb->Base.Attachment[idx].Renderbuffer); + if (!strb || strb->software) + continue; + + statt = buffer_index_to_attachment(idx); + if (statt != ST_ATTACHMENT_INVALID && + st_visual_have_buffers(stfb->iface->visual, 1 << statt)) + stfb->statts[stfb->num_statts++] = statt; + } + + p_atomic_set(&stfb->revalidate, TRUE); +} + +/** + * Add a renderbuffer to the framebuffer. + */ +static boolean +st_framebuffer_add_renderbuffer(struct st_framebuffer *stfb, + gl_buffer_index idx) +{ + struct gl_renderbuffer *rb; + enum pipe_format format; + int samples; + boolean sw; + + if (!stfb->iface) + return FALSE; + + /* do not distinguish depth/stencil buffers */ + if (idx == BUFFER_STENCIL) + idx = BUFFER_DEPTH; + + switch (idx) { + case BUFFER_DEPTH: + format = stfb->iface->visual->depth_stencil_format; + sw = FALSE; + break; + case BUFFER_ACCUM: + format = stfb->iface->visual->accum_format; + sw = TRUE; + break; + default: + format = stfb->iface->visual->color_format; + sw = FALSE; + break; + } + + if (format == PIPE_FORMAT_NONE) + return FALSE; + + samples = stfb->iface->visual->samples; + if (!samples) + samples = st_get_msaa(); + + rb = st_new_renderbuffer_fb(format, samples, sw); + if (!rb) + return FALSE; + + if (idx != BUFFER_DEPTH) { + _mesa_add_renderbuffer(&stfb->Base, idx, rb); + } + else { + if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 0)) + _mesa_add_renderbuffer(&stfb->Base, BUFFER_DEPTH, rb); + if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_ZS, 1)) + _mesa_add_renderbuffer(&stfb->Base, BUFFER_STENCIL, rb); + } + + return TRUE; +} + +/** + * Intialize a struct gl_config from a visual. + */ +static void +st_visual_to_context_mode(const struct st_visual *visual, + struct gl_config *mode) +{ + memset(mode, 0, sizeof(*mode)); + + if (st_visual_have_buffers(visual, ST_ATTACHMENT_BACK_LEFT_MASK)) + mode->doubleBufferMode = GL_TRUE; + if (st_visual_have_buffers(visual, + ST_ATTACHMENT_FRONT_RIGHT_MASK | ST_ATTACHMENT_BACK_RIGHT_MASK)) + mode->stereoMode = GL_TRUE; + + if (visual->color_format != PIPE_FORMAT_NONE) { + mode->rgbMode = GL_TRUE; + + mode->redBits = + util_format_get_component_bits(visual->color_format, + UTIL_FORMAT_COLORSPACE_RGB, 0); + mode->greenBits = + util_format_get_component_bits(visual->color_format, + UTIL_FORMAT_COLORSPACE_RGB, 1); + mode->blueBits = + util_format_get_component_bits(visual->color_format, + UTIL_FORMAT_COLORSPACE_RGB, 2); + mode->alphaBits = + util_format_get_component_bits(visual->color_format, + UTIL_FORMAT_COLORSPACE_RGB, 3); + + mode->rgbBits = mode->redBits + + mode->greenBits + mode->blueBits + mode->alphaBits; + } + + if (visual->depth_stencil_format != PIPE_FORMAT_NONE) { + mode->depthBits = + util_format_get_component_bits(visual->depth_stencil_format, + UTIL_FORMAT_COLORSPACE_ZS, 0); + mode->stencilBits = + util_format_get_component_bits(visual->depth_stencil_format, + UTIL_FORMAT_COLORSPACE_ZS, 1); + + mode->haveDepthBuffer = mode->depthBits > 0; + mode->haveStencilBuffer = mode->stencilBits > 0; + } + + if (visual->accum_format != PIPE_FORMAT_NONE) { + mode->haveAccumBuffer = GL_TRUE; + + mode->accumRedBits = + util_format_get_component_bits(visual->accum_format, + UTIL_FORMAT_COLORSPACE_RGB, 0); + mode->accumGreenBits = + util_format_get_component_bits(visual->accum_format, + UTIL_FORMAT_COLORSPACE_RGB, 1); + mode->accumBlueBits = + util_format_get_component_bits(visual->accum_format, + UTIL_FORMAT_COLORSPACE_RGB, 2); + mode->accumAlphaBits = + util_format_get_component_bits(visual->accum_format, + UTIL_FORMAT_COLORSPACE_RGB, 3); + } + + if (visual->samples) { + mode->sampleBuffers = 1; + mode->samples = visual->samples; + } +} + +/** + * Determine the default draw or read buffer from a visual. + */ +static void +st_visual_to_default_buffer(const struct st_visual *visual, + GLenum *buffer, GLint *index) +{ + enum st_attachment_type statt; + GLenum buf; + gl_buffer_index idx; + + statt = visual->render_buffer; + /* do nothing if an invalid render buffer is specified */ + if (statt == ST_ATTACHMENT_INVALID || + !st_visual_have_buffers(visual, 1 << statt)) + return; + + switch (statt) { + case ST_ATTACHMENT_FRONT_LEFT: + buf = GL_FRONT_LEFT; + idx = BUFFER_FRONT_LEFT; + break; + case ST_ATTACHMENT_BACK_LEFT: + buf = GL_BACK_LEFT; + idx = BUFFER_BACK_LEFT; + break; + case ST_ATTACHMENT_FRONT_RIGHT: + buf = GL_FRONT_RIGHT; + idx = BUFFER_FRONT_RIGHT; + break; + case ST_ATTACHMENT_BACK_RIGHT: + buf = GL_BACK_RIGHT; + idx = BUFFER_BACK_RIGHT; + break; + default: + buf = GL_NONE; + idx = BUFFER_COUNT; + break; + } + + if (buf != GL_NONE) { + if (buffer) + *buffer = buf; + if (index) + *index = idx; + } +} + +/** + * Create a framebuffer from a manager interface. + */ +static struct st_framebuffer * +st_framebuffer_create(struct st_framebuffer_iface *stfbi) +{ + struct st_framebuffer *stfb; + struct gl_config mode; + gl_buffer_index idx; + + if (!stfbi) + return NULL; + + stfb = CALLOC_STRUCT(st_framebuffer); + if (!stfb) + return NULL; + + st_visual_to_context_mode(stfbi->visual, &mode); + _mesa_initialize_window_framebuffer(&stfb->Base, &mode); + + /* modify the draw/read buffers of the fb */ + st_visual_to_default_buffer(stfbi->visual, &stfb->Base.ColorDrawBuffer[0], + &stfb->Base._ColorDrawBufferIndexes[0]); + st_visual_to_default_buffer(stfbi->visual, &stfb->Base.ColorReadBuffer, + &stfb->Base._ColorReadBufferIndex); + + stfb->iface = stfbi; + + /* add the color buffer */ + idx = stfb->Base._ColorDrawBufferIndexes[0]; + if (!st_framebuffer_add_renderbuffer(stfb, idx)) { + FREE(stfb); + return NULL; + } + + st_framebuffer_add_renderbuffer(stfb, BUFFER_DEPTH); + st_framebuffer_add_renderbuffer(stfb, BUFFER_ACCUM); + + st_framebuffer_update_attachments(stfb); + + stfb->Base.Initialized = GL_TRUE; + + return stfb; +} + +/** + * Reference a framebuffer. + */ +static void +st_framebuffer_reference(struct st_framebuffer **ptr, + struct st_framebuffer *stfb) +{ + struct gl_framebuffer *fb = &stfb->Base; + _mesa_reference_framebuffer((struct gl_framebuffer **) ptr, fb); +} + +static void +st_context_notify_invalid_framebuffer(struct st_context_iface *stctxi, + struct st_framebuffer_iface *stfbi) +{ + struct st_context *st = (struct st_context *) stctxi; + struct st_framebuffer *stfb; + + /* either draw or read winsys fb */ + stfb = st_ws_framebuffer(st->ctx->WinSysDrawBuffer); + if (!stfb || stfb->iface != stfbi) + stfb = st_ws_framebuffer(st->ctx->WinSysReadBuffer); + + if (stfb && stfb->iface == stfbi) { + p_atomic_set(&stfb->revalidate, TRUE); + } + else { + /* This function is probably getting called when we've detected a + * change in a window's size but the currently bound context is + * not bound to that window. + * If the st_framebuffer_iface structure had a pointer to the + * corresponding st_framebuffer we'd be able to handle this. + */ + } +} + +static void +st_context_flush(struct st_context_iface *stctxi, unsigned flags, + struct pipe_fence_handle **fence) +{ + struct st_context *st = (struct st_context *) stctxi; + st_flush(st, flags, fence); + if (flags & PIPE_FLUSH_RENDER_CACHE) + st_manager_flush_frontbuffer(st); +} + +static boolean +st_context_teximage(struct st_context_iface *stctxi, + enum st_texture_type target, + int level, enum pipe_format internal_format, + struct pipe_resource *tex, boolean mipmap) +{ + struct st_context *st = (struct st_context *) stctxi; + struct gl_context *ctx = st->ctx; + struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx); + struct gl_texture_object *texObj; + struct gl_texture_image *texImage; + struct st_texture_object *stObj; + struct st_texture_image *stImage; + GLenum internalFormat; + GLuint width, height, depth; + + switch (target) { + case ST_TEXTURE_1D: + target = GL_TEXTURE_1D; + break; + case ST_TEXTURE_2D: + target = GL_TEXTURE_2D; + break; + case ST_TEXTURE_3D: + target = GL_TEXTURE_3D; + break; + case ST_TEXTURE_RECT: + target = GL_TEXTURE_RECTANGLE_ARB; + break; + default: + return FALSE; + break; + } + + texObj = _mesa_select_tex_object(ctx, texUnit, target); + _mesa_lock_texture(ctx, texObj); + + stObj = st_texture_object(texObj); + /* switch to surface based */ + if (!stObj->surface_based) { + _mesa_clear_texture_object(ctx, texObj); + stObj->surface_based = GL_TRUE; + } + + texImage = _mesa_get_tex_image(ctx, texObj, target, level); + stImage = st_texture_image(texImage); + if (tex) { + gl_format texFormat; + + /* + * XXX When internal_format and tex->format differ, st_finalize_texture + * needs to allocate a new texture with internal_format and copy the + * texture here into the new one. It will result in surface_copy being + * called on surfaces whose formats differ. + * + * To avoid that, internal_format is (wrongly) ignored here. A sane fix + * is to use a sampler view. + */ + if (!st_sampler_compat_formats(tex->format, internal_format)) + internal_format = tex->format; + + if (util_format_get_component_bits(internal_format, + UTIL_FORMAT_COLORSPACE_RGB, 3) > 0) + internalFormat = GL_RGBA; + else + internalFormat = GL_RGB; + + texFormat = st_ChooseTextureFormat(ctx, internalFormat, + GL_RGBA, GL_UNSIGNED_BYTE); + + _mesa_init_teximage_fields(ctx, target, texImage, + tex->width0, tex->height0, 1, 0, + internalFormat, texFormat); + + width = tex->width0; + height = tex->height0; + depth = tex->depth0; + + /* grow the image size until we hit level = 0 */ + while (level > 0) { + if (width != 1) + width <<= 1; + if (height != 1) + height <<= 1; + if (depth != 1) + depth <<= 1; + level--; + } + } + else { + _mesa_clear_texture_image(ctx, texImage); + width = height = depth = 0; + } + + pipe_resource_reference(&stImage->pt, tex); + stObj->width0 = width; + stObj->height0 = height; + stObj->depth0 = depth; + + _mesa_dirty_texobj(ctx, texObj, GL_TRUE); + _mesa_unlock_texture(ctx, texObj); + + return TRUE; +} + +static void +st_context_copy(struct st_context_iface *stctxi, + struct st_context_iface *stsrci, unsigned mask) +{ + struct st_context *st = (struct st_context *) stctxi; + struct st_context *src = (struct st_context *) stsrci; + + _mesa_copy_context(src->ctx, st->ctx, mask); +} + +static boolean +st_context_share(struct st_context_iface *stctxi, + struct st_context_iface *stsrci) +{ + struct st_context *st = (struct st_context *) stctxi; + struct st_context *src = (struct st_context *) stsrci; + + return _mesa_share_state(st->ctx, src->ctx); +} + +static void +st_context_destroy(struct st_context_iface *stctxi) +{ + struct st_context *st = (struct st_context *) stctxi; + st_destroy_context(st); +} + +static struct st_context_iface * +st_api_create_context(struct st_api *stapi, struct st_manager *smapi, + const struct st_context_attribs *attribs, + struct st_context_iface *shared_stctxi) +{ + struct st_context *shared_ctx = (struct st_context *) shared_stctxi; + struct st_context *st; + struct pipe_context *pipe; + struct gl_config mode; + gl_api api; + + if (!(stapi->profile_mask & (1 << attribs->profile))) + return NULL; + + switch (attribs->profile) { + case ST_PROFILE_DEFAULT: + api = API_OPENGL; + break; + case ST_PROFILE_OPENGL_ES1: + api = API_OPENGLES; + break; + case ST_PROFILE_OPENGL_ES2: + api = API_OPENGLES2; + break; + case ST_PROFILE_OPENGL_CORE: + default: + return NULL; + break; + } + + pipe = smapi->screen->context_create(smapi->screen, NULL); + if (!pipe) + return NULL; + + st_visual_to_context_mode(&attribs->visual, &mode); + st = st_create_context(api, pipe, &mode, shared_ctx); + if (!st) { + pipe->destroy(pipe); + return NULL; + } + + /* need to perform version check */ + if (attribs->major > 1 || attribs->minor > 0) { + _mesa_compute_version(st->ctx); + + /* is the actual version less than the requested version? */ + if (st->ctx->VersionMajor * 10 + st->ctx->VersionMinor < + attribs->major * 10 + attribs->minor) { + st_destroy_context(st); + return NULL; + } + } + + st->invalidate_on_gl_viewport = + smapi->get_param(smapi, ST_MANAGER_BROKEN_INVALIDATE); + + st->iface.destroy = st_context_destroy; + st->iface.notify_invalid_framebuffer = + st_context_notify_invalid_framebuffer; + st->iface.flush = st_context_flush; + st->iface.teximage = st_context_teximage; + st->iface.copy = st_context_copy; + st->iface.share = st_context_share; + st->iface.st_context_private = (void *) smapi; + + return &st->iface; +} + +static boolean +st_api_make_current(struct st_api *stapi, struct st_context_iface *stctxi, + struct st_framebuffer_iface *stdrawi, + struct st_framebuffer_iface *streadi) +{ + struct st_context *st = (struct st_context *) stctxi; + struct st_framebuffer *stdraw, *stread, *stfb; + boolean ret; + + _glapi_check_multithread(); + + if (st) { + /* reuse/create the draw fb */ + stfb = st_ws_framebuffer(st->ctx->WinSysDrawBuffer); + if (stfb && stfb->iface == stdrawi) { + stdraw = NULL; + st_framebuffer_reference(&stdraw, stfb); + } + else { + stdraw = st_framebuffer_create(stdrawi); + } + + /* reuse/create the read fb */ + stfb = st_ws_framebuffer(st->ctx->WinSysReadBuffer); + if (!stfb || stfb->iface != streadi) + stfb = stdraw; + if (stfb && stfb->iface == streadi) { + stread = NULL; + st_framebuffer_reference(&stread, stfb); + } + else { + stread = st_framebuffer_create(streadi); + } + + if (stdraw && stread) { + st_framebuffer_validate(stdraw, st); + if (stread != stdraw) + st_framebuffer_validate(stread, st); + + /* modify the draw/read buffers of the context */ + if (stdraw->iface) { + st_visual_to_default_buffer(stdraw->iface->visual, + &st->ctx->Color.DrawBuffer[0], NULL); + } + if (stread->iface) { + st_visual_to_default_buffer(stread->iface->visual, + &st->ctx->Pixel.ReadBuffer, NULL); + } + + ret = _mesa_make_current(st->ctx, &stdraw->Base, &stread->Base); + } + else { + struct gl_framebuffer *incomplete = _mesa_get_incomplete_framebuffer(); + ret = _mesa_make_current(st->ctx, incomplete, incomplete); + } + + st_framebuffer_reference(&stdraw, NULL); + st_framebuffer_reference(&stread, NULL); + } + else { + ret = _mesa_make_current(NULL, NULL, NULL); + } + + return ret; +} + +static struct st_context_iface * +st_api_get_current(struct st_api *stapi) +{ + GET_CURRENT_CONTEXT(ctx); + struct st_context *st = (ctx) ? ctx->st : NULL; + + return (st) ? &st->iface : NULL; +} + +static st_proc_t +st_api_get_proc_address(struct st_api *stapi, const char *procname) +{ + return (st_proc_t) _glapi_get_proc_address(procname); +} + +static void +st_api_destroy(struct st_api *stapi) +{ +} + +/** + * Flush the front buffer if the current context renders to the front buffer. + */ +void +st_manager_flush_frontbuffer(struct st_context *st) +{ + struct st_framebuffer *stfb = st_ws_framebuffer(st->ctx->DrawBuffer); + struct st_renderbuffer *strb = NULL; + + if (stfb) + strb = st_renderbuffer(stfb->Base.Attachment[BUFFER_FRONT_LEFT].Renderbuffer); + if (!strb) + return; + + /* never a dummy fb */ + assert(stfb->iface); + stfb->iface->flush_front(stfb->iface, ST_ATTACHMENT_FRONT_LEFT); +} + +/** + * Return the surface of an EGLImage. + * FIXME: I think this should operate on resources, not surfaces + */ +struct pipe_surface * +st_manager_get_egl_image_surface(struct st_context *st, + void *eglimg, unsigned usage) +{ + struct st_manager *smapi = + (struct st_manager *) st->iface.st_context_private; + struct st_egl_image stimg; + struct pipe_surface *ps, surf_tmpl; + + if (!smapi || !smapi->get_egl_image) + return NULL; + + memset(&stimg, 0, sizeof(stimg)); + if (!smapi->get_egl_image(smapi, eglimg, &stimg)) + return NULL; + + memset(&surf_tmpl, 0, sizeof(surf_tmpl)); + surf_tmpl.format = stimg.texture->format; + surf_tmpl.usage = usage; + surf_tmpl.u.tex.level = stimg.level; + surf_tmpl.u.tex.first_layer = stimg.layer; + surf_tmpl.u.tex.last_layer = stimg.layer; + ps = st->pipe->create_surface(st->pipe, stimg.texture, &surf_tmpl); + pipe_resource_reference(&stimg.texture, NULL); + + return ps; +} + +/** + * Re-validate the framebuffers. + */ +void +st_manager_validate_framebuffers(struct st_context *st) +{ + struct st_framebuffer *stdraw = st_ws_framebuffer(st->ctx->DrawBuffer); + struct st_framebuffer *stread = st_ws_framebuffer(st->ctx->ReadBuffer); + + if (stdraw) + st_framebuffer_validate(stdraw, st); + if (stread && stread != stdraw) + st_framebuffer_validate(stread, st); +} + +/** + * Add a color renderbuffer on demand. + */ +boolean +st_manager_add_color_renderbuffer(struct st_context *st, + struct gl_framebuffer *fb, + gl_buffer_index idx) +{ + struct st_framebuffer *stfb = st_ws_framebuffer(fb); + + /* FBO */ + if (!stfb) + return FALSE; + + if (stfb->Base.Attachment[idx].Renderbuffer) + return TRUE; + + switch (idx) { + case BUFFER_FRONT_LEFT: + case BUFFER_BACK_LEFT: + case BUFFER_FRONT_RIGHT: + case BUFFER_BACK_RIGHT: + break; + default: + return FALSE; + break; + } + + if (!st_framebuffer_add_renderbuffer(stfb, idx)) + return FALSE; + + st_framebuffer_update_attachments(stfb); + st_invalidate_state(st->ctx, _NEW_BUFFERS); + + return TRUE; +} + +static const struct st_api st_gl_api = { + "Mesa " MESA_VERSION_STRING, + ST_API_OPENGL, +#if FEATURE_GL + ST_PROFILE_DEFAULT_MASK | +#endif +#if FEATURE_ES1 + ST_PROFILE_OPENGL_ES1_MASK | +#endif +#if FEATURE_ES2 + ST_PROFILE_OPENGL_ES2_MASK | +#endif + 0, + st_api_destroy, + st_api_get_proc_address, + st_api_create_context, + st_api_make_current, + st_api_get_current, +}; + +struct st_api * +st_gl_api_create(void) +{ + return (struct st_api *) &st_gl_api; +} diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in index 1f4e66896..00c315e21 100644 --- a/xorg-server/xkeyboard-config/rules/base.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.xml.in @@ -1,6195 +1,6202 @@ - - - - - - - pc101 - <_description>Generic 101-key PC - Generic - - - - - pc102 - <_description>Generic 102-key (Intl) PC - Generic - - - - - pc104 - <_description>Generic 104-key PC - Generic - - - - - pc105 - <_description>Generic 105-key (Intl) PC - Generic - - - - - dell101 - <_description>Dell 101-key PC - Dell - - - - - latitude - <_description>Dell Latitude series laptop - Dell - - - - - dellm65 - <_description>Dell Precision M65 - Dell - - - - - everex - <_description>Everex STEPnote - Everex - - - - - flexpro - <_description>Keytronic FlexPro - Keytronic - - - - - microsoft - <_description>Microsoft Natural - Microsoft Inc. - - - - - omnikey101 - <_description>Northgate OmniKey 101 - Northgate - - - - - winbook - <_description>Winbook Model XP5 - Generic - - - - - pc98 - <_description>PC-98xx Series - Generic - - - - - a4techKB21 - <_description>A4Tech KB-21 - A4Tech - - - - - a4techKBS8 - <_description>A4Tech KBS-8 - A4Tech - - - - - a4_rfkb23 - <_description>A4Tech Wireless Desktop RFKB-23 - A4Tech - - - - - airkey - <_description>Acer AirKey V - Acer - - - - - azonaRF2300 - <_description>Azona RF2300 wireless Internet Keyboard - Azona - - - - - scorpius - <_description>Advance Scorpius KI - Scorpius - - - - - brother - <_description>Brother Internet Keyboard - Brother - - - - - btc5113rf - <_description>BTC 5113RF Multimedia - BTC - - - - - btc5126t - <_description>BTC 5126T - BTC - - - - - btc6301urf - <_description>BTC 6301URF - BTC - - - - - btc9000 - <_description>BTC 9000 - BTC - - - - - btc9000a - <_description>BTC 9000A - BTC - - - - - btc9001ah - <_description>BTC 9001AH - BTC - - - - - btc5090 - <_description>BTC 5090 - BTC - - - - - btc9019u - <_description>BTC 9019U - BTC - - - - - btc9116u - <_description>BTC 9116U Mini Wireless Internet and Gaming - - - - - cherryblue - <_description>Cherry Blue Line CyBo@rd - - - - - cherryblueb - <_description>Cherry CyMotion Master XPress - Cherry - - - - - cherrybluea - <_description>Cherry Blue Line CyBo@rd (alternate option) - Cherry - - - - - cherrycyboard - <_description>Cherry CyBo@rd USB-Hub - Cherry - - - - - cherrycmexpert - <_description>Cherry CyMotion Expert - Cherry - - - - - cherrybunlim - <_description>Cherry B.UNLIMITED - Cherry - - - - - chicony - <_description>Chicony Internet Keyboard - Chicony - - - - - chicony0108 - <_description>Chicony KU-0108 - Chicony - - - - - chicony0420 - <_description>Chicony KU-0420 - Chicony - - - - - chicony9885 - <_description>Chicony KB-9885 - Chicony - - - - - compaqeak8 - <_description>Compaq Easy Access Keyboard - Compaq - - - - - compaqik7 - <_description>Compaq Internet Keyboard (7 keys) - Compaq - - - - - compaqik13 - <_description>Compaq Internet Keyboard (13 keys) - Compaq - - - - - compaqik18 - <_description>Compaq Internet Keyboard (18 keys) - Compaq - - - - - cymotionlinux - <_description>Cherry CyMotion Master Linux - Cherry - - - - - armada - <_description>Laptop/notebook Compaq (eg. Armada) Laptop Keyboard - Compaq - - - - - presario - <_description>Laptop/notebook Compaq (eg. Presario) Internet Keyboard - Compaq - - - - - ipaq - <_description>Compaq iPaq Keyboard - Compaq - - - - - dell - <_description>Dell - Dell - - - - - dellsk8125 - <_description>Dell SK-8125 - Dell - - - - - dellsk8135 - <_description>Dell SK-8135 - Dell - - - - - dellusbmm - <_description>Dell USB Multimedia Keyboard - Dell - - - - - inspiron - <_description>Dell Laptop/notebook Inspiron 6xxx/8xxx - Dell - - - - - precision_m - <_description>Dell Laptop/notebook Precision M series - Dell - - - - - dexxa - <_description>Dexxa Wireless Desktop Keyboard - Dexxa - - - - - diamond - <_description>Diamond 9801 / 9802 series - Diamond - - - - - dtk2000 - <_description>DTK2000 - - - - - ennyah_dkb1008 - <_description>Ennyah DKB-1008 - Ennyah - - - - - fscaa1667g - <_description>Fujitsu-Siemens Computers AMILO laptop - Fujitsu-Siemens - - - - - genius - <_description>Genius Comfy KB-16M / Genius MM Keyboard KWD-910 - Genius - - - - - geniuscomfy - <_description>Genius Comfy KB-12e - Genius - - - - - geniuscomfy2 - <_description>Genius Comfy KB-21e-Scroll - Genius - - - - - geniuskb19e - <_description>Genius KB-19e NB - Genius - - - - - geniuskkb2050hs - <_description>Genius KKB-2050HS - Genius - - - - - gyration - <_description>Gyration - Gyration - - - - - htcdream - <_description>HTC Dream - HTC - - - - - kinesis - <_description>Kinesis - Kinesis - - - - - logitech_base - <_description>Logitech Generic Keyboard - Logitech - - - - - logitech_g15 - <_description>Logitech G15 extra keys via G15daemon - Logitech - - - - - hpi6 - <_description>Hewlett-Packard Internet Keyboard - Hewlett-Packard - - - - - hp250x - <_description>Hewlett-Packard SK-250x Multimedia Keyboard - Hewlett-Packard - - - - - hpxe3gc - <_description>Hewlett-Packard Omnibook XE3 GC - Hewlett-Packard - - - - - hpxe3gf - <_description>Hewlett-Packard Omnibook XE3 GF - Hewlett-Packard - - - - - hpxt1000 - <_description>Hewlett-Packard Omnibook XT1000 - Hewlett-Packard - - - - - hpdv5 - <_description>Hewlett-Packard Pavilion dv5 - Hewlett-Packard - - - - - hpzt11xx - <_description>Hewlett-Packard Pavilion ZT11xx - Hewlett-Packard - - - - - hp500fa - <_description>Hewlett-Packard Omnibook 500 FA - Hewlett-Packard - - - - - hp5xx - <_description>Hewlett-Packard Omnibook 5xx - Hewlett-Packard - - - - - hpnx9020 - <_description>Hewlett-Packard nx9020 - Hewlett-Packard - - - - - hp6000 - <_description>Hewlett-Packard Omnibook 6000/6100 - Hewlett-Packard - - - - - honeywell_euroboard - <_description>Honeywell Euroboard - Hewlett-Packard - - - - - hpmini110 - <_description>Hewlett-Packard Mini 110 Notebook - Hewlett-Packard - - - - - rapidaccess - <_description>IBM Rapid Access - Lenovo (previously IBM) - - - - - rapidaccess2 - <_description>IBM Rapid Access II - Lenovo (previously IBM) - - - - - thinkpad - <_description>IBM ThinkPad 560Z/600/600E/A22E - Lenovo (previously IBM) - - - - - thinkpad60 - <_description>IBM ThinkPad R60/T60/R61/T61 - Lenovo (previously IBM) - - - - - thinkpadz60 - <_description>IBM ThinkPad Z60m/Z60t/Z61m/Z61t - Lenovo (previously IBM) - - - - - ibm_spacesaver - <_description>IBM Space Saver - Lenovo (previously IBM) - - - - - logiaccess - <_description>Logitech Access Keyboard - Logitech - - - - - logiclx300 - <_description>Logitech Cordless Desktop LX-300 - Logitech - - - - - logii350 - <_description>Logitech Internet 350 Keyboard - Logitech - - - - - logimel - <_description>Logitech Media Elite Keyboard - Logitech - - - - - logicd - <_description>Logitech Cordless Desktop - Logitech - - - - - logicd_it - <_description>Logitech Cordless Desktop iTouch - Logitech - - - - - logicd_nav - <_description>Logitech Cordless Desktop Navigator - Logitech - - - - - logicd_opt - <_description>Logitech Cordless Desktop Optical - Logitech - - - - - logicda - <_description>Logitech Cordless Desktop (alternate option) - Logitech - - - - - logicdpa2 - <_description>Logitech Cordless Desktop Pro (alternate option 2) - Logitech - - - - - logicfn - <_description>Logitech Cordless Freedom/Desktop Navigator - Logitech - - - - - logicdn - <_description>Logitech Cordless Desktop Navigator - Logitech - - - - - logiitc - <_description>Logitech iTouch Cordless Keyboard (model Y-RB6) - Logitech - - - - - logiik - <_description>Logitech Internet Keyboard - Logitech - - - - - itouch - <_description>Logitech iTouch - Logitech - - - - - logicink - <_description>Logitech Internet Navigator Keyboard - Logitech - - - - - logiex110 - <_description>Logitech Cordless Desktop EX110 - Logitech - - - - - logiinkse - <_description>Logitech iTouch Internet Navigator Keyboard SE - Logitech - - - - - logiinkseusb - <_description>Logitech iTouch Internet Navigator Keyboard SE (USB) - Logitech - - - - - logiultrax - <_description>Logitech Ultra-X Keyboard - Logitech - - - - - logiultraxc - <_description>Logitech Ultra-X Cordless Media Desktop Keyboard - Logitech - - - - - logidinovo - <_description>Logitech diNovo Keyboard - Logitech - - - - - logidinovoedge - <_description>Logitech diNovo Edge Keyboard - Logitech - - - - - mx1998 - <_description>Memorex MX1998 - Memorex - - - - - mx2500 - <_description>Memorex MX2500 EZ-Access Keyboard - Memorex - - - - - mx2750 - <_description>Memorex MX2750 - Memorex - - - - - microsoft7000 - <_description>Microsoft Natural Wireless Ergonomic Keyboard 7000 - Microsoft Inc. - - - - - microsoftinet - <_description>Microsoft Internet Keyboard - Microsoft Inc. - - - - - microsoftpro - <_description>Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro - Microsoft Inc. - - - - - microsoftprousb - <_description>Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro - Microsoft Inc. - - - - - microsoftprooem - <_description>Microsoft Natural Keyboard Pro OEM - Microsoft Inc. - - - - - vsonku306 - <_description>ViewSonic KU-306 Internet Keyboard - ViewSonic - - - - - microsoftprose - <_description>Microsoft Internet Keyboard Pro, Swedish - Microsoft Inc. - - - - - microsoftoffice - <_description>Microsoft Office Keyboard - Microsoft Inc. - - - - - microsoftmult - <_description>Microsoft Wireless Multimedia Keyboard 1.0A - Microsoft Inc. - - - - - microsoftelite - <_description>Microsoft Natural Keyboard Elite - Microsoft Inc. - - - - - microsoftccurve2k - <_description>Microsoft Comfort Curve Keyboard 2000 - Microsoft Inc. - - - - - oretec - <_description>Ortek MCK-800 MM/Internet keyboard - Ortek - - - - - propeller - <_description>Propeller Voyager (KTEZ-1000) - KeyTronic - - - - - qtronix - <_description>QTronix Scorpius 98N+ - QTronix - - - - - samsung4500 - <_description>Samsung SDM 4500P - Samsung - - - - - samsung4510 - <_description>Samsung SDM 4510P - Samsung - - - - - sanwaskbkg3 - <_description>Sanwa Supply SKB-KG3 - Sanwa Supply Inc. - - - - - sk1300 - <_description>SK-1300 - NEC - - - - - sk2500 - <_description>SK-2500 - NEC - - - - - sk6200 - <_description>SK-6200 - NEC - - - - - sk7100 - <_description>SK-7100 - NEC - - - - - sp_inet - <_description>Super Power Multimedia Keyboard - Generic - - - - - sven - <_description>SVEN Ergonomic 2500 - SVEN - - - - - sven303 - <_description>SVEN Slim 303 - SVEN - - - - - symplon - <_description>Symplon PaceBook (tablet PC) - Symplon - - - - - toshiba_s3000 - <_description>Toshiba Satellite S3000 - Toshiba - - - - - trust - <_description>Trust Wireless Keyboard Classic - Trust - - - - - trustda - <_description>Trust Direct Access Keyboard - Trust - - - - - trust_slimline - <_description>Trust Slimline - Trust - - - - - tm2020 - <_description>TypeMatrix EZ-Reach 2020 - TypeMatrix - - - - - tm2030PS2 - <_description>TypeMatrix EZ-Reach 2030 PS2 - TypeMatrix - - - - - tm2030USB - <_description>TypeMatrix EZ-Reach 2030 USB - TypeMatrix - - - - - tm2030USB-102 - <_description>TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) - TypeMatrix - - - - - tm2030USB-106 - <_description>TypeMatrix EZ-Reach 2030 USB (106:JP mode) - TypeMatrix - - - - - yahoo - <_description>Yahoo! Internet Keyboard - Yahoo! - - - - - macbook78 - <_description>MacBook/MacBook Pro - Apple - - - - - macbook79 - <_description>MacBook/MacBook Pro (Intl) - Apple - - - - - macintosh - <_description>Macintosh - Apple - - - - - macintosh_old - <_description>Macintosh Old - Apple - - - - - macintosh_hhk - <_description>Happy Hacking Keyboard for Mac - Fujitsu - - - - - acer_c300 - <_description>Acer C300 - Acer - - - - - acer_ferrari4k - <_description>Acer Ferrari 4000 - Acer - - - - - acer_laptop - <_description>Acer Laptop - Acer - - - - - asus_laptop - <_description>Asus Laptop - Asus - - - - - apple - <_description>Apple - Apple - - - - - apple_laptop - <_description>Apple Laptop - Apple - - - - - applealu_ansi - <_description>Apple Aluminium Keyboard (ANSI) - Apple - - - - - applealu_iso - <_description>Apple Aluminium Keyboard (ISO) - Apple - - - - - applealu_jis - <_description>Apple Aluminium Keyboard (JIS) - Apple - - - - - silvercrest - <_description>SILVERCREST Multimedia Wireless Keyboard - Silvercrest - - - - - emachines - <_description>Laptop/notebook eMachines m68xx - eMachines - - - - - benqx - <_description>BenQ X-Touch - BenQ - - - - - benqx730 - <_description>BenQ X-Touch 730 - BenQ - - - - - benqx800 - <_description>BenQ X-Touch 800 - BenQ - - - - - hhk - <_description>Happy Hacking Keyboard - Fujitsu - - - - - classmate - <_description>Classmate PC - Intel - - - - - olpc - <_description>OLPC - OLPC - - - - - sun6 - <_description>Sun Type 5/6 - Sun Microsystems - - - - - targa_v811 - <_description>Targa Visionary 811 - Targa - - - - - unitekkb1925 - <_description>Unitek KB-1925 - Unitek Group - - - - - compalfl90 - <_description>FL90 - Compal Electronics Inc. - - - - - creativedw7000 - <_description>Creative Desktop Wireless 7000 - Creative - - - - - htcdream - <_description>Htc Dream phone - htc - - - - - - - us - <_shortDescription>USA - <_description>USA - - eng - - - - - - chr - <_description>USA - Cherokee - - chr - - - - - - euro - <_description>USA - With EuroSign on 5 - - - - - intl - <_description>USA - International (with dead keys) - - - - - alt-intl - <_description>USA - Alternative international - - - - - colemak - <_description>USA - Colemak - - - - - dvorak - <_description>USA - Dvorak - - - - - dvorak-intl - <_description>USA - Dvorak international (with dead keys) - - - - - dvorak-alt-intl - <_description>USA - Dvorak alternative international (no dead keys) - - - - - dvorak-l - <_description>USA - Left handed Dvorak - - - - - dvorak-r - <_description>USA - Right handed Dvorak - - - - - dvorak-classic - <_description>USA - Classic Dvorak - - - - - dvp - <_description>USA - Programmer Dvorak - - - - - rus - <_description>USA - Russian phonetic - - rus - - - - - - mac - <_description>USA - Macintosh - - - - - altgr-intl - <_description>USA - International (AltGr dead keys) - eng - fra - ger - - - - - olpc2 - <_description>USA - Layout toggle on multiply/divide key - - - - - hbs - <_description>USA - Serbo-Croatian - eng - bos - hbs - hrv - srp - - - - - - - ad - <_shortDescription>And - <_description>Andorra - - cat - - - - - - - af - <_shortDescription>Afg - <_description>Afghanistan - - - - - ps - <_description>Afghanistan - Pashto - - pus - - - - - - uz - <_description>Afghanistan - Southern Uzbek - - uzb - - - - - - olpc-ps - <_description>Afghanistan - OLPC Pashto - - pus - - - - - - fa-olpc - <_description>Afghanistan - OLPC Dari - - - - - uz-olpc - <_description>Afghanistan - OLPC Southern Uzbek - - uzb - - - - - - - - ara - <_shortDescription>Ara - <_description>Arabic - - AE - BH - DZ - EG - EH - JO - KW - LB - LY - MA - MR - OM - PS - QA - SA - SD - SY - TN - YE - - - ara - - - - - - azerty - <_description>Arabic - azerty - - - - - azerty_digits - <_description>Arabic - azerty/digits - - - - - digits - <_description>Arabic - digits - - - - - qwerty - <_description>Arabic - qwerty - - - - - qwerty_digits - <_description>Arabic - qwerty/digits - - - - - buckwalter - <_description>Arabic - Buckwalter - - - - - - - al - <_shortDescription>Alb - <_description>Albania - - alb - - - - - - - am - <_shortDescription>Arm - <_description>Armenia - - hye - - - - - - phonetic - <_description>Armenia - Phonetic - - - - - phonetic-alt - <_description>Armenia - Alternative Phonetic - - - - - eastern - <_description>Armenia - Eastern - - - - - western - <_description>Armenia - Western - - - - - eastern-alt - <_description>Armenia - Alternative Eastern - - - - - - - at - <_shortDescription>Aut - <_description>Austria - - ger - - - - - - nodeadkeys - <_description>Austria - Eliminate dead keys - - - - - sundeadkeys - <_description>Austria - Sun dead keys - - - - - mac - <_description>Austria - Macintosh - - - - - - - az - <_shortDescription>Aze - <_description>Azerbaijan - - aze - - - - - - cyrillic - <_description>Azerbaijan - Cyrillic - - - - - - - by - <_shortDescription>Blr - <_description>Belarus - - bel - - - - - - legacy - <_description>Belarus - Legacy - - - - - latin - <_description>Belarus - Latin - - - - - - - be - <_shortDescription>Bel - <_description>Belgium - ger - nld - fra - - - - - oss - <_description>Belgium - Alternative - - - - - oss_latin9 - <_description>Belgium - Alternative, latin-9 only - - - - - oss_sundeadkeys - <_description>Belgium - Alternative, Sun dead keys - - - - - iso-alternate - <_description>Belgium - ISO Alternate - - - - - nodeadkeys - <_description>Belgium - Eliminate dead keys - - - - - sundeadkeys - <_description>Belgium - Sun dead keys - - - - - wang - <_description>Belgium - Wang model 724 azerty - - - - - - - bd - <_shortDescription>Bgd - <_description>Bangladesh - - ben - - - - - - probhat - <_description>Bangladesh - Probhat - - - - - - - in - <_shortDescription>Ind - <_description>India - - - - - ben - <_description>India - Bengali - - ben - - - - - - ben_probhat - <_description>India - Bengali Probhat - - ben - - - - - - guj - <_description>India - Gujarati - - guj - - - - - - guru - <_description>India - Gurmukhi - - pan - - - - - - jhelum - <_description>India - Gurmukhi Jhelum - - pan - - - - - - kan - <_description>India - Kannada - - kan - - - - - - mal - <_description>India - Malayalam - - mal - - - - - - mal_lalitha - <_description>India - Malayalam Lalitha - - mal - - - - - - ori - <_description>India - Oriya - - ori - - - - - - tam_unicode - <_description>India - Tamil Unicode - - tam - - - - - - tam_keyboard_with_numerals - <_description>India - Tamil Keyboard with Numerals - - tam - - - - - - tam_TAB - <_description>India - Tamil TAB Typewriter - - tam - - - - - - tam_TSCII - <_description>India - Tamil TSCII Typewriter - - tam - - - - - - tam - <_description>India - Tamil - - tam - - - - - - tel - <_description>India - Telugu - - tel - - - - - - urd-phonetic - <_description>India - Urdu, Phonetic - - urd - - - - - - urd-phonetic3 - <_description>India - Urdu, Alternative phonetic - - urd - - - - - - urd-winkeys - <_description>India - Urdu, Winkeys - - urd - - - - - - bolnagri - <_description>India - Hindi Bolnagri - - hin - - - - - - hin-wx - <_description>India - Hindi Wx - - hin - - - - - - eng - <_description>India - English with RupeeSign - - eng - - - - - - - - ba - <_shortDescription>Bih - <_description>Bosnia and Herzegovina - - bos - - - - - - alternatequotes - <_description>Bosnia and Herzegovina - Use guillemets for quotes - - - - - unicode - <_description>Bosnia and Herzegovina - Use Bosnian digraphs - - - - - unicodeus - <_description>Bosnia and Herzegovina - US keyboard with Bosnian digraphs - - - - - us - <_description>Bosnia and Herzegovina - US keyboard with Bosnian letters - - - - - - - br - <_shortDescription>Bra - <_description>Brazil - - por - - - - - - nodeadkeys - <_description>Brazil - Eliminate dead keys - - - - - dvorak - <_description>Brazil - Dvorak - - - - - nativo - <_description>Brazil - Nativo - - - - - nativo-us - <_description>Brazil - Nativo for USA keyboards - - - - - nativo-epo - <_description>Brazil - Nativo for Esperanto - - epo - - - - - - - - bg - <_shortDescription>Bgr - <_description>Bulgaria - - bul - - - - - - phonetic - <_description>Bulgaria - Traditional phonetic - - - - - bas_phonetic - <_description>Bulgaria - New phonetic - - - - - - - ma - <_description>Morocco - - - - - french - <_description>Morocco - French - - fra - - - - - - tifinagh - <_description>Morocco - Tifinagh - - ber - - - - - - tifinagh-alt - <_description>Morocco - Tifinagh alternative - - ber - - - - - - tifinagh-alt-phonetic - <_description>Morocco - Tifinagh alternative phonetic - - ber - - - - - - tifinagh-extended - <_description>Morocco - Tifinagh extended - - ber - - - - - - tifinagh-phonetic - <_description>Morocco - Tifinagh phonetic - - ber - - - - - - tifinagh-extended-phonetic - <_description>Morocco - Tifinagh extended phonetic - - ber - - - - - - - - mm - <_shortDescription>Mmr - <_description>Myanmar - - mya - - - - - - - ca - <_shortDescription>Can - <_description>Canada - - fra - - - - - - fr-dvorak - <_description>Canada - French Dvorak - - - - - fr-legacy - <_description>Canada - French (legacy) - - - - - multix - <_description>Canada - Multilingual - - - - - multi - <_description>Canada - Multilingual, first part - - - - - multi-2gr - <_description>Canada - Multilingual, second part - - - - - ike - <_description>Canada - Inuktitut - - iku - - - - - - shs - <_description>Canada - Secwepemctsin - - - - - kut - <_description>Canada - Ktunaxa - - - - - eng - <_description>Canada - English - - eng - - - - - - - - cd - <_shortDescription>COD - <_description>Congo, Democratic Republic of the - - fra - - - - - - - cn - <_shortDescription>Chn - <_description>China - - chi - - - - - - tib - <_description>China - Tibetan - - tib - - - - - - tib_asciinum - <_description>China - Tibetan (with ASCII numerals) - - tib - - - - - - uig - <_description>China - Uyghur - - uig - - - - - - - - hr - <_shortDescription>Hrv - <_description>Croatia - - scr - - - - - - alternatequotes - <_description>Croatia - Use guillemets for quotes - - - - - unicode - <_description>Croatia - Use Croatian digraphs - - - - - unicodeus - <_description>Croatia - US keyboard with Croatian digraphs - - - - - us - <_description>Croatia - US keyboard with Croatian letters - - - - - - - cz - <_shortDescription>Cze - <_description>Czechia - - cze - - - - - - bksl - <_description>Czechia - With <\|> key - - - - - qwerty - <_description>Czechia - qwerty - - - - - qwerty_bksl - <_description>Czechia - qwerty, extended Backslash - - - - - ucw - <_description>Czechia - UCW layout (accented letters only) - - - - - dvorak-ucw - <_description>Czechia - US Dvorak with CZ UCW support - - - - - - - dk - <_shortDescription>Dnk - <_description>Denmark - - dan - - - - - - nodeadkeys - <_description>Denmark - Eliminate dead keys - - - - - mac - <_description>Denmark - Macintosh - - - - - mac_nodeadkeys - <_description>Denmark - Macintosh, eliminate dead keys - - - - - dvorak - <_description>Denmark - Dvorak - - - - - - - nl - <_shortDescription>Nld - <_description>Netherlands - - nld - - - - - - sundeadkeys - <_description>Netherlands - Sun dead keys - - - - - mac - <_description>Netherlands - Macintosh - - - - - std - <_description>Netherlands - Standard - - - - - - - bt - <_shortDescription>Btn - <_description>Bhutan - - dzo - - - - - - ee - <_shortDescription>Est - <_description>Estonia - - est - - - - - - nodeadkeys - <_description>Estonia - Eliminate dead keys - - - - - dvorak - <_description>Estonia - Dvorak - - - - - us - <_description>Estonia - US keyboard with Estonian letters - - - - - - - ir - <_shortDescription>Irn - <_description>Iran - - per - - - - - - pes_keypad - <_description>Iran - Persian, with Persian Keypad - - - - - ku - <_description>Iran - Kurdish, Latin Q - - kur - - - - - - ku_f - <_description>Iran - Kurdish, (F) - - kur - - - - - - ku_alt - <_description>Iran - Kurdish, Latin Alt-Q - - kur - - - - - - ku_ara - <_description>Iran - Kurdish, Arabic-Latin - - kur - - - - - - - - iq - <_shortDescription>Irq - <_description>Iraq - ara - kur - - - - - ku - <_description>Iraq - Kurdish, Latin Q - - kur - - - - - - ku_f - <_description>Iraq - Kurdish, (F) - - kur - - - - - - ku_alt - <_description>Iraq - Kurdish, Latin Alt-Q - - kur - - - - - - ku_ara - <_description>Iraq - Kurdish, Arabic-Latin - - kur - - - - - - - - fo - <_shortDescription>Fro - <_description>Faroe Islands - - fao - - - - - - nodeadkeys - <_description>Faroe Islands - Eliminate dead keys - - - - - - - fi - <_shortDescription>Fin - <_description>Finland - - fin - - - - - - classic - <_description>Finland - Classic - - - - - nodeadkeys - <_description>Finland - Classic, eliminate dead keys - - - - - smi - <_description>Finland - Northern Saami - smi - sme - - - - - mac - <_description>Finland - Macintosh - - - - - - - fr - <_shortDescription>Fra - <_description>France - - fra - - - - - - nodeadkeys - <_description>France - Eliminate dead keys - - - - - sundeadkeys - <_description>France - Sun dead keys - - - - - oss - <_description>France - Alternative - - - - - oss_latin9 - <_description>France - Alternative, latin-9 only - - - - - oss_nodeadkeys - <_description>France - Alternative, eliminate dead keys - - - - - oss_sundeadkeys - <_description>France - Alternative, Sun dead keys - - - - - latin9 - <_description>France - (Legacy) Alternative - - - - - latin9_nodeadkeys - <_description>France - (Legacy) Alternative, eliminate dead keys - - - - - latin9_sundeadkeys - <_description>France - (Legacy) Alternative, Sun dead keys - - - - - bepo - <_description>France - Bepo, ergonomic, Dvorak way - - - - - bepo_latin9 - <_description>France - Bepo, ergonomic, Dvorak way, latin-9 only - - - - - dvorak - <_description>France - Dvorak - - - - - mac - <_description>France - Macintosh - - - - - bre - <_description>France - Breton - - - - - oci - <_description>France - Occitan - - oci - - - - - - geo - <_description>France - Georgian AZERTY Tskapo - - geo - - - - - - - - gh - <_shortDescription>Gha - <_description>Ghana - - eng - - - - - - generic - <_description>Ghana - Multilingual - - - - - akan - <_description>Ghana - Akan - - aka - - - - - - ewe - <_description>Ghana - Ewe - - ewe - - - - - - fula - <_description>Ghana - Fula - - ful - - - - - - ga - <_description>Ghana - Ga - - gaa - - - - - - hausa - <_description>Ghana - Hausa - - hau - - - - - - avn - <_description>Ghana - Avatime - - avn - - - - - - gillbt - <_description>Ghana - GILLBT - - - - - - - gn - <_shortDescription>Gin - <_description>Guinea - - fra - - - - - - - ge - <_shortDescription>Geo - <_description>Georgia - - geo - - - - - - ergonomic - <_description>Georgia - Ergonomic - - - - - mess - <_description>Georgia - MESS - - - - - ru - <_description>Georgia - Russian - - rus - - - - - - os - <_description>Georgia - Ossetian - - oss - - - - - - - - de - <_shortDescription>Deu - <_description>Germany - - ger - - - - - - deadacute - <_description>Germany - Dead acute - - - - - deadgraveacute - <_description>Germany - Dead grave acute - - - - - nodeadkeys - <_description>Germany - Eliminate dead keys - - - - - ro - <_description>Germany - Romanian keyboard with German letters - - - - - ro_nodeadkeys - <_description>Germany - Romanian keyboard with German letters, eliminate dead keys - - - - - dvorak - <_description>Germany - Dvorak - - - - - sundeadkeys - <_description>Germany - Sun dead keys - - - - - neo - <_description>Germany - Neo 2 - - - - - mac - <_description>Germany - Macintosh - - - - - mac_nodeadkeys - <_description>Germany - Macintosh, eliminate dead keys - - - - - dsb - <_description>Germany - Lower Sorbian - - dsb - - - - - - dsb_qwertz - <_description>Germany - Lower Sorbian (qwertz) - - dsb - - - - - - qwerty - <_description>Germany - qwerty - - - - - ru - <_description>Germany - Russian phonetic - - rus - - - - - - - - gr - <_shortDescription>Grc - <_description>Greece - - gre - - - - - - simple - <_description>Greece - Simple - - - - - extended - <_description>Greece - Extended - - - - - nodeadkeys - <_description>Greece - Eliminate dead keys - - - - - polytonic - <_description>Greece - Polytonic - - - - - - - hu - <_shortDescription>Hun - <_description>Hungary - - hun - - - - - - standard - <_description>Hungary - Standard - - - - - nodeadkeys - <_description>Hungary - Eliminate dead keys - - - - - qwerty - <_description>Hungary - qwerty - - - - - 101_qwertz_comma_dead - <_description>Hungary - 101/qwertz/comma/Dead keys - - - - - 101_qwertz_comma_nodead - <_description>Hungary - 101/qwertz/comma/Eliminate dead keys - - - - - 101_qwertz_dot_dead - <_description>Hungary - 101/qwertz/dot/Dead keys - - - - - 101_qwertz_dot_nodead - <_description>Hungary - 101/qwertz/dot/Eliminate dead keys - - - - - 101_qwerty_comma_dead - <_description>Hungary - 101/qwerty/comma/Dead keys - - - - - 101_qwerty_comma_nodead - <_description>Hungary - 101/qwerty/comma/Eliminate dead keys - - - - - 101_qwerty_dot_dead - <_description>Hungary - 101/qwerty/dot/Dead keys - - - - - 101_qwerty_dot_nodead - <_description>Hungary - 101/qwerty/dot/Eliminate dead keys - - - - - 102_qwertz_comma_dead - <_description>Hungary - 102/qwertz/comma/Dead keys - - - - - 102_qwertz_comma_nodead - <_description>Hungary - 102/qwertz/comma/Eliminate dead keys - - - - - 102_qwertz_dot_dead - <_description>Hungary - 102/qwertz/dot/Dead keys - - - - - 102_qwertz_dot_nodead - <_description>Hungary - 102/qwertz/dot/Eliminate dead keys - - - - - 102_qwerty_comma_dead - <_description>Hungary - 102/qwerty/comma/Dead keys - - - - - 102_qwerty_comma_nodead - <_description>Hungary - 102/qwerty/comma/Eliminate dead keys - - - - - 102_qwerty_dot_dead - <_description>Hungary - 102/qwerty/dot/Dead keys - - - - - 102_qwerty_dot_nodead - <_description>Hungary - 102/qwerty/dot/Eliminate dead keys - - - - - - - is - <_shortDescription>Isl - <_description>Iceland - - ice - - - - - - Sundeadkeys - <_description>Iceland - Sun dead keys - - - - - nodeadkeys - <_description>Iceland - Eliminate dead keys - - - - - mac - <_description>Iceland - Macintosh - - - - - dvorak - <_description>Iceland - Dvorak - - - - - - - il - <_shortDescription>Isr - <_description>Israel - - heb - - - - - - lyx - <_description>Israel - lyx - - - - - phonetic - <_description>Israel - Phonetic - - - - - biblical - <_description>Israel - Biblical Hebrew (Tiro) - - - - - - - it - <_shortDescription>Ita - <_description>Italy - - ita - - - - - - nodeadkeys - <_description>Italy - Eliminate dead keys - - - - - mac - <_description>Italy - Macintosh - - - - - us - <_description>Italy - US keyboard with Italian letters - - - - - geo - <_description>Italy - Georgian - - geo - - - - - - - - jp - <_shortDescription>Jpn - <_description>Japan - - jpn - - - - - - kana - <_description>Japan - Kana - - - - - kana86 - <_description>Japan - Kana 86 - - - - - OADG109A - <_description>Japan - OADG 109A - - - - - mac - <_description>Japan - Macintosh - - - - - - - kg - <_shortDescription>Kgz - <_description>Kyrgyzstan - - kir - - - - - - phonetic - <_description>Kyrgyzstan - Phonetic - - - - - - - kh - <_shortDescription>Khm - <_description>Cambodia - - khm - - - - - - - kz - <_shortDescription>Kaz - <_description>Kazakhstan - - kaz - - - - - - ruskaz - <_description>Kazakhstan - Russian with Kazakh - kaz - rus - - - - - kazrus - <_description>Kazakhstan - Kazakh with Russian - kaz - rus - - - - - - - la - <_shortDescription>Lao - <_description>Laos - - lao - - - - - - stea - <_description>Laos - STEA (proposed standard layout) - lao - - - - - - - - latam - <_shortDescription>Esp - <_description>Latin American - - AR - BO - CL - CO - CR - CU - DO - EC - GT - HN - HT - MX - NI - PA - PE - PR - PY - SV - US - UY - VE - - - spa - - - - - - nodeadkeys - <_description>Latin American - Eliminate dead keys - - - - - deadtilde - <_description>Latin American - Include dead tilde - - - - - sundeadkeys - <_description>Latin American - Sun dead keys - - - - - - - lt - <_shortDescription>Ltu - <_description>Lithuania - - lit - - - - - - std - <_description>Lithuania - Standard - - - - - us - <_description>Lithuania - US keyboard with Lithuanian letters - - - - - ibm - <_description>Lithuania - IBM (LST 1205-92) - - - - - lekp - <_description>Lithuania - LEKP - - - - - lekpa - <_description>Lithuania - LEKPa - - - - - - - lv - <_shortDescription>Lva - <_description>Latvia - - lav - - - - - - apostrophe - <_description>Latvia - Apostrophe (') variant - - - - - tilde - <_description>Latvia - Tilde (~) variant - - - - - fkey - <_description>Latvia - F-letter (F) variant - - - - - - - mao - <_shortDescription>Mao - <_description>Maori - - mao - - - - - - - me - <_shortDescription>MNE - <_description>Montenegro - - srp - - - - - - cyrillic - <_description>Montenegro - Cyrillic - - - - - cyrillicyz - <_description>Montenegro - Cyrillic, Z and ZHE swapped - - - - - latinunicode - <_description>Montenegro - Latin unicode - - - - - latinyz - <_description>Montenegro - Latin qwerty - - - - - latinunicodeyz - <_description>Montenegro - Latin unicode qwerty - - - - - cyrillicalternatequotes - <_description>Montenegro - Cyrillic with guillemets - - - - - latinalternatequotes - <_description>Montenegro - Latin with guillemets - - - - - - - mk - <_shortDescription>Mkd - <_description>Macedonia - - mkd - - - - - - nodeadkeys - <_description>Macedonia - Eliminate dead keys - - - - - - - mt - <_shortDescription>Mlt - <_description>Malta - - mlt - - - - - - us - <_description>Malta - Maltese keyboard with US layout - - - - - - - mn - <_shortDescription>Mng - <_description>Mongolia - - mng - - - - - - - no - <_shortDescription>Nor - <_description>Norway - - nor - - - - - - nodeadkeys - <_description>Norway - Eliminate dead keys - - - - - dvorak - <_description>Norway - Dvorak - - - - - smi - <_description>Norway - Northern Saami - - sme - - - - - - smi_nodeadkeys - <_description>Norway - Northern Saami, eliminate dead keys - - sme - - - - - - mac - <_description>Norway - Macintosh - - - - - mac_nodeadkeys - <_description>Norway - Macintosh, eliminate dead keys - - - - - - - pl - <_shortDescription>Pol - <_description>Poland - - pol - - - - - - qwertz - <_description>Poland - qwertz - - - - - dvorak - <_description>Poland - Dvorak - - - - - dvorak_quotes - <_description>Poland - Dvorak, Polish quotes on quotemark key - - - - - dvorak_altquotes - <_description>Poland - Dvorak, Polish quotes on key 1 - - - - - csb - <_description>Poland - Kashubian - - csb - - - - - - ru_phonetic_dvorak - <_description>Poland - Russian phonetic Dvorak - - rus - - - - - - dvp - <_description>Poland - Programmer Dvorak - - - - - - - pt - <_shortDescription>Prt - <_description>Portugal - - por - - - - - - nodeadkeys - <_description>Portugal - Eliminate dead keys - - - - - sundeadkeys - <_description>Portugal - Sun dead keys - - - - - mac - <_description>Portugal - Macintosh - - - - - mac_nodeadkeys - <_description>Portugal - Macintosh, eliminate dead keys - - - - - mac_sundeadkeys - <_description>Portugal - Macintosh, Sun dead keys - - - - - nativo - <_description>Portugal - Nativo - - - - - nativo-us - <_description>Portugal - Nativo for USA keyboards - - - - - nativo-epo - <_description>Portugal - Nativo for Esperanto - - epo - - - - - - - - ro - <_shortDescription>Rou - <_description>Romania - - rum - - - - - - cedilla - <_description>Romania - Cedilla - - - - - std - <_description>Romania - Standard - - - - - std_cedilla - <_description>Romania - Standard (Cedilla) - - - - - winkeys - <_description>Romania - Winkeys - - - - - crh_f - <_description>Romania - Crimean Tatar (Turkish F) - - crh - - - - - - crh_alt - <_description>Romania - Crimean Tatar (Turkish Alt-Q) - - crh - - - - - - crh_dobruca1 - <_description>Romania - Crimean Tatar (Dobruca-1 Q) - - crh - - - - - - crh_dobruca2 - <_description>Romania - Crimean Tatar (Dobruca-2 Q) - - crh - - - - - - - - ru - <_shortDescription>Rus - <_description>Russia - - rus - - - - - - phonetic - <_description>Russia - Phonetic - - - - - phonetic_winkeys - <_description>Russia - Phonetic Winkeys - - - - - typewriter - <_description>Russia - Typewriter - - - - - legacy - <_description>Russia - Legacy - - - - - typewriter-legacy - <_description>Russia - Typewriter, legacy - - - - - tt - <_description>Russia - Tatar - - tat - - - - - - os_legacy - <_description>Russia - Ossetian, legacy - - oss - - - - - - os_winkeys - <_description>Russia - Ossetian, Winkeys - - oss - - - - - - cv - <_description>Russia - Chuvash - - chv - - - - - - cv_latin - <_description>Russia - Chuvash Latin - - chv - - - - - - udm - <_description>Russia - Udmurt - - udm - - - - - - kom - <_description>Russia - Komi - - kom - - - - - - sah - <_description>Russia - Yakut - - sah - - - - - - xal - <_description>Russia - Kalmyk - - xal - - - - - - dos - <_description>Russia - DOS - - - - - srp - <_description>Russia - Serbian - rus - srp - - - - - bak - <_description>Russia - Bashkirian - - bak - - - - - - chm - <_description>Russia - Mari - - chm - - - - - - - - rs - <_shortDescription>SRB - <_description>Serbia - - srp - - - - - - yz - <_description>Serbia - Z and ZHE swapped - - - - - latin - <_description>Serbia - Latin - - - - - latinunicode - <_description>Serbia - Latin Unicode - - - - - latinyz - <_description>Serbia - Latin qwerty - - - - - latinunicodeyz - <_description>Serbia - Latin Unicode qwerty - - - - - alternatequotes - <_description>Serbia - With guillemets - - - - - latinalternatequotes - <_description>Serbia - Latin with guillemets - - - - - rue - <_description>Serbia - Pannonian Rusyn Homophonic - - rue - - - - - - - - si - <_shortDescription>Svn - <_description>Slovenia - - slv - - - - - - alternatequotes - <_description>Slovenia - Use guillemets for quotes - - - - - us - <_description>Slovenia - US keyboard with Slovenian letters - - - - - - - sk - <_shortDescription>Svk - <_description>Slovakia - - slo - - - - - - bksl - <_description>Slovakia - Extended Backslash - - - - - qwerty - <_description>Slovakia - qwerty - - - - - qwerty_bksl - <_description>Slovakia - qwerty, extended Backslash - - - - - - - es - <_shortDescription>Esp - <_description>Spain - - spa - - - - - - nodeadkeys - <_description>Spain - Eliminate dead keys - - - - - deadtilde - <_description>Spain - Include dead tilde - - - - - sundeadkeys - <_description>Spain - Sun dead keys - - - - - dvorak - <_description>Spain - Dvorak - - - - - ast - <_description>Spain - Asturian variant with bottom-dot H and bottom-dot L - - ast - - - - - - cat - <_description>Spain - Catalan variant with middle-dot L - - cat - - - - - - mac - <_description>Spain - Macintosh - - - - - - - se - <_shortDescription>Swe - <_description>Sweden - - swe - - - - - - nodeadkeys - <_description>Sweden - Eliminate dead keys - - - - - dvorak - <_description>Sweden - Dvorak - - - - - rus - <_description>Sweden - Russian phonetic - - rus - - - - - - rus_nodeadkeys - <_description>Sweden - Russian phonetic, eliminate dead keys - - rus - - - - - - smi - <_description>Sweden - Northern Saami - - sme - - - - - - mac - <_description>Sweden - Macintosh - - - - - svdvorak - <_description>Sweden - Svdvorak - - - - - - - ch - <_shortDescription>Che - <_description>Switzerland - ger - gsw - - - - - legacy - <_description>Switzerland - Legacy - - - - - de_nodeadkeys - <_description>Switzerland - German, eliminate dead keys - - - - - de_sundeadkeys - <_description>Switzerland - German, Sun dead keys - - - - - fr - <_description>Switzerland - French - - fra - - - - - - fr_nodeadkeys - <_description>Switzerland - French, eliminate dead keys - - fra - - - - - - fr_sundeadkeys - <_description>Switzerland - French, Sun dead keys - - fra - - - - - - fr_mac - <_description>Switzerland - French (Macintosh) - - fra - - - - - - de_mac - <_description>Switzerland - German (Macintosh) - - - - - - - sy - <_shortDescription>Syr - <_description>Syria - - syr - - - - - - syc - <_description>Syria - Syriac - - - - - syc_phonetic - <_description>Syria - Syriac phonetic - - - - - ku - <_description>Syria - Kurdish, Latin Q - - kur - - - - - - ku_f - <_description>Syria - Kurdish, (F) - - kur - - - - - - ku_alt - <_description>Syria - Kurdish, Latin Alt-Q - - kur - - - - - - - - tj - <_shortDescription>Tjk - <_description>Tajikistan - - tgk - - - - - - legacy - <_description>Tajikistan - Legacy - - - - - - - lk - <_shortDescription>Lka - <_description>Sri Lanka - - sin - - - - - - tam_unicode - <_description>Sri Lanka - Tamil Unicode - - tam - - - - - - tam_TAB - <_description>Sri Lanka - Tamil TAB Typewriter - - tam - - - - - - - - th - <_shortDescription>Tha - <_description>Thailand - - tha - - - - - - tis - <_description>Thailand - TIS-820.2538 - - - - - pat - <_description>Thailand - Pattachote - - - - - - - tr - <_shortDescription>Tur - <_description>Turkey - - tur - - - - - - f - <_description>Turkey - (F) - - - - - alt - <_description>Turkey - Alt-Q - - - - - sundeadkeys - <_description>Turkey - Sun dead keys - - - - - ku - <_description>Turkey - Kurdish, Latin Q - - kur - - - - - - ku_f - <_description>Turkey - Kurdish, (F) - - kur - - - - - - ku_alt - <_description>Turkey - Kurdish, Latin Alt-Q - - kur - - - - - - intl - <_description>Turkey - International (with dead keys) - - - - - crh - <_description>Turkey - Crimean Tatar (Turkish Q) - - crh - - - - - - crh_f - <_description>Turkey - Crimean Tatar (Turkish F) - - crh - - - - - - crh_alt - <_description>Turkey - Crimean Tatar (Turkish Alt-Q) - - crh - - - - - - - - tw - <_shortDescription>Twn - <_description>Taiwan - - trv - - - - - - indigenous - <_description>Taiwan - Indigenous - - ami - tay - bnn - ckv - pwn - pyu - dru - ais - ssf - tao - tsu - - - - - - saisiyat - <_description>Taiwan - Saisiyat - - xsf - - - - - - - - ua - <_shortDescription>Ukr - <_description>Ukraine - - ukr - - - - - - phonetic - <_description>Ukraine - Phonetic - - - - - typewriter - <_description>Ukraine - Typewriter - - - - - winkeys - <_description>Ukraine - Winkeys - - - - - legacy - <_description>Ukraine - Legacy - - - - - rstu - <_description>Ukraine - Standard RSTU - - - - - rstu_ru - <_description>Ukraine - Standard RSTU on Russian layout - - - - - homophonic - <_description>Ukraine - Homophonic - - - - - crh - <_description>Ukraine - Crimean Tatar (Turkish Q) - - crh - - - - - - crh_f - <_description>Ukraine - Crimean Tatar (Turkish F) - - crh - - - - - - crh_alt - <_description>Ukraine - Crimean Tatar (Turkish Alt-Q) - - crh - - - - - - - - gb - <_shortDescription>GBr - <_description>United Kingdom - - eng - - - - - - extd - <_description>United Kingdom - Extended - Winkeys - - - - - intl - <_description>United Kingdom - International (with dead keys) - - - - - dvorak - <_description>United Kingdom - Dvorak - - - - - dvorakukp - <_description>United Kingdom - Dvorak (UK Punctuation) - - - - - mac - <_description>United Kingdom - Macintosh - - - - - mac_intl - <_description>United Kingdom - Macintosh (International) - - - - - colemak - <_description>United Kingdom - Colemak - - - - - - - uz - <_shortDescription>Uzb - <_description>Uzbekistan - - uzb - - - - - - latin - <_description>Uzbekistan - Latin - - - - - crh - <_description>Uzbekistan - Crimean Tatar (Turkish Q) - - crh - - - - - - crh_f - <_description>Uzbekistan - Crimean Tatar (Turkish F) - - crh - - - - - - crh_alt - <_description>Uzbekistan - Crimean Tatar (Turkish Alt-Q) - - crh - - - - - - - - vn - <_shortDescription>Vnm - <_description>Vietnam - - vie - - - - - - - kr - <_shortDescription>Kor - <_description>Korea, Republic of - - kor - - - - - - kr104 - <_description>Korea, Republic of - 101/104 key Compatible - - - - - - - nec_vndr/jp - <_shortDescription>Jpn - <_description>Japan (PC-98xx Series) - - JP - - - jpn - - - - - - - ie - <_shortDescription>Irl - <_description>Ireland - - eng - - - - - - CloGaelach - <_description>Ireland - CloGaelach - - gla - - - - - - UnicodeExpert - <_description>Ireland - UnicodeExpert - - - - - ogam - <_description>Ireland - Ogham - - - - - ogam_is434 - <_description>Ireland - Ogham IS434 - - - - - - - pk - <_shortDescription>Pak - <_description>Pakistan - - urd - - - - - - urd-crulp - <_description>Pakistan - CRULP - - urd - - - - - - urd-nla - <_description>Pakistan - NLA - - urd - - - - - - ara - <_description>Pakistan - Arabic - - ara - - - - - - snd - <_description>Pakistan - Sindhi - - sd - - - - - - - - mv - <_shortDescription>Mdv - <_description>Maldives - - div - - - - - - - za - <_shortDescription>Zaf - <_description>South Africa - - eng - - - - - - epo - <_shortDescription>Epo - <_description>Esperanto - - epo - - - - - - legacy - <_description>Esperanto - displaced semicolon and quote (obsolete) - - - - - - - np - <_shortDescription>Npl - <_description>Nepal - - nep - - - - - - ng - <_shortDescription>Nga - <_description>Nigeria - - eng - - - - - - igbo - <_description>Nigeria - Igbo - - ibo - - - - - - yoruba - <_description>Nigeria - Yoruba - - yor - - - - - - hausa - <_description>Nigeria - Hausa - - hau - - - - - - - - et - <_shortDescription>Eth - <_description>Ethiopia - - amh - - - - - - - sn - <_shortDescription>Sen - <_description>Senegal - - wol - - - - - - - brai - <_shortDescription>Brl - <_description>Braille - - - - - left_hand - <_description>Braille - Left hand - - - - - right_hand - <_description>Braille - Right hand - - - - - - - tm - <_shortDescription>Tkm - <_description>Turkmenistan - - tuk - - - - - - alt - <_description>Turkmenistan - Alt-Q - - - - - - - ml - <_shortDescription>Mli - <_description>Mali - - bam - - - - - - fr-oss - <_description>Mali - Français (France Alternative) - - - - - us-mac - <_description>Mali - English (USA Macintosh) - - - - - us-intl - <_description>Mali - English (USA International) - - - - - - - tz - <_shortDescription>Tza - <_description>Tanzania - - swa - - - - - - ke - <_shortDescription>Ken - <_description>Kenya - - swa - - - - - - kik - <_description>Kenya - Kikuyu - - kik - - - - - - - - bw - <_shortDescription>Bwa - <_description>Botswana - - tsn - - - - - - ph - <_shortDescription>Phi - <_description>Philippines - eng - bik - ceb - fil - hil - ilo - pam - pag - phi - tgl - war - - - - - qwerty-bay - <_description>Philippines - QWERTY (Baybayin) - bik - ceb - fil - hil - ilo - pam - pag - phi - tgl - war - - - - - capewell-dvorak - <_description>Philippines - Capewell-Dvorak (Latin) - - - - - capewell-dvorak-bay - <_description>Philippines - Capewell-Dvorak (Baybayin) - bik - ceb - fil - hil - ilo - pam - pag - phi - tgl - war - - - - - capewell-qwerf2k6 - <_description>Philippines - Capewell-QWERF 2006 (Latin) - - - - - capewell-qwerf2k6-bay - <_description>Philippines - Capewell-QWERF 2006 (Baybayin) - bik - ceb - fil - hil - ilo - pam - pag - phi - tgl - war - - - - - colemak - <_description>Philippines - Colemak (Latin) - - - - - colemak-bay - <_description>Philippines - Colemak (Baybayin) - bik - ceb - fil - hil - ilo - pam - pag - phi - tgl - war - - - - - dvorak - <_description>Philippines - Dvorak (Latin) - - - - - dvorak-bay - <_description>Philippines - Dvorak (Baybayin) - bik - ceb - fil - hil - ilo - pam - pag - phi - tgl - war - - - - - - - - - - grp - <_description>Key(s) to change layout - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lv3 - <_description>Key to choose 3rd level - - - - - - - - - - - - - - - - - - - - - - - ctrl - <_description>Ctrl key position - - - - - - - - - - - - - grp_led - <_description>Use keyboard LED to show alternative layout - - - - - - - - - keypad - <_description>Numeric keypad layout selection - - - - - - - - - - - - - - - kpdl - <_description>Numeric keypad delete key behaviour - - - - - - - - - - - - - - caps - <_description>Caps Lock key behavior - - - - - - - - - - - - - - - - - - - - altwin - <_description>Alt/Win key behavior - - - - - - - - - - - - - - - Compose key - <_description>Compose key position - - - - - - - - - - - - - - - - compat - <_description>Miscellaneous compatibility options - - - - - - - - - - - - - - - - - - eurosign - <_description>Adding currency signs to certain keys - - - - - - - - - - lv5 - <_description>Key to choose 5th level - - - - - - - - - - - - - - - - nbsp - <_description>Using space key to input non-breakable space character - - - - - - - - - - - - - - - - - - - - - japan - <_description>Japanese keyboard options - - - - - - - esperanto - <_description>Adding Esperanto circumflexes (supersigno) - - - - - - - terminate - <_description>Key sequence to kill the X server - - - - - + + + + + + + pc101 + <_description>Generic 101-key PC + Generic + + + + + pc102 + <_description>Generic 102-key (Intl) PC + Generic + + + + + pc104 + <_description>Generic 104-key PC + Generic + + + + + pc105 + <_description>Generic 105-key (Intl) PC + Generic + + + + + dell101 + <_description>Dell 101-key PC + Dell + + + + + latitude + <_description>Dell Latitude series laptop + Dell + + + + + dellm65 + <_description>Dell Precision M65 + Dell + + + + + everex + <_description>Everex STEPnote + Everex + + + + + flexpro + <_description>Keytronic FlexPro + Keytronic + + + + + microsoft + <_description>Microsoft Natural + Microsoft Inc. + + + + + omnikey101 + <_description>Northgate OmniKey 101 + Northgate + + + + + winbook + <_description>Winbook Model XP5 + Generic + + + + + pc98 + <_description>PC-98xx Series + Generic + + + + + a4techKB21 + <_description>A4Tech KB-21 + A4Tech + + + + + a4techKBS8 + <_description>A4Tech KBS-8 + A4Tech + + + + + a4_rfkb23 + <_description>A4Tech Wireless Desktop RFKB-23 + A4Tech + + + + + airkey + <_description>Acer AirKey V + Acer + + + + + azonaRF2300 + <_description>Azona RF2300 wireless Internet Keyboard + Azona + + + + + scorpius + <_description>Advance Scorpius KI + Scorpius + + + + + brother + <_description>Brother Internet Keyboard + Brother + + + + + btc5113rf + <_description>BTC 5113RF Multimedia + BTC + + + + + btc5126t + <_description>BTC 5126T + BTC + + + + + btc6301urf + <_description>BTC 6301URF + BTC + + + + + btc9000 + <_description>BTC 9000 + BTC + + + + + btc9000a + <_description>BTC 9000A + BTC + + + + + btc9001ah + <_description>BTC 9001AH + BTC + + + + + btc5090 + <_description>BTC 5090 + BTC + + + + + btc9019u + <_description>BTC 9019U + BTC + + + + + btc9116u + <_description>BTC 9116U Mini Wireless Internet and Gaming + + + + + cherryblue + <_description>Cherry Blue Line CyBo@rd + + + + + cherryblueb + <_description>Cherry CyMotion Master XPress + Cherry + + + + + cherrybluea + <_description>Cherry Blue Line CyBo@rd (alternate option) + Cherry + + + + + cherrycyboard + <_description>Cherry CyBo@rd USB-Hub + Cherry + + + + + cherrycmexpert + <_description>Cherry CyMotion Expert + Cherry + + + + + cherrybunlim + <_description>Cherry B.UNLIMITED + Cherry + + + + + chicony + <_description>Chicony Internet Keyboard + Chicony + + + + + chicony0108 + <_description>Chicony KU-0108 + Chicony + + + + + chicony0420 + <_description>Chicony KU-0420 + Chicony + + + + + chicony9885 + <_description>Chicony KB-9885 + Chicony + + + + + compaqeak8 + <_description>Compaq Easy Access Keyboard + Compaq + + + + + compaqik7 + <_description>Compaq Internet Keyboard (7 keys) + Compaq + + + + + compaqik13 + <_description>Compaq Internet Keyboard (13 keys) + Compaq + + + + + compaqik18 + <_description>Compaq Internet Keyboard (18 keys) + Compaq + + + + + cymotionlinux + <_description>Cherry CyMotion Master Linux + Cherry + + + + + armada + <_description>Laptop/notebook Compaq (eg. Armada) Laptop Keyboard + Compaq + + + + + presario + <_description>Laptop/notebook Compaq (eg. Presario) Internet Keyboard + Compaq + + + + + ipaq + <_description>Compaq iPaq Keyboard + Compaq + + + + + dell + <_description>Dell + Dell + + + + + dellsk8125 + <_description>Dell SK-8125 + Dell + + + + + dellsk8135 + <_description>Dell SK-8135 + Dell + + + + + dellusbmm + <_description>Dell USB Multimedia Keyboard + Dell + + + + + inspiron + <_description>Dell Laptop/notebook Inspiron 6xxx/8xxx + Dell + + + + + precision_m + <_description>Dell Laptop/notebook Precision M series + Dell + + + + + dexxa + <_description>Dexxa Wireless Desktop Keyboard + Dexxa + + + + + diamond + <_description>Diamond 9801 / 9802 series + Diamond + + + + + dtk2000 + <_description>DTK2000 + + + + + ennyah_dkb1008 + <_description>Ennyah DKB-1008 + Ennyah + + + + + fscaa1667g + <_description>Fujitsu-Siemens Computers AMILO laptop + Fujitsu-Siemens + + + + + genius + <_description>Genius Comfy KB-16M / Genius MM Keyboard KWD-910 + Genius + + + + + geniuscomfy + <_description>Genius Comfy KB-12e + Genius + + + + + geniuscomfy2 + <_description>Genius Comfy KB-21e-Scroll + Genius + + + + + geniuskb19e + <_description>Genius KB-19e NB + Genius + + + + + geniuskkb2050hs + <_description>Genius KKB-2050HS + Genius + + + + + gyration + <_description>Gyration + Gyration + + + + + htcdream + <_description>HTC Dream + HTC + + + + + kinesis + <_description>Kinesis + Kinesis + + + + + logitech_base + <_description>Logitech Generic Keyboard + Logitech + + + + + logitech_g15 + <_description>Logitech G15 extra keys via G15daemon + Logitech + + + + + hpi6 + <_description>Hewlett-Packard Internet Keyboard + Hewlett-Packard + + + + + hp250x + <_description>Hewlett-Packard SK-250x Multimedia Keyboard + Hewlett-Packard + + + + + hpxe3gc + <_description>Hewlett-Packard Omnibook XE3 GC + Hewlett-Packard + + + + + hpxe3gf + <_description>Hewlett-Packard Omnibook XE3 GF + Hewlett-Packard + + + + + hpxt1000 + <_description>Hewlett-Packard Omnibook XT1000 + Hewlett-Packard + + + + + hpdv5 + <_description>Hewlett-Packard Pavilion dv5 + Hewlett-Packard + + + + + hpzt11xx + <_description>Hewlett-Packard Pavilion ZT11xx + Hewlett-Packard + + + + + hp500fa + <_description>Hewlett-Packard Omnibook 500 FA + Hewlett-Packard + + + + + hp5xx + <_description>Hewlett-Packard Omnibook 5xx + Hewlett-Packard + + + + + hpnx9020 + <_description>Hewlett-Packard nx9020 + Hewlett-Packard + + + + + hp6000 + <_description>Hewlett-Packard Omnibook 6000/6100 + Hewlett-Packard + + + + + honeywell_euroboard + <_description>Honeywell Euroboard + Hewlett-Packard + + + + + hpmini110 + <_description>Hewlett-Packard Mini 110 Notebook + Hewlett-Packard + + + + + rapidaccess + <_description>IBM Rapid Access + Lenovo (previously IBM) + + + + + rapidaccess2 + <_description>IBM Rapid Access II + Lenovo (previously IBM) + + + + + thinkpad + <_description>IBM ThinkPad 560Z/600/600E/A22E + Lenovo (previously IBM) + + + + + thinkpad60 + <_description>IBM ThinkPad R60/T60/R61/T61 + Lenovo (previously IBM) + + + + + thinkpadz60 + <_description>IBM ThinkPad Z60m/Z60t/Z61m/Z61t + Lenovo (previously IBM) + + + + + ibm_spacesaver + <_description>IBM Space Saver + Lenovo (previously IBM) + + + + + logiaccess + <_description>Logitech Access Keyboard + Logitech + + + + + logiclx300 + <_description>Logitech Cordless Desktop LX-300 + Logitech + + + + + logii350 + <_description>Logitech Internet 350 Keyboard + Logitech + + + + + logimel + <_description>Logitech Media Elite Keyboard + Logitech + + + + + logicd + <_description>Logitech Cordless Desktop + Logitech + + + + + logicd_it + <_description>Logitech Cordless Desktop iTouch + Logitech + + + + + logicd_nav + <_description>Logitech Cordless Desktop Navigator + Logitech + + + + + logicd_opt + <_description>Logitech Cordless Desktop Optical + Logitech + + + + + logicda + <_description>Logitech Cordless Desktop (alternate option) + Logitech + + + + + logicdpa2 + <_description>Logitech Cordless Desktop Pro (alternate option 2) + Logitech + + + + + logicfn + <_description>Logitech Cordless Freedom/Desktop Navigator + Logitech + + + + + logicdn + <_description>Logitech Cordless Desktop Navigator + Logitech + + + + + logiitc + <_description>Logitech iTouch Cordless Keyboard (model Y-RB6) + Logitech + + + + + logiik + <_description>Logitech Internet Keyboard + Logitech + + + + + itouch + <_description>Logitech iTouch + Logitech + + + + + logicink + <_description>Logitech Internet Navigator Keyboard + Logitech + + + + + logiex110 + <_description>Logitech Cordless Desktop EX110 + Logitech + + + + + logiinkse + <_description>Logitech iTouch Internet Navigator Keyboard SE + Logitech + + + + + logiinkseusb + <_description>Logitech iTouch Internet Navigator Keyboard SE (USB) + Logitech + + + + + logiultrax + <_description>Logitech Ultra-X Keyboard + Logitech + + + + + logiultraxc + <_description>Logitech Ultra-X Cordless Media Desktop Keyboard + Logitech + + + + + logidinovo + <_description>Logitech diNovo Keyboard + Logitech + + + + + logidinovoedge + <_description>Logitech diNovo Edge Keyboard + Logitech + + + + + mx1998 + <_description>Memorex MX1998 + Memorex + + + + + mx2500 + <_description>Memorex MX2500 EZ-Access Keyboard + Memorex + + + + + mx2750 + <_description>Memorex MX2750 + Memorex + + + + + microsoft7000 + <_description>Microsoft Natural Wireless Ergonomic Keyboard 7000 + Microsoft Inc. + + + + + microsoftinet + <_description>Microsoft Internet Keyboard + Microsoft Inc. + + + + + microsoftpro + <_description>Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro + Microsoft Inc. + + + + + microsoftprousb + <_description>Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro + Microsoft Inc. + + + + + microsoftprooem + <_description>Microsoft Natural Keyboard Pro OEM + Microsoft Inc. + + + + + vsonku306 + <_description>ViewSonic KU-306 Internet Keyboard + ViewSonic + + + + + microsoftprose + <_description>Microsoft Internet Keyboard Pro, Swedish + Microsoft Inc. + + + + + microsoftoffice + <_description>Microsoft Office Keyboard + Microsoft Inc. + + + + + microsoftmult + <_description>Microsoft Wireless Multimedia Keyboard 1.0A + Microsoft Inc. + + + + + microsoftelite + <_description>Microsoft Natural Keyboard Elite + Microsoft Inc. + + + + + microsoftccurve2k + <_description>Microsoft Comfort Curve Keyboard 2000 + Microsoft Inc. + + + + + oretec + <_description>Ortek MCK-800 MM/Internet keyboard + Ortek + + + + + propeller + <_description>Propeller Voyager (KTEZ-1000) + KeyTronic + + + + + qtronix + <_description>QTronix Scorpius 98N+ + QTronix + + + + + samsung4500 + <_description>Samsung SDM 4500P + Samsung + + + + + samsung4510 + <_description>Samsung SDM 4510P + Samsung + + + + + sanwaskbkg3 + <_description>Sanwa Supply SKB-KG3 + Sanwa Supply Inc. + + + + + sk1300 + <_description>SK-1300 + NEC + + + + + sk2500 + <_description>SK-2500 + NEC + + + + + sk6200 + <_description>SK-6200 + NEC + + + + + sk7100 + <_description>SK-7100 + NEC + + + + + sp_inet + <_description>Super Power Multimedia Keyboard + Generic + + + + + sven + <_description>SVEN Ergonomic 2500 + SVEN + + + + + sven303 + <_description>SVEN Slim 303 + SVEN + + + + + symplon + <_description>Symplon PaceBook (tablet PC) + Symplon + + + + + toshiba_s3000 + <_description>Toshiba Satellite S3000 + Toshiba + + + + + trust + <_description>Trust Wireless Keyboard Classic + Trust + + + + + trustda + <_description>Trust Direct Access Keyboard + Trust + + + + + trust_slimline + <_description>Trust Slimline + Trust + + + + + tm2020 + <_description>TypeMatrix EZ-Reach 2020 + TypeMatrix + + + + + tm2030PS2 + <_description>TypeMatrix EZ-Reach 2030 PS2 + TypeMatrix + + + + + tm2030USB + <_description>TypeMatrix EZ-Reach 2030 USB + TypeMatrix + + + + + tm2030USB-102 + <_description>TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + TypeMatrix + + + + + tm2030USB-106 + <_description>TypeMatrix EZ-Reach 2030 USB (106:JP mode) + TypeMatrix + + + + + yahoo + <_description>Yahoo! Internet Keyboard + Yahoo! + + + + + macbook78 + <_description>MacBook/MacBook Pro + Apple + + + + + macbook79 + <_description>MacBook/MacBook Pro (Intl) + Apple + + + + + macintosh + <_description>Macintosh + Apple + + + + + macintosh_old + <_description>Macintosh Old + Apple + + + + + macintosh_hhk + <_description>Happy Hacking Keyboard for Mac + Fujitsu + + + + + acer_c300 + <_description>Acer C300 + Acer + + + + + acer_ferrari4k + <_description>Acer Ferrari 4000 + Acer + + + + + acer_laptop + <_description>Acer Laptop + Acer + + + + + asus_laptop + <_description>Asus Laptop + Asus + + + + + apple + <_description>Apple + Apple + + + + + apple_laptop + <_description>Apple Laptop + Apple + + + + + applealu_ansi + <_description>Apple Aluminium Keyboard (ANSI) + Apple + + + + + applealu_iso + <_description>Apple Aluminium Keyboard (ISO) + Apple + + + + + applealu_jis + <_description>Apple Aluminium Keyboard (JIS) + Apple + + + + + silvercrest + <_description>SILVERCREST Multimedia Wireless Keyboard + Silvercrest + + + + + emachines + <_description>Laptop/notebook eMachines m68xx + eMachines + + + + + benqx + <_description>BenQ X-Touch + BenQ + + + + + benqx730 + <_description>BenQ X-Touch 730 + BenQ + + + + + benqx800 + <_description>BenQ X-Touch 800 + BenQ + + + + + hhk + <_description>Happy Hacking Keyboard + Fujitsu + + + + + classmate + <_description>Classmate PC + Intel + + + + + olpc + <_description>OLPC + OLPC + + + + + sun6 + <_description>Sun Type 5/6 + Sun Microsystems + + + + + targa_v811 + <_description>Targa Visionary 811 + Targa + + + + + unitekkb1925 + <_description>Unitek KB-1925 + Unitek Group + + + + + compalfl90 + <_description>FL90 + Compal Electronics Inc. + + + + + creativedw7000 + <_description>Creative Desktop Wireless 7000 + Creative + + + + + htcdream + <_description>Htc Dream phone + htc + + + + + + + us + <_shortDescription>USA + <_description>USA + + eng + + + + + + chr + <_description>USA - Cherokee + + chr + + + + + + euro + <_description>USA - With EuroSign on 5 + + + + + intl + <_description>USA - International (with dead keys) + + + + + alt-intl + <_description>USA - Alternative international + + + + + colemak + <_description>USA - Colemak + + + + + dvorak + <_description>USA - Dvorak + + + + + dvorak-intl + <_description>USA - Dvorak international (with dead keys) + + + + + dvorak-alt-intl + <_description>USA - Dvorak alternative international (no dead keys) + + + + + dvorak-l + <_description>USA - Left handed Dvorak + + + + + dvorak-r + <_description>USA - Right handed Dvorak + + + + + dvorak-classic + <_description>USA - Classic Dvorak + + + + + dvp + <_description>USA - Programmer Dvorak + + + + + rus + <_description>USA - Russian phonetic + + rus + + + + + + mac + <_description>USA - Macintosh + + + + + altgr-intl + <_description>USA - International (AltGr dead keys) + eng + fra + ger + + + + + olpc2 + <_description>USA - Layout toggle on multiply/divide key + + + + + hbs + <_description>USA - Serbo-Croatian + eng + bos + hbs + hrv + srp + + + + + + + ad + <_shortDescription>And + <_description>Andorra + + cat + + + + + + + af + <_shortDescription>Afg + <_description>Afghanistan + + + + + ps + <_description>Afghanistan - Pashto + + pus + + + + + + uz + <_description>Afghanistan - Southern Uzbek + + uzb + + + + + + olpc-ps + <_description>Afghanistan - OLPC Pashto + + pus + + + + + + fa-olpc + <_description>Afghanistan - OLPC Dari + + + + + uz-olpc + <_description>Afghanistan - OLPC Southern Uzbek + + uzb + + + + + + + + ara + <_shortDescription>Ara + <_description>Arabic + + AE + BH + DZ + EG + EH + JO + KW + LB + LY + MA + MR + OM + PS + QA + SA + SD + SY + TN + YE + + + ara + + + + + + azerty + <_description>Arabic - azerty + + + + + azerty_digits + <_description>Arabic - azerty/digits + + + + + digits + <_description>Arabic - digits + + + + + qwerty + <_description>Arabic - qwerty + + + + + qwerty_digits + <_description>Arabic - qwerty/digits + + + + + buckwalter + <_description>Arabic - Buckwalter + + + + + + + al + <_shortDescription>Alb + <_description>Albania + + alb + + + + + + + am + <_shortDescription>Arm + <_description>Armenia + + hye + + + + + + phonetic + <_description>Armenia - Phonetic + + + + + phonetic-alt + <_description>Armenia - Alternative Phonetic + + + + + eastern + <_description>Armenia - Eastern + + + + + western + <_description>Armenia - Western + + + + + eastern-alt + <_description>Armenia - Alternative Eastern + + + + + + + at + <_shortDescription>Aut + <_description>Austria + + ger + + + + + + nodeadkeys + <_description>Austria - Eliminate dead keys + + + + + sundeadkeys + <_description>Austria - Sun dead keys + + + + + mac + <_description>Austria - Macintosh + + + + + + + az + <_shortDescription>Aze + <_description>Azerbaijan + + aze + + + + + + cyrillic + <_description>Azerbaijan - Cyrillic + + + + + + + by + <_shortDescription>Blr + <_description>Belarus + + bel + + + + + + legacy + <_description>Belarus - Legacy + + + + + latin + <_description>Belarus - Latin + + + + + + + be + <_shortDescription>Bel + <_description>Belgium + ger + nld + fra + + + + + oss + <_description>Belgium - Alternative + + + + + oss_latin9 + <_description>Belgium - Alternative, latin-9 only + + + + + oss_sundeadkeys + <_description>Belgium - Alternative, Sun dead keys + + + + + iso-alternate + <_description>Belgium - ISO Alternate + + + + + nodeadkeys + <_description>Belgium - Eliminate dead keys + + + + + sundeadkeys + <_description>Belgium - Sun dead keys + + + + + wang + <_description>Belgium - Wang model 724 azerty + + + + + + + bd + <_shortDescription>Bgd + <_description>Bangladesh + + ben + + + + + + probhat + <_description>Bangladesh - Probhat + + + + + + + in + <_shortDescription>Ind + <_description>India + + + + + ben + <_description>India - Bengali + + ben + + + + + + ben_probhat + <_description>India - Bengali Probhat + + ben + + + + + + guj + <_description>India - Gujarati + + guj + + + + + + guru + <_description>India - Gurmukhi + + pan + + + + + + jhelum + <_description>India - Gurmukhi Jhelum + + pan + + + + + + kan + <_description>India - Kannada + + kan + + + + + + mal + <_description>India - Malayalam + + mal + + + + + + mal_lalitha + <_description>India - Malayalam Lalitha + + mal + + + + + + mal_enhanced + <_description>India - Malayalam enhanced INSCRIPT with Rupee Sign + mal + + + + + ori + <_description>India - Oriya + + ori + + + + + + tam_unicode + <_description>India - Tamil Unicode + + tam + + + + + + tam_keyboard_with_numerals + <_description>India - Tamil Keyboard with Numerals + + tam + + + + + + tam_TAB + <_description>India - Tamil TAB Typewriter + + tam + + + + + + tam_TSCII + <_description>India - Tamil TSCII Typewriter + + tam + + + + + + tam + <_description>India - Tamil + + tam + + + + + + tel + <_description>India - Telugu + + tel + + + + + + urd-phonetic + <_description>India - Urdu, Phonetic + + urd + + + + + + urd-phonetic3 + <_description>India - Urdu, Alternative phonetic + + urd + + + + + + urd-winkeys + <_description>India - Urdu, Winkeys + + urd + + + + + + bolnagri + <_description>India - Hindi Bolnagri + + hin + + + + + + hin-wx + <_description>India - Hindi Wx + + hin + + + + + + eng + <_description>India - English with RupeeSign + + eng + + + + + + + + ba + <_shortDescription>Bih + <_description>Bosnia and Herzegovina + + bos + + + + + + alternatequotes + <_description>Bosnia and Herzegovina - Use guillemets for quotes + + + + + unicode + <_description>Bosnia and Herzegovina - Use Bosnian digraphs + + + + + unicodeus + <_description>Bosnia and Herzegovina - US keyboard with Bosnian digraphs + + + + + us + <_description>Bosnia and Herzegovina - US keyboard with Bosnian letters + + + + + + + br + <_shortDescription>Bra + <_description>Brazil + + por + + + + + + nodeadkeys + <_description>Brazil - Eliminate dead keys + + + + + dvorak + <_description>Brazil - Dvorak + + + + + nativo + <_description>Brazil - Nativo + + + + + nativo-us + <_description>Brazil - Nativo for USA keyboards + + + + + nativo-epo + <_description>Brazil - Nativo for Esperanto + + epo + + + + + + + + bg + <_shortDescription>Bgr + <_description>Bulgaria + + bul + + + + + + phonetic + <_description>Bulgaria - Traditional phonetic + + + + + bas_phonetic + <_description>Bulgaria - New phonetic + + + + + + + ma + <_description>Morocco + + + + + french + <_description>Morocco - French + + fra + + + + + + tifinagh + <_description>Morocco - Tifinagh + + ber + + + + + + tifinagh-alt + <_description>Morocco - Tifinagh alternative + + ber + + + + + + tifinagh-alt-phonetic + <_description>Morocco - Tifinagh alternative phonetic + + ber + + + + + + tifinagh-extended + <_description>Morocco - Tifinagh extended + + ber + + + + + + tifinagh-phonetic + <_description>Morocco - Tifinagh phonetic + + ber + + + + + + tifinagh-extended-phonetic + <_description>Morocco - Tifinagh extended phonetic + + ber + + + + + + + + mm + <_shortDescription>Mmr + <_description>Myanmar + + mya + + + + + + + ca + <_shortDescription>Can + <_description>Canada + + fra + + + + + + fr-dvorak + <_description>Canada - French Dvorak + + + + + fr-legacy + <_description>Canada - French (legacy) + + + + + multix + <_description>Canada - Multilingual + + + + + multi + <_description>Canada - Multilingual, first part + + + + + multi-2gr + <_description>Canada - Multilingual, second part + + + + + ike + <_description>Canada - Inuktitut + + iku + + + + + + shs + <_description>Canada - Secwepemctsin + + + + + kut + <_description>Canada - Ktunaxa + + + + + eng + <_description>Canada - English + + eng + + + + + + + + cd + <_shortDescription>COD + <_description>Congo, Democratic Republic of the + + fra + + + + + + + cn + <_shortDescription>Chn + <_description>China + + chi + + + + + + tib + <_description>China - Tibetan + + tib + + + + + + tib_asciinum + <_description>China - Tibetan (with ASCII numerals) + + tib + + + + + + uig + <_description>China - Uyghur + + uig + + + + + + + + hr + <_shortDescription>Hrv + <_description>Croatia + + scr + + + + + + alternatequotes + <_description>Croatia - Use guillemets for quotes + + + + + unicode + <_description>Croatia - Use Croatian digraphs + + + + + unicodeus + <_description>Croatia - US keyboard with Croatian digraphs + + + + + us + <_description>Croatia - US keyboard with Croatian letters + + + + + + + cz + <_shortDescription>Cze + <_description>Czechia + + cze + + + + + + bksl + <_description>Czechia - With <\|> key + + + + + qwerty + <_description>Czechia - qwerty + + + + + qwerty_bksl + <_description>Czechia - qwerty, extended Backslash + + + + + ucw + <_description>Czechia - UCW layout (accented letters only) + + + + + dvorak-ucw + <_description>Czechia - US Dvorak with CZ UCW support + + + + + + + dk + <_shortDescription>Dnk + <_description>Denmark + + dan + + + + + + nodeadkeys + <_description>Denmark - Eliminate dead keys + + + + + mac + <_description>Denmark - Macintosh + + + + + mac_nodeadkeys + <_description>Denmark - Macintosh, eliminate dead keys + + + + + dvorak + <_description>Denmark - Dvorak + + + + + + + nl + <_shortDescription>Nld + <_description>Netherlands + + nld + + + + + + sundeadkeys + <_description>Netherlands - Sun dead keys + + + + + mac + <_description>Netherlands - Macintosh + + + + + std + <_description>Netherlands - Standard + + + + + + + bt + <_shortDescription>Btn + <_description>Bhutan + + dzo + + + + + + ee + <_shortDescription>Est + <_description>Estonia + + est + + + + + + nodeadkeys + <_description>Estonia - Eliminate dead keys + + + + + dvorak + <_description>Estonia - Dvorak + + + + + us + <_description>Estonia - US keyboard with Estonian letters + + + + + + + ir + <_shortDescription>Irn + <_description>Iran + + per + + + + + + pes_keypad + <_description>Iran - Persian, with Persian Keypad + + + + + ku + <_description>Iran - Kurdish, Latin Q + + kur + + + + + + ku_f + <_description>Iran - Kurdish, (F) + + kur + + + + + + ku_alt + <_description>Iran - Kurdish, Latin Alt-Q + + kur + + + + + + ku_ara + <_description>Iran - Kurdish, Arabic-Latin + + kur + + + + + + + + iq + <_shortDescription>Irq + <_description>Iraq + ara + kur + + + + + ku + <_description>Iraq - Kurdish, Latin Q + + kur + + + + + + ku_f + <_description>Iraq - Kurdish, (F) + + kur + + + + + + ku_alt + <_description>Iraq - Kurdish, Latin Alt-Q + + kur + + + + + + ku_ara + <_description>Iraq - Kurdish, Arabic-Latin + + kur + + + + + + + + fo + <_shortDescription>Fro + <_description>Faroe Islands + + fao + + + + + + nodeadkeys + <_description>Faroe Islands - Eliminate dead keys + + + + + + + fi + <_shortDescription>Fin + <_description>Finland + + fin + + + + + + classic + <_description>Finland - Classic + + + + + nodeadkeys + <_description>Finland - Classic, eliminate dead keys + + + + + smi + <_description>Finland - Northern Saami + smi + sme + + + + + mac + <_description>Finland - Macintosh + + + + + + + fr + <_shortDescription>Fra + <_description>France + + fra + + + + + + nodeadkeys + <_description>France - Eliminate dead keys + + + + + sundeadkeys + <_description>France - Sun dead keys + + + + + oss + <_description>France - Alternative + + + + + oss_latin9 + <_description>France - Alternative, latin-9 only + + + + + oss_nodeadkeys + <_description>France - Alternative, eliminate dead keys + + + + + oss_sundeadkeys + <_description>France - Alternative, Sun dead keys + + + + + latin9 + <_description>France - (Legacy) Alternative + + + + + latin9_nodeadkeys + <_description>France - (Legacy) Alternative, eliminate dead keys + + + + + latin9_sundeadkeys + <_description>France - (Legacy) Alternative, Sun dead keys + + + + + bepo + <_description>France - Bepo, ergonomic, Dvorak way + + + + + bepo_latin9 + <_description>France - Bepo, ergonomic, Dvorak way, latin-9 only + + + + + dvorak + <_description>France - Dvorak + + + + + mac + <_description>France - Macintosh + + + + + bre + <_description>France - Breton + + + + + oci + <_description>France - Occitan + + oci + + + + + + geo + <_description>France - Georgian AZERTY Tskapo + + geo + + + + + + + + gh + <_shortDescription>Gha + <_description>Ghana + + eng + + + + + + generic + <_description>Ghana - Multilingual + + + + + akan + <_description>Ghana - Akan + + aka + + + + + + ewe + <_description>Ghana - Ewe + + ewe + + + + + + fula + <_description>Ghana - Fula + + ful + + + + + + ga + <_description>Ghana - Ga + + gaa + + + + + + hausa + <_description>Ghana - Hausa + + hau + + + + + + avn + <_description>Ghana - Avatime + + avn + + + + + + gillbt + <_description>Ghana - GILLBT + + + + + + + gn + <_shortDescription>Gin + <_description>Guinea + + fra + + + + + + + ge + <_shortDescription>Geo + <_description>Georgia + + geo + + + + + + ergonomic + <_description>Georgia - Ergonomic + + + + + mess + <_description>Georgia - MESS + + + + + ru + <_description>Georgia - Russian + + rus + + + + + + os + <_description>Georgia - Ossetian + + oss + + + + + + + + de + <_shortDescription>Deu + <_description>Germany + + ger + + + + + + deadacute + <_description>Germany - Dead acute + + + + + deadgraveacute + <_description>Germany - Dead grave acute + + + + + nodeadkeys + <_description>Germany - Eliminate dead keys + + + + + ro + <_description>Germany - Romanian keyboard with German letters + + + + + ro_nodeadkeys + <_description>Germany - Romanian keyboard with German letters, eliminate dead keys + + + + + dvorak + <_description>Germany - Dvorak + + + + + sundeadkeys + <_description>Germany - Sun dead keys + + + + + neo + <_description>Germany - Neo 2 + + + + + mac + <_description>Germany - Macintosh + + + + + mac_nodeadkeys + <_description>Germany - Macintosh, eliminate dead keys + + + + + dsb + <_description>Germany - Lower Sorbian + + dsb + + + + + + dsb_qwertz + <_description>Germany - Lower Sorbian (qwertz) + + dsb + + + + + + qwerty + <_description>Germany - qwerty + + + + + ru + <_description>Germany - Russian phonetic + + rus + + + + + + + + gr + <_shortDescription>Grc + <_description>Greece + + gre + + + + + + simple + <_description>Greece - Simple + + + + + extended + <_description>Greece - Extended + + + + + nodeadkeys + <_description>Greece - Eliminate dead keys + + + + + polytonic + <_description>Greece - Polytonic + + + + + + + hu + <_shortDescription>Hun + <_description>Hungary + + hun + + + + + + standard + <_description>Hungary - Standard + + + + + nodeadkeys + <_description>Hungary - Eliminate dead keys + + + + + qwerty + <_description>Hungary - qwerty + + + + + 101_qwertz_comma_dead + <_description>Hungary - 101/qwertz/comma/Dead keys + + + + + 101_qwertz_comma_nodead + <_description>Hungary - 101/qwertz/comma/Eliminate dead keys + + + + + 101_qwertz_dot_dead + <_description>Hungary - 101/qwertz/dot/Dead keys + + + + + 101_qwertz_dot_nodead + <_description>Hungary - 101/qwertz/dot/Eliminate dead keys + + + + + 101_qwerty_comma_dead + <_description>Hungary - 101/qwerty/comma/Dead keys + + + + + 101_qwerty_comma_nodead + <_description>Hungary - 101/qwerty/comma/Eliminate dead keys + + + + + 101_qwerty_dot_dead + <_description>Hungary - 101/qwerty/dot/Dead keys + + + + + 101_qwerty_dot_nodead + <_description>Hungary - 101/qwerty/dot/Eliminate dead keys + + + + + 102_qwertz_comma_dead + <_description>Hungary - 102/qwertz/comma/Dead keys + + + + + 102_qwertz_comma_nodead + <_description>Hungary - 102/qwertz/comma/Eliminate dead keys + + + + + 102_qwertz_dot_dead + <_description>Hungary - 102/qwertz/dot/Dead keys + + + + + 102_qwertz_dot_nodead + <_description>Hungary - 102/qwertz/dot/Eliminate dead keys + + + + + 102_qwerty_comma_dead + <_description>Hungary - 102/qwerty/comma/Dead keys + + + + + 102_qwerty_comma_nodead + <_description>Hungary - 102/qwerty/comma/Eliminate dead keys + + + + + 102_qwerty_dot_dead + <_description>Hungary - 102/qwerty/dot/Dead keys + + + + + 102_qwerty_dot_nodead + <_description>Hungary - 102/qwerty/dot/Eliminate dead keys + + + + + + + is + <_shortDescription>Isl + <_description>Iceland + + ice + + + + + + Sundeadkeys + <_description>Iceland - Sun dead keys + + + + + nodeadkeys + <_description>Iceland - Eliminate dead keys + + + + + mac + <_description>Iceland - Macintosh + + + + + dvorak + <_description>Iceland - Dvorak + + + + + + + il + <_shortDescription>Isr + <_description>Israel + + heb + + + + + + lyx + <_description>Israel - lyx + + + + + phonetic + <_description>Israel - Phonetic + + + + + biblical + <_description>Israel - Biblical Hebrew (Tiro) + + + + + + + it + <_shortDescription>Ita + <_description>Italy + + ita + + + + + + nodeadkeys + <_description>Italy - Eliminate dead keys + + + + + mac + <_description>Italy - Macintosh + + + + + us + <_description>Italy - US keyboard with Italian letters + + + + + geo + <_description>Italy - Georgian + + geo + + + + + + + + jp + <_shortDescription>Jpn + <_description>Japan + + jpn + + + + + + kana + <_description>Japan - Kana + + + + + kana86 + <_description>Japan - Kana 86 + + + + + OADG109A + <_description>Japan - OADG 109A + + + + + mac + <_description>Japan - Macintosh + + + + + + + kg + <_shortDescription>Kgz + <_description>Kyrgyzstan + + kir + + + + + + phonetic + <_description>Kyrgyzstan - Phonetic + + + + + + + kh + <_shortDescription>Khm + <_description>Cambodia + + khm + + + + + + + kz + <_shortDescription>Kaz + <_description>Kazakhstan + + kaz + + + + + + ruskaz + <_description>Kazakhstan - Russian with Kazakh + kaz + rus + + + + + kazrus + <_description>Kazakhstan - Kazakh with Russian + kaz + rus + + + + + + + la + <_shortDescription>Lao + <_description>Laos + + lao + + + + + + stea + <_description>Laos - STEA (proposed standard layout) + lao + + + + + + + + latam + <_shortDescription>Esp + <_description>Latin American + + AR + BO + CL + CO + CR + CU + DO + EC + GT + HN + HT + MX + NI + PA + PE + PR + PY + SV + US + UY + VE + + + spa + + + + + + nodeadkeys + <_description>Latin American - Eliminate dead keys + + + + + deadtilde + <_description>Latin American - Include dead tilde + + + + + sundeadkeys + <_description>Latin American - Sun dead keys + + + + + + + lt + <_shortDescription>Ltu + <_description>Lithuania + + lit + + + + + + std + <_description>Lithuania - Standard + + + + + us + <_description>Lithuania - US keyboard with Lithuanian letters + + + + + ibm + <_description>Lithuania - IBM (LST 1205-92) + + + + + lekp + <_description>Lithuania - LEKP + + + + + lekpa + <_description>Lithuania - LEKPa + + + + + + + lv + <_shortDescription>Lva + <_description>Latvia + + lav + + + + + + apostrophe + <_description>Latvia - Apostrophe (') variant + + + + + tilde + <_description>Latvia - Tilde (~) variant + + + + + fkey + <_description>Latvia - F-letter (F) variant + + + + + + + mao + <_shortDescription>Mao + <_description>Maori + + mao + + + + + + + me + <_shortDescription>MNE + <_description>Montenegro + + srp + + + + + + cyrillic + <_description>Montenegro - Cyrillic + + + + + cyrillicyz + <_description>Montenegro - Cyrillic, Z and ZHE swapped + + + + + latinunicode + <_description>Montenegro - Latin unicode + + + + + latinyz + <_description>Montenegro - Latin qwerty + + + + + latinunicodeyz + <_description>Montenegro - Latin unicode qwerty + + + + + cyrillicalternatequotes + <_description>Montenegro - Cyrillic with guillemets + + + + + latinalternatequotes + <_description>Montenegro - Latin with guillemets + + + + + + + mk + <_shortDescription>Mkd + <_description>Macedonia + + mkd + + + + + + nodeadkeys + <_description>Macedonia - Eliminate dead keys + + + + + + + mt + <_shortDescription>Mlt + <_description>Malta + + mlt + + + + + + us + <_description>Malta - Maltese keyboard with US layout + + + + + + + mn + <_shortDescription>Mng + <_description>Mongolia + + mng + + + + + + + no + <_shortDescription>Nor + <_description>Norway + + nor + + + + + + nodeadkeys + <_description>Norway - Eliminate dead keys + + + + + dvorak + <_description>Norway - Dvorak + + + + + smi + <_description>Norway - Northern Saami + + sme + + + + + + smi_nodeadkeys + <_description>Norway - Northern Saami, eliminate dead keys + + sme + + + + + + mac + <_description>Norway - Macintosh + + + + + mac_nodeadkeys + <_description>Norway - Macintosh, eliminate dead keys + + + + + + + pl + <_shortDescription>Pol + <_description>Poland + + pol + + + + + + qwertz + <_description>Poland - qwertz + + + + + dvorak + <_description>Poland - Dvorak + + + + + dvorak_quotes + <_description>Poland - Dvorak, Polish quotes on quotemark key + + + + + dvorak_altquotes + <_description>Poland - Dvorak, Polish quotes on key 1 + + + + + csb + <_description>Poland - Kashubian + + csb + + + + + + ru_phonetic_dvorak + <_description>Poland - Russian phonetic Dvorak + + rus + + + + + + dvp + <_description>Poland - Programmer Dvorak + + + + + + + pt + <_shortDescription>Prt + <_description>Portugal + + por + + + + + + nodeadkeys + <_description>Portugal - Eliminate dead keys + + + + + sundeadkeys + <_description>Portugal - Sun dead keys + + + + + mac + <_description>Portugal - Macintosh + + + + + mac_nodeadkeys + <_description>Portugal - Macintosh, eliminate dead keys + + + + + mac_sundeadkeys + <_description>Portugal - Macintosh, Sun dead keys + + + + + nativo + <_description>Portugal - Nativo + + + + + nativo-us + <_description>Portugal - Nativo for USA keyboards + + + + + nativo-epo + <_description>Portugal - Nativo for Esperanto + + epo + + + + + + + + ro + <_shortDescription>Rou + <_description>Romania + + rum + + + + + + cedilla + <_description>Romania - Cedilla + + + + + std + <_description>Romania - Standard + + + + + std_cedilla + <_description>Romania - Standard (Cedilla) + + + + + winkeys + <_description>Romania - Winkeys + + + + + crh_f + <_description>Romania - Crimean Tatar (Turkish F) + + crh + + + + + + crh_alt + <_description>Romania - Crimean Tatar (Turkish Alt-Q) + + crh + + + + + + crh_dobruca1 + <_description>Romania - Crimean Tatar (Dobruca-1 Q) + + crh + + + + + + crh_dobruca2 + <_description>Romania - Crimean Tatar (Dobruca-2 Q) + + crh + + + + + + + + ru + <_shortDescription>Rus + <_description>Russia + + rus + + + + + + phonetic + <_description>Russia - Phonetic + + + + + phonetic_winkeys + <_description>Russia - Phonetic Winkeys + + + + + typewriter + <_description>Russia - Typewriter + + + + + legacy + <_description>Russia - Legacy + + + + + typewriter-legacy + <_description>Russia - Typewriter, legacy + + + + + tt + <_description>Russia - Tatar + + tat + + + + + + os_legacy + <_description>Russia - Ossetian, legacy + + oss + + + + + + os_winkeys + <_description>Russia - Ossetian, Winkeys + + oss + + + + + + cv + <_description>Russia - Chuvash + + chv + + + + + + cv_latin + <_description>Russia - Chuvash Latin + + chv + + + + + + udm + <_description>Russia - Udmurt + + udm + + + + + + kom + <_description>Russia - Komi + + kom + + + + + + sah + <_description>Russia - Yakut + + sah + + + + + + xal + <_description>Russia - Kalmyk + + xal + + + + + + dos + <_description>Russia - DOS + + + + + srp + <_description>Russia - Serbian + rus + srp + + + + + bak + <_description>Russia - Bashkirian + + bak + + + + + + chm + <_description>Russia - Mari + + chm + + + + + + + + rs + <_shortDescription>SRB + <_description>Serbia + + srp + + + + + + yz + <_description>Serbia - Z and ZHE swapped + + + + + latin + <_description>Serbia - Latin + + + + + latinunicode + <_description>Serbia - Latin Unicode + + + + + latinyz + <_description>Serbia - Latin qwerty + + + + + latinunicodeyz + <_description>Serbia - Latin Unicode qwerty + + + + + alternatequotes + <_description>Serbia - With guillemets + + + + + latinalternatequotes + <_description>Serbia - Latin with guillemets + + + + + rue + <_description>Serbia - Pannonian Rusyn Homophonic + + rue + + + + + + + + si + <_shortDescription>Svn + <_description>Slovenia + + slv + + + + + + alternatequotes + <_description>Slovenia - Use guillemets for quotes + + + + + us + <_description>Slovenia - US keyboard with Slovenian letters + + + + + + + sk + <_shortDescription>Svk + <_description>Slovakia + + slo + + + + + + bksl + <_description>Slovakia - Extended Backslash + + + + + qwerty + <_description>Slovakia - qwerty + + + + + qwerty_bksl + <_description>Slovakia - qwerty, extended Backslash + + + + + + + es + <_shortDescription>Esp + <_description>Spain + + spa + + + + + + nodeadkeys + <_description>Spain - Eliminate dead keys + + + + + deadtilde + <_description>Spain - Include dead tilde + + + + + sundeadkeys + <_description>Spain - Sun dead keys + + + + + dvorak + <_description>Spain - Dvorak + + + + + ast + <_description>Spain - Asturian variant with bottom-dot H and bottom-dot L + + ast + + + + + + cat + <_description>Spain - Catalan variant with middle-dot L + + cat + + + + + + mac + <_description>Spain - Macintosh + + + + + + + se + <_shortDescription>Swe + <_description>Sweden + + swe + + + + + + nodeadkeys + <_description>Sweden - Eliminate dead keys + + + + + dvorak + <_description>Sweden - Dvorak + + + + + rus + <_description>Sweden - Russian phonetic + + rus + + + + + + rus_nodeadkeys + <_description>Sweden - Russian phonetic, eliminate dead keys + + rus + + + + + + smi + <_description>Sweden - Northern Saami + + sme + + + + + + mac + <_description>Sweden - Macintosh + + + + + svdvorak + <_description>Sweden - Svdvorak + + + + + + + ch + <_shortDescription>Che + <_description>Switzerland + ger + gsw + + + + + legacy + <_description>Switzerland - Legacy + + + + + de_nodeadkeys + <_description>Switzerland - German, eliminate dead keys + + + + + de_sundeadkeys + <_description>Switzerland - German, Sun dead keys + + + + + fr + <_description>Switzerland - French + + fra + + + + + + fr_nodeadkeys + <_description>Switzerland - French, eliminate dead keys + + fra + + + + + + fr_sundeadkeys + <_description>Switzerland - French, Sun dead keys + + fra + + + + + + fr_mac + <_description>Switzerland - French (Macintosh) + + fra + + + + + + de_mac + <_description>Switzerland - German (Macintosh) + + + + + + + sy + <_shortDescription>Syr + <_description>Syria + + syr + + + + + + syc + <_description>Syria - Syriac + + + + + syc_phonetic + <_description>Syria - Syriac phonetic + + + + + ku + <_description>Syria - Kurdish, Latin Q + + kur + + + + + + ku_f + <_description>Syria - Kurdish, (F) + + kur + + + + + + ku_alt + <_description>Syria - Kurdish, Latin Alt-Q + + kur + + + + + + + + tj + <_shortDescription>Tjk + <_description>Tajikistan + + tgk + + + + + + legacy + <_description>Tajikistan - Legacy + + + + + + + lk + <_shortDescription>Lka + <_description>Sri Lanka + + sin + + + + + + tam_unicode + <_description>Sri Lanka - Tamil Unicode + + tam + + + + + + tam_TAB + <_description>Sri Lanka - Tamil TAB Typewriter + + tam + + + + + + + + th + <_shortDescription>Tha + <_description>Thailand + + tha + + + + + + tis + <_description>Thailand - TIS-820.2538 + + + + + pat + <_description>Thailand - Pattachote + + + + + + + tr + <_shortDescription>Tur + <_description>Turkey + + tur + + + + + + f + <_description>Turkey - (F) + + + + + alt + <_description>Turkey - Alt-Q + + + + + sundeadkeys + <_description>Turkey - Sun dead keys + + + + + ku + <_description>Turkey - Kurdish, Latin Q + + kur + + + + + + ku_f + <_description>Turkey - Kurdish, (F) + + kur + + + + + + ku_alt + <_description>Turkey - Kurdish, Latin Alt-Q + + kur + + + + + + intl + <_description>Turkey - International (with dead keys) + + + + + crh + <_description>Turkey - Crimean Tatar (Turkish Q) + + crh + + + + + + crh_f + <_description>Turkey - Crimean Tatar (Turkish F) + + crh + + + + + + crh_alt + <_description>Turkey - Crimean Tatar (Turkish Alt-Q) + + crh + + + + + + + + tw + <_shortDescription>Twn + <_description>Taiwan + + trv + + + + + + indigenous + <_description>Taiwan - Indigenous + + ami + tay + bnn + ckv + pwn + pyu + dru + ais + ssf + tao + tsu + + + + + + saisiyat + <_description>Taiwan - Saisiyat + + xsf + + + + + + + + ua + <_shortDescription>Ukr + <_description>Ukraine + + ukr + + + + + + phonetic + <_description>Ukraine - Phonetic + + + + + typewriter + <_description>Ukraine - Typewriter + + + + + winkeys + <_description>Ukraine - Winkeys + + + + + legacy + <_description>Ukraine - Legacy + + + + + rstu + <_description>Ukraine - Standard RSTU + + + + + rstu_ru + <_description>Ukraine - Standard RSTU on Russian layout + + + + + homophonic + <_description>Ukraine - Homophonic + + + + + crh + <_description>Ukraine - Crimean Tatar (Turkish Q) + + crh + + + + + + crh_f + <_description>Ukraine - Crimean Tatar (Turkish F) + + crh + + + + + + crh_alt + <_description>Ukraine - Crimean Tatar (Turkish Alt-Q) + + crh + + + + + + + + gb + <_shortDescription>GBr + <_description>United Kingdom + + eng + + + + + + extd + <_description>United Kingdom - Extended - Winkeys + + + + + intl + <_description>United Kingdom - International (with dead keys) + + + + + dvorak + <_description>United Kingdom - Dvorak + + + + + dvorakukp + <_description>United Kingdom - Dvorak (UK Punctuation) + + + + + mac + <_description>United Kingdom - Macintosh + + + + + mac_intl + <_description>United Kingdom - Macintosh (International) + + + + + colemak + <_description>United Kingdom - Colemak + + + + + + + uz + <_shortDescription>Uzb + <_description>Uzbekistan + + uzb + + + + + + latin + <_description>Uzbekistan - Latin + + + + + crh + <_description>Uzbekistan - Crimean Tatar (Turkish Q) + + crh + + + + + + crh_f + <_description>Uzbekistan - Crimean Tatar (Turkish F) + + crh + + + + + + crh_alt + <_description>Uzbekistan - Crimean Tatar (Turkish Alt-Q) + + crh + + + + + + + + vn + <_shortDescription>Vnm + <_description>Vietnam + + vie + + + + + + + kr + <_shortDescription>Kor + <_description>Korea, Republic of + + kor + + + + + + kr104 + <_description>Korea, Republic of - 101/104 key Compatible + + + + + + + nec_vndr/jp + <_shortDescription>Jpn + <_description>Japan (PC-98xx Series) + + JP + + + jpn + + + + + + + ie + <_shortDescription>Irl + <_description>Ireland + + eng + + + + + + CloGaelach + <_description>Ireland - CloGaelach + + gla + + + + + + UnicodeExpert + <_description>Ireland - UnicodeExpert + + + + + ogam + <_description>Ireland - Ogham + + + + + ogam_is434 + <_description>Ireland - Ogham IS434 + + + + + + + pk + <_shortDescription>Pak + <_description>Pakistan + + urd + + + + + + urd-crulp + <_description>Pakistan - CRULP + + urd + + + + + + urd-nla + <_description>Pakistan - NLA + + urd + + + + + + ara + <_description>Pakistan - Arabic + + ara + + + + + + snd + <_description>Pakistan - Sindhi + + sd + + + + + + + + mv + <_shortDescription>Mdv + <_description>Maldives + + div + + + + + + + za + <_shortDescription>Zaf + <_description>South Africa + + eng + + + + + + epo + <_shortDescription>Epo + <_description>Esperanto + + epo + + + + + + legacy + <_description>Esperanto - displaced semicolon and quote (obsolete) + + + + + + + np + <_shortDescription>Npl + <_description>Nepal + + nep + + + + + + ng + <_shortDescription>Nga + <_description>Nigeria + + eng + + + + + + igbo + <_description>Nigeria - Igbo + + ibo + + + + + + yoruba + <_description>Nigeria - Yoruba + + yor + + + + + + hausa + <_description>Nigeria - Hausa + + hau + + + + + + + + et + <_shortDescription>Eth + <_description>Ethiopia + + amh + + + + + + + sn + <_shortDescription>Sen + <_description>Senegal + + wol + + + + + + + brai + <_shortDescription>Brl + <_description>Braille + + + + + left_hand + <_description>Braille - Left hand + + + + + right_hand + <_description>Braille - Right hand + + + + + + + tm + <_shortDescription>Tkm + <_description>Turkmenistan + + tuk + + + + + + alt + <_description>Turkmenistan - Alt-Q + + + + + + + ml + <_shortDescription>Mli + <_description>Mali + + bam + + + + + + fr-oss + <_description>Mali - Français (France Alternative) + + + + + us-mac + <_description>Mali - English (USA Macintosh) + + + + + us-intl + <_description>Mali - English (USA International) + + + + + + + tz + <_shortDescription>Tza + <_description>Tanzania + + swa + + + + + + ke + <_shortDescription>Ken + <_description>Kenya + + swa + + + + + + kik + <_description>Kenya - Kikuyu + + kik + + + + + + + + bw + <_shortDescription>Bwa + <_description>Botswana + + tsn + + + + + + ph + <_shortDescription>Phi + <_description>Philippines + eng + bik + ceb + fil + hil + ilo + pam + pag + phi + tgl + war + + + + + qwerty-bay + <_description>Philippines - QWERTY (Baybayin) + bik + ceb + fil + hil + ilo + pam + pag + phi + tgl + war + + + + + capewell-dvorak + <_description>Philippines - Capewell-Dvorak (Latin) + + + + + capewell-dvorak-bay + <_description>Philippines - Capewell-Dvorak (Baybayin) + bik + ceb + fil + hil + ilo + pam + pag + phi + tgl + war + + + + + capewell-qwerf2k6 + <_description>Philippines - Capewell-QWERF 2006 (Latin) + + + + + capewell-qwerf2k6-bay + <_description>Philippines - Capewell-QWERF 2006 (Baybayin) + bik + ceb + fil + hil + ilo + pam + pag + phi + tgl + war + + + + + colemak + <_description>Philippines - Colemak (Latin) + + + + + colemak-bay + <_description>Philippines - Colemak (Baybayin) + bik + ceb + fil + hil + ilo + pam + pag + phi + tgl + war + + + + + dvorak + <_description>Philippines - Dvorak (Latin) + + + + + dvorak-bay + <_description>Philippines - Dvorak (Baybayin) + bik + ceb + fil + hil + ilo + pam + pag + phi + tgl + war + + + + + + + + + + grp + <_description>Key(s) to change layout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lv3 + <_description>Key to choose 3rd level + + + + + + + + + + + + + + + + + + + + + + + ctrl + <_description>Ctrl key position + + + + + + + + + + + + + grp_led + <_description>Use keyboard LED to show alternative layout + + + + + + + + + keypad + <_description>Numeric keypad layout selection + + + + + + + + + + + + + + + kpdl + <_description>Numeric keypad delete key behaviour + + + + + + + + + + + + + + caps + <_description>Caps Lock key behavior + + + + + + + + + + + + + + + + + + + + altwin + <_description>Alt/Win key behavior + + + + + + + + + + + + + + + Compose key + <_description>Compose key position + + + + + + + + + + + + + + + + compat + <_description>Miscellaneous compatibility options + + + + + + + + + + + + + + + + + + eurosign + <_description>Adding currency signs to certain keys + + + + + + + + + + lv5 + <_description>Key to choose 5th level + + + + + + + + + + + + + + + + nbsp + <_description>Using space key to input non-breakable space character + + + + + + + + + + + + + + + + + + + + + japan + <_description>Japanese keyboard options + + + + + + + esperanto + <_description>Adding Esperanto circumflexes (supersigno) + + + + + + + terminate + <_description>Key sequence to kill the X server + + + + + diff --git a/xorg-server/xkeyboard-config/symbols/in b/xorg-server/xkeyboard-config/symbols/in index 5d4dc27b2..cb38a84c0 100644 --- a/xorg-server/xkeyboard-config/symbols/in +++ b/xorg-server/xkeyboard-config/symbols/in @@ -1,1340 +1,1423 @@ -// This layout includes all Indian layouts, including: -// - Bengali -// - Gujarati -// - Kannada -// - Malayalam -// - Oriya -// - Tamil -// - Telugu -// - Urdu - -// Links: -// - Indic INSCRIPT keyboard layout diagrams: -// http://java.sun.com/products/jfc/tsc/articles/InputMethod/indiclayout.html -// - Ekusheyr Shadhinota (Bengali layouts): -// http://ekushey.org/projects/shadhinota/index.html -// - Microsoft Windows XP SP2: Indic Language Standards - an Introduction: -// http://www.bhashaindia.com/MSProducts/XpSp2/Articles/IndicLanguageStandards.aspx - -// based on a keyboard map from an 'xkb/symbols/dev' file - -// Devangari is the default. Kill me if I am wrong:) -default partial alphanumeric_keys -xkb_symbols "deva" { - // March 2004 -- David Holl - name[Group1]="India"; - - key.type="FOUR_LEVEL"; - - key { [ U094a, U0912, grave, asciitilde ] }; - key { [ U0967, U090d, 1, exclam ] }; - key { [ U0968, U0945, 2, at ] }; - // Shift+AE0[3-8] really need to return a macro of keys defined by - // INSCRIPT in place of the symbols that are here for now. But this - // requires XKB to map 1 key into two to three other key presses. - key { [ U0969, numbersign, 3, numbersign ] }; - key { [ U096a, dollar, 4, dollar ] }; - key { [ U096b, percent, 5, percent ] }; - key { [ U096c, asciicircum, 6, asciicircum ] }; - key { [ U096d, ampersand, 7, ampersand ] }; - key { [ U096e, asterisk, 8, asterisk ] }; - key { [ U096f, parenleft, 9, parenleft ] }; - key { [ U0966, parenright, 0, parenright ] }; - key { [ minus, U0903, minus, underscore ] }; - key { [ U0943, U090b, U0944, U0960 ] }; - - key { [ U094c, U0914 ] }; - key { [ U0948, U0910 ] }; - key { [ U093e, U0906 ] }; - key { [ U0940, U0908, U0963, U0961 ] }; - key { [ U0942, U090a ] }; - key { [ U092c, U092d ] }; - key { [ U0939, U0919 ] }; - key { [ U0917, U0918, U095a ] }; - key { [ U0926, U0927 ] }; - key { [ U091c, U091d, U095b ] }; - key { [ U0921, U0922, U095c, U095d ] }; - key { [ U093c, U091e ] }; - // I added \ / ? | for shell-convenience (file names and piping) - key { [ U0949, U0911, U005C, U007C ] }; - - key { [ U094b, U0913 ] }; - key { [ U0947, U090f ] }; - key { [ U094d, U0905 ] }; - key { [ U093f, U0907, U0962, U090c ] }; - key { [ U0941, U0909 ] }; - key { [ U092a, U092b, NoSymbol, U095e ] }; - key { [ U0930, U0931 ] }; - key { [ U0915, U0916, U0958, U0959 ] }; - key { [ U0924, U0925 ] }; - key { [ U091a, U091b, U0952 ] }; - key { [ U091f, U0920, NoSymbol, U0951 ] }; - - key { [ U0946, U090e, U0953 ] }; - key { [ U0902, U0901, NoSymbol, U0950 ] }; - key { [ U092e, U0923, U0954 ] }; - key { [ U0928, U0929 ] }; - key { [ U0935, U0934 ] }; - key { [ U0932, U0933 ] }; - key { [ U0938, U0936 ] }; - key { [ comma, U0937, U0970 ] }; - key { [ period, U0964, U0965, U093d ] }; - // I added \ / ? | for shell-convenience (file names and piping) - key { [ U092f, U095f, slash, question ] }; - - // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ): - include "nbsp(zwnj3zwj4)" -}; - -//Name : Bolnagri (Combined) -//Description : A phonetic keyboard layout for Devnagari(Hindi) -// http://www.indlinux.org/wiki/index.php/BolNagri -//NOTE : This is a combined map of bolnagri_matras and bolnagri_vowels. -//Inspired by "devrom" keymap by Steve Smith for the windows tool "keyman" -//Original Author : Noah Levitt -//Past Authors : Pramod.R and Ravikant -// Current Main.: G Karunakar - -partial alphanumeric_keys -xkb_symbols "bolnagri" { - name[Group1] = "India - Hindi Bolnagri"; - key.type="FOUR_LEVEL"; - //Top Alphanumeric row - // Roman digits - key { [ U0902, U0901, apostrophe, asciitilde ] }; // apostrophe: anusvara, candrabindu - key { [ 1, exclam, U0967, exclam ] }; - key { [ 2, at, U0968, at ] }; - key { [ 3, numbersign, U0969, numbersign ] }; - key { [ 4, dollar, U096A, dollar ] }; - key { [ 5, percent, U096B, percent ] }; - key { [ 6, asciicircum, U096C, asciicircum ] }; - key { [ 7, ampersand, U096D, ampersand ] }; - key { [ 8, asterisk, U096E, asterisk ] }; - key { [ 9, parenleft, U096F, parenleft ] }; - key { [ 0, parenright, U0966, parenright ] }; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - key { [ U0964, U0965, U007C, U005C ] }; //pipe : danda, double danda - - //Q Row - key { [ U200C, U200D ] }; // Q: ZWNJ, ZWJ - key { [ U0935, U950 ] }; // W: wa, OM - key { [ U0947, U0948, U090F, U0910 ] }; // E: e, ai matras - key { [ U0930, U0943 ] }; // R: ra, vocalic Ri - key { [ U0924, U0925 ] }; // T: ta, tha - key { [ U092f, U091E ] }; // Y: ya, nya - key { [ U0941, U0942, U0909, U090A ] }; // U: u, uu matras - key { [ U093F, U0940, U0907, U0908 ] }; // I: i, ii matras - key { [ U094B, U094C, U0913, U0914 ] }; // O: o, au matras - key { [ U092A, U092B ] }; // P: pa, pha - key { [ bracketleft, braceleft ] }; - key { [ bracketright, braceright ] }; - - //A Row - key { [ U093E, U0906, U0905, U0906 ] }; // A: aa - key { [ U0938, U0937 ] }; // S: sa, ssa - key { [ U0926, U0927 ] }; // D: da, dha - key { [ U091F, U0920 ] }; // F: TA, THA - key { [ U0917, U0918 ] }; // G: ga, gha - key { [ U0939, U0903 ] }; // H: ha, visarg - key { [ U091C, U091D ] }; // J: ja, jha - key { [ U0915, U0916 ] }; // K: ka, kha - key { [ U0932, U0962 ] }; // L: la, vocalic L or lru matra` - key { [ semicolon, colon ] }; - key { [apostrophe, quotedbl ] }; - - //Z Row - key { [ U0936, U0945 ] }; // Z: sha, akaar candra - key { [ U094D, U0949 ] }; // X: halant, aakaar candra - key { [ U091A, U091B ] }; // C: ca, cha - key { [ U0921, U0922 ] }; // V: da, dha - key { [ U092C, U092D ] }; // B: ba, bha - key { [ U0928, U0923 ] }; // N: na, nha - key { [ U092E, U093D, U092E, U093D ] }; // M: ma, avagraha - key { [ comma, U0970 ] };// comma: comma, dev abbreviation sign - key { [ period, U093C ] }; // period: period, nukta - key { [ slash, question ] }; - - // begin modifier mappings -// modifier_map Shift { Shift_L }; -// modifier_map Lock { Caps_Lock }; -// modifier_map Control{ Control_L }; -// modifier_map Mod3 { Mode_switch }; - include "level3(ralt_switch)" -}; - -// based on a keyboard map from an 'xkb/symbols/ben' file - -partial alphanumeric_keys -xkb_symbols "ben" { - name[Group1]= "India - Bengali"; - - // Mainly numbers. - key { [ U09E7 ] }; - key { [ U09E8 ] }; - key { [ U09E9 ] }; - key { [ U09EA ] }; - key { [ U09EB ] }; - key { [ U09EC ] }; - key { [ U09ED ] }; - key { [ U09EE ] }; - key { [ U09EF, parenleft ] }; - key { [ U09E6, parenright ] }; - key { [ minus, U0983 ] }; - key { [ U098B, U09C3 ] }; - -// Mainly long vowels - - key { [ U09CC, U0994 ] }; - key { [ U09C8, U0990 ] }; - key { [ U09BE, U0986 ] }; - key { [ U09C0, U0988 ] }; - key { [ U09C2, U098A ] }; - -// Mainly voiced consonants - - key { [ U09AC, U09AD ] }; - key { [ U09B9, U0999 ] }; - key { [ U0997, U0998 ] }; - key { [ U09A6, U09A7 ] }; - key { [ U099C, U099D ] }; - key { [ U09A1, U09A2 ] }; - key { [ U09BC, U099E ] }; - -// Mainly short vowels - key { [ U09CB, U0993 ] }; - key { [ U09C7, U098F ] }; - key { [ U09CD, U0985 ] }; - key { [ U09BF, U0987 ] }; - key { [ U09C1, U0989 ] }; - - -// Mainly unvoiced consonants - - key { [ U09AA, U09AB ] }; - key { [ U09B0, U09DD ] }; - key { [ U0995, U0996 ] }; - key { [ U09A4, U09A5 ] }; - key { [ U099A, U099B ] }; - key { [ U099F, U09A0 ] }; - key { [ U005C, U007C ] }; - - key { [ z, Z ] }; - key { [ U0982, U0981 ] }; - key { [ U09AE, U09A3 ] }; - key { [ U09A8, U09A8 ] }; - key { [ U09AC, U09AC ] }; - key { [ U09B2, U09B2 ] }; - key { [ U09B8, U09B6 ] }; - key { [ comma, U09B7 ] }; - key { [ period, U0964 ] }; - key { [ U09DF, U09AF ] }; -}; - -xkb_symbols "ben_probhat" { - name[Group1]= "India - Bengali Probhat"; - key { [ Escape ] }; - -// numbers - key { [ U200D, asciitilde ] }; - key { [ U09E7, exclam ] }; - key { [ U09E8, at ] }; - key { [ U09E9, numbersign ] }; - key { [ U09EA, U09F3 ] }; - key { [ U09EB, percent ] }; - key { [ U09EC, asciicircum ] }; - key { [ U09ED, U099E ] }; - key { [ U09EE, U09CE ] }; - key { [ U09EF, parenleft ] }; - key { [ U09E6, parenright ] }; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - key { [ BackSpace ] }; - -// tab, q to ] - key { [ Tab, ISO_Left_Tab ] }; - key { [ U09A6, U09A7 ] }; - key { [ U09C2, U098A ] }; - key { [ U09C0, U0988 ] }; - key { [ U09B0, U09DC ] }; - key { [ U099F, U09A0 ] }; - key { [ U098F, U0990 ] }; - key { [ U09C1, U0989 ] }; - key { [ U09BF, U0987 ] }; - key { [ U0993, U0994 ] }; - key { [ U09AA, U09AB ] }; - key { [ U09C7, U09C8 ] }; - key { [ U09CB, U09CC ] }; - key { [ Return ] }; - -// caps, a to ' -// key { [ Caps_Lock ] }; - key { [ U09BE, U0985 ] }; - key { [ U09B8, U09B7 ] }; - key { [ U09A1, U09A2 ] }; - key { [ U09A4, U09A5 ] }; - key { [ U0997, U0998 ] }; - key { [ U09B9, U0983 ] }; - key { [ U099C, U099D ] }; - key { [ U0995, U0996 ] }; - key { [ U09B2, U0982 ] }; - key { [ semicolon, colon ] }; - key { [ quoteright, quotedbl ] }; - -// shift, z to / -// key { [ Shift_L ] }; - key { [ U09DF, U09AF ] }; - key { [ U09B6, U09DD ] }; - key { [ U099A, U099B ] }; - key { [ U0986, U098B ] }; - key { [ U09AC, U09AD ] }; - key { [ U09A8, U09A3 ] }; - key { [ U09AE, U0999 ] }; - key { [ comma, U09C3 ] }; - key { [ U0964, U0981 ] }; - key { [ U09CD, question ] }; - key { [ U200C, U0965 ] }; - -// key { [ Control_L ] }; -// key { [ space ] }; - -// modifier_map Shift { Shift_L }; -// modifier_map Lock { Caps_Lock }; -// modifier_map Control{ Control_L }; - -}; - -partial alphanumeric_keys -xkb_symbols "guj" { - name[Group1]= "India - Gujarati"; - - // Mainly numbers. - key { [ U0AE7, U0A8D ] }; - key { [ U0AE8, U0AC5 ] }; - key { [ U0AE9 ] }; - key { [ U0AEA ] }; - key { [ U0AEB ] }; - key { [ U0AEC ] }; - key { [ U0AED ] }; - key { [ U0AEE ] }; - key { [ U0AEF, parenleft ] }; - key { [ U0AE6, parenright ] }; - key { [ minus, U0A83 ] }; - key { [ U0A8B, U0AC3 ] }; - -// Mainly long vowels - - key { [ U0ACC, U0A94 ] }; - key { [ U0AC8, U0A90 ] }; - key { [ U0ABE, U0A86 ] }; - key { [ U0AC0, U0A88 ] }; - key { [ U0AC2, U0A8A ] }; - -// Mainly voiced consonants - - key { [ U0AAC, U0AAD ] }; - key { [ U0AB9, U0A99 ] }; - key { [ U0A97, U0A98 ] }; - key { [ U0AA6, U0AA7 ] }; - key { [ U0A9C, U0A9D ] }; - key { [ U0AA1, U0AA2 ] }; - key { [ U0ABC, U0A9E ] }; - -// Mainly short vowels - key { [ U0ACB, U0A93 ] }; - key { [ U0AC7, U0A8F ] }; - key { [ U0ACD, U0A85 ] }; - key { [ U0ABF, U0A87 ] }; - key { [ U0AC1, U0A89 ] }; - -// Mainly unvoiced consonants - - key { [ U0AAA, U0AAB ] }; - key { [ U0AB0, U0AB0 ] }; - key { [ U0A95, U0A96 ] }; - key { [ U0AA4, U0AA5 ] }; - key { [ U0A9A, U0A9B ] }; - key { [ U0A9F, U0AA0 ] }; - key { [ U0AC9, U0A91 ] }; - - key { [ z , Z ] }; - key { [ U0A82, U0A81 ] }; - key { [ U0AAE, U0AA3 ] }; - key { [ U0AA8, U0AA8 ] }; - key { [ U0AB5, U0AB5 ] }; - key { [ U0AB2, U0AB3 ] }; - key { [ U0AB8, U0AB6 ] }; - key { [ comma, U0AB7 ] }; - key { [ period, U0964 ] }; - key { [ U0AAF, question ] }; -}; - -partial alphanumeric_keys -xkb_symbols "kan" { - - // Inscript layout for Kannada - // Author : G Karunakar - // Date : Wed Nov 13 17:22:58 IST 2002 - // Kannada digits mapped in basic only - - name[Group1]= "India - Kannada"; - - key { [ U0cca, U0c92 ] }; - key { [ U0ce7 ] }; - key { [ U0ce8 ] }; - key { [ U0ce9 ] }; - key { [ U0cea ] }; - key { [ U0ceb ] }; - key { [ U0cec ] }; - key { [ U0ced ] }; - key { [ U0cee ] }; - key { [ U0cef ] }; - key { [ U0ce6 ] }; - key { [ U0c83 ] }; - key { [ U0cc3, U0c8b ] }; - - key { [ U0ccc, U0c94 ] }; - key { [ U0cc8, U0c90 ] }; - key { [ U0cbe, U0c86 ] }; - key { [ U0cc0, U0c88 ] }; - key { [ U0cc2, U0c8a ] }; - key { [ U0cac, U0cad ] }; - key { [ U0cb9, U0c99 ] }; - key { [ U0c97, U0c98 ] }; - key { [ U0ca6, U0ca7 ] }; - key { [ U0c9c, U0c9d ] }; - key { [ U0ca1, U0ca2 ] }; - key { [ U0cbc, U0c9e ] }; - - key { [ U0ccb, U0c93 ] }; - key { [ U0cc7, U0c8f ] }; - key { [ U0ccd, U0c85 ] }; - key { [ U0cbf, U0c87 ] }; - key { [ U0cc1, U0c89 ] }; - key { [ U0caa, U0cab ] }; - key { [ U0cb0, U0cb1 ] }; - key { [ U0c95, U0c96 ] }; - key { [ U0ca4, U0ca5 ] }; - key { [ U0c9a, U0c9b ] }; - key { [ U0c9f, U0ca0 ] }; - - key { [ U0cc6, U0c8e ] }; - key { [ U0c82 ] }; - key { [ U0cae, U0ca3 ] }; - key { [ U0ca8 ] }; - key { [ U0cb5, U0cb4 ] }; - key { [ U0cb2, U0cb3 ] }; - key { [ U0cb8, U0cb6 ] }; - key { [ comma , U0cb7 ] }; - key { [ period ] }; - key { [ U0caf, U0040 ] }; - - key { - symbols[Group1] = [ Mode_switch, Multi_key ], - virtualMods = AltGr - }; - -}; - -// Description : A keymap for Malayalam -// Encoding : Unicode (http://www.unicode.org) -// Author : Baiju M -// Date : Sat Aug 17 21:10:48 IST 2002 -// Mapping: - -partial alphanumeric_keys -xkb_symbols "mal" { - - name[Group1] = "India - Malayalam"; - - //From grave to backslash (\) - - key { [ U0d4a , U0d12 ] }; - -// svu: -// These lines were in former "mal" variant - -// but the digits are replaced with the ones from 'mal_plusnum' - -// for the integrity of all Indian layouts -// -// key { [1 , exclam ] }; -// key { [2 , at ] }; -// key { [3 , numbersign ] }; -// key { [4 , dollar ] }; -// key { [5 , percent ] }; -// key { [6 ,asciicircum ] }; -// key { [7 , ampersand ] }; -// key { [8 , asterisk ] }; -// key { [9 , parenleft ] }; -// key { [0 , parenright ] }; - - key { [ U0d67 , exclam ] }; - key { [ U0d68 , at ] }; - key { [ U0d69 , numbersign ] }; - key { [ U0d6a , dollar ] }; - key { [ U0d6b , percent ] }; - key { [ U0d6c , asciicircum ] }; - key { [ U0d6d , ampersand ] }; - key { [ U0d6e , asterisk ] }; - key { [ U0d6f , parenleft ] }; - key { [ U0d66 , parenright ] }; - - key { [ minus , U0d03 ] }; - key { [ U0d43 , U0d0b ] }; - key { [U0200c, U05C ]};//bksl: ZWNJ - - - // From 'q' to right bracket (]) - - key { [ U0d4c , U0d14 ] }; - key { [ U0d48 , U0d10 ] }; - key { [ U0d3e , U0d06 ] }; - key { [ U0d40 , U0d08 ] }; - key { [ U0d42 , U0d0a ] }; - key { [ U0d2c , U0d2d ] }; - key { [ U0d39 , U0d19 ] }; - key { [ U0d17 , U0d18 ] }; - key { [ U0d26 , U0d27 ] }; - key { [ U0d1c , U0d1d ] }; - key { [ U0d21 , U0d22 ] }; - key { [ U0200d , U0d1e ] }; - - // From 'a' to apostrophe (') - - key { [ U0d4b , U0d13 ] }; - key { [ U0d47 , U0d0f ] }; - key { [ U0d4d , U0d05 ] }; - key { [ U0d3f , U0d07 ] }; - key { [ U0d41 , U0d09 ] }; - key { [ U0d2a , U0d2b ] }; - key { [ U0d30 , U0d31 ] }; - key { [ U0d15 , U0d16 ] }; - key { [ U0d24 , U0d25 ] }; - key { [ U0d1a , U0d1b ] }; - key { [ U0d1f , U0d20 ] }; - - // From 'z' to slash (/) - - key { [ U0d46 , U0d0e ] }; - key { [ U0d02 , U200b ] };//X:ZWSP - key { [ U0d2e , U0d23 ] }; - key { [ U0d28 ] }; - key { [ U0d35 , U0d34 ] }; - key { [ U0d32 , U0d33 ] }; - key { [ U0d38 , U0d36 ] }; - key { [ comma , U0d37 ] }; - key { [ period , U0200d ] }; - key { [ U0d2f , question ] }; - -}; - -//Name : Lalitha -//Description : A transliteration keyboard layout for Malayalam -//Original Author : Noah Levitt -//Current Main : Jinesh K.J, Swathantra Malayalam Computing (SMC) - -partial alphanumeric_keys -xkb_symbols "mal_lalitha" { - name[Group1] = "India - Malayalam Lalitha"; - key.type="FOUR_LEVEL"; - //Top Alphanumeric row - // Roman digits - key { [ U0D4D, U0D02, apostrophe, asciitilde ] }; // apostrophe: virama(chandrakala),anusvara - key { [ 1, exclam, U0D67, exclam ] }; - key { [ 2, at, U0D68, at ] }; - key { [ 3, numbersign, U0D69, numbersign ] }; - key { [ 4, dollar, U0D6A, dollar ] }; - key { [ 5, percent, U0D6B, percent ] }; - key { [ 6, asciicircum, U0D6C, asciicircum ] }; - key { [ 7, ampersand, U0D6D, ampersand ] }; - key { [ 8, asterisk, U0D6E, asterisk ] }; - key { [ 9, parenleft, U0D6F, parenleft ] }; - key { [ 0, parenright, U0D66, parenright ] }; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - key { [ U005C, U007C, U200C ] };//backslash:pipe,backslash,ZWNJ - - //Q Row - key { [ U0D48, U0D4C, U0D10, U0D14 ] }; // Q: ai and au matras - key { [ U0D35 ] }; // W: wa, OM - key { [ U0D46, U0D47, U0D0E, U0D0F ] }; // E: e,ee matras - key { [ U0D30, U0D31, U0D43, U0D0B ] }; // R: ra,rra, vocalic Ri - key { [ U0D24, U0D25, U0D1F, U0D20 ] }; // T: tha, ttha,ta,tta - key { [ U0D2f ] }; // Y: ya - key { [ U0D41, U0D42, U0D09, U0D0A ] }; // U: u, uu matras - key { [ U0D3F, U0D40, U0D07, U0D08 ] }; // I: i, ii matras - key { [ U0D4A, U0D4B, U0D12, U0D13 ] }; // O: o, oo matras - key { [ U0D2A ] }; // P: pa - key { [ bracketleft, braceleft ] };//braceleft: - key { [ bracketright, braceright ] };//braceright: - - //A Row - key { [ U0D3E, U0D05, U0D06, U0D05 ] }; // A: a,aa - key { [ U0D38, U0D37 ] }; // S: sa, ssa - key { [ U0D26, U0D27, U0D21, U0D22 ] }; // D: soft da,soft dda,hard da,hard dda, - key { [ U0D2B ] }; // F: pha - key { [ U0D17, U0D18 ] }; // G: ga, gha - key { [ U0D39, U0D03 ] }; // H: ha, visarg - key { [ U0D1C, U0D1D ] }; // J: ja, jha - key { [ U0D15, U0D16 ] }; // K: ka, kha - key { [ U0D32, U0D33 ] }; // L: la, vocalic L or lru matra` - key { [ semicolon, colon ] }; - key { [apostrophe, quotedbl ] }; - - //Z Row - key { [ U0D34, U0D36 ] }; // Z: sha,zha - key { [ U0D4D, U200B ] }; // X: chandrakala,ZWSP - key { [ U0D1A, U0D1B ] }; // C: ca, cha - key { [ U0D35, U200D ] }; // V: va,ZWJ - key { [ U0D2C, U0D2D ] }; // B: ba, bha - key { [ U0D28, U0D23, U0D19, U0D1E ] }; // N: na, hard na,nga,nha - key { [ U0D2E, U0D02 ] }; // M: ma - key { [ comma, U003C ] };// comma: comma - key { [ period, U003E ] }; // period: period - key { [ slash, question ] }; - - // begin modifier mappings -// modifier_map Shift { Shift_L }; -// modifier_map Lock { Caps_Lock }; -// modifier_map Control{ Control_L }; -// modifier_map Mod3 { Mode_switch }; - include "level3(ralt_switch)" -}; - - -partial alphanumeric_keys -xkb_symbols "ori" { - // Inscript layout for Oriya - // Author: G Karunakar - // Date: Wed Nov 13 18:16:19 IST 2002 - - name[Group1]= "India - Oriya"; - - key { [ U0b67 ] }; - key { [ U0b68 ] }; - key { [ U0b69 ] }; - key { [ U0b6a ] }; - key { [ U0b6b ] }; - key { [ U0b6c ] }; - key { [ U0b6d ] }; - key { [ U0b6e ] }; - key { [ U0b6f ] }; - key { [ U0b66 ] }; - key { [ U0b03 ] }; - key { [ U0b43, U0b0b ] }; - - key { [ U0b4c, U0b14 ] }; - key { [ U0b48, U0b10 ] }; - key { [ U0b3e, U0b06 ] }; - key { [ U0b40, U0b08 ] }; - key { [ U0b42, U0b0a ] }; - key { [ U0b2c, U0b2d ] }; - key { [ U0b39, U0b19 ] }; - key { [ U0b17, U0b18 ] }; - key { [ U0b26, U0b27 ] }; - key { [ U0b1c, U0b1d ] }; - key { [ U0b21, U0b22 ] }; - key { [ U0b3c, U0b1e ] }; - - key { [ U0b4b, U0b13 ] }; - key { [ U0b47, U0b0f ] }; - key { [ U0b4d, U0b05 ] }; - key { [ U0b3f, U0b07 ] }; - key { [ U0b41, U0b09 ] }; - key { [ U0b2a, U0b2b ] }; - key { [ U0b30 ] }; - key { [ U0b15, U0b16 ] }; - key { [ U0b24, U0b25 ] }; - key { [ U0b1a, U0b1b ] }; - key { [ U0b1f, U0b20 ] }; - - key { [ U0b02, U0b01 ] }; - key { [ U0b2e, U0b23 ] }; - key { [ U0b28 ] }; - key { [ U0b35 ] }; - key { [ U0b32, U0b33 ] }; - key { [ U0b38, U0b36 ] }; - key { [ comma , U0b37 ] }; - key { [ period ] }; - key { [ U0b2f, U0040 ] }; - - key { - symbols[Group1] = [ Mode_switch, Multi_key ], - virtualMods = AltGr - }; -}; - -// based on a keyboard map from an 'xkb/symbols/tml' file -// INSCRIPT -partial alphanumeric_keys -xkb_symbols "tam" { - name[Group1]= "India - Tamil"; - - key { [ U0BCA, U0B92 ] }; - - // Mainly numbers. - key { [ U0BE7 ] }; - key { [ U0BE8 ] }; - key { [ U0BE9 ] }; - key { [ U0BEA ] }; - key { [ U0BEB ] }; - key { [ U0BEC ] }; - key { [ U0BED ] }; - key { [ U0BEE ] }; - key { [ U0BEF, parenleft ] }; - key { [ U0BF0, parenright ] }; - key { [ U0BF1, U0B83 ] }; - key { [ U0BF2, plus ] }; - -// Mainly long vowels - - key { [ U0BCC, U0B94 ] }; - key { [ U0BC8, U0B90 ] }; - key { [ U0BBE, U0B86 ] }; - key { [ U0BC0, U0B88 ] }; - key { [ U0BC2, U0B8A ] }; - -// Mainly voiced consonants - - key { [ U0BB9, U0B99 ] }; - key { [ U0B9c ] }; - key { [ U0B9E ] }; - -// Mainly short vowels - key { [ U0BCB, U0B93 ] }; - key { [ U0BC7, U0B8F ] }; - key { [ U0BCD, U0B85 ] }; - key { [ U0BBF, U0B87 ] }; - key { [ U0BC1, U0B89 ] }; - -// Mainly unvoiced consonants - - key { [ U0BAA ] }; - key { [ U0BB0, U0BB1 ] }; - key { [ U0B95 ] }; - key { [ U0BA4 ] }; - key { [ U0B9A ] }; - key { [ U0B9F ] }; - key { [ U005C, U007C ] };//backslash-bar - Changed to Unicode - - key { [ U0BC6, U0B8E ] }; - key { [ U0B82 ] }; - key { [ U0BAE, U0BA3 ] }; - key { [ U0BA8, U0BA9 ] }; - key { [ U0BB5, U0BB4 ] }; - key { [ U0BB2, U0BB3 ] }; - key { [ U0BB8, U0BB6 ] }; - key { [ comma, U0BB7 ] }; - key { [ period, U0964 ] }; - key { [ U0BAF, question ] }; -}; - -partial alphanumeric_keys -xkb_symbols "tam_unicode" { - -// Description: A keymap based on the TamilNet'99 typewriter keyboard -// Encoding: Unicode (http://www.unicode.org) -// Author: Thuraiappah Vaseeharan -// Modifed by: Malathi S -// Secondary contact: Sri Ramadoss M -// Date : Fri Sep 4 11:32:00 CST 2009 -// Mapping: - - name[Group1]= "India - Tamil Unicode"; - - // granthas - key { [ apostrophe, asciitilde ] }; - key { [ U0031, exclam ] } ; - key { [ U0032, at ] } ; - key { [ U0033, numbersign ] } ; - key { [ U0034, U0BF9 ] } ; - key { [ U0035, percent ] } ; - key { [ U0036, asciicircum ] } ; - key { [ U0037, ampersand ] } ; - key { [ U0038, asterisk ] } ; - key { [ U0039, parenleft ] } ; - key { [ U0030, parenright ] } ; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - - - // Qrow - key { [ U0B9E, U0BB6 ] }; - key { [ U0BB1, U0BB7 ] }; - key { [ U0BA8, U0BB8 ] }; - key { [ U0B9A, U0BB9 ] }; - key { [ U0BB5, U0B9C ] }; - key { [ U0BB2 ] }; - key { [ U0BB0 ] }; - key { [ U0BC8, U0B90 ] }; - key { [ U0BCA, U0BCB ] }; - key { [ U0BBF, U0BC0 ] }; - key { [ U0BC1, U0BC2 ] }; - - // Arow - key { [ U0BAF ] }; - key { [ U0BB3 ] }; - key { [ U0BA9 ] }; - key { [ U0B95 ] }; - key { [ U0BAA ] }; - key { [ U0BBE, U0BB4 ] }; - key { [ U0BA4 ] }; - key { [ U0BAE ] }; - key { [ U0B9F ] }; - key { [ U0BCD, U0B83 ] }; - key { [ U0B99 ] }; - - // Zrow - key { [ U0BA3 ] }; - key { [ U0B92, U0B93 ] }; - key { [ U0B89, U0B8A ] }; - key { [ U0B8E, U0B8F ] }; - key { [ U0BC6, U0BC7 ] }; - key { [ U0B94, U0BCC ] }; - key { [ U0B85, U0B86 ] }; - key { [ U0B87, U0B88 ] }; -}; - -partial alphanumeric_keys -xkb_symbols "tam_keyboard_with_numerals" { - -// Description: A keymap based on the TamilNet'99 typewriter keyboard -// Encoding: Unicode (http://www.unicode.org) -// Author: Malathi S -// Secondary contact: Sri Ramadoss M -// Date : Fri Sep 4 11:33:00 CST 2009 -// Mapping: - - name[Group1]= "India - Tamil Keyboard with Numerals"; - - // Mainly numbers. - key { [ apostrophe, asciitilde ] }; - key { [ U0BE7, exclam ] }; - key { [ U0BE8, at ] }; - key { [ U0BE9, numbersign ] }; - key { [ U0BEA, U0BF9 ] }; - key { [ U0BEB, percent ] }; - key { [ U0BEC, asciicircum ] }; - key { [ U0BED, ampersand ] }; - key { [ U0BEE, asterisk ] }; - key { [ U0BEF, parenleft ] }; - key { [ U0BE6, parenright ] }; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - - - // Qrow - key { [ U0B9E, U0BB6 ] }; - key { [ U0BB1, U0BB7 ] }; - key { [ U0BA8, U0BB8 ] }; - key { [ U0B9a, U0BB9 ] }; - key { [ U0BB5, U0B9c ] }; - key { [ U0BB2 ] }; - key { [ U0BB0 ] }; - key { [ U0BC8, U0B90 ] }; - key { [ U0BCA, U0BCB ] }; - key { [ U0BBF, U0BC0 ] }; - key { [ U0BC1, U0BC2 ] }; - - // Arow - key { [ U0BAF ] }; - key { [ U0BB3 ] }; - key { [ U0BA9 ] }; - key { [ U0B95 ] }; - key { [ U0BAA ] }; - key { [ U0BBE, U0BB4 ] }; - key { [ U0BA4 ] }; - key { [ U0BAE ] }; - key { [ U0B9F ] }; - key { [ U0BCD, U0B83 ] }; - key { [ U0B99 ] }; - - // Zrow - key { [ U0BA3 ] }; - key { [ U0B92, U0B93 ] }; - key { [ U0B89, U0B8A ] }; - key { [ U0B8E, U0B8F ] }; - key { [ U0BC6, U0BC7 ] }; - key { [ U0B94, U0BCC ] }; - key { [ U0B85, U0B86 ] }; - key { [ U0B87, U0B88 ] }; -}; - -partial alphanumeric_keys -xkb_symbols "tam_TSCII" { - -// Description : A Tamil typewrite-style keymap -// loosely based on TamilNet'99 reommendations -// Encoding : TSCII (http://www.tscii.org) -// Author : Thuraiappah Vaseeharan -// Last Modified: Sat Jan 5 17:11:26 CST 2002 - - name[Group1]= "India - Tamil TSCII Typewriter"; - - key { [ 0x10000b7, 0x10000a4 ] }; // aytham - key { [ 0x1000082, 0x10000a5 ] }; // shri - key { [ 0x1000083, 0x1000088 ] }; // ja - key { [ 0x1000084, 0x1000089 ] }; // sha - key { [ 0x1000085, 0x100008a ] }; // sa - key { [ 0x1000086, 0x100008b ] }; // ha - key { [ 0x1000087, 0x100008c ] }; // ksha - - // Qrow - key { [ 0x10000bb, 0x100009a ] }; // nja - key { [ 0x10000c8, 0x10000da ] }; // Ra - key { [ 0x10000bf, 0x10000d1 ] }; // NNa - key { [ 0x10000ba, 0x10000cd ] }; // ca - key { [ 0x10000c5, 0x10000d7 ] }; // va - key { [ 0x10000c4, 0x10000d6 ] }; // la - key { [ 0x10000c3, 0x10000d5 ] }; // ra - key { [ 0x10000a8, 0x10000b3 ] }; // sangili, ai - key { [ 0x10000ca, 0x10000cb ] }; // di, dI - key { [ 0x10000a2, 0x10000a3 ] }; // visiri - key { [ dead_acute, 0x10000a3 ] }; // Ukaaram - - // Arow - key { [ 0x10000c2, 0x10000d4 ] }; // ya - key { [ 0x10000c7, 0x10000d9 ] }; // La - key { [ 0x10000c9, 0x10000db ] }; // na - key { [ 0x10000b8, 0x10000cc ] }; // ka - key { [ 0x10000c0, 0x10000d2 ] }; // pa - key { [ dead_grave,0x10000a1 ] }; // pulli,aravu - key { [ 0x10000be, 0x10000d0 ] }; // tha - key { [ 0x10000c1, 0x10000d3 ] }; // ma - key { [ 0x10000bc, 0x10000ce ] }; // da - key { [ 0x10000c6, 0x10000d8 ] }; // zha - key { [ 0x10000b9, 0x1000099 ] }; // nga - - // Zrow - key { [ 0x10000bd, 0x10000cf ] }; // Na - key { [ 0x10000b4, 0x10000b5 ] }; // o, O - key { [ 0x10000af, 0x10000b0 ] }; // u, U - key { [ 0x10000b1, 0x10000b2 ] }; // e, E - key { [ 0x10000a6, 0x10000a7 ] }; // kombus - key { [ 0x10000b6, 0x10000aa ] }; // au - key { [ 0x10000ab, 0x10000ac ] }; // a, A - key { [ 0x10000fe, 0x10000ae ] }; // i, I - -}; - -partial alphanumeric_keys -xkb_symbols "tam_TAB" { - -// Description: A keymap based on the TamilNet'99 typewriter keyboard -// Encoding: TAB (http://www.tamilnet99.org) -// Author: Thuraiappah Vaseeharan -// Date : Sun Aug 12 02:23:00 CDT 2001 - - name[Group1]= "India - Tamil TAB Typewriter"; - - // numeral row - key { [ 0x10000e7, 0x10000a7 ] } ; - key { [ 0x10000fa, 0x10000a8 ] } ; - key { [ 0x10000fb ] } ; - key { [ 0x10000fc ] } ; - key { [ 0x10000fd ] } ; - key { [ 0x10000fe ] } ; - key { [ 0x10000ff ] } ; - - // q-row - key { [ 0x10000eb, 0x10000b3 ] }; - key { [ 0x10000f8, 0x10000c1 ] }; - key { [ 0x10000ef, 0x10000b8 ] }; - key { [ 0x10000ea, 0x10000b2 ] }; - key { [ 0x10000f5, 0x10000be ] }; - key { [ 0x10000f4, 0x10000bd ] }; - key { [ 0x10000f3, 0x10000bc ] }; - key { [ 0x10000ac, 0x10000e4 ] }; - key { [ 0x10000ae, 0x10000af ] }; - key { [ 0x10000a4, 0x10000a6 ] }; - key { [ dead_circumflex, 0x10000a6 ] }; // Ukaaram - - // a-row - key { [ 0x10000f2, 0x10000bb ] }; - key { [ 0x10000f7, 0x10000c0 ] }; - key { [ 0x10000f9, 0x10000c2 ] }; - key { [ 0x10000e8, 0x10000b0 ] }; - key { [ 0x10000f0, 0x10000b9 ] }; - key { [ 0x10000a2, 0x10000a3 ] }; - key { [ 0x10000ee, 0x10000b6 ] }; - key { [ 0x10000f1, 0x10000ba ] }; - key { [ 0x10000ec, 0x10000b4 ] }; - key { [ 0x10000f6, 0x10000bf ] }; - key { [ 0x10000e9, 0x10000b1 ] }; - - // z-row - key { [ 0x10000ed, 0x10000b5 ] }; - key { [ 0x10000e5, 0x10000e6 ] }; - key { [ 0x10000e0, 0x10000e1 ] }; - key { [ 0x10000e2, 0x10000e3 ] }; - key { [ 0x10000aa, 0x10000ab ] }; - key { [ 0x10000ac, 0x10000a3 ] }; - key { [ 0x10000dc, 0x10000dd ] }; - key { [ 0x10000de, 0x10000df ] }; -}; - -partial alphanumeric_keys -xkb_symbols "tel" { - - // Inscript layout for Telugu using Unicode - // Author: G Karunakar - // Date: - // See layout at http://www.indlinux.org/keymap/telugu.php - - name[Group1]= "India - Telugu"; - - key { [ U0c4a, U0c12 ] }; - key { [ U0c67 ] }; - key { [ U0c68 ] }; - key { [ U0c69, numbersign ] }; - key { [ U0c6a, dollar ] }; - key { [ U0c6b, percent ] }; - key { [ U0c6c, asciicircum ] }; - key { [ U0c6d, ampersand ] }; - key { [ U0c6e, asterisk ] }; - key { [ U0c6f, parenleft ] }; - key { [ U0c66, parenright ] }; - key { [ U0c03, underscore ] }; - key { [ U0c43, U0c0b ] }; - key { [ BackSpace ] }; - - key { [ U0c4c, U0c14 ] }; - key { [ U0c48, U0c10 ] }; - key { [ U0c3e, U0c06 ] }; - key { [ U0c40, U0c08 ] }; - key { [ U0c42, U0c0a ] }; - key { [ U0c2c, U0c2d ] }; - key { [ U0c39, U0c19 ] }; - key { [ U0c17, U0c18 ] }; - key { [ U0c26, U0c27 ] }; - key { [ U0c1c, U0c1d ] }; - key { [ U0c21, U0c22 ] }; - key { [ U0c1e ] }; - - key { [ U0c4b, U0c13 ] }; - key { [ U0c47, U0c0f ] }; - key { [ U0c4d, U0c05 ] }; - key { [ U0c3f, U0c07 ] }; - key { [ U0c41, U0c09 ] }; - key { [ U0c2a, U0c2b ] }; - key { [ U0c30, U0c31 ] }; - key { [ U0c15, U0c16 ] }; - key { [ U0c24, U0c25 ] }; - key { [ U0c1a, U0c1b ] }; - key { [ U0c1f, U0c20 ] }; - - key { [ U0c46, U0c0e ] }; - key { [ U0c02, U0c01 ] }; - key { [ U0c2e, U0c23 ] }; - key { [ U0c28 ] }; - key { [ U0c35 ] }; - key { [ U0c32, U0c33 ] }; - key { [ U0c38, U0c36 ] }; - key { [ comma , U0c37 ] }; - key { [ period ] }; - key { [ U0c2f, U0040 ] }; - - key { - symbols[Group1] = [ Mode_switch, Multi_key ], - virtualMods = AltGr - }; -}; - -partial alphanumeric_keys -xkb_symbols "urd-phonetic" { - include "pk(urd-phonetic)" - name[Group1]= "India - Urdu, Phonetic"; -}; - -partial alphanumeric_keys -xkb_symbols "urd-phonetic3" { - include "pk(urd-crulp)" - name[Group1]= "India - Urdu, Alternative phonetic"; -}; - -partial alphanumeric_keys -xkb_symbols "urd-winkeys" { - include "pk(urd-nla)" - name[Group1]= "India - Urdu, Winkeys"; -}; - -// based on a keyboard map from an 'xkb/symbols/gur' file - -partial alphanumeric_keys -xkb_symbols "guru" { - name[Group1]= "India - Gurmukhi"; - - // Mainly numbers. - key { [ U0A67 ] }; - key { [ U0A68 ] }; - key { [ U0A69, U0A71 ] }; - key { [ U0A6A, U0A74 ] }; - key { [ U0A6B, U262C ] }; - key { [ U0A6C ] }; - key { [ U0A6D ] }; - key { [ U0A6e ] }; - key { [ U0A6F, parenleft ] }; - key { [ U0A66, parenright ] }; - key { [ gur_visarga ] }; - key { [ equal, plus ] }; - -// Mainly long vowels - - key { [ U0A4C, U0A14 ] }; - key { [ U0A48, U0A10 ] }; - key { [ U0A3E, U0A06 ] }; - key { [ U0A40, U0A08 ] }; - key { [ U0A42, U0A0A ] }; - -// Mainly voiced consonants - - key { [ U0A2C, U0A2D ] }; - key { [ U0A39, U0A19 ] }; - key { [ U0A17, U0A18 ] }; - key { [ U0A26, U0A27 ] }; - key { [ U0A1C, U0A1D ] }; - key { [ U0A21, U0A22 ] }; - key { [ U0A3C, U0A1E ] }; - -// Mainly short vowels - key { [ U0A4B, U0A13 ] }; - key { [ U0A47, U0A0F ] }; - key { [ U0A4D, U0A05 ] }; - key { [ U0A3F, U0A07 ] }; - key { [ U0A41, U0A09 ] }; - -// Mainly unvoiced consonants - - key { [ U0A2A, U0A2B ] }; - key { [ U0A30, U0A5C ] }; - key { [ U0A15, U0A16 ] }; - key { [ U0A24, U0A25 ] }; - key { [ U0A1A, U0A1B ] }; - key { [ U0A1F, U0A20 ] }; - key { [ U005C, U007C ] }; - - key { [ z, U0A01 ] }; - key { [ U0A02, U0A70, U0A71 ] }; - key { [ U0A2E, U0A23 ] }; - key { [ U0A28, U0A28 ] }; - key { [ U0A35, U0A35 ] }; - key { [ U0A32, U0A33 ] }; - key { [ U0A38, U0A36 ] }; - key { [ comma, less ] }; - key { [ period, U0964 ] }; - key { [ U0A2F, question ] }; -}; - -//Name : Jhelum (Refind Inscript) -//Description : A Jhelum keyboard layout for Gurmukhi (Punjabi) -// http://www.satluj.org/Jhelum.html -//Modified for Inscript to make -//Original Author : Amanpreet Singh Alam { [ apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu - key { [ 1,exclam, U0A67, exclam ] }; - key { [ 2,at, U0A68, at ] }; - key { [ 3,numbersign, U0A69, numbersign ] }; - key { [ 4,dollar, U0A6A, dollar ] }; - key { [ 5,percent,U0A6B, percent ] }; - key { [ 6,asciicircum, U0A6C,asciicircum ] }; - key { [ 7,ampersand,U0A6D,ampersand ] }; - key { [ 8,asterisk,U0A6E, asterisk ] }; - key { [ 9,parenleft,U0A6F,parenleft ] }; - key { [ 0,parenright,U0A66,parenright ] }; - key { [ minus,underscore] }; - key { [ equal,plus] }; - key { [ U0964,U0965,U007C,U005C] }; //pipe : danda, double danda - - //Q Row - key { [ U0A4C, U0A14 ] }; // Q: oo, ooh - key { [ U0A48, U0A10 ] }; // W: ee, ae - key { [ U0A3E, U0A06 ] }; // E: a, aa - key { [ U0A40, U0A08 ] }; // R: ee, ai - key { [ U0A42, U0A0A ] }; // T: u, uu - key { [ U0A30, U0A5C ] }; // Y: ra, raa - key { [ U0A26, U0A27 ] }; // U: tha, thha - key { [ U0A17, U0A18 ] }; // I:ga, gha - key { [ U0A24, U0A1F ] }; // O: ta, tha - key { [ U0A2A, U0A5E ] }; // P: pa, pha - key { [ U0A21, U0A22, bracketleft, braceleft ] }; - key { [ U0A19, U0A1E, bracketright, braceright ] }; - - //A Row - key { [ U0A4B, U0A13 ] }; // A: o, oo - key { [ U0A40, U0A0F ] }; // S: e, ee - key { [ U0A4D, U0A05 ] }; // D: halant, aa - key { [ U0A3F, U0A07 ] }; // F: i, aa - key { [ U0A41, U0A09 ] }; // G: u, uh - key { [ U0A39, U0A20 ] }; // H: ha, thha - key { [ U0A1C, U0A1D ] }; // J: ja, jha - key { [ U0A15, U0A16 ] }; // K: ka, kha - key { [ U0A32, U0A25 ] }; // L: la, tha - key { [ U0A38, semicolon, colon ] }; //; sa - key { [apostrophe, quotedbl ] }; - - //Z Row - key { [ U0A71, U0A3C ] }; // Z: addak, par bindi - key { [ U0A02, U0A70 ] }; // X: bindi, tippi - key { [ U0A1A, U0A1B ] }; // C: ca, cha - key { [ U0A35, U0A2F ] }; // V: va, ya - key { [ U0A2C, U0A2D ] }; // B: ba, bha - key { [ U0A28, U0A23 ] }; // N: na, nha - key { [ U0A2E, U0A2E ] }; // M: ma - key { [ comma, U262C ] };// comma: comma, dev abbreviation sign - key { [ period, U0A74 ] }; // period: period, nukta - key { [ slash, question ] }; - -// begin modifier mappings -// modifier_map Shift { Shift_L }; -// modifier_map Lock { Caps_Lock }; -// modifier_map Control{ Control_L }; -// modifier_map Mod3 { Mode_switch }; - include "level3(ralt_switch)" -}; - -partial alphanumeric_keys -xkb_symbols "olpc" { - -// Contact: Walter Bender - - include "in(deva)" - key { [ U094A, U0912 ] }; // DEVANAGARI VOWEL SIGN SHORT O; DEVANAGARI LETTER SHORT O - key { [ U0967, U090D ] }; // DEVANAGARI DIGIT ONE; DEVANAGARI LETTER CANDRA E - key { [ U0968, U0945 ] }; // DEVANAGARI DIGIT TWO; DEVANAGARI VOWEL SIGN CANDRA E - key { [ U0969 ] }; // DEVANAGARI DIGIT THREE; - key { [ U096A ] }; // DEVANAGARI DIGIT FOUR; - key { [ U096B ] }; // DEVANAGARI DIGIT FIVE; - key { [ U096C ] }; // DEVANAGARI DIGIT SIX; - key { [ U096D ] }; // DEVANAGARI DIGIT SEVEN; - key { [ U096E ] }; // DEVANAGARI DIGIT EIGHT; - key { [ U096F, parenleft ] }; // DEVANAGARI DIGIT NINE; - key { [ U0966, parenright ] }; // DEVANAGARI DIGIT ZERO; - key { [ minus, U0903 ] }; // DEVANAGARI SIGN VISARGA; - key { [ U0943, U090B ] }; // DEVANAGARI VOWEL SIGN VOCALIC R; DEVANAGARI LETTER VOCALIC R - - key { [ U094C, U0914 ] }; // DEVANAGARI VOWEL SIGN AU; DEVANAGARI LETTER AU - key { [ U0948, U0910 ] }; // DEVANAGARI VOWEL SIGN AI; DEVANAGARI LETTER AI - key { [ U093E, U0906 ] }; // DEVANAGARI VOWEL SIGN AA; DEVANAGARI LETTER AA - key { [ U0940, U0908 ] }; // DEVANAGARI VOWEL SIGN II; DEVANAGARI LETTER II - key { [ U0942, U090A ] }; // DEVANAGARI VOWEL SIGN UU; DEVANAGARI LETTER UU - key { [ U092C, U092D ] }; // DEVANAGARI LETTER BA; DEVANAGARI LETTER BHA - key { [ U0939, U0919 ] }; // DEVANAGARI LETTER HA; DEVANAGARI LETTER NGA - key { [ U0917, U0918 ] }; // DEVANAGARI LETTER GA; DEVANAGARI LETTER GHA - key { [ U0926, U0927 ] }; // DEVANAGARI LETTER DA; DEVANAGARI LETTER DHA - key { [ U091C, U091D ] }; // DEVANAGARI LETTER JA; DEVANAGARI LETTER JHA - key { [ U0921, U0922 ] }; // DEVANAGARI LETTER DDA; DEVANAGARI LETTER DDHA - key { [ U093C, U091E ] }; // DEVANAGARI SIGN NUKTA; DEVANAGARI LETTER NYA - - key { [ U0949, U0911 ] }; // DEVANAGARI VOWEL SIGN CANDRA O; DEVANAGARI LETTER CANDRA O - - key { [ U094B, U0913 ] }; // DEVANAGARI VOWEL SIGN O; DEVANAGARI LETTER O - key { [ U0947, U090F ] }; // DEVANAGARI VOWEL SIGN E; DEVANAGARI LETTER E - key { [ U094D, U0905 ] }; // DEVANAGARI SIGN VIRAMA; DEVANAGARI LETTER A - key { [ U093F, U0907 ] }; // DEVANAGARI VOWEL SIGN I; DEVANAGARI LETTER I - key { [ U0941, U0909 ] }; // DEVANAGARI VOWEL SIGN U; DEVANAGARI LETTER U - key { [ U092A, U092B ] }; // DEVANAGARI LETTER PA; DEVANAGARI LETTER PHA - key { [ U0930, U0931 ] }; // DEVANAGARI LETTER RA; DEVANAGARI LETTER RRA - key { [ U0915, U0916 ] }; // DEVANAGARI LETTER KA; DEVANAGARI LETTER KHA - key { [ U0924, U0925 ] }; // DEVANAGARI LETTER TA; DEVANAGARI LETTER THA - key { [ U091A, U091B ] }; // DEVANAGARI LETTER CA; DEVANAGARI LETTER CHA - key { [ U091F, U0920 ] }; // DEVANAGARI LETTER TTA; DEVANAGARI LETTER TTHA - - key { [ U0946, U090E ] }; // DEVANAGARI VOWEL SIGN SHORT E; DEVANAGARI LETTER SHORT E - key { [ U0902, U0901 ] }; // DEVANAGARI SIGN ANUSVARA; DEVANAGARI SIGN CANDRABINDU - key { [ U092E, U0923 ] }; // DEVANAGARI LETTER MA; DEVANAGARI LETTER NNA - key { [ U0928, U0929 ] }; // DEVANAGARI LETTER NA; DEVANAGARI LETTER NNNA - key { [ U0935, U0934 ] }; // DEVANAGARI LETTER VA; DEVANAGARI LETTER LLLA - key { [ U0932, U0933 ] }; // DEVANAGARI LETTER LA; DEVANAGARI LETTER LLA - key { [ U0938, U0936 ] }; // DEVANAGARI LETTER SA; DEVANAGARI LETTER SHA - key { [ comma, U0937 ] }; // DEVANAGARI LETTER SSA - key { [ period, U0964 ] }; // DEVANAGARI DANDA - key { [ U092F, U095F ] }; // DEVANAGARI LETTER YA; DEVANAGARI LETTER YYA - - // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ): - include "nbsp(zwnj3zwj4)" - - include "group(olpc)" -}; - -partial alphanumeric_keys -xkb_symbols "hin-wx" { - - name[Group1]= "India - Hindi Wx"; - - key { [ grave, asciitilde, 2, 3 ] }; - - key { [ 0x1000967, exclam ] }; - key { [ 0x1000968, at ] }; - key { [ 0x1000969 , numbersign ] }; - key { [ 0x100096A , dollar ] }; - key { [ 0x100096B , percent ] }; - key { [ 0x100096C , asciicircum ] }; - key { [ 0x100096D , ampersand ] }; - key { [ 0x100096e , asterisk ] }; - key { [ 0x100096F, parenleft ] }; - key { [ 0x1000966, parenright ] }; - key { [ minus, underscore ] }; - key { [ equal, plus ] }; - - - key { [ 0x1000943, 0x1000944, 0x100090B, 0x1000960] }; - key { [ 0x1000924, 0x1000925 ] }; - key { [ 0x1000947, 0x1000948, 0x100090F, 0x1000910] }; - key { [ 0x1000930, 0x1000937 ] }; - key { [ 0x100091F, 0x1000920 ] }; - - - key { [ 0x100092F ] }; - key { [ 0x1000941, 0x1000942, 0x1000909, 0x100090A ] }; - key { [ 0x100093F, 0x1000940, 0x1000907, 0x1000908 ] }; - key { [ 0x100094B, 0x100094C, 0x1000913, 0x1000914] }; - key { [ 0x100092A, 0x100092B ] }; - key { [ bracketleft, braceleft ] }; - key { [ bracketright, braceright ] }; - key { [ backslash, bar, 0x1000964, 0x1000965 ] }; - - key { [ 0x100094D, 0x100093E, 0x1000905,0x1000906 ] }; - key { [ 0x1000938, 0x1000936 ] }; - key { [ 0x1000921, 0x1000922 ] }; - key { [ 0x1000919, 0x100091E ] }; - key { [ 0x1000917, 0x1000918 ] }; - - - key { [ 0x1000939, 0x1000903 ] }; - key { [ 0x100091C, 0x100091D ] }; - key { [ 0x1000915, 0x1000916 ] }; - key { [ 0x1000932, 0x1000962, 0x1000933, 0x100090C] }; - key { [ semicolon, colon ] }; - key { [ quoteright, quotedbl ] }; - - key { [ 0x1000901, 0x100093C, 0x100093D, 0x1000950] }; - key { [ 0x1000926, 0x1000927 ] }; - key { [ 0x100091A, 0x100091B ] }; - key { [ 0x1000935, dead_V ] }; - key { [ 0x100092C, 0x100092D ] }; - key { [ 0x1000928, 0x1000923 ] }; - key { [ 0x100092E, 0x1000902 ] }; - key { [ comma, less ] }; - key { [ period, greater ] }; - key { [ slash, question ] }; - - include "level3(ralt_switch)" -}; - -partial alphanumeric_keys -xkb_symbols "eng" { - - name[Group1]= "India - English with RupeeSign"; - - include "us(basic)" - - include "rupeesign(4)" - - include "level3(ralt_switch)" -}; +// This layout includes all Indian layouts, including: +// - Bengali +// - Gujarati +// - Kannada +// - Malayalam +// - Oriya +// - Tamil +// - Telugu +// - Urdu + +// Links: +// - Indic INSCRIPT keyboard layout diagrams: +// http://java.sun.com/products/jfc/tsc/articles/InputMethod/indiclayout.html +// - Ekusheyr Shadhinota (Bengali layouts): +// http://ekushey.org/projects/shadhinota/index.html +// - Microsoft Windows XP SP2: Indic Language Standards - an Introduction: +// http://www.bhashaindia.com/MSProducts/XpSp2/Articles/IndicLanguageStandards.aspx + +// based on a keyboard map from an 'xkb/symbols/dev' file + +// Devangari is the default. Kill me if I am wrong:) +default partial alphanumeric_keys +xkb_symbols "deva" { + // March 2004 -- David Holl + name[Group1]="India"; + + key.type="FOUR_LEVEL"; + + key { [ U094a, U0912, grave, asciitilde ] }; + key { [ U0967, U090d, 1, exclam ] }; + key { [ U0968, U0945, 2, at ] }; + // Shift+AE0[3-8] really need to return a macro of keys defined by + // INSCRIPT in place of the symbols that are here for now. But this + // requires XKB to map 1 key into two to three other key presses. + key { [ U0969, numbersign, 3, numbersign ] }; + key { [ U096a, dollar, 4, dollar ] }; + key { [ U096b, percent, 5, percent ] }; + key { [ U096c, asciicircum, 6, asciicircum ] }; + key { [ U096d, ampersand, 7, ampersand ] }; + key { [ U096e, asterisk, 8, asterisk ] }; + key { [ U096f, parenleft, 9, parenleft ] }; + key { [ U0966, parenright, 0, parenright ] }; + key { [ minus, U0903, minus, underscore ] }; + key { [ U0943, U090b, U0944, U0960 ] }; + + key { [ U094c, U0914 ] }; + key { [ U0948, U0910 ] }; + key { [ U093e, U0906 ] }; + key { [ U0940, U0908, U0963, U0961 ] }; + key { [ U0942, U090a ] }; + key { [ U092c, U092d ] }; + key { [ U0939, U0919 ] }; + key { [ U0917, U0918, U095a ] }; + key { [ U0926, U0927 ] }; + key { [ U091c, U091d, U095b ] }; + key { [ U0921, U0922, U095c, U095d ] }; + key { [ U093c, U091e ] }; + // I added \ / ? | for shell-convenience (file names and piping) + key { [ U0949, U0911, U005C, U007C ] }; + + key { [ U094b, U0913 ] }; + key { [ U0947, U090f ] }; + key { [ U094d, U0905 ] }; + key { [ U093f, U0907, U0962, U090c ] }; + key { [ U0941, U0909 ] }; + key { [ U092a, U092b, NoSymbol, U095e ] }; + key { [ U0930, U0931 ] }; + key { [ U0915, U0916, U0958, U0959 ] }; + key { [ U0924, U0925 ] }; + key { [ U091a, U091b, U0952 ] }; + key { [ U091f, U0920, NoSymbol, U0951 ] }; + + key { [ U0946, U090e, U0953 ] }; + key { [ U0902, U0901, NoSymbol, U0950 ] }; + key { [ U092e, U0923, U0954 ] }; + key { [ U0928, U0929 ] }; + key { [ U0935, U0934 ] }; + key { [ U0932, U0933 ] }; + key { [ U0938, U0936 ] }; + key { [ comma, U0937, U0970 ] }; + key { [ period, U0964, U0965, U093d ] }; + // I added \ / ? | for shell-convenience (file names and piping) + key { [ U092f, U095f, slash, question ] }; + + // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ): + include "nbsp(zwnj3zwj4)" +}; + +//Name : Bolnagri (Combined) +//Description : A phonetic keyboard layout for Devnagari(Hindi) +// http://www.indlinux.org/wiki/index.php/BolNagri +//NOTE : This is a combined map of bolnagri_matras and bolnagri_vowels. +//Inspired by "devrom" keymap by Steve Smith for the windows tool "keyman" +//Original Author : Noah Levitt +//Past Authors : Pramod.R and Ravikant +// Current Main.: G Karunakar + +partial alphanumeric_keys +xkb_symbols "bolnagri" { + name[Group1] = "India - Hindi Bolnagri"; + key.type="FOUR_LEVEL"; + //Top Alphanumeric row + // Roman digits + key { [ U0902, U0901, apostrophe, asciitilde ] }; // apostrophe: anusvara, candrabindu + key { [ 1, exclam, U0967, exclam ] }; + key { [ 2, at, U0968, at ] }; + key { [ 3, numbersign, U0969, numbersign ] }; + key { [ 4, dollar, U096A, dollar ] }; + key { [ 5, percent, U096B, percent ] }; + key { [ 6, asciicircum, U096C, asciicircum ] }; + key { [ 7, ampersand, U096D, ampersand ] }; + key { [ 8, asterisk, U096E, asterisk ] }; + key { [ 9, parenleft, U096F, parenleft ] }; + key { [ 0, parenright, U0966, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ U0964, U0965, U007C, U005C ] }; //pipe : danda, double danda + + //Q Row + key { [ U200C, U200D ] }; // Q: ZWNJ, ZWJ + key { [ U0935, U950 ] }; // W: wa, OM + key { [ U0947, U0948, U090F, U0910 ] }; // E: e, ai matras + key { [ U0930, U0943 ] }; // R: ra, vocalic Ri + key { [ U0924, U0925 ] }; // T: ta, tha + key { [ U092f, U091E ] }; // Y: ya, nya + key { [ U0941, U0942, U0909, U090A ] }; // U: u, uu matras + key { [ U093F, U0940, U0907, U0908 ] }; // I: i, ii matras + key { [ U094B, U094C, U0913, U0914 ] }; // O: o, au matras + key { [ U092A, U092B ] }; // P: pa, pha + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + + //A Row + key { [ U093E, U0906, U0905, U0906 ] }; // A: aa + key { [ U0938, U0937 ] }; // S: sa, ssa + key { [ U0926, U0927 ] }; // D: da, dha + key { [ U091F, U0920 ] }; // F: TA, THA + key { [ U0917, U0918 ] }; // G: ga, gha + key { [ U0939, U0903 ] }; // H: ha, visarg + key { [ U091C, U091D ] }; // J: ja, jha + key { [ U0915, U0916 ] }; // K: ka, kha + key { [ U0932, U0962 ] }; // L: la, vocalic L or lru matra` + key { [ semicolon, colon ] }; + key { [apostrophe, quotedbl ] }; + + //Z Row + key { [ U0936, U0945 ] }; // Z: sha, akaar candra + key { [ U094D, U0949 ] }; // X: halant, aakaar candra + key { [ U091A, U091B ] }; // C: ca, cha + key { [ U0921, U0922 ] }; // V: da, dha + key { [ U092C, U092D ] }; // B: ba, bha + key { [ U0928, U0923 ] }; // N: na, nha + key { [ U092E, U093D, U092E, U093D ] }; // M: ma, avagraha + key { [ comma, U0970 ] };// comma: comma, dev abbreviation sign + key { [ period, U093C ] }; // period: period, nukta + key { [ slash, question ] }; + + // begin modifier mappings +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// modifier_map Mod3 { Mode_switch }; + include "level3(ralt_switch)" +}; + +// based on a keyboard map from an 'xkb/symbols/ben' file + +partial alphanumeric_keys +xkb_symbols "ben" { + name[Group1]= "India - Bengali"; + + // Mainly numbers. + key { [ U09E7 ] }; + key { [ U09E8 ] }; + key { [ U09E9 ] }; + key { [ U09EA ] }; + key { [ U09EB ] }; + key { [ U09EC ] }; + key { [ U09ED ] }; + key { [ U09EE ] }; + key { [ U09EF, parenleft ] }; + key { [ U09E6, parenright ] }; + key { [ minus, U0983 ] }; + key { [ U098B, U09C3 ] }; + +// Mainly long vowels + + key { [ U09CC, U0994 ] }; + key { [ U09C8, U0990 ] }; + key { [ U09BE, U0986 ] }; + key { [ U09C0, U0988 ] }; + key { [ U09C2, U098A ] }; + +// Mainly voiced consonants + + key { [ U09AC, U09AD ] }; + key { [ U09B9, U0999 ] }; + key { [ U0997, U0998 ] }; + key { [ U09A6, U09A7 ] }; + key { [ U099C, U099D ] }; + key { [ U09A1, U09A2 ] }; + key { [ U09BC, U099E ] }; + +// Mainly short vowels + key { [ U09CB, U0993 ] }; + key { [ U09C7, U098F ] }; + key { [ U09CD, U0985 ] }; + key { [ U09BF, U0987 ] }; + key { [ U09C1, U0989 ] }; + + +// Mainly unvoiced consonants + + key { [ U09AA, U09AB ] }; + key { [ U09B0, U09DD ] }; + key { [ U0995, U0996 ] }; + key { [ U09A4, U09A5 ] }; + key { [ U099A, U099B ] }; + key { [ U099F, U09A0 ] }; + key { [ U005C, U007C ] }; + + key { [ z, Z ] }; + key { [ U0982, U0981 ] }; + key { [ U09AE, U09A3 ] }; + key { [ U09A8, U09A8 ] }; + key { [ U09AC, U09AC ] }; + key { [ U09B2, U09B2 ] }; + key { [ U09B8, U09B6 ] }; + key { [ comma, U09B7 ] }; + key { [ period, U0964 ] }; + key { [ U09DF, U09AF ] }; +}; + +xkb_symbols "ben_probhat" { + name[Group1]= "India - Bengali Probhat"; + key { [ Escape ] }; + +// numbers + key { [ U200D, asciitilde ] }; + key { [ U09E7, exclam ] }; + key { [ U09E8, at ] }; + key { [ U09E9, numbersign ] }; + key { [ U09EA, U09F3 ] }; + key { [ U09EB, percent ] }; + key { [ U09EC, asciicircum ] }; + key { [ U09ED, U099E ] }; + key { [ U09EE, U09CE ] }; + key { [ U09EF, parenleft ] }; + key { [ U09E6, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ BackSpace ] }; + +// tab, q to ] + key { [ Tab, ISO_Left_Tab ] }; + key { [ U09A6, U09A7 ] }; + key { [ U09C2, U098A ] }; + key { [ U09C0, U0988 ] }; + key { [ U09B0, U09DC ] }; + key { [ U099F, U09A0 ] }; + key { [ U098F, U0990 ] }; + key { [ U09C1, U0989 ] }; + key { [ U09BF, U0987 ] }; + key { [ U0993, U0994 ] }; + key { [ U09AA, U09AB ] }; + key { [ U09C7, U09C8 ] }; + key { [ U09CB, U09CC ] }; + key { [ Return ] }; + +// caps, a to ' +// key { [ Caps_Lock ] }; + key { [ U09BE, U0985 ] }; + key { [ U09B8, U09B7 ] }; + key { [ U09A1, U09A2 ] }; + key { [ U09A4, U09A5 ] }; + key { [ U0997, U0998 ] }; + key { [ U09B9, U0983 ] }; + key { [ U099C, U099D ] }; + key { [ U0995, U0996 ] }; + key { [ U09B2, U0982 ] }; + key { [ semicolon, colon ] }; + key { [ quoteright, quotedbl ] }; + +// shift, z to / +// key { [ Shift_L ] }; + key { [ U09DF, U09AF ] }; + key { [ U09B6, U09DD ] }; + key { [ U099A, U099B ] }; + key { [ U0986, U098B ] }; + key { [ U09AC, U09AD ] }; + key { [ U09A8, U09A3 ] }; + key { [ U09AE, U0999 ] }; + key { [ comma, U09C3 ] }; + key { [ U0964, U0981 ] }; + key { [ U09CD, question ] }; + key { [ U200C, U0965 ] }; + +// key { [ Control_L ] }; +// key { [ space ] }; + +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; + +}; + +partial alphanumeric_keys +xkb_symbols "guj" { + name[Group1]= "India - Gujarati"; + + // Mainly numbers. + key { [ U0AE7, U0A8D ] }; + key { [ U0AE8, U0AC5 ] }; + key { [ U0AE9 ] }; + key { [ U0AEA ] }; + key { [ U0AEB ] }; + key { [ U0AEC ] }; + key { [ U0AED ] }; + key { [ U0AEE ] }; + key { [ U0AEF, parenleft ] }; + key { [ U0AE6, parenright ] }; + key { [ minus, U0A83 ] }; + key { [ U0A8B, U0AC3 ] }; + +// Mainly long vowels + + key { [ U0ACC, U0A94 ] }; + key { [ U0AC8, U0A90 ] }; + key { [ U0ABE, U0A86 ] }; + key { [ U0AC0, U0A88 ] }; + key { [ U0AC2, U0A8A ] }; + +// Mainly voiced consonants + + key { [ U0AAC, U0AAD ] }; + key { [ U0AB9, U0A99 ] }; + key { [ U0A97, U0A98 ] }; + key { [ U0AA6, U0AA7 ] }; + key { [ U0A9C, U0A9D ] }; + key { [ U0AA1, U0AA2 ] }; + key { [ U0ABC, U0A9E ] }; + +// Mainly short vowels + key { [ U0ACB, U0A93 ] }; + key { [ U0AC7, U0A8F ] }; + key { [ U0ACD, U0A85 ] }; + key { [ U0ABF, U0A87 ] }; + key { [ U0AC1, U0A89 ] }; + +// Mainly unvoiced consonants + + key { [ U0AAA, U0AAB ] }; + key { [ U0AB0, U0AB0 ] }; + key { [ U0A95, U0A96 ] }; + key { [ U0AA4, U0AA5 ] }; + key { [ U0A9A, U0A9B ] }; + key { [ U0A9F, U0AA0 ] }; + key { [ U0AC9, U0A91 ] }; + + key { [ z , Z ] }; + key { [ U0A82, U0A81 ] }; + key { [ U0AAE, U0AA3 ] }; + key { [ U0AA8, U0AA8 ] }; + key { [ U0AB5, U0AB5 ] }; + key { [ U0AB2, U0AB3 ] }; + key { [ U0AB8, U0AB6 ] }; + key { [ comma, U0AB7 ] }; + key { [ period, U0964 ] }; + key { [ U0AAF, question ] }; +}; + +partial alphanumeric_keys +xkb_symbols "kan" { + + // Inscript layout for Kannada + // Author : G Karunakar + // Date : Wed Nov 13 17:22:58 IST 2002 + // Kannada digits mapped in basic only + + name[Group1]= "India - Kannada"; + + key { [ U0cca, U0c92 ] }; + key { [ U0ce7 ] }; + key { [ U0ce8 ] }; + key { [ U0ce9 ] }; + key { [ U0cea ] }; + key { [ U0ceb ] }; + key { [ U0cec ] }; + key { [ U0ced ] }; + key { [ U0cee ] }; + key { [ U0cef ] }; + key { [ U0ce6 ] }; + key { [ U0c83 ] }; + key { [ U0cc3, U0c8b ] }; + + key { [ U0ccc, U0c94 ] }; + key { [ U0cc8, U0c90 ] }; + key { [ U0cbe, U0c86 ] }; + key { [ U0cc0, U0c88 ] }; + key { [ U0cc2, U0c8a ] }; + key { [ U0cac, U0cad ] }; + key { [ U0cb9, U0c99 ] }; + key { [ U0c97, U0c98 ] }; + key { [ U0ca6, U0ca7 ] }; + key { [ U0c9c, U0c9d ] }; + key { [ U0ca1, U0ca2 ] }; + key { [ U0cbc, U0c9e ] }; + + key { [ U0ccb, U0c93 ] }; + key { [ U0cc7, U0c8f ] }; + key { [ U0ccd, U0c85 ] }; + key { [ U0cbf, U0c87 ] }; + key { [ U0cc1, U0c89 ] }; + key { [ U0caa, U0cab ] }; + key { [ U0cb0, U0cb1 ] }; + key { [ U0c95, U0c96 ] }; + key { [ U0ca4, U0ca5 ] }; + key { [ U0c9a, U0c9b ] }; + key { [ U0c9f, U0ca0 ] }; + + key { [ U0cc6, U0c8e ] }; + key { [ U0c82 ] }; + key { [ U0cae, U0ca3 ] }; + key { [ U0ca8 ] }; + key { [ U0cb5, U0cb4 ] }; + key { [ U0cb2, U0cb3 ] }; + key { [ U0cb8, U0cb6 ] }; + key { [ comma , U0cb7 ] }; + key { [ period ] }; + key { [ U0caf, U0040 ] }; + + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods = AltGr + }; + +}; + +// Description : A keymap for Malayalam +// Encoding : Unicode (http://www.unicode.org) +// Author : Baiju M +// Date : Sat Aug 17 21:10:48 IST 2002 +// Mapping: + +partial alphanumeric_keys +xkb_symbols "mal" { + + name[Group1] = "India - Malayalam"; + + //From grave to backslash (\) + + key { [ U0d4a , U0d12 ] }; + +// svu: +// These lines were in former "mal" variant - +// but the digits are replaced with the ones from 'mal_plusnum' - +// for the integrity of all Indian layouts +// +// key { [1 , exclam ] }; +// key { [2 , at ] }; +// key { [3 , numbersign ] }; +// key { [4 , dollar ] }; +// key { [5 , percent ] }; +// key { [6 ,asciicircum ] }; +// key { [7 , ampersand ] }; +// key { [8 , asterisk ] }; +// key { [9 , parenleft ] }; +// key { [0 , parenright ] }; + + key { [ U0d67 , exclam ] }; + key { [ U0d68 , at ] }; + key { [ U0d69 , numbersign ] }; + key { [ U0d6a , dollar ] }; + key { [ U0d6b , percent ] }; + key { [ U0d6c , asciicircum ] }; + key { [ U0d6d , ampersand ] }; + key { [ U0d6e , asterisk ] }; + key { [ U0d6f , parenleft ] }; + key { [ U0d66 , parenright ] }; + + key { [ minus , U0d03 ] }; + key { [ U0d43 , U0d0b ] }; + key { [U0200c, U05C ]};//bksl: ZWNJ + + + // From 'q' to right bracket (]) + + key { [ U0d4c , U0d14 ] }; + key { [ U0d48 , U0d10 ] }; + key { [ U0d3e , U0d06 ] }; + key { [ U0d40 , U0d08 ] }; + key { [ U0d42 , U0d0a ] }; + key { [ U0d2c , U0d2d ] }; + key { [ U0d39 , U0d19 ] }; + key { [ U0d17 , U0d18 ] }; + key { [ U0d26 , U0d27 ] }; + key { [ U0d1c , U0d1d ] }; + key { [ U0d21 , U0d22 ] }; + key { [ U0200d , U0d1e ] }; + + // From 'a' to apostrophe (') + + key { [ U0d4b , U0d13 ] }; + key { [ U0d47 , U0d0f ] }; + key { [ U0d4d , U0d05 ] }; + key { [ U0d3f , U0d07 ] }; + key { [ U0d41 , U0d09 ] }; + key { [ U0d2a , U0d2b ] }; + key { [ U0d30 , U0d31 ] }; + key { [ U0d15 , U0d16 ] }; + key { [ U0d24 , U0d25 ] }; + key { [ U0d1a , U0d1b ] }; + key { [ U0d1f , U0d20 ] }; + + // From 'z' to slash (/) + + key { [ U0d46 , U0d0e ] }; + key { [ U0d02 , U200b ] };//X:ZWSP + key { [ U0d2e , U0d23 ] }; + key { [ U0d28 ] }; + key { [ U0d35 , U0d34 ] }; + key { [ U0d32 , U0d33 ] }; + key { [ U0d38 , U0d36 ] }; + key { [ comma , U0d37 ] }; + key { [ period , U0200d ] }; + key { [ U0d2f , question ] }; + +}; + +//Name : Lalitha +//Description : A transliteration keyboard layout for Malayalam +//Original Author : Noah Levitt +//Current Main : Jinesh K.J, Swathantra Malayalam Computing (SMC) + +partial alphanumeric_keys +xkb_symbols "mal_lalitha" { + name[Group1] = "India - Malayalam Lalitha"; + key.type="FOUR_LEVEL"; + //Top Alphanumeric row + // Roman digits + key { [ U0D4D, U0D02, apostrophe, asciitilde ] }; // apostrophe: virama(chandrakala),anusvara + key { [ 1, exclam, U0D67, exclam ] }; + key { [ 2, at, U0D68, at ] }; + key { [ 3, numbersign, U0D69, numbersign ] }; + key { [ 4, dollar, U0D6A, dollar ] }; + key { [ 5, percent, U0D6B, percent ] }; + key { [ 6, asciicircum, U0D6C, asciicircum ] }; + key { [ 7, ampersand, U0D6D, ampersand ] }; + key { [ 8, asterisk, U0D6E, asterisk ] }; + key { [ 9, parenleft, U0D6F, parenleft ] }; + key { [ 0, parenright, U0D66, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + key { [ U005C, U007C, U200C ] };//backslash:pipe,backslash,ZWNJ + + //Q Row + key { [ U0D48, U0D4C, U0D10, U0D14 ] }; // Q: ai and au matras + key { [ U0D35 ] }; // W: wa, OM + key { [ U0D46, U0D47, U0D0E, U0D0F ] }; // E: e,ee matras + key { [ U0D30, U0D31, U0D43, U0D0B ] }; // R: ra,rra, vocalic Ri + key { [ U0D24, U0D25, U0D1F, U0D20 ] }; // T: tha, ttha,ta,tta + key { [ U0D2f ] }; // Y: ya + key { [ U0D41, U0D42, U0D09, U0D0A ] }; // U: u, uu matras + key { [ U0D3F, U0D40, U0D07, U0D08 ] }; // I: i, ii matras + key { [ U0D4A, U0D4B, U0D12, U0D13 ] }; // O: o, oo matras + key { [ U0D2A ] }; // P: pa + key { [ bracketleft, braceleft ] };//braceleft: + key { [ bracketright, braceright ] };//braceright: + + //A Row + key { [ U0D3E, U0D05, U0D06, U0D05 ] }; // A: a,aa + key { [ U0D38, U0D37 ] }; // S: sa, ssa + key { [ U0D26, U0D27, U0D21, U0D22 ] }; // D: soft da,soft dda,hard da,hard dda, + key { [ U0D2B ] }; // F: pha + key { [ U0D17, U0D18 ] }; // G: ga, gha + key { [ U0D39, U0D03 ] }; // H: ha, visarg + key { [ U0D1C, U0D1D ] }; // J: ja, jha + key { [ U0D15, U0D16 ] }; // K: ka, kha + key { [ U0D32, U0D33 ] }; // L: la, vocalic L or lru matra` + key { [ semicolon, colon ] }; + key { [apostrophe, quotedbl ] }; + + //Z Row + key { [ U0D34, U0D36 ] }; // Z: sha,zha + key { [ U0D4D, U200B ] }; // X: chandrakala,ZWSP + key { [ U0D1A, U0D1B ] }; // C: ca, cha + key { [ U0D35, U200D ] }; // V: va,ZWJ + key { [ U0D2C, U0D2D ] }; // B: ba, bha + key { [ U0D28, U0D23, U0D19, U0D1E ] }; // N: na, hard na,nga,nha + key { [ U0D2E, U0D02 ] }; // M: ma + key { [ comma, U003C ] };// comma: comma + key { [ period, U003E ] }; // period: period + key { [ slash, question ] }; + + // begin modifier mappings +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// modifier_map Mod3 { Mode_switch }; + include "level3(ralt_switch)" +}; + + +partial alphanumeric_keys +xkb_symbols "ori" { + // Inscript layout for Oriya + // Author: G Karunakar + // Date: Wed Nov 13 18:16:19 IST 2002 + + name[Group1]= "India - Oriya"; + + key { [ U0b67 ] }; + key { [ U0b68 ] }; + key { [ U0b69 ] }; + key { [ U0b6a ] }; + key { [ U0b6b ] }; + key { [ U0b6c ] }; + key { [ U0b6d ] }; + key { [ U0b6e ] }; + key { [ U0b6f ] }; + key { [ U0b66 ] }; + key { [ U0b03 ] }; + key { [ U0b43, U0b0b ] }; + + key { [ U0b4c, U0b14 ] }; + key { [ U0b48, U0b10 ] }; + key { [ U0b3e, U0b06 ] }; + key { [ U0b40, U0b08 ] }; + key { [ U0b42, U0b0a ] }; + key { [ U0b2c, U0b2d ] }; + key { [ U0b39, U0b19 ] }; + key { [ U0b17, U0b18 ] }; + key { [ U0b26, U0b27 ] }; + key { [ U0b1c, U0b1d ] }; + key { [ U0b21, U0b22 ] }; + key { [ U0b3c, U0b1e ] }; + + key { [ U0b4b, U0b13 ] }; + key { [ U0b47, U0b0f ] }; + key { [ U0b4d, U0b05 ] }; + key { [ U0b3f, U0b07 ] }; + key { [ U0b41, U0b09 ] }; + key { [ U0b2a, U0b2b ] }; + key { [ U0b30 ] }; + key { [ U0b15, U0b16 ] }; + key { [ U0b24, U0b25 ] }; + key { [ U0b1a, U0b1b ] }; + key { [ U0b1f, U0b20 ] }; + + key { [ U0b02, U0b01 ] }; + key { [ U0b2e, U0b23 ] }; + key { [ U0b28 ] }; + key { [ U0b35 ] }; + key { [ U0b32, U0b33 ] }; + key { [ U0b38, U0b36 ] }; + key { [ comma , U0b37 ] }; + key { [ period ] }; + key { [ U0b2f, U0040 ] }; + + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods = AltGr + }; +}; + +// based on a keyboard map from an 'xkb/symbols/tml' file +// INSCRIPT +partial alphanumeric_keys +xkb_symbols "tam" { + name[Group1]= "India - Tamil"; + + key { [ U0BCA, U0B92 ] }; + + // Mainly numbers. + key { [ U0BE7 ] }; + key { [ U0BE8 ] }; + key { [ U0BE9 ] }; + key { [ U0BEA ] }; + key { [ U0BEB ] }; + key { [ U0BEC ] }; + key { [ U0BED ] }; + key { [ U0BEE ] }; + key { [ U0BEF, parenleft ] }; + key { [ U0BF0, parenright ] }; + key { [ U0BF1, U0B83 ] }; + key { [ U0BF2, plus ] }; + +// Mainly long vowels + + key { [ U0BCC, U0B94 ] }; + key { [ U0BC8, U0B90 ] }; + key { [ U0BBE, U0B86 ] }; + key { [ U0BC0, U0B88 ] }; + key { [ U0BC2, U0B8A ] }; + +// Mainly voiced consonants + + key { [ U0BB9, U0B99 ] }; + key { [ U0B9c ] }; + key { [ U0B9E ] }; + +// Mainly short vowels + key { [ U0BCB, U0B93 ] }; + key { [ U0BC7, U0B8F ] }; + key { [ U0BCD, U0B85 ] }; + key { [ U0BBF, U0B87 ] }; + key { [ U0BC1, U0B89 ] }; + +// Mainly unvoiced consonants + + key { [ U0BAA ] }; + key { [ U0BB0, U0BB1 ] }; + key { [ U0B95 ] }; + key { [ U0BA4 ] }; + key { [ U0B9A ] }; + key { [ U0B9F ] }; + key { [ U005C, U007C ] };//backslash-bar - Changed to Unicode + + key { [ U0BC6, U0B8E ] }; + key { [ U0B82 ] }; + key { [ U0BAE, U0BA3 ] }; + key { [ U0BA8, U0BA9 ] }; + key { [ U0BB5, U0BB4 ] }; + key { [ U0BB2, U0BB3 ] }; + key { [ U0BB8, U0BB6 ] }; + key { [ comma, U0BB7 ] }; + key { [ period, U0964 ] }; + key { [ U0BAF, question ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tam_unicode" { + +// Description: A keymap based on the TamilNet'99 typewriter keyboard +// Encoding: Unicode (http://www.unicode.org) +// Author: Thuraiappah Vaseeharan +// Modifed by: Malathi S +// Secondary contact: Sri Ramadoss M +// Date : Fri Sep 4 11:32:00 CST 2009 +// Mapping: + + name[Group1]= "India - Tamil Unicode"; + + // granthas + key { [ apostrophe, asciitilde ] }; + key { [ U0031, exclam ] } ; + key { [ U0032, at ] } ; + key { [ U0033, numbersign ] } ; + key { [ U0034, U0BF9 ] } ; + key { [ U0035, percent ] } ; + key { [ U0036, asciicircum ] } ; + key { [ U0037, ampersand ] } ; + key { [ U0038, asterisk ] } ; + key { [ U0039, parenleft ] } ; + key { [ U0030, parenright ] } ; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + + // Qrow + key { [ U0B9E, U0BB6 ] }; + key { [ U0BB1, U0BB7 ] }; + key { [ U0BA8, U0BB8 ] }; + key { [ U0B9A, U0BB9 ] }; + key { [ U0BB5, U0B9C ] }; + key { [ U0BB2 ] }; + key { [ U0BB0 ] }; + key { [ U0BC8, U0B90 ] }; + key { [ U0BCA, U0BCB ] }; + key { [ U0BBF, U0BC0 ] }; + key { [ U0BC1, U0BC2 ] }; + + // Arow + key { [ U0BAF ] }; + key { [ U0BB3 ] }; + key { [ U0BA9 ] }; + key { [ U0B95 ] }; + key { [ U0BAA ] }; + key { [ U0BBE, U0BB4 ] }; + key { [ U0BA4 ] }; + key { [ U0BAE ] }; + key { [ U0B9F ] }; + key { [ U0BCD, U0B83 ] }; + key { [ U0B99 ] }; + + // Zrow + key { [ U0BA3 ] }; + key { [ U0B92, U0B93 ] }; + key { [ U0B89, U0B8A ] }; + key { [ U0B8E, U0B8F ] }; + key { [ U0BC6, U0BC7 ] }; + key { [ U0B94, U0BCC ] }; + key { [ U0B85, U0B86 ] }; + key { [ U0B87, U0B88 ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tam_keyboard_with_numerals" { + +// Description: A keymap based on the TamilNet'99 typewriter keyboard +// Encoding: Unicode (http://www.unicode.org) +// Author: Malathi S +// Secondary contact: Sri Ramadoss M +// Date : Fri Sep 4 11:33:00 CST 2009 +// Mapping: + + name[Group1]= "India - Tamil Keyboard with Numerals"; + + // Mainly numbers. + key { [ apostrophe, asciitilde ] }; + key { [ U0BE7, exclam ] }; + key { [ U0BE8, at ] }; + key { [ U0BE9, numbersign ] }; + key { [ U0BEA, U0BF9 ] }; + key { [ U0BEB, percent ] }; + key { [ U0BEC, asciicircum ] }; + key { [ U0BED, ampersand ] }; + key { [ U0BEE, asterisk ] }; + key { [ U0BEF, parenleft ] }; + key { [ U0BE6, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + + // Qrow + key { [ U0B9E, U0BB6 ] }; + key { [ U0BB1, U0BB7 ] }; + key { [ U0BA8, U0BB8 ] }; + key { [ U0B9a, U0BB9 ] }; + key { [ U0BB5, U0B9c ] }; + key { [ U0BB2 ] }; + key { [ U0BB0 ] }; + key { [ U0BC8, U0B90 ] }; + key { [ U0BCA, U0BCB ] }; + key { [ U0BBF, U0BC0 ] }; + key { [ U0BC1, U0BC2 ] }; + + // Arow + key { [ U0BAF ] }; + key { [ U0BB3 ] }; + key { [ U0BA9 ] }; + key { [ U0B95 ] }; + key { [ U0BAA ] }; + key { [ U0BBE, U0BB4 ] }; + key { [ U0BA4 ] }; + key { [ U0BAE ] }; + key { [ U0B9F ] }; + key { [ U0BCD, U0B83 ] }; + key { [ U0B99 ] }; + + // Zrow + key { [ U0BA3 ] }; + key { [ U0B92, U0B93 ] }; + key { [ U0B89, U0B8A ] }; + key { [ U0B8E, U0B8F ] }; + key { [ U0BC6, U0BC7 ] }; + key { [ U0B94, U0BCC ] }; + key { [ U0B85, U0B86 ] }; + key { [ U0B87, U0B88 ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tam_TSCII" { + +// Description : A Tamil typewrite-style keymap +// loosely based on TamilNet'99 reommendations +// Encoding : TSCII (http://www.tscii.org) +// Author : Thuraiappah Vaseeharan +// Last Modified: Sat Jan 5 17:11:26 CST 2002 + + name[Group1]= "India - Tamil TSCII Typewriter"; + + key { [ 0x10000b7, 0x10000a4 ] }; // aytham + key { [ 0x1000082, 0x10000a5 ] }; // shri + key { [ 0x1000083, 0x1000088 ] }; // ja + key { [ 0x1000084, 0x1000089 ] }; // sha + key { [ 0x1000085, 0x100008a ] }; // sa + key { [ 0x1000086, 0x100008b ] }; // ha + key { [ 0x1000087, 0x100008c ] }; // ksha + + // Qrow + key { [ 0x10000bb, 0x100009a ] }; // nja + key { [ 0x10000c8, 0x10000da ] }; // Ra + key { [ 0x10000bf, 0x10000d1 ] }; // NNa + key { [ 0x10000ba, 0x10000cd ] }; // ca + key { [ 0x10000c5, 0x10000d7 ] }; // va + key { [ 0x10000c4, 0x10000d6 ] }; // la + key { [ 0x10000c3, 0x10000d5 ] }; // ra + key { [ 0x10000a8, 0x10000b3 ] }; // sangili, ai + key { [ 0x10000ca, 0x10000cb ] }; // di, dI + key { [ 0x10000a2, 0x10000a3 ] }; // visiri + key { [ dead_acute, 0x10000a3 ] }; // Ukaaram + + // Arow + key { [ 0x10000c2, 0x10000d4 ] }; // ya + key { [ 0x10000c7, 0x10000d9 ] }; // La + key { [ 0x10000c9, 0x10000db ] }; // na + key { [ 0x10000b8, 0x10000cc ] }; // ka + key { [ 0x10000c0, 0x10000d2 ] }; // pa + key { [ dead_grave,0x10000a1 ] }; // pulli,aravu + key { [ 0x10000be, 0x10000d0 ] }; // tha + key { [ 0x10000c1, 0x10000d3 ] }; // ma + key { [ 0x10000bc, 0x10000ce ] }; // da + key { [ 0x10000c6, 0x10000d8 ] }; // zha + key { [ 0x10000b9, 0x1000099 ] }; // nga + + // Zrow + key { [ 0x10000bd, 0x10000cf ] }; // Na + key { [ 0x10000b4, 0x10000b5 ] }; // o, O + key { [ 0x10000af, 0x10000b0 ] }; // u, U + key { [ 0x10000b1, 0x10000b2 ] }; // e, E + key { [ 0x10000a6, 0x10000a7 ] }; // kombus + key { [ 0x10000b6, 0x10000aa ] }; // au + key { [ 0x10000ab, 0x10000ac ] }; // a, A + key { [ 0x10000fe, 0x10000ae ] }; // i, I + +}; + +partial alphanumeric_keys +xkb_symbols "tam_TAB" { + +// Description: A keymap based on the TamilNet'99 typewriter keyboard +// Encoding: TAB (http://www.tamilnet99.org) +// Author: Thuraiappah Vaseeharan +// Date : Sun Aug 12 02:23:00 CDT 2001 + + name[Group1]= "India - Tamil TAB Typewriter"; + + // numeral row + key { [ 0x10000e7, 0x10000a7 ] } ; + key { [ 0x10000fa, 0x10000a8 ] } ; + key { [ 0x10000fb ] } ; + key { [ 0x10000fc ] } ; + key { [ 0x10000fd ] } ; + key { [ 0x10000fe ] } ; + key { [ 0x10000ff ] } ; + + // q-row + key { [ 0x10000eb, 0x10000b3 ] }; + key { [ 0x10000f8, 0x10000c1 ] }; + key { [ 0x10000ef, 0x10000b8 ] }; + key { [ 0x10000ea, 0x10000b2 ] }; + key { [ 0x10000f5, 0x10000be ] }; + key { [ 0x10000f4, 0x10000bd ] }; + key { [ 0x10000f3, 0x10000bc ] }; + key { [ 0x10000ac, 0x10000e4 ] }; + key { [ 0x10000ae, 0x10000af ] }; + key { [ 0x10000a4, 0x10000a6 ] }; + key { [ dead_circumflex, 0x10000a6 ] }; // Ukaaram + + // a-row + key { [ 0x10000f2, 0x10000bb ] }; + key { [ 0x10000f7, 0x10000c0 ] }; + key { [ 0x10000f9, 0x10000c2 ] }; + key { [ 0x10000e8, 0x10000b0 ] }; + key { [ 0x10000f0, 0x10000b9 ] }; + key { [ 0x10000a2, 0x10000a3 ] }; + key { [ 0x10000ee, 0x10000b6 ] }; + key { [ 0x10000f1, 0x10000ba ] }; + key { [ 0x10000ec, 0x10000b4 ] }; + key { [ 0x10000f6, 0x10000bf ] }; + key { [ 0x10000e9, 0x10000b1 ] }; + + // z-row + key { [ 0x10000ed, 0x10000b5 ] }; + key { [ 0x10000e5, 0x10000e6 ] }; + key { [ 0x10000e0, 0x10000e1 ] }; + key { [ 0x10000e2, 0x10000e3 ] }; + key { [ 0x10000aa, 0x10000ab ] }; + key { [ 0x10000ac, 0x10000a3 ] }; + key { [ 0x10000dc, 0x10000dd ] }; + key { [ 0x10000de, 0x10000df ] }; +}; + +partial alphanumeric_keys +xkb_symbols "tel" { + + // Inscript layout for Telugu using Unicode + // Author: G Karunakar + // Date: + // See layout at http://www.indlinux.org/keymap/telugu.php + + name[Group1]= "India - Telugu"; + + key { [ U0c4a, U0c12 ] }; + key { [ U0c67 ] }; + key { [ U0c68 ] }; + key { [ U0c69, numbersign ] }; + key { [ U0c6a, dollar ] }; + key { [ U0c6b, percent ] }; + key { [ U0c6c, asciicircum ] }; + key { [ U0c6d, ampersand ] }; + key { [ U0c6e, asterisk ] }; + key { [ U0c6f, parenleft ] }; + key { [ U0c66, parenright ] }; + key { [ U0c03, underscore ] }; + key { [ U0c43, U0c0b ] }; + key { [ BackSpace ] }; + + key { [ U0c4c, U0c14 ] }; + key { [ U0c48, U0c10 ] }; + key { [ U0c3e, U0c06 ] }; + key { [ U0c40, U0c08 ] }; + key { [ U0c42, U0c0a ] }; + key { [ U0c2c, U0c2d ] }; + key { [ U0c39, U0c19 ] }; + key { [ U0c17, U0c18 ] }; + key { [ U0c26, U0c27 ] }; + key { [ U0c1c, U0c1d ] }; + key { [ U0c21, U0c22 ] }; + key { [ U0c1e ] }; + + key { [ U0c4b, U0c13 ] }; + key { [ U0c47, U0c0f ] }; + key { [ U0c4d, U0c05 ] }; + key { [ U0c3f, U0c07 ] }; + key { [ U0c41, U0c09 ] }; + key { [ U0c2a, U0c2b ] }; + key { [ U0c30, U0c31 ] }; + key { [ U0c15, U0c16 ] }; + key { [ U0c24, U0c25 ] }; + key { [ U0c1a, U0c1b ] }; + key { [ U0c1f, U0c20 ] }; + + key { [ U0c46, U0c0e ] }; + key { [ U0c02, U0c01 ] }; + key { [ U0c2e, U0c23 ] }; + key { [ U0c28 ] }; + key { [ U0c35 ] }; + key { [ U0c32, U0c33 ] }; + key { [ U0c38, U0c36 ] }; + key { [ comma , U0c37 ] }; + key { [ period ] }; + key { [ U0c2f, U0040 ] }; + + key { + symbols[Group1] = [ Mode_switch, Multi_key ], + virtualMods = AltGr + }; +}; + +partial alphanumeric_keys +xkb_symbols "urd-phonetic" { + include "pk(urd-phonetic)" + name[Group1]= "India - Urdu, Phonetic"; +}; + +partial alphanumeric_keys +xkb_symbols "urd-phonetic3" { + include "pk(urd-crulp)" + name[Group1]= "India - Urdu, Alternative phonetic"; +}; + +partial alphanumeric_keys +xkb_symbols "urd-winkeys" { + include "pk(urd-nla)" + name[Group1]= "India - Urdu, Winkeys"; +}; + +// based on a keyboard map from an 'xkb/symbols/gur' file + +partial alphanumeric_keys +xkb_symbols "guru" { + name[Group1]= "India - Gurmukhi"; + + // Mainly numbers. + key { [ U0A67 ] }; + key { [ U0A68 ] }; + key { [ U0A69, U0A71 ] }; + key { [ U0A6A, U0A74 ] }; + key { [ U0A6B, U262C ] }; + key { [ U0A6C ] }; + key { [ U0A6D ] }; + key { [ U0A6e ] }; + key { [ U0A6F, parenleft ] }; + key { [ U0A66, parenright ] }; + key { [ gur_visarga ] }; + key { [ equal, plus ] }; + +// Mainly long vowels + + key { [ U0A4C, U0A14 ] }; + key { [ U0A48, U0A10 ] }; + key { [ U0A3E, U0A06 ] }; + key { [ U0A40, U0A08 ] }; + key { [ U0A42, U0A0A ] }; + +// Mainly voiced consonants + + key { [ U0A2C, U0A2D ] }; + key { [ U0A39, U0A19 ] }; + key { [ U0A17, U0A18 ] }; + key { [ U0A26, U0A27 ] }; + key { [ U0A1C, U0A1D ] }; + key { [ U0A21, U0A22 ] }; + key { [ U0A3C, U0A1E ] }; + +// Mainly short vowels + key { [ U0A4B, U0A13 ] }; + key { [ U0A47, U0A0F ] }; + key { [ U0A4D, U0A05 ] }; + key { [ U0A3F, U0A07 ] }; + key { [ U0A41, U0A09 ] }; + +// Mainly unvoiced consonants + + key { [ U0A2A, U0A2B ] }; + key { [ U0A30, U0A5C ] }; + key { [ U0A15, U0A16 ] }; + key { [ U0A24, U0A25 ] }; + key { [ U0A1A, U0A1B ] }; + key { [ U0A1F, U0A20 ] }; + key { [ U005C, U007C ] }; + + key { [ z, U0A01 ] }; + key { [ U0A02, U0A70, U0A71 ] }; + key { [ U0A2E, U0A23 ] }; + key { [ U0A28, U0A28 ] }; + key { [ U0A35, U0A35 ] }; + key { [ U0A32, U0A33 ] }; + key { [ U0A38, U0A36 ] }; + key { [ comma, less ] }; + key { [ period, U0964 ] }; + key { [ U0A2F, question ] }; +}; + +//Name : Jhelum (Refind Inscript) +//Description : A Jhelum keyboard layout for Gurmukhi (Punjabi) +// http://www.satluj.org/Jhelum.html +//Modified for Inscript to make +//Original Author : Amanpreet Singh Alam { [ apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu + key { [ 1,exclam, U0A67, exclam ] }; + key { [ 2,at, U0A68, at ] }; + key { [ 3,numbersign, U0A69, numbersign ] }; + key { [ 4,dollar, U0A6A, dollar ] }; + key { [ 5,percent,U0A6B, percent ] }; + key { [ 6,asciicircum, U0A6C,asciicircum ] }; + key { [ 7,ampersand,U0A6D,ampersand ] }; + key { [ 8,asterisk,U0A6E, asterisk ] }; + key { [ 9,parenleft,U0A6F,parenleft ] }; + key { [ 0,parenright,U0A66,parenright ] }; + key { [ minus,underscore] }; + key { [ equal,plus] }; + key { [ U0964,U0965,U007C,U005C] }; //pipe : danda, double danda + + //Q Row + key { [ U0A4C, U0A14 ] }; // Q: oo, ooh + key { [ U0A48, U0A10 ] }; // W: ee, ae + key { [ U0A3E, U0A06 ] }; // E: a, aa + key { [ U0A40, U0A08 ] }; // R: ee, ai + key { [ U0A42, U0A0A ] }; // T: u, uu + key { [ U0A30, U0A5C ] }; // Y: ra, raa + key { [ U0A26, U0A27 ] }; // U: tha, thha + key { [ U0A17, U0A18 ] }; // I:ga, gha + key { [ U0A24, U0A1F ] }; // O: ta, tha + key { [ U0A2A, U0A5E ] }; // P: pa, pha + key { [ U0A21, U0A22, bracketleft, braceleft ] }; + key { [ U0A19, U0A1E, bracketright, braceright ] }; + + //A Row + key { [ U0A4B, U0A13 ] }; // A: o, oo + key { [ U0A40, U0A0F ] }; // S: e, ee + key { [ U0A4D, U0A05 ] }; // D: halant, aa + key { [ U0A3F, U0A07 ] }; // F: i, aa + key { [ U0A41, U0A09 ] }; // G: u, uh + key { [ U0A39, U0A20 ] }; // H: ha, thha + key { [ U0A1C, U0A1D ] }; // J: ja, jha + key { [ U0A15, U0A16 ] }; // K: ka, kha + key { [ U0A32, U0A25 ] }; // L: la, tha + key { [ U0A38, semicolon, colon ] }; //; sa + key { [apostrophe, quotedbl ] }; + + //Z Row + key { [ U0A71, U0A3C ] }; // Z: addak, par bindi + key { [ U0A02, U0A70 ] }; // X: bindi, tippi + key { [ U0A1A, U0A1B ] }; // C: ca, cha + key { [ U0A35, U0A2F ] }; // V: va, ya + key { [ U0A2C, U0A2D ] }; // B: ba, bha + key { [ U0A28, U0A23 ] }; // N: na, nha + key { [ U0A2E, U0A2E ] }; // M: ma + key { [ comma, U262C ] };// comma: comma, dev abbreviation sign + key { [ period, U0A74 ] }; // period: period, nukta + key { [ slash, question ] }; + +// begin modifier mappings +// modifier_map Shift { Shift_L }; +// modifier_map Lock { Caps_Lock }; +// modifier_map Control{ Control_L }; +// modifier_map Mod3 { Mode_switch }; + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "olpc" { + +// Contact: Walter Bender + + include "in(deva)" + key { [ U094A, U0912 ] }; // DEVANAGARI VOWEL SIGN SHORT O; DEVANAGARI LETTER SHORT O + key { [ U0967, U090D ] }; // DEVANAGARI DIGIT ONE; DEVANAGARI LETTER CANDRA E + key { [ U0968, U0945 ] }; // DEVANAGARI DIGIT TWO; DEVANAGARI VOWEL SIGN CANDRA E + key { [ U0969 ] }; // DEVANAGARI DIGIT THREE; + key { [ U096A ] }; // DEVANAGARI DIGIT FOUR; + key { [ U096B ] }; // DEVANAGARI DIGIT FIVE; + key { [ U096C ] }; // DEVANAGARI DIGIT SIX; + key { [ U096D ] }; // DEVANAGARI DIGIT SEVEN; + key { [ U096E ] }; // DEVANAGARI DIGIT EIGHT; + key { [ U096F, parenleft ] }; // DEVANAGARI DIGIT NINE; + key { [ U0966, parenright ] }; // DEVANAGARI DIGIT ZERO; + key { [ minus, U0903 ] }; // DEVANAGARI SIGN VISARGA; + key { [ U0943, U090B ] }; // DEVANAGARI VOWEL SIGN VOCALIC R; DEVANAGARI LETTER VOCALIC R + + key { [ U094C, U0914 ] }; // DEVANAGARI VOWEL SIGN AU; DEVANAGARI LETTER AU + key { [ U0948, U0910 ] }; // DEVANAGARI VOWEL SIGN AI; DEVANAGARI LETTER AI + key { [ U093E, U0906 ] }; // DEVANAGARI VOWEL SIGN AA; DEVANAGARI LETTER AA + key { [ U0940, U0908 ] }; // DEVANAGARI VOWEL SIGN II; DEVANAGARI LETTER II + key { [ U0942, U090A ] }; // DEVANAGARI VOWEL SIGN UU; DEVANAGARI LETTER UU + key { [ U092C, U092D ] }; // DEVANAGARI LETTER BA; DEVANAGARI LETTER BHA + key { [ U0939, U0919 ] }; // DEVANAGARI LETTER HA; DEVANAGARI LETTER NGA + key { [ U0917, U0918 ] }; // DEVANAGARI LETTER GA; DEVANAGARI LETTER GHA + key { [ U0926, U0927 ] }; // DEVANAGARI LETTER DA; DEVANAGARI LETTER DHA + key { [ U091C, U091D ] }; // DEVANAGARI LETTER JA; DEVANAGARI LETTER JHA + key { [ U0921, U0922 ] }; // DEVANAGARI LETTER DDA; DEVANAGARI LETTER DDHA + key { [ U093C, U091E ] }; // DEVANAGARI SIGN NUKTA; DEVANAGARI LETTER NYA + + key { [ U0949, U0911 ] }; // DEVANAGARI VOWEL SIGN CANDRA O; DEVANAGARI LETTER CANDRA O + + key { [ U094B, U0913 ] }; // DEVANAGARI VOWEL SIGN O; DEVANAGARI LETTER O + key { [ U0947, U090F ] }; // DEVANAGARI VOWEL SIGN E; DEVANAGARI LETTER E + key { [ U094D, U0905 ] }; // DEVANAGARI SIGN VIRAMA; DEVANAGARI LETTER A + key { [ U093F, U0907 ] }; // DEVANAGARI VOWEL SIGN I; DEVANAGARI LETTER I + key { [ U0941, U0909 ] }; // DEVANAGARI VOWEL SIGN U; DEVANAGARI LETTER U + key { [ U092A, U092B ] }; // DEVANAGARI LETTER PA; DEVANAGARI LETTER PHA + key { [ U0930, U0931 ] }; // DEVANAGARI LETTER RA; DEVANAGARI LETTER RRA + key { [ U0915, U0916 ] }; // DEVANAGARI LETTER KA; DEVANAGARI LETTER KHA + key { [ U0924, U0925 ] }; // DEVANAGARI LETTER TA; DEVANAGARI LETTER THA + key { [ U091A, U091B ] }; // DEVANAGARI LETTER CA; DEVANAGARI LETTER CHA + key { [ U091F, U0920 ] }; // DEVANAGARI LETTER TTA; DEVANAGARI LETTER TTHA + + key { [ U0946, U090E ] }; // DEVANAGARI VOWEL SIGN SHORT E; DEVANAGARI LETTER SHORT E + key { [ U0902, U0901 ] }; // DEVANAGARI SIGN ANUSVARA; DEVANAGARI SIGN CANDRABINDU + key { [ U092E, U0923 ] }; // DEVANAGARI LETTER MA; DEVANAGARI LETTER NNA + key { [ U0928, U0929 ] }; // DEVANAGARI LETTER NA; DEVANAGARI LETTER NNNA + key { [ U0935, U0934 ] }; // DEVANAGARI LETTER VA; DEVANAGARI LETTER LLLA + key { [ U0932, U0933 ] }; // DEVANAGARI LETTER LA; DEVANAGARI LETTER LLA + key { [ U0938, U0936 ] }; // DEVANAGARI LETTER SA; DEVANAGARI LETTER SHA + key { [ comma, U0937 ] }; // DEVANAGARI LETTER SSA + key { [ period, U0964 ] }; // DEVANAGARI DANDA + key { [ U092F, U095F ] }; // DEVANAGARI LETTER YA; DEVANAGARI LETTER YYA + + // space, space, Zero-Width-Non-Joiner (ZWNJ), Zero-Width-Joiner (ZWJ): + include "nbsp(zwnj3zwj4)" + + include "group(olpc)" +}; + +partial alphanumeric_keys +xkb_symbols "hin-wx" { + + name[Group1]= "India - Hindi Wx"; + + key { [ grave, asciitilde, 2, 3 ] }; + + key { [ 0x1000967, exclam ] }; + key { [ 0x1000968, at ] }; + key { [ 0x1000969 , numbersign ] }; + key { [ 0x100096A , dollar ] }; + key { [ 0x100096B , percent ] }; + key { [ 0x100096C , asciicircum ] }; + key { [ 0x100096D , ampersand ] }; + key { [ 0x100096e , asterisk ] }; + key { [ 0x100096F, parenleft ] }; + key { [ 0x1000966, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + + key { [ 0x1000943, 0x1000944, 0x100090B, 0x1000960] }; + key { [ 0x1000924, 0x1000925 ] }; + key { [ 0x1000947, 0x1000948, 0x100090F, 0x1000910] }; + key { [ 0x1000930, 0x1000937 ] }; + key { [ 0x100091F, 0x1000920 ] }; + + + key { [ 0x100092F ] }; + key { [ 0x1000941, 0x1000942, 0x1000909, 0x100090A ] }; + key { [ 0x100093F, 0x1000940, 0x1000907, 0x1000908 ] }; + key { [ 0x100094B, 0x100094C, 0x1000913, 0x1000914] }; + key { [ 0x100092A, 0x100092B ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + key { [ backslash, bar, 0x1000964, 0x1000965 ] }; + + key { [ 0x100094D, 0x100093E, 0x1000905,0x1000906 ] }; + key { [ 0x1000938, 0x1000936 ] }; + key { [ 0x1000921, 0x1000922 ] }; + key { [ 0x1000919, 0x100091E ] }; + key { [ 0x1000917, 0x1000918 ] }; + + + key { [ 0x1000939, 0x1000903 ] }; + key { [ 0x100091C, 0x100091D ] }; + key { [ 0x1000915, 0x1000916 ] }; + key { [ 0x1000932, 0x1000962, 0x1000933, 0x100090C] }; + key { [ semicolon, colon ] }; + key { [ quoteright, quotedbl ] }; + + key { [ 0x1000901, 0x100093C, 0x100093D, 0x1000950] }; + key { [ 0x1000926, 0x1000927 ] }; + key { [ 0x100091A, 0x100091B ] }; + key { [ 0x1000935, dead_V ] }; + key { [ 0x100092C, 0x100092D ] }; + key { [ 0x1000928, 0x1000923 ] }; + key { [ 0x100092E, 0x1000902 ] }; + key { [ comma, less ] }; + key { [ period, greater ] }; + key { [ slash, question ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "eng" { + + name[Group1]= "India - English with RupeeSign"; + + include "us(basic)" + + include "rupeesign(4)" + + include "level3(ralt_switch)" +}; + + +// Description : Enhanced INSCRIPT keymap for Malayalam +// Encoding : Unicode (http://www.unicode.org) +// Author : Mahesh T Pai +// Date : March, 2011 +// Source : http://www.nongnu.org/smc/docs/images/ml_inscript_layout.jpg +// Comment : Based on the Inscript Keyboard created by M Baiju +// Mapping: + +partial alphanumeric_keys +xkb_symbols "mal_enhanced" { + + name[Group1] = "India - Malayalam Modified Inscript with Rupee Sign"; + + //From grave to backslash (\) + + key { [ U0d4a , U0d12 ] }; + key { [ U0d67 , exclam ] }; + key { [ U0d68 , at ] }; + key { [ U0d69 , numbersign ] }; + key { [ U0d6a , dollar ] }; + key { [ U0d6b , percent ] }; + key { [ U0d6c , asciicircum ] }; + key { [ U0d6d , ampersand ] }; + key { [ U0d6e , U0d7e ] }; + key { [ U0d6f , parenleft ] }; + key { [ U0d66 , parenright ] }; + + key { [ minus , U0d03 ] }; + key { [ U0d43 , U0d0b ] }; + key { [ U0d7c , U05C ] }; //bksl: chillu RR + + + // From 'q' to right bracket (]) + + key { [ U0d57 , U0d14 ] }; + key { [ U0d48 , U0d10 ] }; + key { [ U0d3e , U0d06 ] }; + key { [ U0d40 , U0d08 ] }; + key { [ U0d42 , U0d0a ] }; + key { [ U0d2c , U0d2d ] }; + key { [ U0d39 , U0d19 ] }; + key { [ U0d17 , U0d18 ] }; + key { [ U0d26 , U0d27 ] }; + key { [ U0d1c , U0d1d ] }; + key { [ U0d21 , U0d22 ] }; + key { [ U0200d , U0d1e ] }; + + // From 'a' to apostrophe (') + + key { [ U0d4b , U0d13 ] }; + key { [ U0d47 , U0d0f ] }; + key { [ U0d4d , U0d05 ] }; + key { [ U0d3f , U0d07 ] }; + key { [ U0d41 , U0d09 ] }; + key { [ U0d2a , U0d2b ] }; + key { [ U0d30 , U0d31 ] }; + key { [ U0d15 , U0d16 ] }; + key { [ U0d24 , U0d25 ] }; + key { [ U0d1a , U0d1b ] }; + key { [ U0d1f , U0d20 ] }; + + // From 'z' to slash (/) + + key { [ U0d46 , U0d0e ] }; + key { [ U0d02 , U0d7a ] }; + key { [ U0d2e , U0d23 ] }; + key { [ U0d28 , U0d7b ] }; + key { [ U0d35 , U0d34 ] }; + key { [ U0d32 , U0d33 ] }; + key { [ U0d38 , U0d36 ] }; + key { [ comma , U0d37 ] }; + key { [ period , U0d7d ] }; //chillu l + key { [ U0d2f , question ] }; + + // hope this includes the rupee sign at alt + 4 + + include "rupeesign(4)" + include "level3(ralt_switch)" + +}; + -- cgit v1.2.3