Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:c0f972361605, committed 2019-02-27
- Comitter:
- csyang2
- Date:
- Wed Feb 27 14:34:09 2019 +0800
- Parent:
- 0:9d0785906425
- Child:
- 2:fd584a732a41
- Commit message:
- Add emWin related materials
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Application/FramewinDLG.cpp Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,249 @@
+/*********************************************************************
+* *
+* SEGGER Microcontroller GmbH & Co. KG *
+* Solutions for real time microcontroller applications *
+* *
+**********************************************************************
+* *
+* C-file generated by: *
+* *
+* GUI_Builder for emWin version 5.46 *
+* Compiled Dec 12 2017, 16:38:40 *
+* (c) 2017 Segger Microcontroller GmbH & Co. KG *
+* *
+**********************************************************************
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+*/
+
+// USER START (Optionally insert additional includes)
+// USER END
+#include "stdio.h"
+#include "DIALOG.h"
+
+#include "M480.h"
+/* Scheduler include files. */
+//#include "FreeRTOS.h"
+//#include "task.h"
+//#include "semphr.h"
+
+//extern xSemaphoreHandle psGUISemaphore;
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
+#define ID_BUTTON_0 (GUI_ID_USER + 0x05)
+#define ID_BUTTON_1 (GUI_ID_USER + 0x06)
+#define ID_BUTTON_2 (GUI_ID_USER + 0x07)
+#define ID_BUTTON_3 (GUI_ID_USER + 0x08)
+#define ID_EDIT_0 (GUI_ID_USER + 0x09)
+#define ID_TEXT_0 (GUI_ID_USER + 0x0B)
+
+
+// USER START (Optionally insert additional defines)
+// USER END
+
+/*********************************************************************
+*
+* Static data
+*
+**********************************************************************
+*/
+
+// USER START (Optionally insert additional static data)
+// USER END
+
+/*********************************************************************
+*
+* _aDialogCreate
+*/
+static const GUI_WIDGET_CREATE_INFO _aDialogCreate[7] =
+{
+ { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x0 },
+ { BUTTON_CreateIndirect, "+ 1", ID_BUTTON_0, 43, 38, 80, 20, 0, 0x0 },
+ { BUTTON_CreateIndirect, "+ 10", ID_BUTTON_1, 43, 77, 80, 20, 0, 0x0 },
+ { BUTTON_CreateIndirect, "- 1", ID_BUTTON_2, 45, 116, 80, 20, 0, 0x0 },
+ { BUTTON_CreateIndirect, "- 10", ID_BUTTON_3, 46, 158, 80, 20, 0, 0x0 },
+ { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 204, 72, 80, 20, 0, 0x64 },
+ { TEXT_CreateIndirect, "Result :", ID_TEXT_0, 151, 74, 50, 20, 0, 0x0 },
+ // USER START (Optionally insert additional widgets)
+ // USER END
+};
+
+/*********************************************************************
+*
+* Static code
+*
+**********************************************************************
+*/
+
+// USER START (Optionally insert additional static code)
+// USER END
+
+int value;
+char sBuf[20];
+/*********************************************************************
+*
+* _cbDialog
+*/
+static void _cbDialog(WM_MESSAGE * pMsg)
+{
+ WM_HWIN hItem;
+ int NCode;
+ int Id;
+ // USER START (Optionally insert additional variables)
+ // USER END
+
+ switch (pMsg->MsgId)
+ {
+ case WM_INIT_DIALOG:
+ //
+ // Initialization of 'Edit'
+ //
+ hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+ EDIT_SetText(hItem, "123");
+ value = 123;
+ // USER START (Optionally insert additional code for further widget initialization)
+ // USER END
+ break;
+ case WM_NOTIFY_PARENT:
+ Id = WM_GetId(pMsg->hWinSrc);
+ NCode = pMsg->Data.v;
+ switch(Id)
+ {
+ case ID_BUTTON_0: // Notifications sent by '+ 1'
+ switch(NCode)
+ {
+ case WM_NOTIFICATION_CLICKED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ value += 1;
+ sprintf(sBuf,"%d ", value);
+ hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+ EDIT_SetText(hItem, sBuf);
+ break;
+ case WM_NOTIFICATION_RELEASED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ // USER START (Optionally insert additional code for further notification handling)
+ // USER END
+ }
+ break;
+ case ID_BUTTON_1: // Notifications sent by '+ 10'
+ switch(NCode)
+ {
+ case WM_NOTIFICATION_CLICKED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ value += 10;
+ sprintf(sBuf,"%d ", value);
+ hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+ EDIT_SetText(hItem, sBuf);
+ break;
+ case WM_NOTIFICATION_RELEASED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ // USER START (Optionally insert additional code for further notification handling)
+ // USER END
+ }
+ break;
+ case ID_BUTTON_2: // Notifications sent by '- 1'
+ switch(NCode)
+ {
+ case WM_NOTIFICATION_CLICKED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ value -= 1;
+ sprintf(sBuf,"%d ", value);
+ hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+ EDIT_SetText(hItem, sBuf);
+ break;
+ case WM_NOTIFICATION_RELEASED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ // USER START (Optionally insert additional code for further notification handling)
+ // USER END
+ }
+ break;
+ case ID_BUTTON_3: // Notifications sent by '- 10'
+ switch(NCode)
+ {
+ case WM_NOTIFICATION_CLICKED:
+ // USER START (Optionally insert code for reacting on notification message)
+ value -= 10;
+ sprintf(sBuf,"%d ", value);
+ hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
+ EDIT_SetText(hItem, sBuf);
+ // USER END
+ break;
+ case WM_NOTIFICATION_RELEASED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ // USER START (Optionally insert additional code for further notification handling)
+ // USER END
+ }
+ break;
+ case ID_EDIT_0: // Notifications sent by 'Edit'
+ switch(NCode)
+ {
+ case WM_NOTIFICATION_CLICKED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ case WM_NOTIFICATION_RELEASED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ case WM_NOTIFICATION_VALUE_CHANGED:
+ // USER START (Optionally insert code for reacting on notification message)
+ // USER END
+ break;
+ // USER START (Optionally insert additional code for further notification handling)
+ // USER END
+ }
+ break;
+ // USER START (Optionally insert additional code for further Ids)
+ // USER END
+ }
+ break;
+ // USER START (Optionally insert additional message handling)
+ // USER END
+ default:
+ WM_DefaultProc(pMsg);
+ // xSemaphoreTake(psGUISemaphore, 10/portTICK_RATE_MS);
+ break;
+ }
+}
+
+/*********************************************************************
+*
+* Public code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* CreateFramewin
+*/
+WM_HWIN CreateFramewin(void);
+WM_HWIN CreateFramewin(void)
+{
+ WM_HWIN hWin;
+
+ hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
+ return hWin;
+}
+
+// USER START (Optionally insert additional public code)
+// USER END
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/GUIConf.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,86 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIConf.c
+Purpose : Display controller initialization
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+//
+// Define the available number of bytes available for the GUI
+//
+#define GUI_NUMBYTES 10*1024
+
+/*********************************************************************
+*
+* Public code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* GUI_X_Config
+*
+* Purpose:
+* Called during the initialization process in order to set up the
+* available memory for the GUI.
+*/
+void GUI_X_Config(void) {
+ //
+ // 32 bit aligned memory area
+ //
+ static U32 aMemory[GUI_NUMBYTES / 4];
+ //
+ // Assign memory to emWin
+ //
+ GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
+ //
+ // Set default font
+ //
+ GUI_SetDefaultFont(GUI_FONT_6X8);
+}
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Config/GUIConf.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,82 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : GUIConf.h +Purpose : Configures emWins abilities, fonts etc. +---------------------------------------------------------------------- +*/ + +#ifndef GUICONF_H +#define GUICONF_H + +/********************************************************************* +* +* Multi layer/display support +*/ +#define GUI_NUM_LAYERS 1 // Maximum number of available layers + +/********************************************************************* +* +* Multi tasking support +*/ +#define GUI_OS (0) // Compile with multitasking support + +/********************************************************************* +* +* Configuration of touch support +*/ +#define GUI_SUPPORT_TOUCH (1) // Support a touch screen (req. win-manager) + +/********************************************************************* +* +* Default font +*/ +#define GUI_DEFAULT_FONT &GUI_Font6x8 + +/********************************************************************* +* +* Configuration of available packages +*/ +#define GUI_SUPPORT_MOUSE 0 // Mouse support +#define GUI_WINSUPPORT 1 // Use Window Manager +#define GUI_SUPPORT_MEMDEV 1 // Use Memory Devices +#define GUI_SUPPORT_DEVICES 1 // Enable use of device pointers + +#endif // Avoid multiple inclusion + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/GUI_X.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,150 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_X.C
+Purpose : Config / System dependent externals for GUI
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI.h"
+
+/*********************************************************************
+*
+* Global data
+*/
+volatile GUI_TIMER_TIME OS_TimeMS;
+
+/*********************************************************************
+*
+* Timing:
+* GUI_X_GetTime()
+* GUI_X_Delay(int)
+
+ Some timing dependent routines require a GetTime
+ and delay function. Default time unit (tick), normally is
+ 1 ms.
+*/
+
+GUI_TIMER_TIME GUI_X_GetTime(void) {
+ return OS_TimeMS;
+}
+
+void GUI_X_Delay(int ms) {
+ int tEnd = OS_TimeMS + ms;
+ while ((tEnd - OS_TimeMS) > 0);
+}
+
+/*********************************************************************
+*
+* GUI_X_Init()
+*
+* Note:
+* GUI_X_Init() is called from GUI_Init is a possibility to init
+* some hardware which needs to be up and running before the GUI.
+* If not required, leave this routine blank.
+*/
+
+void GUI_X_Init(void) {}
+
+
+/*********************************************************************
+*
+* GUI_X_ExecIdle
+*
+* Note:
+* Called if WM is in idle state
+*/
+
+void GUI_X_ExecIdle(void) {}
+
+/*********************************************************************
+*
+* Logging: OS dependent
+
+Note:
+ Logging is used in higher debug levels only. The typical target
+ build does not use logging and does therefor not require any of
+ the logging routines below. For a release build without logging
+ the routines below may be eliminated to save some space.
+ (If the linker is not function aware and eliminates unreferenced
+ functions automatically)
+
+*/
+
+void GUI_X_Log (const char *s) { GUI_USE_PARA(s); }
+void GUI_X_Warn (const char *s) { GUI_USE_PARA(s); }
+void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }
+
+/*********************************************************************
+*
+* Multitasking:
+*
+* GUI_X_InitOS()
+* GUI_X_GetTaskId()
+* GUI_X_Lock()
+* GUI_X_Unlock()
+*
+* Note:
+* The following routines are required only if emWin is used in a
+* true multi task environment, which means you have more than one
+* thread using the emWin API.
+* In this case the
+* #define GUI_OS 1
+* needs to be in GUIConf.h
+*/
+
+void GUI_X_InitOS(void) { }
+void GUI_X_Unlock(void) { }
+void GUI_X_Lock(void) { }
+U32 GUI_X_GetTaskId(void) { return 1; }
+
+
+/*********************************************************************
+*
+* Event driving (optional with multitasking)
+*
+* GUI_X_WaitEvent()
+* GUI_X_WaitEventTimed()
+* GUI_X_SignalEvent()
+*/
+
+void GUI_X_WaitEvent(void) { }
+void GUI_X_SignalEvent(void) { }
+void GUI_X_WaitEventTimed(int Period) { }
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Config/LCDConf.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,618 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LCDConf.c
+Purpose : Display controller configuration (single layer)
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include <stddef.h>
+#include <stdio.h>
+
+#include "GUI.h"
+#include "GUIDRV_FlexColor.h"
+
+#include "M480.h"
+
+#include "M48XTouchPanel.h"
+
+/*********************************************************************
+*
+* Layer configuration
+*
+**********************************************************************
+*/
+//
+// Physical display size
+//
+#define XSIZE_PHYS 240
+#define YSIZE_PHYS 320
+
+//
+// Color conversion
+//
+#define COLOR_CONVERSION GUICC_565
+
+//
+// Display driver
+//
+#define DISPLAY_DRIVER GUIDRV_FLEXCOLOR
+
+//
+// Orientation
+//
+#define DISPLAY_ORIENTATION (0)
+
+//
+// Hardware related
+//
+/* LCD Module "RS" */
+#define PH_CTRL_RS 1
+#if PH_CTRL_RS
+#define SET_RS PH3 = 1;
+#define CLR_RS PH3 = 0;
+#endif
+
+/* LCD Module "RESET" */
+#define SET_RST PB6 = 1;
+#define CLR_RST PB6 = 0;
+
+/*********************************************************************
+*
+* Configuration checking
+*
+**********************************************************************
+*/
+#ifndef VXSIZE_PHYS
+#define VXSIZE_PHYS XSIZE_PHYS
+#endif
+#ifndef VYSIZE_PHYS
+#define VYSIZE_PHYS YSIZE_PHYS
+#endif
+#ifndef XSIZE_PHYS
+#error Physical X size of display is not defined!
+#endif
+#ifndef YSIZE_PHYS
+#error Physical Y size of display is not defined!
+#endif
+#ifndef COLOR_CONVERSION
+#error Color conversion not defined!
+#endif
+#ifndef DISPLAY_DRIVER
+#error No display driver defined!
+#endif
+#ifndef DISPLAY_ORIENTATION
+#define DISPLAY_ORIENTATION 0
+#endif
+
+/*********************************************************************
+*
+* Static code
+*
+**********************************************************************/
+/*-----------------------------------------------*/
+// Write control registers of LCD module
+//
+/*-----------------------------------------------*/
+#if PH_CTRL_RS
+void LCD_WR_REG(uint16_t cmd)
+{
+ CLR_RS
+ EBI0_WRITE_DATA16(0x00000000, cmd);
+ SET_RS
+
+}
+
+#else
+void LCD_WR_REG(uint16_t cmd)
+{
+ EBI0_WRITE_DATA16(0x00000000, cmd);
+}
+
+#endif
+
+
+/*-----------------------------------------------*/
+// Write data to SRAM of LCD module
+//
+/*-----------------------------------------------*/
+void LCD_WR_DATA(uint16_t dat)
+{
+ EBI0_WRITE_DATA16(0x00030000, dat);
+
+}
+
+
+/*-----------------------------------------------*/
+// Read data from SRAM of LCD module
+//
+/*-----------------------------------------------*/
+uint16_t LCD_RD_DATA(void)
+{
+ return EBI0_READ_DATA16(0x00030000);
+
+}
+
+/********************************************************************
+*
+* LcdWriteDataMultiple
+*
+* Function description:
+* Writes multiple values to a display register.
+*/
+static void LcdWriteDataMultiple(uint16_t * pData, int NumItems)
+{
+ while (NumItems--) {
+ EBI0_WRITE_DATA16(0x00030000,*pData++);
+ }
+}
+
+/********************************************************************
+*
+* LcdReadDataMultiple
+*
+* Function description:
+* Reads multiple values from a display register.
+*/
+static void LcdReadDataMultiple(uint16_t * pData, int NumItems)
+{
+ while (NumItems--) {
+ *pData++ = EBI0_READ_DATA16(0x00030000);
+ }
+}
+
+/*-----------------------------------------------*/
+// Set cursor positon on the LCD screen
+//
+/*-----------------------------------------------*/
+#if 0
+void LCD_SetCursor(uint16_t x_s, uint16_t y_s)
+{
+ uint16_t x_e = x_s+1;
+ uint16_t y_e = y_s+1;
+
+ /* X range */
+ LCD_WR_REG(0x2A);
+ LCD_WR_DATA(x_s>>8);
+ LCD_WR_DATA(x_s);
+ LCD_WR_DATA(x_e>>8);
+ LCD_WR_DATA(x_e);
+
+ /* Y range */
+ LCD_WR_REG(0x2B);
+ LCD_WR_DATA(y_s>>8);
+ LCD_WR_DATA(y_s);
+ LCD_WR_DATA(y_e>>8);
+ LCD_WR_DATA(y_e);
+
+ /* Memory write */
+ LCD_WR_REG(0x2C);
+
+}
+#endif
+
+/*-----------------------------------------------*/
+// Initial LIL9341 LCD driver chip
+//
+/*-----------------------------------------------*/
+void ILI9341_Initial(void)
+{
+ uint16_t Reg = 0;
+
+ /* Hardware reset */
+ SET_RST;
+ GUI_X_Delay(5); // Delay 5ms
+
+ CLR_RST;
+ GUI_X_Delay(20); // Delay 20ms
+
+ SET_RST;
+ GUI_X_Delay(40); // Delay 40ms
+
+ /* Initial control registers */
+ LCD_WR_REG(0xCB);
+ LCD_WR_DATA(0x39);
+ LCD_WR_DATA(0x2C);
+ LCD_WR_DATA(0x00);
+ LCD_WR_DATA(0x34);
+ LCD_WR_DATA(0x02);
+
+ LCD_WR_REG(0xCF);
+ LCD_WR_DATA(0x00);
+ LCD_WR_DATA(0xC1);
+ LCD_WR_DATA(0x30);
+
+ LCD_WR_REG(0xE8);
+ LCD_WR_DATA(0x85);
+ LCD_WR_DATA(0x00);
+ LCD_WR_DATA(0x78);
+
+ LCD_WR_REG(0xEA);
+ LCD_WR_DATA(0x00);
+ LCD_WR_DATA(0x00);
+
+ LCD_WR_REG(0xED);
+ LCD_WR_DATA(0x64);
+ LCD_WR_DATA(0x03);
+ LCD_WR_DATA(0x12);
+ LCD_WR_DATA(0x81);
+
+ LCD_WR_REG(0xF7);
+ LCD_WR_DATA(0x20);
+
+ LCD_WR_REG(0xC0);
+ LCD_WR_DATA(0x23);
+
+ LCD_WR_REG(0xC1);
+ LCD_WR_DATA(0x10);
+
+ LCD_WR_REG(0xC5);
+ LCD_WR_DATA(0x3e);
+ LCD_WR_DATA(0x28);
+
+ LCD_WR_REG(0xC7);
+ LCD_WR_DATA(0x86);
+
+ LCD_WR_REG(0x36);
+ LCD_WR_DATA(0x48);
+
+ LCD_WR_REG(0x3A);
+ LCD_WR_DATA(0x55);
+
+ LCD_WR_REG(0xB1);
+ LCD_WR_DATA(0x00);
+ LCD_WR_DATA(0x18);
+
+ LCD_WR_REG(0xB6);
+ LCD_WR_DATA(0x08);
+ LCD_WR_DATA(0x82);
+ LCD_WR_DATA(0x27);
+
+ LCD_WR_REG(0xF2);
+ LCD_WR_DATA(0x00);
+
+ LCD_WR_REG(0x26);
+ LCD_WR_DATA(0x01);
+
+ LCD_WR_REG(0xE0);
+ LCD_WR_DATA(0x0F);
+ LCD_WR_DATA(0x31);
+ LCD_WR_DATA(0x2B);
+ LCD_WR_DATA(0x0C);
+ LCD_WR_DATA(0x0E);
+ LCD_WR_DATA(0x08);
+ LCD_WR_DATA(0x4E);
+ LCD_WR_DATA(0xF1);
+ LCD_WR_DATA(0x37);
+ LCD_WR_DATA(0x07);
+ LCD_WR_DATA(0x10);
+ LCD_WR_DATA(0x03);
+ LCD_WR_DATA(0x0E);
+ LCD_WR_DATA(0x09);
+ LCD_WR_DATA(0x00);
+
+ LCD_WR_REG(0xE1);
+ LCD_WR_DATA(0x00);
+ LCD_WR_DATA(0x0E);
+ LCD_WR_DATA(0x14);
+ LCD_WR_DATA(0x03);
+ LCD_WR_DATA(0x11);
+ LCD_WR_DATA(0x07);
+ LCD_WR_DATA(0x31);
+ LCD_WR_DATA(0xC1);
+ LCD_WR_DATA(0x48);
+ LCD_WR_DATA(0x08);
+ LCD_WR_DATA(0x0F);
+ LCD_WR_DATA(0x0C);
+ LCD_WR_DATA(0x31);
+ LCD_WR_DATA(0x36);
+ LCD_WR_DATA(0x0F);
+
+ LCD_WR_REG(0x11);
+ GUI_X_Delay(200); // Delay 200ms
+
+ LCD_WR_REG(0x29); //Display on
+
+ LCD_WR_REG(0x0A);
+ Reg = LCD_RD_DATA();
+ Reg = LCD_RD_DATA();
+ printf("0Ah = %02x.\n", Reg);
+
+ LCD_WR_REG(0x0B);
+ Reg = LCD_RD_DATA();
+ Reg = LCD_RD_DATA();
+ printf("0Bh = %02x.\n", Reg);
+
+ LCD_WR_REG(0x0C);
+ Reg = LCD_RD_DATA();
+ Reg = LCD_RD_DATA();
+ printf("0Ch = %02x.\n", Reg);
+
+ printf("Initial ILI9341 LCD Module done.\n\n");
+
+}
+
+//void I2C2_Init(void)
+//{
+ /* Open I2C2 and set clock to 100k */
+ //I2C_Open(I2C2, 100000);
+//}
+
+//void EINT7_IRQHandler(void)
+//{
+// /* To check if PB.9 external interrupt occurred */
+// if(GPIO_GET_INT_FLAG(PB, BIT9)) {
+// GPIO_CLR_INT_FLAG(PB, BIT9);
+// printf("PB.9 EINT7 occurred.\n");
+// }
+
+//}
+
+
+void EBI_FuncPinInit(void)
+{
+/*=== EBI (LCD module) mult-function pins ===*/
+ /* EBI AD0~5 pins on PG.9~14 */
+ SYS->GPG_MFPH &= ~(SYS_GPG_MFPH_PG9MFP_Msk | SYS_GPG_MFPH_PG10MFP_Msk |
+ SYS_GPG_MFPH_PG11MFP_Msk | SYS_GPG_MFPH_PG12MFP_Msk |
+ SYS_GPG_MFPH_PG13MFP_Msk | SYS_GPG_MFPH_PG14MFP_Msk);
+ SYS->GPG_MFPH |= (SYS_GPG_MFPH_PG9MFP_EBI_AD0 | SYS_GPG_MFPH_PG10MFP_EBI_AD1 |
+ SYS_GPG_MFPH_PG11MFP_EBI_AD2 | SYS_GPG_MFPH_PG12MFP_EBI_AD3 |
+ SYS_GPG_MFPH_PG13MFP_EBI_AD4 | SYS_GPG_MFPH_PG14MFP_EBI_AD5);
+
+ /* EBI AD6, AD7 pins on PD.8, PD.9 */
+ SYS->GPD_MFPH &= ~(SYS_GPD_MFPH_PD8MFP_Msk | SYS_GPD_MFPH_PD9MFP_Msk);
+ SYS->GPD_MFPH |= (SYS_GPD_MFPH_PD8MFP_EBI_AD6 | SYS_GPD_MFPH_PD9MFP_EBI_AD7);
+
+ /* EBI AD8, AD9 pins on PE.14, PE.15 */
+ SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE14MFP_Msk | SYS_GPE_MFPH_PE15MFP_Msk);
+ SYS->GPE_MFPH |= (SYS_GPE_MFPH_PE14MFP_EBI_AD8 | SYS_GPE_MFPH_PE15MFP_EBI_AD9);
+
+ /* EBI AD10, AD11 pins on PE.1, PE.0 */
+ SYS->GPE_MFPL &= ~(SYS_GPE_MFPL_PE1MFP_Msk | SYS_GPE_MFPL_PE0MFP_Msk);
+ SYS->GPE_MFPL |= (SYS_GPE_MFPL_PE1MFP_EBI_AD10 | SYS_GPE_MFPL_PE0MFP_EBI_AD11);
+
+ /* EBI AD12~15 pins on PH.8~11 */
+ SYS->GPH_MFPH &= ~(SYS_GPH_MFPH_PH8MFP_Msk | SYS_GPH_MFPH_PH9MFP_Msk |
+ SYS_GPH_MFPH_PH10MFP_Msk | SYS_GPH_MFPH_PH11MFP_Msk);
+ SYS->GPH_MFPH |= (SYS_GPH_MFPH_PH8MFP_EBI_AD12 | SYS_GPH_MFPH_PH9MFP_EBI_AD13 |
+ SYS_GPH_MFPH_PH10MFP_EBI_AD14 | SYS_GPH_MFPH_PH11MFP_EBI_AD15);
+
+ /* Configure PH.3 as Output mode for LCD_RS (use GPIO PH.3 to control LCD_RS) */
+ GPIO_SetMode(PH, BIT3, GPIO_MODE_OUTPUT);
+ PH3 = 1;
+
+ /* EBI RD and WR pins on PE.4 and PE.5 */
+ SYS->GPE_MFPL &= ~(SYS_GPE_MFPL_PE4MFP_Msk | SYS_GPE_MFPL_PE5MFP_Msk);
+ SYS->GPE_MFPL |= (SYS_GPE_MFPL_PE4MFP_EBI_nWR | SYS_GPE_MFPL_PE5MFP_EBI_nRD);
+
+ /* EBI CS0 pin on PD.14 */
+ SYS->GPD_MFPH &= ~SYS_GPD_MFPH_PD14MFP_Msk;
+ SYS->GPD_MFPH |= SYS_GPD_MFPH_PD14MFP_EBI_nCS0;
+
+ /* Configure PB.6 and PB.7 as Output mode for LCD_RST and LCD_Backlight */
+ GPIO_SetMode(PB, BIT6, GPIO_MODE_OUTPUT);
+ GPIO_SetMode(PB, BIT7, GPIO_MODE_OUTPUT);
+ PB6 = 1;
+ PB7 = 0;
+
+ //GPIO_SetMode(PH, BIT5, GPIO_MODE_INPUT);
+ //GPIO_SetMode(PH, BIT6, GPIO_MODE_INPUT);
+ //GPIO_SetMode(PH, BIT7, GPIO_MODE_INPUT);
+
+}
+
+/*********************************************************************
+*
+* _InitController
+*
+* Purpose:
+* Initializes the display controller
+*/
+static void _InitController(void)
+{
+ static uint8_t s_InitOnce = 0;
+
+ if (s_InitOnce == 0)
+ s_InitOnce = 1;
+ else
+ return;
+
+ CLK_EnableModuleClock(EBI_MODULE);
+
+ /* Configure DC/RESET/LED pins */
+ EBI_FuncPinInit();
+
+ /* Initialize EBI bank0 to access external LCD Module */
+ EBI_Open(EBI_BANK0, EBI_BUSWIDTH_16BIT, EBI_TIMING_NORMAL, 0, EBI_CS_ACTIVE_LOW);
+ EBI->CTL0 |= EBI_CTL0_CACCESS_Msk;
+ EBI->TCTL0 |= (EBI_TCTL0_WAHDOFF_Msk | EBI_TCTL0_RAHDOFF_Msk);
+ printf("\n[EBI CTL0:0x%08X, TCLT0:0x%08X]\n\n", EBI->CTL0, EBI->TCTL0);
+
+ /* Init LCD Module */
+ ILI9341_Initial();
+
+ /* PB.7 BL_CTRL pin */
+ PB7 = 1;
+
+ /* Init I2C2 to TP of LCD module */
+ //I2C2_Init();
+
+// /* Configure PB.9 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
+// GPIO_SetMode(PB, BIT9, GPIO_MODE_QUASI);
+// GPIO_EnableInt(PB, 9, GPIO_INT_FALLING);
+// NVIC_EnableIRQ(EINT7_IRQn);
+}
+
+/*********************************************************************
+*
+* Public code
+*
+**********************************************************************
+*/
+#if GUI_SUPPORT_TOUCH
+extern int ts_phy2log(int *sumx, int *sumy);
+
+void GUI_TOUCH_X_ActivateX(void) {
+}
+
+void GUI_TOUCH_X_ActivateY(void) {
+}
+
+
+
+int GUI_TOUCH_X_MeasureX(void) {
+ int sumx;
+ int sumy;
+ if (Read_TouchPanel(&sumx, &sumy))
+ {
+// sysprintf("X = %d\n", sumx);
+ ts_phy2log(&sumx, &sumy);
+ return sumx;
+ }
+ return -1;
+}
+
+int GUI_TOUCH_X_MeasureY(void) {
+ int sumx;
+ int sumy;
+ if ( Read_TouchPanel(&sumx, &sumy) )
+ {
+// sysprintf("Y = %d\n", sumy);
+ ts_phy2log(&sumx, &sumy);
+ return sumy;
+ }
+ return -1;
+}
+#endif
+/*********************************************************************
+*
+* LCD_X_Config
+*
+* Purpose:
+* Called during the initialization process in order to set up the
+* display driver configuration.
+*
+*/
+void LCD_X_Config(void)
+{
+ GUI_DEVICE * pDevice;
+ CONFIG_FLEXCOLOR Config = {0};
+ GUI_PORT_API PortAPI = {0};
+ //
+ // Set display driver and color conversion
+ //
+ pDevice = GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
+
+ //
+ // Display driver configuration
+ //
+ LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
+ LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
+ //
+ // Orientation
+ //
+ Config.Orientation = GUI_MIRROR_X | GUI_MIRROR_Y | GUI_SWAP_XY;
+ GUIDRV_FlexColor_Config(pDevice, &Config);
+ //
+ // Set controller and operation mode
+ //
+ PortAPI.pfWrite16_A0 = LCD_WR_REG;
+ PortAPI.pfWrite16_A1 = LCD_WR_DATA;
+ PortAPI.pfWriteM16_A0 = LcdWriteDataMultiple;
+ PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
+ PortAPI.pfRead16_A0 = LCD_RD_DATA;
+ PortAPI.pfRead16_A1 = LCD_RD_DATA;
+ PortAPI.pfReadM16_A0 = LcdReadDataMultiple;
+ PortAPI.pfReadM16_A1 = LcdReadDataMultiple;
+ GUIDRV_FlexColor_SetReadFunc66709_B16(pDevice, GUIDRV_FLEXCOLOR_READ_FUNC_III);
+ GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);
+
+#if GUI_SUPPORT_TOUCH
+// LCD calibration
+//
+// Calibrate touch screen
+//
+ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, (__DEMO_TS_WIDTH__ - 1), 0, (__DEMO_TS_WIDTH__ - 1));
+ GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, (__DEMO_TS_HEIGHT__- 1), 0, (__DEMO_TS_HEIGHT__- 1));
+#endif
+}
+/*********************************************************************
+*
+* LCD_X_DisplayDriver
+*
+* Purpose:
+* This function is called by the display driver for several purposes.
+* To support the according task the routine needs to be adapted to
+* the display controller. Please note that the commands marked with
+* 'optional' are not cogently required and should only be adapted if
+* the display controller supports these features.
+*
+* Parameter:
+* LayerIndex - Index of layer to be configured
+* Cmd - Please refer to the details in the switch statement below
+* pData - Pointer to a LCD_X_DATA structure
+*/
+int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
+{
+ int r;
+
+ GUI_USE_PARA(LayerIndex);
+ GUI_USE_PARA(pData);
+ switch (Cmd) {
+ //
+ // Required
+ //
+ case LCD_X_INITCONTROLLER: {
+ //
+ // Called during the initialization process in order to set up the
+ // display controller and put it into operation. If the display
+ // controller is not initialized by any external routine this needs
+ // to be adapted by the customer...
+ //
+ _InitController();
+ //printf("\n************ _InitController \n\n");
+ return 0;
+ }
+ default:
+ r = -1;
+ }
+ return r;
+}
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Config/LCDConf.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,49 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : LCDConf.h +Purpose : Display driver configuration file +---------------------------------------------------------------------- +*/ + +#ifndef LCDCONF_H +#define LCDCONF_H + +#endif /* LCDCONF_H */ + +/*************************** End of file ****************************/
Binary file emWin/Doc/AN03002_Custom_Widget_Type.pdf has changed
Binary file emWin/Doc/M480 emWin Quick Start Guide.pdf has changed
Binary file emWin/Doc/UM_Font_Architect_EN_Rev1.02.pdf has changed
Binary file emWin/Doc/UM_Font_Architect_TC_Rev1.02.pdf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/BUTTON.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,218 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : BUTTON.h
+Purpose : BUTTON public header file (API)
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef BUTTON_H
+#define BUTTON_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Create flags
+*/
+/* For compatibility only ! */
+#define BUTTON_CF_HIDE WM_CF_HIDE
+#define BUTTON_CF_SHOW WM_CF_SHOW
+#define BUTTON_CF_MEMDEV WM_CF_MEMDEV
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define BUTTON_CI_UNPRESSED 0
+#define BUTTON_CI_PRESSED 1
+#define BUTTON_CI_DISABLED 2
+
+/*********************************************************************
+*
+* Bitmap indices
+*/
+#define BUTTON_BI_UNPRESSED 0
+#define BUTTON_BI_PRESSED 1
+#define BUTTON_BI_DISABLED 2
+
+/*********************************************************************
+*
+* States
+*/
+#define BUTTON_STATE_FOCUS WIDGET_STATE_FOCUS
+#define BUTTON_STATE_PRESSED WIDGET_STATE_USER0
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define BUTTON_SKINFLEX_PI_PRESSED 0
+#define BUTTON_SKINFLEX_PI_FOCUSED 1
+#define BUTTON_SKINFLEX_PI_ENABLED 2
+#define BUTTON_SKINFLEX_PI_DISABLED 3
+
+#define BUTTON_SKINFLEX_PI_FOCUSSED BUTTON_SKINFLEX_PI_FOCUSED
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM BUTTON_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[3];
+ GUI_COLOR aColorUpper[2];
+ GUI_COLOR aColorLower[2];
+ int Radius;
+} BUTTON_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Create function(s)
+
+ Note: the parameters to a create function may vary.
+ Some widgets may have multiple create functions
+*/
+
+BUTTON_Handle BUTTON_Create (int x0, int y0, int xSize, int ySize, int ID, int Flags);
+BUTTON_Handle BUTTON_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+BUTTON_Handle BUTTON_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+BUTTON_Handle BUTTON_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+BUTTON_Handle BUTTON_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR BUTTON_GetDefaultBkColor (unsigned Index);
+const GUI_FONT * BUTTON_GetDefaultFont (void);
+int BUTTON_GetDefaultTextAlign (void);
+GUI_COLOR BUTTON_GetDefaultTextColor (unsigned Index);
+void BUTTON_SetDefaultBkColor (GUI_COLOR Color, unsigned Index);
+GUI_COLOR BUTTON_SetDefaultFocusColor(GUI_COLOR Color);
+void BUTTON_SetDefaultFont (const GUI_FONT * pFont);
+void BUTTON_SetDefaultTextAlign (int Align);
+void BUTTON_SetDefaultTextColor (GUI_COLOR Color, unsigned Index);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void BUTTON_Callback(WM_MESSAGE *pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+GUI_COLOR BUTTON_GetBkColor (BUTTON_Handle hObj, unsigned int Index);
+const GUI_BITMAP * BUTTON_GetBitmap (BUTTON_Handle hObj,unsigned int Index);
+const GUI_FONT * BUTTON_GetFont (BUTTON_Handle hObj);
+GUI_COLOR BUTTON_GetFrameColor (BUTTON_Handle hObj);
+WIDGET * BUTTON_GetpWidget (BUTTON_Handle hObj);
+void BUTTON_GetText (BUTTON_Handle hObj, char * pBuffer, int MaxLen);
+GUI_COLOR BUTTON_GetTextColor (BUTTON_Handle hObj, unsigned int Index);
+int BUTTON_GetTextAlign (BUTTON_Handle hObj);
+int BUTTON_GetUserData (BUTTON_Handle hObj, void * pDest, int NumBytes);
+unsigned BUTTON_IsPressed (BUTTON_Handle hObj);
+void BUTTON_SetBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap);
+void BUTTON_SetBitmapEx (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);
+void BUTTON_SetBkColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void BUTTON_SetBMP (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap);
+void BUTTON_SetBMPEx (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap, int x, int y);
+void BUTTON_SetFont (BUTTON_Handle hObj, const GUI_FONT * pfont);
+void BUTTON_SetFrameColor (BUTTON_Handle hObj, GUI_COLOR Color);
+void BUTTON_SetState (BUTTON_Handle hObj, int State); /* Not to be doc. */
+void BUTTON_SetPressed (BUTTON_Handle hObj, int State);
+GUI_COLOR BUTTON_SetFocusColor (BUTTON_Handle hObj, GUI_COLOR Color);
+void BUTTON_SetStreamedBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);
+void BUTTON_SetStreamedBitmapEx(BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
+int BUTTON_SetText (BUTTON_Handle hObj, const char* s);
+void BUTTON_SetTextAlign (BUTTON_Handle hObj, int Align);
+void BUTTON_SetTextColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void BUTTON_SetTextOffset (BUTTON_Handle hObj, int xPos, int yPos);
+void BUTTON_SetSelfDrawEx (BUTTON_Handle hObj, unsigned int Index, GUI_DRAW_SELF_CB * pDraw, int x, int y); /* Not to be doc. */
+void BUTTON_SetSelfDraw (BUTTON_Handle hObj, unsigned int Index, GUI_DRAW_SELF_CB * pDraw); /* Not to be doc. */
+void BUTTON_SetReactOnLevel (void);
+void BUTTON_SetReactOnTouch (void);
+int BUTTON_SetUserData (BUTTON_Handle hObj, const void * pSrc, int NumBytes);
+
+#define BUTTON_SetFocussable BUTTON_SetFocusable
+#define BUTTON_SetFocusable WIDGET_SetFocusable
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void BUTTON_GetSkinFlexProps (BUTTON_SKINFLEX_PROPS * pProps, int Index);
+void BUTTON_SetSkinClassic (BUTTON_Handle hObj);
+void BUTTON_SetSkin (BUTTON_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int BUTTON_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void BUTTON_SetSkinFlexProps (const BUTTON_SKINFLEX_PROPS * pProps, int Index);
+void BUTTON_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * BUTTON_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define BUTTON_SKIN_FLEX BUTTON_DrawSkinFlex
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // BUTTON_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/BUTTON_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,138 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : BUTTON_Private.h
+Purpose : BUTTON private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef BUTTON_PRIVATE_H
+#define BUTTON_PRIVATE_H
+
+#include "WM.h"
+#include "BUTTON.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#ifndef BUTTON_3D_MOVE_X
+ #define BUTTON_3D_MOVE_X 1
+#endif
+#ifndef BUTTON_3D_MOVE_Y
+ #define BUTTON_3D_MOVE_Y 1
+#endif
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} BUTTON_SKIN_PRIVATE;
+
+typedef struct {
+ GUI_COLOR aBkColor[3];
+ GUI_COLOR aTextColor[3];
+ GUI_COLOR FocusColor;
+ GUI_COLOR FrameColor;
+ const GUI_FONT * pFont;
+ BUTTON_SKIN_PRIVATE SkinPrivate;
+ I16 Align;
+ I16 xPosText, yPosText;
+} BUTTON_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ BUTTON_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ WM_HMEM hpText;
+ WM_HMEM ahDrawObj[3];
+} BUTTON_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define BUTTON_INIT_ID(p) (p->Widget.DebugId = BUTTON_ID)
+#else
+ #define BUTTON_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ BUTTON_Obj * BUTTON_LockH(BUTTON_Handle h);
+ #define BUTTON_LOCK_H(h) BUTTON_LockH(h)
+#else
+ #define BUTTON_LOCK_H(h) (BUTTON_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern BUTTON_PROPS BUTTON__DefaultProps;
+
+extern const WIDGET_SKIN BUTTON__SkinClassic;
+extern WIDGET_SKIN BUTTON__Skin;
+
+extern WIDGET_SKIN const * BUTTON__pSkinDefault;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void BUTTON__SetDrawObj(BUTTON_Handle hObj, int Index, GUI_DRAW_HANDLE hDrawObj);
+
+
+#endif /* GUI_WINSUPPORT */
+#endif /* BUTTON_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CALENDAR.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,164 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : CALENDAR.h
+Purpose : Message box interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CALENDAR_H
+#define CALENDAR_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define CALENDAR_CI_WEEKEND 0
+#define CALENDAR_CI_WEEKDAY 1
+#define CALENDAR_CI_SEL 2
+
+#define CALENDAR_CI_HEADER 3
+#define CALENDAR_CI_MONTH 4
+#define CALENDAR_CI_LABEL 5
+#define CALENDAR_CI_FRAME 6
+
+#define CALENDAR_FI_CONTENT 0
+#define CALENDAR_FI_HEADER 1
+
+#define CALENDAR_SI_HEADER 0
+#define CALENDAR_SI_CELL_X 1
+#define CALENDAR_SI_CELL_Y 2
+
+/*********************************************************************
+*
+* Notification codes
+*
+* The following is the list of notification codes specific to this widget,
+* Send with the WM_NOTIFY_PARENT message
+*/
+#define CALENDAR_NOTIFICATION_MONTH_CLICKED (WM_NOTIFICATION_WIDGET + 0)
+#define CALENDAR_NOTIFICATION_MONTH_RELEASED (WM_NOTIFICATION_WIDGET + 1)
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* CALENDAR_DATE
+*/
+typedef struct {
+ int Year;
+ int Month;
+ int Day;
+} CALENDAR_DATE;
+
+/*********************************************************************
+*
+* CALENDAR_SKINFLEX_PROPS
+*/
+typedef struct {
+ GUI_COLOR aColorFrame[3]; // Frame colors of buttons
+ GUI_COLOR aColorUpper[2]; // Upper gradient colors of buttons
+ GUI_COLOR aColorLower[2]; // Lower gradient colors of buttons
+ GUI_COLOR ColorArrow; // Arrow colors
+} CALENDAR_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Public code
+*
+**********************************************************************
+*/
+WM_HWIN CALENDAR_Create (WM_HWIN hParent, int xPos, int yPos, unsigned Year, unsigned Month, unsigned Day, unsigned FirstDayOfWeek, int Id, int Flags);
+void CALENDAR_GetDate (WM_HWIN hWin, CALENDAR_DATE * pDate);
+int CALENDAR_GetDaysOfMonth (CALENDAR_DATE * pDate);
+void CALENDAR_GetSel (WM_HWIN hWin, CALENDAR_DATE * pDate);
+int CALENDAR_GetWeekday (CALENDAR_DATE * pDate);
+void CALENDAR_SetDate (WM_HWIN hWin, CALENDAR_DATE * pDate);
+void CALENDAR_SetSel (WM_HWIN hWin, CALENDAR_DATE * pDate);
+void CALENDAR_ShowDate (WM_HWIN hWin, CALENDAR_DATE * pDate);
+int CALENDAR_AddKey (WM_HWIN hWin, int Key);
+
+/*********************************************************************
+*
+* Default related
+*/
+void CALENDAR_SetDefaultBkColor(unsigned Index, GUI_COLOR Color);
+void CALENDAR_SetDefaultColor (unsigned Index, GUI_COLOR Color);
+void CALENDAR_SetDefaultDays (const char ** apDays);
+void CALENDAR_SetDefaultFont (unsigned Index, const GUI_FONT * pFont);
+void CALENDAR_SetDefaultMonths (const char ** apMonths);
+void CALENDAR_SetDefaultSize (unsigned Index, unsigned Size);
+
+/*********************************************************************
+*
+* Skinning related
+*/
+void CALENDAR_GetSkinFlexProps (CALENDAR_SKINFLEX_PROPS * pProps, int Index);
+void CALENDAR_SetSkinFlexProps (const CALENDAR_SKINFLEX_PROPS * pProps, int Index);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void CALENDAR_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // CALENDAR_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHECKBOX.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,214 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : CHECKBOX.h
+Purpose : CHECKBOX include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHECKBOX_H
+#define CHECKBOX_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define CHECKBOX_CI_DISABLED 0
+#define CHECKBOX_CI_ENABLED 1
+
+/*********************************************************************
+*
+* Bitmap indices
+*/
+#define CHECKBOX_BI_INACTIV_UNCHECKED 0
+#define CHECKBOX_BI_ACTIV_UNCHECKED 1
+#define CHECKBOX_BI_INACTIV_CHECKED 2
+#define CHECKBOX_BI_ACTIV_CHECKED 3
+#define CHECKBOX_BI_INACTIV_3STATE 4
+#define CHECKBOX_BI_ACTIV_3STATE 5
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define CHECKBOX_SKINFLEX_PI_ENABLED 0
+#define CHECKBOX_SKINFLEX_PI_DISABLED 1
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM CHECKBOX_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[3];
+ GUI_COLOR aColorInner[2];
+ GUI_COLOR ColorCheck;
+ int ButtonSize;
+} CHECKBOX_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+CHECKBOX_Handle CHECKBOX_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+CHECKBOX_Handle CHECKBOX_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+CHECKBOX_Handle CHECKBOX_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+CHECKBOX_Handle CHECKBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void CHECKBOX_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+
+int CHECKBOX_GetDefaultAlign (void);
+GUI_COLOR CHECKBOX_GetDefaultBkColor (void);
+const GUI_FONT * CHECKBOX_GetDefaultFont (void);
+int CHECKBOX_GetDefaultSpacing (void);
+int CHECKBOX_GetDefaultTextAlign (void);
+GUI_COLOR CHECKBOX_GetDefaultTextColor (void);
+int CHECKBOX_GetUserData (CHECKBOX_Handle hObj, void * pDest, int NumBytes);
+void CHECKBOX_SetDefaultAlign (int Align);
+void CHECKBOX_SetDefaultBkColor (GUI_COLOR Color);
+GUI_COLOR CHECKBOX_SetDefaultFocusColor(GUI_COLOR Color);
+void CHECKBOX_SetDefaultFont (const GUI_FONT * pFont);
+void CHECKBOX_SetDefaultImage (const GUI_BITMAP * pBitmap, unsigned int Index);
+void CHECKBOX_SetDefaultSpacing (int Spacing);
+void CHECKBOX_SetDefaultTextAlign (int Align);
+void CHECKBOX_SetDefaultTextColor (GUI_COLOR Color);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+GUI_COLOR CHECKBOX_GetBkColor (CHECKBOX_Handle hObj);
+GUI_COLOR CHECKBOX_GetBoxBkColor(CHECKBOX_Handle hObj, int Index);
+GUI_COLOR CHECKBOX_GetFocusColor(CHECKBOX_Handle hObj);
+const GUI_FONT * CHECKBOX_GetFont (CHECKBOX_Handle hObj);
+const GUI_BITMAP * CHECKBOX_GetImage (CHECKBOX_Handle hObj, unsigned int Index);
+int CHECKBOX_GetState (CHECKBOX_Handle hObj);
+int CHECKBOX_GetText (CHECKBOX_Handle hObj, char * pBuffer, int MaxLen);
+int CHECKBOX_GetTextAlign (CHECKBOX_Handle hObj);
+GUI_COLOR CHECKBOX_GetTextColor (CHECKBOX_Handle hObj);
+int CHECKBOX_IsChecked (CHECKBOX_Handle hObj);
+void CHECKBOX_SetBkColor (CHECKBOX_Handle hObj, GUI_COLOR Color);
+GUI_COLOR CHECKBOX_SetBoxBkColor(CHECKBOX_Handle hObj, GUI_COLOR Color, int Index);
+GUI_COLOR CHECKBOX_SetFocusColor(CHECKBOX_Handle hObj, GUI_COLOR Color);
+void CHECKBOX_SetFont (CHECKBOX_Handle hObj, const GUI_FONT * pFont);
+void CHECKBOX_SetImage (CHECKBOX_Handle hObj, const GUI_BITMAP * pBitmap, unsigned int Index);
+void CHECKBOX_SetNumStates (CHECKBOX_Handle hObj, unsigned NumStates);
+void CHECKBOX_SetSpacing (CHECKBOX_Handle hObj, unsigned Spacing);
+void CHECKBOX_SetState (CHECKBOX_Handle hObj, unsigned State);
+void CHECKBOX_SetText (CHECKBOX_Handle hObj, const char * pText);
+void CHECKBOX_SetTextAlign (CHECKBOX_Handle hObj, int Align);
+void CHECKBOX_SetTextColor (CHECKBOX_Handle hObj, GUI_COLOR Color);
+int CHECKBOX_SetUserData (CHECKBOX_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void CHECKBOX_GetSkinFlexProps (CHECKBOX_SKINFLEX_PROPS * pProps, int Index);
+void CHECKBOX_SetSkinClassic (CHECKBOX_Handle hObj);
+void CHECKBOX_SetSkin (CHECKBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int CHECKBOX_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void CHECKBOX_SetSkinFlexProps (const CHECKBOX_SKINFLEX_PROPS * pProps, int Index);
+void CHECKBOX_SetDefaultSkinClassic (void);
+int CHECKBOX_GetSkinFlexButtonSize (CHECKBOX_Handle hObj);
+void CHECKBOX_SetSkinFlexButtonSize (CHECKBOX_Handle hObj, int ButtonSize);
+WIDGET_DRAW_ITEM_FUNC * CHECKBOX_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define CHECKBOX_SKIN_FLEX CHECKBOX_DrawSkinFlex
+
+/*********************************************************************
+*
+* Macros for compatibility
+*
+**********************************************************************
+*/
+
+#define CHECKBOX_Check(hObj) CHECKBOX_SetState(hObj, 1)
+#define CHECKBOX_Uncheck(hObj) CHECKBOX_SetState(hObj, 0)
+
+#define CHECKBOX_BI_INACTIV CHECKBOX_BI_INACTIV_CHECKED
+#define CHECKBOX_BI_ACTIV CHECKBOX_BI_ACTIV_CHECKED
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // CHECKBOX_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHECKBOX_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,163 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : CHECKBOX_Private.h
+Purpose : CHECKBOX private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHECKBOX_PRIVATE_H
+#define CHECKBOX_PRIVATE_H
+
+#include "WM.h"
+#include "WIDGET.h"
+#include "CHECKBOX.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#ifndef CHECKBOX_BKCOLOR0_DEFAULT
+ #define CHECKBOX_BKCOLOR0_DEFAULT 0x808080 /* Inactive color */
+#endif
+
+#ifndef CHECKBOX_BKCOLOR1_DEFAULT
+ #define CHECKBOX_BKCOLOR1_DEFAULT GUI_WHITE /* Active color */
+#endif
+
+#ifndef CHECKBOX_FGCOLOR0_DEFAULT
+ #define CHECKBOX_FGCOLOR0_DEFAULT 0x101010
+#endif
+
+#ifndef CHECKBOX_FGCOLOR1_DEFAULT
+ #define CHECKBOX_FGCOLOR1_DEFAULT GUI_BLACK
+#endif
+
+#ifndef CHECKBOX_DEFAULT_SIZE
+ #define CHECKBOX_DEFAULT_SIZE 15
+#endif
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ unsigned (* pfGetButtonSize)(void);
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} CHECKBOX_SKIN_PRIVATE;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBkColorBox[2]; /* Colors used to draw the box background */
+ GUI_COLOR BkColor; /* Widget background color */
+ GUI_COLOR TextColor;
+ GUI_COLOR FocusColor;
+ CHECKBOX_SKIN_PRIVATE SkinPrivate;
+ I16 Align;
+ U8 Spacing;
+ const GUI_BITMAP * apBm[6];
+} CHECKBOX_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ CHECKBOX_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ U8 NumStates;
+ U8 CurrentState;
+ WM_HMEM hpText;
+ U32 ButtonSize;
+} CHECKBOX_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define CHECKBOX_INIT_ID(p) (p->Widget.DebugId = CHECKBOX_ID)
+#else
+ #define CHECKBOX_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ CHECKBOX_Obj * CHECKBOX_LockH(CHECKBOX_Handle h);
+ #define CHECKBOX_LOCK_H(h) CHECKBOX_LockH(h)
+#else
+ #define CHECKBOX_LOCK_H(h) (CHECKBOX_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+unsigned CHECKBOX__GetButtonSize(void);
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern CHECKBOX_PROPS CHECKBOX__DefaultProps;
+
+extern const WIDGET_SKIN CHECKBOX__SkinClassic;
+extern WIDGET_SKIN CHECKBOX__Skin;
+
+extern WIDGET_SKIN const * CHECKBOX__pSkinDefault;
+
+/*********************************************************************
+*
+* Extern data
+*
+**********************************************************************
+*/
+extern const GUI_BITMAP CHECKBOX__abmCheck[2];
+
+#endif /* GUI_WINSUPPORT */
+#endif /* CHECKBOX_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHOOSECOLOR.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,141 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : CHOOSECOLOR.h
+Purpose : Message box interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHOOSECOLOR_H
+#define CHOOSECOLOR_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define CHOOSECOLOR_CF_MOVEABLE FRAMEWIN_CF_MOVEABLE
+
+#define CHOOSECOLOR_CI_FRAME 0
+#define CHOOSECOLOR_CI_FOCUS 1
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* CHOOSECOLOR_PROPS
+*/
+typedef struct {
+ unsigned aBorder[2];
+ unsigned aSpace[2];
+ unsigned aButtonSize[2];
+ GUI_COLOR aColor[2];
+} CHOOSECOLOR_PROPS;
+
+/*********************************************************************
+*
+* CHOOSECOLOR_CONTEXT
+*/
+typedef struct {
+ U32 LastColor;
+ const GUI_COLOR * pColor;
+ unsigned NumColors;
+ unsigned NumColorsPerLine;
+ int SelOld;
+ int Sel;
+ WM_HWIN hParent;
+ CHOOSECOLOR_PROPS Props;
+} CHOOSECOLOR_CONTEXT;
+
+/*********************************************************************
+*
+* Public code
+*
+**********************************************************************
+*/
+WM_HWIN CHOOSECOLOR_Create(WM_HWIN hParent,
+ int xPos,
+ int yPos,
+ int xSize,
+ int ySize,
+ const GUI_COLOR * pColor,
+ unsigned NumColors,
+ unsigned NumColorsPerLine,
+ int Sel,
+ const char * sCaption,
+ int Flags);
+
+int CHOOSECOLOR_GetSel(WM_HWIN hObj);
+void CHOOSECOLOR_SetSel(WM_HWIN hObj, int Sel);
+
+void CHOOSECOLOR_SetDefaultColor (unsigned Index, GUI_COLOR Color);
+void CHOOSECOLOR_SetDefaultSpace (unsigned Index, unsigned Space);
+void CHOOSECOLOR_SetDefaultBorder (unsigned Index, unsigned Border);
+void CHOOSECOLOR_SetDefaultButtonSize(unsigned Index, unsigned ButtonSize);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void CHOOSECOLOR_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* CHOOSECOLOR_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/CHOOSEFILE.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,136 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : CHOOSEFILE.h
+Purpose : File dialog interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef CHOOSEFILE_H
+#define CHOOSEFILE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define CHOOSEFILE_FINDFIRST 0
+#define CHOOSEFILE_FINDNEXT 1
+
+#define CHOOSEFILE_FLAG_DIRECTORY (1 << 0)
+
+#ifndef CHOOSEFILE_MAXLEN
+ #define CHOOSEFILE_MAXLEN 256
+#endif
+
+#define CHOOSEFILE_BI_CANCEL 0
+#define CHOOSEFILE_BI_OK 1
+#define CHOOSEFILE_BI_UP 2
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* CHOOSEFILE_INFO
+*/
+typedef struct CHOOSEFILE_INFO CHOOSEFILE_INFO;
+
+struct CHOOSEFILE_INFO {
+ int Cmd; // Command for GetData() function
+ int Id; // Id of pressed button (for internal use only)
+ const char * pMask; // Mask to be used for searching files
+ char * pName; // (for internal use only)
+ char * pExt; // (for internal use only)
+ char * pAttrib; // (for internal use only)
+ WM_TOOLTIP_HANDLE hToolTip; // (for internal use only)
+ U32 SizeL; // FileSize low word
+ U32 SizeH; // FileSize high word
+ U32 Flags; // File flags
+ char pRoot[CHOOSEFILE_MAXLEN]; // Buffer used internally and for passing result
+ int (* pfGetData)(CHOOSEFILE_INFO * pInfo); // Pointer to GetData() function
+};
+
+/*********************************************************************
+*
+* Functions
+*
+**********************************************************************
+*/
+WM_HWIN CHOOSEFILE_Create(WM_HWIN hParent, // Parent window
+ int xPos, // xPosition in window coordinates
+ int yPos, // yPosition in window coordinates
+ int xSize, // xSize in pixels
+ int ySize, // ySize in pixels
+ const char * apRoot[], // Pointers to root strings
+ int NumRoot, // Number of roots
+ int SelRoot, // Root to be selected at first
+ const char * sCaption, // Shown in title bar
+ int Flags, // Flags for FRAMEWINDOW
+ CHOOSEFILE_INFO * pInfo // Pointer to CHOOSEFILE_INFO structure
+ );
+
+void CHOOSEFILE_Callback (WM_MESSAGE * pMsg);
+void CHOOSEFILE_EnableToolTips (void);
+void CHOOSEFILE_SetButtonText (WM_HWIN hWin, unsigned ButtonIndex, const char * pText);
+void CHOOSEFILE_SetDefaultButtonText(unsigned ButtonIndex, const char * pText);
+void CHOOSEFILE_SetDelim (char Delim);
+void CHOOSEFILE_SetToolTips (const TOOLTIP_INFO * pInfo, int NumItems);
+void CHOOSEFILE_SetTopMode (unsigned OnOff);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* CHOOSEFILE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DIALOG.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,105 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : Dialog.h
+Purpose : Dialog box include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include "WM.h"
+
+#include "BUTTON.h"
+#include "CALENDAR.h"
+#include "CHECKBOX.h"
+#include "CHOOSECOLOR.h"
+#include "CHOOSEFILE.h"
+#include "DROPDOWN.h"
+#include "EDIT.h"
+#include "FRAMEWIN.h"
+#include "GRAPH.h"
+#include "HEADER.h"
+#include "ICONVIEW.h"
+#include "IMAGE.h"
+#include "KNOB.h"
+#include "LISTBOX.h"
+#include "LISTVIEW.h"
+#include "LISTWHEEL.h"
+#include "MENU.h"
+#include "MULTIEDIT.h"
+#include "MULTIPAGE.h"
+#include "PROGBAR.h"
+#include "RADIO.h"
+#include "SCROLLBAR.h"
+#include "SLIDER.h"
+#include "SPINBOX.h"
+#include "SWIPELIST.h"
+#include "TEXT.h"
+#include "TREEVIEW.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* WINDOW API
+*/
+WM_HWIN WINDOW_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, WM_CALLBACK * cb);
+WM_HWIN WINDOW_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, WM_CALLBACK * cb, int NumExtraBytes);
+WM_HWIN WINDOW_CreateIndirect (const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+GUI_COLOR WINDOW_GetDefaultBkColor(void);
+int WINDOW_GetUserData (WM_HWIN hObj, void * pDest, int NumBytes);
+void WINDOW_SetBkColor (WM_HWIN hObj, GUI_COLOR Color);
+void WINDOW_SetDefaultBkColor(GUI_COLOR Color);
+int WINDOW_SetUserData (WM_HWIN hObj, const void * pSrc, int NumBytes);
+
+void WINDOW_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // DIALOG_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DIALOG_Intern.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,110 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : Dialog.h
+Purpose : Dialog box include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DIALOG_INTERN_H
+#define DIALOG_INTERN_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef struct GUI_WIDGET_CREATE_INFO_struct GUI_WIDGET_CREATE_INFO;
+typedef WM_HWIN GUI_WIDGET_CREATE_FUNC (const GUI_WIDGET_CREATE_INFO * pCreate, WM_HWIN hWin, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* Structures
+*
+**********************************************************************
+*/
+struct GUI_WIDGET_CREATE_INFO_struct {
+ GUI_WIDGET_CREATE_FUNC * pfCreateIndirect;
+ const char * pName; // Text ... Not used on all widgets
+ I16 Id; // ID ... should be unique in a dialog
+ I16 x0; // x position
+ I16 y0; // y position
+ I16 xSize; // x size
+ I16 ySize; // y size
+ U16 Flags; // Widget specific create flags (opt.)
+ I32 Para; // Widget specific parameter (opt.)
+ U32 NumExtraBytes; // Number of extra bytes usable with <WIDGET>_SetUserData & <WIDGET>_GetUserData
+};
+
+/*********************************************************************
+*
+* Public API functions
+*
+**********************************************************************
+*/
+WM_HWIN GUI_CreateDialogBox (const GUI_WIDGET_CREATE_INFO * paWidget, int NumWidgets, WM_CALLBACK * cb, WM_HWIN hParent, int x0, int y0);
+void GUI_EndDialog (WM_HWIN hWin, int r);
+int GUI_ExecDialogBox (const GUI_WIDGET_CREATE_INFO * paWidget, int NumWidgets, WM_CALLBACK * cb, WM_HWIN hParent, int x0, int y0);
+int GUI_ExecCreatedDialog (WM_HWIN hDialog);
+WM_DIALOG_STATUS * GUI_GetDialogStatusPtr(WM_HWIN hDialog); // Not to be documented
+void GUI_SetDialogStatusPtr(WM_HWIN hDialog, WM_DIALOG_STATUS * pDialogStatus); // Not to be documented
+
+/*********************************************************************
+*
+* Obsolete
+*/
+LCD_COLOR DIALOG_GetBkColor(void);
+LCD_COLOR DIALOG_SetBkColor(LCD_COLOR BkColor);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // DIALOG_INTERN_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DROPDOWN.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,205 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : DROPDOWN.h
+Purpose : Multiple choice object include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DROPDOWN_H
+#define DROPDOWN_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "LISTBOX.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/************************************************************
+*
+* Create flags
+*/
+#define DROPDOWN_CF_AUTOSCROLLBAR (1 << 0)
+#define DROPDOWN_CF_UP (1 << 1)
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define DROPDOWN_CI_UNSEL 0
+#define DROPDOWN_CI_SEL 1
+#define DROPDOWN_CI_SELFOCUS 2
+
+#define DROPDOWN_CI_ARROW 0
+#define DROPDOWN_CI_BUTTON 1
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define DROPDOWN_SKINFLEX_PI_EXPANDED 0
+#define DROPDOWN_SKINFLEX_PI_FOCUSED 1
+#define DROPDOWN_SKINFLEX_PI_ENABLED 2
+#define DROPDOWN_SKINFLEX_PI_DISABLED 3
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM DROPDOWN_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[3];
+ GUI_COLOR aColorUpper[2];
+ GUI_COLOR aColorLower[2];
+ GUI_COLOR ColorArrow;
+ GUI_COLOR ColorText;
+ GUI_COLOR ColorSep;
+ int Radius;
+} DROPDOWN_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+DROPDOWN_Handle DROPDOWN_Create (WM_HWIN hWinParent, int x0, int y0, int xSize, int ySize, int Flags);
+DROPDOWN_Handle DROPDOWN_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+DROPDOWN_Handle DROPDOWN_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+DROPDOWN_Handle DROPDOWN_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void DROPDOWN_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void DROPDOWN_AddKey (DROPDOWN_Handle hObj, int Key);
+void DROPDOWN_AddString (DROPDOWN_Handle hObj, const char* s);
+void DROPDOWN_Collapse (DROPDOWN_Handle hObj);
+void DROPDOWN_DecSel (DROPDOWN_Handle hObj);
+void DROPDOWN_DecSelExp (DROPDOWN_Handle hObj);
+void DROPDOWN_DeleteItem (DROPDOWN_Handle hObj, unsigned int Index);
+void DROPDOWN_Expand (DROPDOWN_Handle hObj);
+GUI_COLOR DROPDOWN_GetBkColor (DROPDOWN_Handle hObj, unsigned int Index);
+GUI_COLOR DROPDOWN_GetColor (DROPDOWN_Handle hObj, unsigned int Index);
+const GUI_FONT * DROPDOWN_GetFont (DROPDOWN_Handle hObj);
+unsigned DROPDOWN_GetItemDisabled (DROPDOWN_Handle hObj, unsigned Index);
+unsigned DROPDOWN_GetItemSpacing (DROPDOWN_Handle hObj);
+int DROPDOWN_GetItemText (DROPDOWN_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+LISTBOX_Handle DROPDOWN_GetListbox (DROPDOWN_Handle hObj);
+int DROPDOWN_GetNumItems (DROPDOWN_Handle hObj);
+int DROPDOWN_GetSel (DROPDOWN_Handle hObj);
+int DROPDOWN_GetSelExp (DROPDOWN_Handle hObj);
+GUI_COLOR DROPDOWN_GetTextColor (DROPDOWN_Handle hObj, unsigned int Index);
+int DROPDOWN_GetUserData (DROPDOWN_Handle hObj, void * pDest, int NumBytes);
+void DROPDOWN_IncSel (DROPDOWN_Handle hObj);
+void DROPDOWN_IncSelExp (DROPDOWN_Handle hObj);
+void DROPDOWN_InsertString (DROPDOWN_Handle hObj, const char* s, unsigned int Index);
+void DROPDOWN_SetAutoScroll (DROPDOWN_Handle hObj, int OnOff);
+void DROPDOWN_SetBkColor (DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR color);
+void DROPDOWN_SetColor (DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void DROPDOWN_SetFont (DROPDOWN_Handle hObj, const GUI_FONT * pfont);
+void DROPDOWN_SetItemDisabled (DROPDOWN_Handle hObj, unsigned Index, int OnOff);
+void DROPDOWN_SetItemSpacing (DROPDOWN_Handle hObj, unsigned Value);
+int DROPDOWN_SetListHeight (DROPDOWN_Handle hObj, unsigned Height);
+void DROPDOWN_SetScrollbarColor(DROPDOWN_Handle hObj, unsigned Index, GUI_COLOR Color);
+void DROPDOWN_SetScrollbarWidth(DROPDOWN_Handle hObj, unsigned Width);
+void DROPDOWN_SetSel (DROPDOWN_Handle hObj, int Sel);
+void DROPDOWN_SetSelExp (DROPDOWN_Handle hObj, int Sel);
+void DROPDOWN_SetTextAlign (DROPDOWN_Handle hObj, int Align);
+void DROPDOWN_SetTextColor (DROPDOWN_Handle hObj, unsigned int index, GUI_COLOR color);
+void DROPDOWN_SetTextHeight (DROPDOWN_Handle hObj, unsigned TextHeight);
+int DROPDOWN_SetUpMode (DROPDOWN_Handle hObj, int OnOff);
+int DROPDOWN_SetUserData (DROPDOWN_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void DROPDOWN_GetSkinFlexProps (DROPDOWN_SKINFLEX_PROPS * pProps, int Index);
+void DROPDOWN_SetSkinClassic (DROPDOWN_Handle hObj);
+void DROPDOWN_SetSkin (DROPDOWN_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int DROPDOWN_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void DROPDOWN_SetSkinFlexProps (const DROPDOWN_SKINFLEX_PROPS * pProps, int Index);
+void DROPDOWN_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * DROPDOWN_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define DROPDOWN_SKIN_FLEX DROPDOWN_DrawSkinFlex
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR DROPDOWN_GetDefaultBkColor (int Index);
+GUI_COLOR DROPDOWN_GetDefaultColor (int Index);
+const GUI_FONT * DROPDOWN_GetDefaultFont (void);
+GUI_COLOR DROPDOWN_GetDefaultScrollbarColor(int Index);
+void DROPDOWN_SetDefaultFont (const GUI_FONT * pFont);
+GUI_COLOR DROPDOWN_SetDefaultBkColor (int Index, GUI_COLOR Color);
+GUI_COLOR DROPDOWN_SetDefaultColor (int Index, GUI_COLOR Color);
+GUI_COLOR DROPDOWN_SetDefaultScrollbarColor(int Index, GUI_COLOR Color);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // DROPDOWN_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/DROPDOWN_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,146 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : DROPDOWN_Private.h
+Purpose : DROPDOWN private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef DROPDOWN_PRIVATE_H
+#define DROPDOWN_PRIVATE_H
+
+#include "DROPDOWN.h"
+#include "WIDGET.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define DROPDOWN_SF_AUTOSCROLLBAR DROPDOWN_CF_AUTOSCROLLBAR
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} DROPDOWN_SKIN_PRIVATE;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBackColor[3];
+ GUI_COLOR aTextColor[3];
+ GUI_COLOR aColor[2];
+ GUI_COLOR aScrollbarColor[3];
+ DROPDOWN_SKIN_PRIVATE SkinPrivate;
+ I16 TextBorderSize;
+ I16 Align;
+} DROPDOWN_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ I16 Sel; // Current selection
+ I16 ySizeLB; // ySize of assigned LISTBOX in expanded state
+ I16 TextHeight;
+ GUI_ARRAY Handles;
+ WM_SCROLL_STATE ScrollState;
+ DROPDOWN_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ WM_HWIN hListWin;
+ U8 Flags;
+ U16 ItemSpacing;
+ U8 ScrollbarWidth;
+ char IsPressed;
+ WM_HMEM hDisabled;
+} DROPDOWN_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define DROPDOWN_INIT_ID(p) (p->Widget.DebugId = DROPDOWN_ID)
+#else
+ #define DROPDOWN_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ DROPDOWN_Obj * DROPDOWN_LockH(DROPDOWN_Handle h);
+ #define DROPDOWN_LOCK_H(h) DROPDOWN_LockH(h)
+#else
+ #define DROPDOWN_LOCK_H(h) (DROPDOWN_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private (module internal) data
+*
+**********************************************************************
+*/
+
+extern DROPDOWN_PROPS DROPDOWN__DefaultProps;
+
+extern const WIDGET_SKIN DROPDOWN__SkinClassic;
+extern WIDGET_SKIN DROPDOWN__Skin;
+
+extern WIDGET_SKIN const * DROPDOWN__pSkinDefault;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+
+void DROPDOWN__AdjustHeight(DROPDOWN_Handle hObj);
+int DROPDOWN__GetNumItems (DROPDOWN_Obj * pObj);
+const char * DROPDOWN__GetpItemLocked(DROPDOWN_Handle hObj, int Index);
+
+#endif // GUI_WINSUPPORT
+#endif // DROPDOWN_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/EDIT.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,230 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : EDIT.h
+Purpose : EDIT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef EDIT_H
+#define EDIT_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Required for Create indirect data structure
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Defaults for configuration switches
+*
+* The following are defaults for config switches which affect the
+* interface specified in this module
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+//
+// Create / Status flags
+//
+#define EDIT_CF_LEFT GUI_TA_LEFT
+#define EDIT_CF_RIGHT GUI_TA_RIGHT
+#define EDIT_CF_HCENTER GUI_TA_HCENTER
+#define EDIT_CF_VCENTER GUI_TA_VCENTER
+#define EDIT_CF_TOP GUI_TA_TOP
+#define EDIT_CF_BOTTOM GUI_TA_BOTTOM
+
+//
+// Color indices
+//
+#define EDIT_CI_DISABLED 0
+#define EDIT_CI_ENABLED 1
+#define EDIT_CI_CURSOR 2
+
+//
+// Signed or normal mode
+//
+#define GUI_EDIT_NORMAL (0 << 0)
+#define GUI_EDIT_SIGNED (1 << 0)
+#define GUI_EDIT_SUPPRESS_LEADING_ZEROES (1 << 1)
+
+//
+// Cursor coloring
+//
+#define GUI_EDIT_SHOWCURSOR (1 << 2)
+#define GUI_EDIT_CUSTCOLORMODE (1 << 3)
+#define GUI_EDIT_CURSORBLINK (1 << 4)
+
+//
+// Edit modes
+//
+#define GUI_EDIT_MODE_INSERT 0
+#define GUI_EDIT_MODE_OVERWRITE 1
+
+//
+// Compatibility macros
+//
+#define EDIT_CI_DISABELD EDIT_CI_DISABLED
+#define EDIT_CI_ENABELD EDIT_CI_ENABLED
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM EDIT_Handle;
+typedef void tEDIT_AddKeyEx (EDIT_Handle hObj, int Key);
+typedef void tEDIT_UpdateBuffer(EDIT_Handle hObj);
+
+/*********************************************************************
+*
+* Create functions
+*/
+EDIT_Handle EDIT_Create (int x0, int y0, int xSize, int ySize, int Id, int MaxLen, int Flags);
+EDIT_Handle EDIT_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int MaxLen);
+EDIT_Handle EDIT_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int MaxLen);
+EDIT_Handle EDIT_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int MaxLen, int NumExtraBytes);
+EDIT_Handle EDIT_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void EDIT_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+void EDIT_SetDefaultBkColor (unsigned int Index, GUI_COLOR Color);
+void EDIT_SetDefaultFont (const GUI_FONT * pFont);
+void EDIT_SetDefaultTextAlign(int Align);
+void EDIT_SetDefaultTextColor(unsigned int Index, GUI_COLOR Color);
+
+/*********************************************************************
+*
+* Individual member functions
+*/
+//
+// Query preferences
+//
+GUI_COLOR EDIT_GetDefaultBkColor(unsigned int Index);
+const GUI_FONT * EDIT_GetDefaultFont(void);
+int EDIT_GetDefaultTextAlign(void);
+GUI_COLOR EDIT_GetDefaultTextColor(unsigned int Index);
+//
+// Methods changing properties
+//
+void EDIT_AddKey (EDIT_Handle hObj, int Key);
+void EDIT_EnableBlink (EDIT_Handle hObj, int Period, int OnOff);
+GUI_COLOR EDIT_GetBkColor (EDIT_Handle hObj, unsigned int Index);
+void EDIT_SetBkColor (EDIT_Handle hObj, unsigned int Index, GUI_COLOR color);
+void EDIT_SetCursorAtChar (EDIT_Handle hObj, int Pos);
+void EDIT_SetCursorAtPixel (EDIT_Handle hObj, int xPos);
+void EDIT_SetFont (EDIT_Handle hObj, const GUI_FONT * pFont);
+int EDIT_SetInsertMode (EDIT_Handle hObj, int OnOff);
+void EDIT_SetMaxLen (EDIT_Handle hObj, int MaxLen);
+void EDIT_SetpfAddKeyEx (EDIT_Handle hObj, tEDIT_AddKeyEx * pfAddKeyEx);
+void EDIT_SetpfUpdateBuffer(EDIT_Handle hObj, tEDIT_UpdateBuffer * pfUpdateBuffer);
+void EDIT_SetText (EDIT_Handle hObj, const char * s);
+void EDIT_SetTextAlign (EDIT_Handle hObj, int Align);
+GUI_COLOR EDIT_GetTextColor(EDIT_Handle hObj, unsigned int Index);
+void EDIT_SetTextColor (EDIT_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void EDIT_SetSel (EDIT_Handle hObj, int FirstChar, int LastChar);
+int EDIT_SetUserData (EDIT_Handle hObj, const void * pSrc, int NumBytes);
+int EDIT_EnableInversion (EDIT_Handle hObj, int OnOff);
+//
+// Get/Set user input
+//
+int EDIT_GetCursorCharPos (EDIT_Handle hObj);
+void EDIT_GetCursorPixelPos (EDIT_Handle hObj, int * pxPos, int * pyPos);
+float EDIT_GetFloatValue (EDIT_Handle hObj);
+const GUI_FONT * EDIT_GetFont(EDIT_Handle hObj);
+int EDIT_GetNumChars (EDIT_Handle hObj);
+void EDIT_GetText (EDIT_Handle hObj, char * sDest, int MaxLen);
+int EDIT_GetTextAlign (EDIT_Handle hObj);
+I32 EDIT_GetValue (EDIT_Handle hObj);
+void EDIT_SetFloatValue (EDIT_Handle hObj, float Value);
+int EDIT_GetUserData (EDIT_Handle hObj, void * pDest, int NumBytes);
+void EDIT_SetValue (EDIT_Handle hObj, I32 Value);
+
+#define EDIT_SetFocussable EDIT_SetFocusable
+#define EDIT_SetFocusable WIDGET_SetFocusable
+
+/*********************************************************************
+*
+* Routines for editing values
+*
+**********************************************************************
+*/
+void EDIT_SetHexMode (EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
+void EDIT_SetBinMode (EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
+void EDIT_SetDecMode (EDIT_Handle hEdit, I32 Value, I32 Min, I32 Max, int Shift, U8 Flags);
+void EDIT_SetFloatMode(EDIT_Handle hEdit, float Value, float Min, float Max, int Shift, U8 Flags);
+void EDIT_SetTextMode (EDIT_Handle hEdit);
+void EDIT_SetUlongMode(EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max);
+
+U32 GUI_EditHex (U32 Value, U32 Min, U32 Max, int Len, int xSize);
+U32 GUI_EditBin (U32 Value, U32 Min, U32 Max, int Len, int xSize);
+I32 GUI_EditDec (I32 Value, I32 Min, I32 Max, int Len, int xSize, int Shift, U8 Flags);
+float GUI_EditFloat (float Value, float Min, float Max, int Len, int xSize, int Shift, U8 Flags);
+void GUI_EditString (char * pString, int Len, int xSize);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // EDIT_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/EDIT_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,143 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : EDIT_Private.h
+Purpose : Internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef EDIT_PRIVATE_H
+#define EDIT_PRIVATE_H
+
+#include "EDIT.h"
+
+#if GUI_WINSUPPORT
+
+#include "WIDGET.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define EDIT_REALLOC_SIZE 16
+
+#ifndef EDIT_XOFF
+ #define EDIT_XOFF 1
+#endif
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef struct EDIT_Obj_struct EDIT_Obj;
+
+typedef struct {
+ int Align;
+ int Border;
+ const GUI_FONT * pFont;
+ GUI_COLOR aTextColor[3];
+ GUI_COLOR aBkColor[3];
+} EDIT_PROPS;
+
+struct EDIT_Obj_struct {
+ WIDGET Widget;
+ WM_HMEM hpText;
+ I16 MaxLen;
+ U16 BufferSize;
+ I32 Min, Max; // Min max values as normalized floats (integers)
+ U8 NumDecs; // Number of decimals
+ I32 CurrentValue; // Current value
+ int CursorPos; // Cursor position. 0 means left most
+ unsigned SelSize; // Number of selected characters
+ U8 EditMode; // Insert or overwrite mode
+ U8 XSizeCursor; // Size of cursor when working in insert mode
+ U8 Flags;
+ tEDIT_AddKeyEx * pfAddKeyEx; // Handle key input
+ tEDIT_UpdateBuffer * pfUpdateBuffer; // Update textbuffer
+ EDIT_PROPS Props;
+ WM_HTIMER hTimer;
+ U8 MinMaxMode;
+ int TimerPeriod;
+};
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define EDIT_INIT_ID(p) (p->Widget.DebugId = EDIT_ID)
+#else
+ #define EDIT_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ EDIT_Obj * EDIT_LockH(EDIT_Handle h);
+ #define EDIT_LOCK_H(h) EDIT_LockH(h)
+#else
+ #define EDIT_LOCK_H(h) (EDIT_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern EDIT_PROPS EDIT__DefaultProps;
+
+/*********************************************************************
+*
+* Public functions (internal)
+*
+**********************************************************************
+*/
+U16 EDIT__GetCurrentChar (EDIT_Obj * pObj);
+void EDIT__SetCursorPos (EDIT_Handle hObj, int CursorPos);
+void EDIT__SetValueUnsigned(EDIT_Handle hObj, I32 Value);
+
+#endif // GUI_WINSUPPORT
+
+#endif // EDIT_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/FRAMEWIN.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,264 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : FRAMEWIN.h
+Purpose : Frame window include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef FRAMEWIN_H
+#define FRAMEWIN_H
+
+#include "WM.h"
+#include "WIDGET.h" /* Req. for WIDGET_DRAW_ITEM_FUNC */
+#if GUI_WINSUPPORT
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Configuration
+*/
+#ifndef FRAMEWIN_ALLOW_DRAG_ON_FRAME
+ #define FRAMEWIN_ALLOW_DRAG_ON_FRAME 1
+#endif
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define FRAMEWIN_CI_INACTIVE 0
+#define FRAMEWIN_CI_ACTIVE 1
+
+/*********************************************************************
+*
+* Create / Status flags
+*/
+#define FRAMEWIN_CF_ACTIVE (1<<3)
+#define FRAMEWIN_CF_MOVEABLE (1<<4)
+#define FRAMEWIN_CF_TITLEVIS (1<<5)
+#define FRAMEWIN_CF_MINIMIZED (1<<6)
+#define FRAMEWIN_CF_MAXIMIZED (1<<7)
+#define FRAMEWIN_CF_DRAGGING (1<<8)
+
+#define FRAMEWIN_SF_ACTIVE FRAMEWIN_CF_ACTIVE
+#define FRAMEWIN_SF_MOVEABLE FRAMEWIN_CF_MOVEABLE
+#define FRAMEWIN_SF_TITLEVIS FRAMEWIN_CF_TITLEVIS
+#define FRAMEWIN_SF_MINIMIZED FRAMEWIN_CF_MINIMIZED
+#define FRAMEWIN_SF_MAXIMIZED FRAMEWIN_CF_MAXIMIZED
+#define FRAMEWIN_SF_DRAGGING FRAMEWIN_CF_DRAGGING
+
+/*********************************************************************
+*
+* BUTTON Flags
+*/
+#define FRAMEWIN_BUTTON_RIGHT (1<<0)
+#define FRAMEWIN_BUTTON_LEFT (1<<1)
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define FRAMEWIN_SKINFLEX_PI_ACTIVE 0
+#define FRAMEWIN_SKINFLEX_PI_INACTIVE 1
+
+/*********************************************************************
+*
+* Getting border size
+*/
+#define FRAMEWIN_BORDERSIZE_T 0
+#define FRAMEWIN_BORDERSIZE_L 1
+#define FRAMEWIN_BORDERSIZE_B 2
+#define FRAMEWIN_BORDERSIZE_R 3
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM FRAMEWIN_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[3];
+ GUI_COLOR aColorTitle[2];
+ int Radius;
+ int SpaceX;
+ int BorderSizeL;
+ int BorderSizeR;
+ int BorderSizeT;
+ int BorderSizeB;
+} FRAMEWIN_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+FRAMEWIN_Handle FRAMEWIN_Create (const char * pTitle, WM_CALLBACK * cb, int Flags, int x0, int y0, int xSize, int ySize);
+FRAMEWIN_Handle FRAMEWIN_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, const char * pText, WM_CALLBACK * cb, int Flags);
+FRAMEWIN_Handle FRAMEWIN_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pTitle, WM_CALLBACK * cb);
+FRAMEWIN_Handle FRAMEWIN_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pTitle, WM_CALLBACK * cb, int NumExtraBytes);
+FRAMEWIN_Handle FRAMEWIN_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void FRAMEWIN_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions: Set Properties
+*
+**********************************************************************
+*/
+WM_HWIN FRAMEWIN_AddButton (FRAMEWIN_Handle hObj, int Flags, int Off, int Id);
+WM_HWIN FRAMEWIN_AddCloseButton(FRAMEWIN_Handle hObj, int Flags, int Off);
+WM_HWIN FRAMEWIN_AddMaxButton (FRAMEWIN_Handle hObj, int Flags, int Off);
+void FRAMEWIN_AddMenu (FRAMEWIN_Handle hObj, WM_HWIN hMenu);
+WM_HWIN FRAMEWIN_AddMinButton (FRAMEWIN_Handle hObj, int Flags, int Off);
+void FRAMEWIN_Minimize (FRAMEWIN_Handle hObj);
+void FRAMEWIN_Maximize (FRAMEWIN_Handle hObj);
+void FRAMEWIN_Restore (FRAMEWIN_Handle hObj);
+void FRAMEWIN_SetActive (FRAMEWIN_Handle hObj, int State);
+void FRAMEWIN_SetBarColor (FRAMEWIN_Handle hObj, unsigned Index, GUI_COLOR Color);
+void FRAMEWIN_SetBorderSize (FRAMEWIN_Handle hObj, unsigned Size);
+void FRAMEWIN_SetClientColor(FRAMEWIN_Handle hObj, GUI_COLOR Color);
+void FRAMEWIN_SetFont (FRAMEWIN_Handle hObj, const GUI_FONT * pFont);
+void FRAMEWIN_SetMoveable (FRAMEWIN_Handle hObj, int State);
+void FRAMEWIN_SetOwnerDraw (FRAMEWIN_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void FRAMEWIN_SetResizeable (FRAMEWIN_Handle hObj, int State);
+void FRAMEWIN_SetText (FRAMEWIN_Handle hObj, const char* s);
+void FRAMEWIN_SetTextAlign (FRAMEWIN_Handle hObj, int Align);
+void FRAMEWIN_SetTextColor (FRAMEWIN_Handle hObj, GUI_COLOR Color);
+void FRAMEWIN_SetTextColorEx(FRAMEWIN_Handle hObj, unsigned Index, GUI_COLOR Color);
+void FRAMEWIN_SetTitleVis (FRAMEWIN_Handle hObj, int Show);
+int FRAMEWIN_SetTitleHeight(FRAMEWIN_Handle hObj, int Height);
+int FRAMEWIN_SetUserData (FRAMEWIN_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void FRAMEWIN_GetSkinFlexProps (FRAMEWIN_SKINFLEX_PROPS * pProps, int Index);
+void FRAMEWIN_SetSkinClassic (FRAMEWIN_Handle hObj);
+void FRAMEWIN_SetSkin (FRAMEWIN_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int FRAMEWIN_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void FRAMEWIN_SetSkinFlexProps (const FRAMEWIN_SKINFLEX_PROPS * pProps, int Index);
+void FRAMEWIN_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * FRAMEWIN_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define FRAMEWIN_SKIN_FLEX FRAMEWIN_DrawSkinFlex
+
+/*********************************************************************
+*
+* Member functions: Get Properties
+*
+**********************************************************************
+*/
+const GUI_FONT * FRAMEWIN_GetFont(FRAMEWIN_Handle hObj);
+
+int FRAMEWIN_GetActive (FRAMEWIN_Handle hObj);
+int FRAMEWIN_GetTitleHeight (FRAMEWIN_Handle hObj);
+GUI_COLOR FRAMEWIN_GetBarColor (FRAMEWIN_Handle hObj, unsigned Index);
+int FRAMEWIN_GetBorderSize (FRAMEWIN_Handle hObj);
+int FRAMEWIN_GetBorderSizeEx(FRAMEWIN_Handle hObj, unsigned Edge);
+void FRAMEWIN_GetText (FRAMEWIN_Handle hObj, char * pBuffer, int MaxLen);
+int FRAMEWIN_GetTextAlign (FRAMEWIN_Handle hObj);
+int FRAMEWIN_GetUserData (FRAMEWIN_Handle hObj, void * pDest, int NumBytes);
+int FRAMEWIN_IsMinimized (FRAMEWIN_Handle hObj);
+int FRAMEWIN_IsMaximized (FRAMEWIN_Handle hObj);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR FRAMEWIN_GetDefaultBarColor (unsigned Index);
+int FRAMEWIN_GetDefaultBorderSize (void);
+int FRAMEWIN_GetDefaultTitleHeight(void);
+GUI_COLOR FRAMEWIN_GetDefaultClientColor(void);
+const GUI_FONT * FRAMEWIN_GetDefaultFont (void);
+GUI_COLOR FRAMEWIN_GetDefaultTextColor (unsigned Index);
+int FRAMEWIN_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void FRAMEWIN_SetDefaultBarColor (unsigned Index, GUI_COLOR Color);
+void FRAMEWIN_SetDefaultBorderSize (int DefaultBorderSize);
+void FRAMEWIN_SetDefaultTitleHeight(int DefaultTitleHeight);
+void FRAMEWIN_SetDefaultClientColor(GUI_COLOR Color);
+void FRAMEWIN_SetDefaultFont (const GUI_FONT * pFont);
+int FRAMEWIN_SetDefaultTextAlign (int TextAlign);
+void FRAMEWIN_SetDefaultTextColor (unsigned Index, GUI_COLOR Color);
+
+/*********************************************************************
+*
+* Macros for compatibility
+*
+**********************************************************************
+*/
+#define FRAMEWIN_SetDefaultCaptionSize(Height) FRAMEWIN_SetDefaultTitleHeight(Height)
+#define FRAMEWIN_GetDefaultCaptionSize() FRAMEWIN_GetDefaultTitleHeight()
+#define FRAMEWIN_CreateButton(hObj, Flags, Off, Id) FRAMEWIN_AddButton(hObj, Flags, Off, Id)
+#define FRAMEWIN_CreateCloseButton(hObj, Flags, Off) FRAMEWIN_AddCloseButton(hObj, Flags, Off)
+#define FRAMEWIN_CreateMaxButton(hObj, Flags, Off) FRAMEWIN_AddMaxButton(hObj, Flags, Off)
+#define FRAMEWIN_CreateMinButton(hObj, Flags, Off) FRAMEWIN_AddMinButton(hObj, Flags, Off)
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // FRAMEWIN_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/FRAMEWIN_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,259 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : FRAMEWIN_Private.h
+Purpose : FRAMEWIN private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef FRAMEWIN_PRIVATE_H
+#define FRAMEWIN_PRIVATE_H
+
+#include "WM.h"
+#include "FRAMEWIN.h"
+#include "WIDGET.h"
+#include "GUI_HOOK.h"
+
+#if GUI_WINSUPPORT
+
+/******************************************************************
+*
+* Config defaults
+*
+*******************************************************************
+*/
+//
+//Support for 3D effects
+//
+#ifndef FRAMEWIN_CLIENTCOLOR_DEFAULT
+ #if WIDGET_USE_FLEX_SKIN
+ #define FRAMEWIN_CLIENTCOLOR_DEFAULT GUI_WHITE
+ #else
+ #define FRAMEWIN_CLIENTCOLOR_DEFAULT GUI_GRAY_C0
+ #endif
+#endif
+
+//
+// Default for top frame size
+//
+#ifndef FRAMEWIN_TITLEHEIGHT_DEFAULT
+ #define FRAMEWIN_TITLEHEIGHT_DEFAULT 0
+#endif
+
+//
+// Default for left/right/top/bottom frame size
+//
+#ifndef FRAMEWIN_BORDER_DEFAULT
+ #define FRAMEWIN_BORDER_DEFAULT 3
+#endif
+
+//
+// Default for inner frame size
+//
+#ifndef FRAMEWIN_IBORDER_DEFAULT
+ #define FRAMEWIN_IBORDER_DEFAULT 1
+#endif
+
+//
+// Default font
+//
+#ifndef FRAMEWIN_DEFAULT_FONT
+ #if WIDGET_USE_FLEX_SKIN
+ #if WIDGET_USE_SCHEME_SMALL
+ #define FRAMEWIN_DEFAULT_FONT &GUI_Font13_1
+ #elif WIDGET_USE_SCHEME_MEDIUM
+ #define FRAMEWIN_DEFAULT_FONT &GUI_Font16_1
+ #elif WIDGET_USE_SCHEME_LARGE
+ #define FRAMEWIN_DEFAULT_FONT &GUI_Font24_1
+ #endif
+ #else
+ #if WIDGET_USE_SCHEME_SMALL
+ #define FRAMEWIN_DEFAULT_FONT &GUI_Font8_1
+ #elif WIDGET_USE_SCHEME_MEDIUM
+ #define FRAMEWIN_DEFAULT_FONT &GUI_Font13_1
+ #elif WIDGET_USE_SCHEME_LARGE
+ #define FRAMEWIN_DEFAULT_FONT &GUI_Font16_1
+ #endif
+ #endif
+#endif
+
+//
+// Default bar color when framewin is active
+//
+#ifndef FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT
+ #define FRAMEWIN_BARCOLOR_ACTIVE_DEFAULT GUI_BLUE
+#endif
+
+//
+// Default bar color when framewin is inactive
+//
+#ifndef FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT
+ #define FRAMEWIN_BARCOLOR_INACTIVE_DEFAULT GUI_DARKGRAY
+#endif
+
+//
+// Default frame color
+//
+#ifndef FRAMEWIN_FRAMECOLOR_DEFAULT
+ #define FRAMEWIN_FRAMECOLOR_DEFAULT GUI_GRAY_AA
+#endif
+
+//
+// Default text color when framewin is active
+//
+#ifndef FRAMEWIN_TEXTCOLOR_INACTIVE_DEFAULT
+ #if WIDGET_USE_FLEX_SKIN
+ #define FRAMEWIN_TEXTCOLOR_INACTIVE_DEFAULT GUI_BLACK
+ #else
+ #define FRAMEWIN_TEXTCOLOR_INACTIVE_DEFAULT GUI_WHITE
+ #endif
+#endif
+
+//
+// Default text color when framewin is inactive
+//
+#ifndef FRAMEWIN_TEXTCOLOR_ACTIVE_DEFAULT
+ #if WIDGET_USE_FLEX_SKIN
+ #define FRAMEWIN_TEXTCOLOR_ACTIVE_DEFAULT GUI_BLACK
+ #else
+ #define FRAMEWIN_TEXTCOLOR_ACTIVE_DEFAULT GUI_WHITE
+ #endif
+#endif
+
+//
+// Default text alignment
+//
+#ifndef FRAMEWIN_TEXTALIGN_DEFAULT
+ #define FRAMEWIN_TEXTALIGN_DEFAULT GUI_TA_LEFT
+#endif
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ unsigned (* pfGetBordersize)(FRAMEWIN_Handle hObj, unsigned Index);
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} FRAMEWIN_SKIN_PRIVATE;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBarColor[2];
+ GUI_COLOR aTextColor[2];
+ GUI_COLOR ClientColor;
+ FRAMEWIN_SKIN_PRIVATE SkinPrivate;
+ I16 TitleHeight;
+ I16 BorderSize;
+ I16 IBorderSize;
+ I16 TextAlign;
+} FRAMEWIN_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ FRAMEWIN_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ WIDGET_DRAW_ITEM_FUNC * pfDrawItem; // Only for drawing the title bar...
+ WM_CALLBACK * cb;
+ WM_HWIN hClient;
+ WM_HWIN hMenu;
+ WM_HWIN hText;
+ GUI_RECT rRestore;
+ U16 Flags;
+ WM_HWIN hFocusedChild; // Handle to focused child .. default none (0)
+ WM_DIALOG_STATUS * pDialogStatus;
+ GUI_HOOK * pFirstHook;
+} FRAMEWIN_Obj;
+
+typedef struct {
+ I16 TitleHeight;
+ I16 MenuHeight;
+ GUI_RECT rClient;
+ GUI_RECT rTitleText;
+} FRAMEWIN_POSITIONS;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define FRAMEWIN_INIT_ID(p) (p->Widget.DebugId = FRAMEWIN_ID)
+#else
+ #define FRAMEWIN_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ FRAMEWIN_Obj * FRAMEWIN_LockH(FRAMEWIN_Handle h);
+ #define FRAMEWIN_LOCK_H(h) FRAMEWIN_LockH(h)
+#else
+ #define FRAMEWIN_LOCK_H(h) (FRAMEWIN_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern FRAMEWIN_PROPS FRAMEWIN__DefaultProps;
+
+extern const WIDGET_SKIN FRAMEWIN__SkinClassic;
+extern WIDGET_SKIN FRAMEWIN__Skin;
+
+extern const WIDGET_SKIN * FRAMEWIN__pSkinDefault;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void FRAMEWIN__CalcPositions (FRAMEWIN_Handle hObj, FRAMEWIN_POSITIONS * pPos);
+int FRAMEWIN__CalcTitleHeight(FRAMEWIN_Obj * pObj);
+void FRAMEWIN__UpdatePositions(FRAMEWIN_Handle hObj);
+void FRAMEWIN__UpdateButtons (FRAMEWIN_Handle hObj, int OldHeight, int OldBorderSizeL, int OldBorderSizeR, int OldBorderSizeT);
+void FRAMEWIN__GetTitleLimits (FRAMEWIN_Handle hObj, int * pxMin, int * pxMax);
+unsigned FRAMEWIN__GetBorderSize (FRAMEWIN_Handle hObj, unsigned Index);
+
+#endif // GUI_WINSUPPORT
+#endif // FRAMEWIN_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GRAPH.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,199 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GRAPH.h
+Purpose : GRAPH include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef GRAPH_H
+#define GRAPH_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define GRAPH_CI_BK 0
+#define GRAPH_CI_BORDER 1
+#define GRAPH_CI_FRAME 2
+#define GRAPH_CI_GRID 3
+
+#define GRAPH_SCALE_CF_HORIZONTAL (0 << 0)
+#define GRAPH_SCALE_CF_VERTICAL (1 << 0)
+
+#define GRAPH_SCALE_SF_HORIZONTAL GRAPH_SCALE_CF_HORIZONTAL
+#define GRAPH_SCALE_SF_VERTICAL GRAPH_SCALE_CF_VERTICAL
+
+#define GRAPH_DRAW_FIRST 0
+#define GRAPH_DRAW_AFTER_BORDER 1
+#define GRAPH_DRAW_LAST 2
+
+#define GRAPH_ALIGN_RIGHT (0 << 0)
+#define GRAPH_ALIGN_LEFT (1 << 0)
+
+//
+// Creation flags (ExFlags)
+//
+#define GRAPH_CF_GRID_FIXED_X (1 << 0)
+#define GRAPH_CF_AVOID_SCROLLBAR_H (1 << 1)
+#define GRAPH_CF_AVOID_SCROLLBAR_V (1 << 2)
+
+//
+// Status flags
+//
+#define GRAPH_SF_AVOID_SCROLLBAR_H GRAPH_CF_AVOID_SCROLLBAR_H
+#define GRAPH_SF_AVOID_SCROLLBAR_V GRAPH_CF_AVOID_SCROLLBAR_V
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM GRAPH_Handle;
+typedef WM_HMEM GRAPH_DATA_Handle;
+typedef WM_HMEM GRAPH_SCALE_Handle;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+
+GRAPH_Handle GRAPH_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+GRAPH_Handle GRAPH_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+GRAPH_Handle GRAPH_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+GRAPH_DATA_Handle GRAPH_DATA_XY_Create(GUI_COLOR Color, unsigned MaxNumItems, const GUI_POINT * pData, unsigned NumItems);
+GRAPH_DATA_Handle GRAPH_DATA_YT_Create(GUI_COLOR Color, unsigned MaxNumItems, const I16 * pData, unsigned NumItems);
+GRAPH_SCALE_Handle GRAPH_SCALE_Create (int Pos, int TextAlign, unsigned Flags, unsigned TickDist);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void GRAPH_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void GRAPH_AttachData (GRAPH_Handle hObj, GRAPH_DATA_Handle hData);
+void GRAPH_AttachScale (GRAPH_Handle hObj, GRAPH_SCALE_Handle hScale);
+void GRAPH_DetachData (GRAPH_Handle hObj, GRAPH_DATA_Handle hData);
+void GRAPH_DetachScale (GRAPH_Handle hObj, GRAPH_SCALE_Handle hScale);
+GUI_COLOR GRAPH_GetColor (GRAPH_Handle hObj, unsigned Index);
+I32 GRAPH_GetScrollValue (GRAPH_Handle hObj, U8 Coord);
+int GRAPH_GetUserData (GRAPH_Handle hObj, void * pDest, int NumBytes);
+void GRAPH_SetAutoScrollbar (GRAPH_Handle hObj, U8 Coord, U8 OnOff);
+void GRAPH_SetBorder (GRAPH_Handle hObj, unsigned BorderL, unsigned BorderT, unsigned BorderR, unsigned BorderB);
+GUI_COLOR GRAPH_SetColor (GRAPH_Handle hObj, GUI_COLOR Color, unsigned Index);
+unsigned GRAPH_SetGridFixedX (GRAPH_Handle hObj, unsigned OnOff);
+unsigned GRAPH_SetGridOffX (GRAPH_Handle hObj, unsigned Value);
+unsigned GRAPH_SetGridOffY (GRAPH_Handle hObj, unsigned Value);
+unsigned GRAPH_SetGridVis (GRAPH_Handle hObj, unsigned OnOff);
+unsigned GRAPH_SetGridDistX (GRAPH_Handle hObj, unsigned Value);
+unsigned GRAPH_SetGridDistY (GRAPH_Handle hObj, unsigned Value);
+U8 GRAPH_SetLineStyleH (GRAPH_Handle hObj, U8 Value);
+U8 GRAPH_SetLineStyleV (GRAPH_Handle hObj, U8 Value);
+void GRAPH_SetLineStyle (GRAPH_Handle hObj, U8 Value);
+void GRAPH_SetScrollValue (GRAPH_Handle hObj, U8 Coord, U32 Value);
+unsigned GRAPH_SetVSizeX (GRAPH_Handle hObj, unsigned Value);
+unsigned GRAPH_SetVSizeY (GRAPH_Handle hObj, unsigned Value);
+int GRAPH_SetUserData (GRAPH_Handle hObj, const void * pSrc, int NumBytes);
+void GRAPH_SetUserDraw (GRAPH_Handle hObj, void (* pOwnerDraw)(WM_HWIN, int));
+
+void GRAPH_DATA_YT_AddValue (GRAPH_DATA_Handle hDataObj, I16 Value);
+void GRAPH_DATA_YT_Clear (GRAPH_DATA_Handle hDataObj);
+void GRAPH_DATA_YT_Delete (GRAPH_DATA_Handle hDataObj);
+int GRAPH_DATA_YT_GetValue (GRAPH_DATA_Handle hDataObj, I16 * pValue, U32 Index);
+
+void GRAPH_DATA_YT_SetAlign (GRAPH_DATA_Handle hDataObj, int Align);
+void GRAPH_DATA_YT_SetOffY (GRAPH_DATA_Handle hDataObj, int Off);
+void GRAPH_DATA_YT_MirrorX (GRAPH_DATA_Handle hDataObj, int OnOff);
+
+void GRAPH_DATA_XY_AddPoint (GRAPH_DATA_Handle hDataObj, GUI_POINT * pPoint);
+void GRAPH_DATA_XY_Clear (GRAPH_DATA_Handle hDataObj);
+void GRAPH_DATA_XY_Delete (GRAPH_DATA_Handle hDataObj);
+unsigned GRAPH_DATA_XY_GetLineVis (GRAPH_DATA_Handle hDataObj);
+int GRAPH_DATA_XY_GetPoint (GRAPH_DATA_Handle hDataObj, GUI_POINT * pPoint, U32 Index);
+unsigned GRAPH_DATA_XY_GetPointVis (GRAPH_DATA_Handle hDataObj);
+void GRAPH_DATA_XY_SetLineStyle (GRAPH_DATA_Handle hDataObj, U8 LineStyle);
+unsigned GRAPH_DATA_XY_SetLineVis (GRAPH_DATA_Handle hDataObj, unsigned OnOff);
+void GRAPH_DATA_XY_SetOffX (GRAPH_DATA_Handle hDataObj, int Off);
+void GRAPH_DATA_XY_SetOffY (GRAPH_DATA_Handle hDataObj, int Off);
+void GRAPH_DATA_XY_SetPenSize (GRAPH_DATA_Handle hDataObj, U8 PenSize);
+void GRAPH_DATA_XY_SetPointSize (GRAPH_DATA_Handle hDataObj, unsigned PointSize);
+unsigned GRAPH_DATA_XY_SetPointVis (GRAPH_DATA_Handle hDataObj, unsigned OnOff);
+void GRAPH_DATA_XY_SetOwnerDraw (GRAPH_DATA_Handle hDataObj, WIDGET_DRAW_ITEM_FUNC * pOwnerDraw);
+
+void GRAPH_SCALE_Delete (GRAPH_SCALE_Handle hScaleObj);
+float GRAPH_SCALE_SetFactor (GRAPH_SCALE_Handle hScaleObj, float Factor);
+const GUI_FONT * GRAPH_SCALE_SetFont (GRAPH_SCALE_Handle hScaleObj, const GUI_FONT * pFont);
+int GRAPH_SCALE_SetNumDecs (GRAPH_SCALE_Handle hScaleObj, int NumDecs);
+int GRAPH_SCALE_SetOff (GRAPH_SCALE_Handle hScaleObj, int Off);
+int GRAPH_SCALE_SetPos (GRAPH_SCALE_Handle hScaleObj, int Pos);
+GUI_COLOR GRAPH_SCALE_SetTextColor(GRAPH_SCALE_Handle hScaleObj, GUI_COLOR Color);
+unsigned GRAPH_SCALE_SetTickDist (GRAPH_SCALE_Handle hScaleObj, unsigned Value);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // GRAPH_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GRAPH_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,163 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GRAPH_Private.h
+Purpose : GRAPH private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef GRAPH_PRIVATE_H
+#define GRAPH_PRIVATE_H
+
+#include "GRAPH.h"
+#include "GUI_ARRAY.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct GRAPH_OBJ GRAPH_OBJ;
+typedef struct GRAPH_DATA_OBJ GRAPH_DATA_OBJ;
+typedef struct GRAPH_SCALE_OBJ GRAPH_SCALE_OBJ;
+typedef struct GRAPH_PAINT_OBJ GRAPH_PAINT_OBJ;
+
+struct GRAPH_PAINT_OBJ {
+ void (* pfOnPaint) (WM_HMEM hObj, GUI_RECT * pRectInvalid); /* Pointer to paint function */
+ void (* pfOnDelete) (WM_HMEM hObj); /* Pointer to delete function */
+ WM_HWIN hGraph; /* Handle of graph widget */
+};
+
+typedef struct {
+ GUI_COLOR TextColor;
+ const GUI_FONT * pFont;
+} GRAPH_SCALE_PROPS;
+
+struct GRAPH_SCALE_OBJ {
+ GRAPH_PAINT_OBJ PaintObj;
+ GRAPH_SCALE_PROPS Props;
+ int Pos;
+ int TextAlign;
+ unsigned TickDist;
+ int Off;
+ U16 Flags;
+ float Factor;
+ int NumDecs;
+};
+
+struct GRAPH_DATA_OBJ {
+ GRAPH_PAINT_OBJ PaintObj;
+ void (* pfInvalidateNewItem)(GRAPH_DATA_OBJ * pDataObj); /* Pointer to a function which can be used for invalidating the required area */
+ unsigned NumItems;
+ unsigned MaxNumItems;
+ GUI_COLOR Color;
+ int OffX, OffY;
+};
+
+typedef struct {
+ GUI_COLOR aColor[4];
+ unsigned GridSpacingX;
+ unsigned GridSpacingY;
+ unsigned GridOffX;
+ unsigned GridOffY;
+ unsigned BorderL;
+ unsigned BorderT;
+ unsigned BorderR;
+ unsigned BorderB;
+} GRAPH_PROPS;
+
+struct GRAPH_OBJ {
+ WIDGET Widget;
+ GRAPH_PROPS Props;
+ GUI_ARRAY GraphArray;
+ GUI_ARRAY ScaleArray;
+ U8 ShowGrid;
+ unsigned RangeX, RangeY;
+ U16 Flags;
+ U8 LineStyleV;
+ U8 LineStyleH;
+ WM_SCROLL_STATE ScrollStateV;
+ WM_SCROLL_STATE ScrollStateH;
+ void (* pUserDraw)(WM_HWIN hObj, int Stage);
+};
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define GRAPH_INIT_ID(p) (p->Widget.DebugId = GRAPH_ID)
+#else
+ #define GRAPH_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ GRAPH_OBJ * GRAPH_LockH(GRAPH_Handle h);
+ #define GRAPH_LOCK_H(h) GRAPH_LockH(h)
+#else
+ #define GRAPH_LOCK_H(h) (GRAPH_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern GRAPH_PROPS GRAPH__DefaultProps;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void GRAPH__AddValue (GRAPH_DATA_OBJ * pDataObj, void * pData, void * pValue, int Size);
+int GRAPH__GetValue (GRAPH_DATA_OBJ * pDataObj, void * pData, void * pValue, int Size, U32 Index);
+void GRAPH__InvalidateGraph(GRAPH_Handle hObj);
+
+#endif /* GUI_WINSUPPORT */
+#endif /* GRAPH_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,2506 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI.h
+Purpose : GUI API include file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_H
+#define GUI_H
+
+#include <stddef.h>
+
+#include "GUI_ConfDefaults.h"
+#include "GUI_Type.h"
+#include "GUI_Version.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Disable string function warning with newer MSVC versions
+*/
+#if defined (_MSC_VER)
+ #if (_MSC_VER > 1200)
+ #pragma warning( disable : 4996)
+ #endif
+#endif
+
+/*********************************************************************
+*
+* Macros, function replacement
+*/
+#define GUI_COUNTOF(a) (sizeof(a) / sizeof(a[0]))
+#define GUI_MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define GUI_MAX(a,b) (((a) > (b)) ? (a) : (b))
+#define GUI_ZEROFILL(p, Size) (memset(p, 0, Size)) /**/
+
+/*********************************************************************
+*
+* Support for multitasking systems (locking)
+*/
+typedef struct GUI_CONTEXT GUI_CONTEXT;
+
+#if !GUI_OS
+ #define GUI_LOCK()
+ #define GUI_UNLOCK()
+ #define GUITASK_INIT()
+ #define GUITASK_COPY_CONTEXT()
+#else
+ void GUI_Lock(void);
+ void GUI_Unlock(void);
+ void GUITASK_Init(void);
+ void GUITASK_CopyContext(void);
+ void GUITASK_SetMaxTask(int MaxTask);
+ int GUITASK_GetMaxTask(void);
+ GUI_CONTEXT * GUITASK_GetpContext(int Index);
+ #define GUI_LOCK() GUI_Lock()
+ #define GUI_UNLOCK() GUI_Unlock()
+ #define GUITASK_INIT() GUITASK_Init()
+ #define GUITASK_COPY_CONTEXT() GUITASK_CopyContext()
+#endif
+
+/*********************************************************************
+*
+* API table of a display driver
+*/
+struct GUI_DEVICE_API {
+ //
+ // Data
+ //
+ int DeviceClassIndex;
+ //
+ // Drawing functions
+ //
+ void (* pfDrawBitmap )(GUI_DEVICE * pDevice, int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+ void (* pfDrawHLine )(GUI_DEVICE * pDevice, int x0, int y0, int x1);
+ void (* pfDrawVLine )(GUI_DEVICE * pDevice, int x , int y0, int y1);
+ void (* pfFillRect )(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1);
+ LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE * pDevice, int x, int y);
+ void (* pfSetPixelIndex)(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX ColorIndex);
+ void (* pfXorPixel )(GUI_DEVICE * pDevice, int x, int y);
+ //
+ // Set origin
+ //
+ void (* pfSetOrg )(GUI_DEVICE * pDevice, int x, int y);
+ //
+ // Request information
+ //
+ void (*(* pfGetDevFunc) (GUI_DEVICE ** ppDevice, int Index))(void);
+ I32 (* pfGetDevProp )(GUI_DEVICE * pDevice, int Index);
+ void *(* pfGetDevData )(GUI_DEVICE * pDevice, int Index);
+ void (* pfGetRect )(GUI_DEVICE * pDevice, LCD_RECT * pRect);
+};
+
+/*********************************************************************
+*
+* Device classes
+*/
+typedef enum {
+ DEVICE_CLASS_DRIVER = 0,
+ DEVICE_CLASS_DRIVER_MODIFIER, // Zoom or delta-pixel modifier
+ DEVICE_CLASS_VNC,
+ DEVICE_CLASS_SPRITE,
+ DEVICE_CLASS_MEMDEV,
+ DEVICE_CLASS_ALPHA,
+ DEVICE_CLASS_AUTOALPHA,
+ DEVICE_CLASS_MEASDEV
+} DEVICE_CLASS;
+
+#define GUI_DEVICE_STAYONTOP 1
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+extern const GUI_DEVICE_API GUIDRV_Template_API;
+
+//
+// Macros to be used in configuration files
+//
+#define GUIDRV_WIN32 &GUIDRV_Win_API
+
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+ #define GUIDRV_TEMPLATE &GUIDRV_Win_API
+#else
+ #define GUIDRV_TEMPLATE &GUIDRV_Template_API
+#endif
+
+/*********************************************************************
+*
+* Definition of GUI_DEVICE structure
+*/
+struct GUI_DEVICE {
+ //
+ // Linking
+ //
+ GUI_DEVICE * pNext;
+ GUI_DEVICE * pPrev;
+ //
+ // Data
+ //
+ union {
+ GUI_HMEM hContext; // Handle of payload data like sprite- or memory device context
+ void * pContext; // Pointer for context data in a fixed block
+ } u;
+ //
+ // API pointers
+ //
+ const GUI_DEVICE_API * pDeviceAPI;
+ const LCD_API_COLOR_CONV * pColorConvAPI;
+ U16 Flags;
+ int LayerIndex;
+};
+
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_1;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_8;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_16;
+extern const GUI_DEVICE_API GUI_MEMDEV_DEVICE_32;
+
+/*********************************************************************
+*
+* GUI_CONTEXT
+*
+* This structure is public for one reason only:
+* To allow the application to save and restore the context.
+*/
+typedef union {
+ U8 aColorIndex8[2];
+ U16 aColorIndex16[2];
+ U32 aColorIndex32[2];
+} LCD_COLORINDEX_UNION;
+
+struct GUI_CONTEXT {
+ //
+ // Variables in LCD module
+ //
+ LCD_COLORINDEX_UNION uLCD;
+ LCD_RECT ClipRect;
+ U8 DrawMode;
+ U8 SelLayer;
+ U8 TextStyle;
+ //
+ // Variables in GL module
+ //
+ GUI_RECT * pClipRect_HL; // High level clip rectangle ... Speed optimization so drawing routines can optimize
+ U8 PenSize;
+ U8 PenShape;
+ U8 LineStyle;
+ U8 StrikeWidth;
+ //
+ // Variables in GUICHAR module
+ //
+ const GUI_FONT * pAFont;
+ I16P LBorder;
+ I16P DispPosX, DispPosY;
+ I16P DrawPosX, DrawPosY;
+ I16P TextMode, TextAlign;
+ GUI_COLOR Color, BkColor; // Required only when changing devices and for speed opt (caching)
+ //
+ // Pointer to color indices
+ //
+ LCD_PIXELINDEX * LCD_pBkColorIndex;
+ LCD_PIXELINDEX * LCD_pColorIndex;
+ //
+ // Variables in WM module
+ //
+ #if GUI_WINSUPPORT
+ const GUI_RECT * WM__pUserClipRect;
+ GUI_HWIN hAWin;
+ int xOff, yOff;
+ U8 WM_IsActive;
+ #endif
+ //
+ // Array of pointers to device chains
+ //
+ GUI_DEVICE * apDriver[GUI_NUM_LAYERS];
+ //
+ // Variables in MEMDEV module (with memory devices only)
+ //
+ GUI_HMEM hDevData;
+ //
+ // Variables in Anitaliasing module
+ //
+ const tLCD_HL_APIList * pLCD_HL; // Required to reroute drawing (HLine & Pixel) to the AA module
+ U8 AA_Factor;
+ U8 AA_HiResEnable;
+ void (* AA_pfSetPixelAA)(int x, int y, U8 Intens); // Function to be used for drawing a single pixel
+ //
+ // Used to reference and link in the copyright string for libraries.
+ //
+ const char * sCopyright;
+};
+
+/* Rename GUI_SaveContext in order to avoid crashes if wrong GUIConf is used */
+#if (GUI_WINSUPPORT == 1)
+ #define GUI_SaveContext GUI_SaveContext_W
+#else
+ #define GUI_SaveContext GUI_SaveContext_
+#endif
+
+/*********************************************************************
+*
+* Device management
+*/
+GUI_DEVICE * GUI_DEVICE_Create (const GUI_DEVICE_API * pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);
+GUI_DEVICE * GUI_DEVICE_CreateAndLink(const GUI_DEVICE_API * pDeviceAPI, const LCD_API_COLOR_CONV * pColorConvAPI, U16 Flags, int LayerIndex);
+void GUI_DEVICE_Delete (GUI_DEVICE * pDevice);
+int GUI_DEVICE_Link (GUI_DEVICE * pDevice);
+void GUI_DEVICE_Unlink (GUI_DEVICE * pDevice);
+GUI_DEVICE * GUI_DEVICE__GetpDriver (int LayerIndex);
+GUI_DEVICE * GUI_DEVICE__GetpDevice (int LayerIndex, int DeviceClass);
+
+GUI_DEVICE * GUI_DEVICE_UnlinkTaskDevices(void);
+void GUI_DEVICE_LinkDevices (GUI_DEVICE * pDevice);
+
+/*********************************************************************
+*
+* GUI_DIRTYDEVICE
+*/
+typedef struct {
+ void * pData; // Pointer to first pixel
+ int x0, y0; // Coordinates of the upper left pixel
+ int xSize, ySize; // Size of dirty rectangle
+ int LineOff; // Virtual xSize in pixels
+ int BytesPerPixel; // Number of bytes required per pixel
+ int IsDirty; // Indicates if dirty pixels exist
+} GUI_DIRTYDEVICE_INFO;
+
+int GUI_DIRTYDEVICE_Create (void);
+int GUI_DIRTYDEVICE_CreateEx (int LayerIndex);
+int GUI_DIRTYDEVICE_CreateExInfo(GUI_DIRTYDEVICE_INFO * pInfo, int LayerIndex);
+int GUI_DIRTYDEVICE_Delete (void);
+int GUI_DIRTYDEVICE_DeleteEx (int LayerIndex);
+int GUI_DIRTYDEVICE_Fetch (GUI_DIRTYDEVICE_INFO * pInfo);
+int GUI_DIRTYDEVICE_FetchEx (GUI_DIRTYDEVICE_INFO * pInfo, int LayerIndex);
+
+/*********************************************************************
+*
+* GUI_GCACHE
+*/
+int GUI_GCACHE_4_Create(const LCD_API_COLOR_CONV * pColorConvAPI);
+int GUI_GCACHE_4_CreateEx(int LayerIndex, const LCD_API_COLOR_CONV * pColorConvAPI);
+
+/*********************************************************************
+*
+* GUI_DCACHE
+*/
+void GUI_DCACHE_SetClearCacheHook(void (* pFunc)(U32 LayerMask));
+void GUI_DCACHE_Clear (U32 LayerMask);
+
+extern void (* GUI_DCACHE__pfClearCacheHook)(U32 LayerMask);
+
+/*********************************************************************
+*
+* GUI_SOFTLAYER
+*/
+typedef struct {
+ int xPos;
+ int yPos;
+ int xSize;
+ int ySize;
+ int Visible;
+} GUI_SOFTLAYER_CONFIG;
+
+int GUI_SOFTLAYER_Enable (GUI_SOFTLAYER_CONFIG * pConfig, int NumLayers, GUI_COLOR CompositeColor);
+int GUI_SOFTLAYER_Refresh (void);
+void GUI_SOFTLAYER_SetCompositeColor(U32 Color);
+int GUI_SOFTLAYER_MULTIBUF_Enable (int OnOff);
+
+/*********************************************************************
+*
+* General routines
+*/
+void GUI_Exit (void);
+GUI_COLOR GUI_GetDefaultBkColor (void);
+GUI_COLOR GUI_GetDefaultColor (void);
+const GUI_FONT * GUI_GetDefaultFont (void);
+int GUI_GetScreenSizeX (void);
+int GUI_GetScreenSizeY (void);
+const char * GUI_GetVersionString (void);
+int GUI_Init (void);
+int GUI_IsInitialized (void);
+void GUI_SetAfterInitHook (void (* pFunc)(void));
+void GUI_RegisterAfterInitHook(void (* pFunc)(void), GUI_REGISTER_INIT * pRegisterInit);
+void GUI_RestoreContext (const GUI_CONTEXT * pContext);
+void GUI_SaveContext (GUI_CONTEXT * pContext);
+const GUI_RECT * GUI_SetClipRect (const GUI_RECT * pRect);
+void GUI_SetControlHook (void (* pFunc)(int LayerIndex, int Cmd));
+void GUI_SetDefault (void);
+void GUI_SetDefaultBkColor (GUI_COLOR Color);
+void GUI_SetDefaultColor (GUI_COLOR Color);
+void GUI_SetDefaultFont (const GUI_FONT * pFont);
+GUI_DRAWMODE GUI_SetDrawMode (GUI_DRAWMODE dm);
+void GUI_SetScreenSizeX (int xSize);
+void GUI_SetScreenSizeY (int ySize);
+void GUI_SetRefreshHook (void (* pFunc)(void));
+void MainTask (void);
+
+#define GUI_PID_SetInitFunc(x) GUI_SetAfterInitHook(x) // Compatibility
+
+/*********************************************************************
+*
+* Function replacement
+*/
+void GUI_SetpfMemset(void * (* pFunc)(void * pDest, int c, size_t Cnt));
+void GUI_SetpfMemcpy(void * (* pFunc)(void * pDest, const void * pSrc, size_t Cnt));
+void GUI_SetpfStrcmp(int (* pFunc)(const char *, const char *));
+void GUI_SetpfStrlen(size_t (* pFunc)(const char *));
+void GUI_SetpfStrcpy(char * (* pFunc)(char *, const char *));
+
+/*********************************************************************
+*
+* Rectangle helper functions
+*/
+void GUI_AddRect (GUI_RECT * pDest, const GUI_RECT * pRect, int Dist);
+int GUI_RectsIntersect(const GUI_RECT * pr0, const GUI_RECT * pr1);
+void GUI_MoveRect (GUI_RECT * pRect, int x, int y);
+void GUI_MergeRect (GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+int GUI__IntersectRects(GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+void GUI__IntersectRect (GUI_RECT * pDest, const GUI_RECT * pr0);
+void GUI__ReduceRect (GUI_RECT * pDest, const GUI_RECT * pRect, int Dist);
+
+/*********************************************************************
+*
+* Misc helper functions
+*/
+I32 GUI__ATan2(I32 x, I32 y, I32 * ph);
+I32 GUI__ASinHQ(I32 SinHQ);
+int GUI__CompactPixelIndices (LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel);
+int GUI__CompactPixelIndicesEx(LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI);
+int GUI__ConvertColor2Index (LCD_PIXELINDEX * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI, void * pResult);
+void GUI__Config(void);
+I32 GUI__CosHQ(I32 Ang1000);
+int GUI__DivideRound (int a, int b);
+I32 GUI__DivideRound32 (I32 a, I32 b);
+void GUI__ExpandPixelIndices (void * pBuffer, int NumPixels, int BitsPerPixel);
+void GUI__ExpandPixelIndicesEx (void * pBuffer, int NumPixels, int BitsPerPixel, const LCD_API_COLOR_CONV * pColorConvAPI);
+int GUI__SetText(GUI_HMEM * phText, const char * s);
+I32 GUI__SinHQ(I32 Ang1000);
+I32 GUI__sqrt32(I32 Square);
+void GUI__DrawTwinArc2(int xl, int xr, int y0, int r, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorFill);
+void GUI__DrawTwinArc4(int x0, int y0, int x1, int y1, int r, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorFill);
+void GUI__FillTrippleArc(int x0, int y0, int Size, GUI_COLOR ColorR0, GUI_COLOR ColorR1, GUI_COLOR ColorR2, GUI_COLOR ColorFill);
+void GUI__RegisterExit(GUI_REGISTER_EXIT * pRegisterExit);
+void GUI__RegisterInit(GUI_REGISTER_INIT * pRegisterInit);
+
+/*********************************************************************
+*
+* Optional function replacement
+*/
+void * GUI__memcpy(void * pDest, const void * pSrc, size_t NumBytes);
+void * GUI__memset(void * pDest, int c, size_t Cnt);
+
+/*********************************************************************
+*
+* Get / Set Attributes
+*/
+GUI_COLOR GUI_GetBkColor (void);
+int GUI_GetBkColorIndex(void);
+GUI_COLOR GUI_GetColor (void);
+int GUI_GetColorIndex (void);
+U8 GUI_GetLineStyle (void);
+U8 GUI_GetPenSize (void);
+U8 GUI_GetPenShape (void);
+unsigned GUI_GetPixelIndex (int x, int y);
+
+void GUI_SetBkColor (GUI_COLOR);
+void GUI_SetColor (GUI_COLOR);
+void GUI_SetBkColorIndex(int Index);
+void GUI_SetColorIndex(int Index);
+
+U8 GUI_SetPenSize (U8 Size);
+U8 GUI_SetPenShape (U8 Shape);
+U8 GUI_SetLineStyle (U8 Style);
+
+/* Get/Set Character used as decimal point (usually '.' or ',') */
+char GUI_GetDecChar(void);
+char GUI_SetDecChar(char c);
+
+/*********************************************************************
+*
+* Color / Index related functions
+*/
+int GUI_Color2Index(GUI_COLOR color);
+GUI_COLOR GUI_Color2VisColor(GUI_COLOR color);
+char GUI_ColorIsAvailable(GUI_COLOR color);
+GUI_COLOR GUI_Index2Color(int Index);
+U32 GUI_CalcColorDist (GUI_COLOR Color0, GUI_COLOR Color1);
+U32 GUI_CalcVisColorError(GUI_COLOR color);
+
+/*********************************************************************
+*
+* Error handler
+*/
+void GUI_SetOnErrorFunc(void (* pFunc)(const char * s));
+
+/*********************************************************************
+*
+* Logging (for debugging primarily)
+*/
+void GUI_Log (const char * s);
+void GUI_Log1 (const char * s, I32 p0);
+void GUI_Log2 (const char * s, I32 p0, I32 p1);
+void GUI_Log3 (const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_Log4 (const char * s, I32 p0, I32 p1, I32 p2,I32 p3);
+void GUI_Warn (const char * s);
+void GUI_Warn1 (const char * s, I32 p0);
+void GUI_Warn2 (const char * s, I32 p0, I32 p1);
+void GUI_Warn3 (const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_Warn4 (const char * s, I32 p0, I32 p1, I32 p2, I32 p3);
+void GUI_ErrorOut (const char * s);
+void GUI_ErrorOut1(const char * s, I32 p0);
+void GUI_ErrorOut2(const char * s, I32 p0, I32 p1);
+void GUI_ErrorOut3(const char * s, I32 p0, I32 p1, I32 p2);
+void GUI_ErrorOut4(const char * s, I32 p0, I32 p1, I32 p2, I32 p3);
+
+/*********************************************************************
+*
+* 2d - GL
+*/
+void GUI_Clear (void);
+void GUI_ClearRect (int x0, int y0, int x1, int y1);
+void GUI_ClearRectEx (const GUI_RECT * pRect);
+void GUI_CopyRect (int x0, int y0, int x1, int y1, int dx, int dy);
+void GUI_DrawArc (int x0, int y0, int rx, int ry, int a0, int a1);
+void GUI_DrawBitmap (const GUI_BITMAP * pBM, int x0, int y0);
+void GUI_DrawBitmapMag (const GUI_BITMAP * pBM, int x0, int y0, int XMul, int YMul);
+void GUI_DrawBitmapEx (const GUI_BITMAP * pBM, int x0, int y0, int xCenter, int yCenter, int xMag, int yMag);
+void GUI_DrawBitmapExp (int x0, int y0, int XSize, int YSize, int XMul, int YMul, int BitsPerPixel, int BytesPerLine, const U8 * pData, const GUI_LOGPALETTE * pPal);
+void GUI_DrawBitmapHWAlpha(const GUI_BITMAP * pBM, int x0, int y0);
+void GUI_DrawCircle (int x0, int y0, int r);
+void GUI_DrawEllipse (int x0, int y0, int rx, int ry);
+void GUI_DrawGradientH (int x0, int y0, int x1, int y1, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientV (int x0, int y0, int x1, int y1, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientRoundedH(int x0, int y0, int x1, int y1, int rd, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGradientRoundedV(int x0, int y0, int x1, int y1, int rd, GUI_COLOR Color0, GUI_COLOR Color1);
+void GUI_DrawGraph (I16 * pay, int NumPoints, int x0, int y0);
+void GUI_DrawGraphEx (I16 * pay, int NumPoints, int x0, int y0, int Numerator, int Denominator, int MirrorX);
+void GUI_DrawHLine (int y0, int x0, int x1);
+void GUI_DrawLine (int x0, int y0, int x1, int y1);
+void GUI_DrawLineRel (int dx, int dy);
+void GUI_DrawLineTo (int x, int y);
+void GUI_DrawPie (int x0, int y0, int r, int a0, int a1, int Type);
+void GUI_DrawPixel (int x, int y);
+void GUI_DrawPoint (int x, int y);
+void GUI_DrawPolygon (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_DrawPolyLine (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_DrawFocusRect (const GUI_RECT * pRect, int Dist);
+void GUI_DrawRect (int x0, int y0, int x1, int y1);
+void GUI_DrawRectEx (const GUI_RECT * pRect);
+void GUI_DrawRoundedFrame (int x0, int y0, int x1, int y1, int r, int w);
+void GUI_DrawRoundedRect (int x0, int y0, int x1, int y1, int r);
+void GUI_DrawVLine (int x0, int y0, int y1);
+void GUI_FillCircle (int x0, int y0, int r);
+void GUI_FillEllipse (int x0, int y0, int rx, int ry);
+void GUI_FillPolygon (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_FillRect (int x0, int y0, int x1, int y1);
+void GUI_FillRectEx (const GUI_RECT * pRect);
+void GUI_FillRoundedFrame (int x0, int y0, int x1, int y1, int r, int w);
+void GUI_FillRoundedRect (int x0, int y0, int x1, int y1, int r);
+void GUI_FillRoundedRectB (int x0, int y0, int x1, int y1, int r);
+void GUI_FillRoundedRectT (int x0, int y0, int x1, int y1, int r);
+void GUI_GetClientRect (GUI_RECT * pRect);
+void GUI_InvertRect (int x0, int y0, int x1, int y1);
+void GUI_MoveRel (int dx, int dy);
+void GUI_MoveTo (int x, int y);
+void GUI_SetAlphaMask8888 (U32 OrMask, U32 AndMask);
+
+/*********************************************************************
+*
+* IMAGE file support
+*/
+typedef int GUI_GET_DATA_FUNC(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off);
+
+/*********************************************************************
+*
+* GIF file support
+*/
+int GUI_GIF_Draw (const void * pGIF, U32 NumBytes, int x0, int y0);
+int GUI_GIF_DrawEx (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_GIF_DrawSub (const void * pGIF, U32 NumBytes, int x0, int y0, int Index);
+int GUI_GIF_DrawSubEx (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Index);
+int GUI_GIF_DrawSubScaled (const void * pGIF, U32 NumBytes, int x0, int y0, int Index, int Num, int Denom);
+int GUI_GIF_DrawSubScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Index, int Num, int Denom);
+int GUI_GIF_GetComment (const void * pGIF, U32 NumBytes, U8 * pBuffer, int MaxSize, int Index);
+int GUI_GIF_GetCommentEx (GUI_GET_DATA_FUNC * pfGetData, void * p, U8 * pBuffer, int MaxSize, int Index);
+int GUI_GIF_GetImageInfo (const void * pGIF, U32 NumBytes, GUI_GIF_IMAGE_INFO * pInfo, int Index);
+int GUI_GIF_GetImageInfoEx (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_GIF_IMAGE_INFO * pInfo, int Index);
+int GUI_GIF_GetInfo (const void * pGIF, U32 NumBytes, GUI_GIF_INFO * pInfo);
+int GUI_GIF_GetInfoEx (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_GIF_INFO * pInfo);
+int GUI_GIF_GetXSize (const void * pGIF);
+int GUI_GIF_GetXSizeEx (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_GIF_GetYSize (const void * pGIF);
+int GUI_GIF_GetYSizeEx (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_GIF_SetFillTrans (int OnOff);
+
+/*********************************************************************
+*
+* BMP file support
+*/
+int GUI_BMP_Draw (const void * pFileData, int x0, int y0);
+int GUI_BMP_DrawEx (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_BMP_DrawScaled (const void * pFileData, int x0, int y0, int Num, int Denom);
+int GUI_BMP_DrawScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Num, int Denom);
+int GUI_BMP_GetXSize (const void * pFileData);
+int GUI_BMP_GetXSizeEx (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_BMP_GetYSize (const void * pFileData);
+int GUI_BMP_GetYSizeEx (GUI_GET_DATA_FUNC * pfGetData, void * p);
+void GUI_BMP_EnableAlpha (void);
+void GUI_BMP_DisableAlpha(void);
+
+/*********************************************************************
+*
+* PNG file support
+*/
+int GUI_PNG_Draw (const void * pFileData, int DataSize, int x0, int y0);
+int GUI_PNG_DrawEx (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_PNG_GetXSize (const void * pFileData, int FileSize);
+int GUI_PNG_GetXSizeEx(GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_PNG_GetYSize (const void * pFileData, int FileSize);
+int GUI_PNG_GetYSizeEx(GUI_GET_DATA_FUNC * pfGetData, void * p);
+
+/*********************************************************************
+*
+* JPEG file support
+*/
+typedef struct {
+ int XSize;
+ int YSize;
+} GUI_JPEG_INFO;
+
+int GUI_JPEG_Draw (const void * pFileData, int DataSize, int x0, int y0);
+int GUI_JPEG_DrawEx (GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0);
+int GUI_JPEG_DrawScaled (const void * pFileData, int DataSize, int x0, int y0, int Num, int Denom);
+int GUI_JPEG_DrawScaledEx(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0, int Num, int Denom);
+int GUI_JPEG_GetInfo (const void * pFileData, int DataSize, GUI_JPEG_INFO * pInfo);
+int GUI_JPEG_GetInfoEx (GUI_GET_DATA_FUNC * pfGetData, void * p, GUI_JPEG_INFO * pInfo);
+
+void GUI_JPEG_SetpfDrawEx(int (* pfDrawEx)(GUI_GET_DATA_FUNC * pfGetData, void * p, int x0, int y0));
+
+/*********************************************************************
+*
+* MOVIE file support
+*/
+#define GUI_MOVIE_NOTIFICATION_PREDRAW 0 // Immediately before frame is drawn
+#define GUI_MOVIE_NOTIFICATION_POSTDRAW 1 // Immediately after a frame is drawn
+#define GUI_MOVIE_NOTIFICATION_START 2 // Send when start playing a movie
+#define GUI_MOVIE_NOTIFICATION_STOP 3 // Movie has stopped
+#define GUI_MOVIE_NOTIFICATION_DELETE 4 // Movie has been deleted
+
+typedef GUI_HMEM GUI_MOVIE_HANDLE;
+
+typedef void GUI_MOVIE_FUNC(GUI_MOVIE_HANDLE hMovie, int Notification, U32 CurrentFrame);
+
+typedef struct {
+ int xSize; // X-size of images
+ int ySize; // Y-size of images
+ int msPerFrame; // Default duration of 1 frame
+ U32 NumFrames; // Number of frames
+} GUI_MOVIE_INFO;
+
+GUI_MOVIE_HANDLE GUI_MOVIE_Create (const void * pFileData, U32 FileSize, GUI_MOVIE_FUNC * pfNotify);
+GUI_MOVIE_HANDLE GUI_MOVIE_CreateEx (GUI_GET_DATA_FUNC * pfGetData, void * pParam, GUI_MOVIE_FUNC * pfNotify);
+int GUI_MOVIE_Delete (GUI_MOVIE_HANDLE hMovie);
+void GUI_MOVIE_DrawFrame (GUI_MOVIE_HANDLE hMovie, int Index, int x, int y);
+U32 GUI_MOVIE_GetFrameIndex(GUI_MOVIE_HANDLE hMovie);
+int GUI_MOVIE_GetInfo (const void * pFileData, U32 FileSize, GUI_MOVIE_INFO * pInfo);
+int GUI_MOVIE_GetInfoEx (GUI_GET_DATA_FUNC * pfGetData, void * pParam, GUI_MOVIE_INFO * pInfo);
+int GUI_MOVIE_GetNumFrames (GUI_MOVIE_HANDLE hMovie);
+int GUI_MOVIE_GetPos (GUI_MOVIE_HANDLE hMovie, int * pxPos, int * pyPos, int * pxSize, int * pySize);
+int GUI_MOVIE_GotoFrame (GUI_MOVIE_HANDLE hMovie, U32 Frame);
+int GUI_MOVIE_Pause (GUI_MOVIE_HANDLE hMovie);
+int GUI_MOVIE_Play (GUI_MOVIE_HANDLE hMovie);
+int GUI_MOVIE_SetPeriod (GUI_MOVIE_HANDLE hMovie, unsigned Period);
+void GUI_MOVIE_SetpfNotify (GUI_MOVIE_FUNC * pfNotify);
+int GUI_MOVIE_SetPos (GUI_MOVIE_HANDLE hMovie, int xPos, int yPos);
+int GUI_MOVIE_Show (GUI_MOVIE_HANDLE hMovie, int xPos, int yPos, int DoLoop);
+
+/*********************************************************************
+*
+* Splines
+*/
+GUI_HMEM GUI_SPLINE_Create (const int * px, const int * py, unsigned NumPoints);
+void GUI_SPLINE_Draw (GUI_HMEM hSpline, int x, int y);
+void GUI_SPLINE_Delete (GUI_HMEM hSpline);
+I16 GUI_SPLINE_GetY (GUI_HMEM hSpline, unsigned Index, float * py);
+unsigned GUI_SPLINE_GetXSize(GUI_HMEM hSpline);
+void GUI_SPLINE_DrawAA (GUI_HMEM hSpline, int x, int y, unsigned Width);
+
+/*********************************************************************
+*
+* Cursor routines
+*/
+#define GUI_CURSOR_SHOW 0
+#define GUI_CURSOR_HIDE 1
+
+typedef struct {
+ const GUI_BITMAP * pBitmap;
+ int xHot;
+ int yHot;
+} GUI_CURSOR;
+
+typedef struct {
+ const GUI_BITMAP ** ppBm;
+ int xHot;
+ int yHot;
+ unsigned Period;
+ const unsigned * pPeriod;
+ int NumItems;
+} GUI_CURSOR_ANIM;
+
+#if GUI_SUPPORT_CURSOR
+ int GUI_CURSOR_GetState (void);
+ int GUI_CURSOR_GetStateEx (int Layer);
+ void GUI_CURSOR_Hide (void);
+ void GUI_CURSOR_HideEx (int Layer);
+ const GUI_CURSOR * GUI_CURSOR_Select (const GUI_CURSOR * pCursor);
+ const GUI_CURSOR * GUI_CURSOR_SelectEx (const GUI_CURSOR * pCursor, int Layer);
+ int GUI_CURSOR_SelectAnim (const GUI_CURSOR_ANIM * pCursorAnim);
+ int GUI_CURSOR_SelectAnimEx (const GUI_CURSOR_ANIM * pCursorAnim, int LayerIndex);
+ int GUI_CURSOR_SetBitmap (const GUI_BITMAP * pBM);
+ int GUI_CURSOR_SetBitmapEx (const GUI_BITMAP * pBM, int Layer);
+ void GUI_CURSOR_SetPosition (int x, int y);
+ void GUI_CURSOR_SetPositionEx(int xNewPos, int yNewPos, int Layer);
+ void GUI_CURSOR_Show (void);
+ void GUI_CURSOR_ShowEx (int Layer);
+ GUI_HSPRITE GUI_CURSOR__GetSpriteEx (int LayerIndex, int * pxPos, int * pyPos);
+ void GUI_CURSOR__SetSpriteEx (GUI_HSPRITE hSprite, const GUI_CURSOR * pCursor, int LayerIndex);
+#else
+ #define GUI_CURSOR_Show();
+ #define GUI_CURSOR_Clear();
+#endif
+
+/*********************************************************************
+*
+* Sprite support
+*/
+#define GUI_SPRITE_CF_STAYONTOP (1 << 0)
+#define GUI_SPRITE_CF_SHOW (1 << 1)
+
+#define GUI_SPRITE_SHOW 0
+#define GUI_SPRITE_HIDE 1
+
+GUI_HSPRITE GUI_SPRITE__CreateEx (const GUI_BITMAP * pBM, int x, int y, int Layer, U16 Flags); /* Not to be documented, only used by cursor modul */
+void GUI_SPRITE__SetCallback (GUI_HSPRITE hSprite, GUI_HMEM hContext, void (* pCB)(GUI_HSPRITE, int));
+GUI_HSPRITE GUI_SPRITE_Create (const GUI_BITMAP * pBM, int x, int y);
+GUI_HSPRITE GUI_SPRITE_CreateAnim (const GUI_BITMAP ** ppBm, int x, int y, unsigned Period, const unsigned * pPeriod, int NumItems);
+GUI_HSPRITE GUI_SPRITE_CreateEx (const GUI_BITMAP * pBM, int x, int y, int Layer);
+GUI_HSPRITE GUI_SPRITE_CreateExAnim (const GUI_BITMAP ** ppBm, int x, int y, unsigned Period, const unsigned * pPeriod, int NumItems, int LayerIndex);
+GUI_HSPRITE GUI_SPRITE_CreateHidden (const GUI_BITMAP * pBM, int x, int y);
+GUI_HSPRITE GUI_SPRITE_CreateHiddenEx (const GUI_BITMAP * pBM, int x, int y, int Layer);
+void GUI_SPRITE_Delete (GUI_HSPRITE hSprite);
+int GUI_SPRITE_GetState (GUI_HSPRITE hSprite);
+void GUI_SPRITE_Hide (GUI_HSPRITE hSprite);
+int GUI_SPRITE_SetBitmap (GUI_HSPRITE hSprite, const GUI_BITMAP * pBM);
+int GUI_SPRITE_SetBitmapAndPosition(GUI_HSPRITE hSprite, const GUI_BITMAP * pBM, int x, int y);
+int GUI_SPRITE_SetLoop (GUI_HSPRITE hSprite, int OnOff);
+void GUI_SPRITE_SetPosition (GUI_HSPRITE hSprite, int x, int y);
+int GUI_SPRITE_StartAnim (GUI_HSPRITE hSprite);
+int GUI_SPRITE_StopAnim (GUI_HSPRITE hSprite);
+void GUI_SPRITE_Show (GUI_HSPRITE hSprite);
+
+/*********************************************************************
+*
+* Cursors and their bitmaps
+*/
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowS, GUI_CursorArrowSI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowM, GUI_CursorArrowMI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorArrowL, GUI_CursorArrowLI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossS, GUI_CursorCrossSI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossM, GUI_CursorCrossMI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorCrossL, GUI_CursorCrossLI;
+extern GUI_CONST_STORAGE GUI_CURSOR GUI_CursorHeaderM, GUI_CursorHeaderMI;
+extern GUI_CONST_STORAGE GUI_CURSOR_ANIM GUI_CursorAnimHourglassM;
+
+/*********************************************************************
+*
+* Wrap modes
+*/
+typedef enum { GUI_WRAPMODE_NONE, GUI_WRAPMODE_WORD, GUI_WRAPMODE_CHAR } GUI_WRAPMODE;
+
+/*********************************************************************
+*
+* Text related routines
+*/
+void GUI_DispCEOL (void);
+void GUI_DispChar (U16 c);
+void GUI_DispCharAt (U16 c, I16P x, I16P y);
+void GUI_DispChars (U16 c, int Cnt);
+void GUI_DispNextLine (void);
+void GUI_DispString (const char * s);
+void GUI_DispStringAt (const char * s, int x, int y);
+void GUI_DispStringAtCEOL (const char * s, int x, int y);
+void GUI_DispStringHCenterAt (const char * s, int x, int y);
+void GUI__DispStringInRect (const char * s, GUI_RECT * pRect, int TextAlign, int MaxNumChars);
+void GUI_DispStringInRect (const char * s, GUI_RECT * pRect, int TextAlign);
+#if GUI_SUPPORT_ROTATION
+void GUI_DispStringInRectEx (const char * s, GUI_RECT * pRect, int TextAlign, int MaxLen, const GUI_ROTATION * pLCD_Api);
+#endif
+void GUI_DispStringInRectMax (const char * s, GUI_RECT * pRect, int TextAlign, int MaxLen); /* Not to be doc. */
+void GUI_DispStringInRectWrap (const char * s, GUI_RECT * pRect, int TextAlign, GUI_WRAPMODE WrapMode); /* Not to be doc. */
+#if GUI_SUPPORT_ROTATION
+void GUI_DispStringInRectWrapEx(const char * s, GUI_RECT * pRect, int TextAlign, GUI_WRAPMODE WrapMode, const GUI_ROTATION * pLCD_Api);
+#endif
+void GUI_DispStringLen (const char * s, int Len);
+void GUI_GetTextExtend (GUI_RECT* pRect, const char * s, int Len);
+int GUI_GetYAdjust (void);
+int GUI_GetDispPosX (void);
+int GUI_GetDispPosY (void);
+const GUI_FONT * GUI_GetFont (void);
+int GUI_GetCharDistX (U16 c);
+int GUI_GetCharDistXEx (U16 c, int * pSizeX);
+int GUI_GetStringDistX (const char * s);
+GUI_DRAWMODE GUI_GetDrawMode (void);
+int GUI_GetFontDistY (void);
+int GUI_GetFontSizeY (void);
+void GUI_GetFontInfo (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+void GUI_GetOrg (int * px, int * py);
+int GUI_GetYSizeOfFont (const GUI_FONT * pFont);
+int GUI_GetYDistOfFont (const GUI_FONT * pFont);
+int GUI_GetTextAlign (void);
+int GUI_GetTextMode (void);
+char GUI_IsInFont (const GUI_FONT * pFont, U16 c);
+U8 GUI_SetClearTextRectMode (unsigned OnOff);
+int GUI_SetTextAlign (int Align);
+int GUI_SetTextMode (int Mode);
+char GUI_SetTextStyle (char Style);
+int GUI_SetLBorder (int x);
+U8 GUI_SetStrikeWidth (U8 StrikeWidth);
+const GUI_FONT * GUI_SetFont (const GUI_FONT * pNewFont);
+char GUI_GotoXY (int x, int y);
+char GUI_GotoX (int x);
+char GUI_GotoY (int y);
+int GUI_WrapGetNumLines (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+int GUI_WrapGetPositions (const char * pText, int xSize, GUI_WRAPMODE WrapMode, int * aPos, int NumItems);
+void GUI_WrapSetSeparators (const U16 * pSep, int NumSeps);
+
+int GUI_GetLeadingBlankCols (U16 c);
+int GUI_GetTrailingBlankCols(U16 c);
+
+
+/*********************************************************************
+*
+* System independent fonts (SIF)
+*/
+void GUI_SIF_CreateFont(const void * pFontData, GUI_FONT * pFont, const GUI_SIF_TYPE * pFontType);
+void GUI_SIF_DeleteFont(GUI_FONT * pFont);
+
+/*********************************************************************
+*
+* External binary fonts (XBF)
+*/
+int GUI_XBF_CreateFont(GUI_FONT * pFont, GUI_XBF_DATA * pXBF, const GUI_XBF_TYPE * pFontType, GUI_XBF_GET_DATA_FUNC * pfGetData, void * pVoid);
+void GUI_XBF_DeleteFont(GUI_FONT * pFont);
+
+/*********************************************************************
+*
+* TrueType support (TTF)
+*/
+int GUI_TTF_CreateFont (GUI_FONT * pFont, GUI_TTF_CS * pCS);
+int GUI_TTF_CreateFontAA (GUI_FONT * pFont, GUI_TTF_CS * pCS);
+void GUI_TTF_DestroyCache (void);
+void GUI_TTF_Done (void);
+int GUI_TTF_GetFamilyName(GUI_FONT * pFont, char * pBuffer, int NumBytes);
+int GUI_TTF_GetStyleName (GUI_FONT * pFont, char * pBuffer, int NumBytes);
+void GUI_TTF_SetCacheSize (unsigned MaxFaces, unsigned MaxSizes, U32 MaxBytes);
+
+/*********************************************************************
+*
+* Resource file support
+*/
+int GUI_LANG_GetLang (void);
+int GUI_LANG_GetNumItems (int IndexLang);
+const char * GUI_LANG_GetText (int IndexText);
+int GUI_LANG_GetTextBuffered (int IndexText, char * pBuffer, int SizeOfBuffer);
+int GUI_LANG_GetTextBufferedEx(int IndexText, int IndexLang, char * pBuffer, int SizeOfBuffer);
+const char * GUI_LANG_GetTextEx (int IndexText, int IndexLang);
+int GUI_LANG_LoadCSV (U8 * pFileData, U32 FileSize);
+int GUI_LANG_LoadCSVEx (GUI_GET_DATA_FUNC * pfGetData, void * p);
+int GUI_LANG_LoadText (U8 * pFileData, U32 FileSize, int IndexLang);
+int GUI_LANG_LoadTextEx (GUI_GET_DATA_FUNC * pfGetData, void * p, int IndexLang);
+int GUI_LANG_SetLang (int IndexLang);
+unsigned GUI_LANG_SetMaxNumLang (unsigned MaxNumLang);
+U16 GUI_LANG_SetSep (U16 Sep);
+
+/*********************************************************************
+*
+* Unicode support
+*/
+int GUI_UC_ConvertUC2UTF8(const U16 * s, int Len, char * pBuffer, int BufferSize);
+int GUI_UC_ConvertUTF82UC(const char * s, int Len, U16 * pBuffer, int BufferSize);
+int GUI_UC_EnableBIDI (int OnOff);
+int GUI_UC_Encode (char * s, U16 Char);
+int GUI_UC_GetCharSize (const char * s);
+U16 GUI_UC_GetCharCode (const char * s);
+void GUI_UC_SetEncodeNone (void);
+void GUI_UC_SetEncodeSJIS (void);
+void GUI_UC_SetEncodeUTF8 (void);
+void GUI_UC_SetBaseDir (int Dir); // Only available with new version of BIDI algorithm (GUI_USE_BIDI2 == 1)
+int GUI_UC_GetBaseDir (void); // Only available with new version of BIDI algorithm (GUI_USE_BIDI2 == 1)
+
+void GUI_UC_DispString(const U16 * s);
+void GUI_UC2DB (U16 Code, U8 * pOut);
+U16 GUI_DB2UC (U8 Byte0, U8 Byte1);
+
+/*********************************************************************
+*
+* Bidi support
+*/
+#define GUI_BIDI_BASEDIR_LTR 0
+#define GUI_BIDI_BASEDIR_RTL 1
+#define GUI_BIDI_BASEDIR_AUTO 2
+
+#define GUI_BIDI_LOG2VIS_CALC 0
+#define GUI_BIDI_LOG2VIS_GETCACHE 1
+
+/*********************************************************************
+*
+* Drawing of binary, decimal and hexadecimal values
+*/
+void GUI_DispBin (U32 v, U8 Len);
+void GUI_DispBinAt(U32 v, I16P x, I16P y, U8 Len);
+void GUI_DispDec (I32 v, U8 Len);
+void GUI_DispDecAt (I32 v, I16P x, I16P y, U8 Len);
+void GUI_DispDecMin(I32 v);
+void GUI_DispDecShift(I32 v, U8 Len, U8 Shift);
+void GUI_DispDecSpace(I32 v, U8 MaxDigits);
+void GUI_DispHex (U32 v, U8 Len);
+void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len);
+void GUI_DispSDec(I32 v, U8 Len);
+void GUI_DispSDecShift(I32 v, U8 Len, U8 Shift);
+
+/*********************************************************************
+*
+* Drawing of floating point values
+*/
+void GUI_DispFloat (float v, char Len);
+void GUI_DispFloatFix (float v, char Len, char Fract);
+void GUI_DispFloatMin (float v, char Fract);
+void GUI_DispSFloatFix(float v, char Len, char Fract);
+void GUI_DispSFloatMin(float v, char Fract);
+
+/*********************************************************************
+*
+* Dynamic memory management
+*/
+typedef struct {
+ U32 TotalBytes;
+ U32 FreeBytes;
+ U32 UsedBytes;
+ U32 AllocSize;
+ U32 NumFixedBytes;
+ U32 MaxUsedBytes;
+} GUI_ALLOC_INFO;
+
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBlocks(void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBytes (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBlocks(void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumUsedBytes (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxUsedBytes (void);
+
+void GUI_ALLOC_GetMemInfo (GUI_ALLOC_INFO * pInfo);
+void GUI_ALLOC_SuppressPeak(int OnOff);
+
+GUI_HMEM GUI_ALLOC_AllocInit (const void * pInitData, GUI_ALLOC_DATATYPE Size);
+GUI_HMEM GUI_ALLOC_AllocNoInit (GUI_ALLOC_DATATYPE size);
+GUI_HMEM GUI_ALLOC_AllocZero (GUI_ALLOC_DATATYPE size);
+void GUI_ALLOC_AssignMemory (void * p, U32 NumBytes);
+void GUI_ALLOC_Free (GUI_HMEM hMem);
+void GUI_ALLOC_FreeFixedBlock (void * p);
+void GUI_ALLOC_FreePtrArray (GUI_HMEM * pArray, int NumElems);
+void GUI_ALLOC_FreePtr (GUI_HMEM * phMem);
+void * GUI_ALLOC_GetFixedBlock (GUI_ALLOC_DATATYPE Size);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxSize (void);
+GUI_ALLOC_DATATYPE GUI_ALLOC_GetSize (GUI_HMEM hMem);
+void * GUI_ALLOC_h2p (GUI_HMEM hMem);
+GUI_HMEM GUI_ALLOC_p2h (void * p);
+void GUI_ALLOC_Init (void);
+void GUI_ALLOC_Lock (void);
+void * GUI_ALLOC_LockH (GUI_HMEM hMem);
+GUI_HMEM GUI_ALLOC_Realloc (GUI_HMEM hOld, int NewSize);
+GUI_ALLOC_DATATYPE GUI_ALLOC_RequestSize (void);
+void GUI_ALLOC_SetAvBlockSize (U32 BlockSize);
+void GUI_ALLOC_Unlock (void);
+void * GUI_ALLOC_UnlockH (void ** pp);
+int GUI_ALLOC_SetMaxPercentage(int MaxPercentage);
+void GUI_ALLOC_Exit (void);
+
+/*********************************************************************
+*
+* Memory devices: GUI_MEMDEV
+*/
+#define GUI_MEMDEV_HASTRANS 0
+#define GUI_MEMDEV_NOTRANS (1 << 0)
+
+typedef GUI_HMEM GUI_MEMDEV_Handle;
+typedef void GUI_CALLBACK_VOID_P (void * p);
+typedef int GUI_ANIMATION_CALLBACK_FUNC(int TimeRem, void * pVoid);
+typedef void GUI_DRAWMEMDEV_16BPP_FUNC (void * pDst, const void * pSrc, int xSize, int ySize, int BytesPerLineDst, int BytesPerLineSrc);
+
+#define GUI_DRAWMEMDEV_FUNC GUI_DRAWMEMDEV_16BPP_FUNC
+
+typedef void GUI_DRAWBITMAP_FUNC (int LayerIndex, int x, int y, const void * p, int xSize, int ySize, int BytesPerLine);
+
+int GUI_SetFuncDrawAlpha(GUI_DRAWMEMDEV_FUNC * pfDrawMemdevFunc, GUI_DRAWBITMAP_FUNC * pfDrawBitmapFunc);
+int GUI_SetFuncDrawM565 (GUI_DRAWMEMDEV_FUNC * pfDrawMemdevFunc, GUI_DRAWBITMAP_FUNC * pfDrawBitmapFunc);
+
+extern GUI_ANIMATION_CALLBACK_FUNC * GUI_MEMDEV__pCbAnimation;
+extern void * GUI_MEMDEV__pVoid;
+
+extern void (* GUI_MEMDEV__pfMEMDEV_Write) (GUI_MEMDEV_Handle hMem);
+extern void (* GUI_MEMDEV__pfMEMDEV_CopyToLCD)(GUI_MEMDEV_Handle hMem);
+
+typedef struct {
+ GUI_RECT rView, rPrev;
+ char FirstCall;
+} GUI_AUTODEV;
+
+typedef struct {
+ char DrawFixed;
+ char IsMeasurement;
+} GUI_AUTODEV_INFO;
+
+int GUI_MEMDEV_CreateAuto(GUI_AUTODEV * pAutoDev);
+void GUI_MEMDEV_DeleteAuto(GUI_AUTODEV * pAutoDev);
+int GUI_MEMDEV_DrawAuto (GUI_AUTODEV * pAutoDev, GUI_AUTODEV_INFO * pAutoDevInfo, GUI_CALLBACK_VOID_P * pfDraw, void * pData);
+
+/* Create a memory device which is compatible to the selected LCD */
+GUI_MEMDEV_Handle GUI_MEMDEV_Create (int x0, int y0, int xSize, int ySize);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateEx (int x0, int y0, int xSize, int ySize, int Flags);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateFixed (int x0, int y0, int xSize, int ySize, int Flags,
+ const GUI_DEVICE_API * pDeviceAPI,
+ const LCD_API_COLOR_CONV * pColorConvAPI);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateFixed32(int x0, int y0, int xSize, int ySize);
+
+void GUI_MEMDEV_Clear (GUI_MEMDEV_Handle hMem);
+int GUI_MEMDEV_ClearAlpha (GUI_MEMDEV_Handle hMemData, GUI_MEMDEV_Handle hMemMask);
+void GUI_MEMDEV_CopyFromLCD (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyFromLCDAA (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCD (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCDAA (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_CopyToLCDAt (GUI_MEMDEV_Handle hMem, int x, int y);
+int GUI_MEMDEV_CompareWithLCD (GUI_MEMDEV_Handle hMem, int * px, int * py, int * pExp, int * pAct);
+void GUI_MEMDEV_Delete (GUI_MEMDEV_Handle MemDev);
+void GUI_MEMDEV_DrawPerspectiveX (GUI_MEMDEV_Handle hMem, int x, int y, int h0, int h1, int dx, int dy);
+int GUI_MEMDEV_GetXPos (GUI_MEMDEV_Handle hMem);
+int GUI_MEMDEV_GetXSize (GUI_MEMDEV_Handle hMem);
+int GUI_MEMDEV_GetYPos (GUI_MEMDEV_Handle hMem);
+int GUI_MEMDEV_GetYSize (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_MarkDirty (GUI_MEMDEV_Handle hMem, int x0, int y0, int x1, int y1);
+void GUI_MEMDEV_ReduceYSize (GUI_MEMDEV_Handle hMem, int YSize);
+void GUI_MEMDEV_Rotate (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateAlpha (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U8 Alpha);
+void GUI_MEMDEV_RotateHR (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag);
+void GUI_MEMDEV__Rotate (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U32 Mask);
+void GUI_MEMDEV__RotateHR (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag, U32 Mask);
+void GUI_MEMDEV_RotateHQ (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQAlpha (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag, U8 Alpha);
+void GUI_MEMDEV_RotateHQHR (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, I32 dx, I32 dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQT (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+void GUI_MEMDEV_RotateHQTI (GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
+GUI_MEMDEV_Handle GUI_MEMDEV_Select (GUI_MEMDEV_Handle hMem); /* Select (activate) a particular memory device. */
+void GUI_MEMDEV_SetOrg (GUI_MEMDEV_Handle hMem, int x0, int y0);
+void GUI_MEMDEV_WriteAt (GUI_MEMDEV_Handle hMem, int x, int y);
+void GUI_MEMDEV_Write (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_WriteAlphaAt (GUI_MEMDEV_Handle hMem, int Alpha, int x, int y);
+void GUI_MEMDEV_WriteAlpha (GUI_MEMDEV_Handle hMem, int Alpha);
+void GUI_MEMDEV_WriteExAt (GUI_MEMDEV_Handle hMem, int x, int y, int xMag, int yMag, int Alpha);
+void GUI_MEMDEV_WriteEx (GUI_MEMDEV_Handle hMem, int xMag, int yMag, int Alpha);
+void GUI_MEMDEV_WriteOpaque (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_WriteOpaqueAt (GUI_MEMDEV_Handle hMem, int x, int y);
+int GUI_MEMDEV_Draw (GUI_RECT * pRect, GUI_CALLBACK_VOID_P * pfDraw, void * pData, int NumLines, int Flags);
+void* GUI_MEMDEV_GetDataPtr (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV_SetColorConv (GUI_MEMDEV_Handle hMem, const LCD_API_COLOR_CONV * pColorConvAPI);
+const LCD_API_COLOR_CONV * GUI_MEMDEV_GetColorConv(GUI_MEMDEV_Handle hMemDev);
+int GUI_MEMDEV_GetBitsPerPixel (GUI_MEMDEV_Handle hMemDev);
+int GUI_MEMDEV_FadeInDevices (GUI_MEMDEV_Handle hMem0, GUI_MEMDEV_Handle hMem1, int Period);
+int GUI_MEMDEV_FadeOutDevices (GUI_MEMDEV_Handle hMem0, GUI_MEMDEV_Handle hMem1, int Period);
+void GUI_MEMDEV_SerializeBMP (GUI_MEMDEV_Handle hDev, GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p);
+void GUI_MEMDEV_SetAnimationCallback(GUI_ANIMATION_CALLBACK_FUNC * pCbAnimation, void * pVoid);
+void GUI_MEMDEV__FadeDevice (GUI_MEMDEV_Handle hMemWin, GUI_MEMDEV_Handle hMemBk, GUI_MEMDEV_Handle hMemDst, U8 Intens);
+void GUI_MEMDEV__FadeDeviceEx (GUI_MEMDEV_Handle hMemWin, GUI_MEMDEV_Handle hMemBk, GUI_MEMDEV_Handle hMemDst, U8 Intens, int xPosWin, int yPosWin);
+int GUI_MEMDEV_PunchOutDevice (GUI_MEMDEV_Handle hMemData, GUI_MEMDEV_Handle hMemMask);
+void GUI_MEMDEV_SetTimePerFrame (unsigned TimePerFrame);
+int GUI_MEMDEV_MULTIBUF_Enable (int OnOff);
+
+void GUI_SelectLCD(void);
+
+/* Blurring, dithering and blending */
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32 (GUI_MEMDEV_Handle hMem, U8 Depth);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32HQ(GUI_MEMDEV_Handle hMem, U8 Depth);
+GUI_MEMDEV_Handle GUI_MEMDEV_CreateBlurredDevice32LQ(GUI_MEMDEV_Handle hMem, U8 Depth);
+void GUI_MEMDEV_SetBlurHQ (void);
+void GUI_MEMDEV_SetBlurLQ (void);
+int GUI_MEMDEV_BlendColor32 (GUI_MEMDEV_Handle hMem, U32 BlendColor, U8 BlendIntens);
+int GUI_MEMDEV_Dither32 (GUI_MEMDEV_Handle hMem, const LCD_API_COLOR_CONV * pColorConvAPI);
+
+/* Optional custom drawing of 16bpp memory devices */
+void GUI_MEMDEV_SetDrawMemdev16bppFunc(GUI_DRAWMEMDEV_16BPP_FUNC * pfDrawMemdev16bppFunc);
+
+/*********************************************************************
+*
+* Alpha blending
+*/
+typedef struct {
+ U32 UserAlpha;
+} GUI_ALPHA_STATE;
+
+#define GUI_MAKE_ALPHA(Alpha, Color) ((U32)(((U32)Alpha << 24) | (Color & 0xFFFFFF)))
+
+unsigned GUI_EnableAlpha (unsigned OnOff);
+U32 GUI_RestoreUserAlpha (GUI_ALPHA_STATE * pAlphaState);
+unsigned GUI_SetAlpha (U8 Alpha);
+U32 GUI_SetUserAlpha (GUI_ALPHA_STATE * pAlphaState, U32 UserAlpha);
+void (* GUI_SetFuncAlphaBlending(void (* pfAlphaBlending)(LCD_COLOR *, LCD_COLOR *, LCD_COLOR *, U32)))
+ (LCD_COLOR *, LCD_COLOR *, LCD_COLOR *, U32);
+LCD_COLOR (* GUI_SetFuncMixColors (LCD_COLOR (* pFunc)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens)))
+ (LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+void (* GUI_SetFuncMixColorsBulk(void (* pFunc)(U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens)))
+ (U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens);
+unsigned GUI_PreserveTrans (unsigned OnOff);
+
+/*********************************************************************
+*
+* Multi layer support
+*/
+unsigned GUI_SelectLayer(unsigned Index);
+unsigned GUI_GetSelLayer(void);
+
+int GUI_SetLayerPosEx (unsigned Index, int xPos, int yPos);
+int GUI_SetLayerSizeEx (unsigned Index, int xSize, int ySize);
+int GUI_SetLayerVisEx (unsigned Index, int OnOff);
+int GUI_SetLayerAlphaEx(unsigned Index, int Alpha);
+int GUI_GetLayerPosEx (unsigned Index, int * pxPos, int * pyPos);
+
+void GUI_AssignCursorLayer(unsigned Index, unsigned CursorLayer);
+unsigned GUI_GetCursorLayer (unsigned Index);
+
+/*********************************************************************
+*
+* Multiple buffers and display origin
+*/
+void GUI_SetOrg(int x, int y);
+
+void GUI_MULTIBUF_Begin (void);
+void GUI_MULTIBUF_BeginEx (int LayerIndex);
+void GUI_MULTIBUF_End (void);
+void GUI_MULTIBUF_EndEx (int LayerIndex);
+void GUI_MULTIBUF_Config (int NumBuffers);
+void GUI_MULTIBUF_ConfigEx (int LayerIndex, int NumBuffers);
+void GUI_MULTIBUF_Confirm (int Index);
+void GUI_MULTIBUF_ConfirmEx (int LayerIndex, int BufferIndex);
+int GUI_MULTIBUF_GetNumBuffers (void);
+int GUI_MULTIBUF_GetNumBuffersEx(int LayerIndex);
+void GUI_MULTIBUF_SetLayerMask (U32 LayerMask);
+void GUI_MULTIBUF_UseSingleBuffer(void);
+
+/*********************************************************************
+*
+* emWinSPY
+*/
+int GUI_SPY_Process (GUI_tSend pfSend, GUI_tRecv pfRecv, void * pConnectInfo);
+void GUI_SPY_SetMemHandler(GUI_tMalloc pMalloc, GUI_tFree pFree);
+int GUI_SPY_StartServer (void);
+int GUI_SPY_StartServerEx(int (* pGUI_SPY_X_StartServer)(void));
+int GUI_SPY_X_StartServer(void);
+
+/*********************************************************************
+*
+* QR-Codes
+*/
+#define GUI_QR_ECLEVEL_L 0
+#define GUI_QR_ECLEVEL_M 1
+#define GUI_QR_ECLEVEL_Q 2
+#define GUI_QR_ECLEVEL_H 3
+
+typedef struct {
+ int Version; // Version according to QR code documentation
+ int Width; // Number of 'Modules'
+ int Size; // Size of bitmap in pixels
+} GUI_QR_INFO;
+
+GUI_HMEM GUI_QR_Create (const char * pText, int PixelSize, int EccLevel, int Version);
+void GUI_QR_Draw (GUI_HMEM hQR, int xPos, int yPos);
+void GUI_QR_GetInfo(GUI_HMEM hQR, GUI_QR_INFO * pInfo);
+void GUI_QR_Delete (GUI_HMEM hQR);
+
+/*********************************************************************
+*
+* Basics for animations
+*/
+#define ANIM_LINEAR GUI_ANIM__Linear
+#define ANIM_ACCEL GUI_ANIM__Accel
+#define ANIM_DECEL GUI_ANIM__Decel
+#define ANIM_ACCELDECEL GUI_ANIM__AccelDecel
+
+#define GUI_ANIM_START 0
+#define GUI_ANIM_RUNNING 1
+#define GUI_ANIM_END 2
+
+#ifndef GUI_ANIM_RANGE
+ #define GUI_ANIM_RANGE 32767L
+#endif
+
+typedef GUI_HMEM GUI_ANIM_HANDLE;
+
+typedef I32 (* GUI_ANIM_GETPOS_FUNC)(GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+
+typedef struct {
+ int Pos;
+ int State;
+ GUI_ANIM_HANDLE hAnim;
+ GUI_TIMER_TIME Period;
+} GUI_ANIM_INFO;
+
+typedef void GUI_ANIMATION_FUNC(GUI_ANIM_INFO * pInfo, void * pVoid);
+
+I32 GUI_ANIM__Linear (GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+I32 GUI_ANIM__Decel (GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+I32 GUI_ANIM__Accel (GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+I32 GUI_ANIM__AccelDecel(GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_TIMER_TIME tNow);
+
+int GUI_ANIM_AddItem(GUI_ANIM_HANDLE hAnim, GUI_TIMER_TIME ts, GUI_TIMER_TIME te, GUI_ANIM_GETPOS_FUNC pfGetPos, void * pVoid, GUI_ANIMATION_FUNC * pfAnim);
+GUI_ANIM_HANDLE GUI_ANIM_Create (GUI_TIMER_TIME Period, unsigned MinTimePerFrame, void * pVoid, void (* pfSliceInfo)(int State, void * _pVoid));
+void GUI_ANIM_Delete (GUI_ANIM_HANDLE hAnim);
+int GUI_ANIM_Exec (GUI_ANIM_HANDLE hAnim);
+void GUI_ANIM_Start (GUI_ANIM_HANDLE hAnim);
+void GUI_ANIM_StartEx(GUI_ANIM_HANDLE hAnim, int NumLoops, void (* pfOnDelete)(void * pVoid));
+void GUI_ANIM_Stop (GUI_ANIM_HANDLE hAnim);
+
+/*********************************************************************
+*
+* Display orientation
+*/
+/*********************************************************************
+*
+* GUI_ORIENTATION_API
+*/
+typedef struct {
+ void (* pfDrawBitmap )(GUI_DEVICE * pDevice, int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+ void (* pfDrawHLine )(GUI_DEVICE * pDevice, int x0, int y0, int x1);
+ void (* pfDrawVLine )(GUI_DEVICE * pDevice, int x , int y0, int y1);
+ void (* pfFillRect )(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1);
+ LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE * pDevice, int x, int y);
+ void (* pfSetPixelIndex)(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX ColorIndex);
+ void (* pfXorPixel )(GUI_DEVICE * pDevice, int x, int y);
+ int BytesPerPixel;
+} GUI_ORIENTATION_API;
+
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C0;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C8;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C16;
+extern const GUI_ORIENTATION_API GUI_OrientationAPI_C32;
+
+#define GUI_ORIENTATION_C0 &GUI_OrientationAPI_C0
+#define GUI_ORIENTATION_C8 &GUI_OrientationAPI_C8
+#define GUI_ORIENTATION_C16 &GUI_OrientationAPI_C16
+#define GUI_ORIENTATION_C32 &GUI_OrientationAPI_C32
+
+int GUI_SetOrientation (int Orientation);
+int GUI_SetOrientationEx (int Orientation, int LayerIndex);
+int GUI_SetOrientationExCached(int Orientation, int LayerIndex, const GUI_ORIENTATION_API * pAPI);
+
+/*********************************************************************
+*
+* Measure device: GUI_MEASDEV
+*/
+typedef GUI_HMEM GUI_MEASDEV_Handle;
+
+GUI_MEASDEV_Handle GUI_MEASDEV_Create (void);
+void GUI_MEASDEV_Delete (GUI_MEASDEV_Handle hMemDev);
+void GUI_MEASDEV_Select (GUI_MEASDEV_Handle hMem);
+void GUI_MEASDEV_GetRect(GUI_MEASDEV_Handle hMem, GUI_RECT * pRect);
+void GUI_MEASDEV_ClearRect(GUI_MEASDEV_Handle hMem);
+
+/*********************************************************************
+*
+* Polygon helpers
+*/
+void GUI_RotatePolygon (GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, float Angle);
+void GUI_MagnifyPolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, int Mag);
+void GUI_EnlargePolygon(GUI_POINT * pDest, const GUI_POINT * pSrc, int NumPoints, int Len);
+
+/*********************************************************************
+*
+* Streamed bitmaps
+*/
+#define GUI_BITMAPSTREAM_GET_BUFFER 1
+#define GUI_BITMAPSTREAM_RELEASE_BUFFER 2
+#define GUI_BITMAPSTREAM_MODIFY_PALETTE 3
+
+#define DECLARE_CREATE_FROM_STREAM(ID) int GUI_CreateBitmapFromStream##ID(GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const void * p);
+
+DECLARE_CREATE_FROM_STREAM(IDX)
+DECLARE_CREATE_FROM_STREAM(RLE4)
+DECLARE_CREATE_FROM_STREAM(RLE8)
+DECLARE_CREATE_FROM_STREAM(565)
+DECLARE_CREATE_FROM_STREAM(M565)
+DECLARE_CREATE_FROM_STREAM(555)
+DECLARE_CREATE_FROM_STREAM(M555)
+DECLARE_CREATE_FROM_STREAM(A565)
+DECLARE_CREATE_FROM_STREAM(AM565)
+DECLARE_CREATE_FROM_STREAM(A555)
+DECLARE_CREATE_FROM_STREAM(AM555)
+DECLARE_CREATE_FROM_STREAM(RLE16)
+DECLARE_CREATE_FROM_STREAM(RLEM16)
+DECLARE_CREATE_FROM_STREAM(24)
+DECLARE_CREATE_FROM_STREAM(Alpha)
+DECLARE_CREATE_FROM_STREAM(M8888I)
+DECLARE_CREATE_FROM_STREAM(RLEAlpha)
+DECLARE_CREATE_FROM_STREAM(RLE32)
+DECLARE_CREATE_FROM_STREAM(444_12)
+DECLARE_CREATE_FROM_STREAM(M444_12)
+DECLARE_CREATE_FROM_STREAM(444_12_1)
+DECLARE_CREATE_FROM_STREAM(M444_12_1)
+DECLARE_CREATE_FROM_STREAM(444_16)
+DECLARE_CREATE_FROM_STREAM(M444_16)
+
+int GUI_CreateBitmapFromStream (GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const void * p);
+void GUI_DrawStreamedBitmap (const void * p, int x, int y);
+void GUI_DrawStreamedBitmapAuto (const void * p, int x, int y);
+int GUI_DrawStreamedBitmapEx (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapExAuto (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmap555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapM555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmap565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapM565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapA555Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapAM555Ex(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapA565Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmapAM565Ex(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+int GUI_DrawStreamedBitmap24Ex (GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+void GUI_GetStreamedBitmapInfo (const void * p, GUI_BITMAPSTREAM_INFO * pInfo);
+int GUI_GetStreamedBitmapInfoEx (GUI_GET_DATA_FUNC * pfGetData, const void * p, GUI_BITMAPSTREAM_INFO * pInfo);
+void GUI_SetStreamedBitmapHook (GUI_BITMAPSTREAM_CALLBACK pfStreamedBitmapHook);
+
+void LCD__RLE4_SetFunc (GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off, const LCD_LOGPALETTE * pLogPal);
+void LCD__RLE8_SetFunc (GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off, const LCD_LOGPALETTE * pLogPal);
+void LCD__RLE16_SetFunc(GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off);
+void LCD__RLE32_SetFunc(GUI_GET_DATA_FUNC * pfGetData, void * pVoid, U32 Off);
+
+/*********************************************************************
+*
+* BMP-export
+*/
+void GUI_BMP_Serialize (GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p);
+void GUI_BMP_SerializeEx (GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p);
+void GUI_BMP_SerializeExBpp(GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p, int BitsPerPixel);
+
+void GUI_BMP__WriteBitmapHeader(GUI_CALLBACK_VOID_U8_P * pfSerialize, int xSize, int ySize, void * p, int BitsPerPixel, int BytesPerLine, int BytesPerPixel, int NumColors, int Padding);
+
+/*********************************************************************
+*
+* Time / execution related routines
+*/
+void GUI_Delay (int Period);
+GUI_TIMER_TIME GUI_GetTime (void);
+int GUI_GetTimeSlice(void);
+int GUI_Exec (void); /* Execute all jobs ... Return 0 if nothing was done. */
+int GUI_Exec1 (void); /* Execute one job ... Return 0 if nothing was done. */
+void GUI_SetTimeSlice(int TimeSlice);
+
+/*********************************************************************
+*
+* MessageBox
+*/
+int GUI_MessageBox (const char * sMessage, const char * sCaption, int Flags);
+#define GUI_MESSAGEBOX_CF_MOVEABLE (1 << 0)
+#define GUI_MESSAGEBOX_CF_MODAL (1 << 1)
+
+#define GUI_MB_OK 20
+#define GUI_MB_WARNING 21
+
+/*********************************************************************
+*
+* GUI_TIMER module
+*/
+#define GUI_TIMER_CF_WINDOW (1 << 0)
+#define GUI_TIMER_CF_CURSOR (1 << 1)
+
+typedef GUI_HMEM GUI_TIMER_HANDLE;
+
+typedef struct {
+ GUI_TIMER_TIME Time;
+ PTR_ADDR Context;
+ GUI_TIMER_HANDLE hTimer;
+} GUI_TIMER_MESSAGE;
+
+typedef void GUI_TIMER_CALLBACK(/*const*/ GUI_TIMER_MESSAGE* pTM);
+
+GUI_TIMER_HANDLE GUI_TIMER_Create (GUI_TIMER_CALLBACK * cb, GUI_TIMER_TIME Time, PTR_ADDR Context, U16 Flags);
+void GUI_TIMER_Delete (GUI_TIMER_HANDLE hObj);
+
+/* Methods changing properties */
+GUI_TIMER_TIME GUI_TIMER_GetPeriod(GUI_TIMER_HANDLE hObj);
+void GUI_TIMER_SetPeriod(GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period);
+void GUI_TIMER_SetTime (GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Period);
+void GUI_TIMER_SetDelay (GUI_TIMER_HANDLE hObj, GUI_TIMER_TIME Delay);
+void GUI_TIMER_Restart (GUI_TIMER_HANDLE hObj);
+int GUI_TIMER_GetFlag (GUI_TIMER_HANDLE hObj, int Flag); /* Not to be documented */
+int GUI_TIMER_Exec (void);
+
+/*********************************************************************
+*
+* Anti Aliasing
+*/
+#define GUI_AA_TRANS 0 // Foreground color mixed up with current content of framebuffer
+#define GUI_AA_NOTRANS 1 // Foreground color mixed up with current background color
+
+void GUI_AA_DisableHiRes (void);
+void GUI_AA_EnableHiRes (void);
+int GUI_AA_GetFactor (void);
+void GUI_AA_SetFactor (int Factor);
+void GUI_AA_DrawArc (int x0, int y0, int rx, int ry, int a0, int a1);
+void GUI_AA_DrawCircle (int x0, int y0, int r); // Currently not implemented, only for Dave2D
+void GUI_AA_DrawLine (int x0, int y0, int x1, int y1);
+void GUI_AA_DrawPolyOutline (const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y);
+void GUI_AA_DrawPolyOutlineEx(const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y, GUI_POINT * pBuffer);
+void GUI_AA_DrawRoundedRect (int x0, int y0, int x1, int y1, int r);
+void GUI_AA_DrawRoundedRectEx(GUI_RECT * pRect, int r);
+void GUI_AA_FillCircle (int x0, int y0, int r);
+void GUI_AA_FillEllipse (int x0, int y0, int rx, int ry);
+void GUI_AA_FillPolygon (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GUI_AA_FillRoundedRect (int x0, int y0, int x1, int y1, int r);
+void GUI_AA_FillRoundedRectEx(GUI_RECT * pRect, int r);
+int GUI_AA_SetDrawMode (int Mode);
+void GUI_AA_SetpfDrawCharAA4 (int (* pfDrawChar)(int LayerIndex, int x, int y, U8 const * p, int xSize, int ySize, int BytesPerLine));
+void GUI_AA_SetGammaAA4 (U8 * pGamma);
+void GUI_AA_GetGammaAA4 (U8 * pGamma);
+void GUI_AA_EnableGammaAA4 (int OnOff);
+
+#define GUI_AA_PreserveTrans(OnOff) GUI_PreserveTrans(OnOff) // For compatibility only
+
+void GUI_AA_SetFuncDrawArc (int (* pfDrawArc) (int x0, int y0, int rx, int ry, int a0, int a1));
+void GUI_AA_SetFuncDrawCircle (int (* pfDrawCircle) (int x0, int y0, int r));
+void GUI_AA_SetFuncDrawLine (int (* pfDrawLine) (int x0, int y0, int x1, int y1));
+void GUI_AA_SetFuncDrawPolyOutline(int (* pfDrawPolyOutline)(const GUI_POINT * pSrc, int NumPoints, int Thickness, int x, int y));
+void GUI_AA_SetFuncFillCircle (int (* pfFillCircle) (int x0, int y0, int r));
+void GUI_AA_SetFuncFillPolygon (int (* pfFillPolygon)(const GUI_POINT * pPoints, int NumPoints, int x0, int y0));
+
+/*********************************************************************
+*
+* Keyboard
+*/
+/* Message layer */
+void GUI_StoreKeyMsg(int Key, int Pressed);
+void GUI_SendKeyMsg (int Key, int Pressed);
+int GUI_PollKeyMsg (void);
+void GUI_GetKeyState(GUI_KEY_STATE * pState);
+
+void GUI_KEY__SetHook(void (* pfHook)(const GUI_KEY_STATE *));
+
+/* Application layer */
+int GUI_GetKey(void);
+int GUI_WaitKey(void);
+void GUI_StoreKey(int c);
+void GUI_ClearKeyBuffer(void);
+
+/*********************************************************************
+*
+* Task synchronization
+*/
+void GUI_WaitEvent (void);
+void GUI_SignalEvent (void);
+void GUI_SetSignalEventFunc (GUI_SIGNAL_EVENT_FUNC pfSignalEvent);
+void GUI_SetWaitEventFunc (GUI_WAIT_EVENT_FUNC pfWaitEvent);
+void GUI_SetWaitEventTimedFunc(GUI_WAIT_EVENT_TIMED_FUNC pfWaitEventTimed);
+
+/*********************************************************************
+*
+* Joystick, generic
+*/
+void GUI_JOYSTICK_StoreState(const GUI_PID_STATE * pState);
+
+/*********************************************************************
+*
+* PID (Pointer input device ... mouse/touch)
+*/
+void GUI_PID_StoreState (const GUI_PID_STATE * pState);
+int GUI_PID_GetState ( GUI_PID_STATE * pState);
+void GUI_PID_GetCurrentState( GUI_PID_STATE * pState);
+int GUI_PID_IsEmpty (void);
+int GUI_PID_IsPressed (void);
+void GUI_PID_RegisterHook (GUI_REGISTER_HOOK * pRegisterHook);
+void GUI_PID_SetHook (void (* pfHook)( GUI_PID_STATE *)); // Public
+void GUI_PID__SetHook (void (* pfHook)(const GUI_PID_STATE *)); // Private
+
+/*********************************************************************
+*
+* Mouse, generic
+*/
+int GUI_MOUSE_GetState ( GUI_PID_STATE * pState);
+void GUI_MOUSE_StoreState(const GUI_PID_STATE * pState);
+
+/*********************************************************************
+*
+* TOUCH screen, generic
+*/
+int GUI_TOUCH_GetLayer (void);
+int GUI_TOUCH_GetState (GUI_PID_STATE * pState);
+void GUI_TOUCH_GetUnstable (int * px, int * py); /* for diagnostics only */
+void GUI_TOUCH_SetLayer (int Layer);
+void GUI_TOUCH_StoreState (int x, int y);
+void GUI_TOUCH_StoreStateEx (const GUI_PID_STATE * pState);
+void GUI_TOUCH_StoreUnstable(int x, int y);
+
+/*********************************************************************
+*
+* Mouse, PS2 driver
+*/
+void GUI_MOUSE_DRIVER_PS2_Init(void); /* optional */
+void GUI_MOUSE_DRIVER_PS2_OnRx(unsigned char Data);
+
+/*********************************************************************
+*
+* TOUCH screen, analog driver
+*/
+int GUI_TOUCH_CalcCoefficients (int NumPoints, int * pxRef, int * pyRef, int * pxSample, int * pySample, int xSize, int ySize);
+int GUI_TOUCH_Calibrate (int Coord, int Log0, int Log1, int Phys0, int Phys1);
+int GUI_TOUCH_CalibratePoint (int * px, int * py);
+void GUI_TOUCH_EnableCalibration(int OnOff);
+void GUI_TOUCH_Exec (void);
+int GUI_TOUCH_GetxPhys (void); /* for diagnostics only */
+int GUI_TOUCH_GetyPhys (void); /* for diagnostics only */
+void GUI_TOUCH_SetCalibration (int (* pFunc)(int *, int *)); /* Not to be documented */
+void GUI_TOUCH_SetOrientation (unsigned Orientation);
+int GUI_TOUCH_TransformPoint (int * px, int * py); /* Not to be documented */
+
+/*********************************************************************
+*
+* TOUCH: imports
+*
+* Please note: The following functions are required by the module.
+* They need to be part of your application software (or rather, part
+* of the hardware-layer of your software).
+*/
+void GUI_TOUCH_X_ActivateX(void);
+void GUI_TOUCH_X_ActivateY(void);
+void GUI_TOUCH_X_Disable (void);
+int GUI_TOUCH_X_MeasureX (void);
+int GUI_TOUCH_X_MeasureY (void);
+
+/*********************************************************************
+*
+* GUI_X_
+*
+* Externals, to be defined by application
+*
+* The externals defined below should be defined by the
+* application. They are per default contained in the module
+* GUI_X.c.
+* Note that a lot if not all of these are not required in most target
+* systems.
+* For this module, samples are available for configurations
+* with or without operating system.
+*/
+//
+// Configuration
+//
+void GUI_X_Config(void);
+void GUI_X_Init (void);
+
+//
+// Timing routines
+//
+GUI_TIMER_TIME GUI_X_GetTime(void);
+void GUI_X_Delay (int Period);
+
+//
+// Multitask routines - required only if multitasking is used (#define GUI_OS 1)
+//
+void GUI_X_Unlock (void);
+void GUI_X_Lock (void);
+U32 GUI_X_GetTaskId(void);
+void GUI_X_InitOS (void);
+
+//
+// Event driving (optional with multitasking)
+//
+void GUI_X_ExecIdle (void);
+void GUI_X_WaitEvent (void);
+void GUI_X_WaitEventTimed(int Period);
+void GUI_X_SignalEvent (void);
+
+//
+// Recording (logs/warnings and errors) - required only for higher levels
+//
+void GUI_X_Log (const char * s);
+void GUI_X_Warn (const char * s);
+void GUI_X_ErrorOut(const char * s);
+
+/*********************************************************************
+*
+* Constants for fonts and bitmaps
+*/
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE4;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE4Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE8;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE8Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE16Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEM16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEM16Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE32;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLE32Ex;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsRLEAlpha;
+
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_12;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_12;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_12_1;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_12_1;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods444_16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM444_16;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods24;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethods8888;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsM8888I;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsA565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsAM565;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsA555;
+extern const GUI_BITMAP_METHODS GUI_BitmapMethodsAM555;
+
+#define GUI_COMPRESS_RLE4 0
+#define GUI_COMPRESS_RLE8 0
+
+#define GUI_DRAW_RLE4 &GUI_BitmapMethodsRLE4 /* Method table ! */
+#define GUI_DRAW_RLE8 &GUI_BitmapMethodsRLE8 /* Method table ! */
+#define GUI_DRAW_RLE16 &GUI_BitmapMethodsRLE16 /* Method table ! */
+#define GUI_DRAW_RLEM16 &GUI_BitmapMethodsRLEM16 /* Method table ! */
+#define GUI_DRAW_RLE32 &GUI_BitmapMethodsRLE32 /* Method table ! */
+#define GUI_DRAW_RLEALPHA &GUI_BitmapMethodsRLEAlpha /* Method table ! */
+
+#define GUI_DRAW_BMP444_12 &GUI_BitmapMethods444_12 /* Method table ! */
+#define GUI_DRAW_BMPM444_12 &GUI_BitmapMethodsM444_12 /* Method table ! */
+#define GUI_DRAW_BMP444_12_1 &GUI_BitmapMethods444_12_1 /* Method table ! */
+#define GUI_DRAW_BMPM444_12_1 &GUI_BitmapMethodsM444_12_1 /* Method table ! */
+#define GUI_DRAW_BMP444_16 &GUI_BitmapMethods444_16 /* Method table ! */
+#define GUI_DRAW_BMPM444_16 &GUI_BitmapMethodsM444_16 /* Method table ! */
+#define GUI_DRAW_BMP555 &GUI_BitmapMethods555 /* Method table ! */
+#define GUI_DRAW_BMPM555 &GUI_BitmapMethodsM555 /* Method table ! */
+#define GUI_DRAW_BMP565 &GUI_BitmapMethods565 /* Method table ! */
+#define GUI_DRAW_BMPM565 &GUI_BitmapMethodsM565 /* Method table ! */
+#define GUI_DRAW_BMP24 &GUI_BitmapMethods24 /* Method table ! */
+#define GUI_DRAW_BMP888 &GUI_BitmapMethods888 /* Method table ! */
+#define GUI_DRAW_BMPM888 &GUI_BitmapMethodsM888 /* Method table ! */
+#define GUI_DRAW_BMP8888 &GUI_BitmapMethods8888 /* Method table ! */
+#define GUI_DRAW_BMPM8888I &GUI_BitmapMethodsM8888I /* Method table ! */
+#define GUI_DRAW_BMPA555 &GUI_BitmapMethodsA555 /* Method table ! */
+#define GUI_DRAW_BMPAM555 &GUI_BitmapMethodsAM555 /* Method table ! */
+#define GUI_DRAW_BMPA565 &GUI_BitmapMethodsA565 /* Method table ! */
+#define GUI_DRAW_BMPAM565 &GUI_BitmapMethodsAM565 /* Method table ! */
+
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_Ext;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_Frm;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA2;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA4;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA2_EXT;
+extern const tGUI_SIF_APIList GUI_SIF_APIList_Prop_AA4_EXT;
+
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_Ext;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_Frm;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_AA2_Ext;
+extern const tGUI_XBF_APIList GUI_XBF_APIList_Prop_AA4_Ext;
+
+/*********************************************************************
+*
+* GUI_KEY_...
+*
+* These ID values are basically meant to be used with widgets
+* Note that we have chosen the values to be close to existing
+* "standards", so do not change them unless forced to.
+*
+*/
+#define GUI_KEY_BACKSPACE 8 /* ASCII: BACKSPACE Crtl-H */
+#define GUI_KEY_TAB 9 /* ASCII: TAB Crtl-I */
+#define GUI_KEY_BACKTAB 10
+#define GUI_KEY_ENTER 13 /* ASCII: ENTER Crtl-M */
+#define GUI_KEY_LEFT 16
+#define GUI_KEY_UP 17
+#define GUI_KEY_RIGHT 18
+#define GUI_KEY_DOWN 19
+#define GUI_KEY_HOME 23
+#define GUI_KEY_END 24
+#define GUI_KEY_SHIFT 25
+#define GUI_KEY_CONTROL 26
+#define GUI_KEY_ESCAPE 27 /* ASCII: ESCAPE 0x1b */
+#define GUI_KEY_INSERT 29
+#define GUI_KEY_DELETE 30
+#define GUI_KEY_SPACE 32
+#define GUI_KEY_PGUP 33
+#define GUI_KEY_PGDOWN 34
+
+#define GUI_KEY_F1 40
+#define GUI_KEY_F2 41
+
+/*********************************************************************
+*
+* Dialog item IDs
+*
+* The IDs below are arbitrary values. They just have to be unique
+* within the dialog.
+*
+* If you use your own Ids, we recommend to use values above GUI_ID_USER.
+*/
+#define GUI_ID_OK 1
+#define GUI_ID_CANCEL 2
+#define GUI_ID_YES 3
+#define GUI_ID_NO 4
+#define GUI_ID_CLOSE 5
+#define GUI_ID_HELP 6
+#define GUI_ID_MAXIMIZE 7
+#define GUI_ID_MINIMIZE 8
+
+#define GUI_ID_VSCROLL 0xFE
+#define GUI_ID_HSCROLL 0xFF
+
+#define GUI_ID_EDIT0 0x100
+#define GUI_ID_EDIT1 0x101
+#define GUI_ID_EDIT2 0x102
+#define GUI_ID_EDIT3 0x103
+#define GUI_ID_EDIT4 0x104
+#define GUI_ID_EDIT5 0x105
+#define GUI_ID_EDIT6 0x106
+#define GUI_ID_EDIT7 0x107
+#define GUI_ID_EDIT8 0x108
+#define GUI_ID_EDIT9 0x109
+
+#define GUI_ID_LISTBOX0 0x110
+#define GUI_ID_LISTBOX1 0x111
+#define GUI_ID_LISTBOX2 0x112
+#define GUI_ID_LISTBOX3 0x113
+#define GUI_ID_LISTBOX4 0x114
+#define GUI_ID_LISTBOX5 0x115
+#define GUI_ID_LISTBOX6 0x116
+#define GUI_ID_LISTBOX7 0x117
+#define GUI_ID_LISTBOX8 0x118
+#define GUI_ID_LISTBOX9 0x119
+
+#define GUI_ID_CHECK0 0x120
+#define GUI_ID_CHECK1 0x121
+#define GUI_ID_CHECK2 0x122
+#define GUI_ID_CHECK3 0x123
+#define GUI_ID_CHECK4 0x124
+#define GUI_ID_CHECK5 0x125
+#define GUI_ID_CHECK6 0x126
+#define GUI_ID_CHECK7 0x127
+#define GUI_ID_CHECK8 0x128
+#define GUI_ID_CHECK9 0x129
+
+#define GUI_ID_SLIDER0 0x130
+#define GUI_ID_SLIDER1 0x131
+#define GUI_ID_SLIDER2 0x132
+#define GUI_ID_SLIDER3 0x133
+#define GUI_ID_SLIDER4 0x134
+#define GUI_ID_SLIDER5 0x135
+#define GUI_ID_SLIDER6 0x136
+#define GUI_ID_SLIDER7 0x137
+#define GUI_ID_SLIDER8 0x138
+#define GUI_ID_SLIDER9 0x139
+
+#define GUI_ID_SCROLLBAR0 0x140
+#define GUI_ID_SCROLLBAR1 0x141
+#define GUI_ID_SCROLLBAR2 0x142
+#define GUI_ID_SCROLLBAR3 0x143
+
+#define GUI_ID_RADIO0 0x150
+#define GUI_ID_RADIO1 0x151
+#define GUI_ID_RADIO2 0x152
+#define GUI_ID_RADIO3 0x153
+#define GUI_ID_RADIO4 0x154
+#define GUI_ID_RADIO5 0x155
+#define GUI_ID_RADIO6 0x156
+#define GUI_ID_RADIO7 0x157
+
+#define GUI_ID_TEXT0 0x160
+#define GUI_ID_TEXT1 0x161
+#define GUI_ID_TEXT2 0x162
+#define GUI_ID_TEXT3 0x163
+#define GUI_ID_TEXT4 0x164
+#define GUI_ID_TEXT5 0x165
+#define GUI_ID_TEXT6 0x166
+#define GUI_ID_TEXT7 0x167
+#define GUI_ID_TEXT8 0x168
+#define GUI_ID_TEXT9 0x169
+
+#define GUI_ID_BUTTON0 0x170
+#define GUI_ID_BUTTON1 0x171
+#define GUI_ID_BUTTON2 0x172
+#define GUI_ID_BUTTON3 0x173
+#define GUI_ID_BUTTON4 0x174
+#define GUI_ID_BUTTON5 0x175
+#define GUI_ID_BUTTON6 0x176
+#define GUI_ID_BUTTON7 0x177
+#define GUI_ID_BUTTON8 0x178
+#define GUI_ID_BUTTON9 0x179
+
+#define GUI_ID_DROPDOWN0 0x180
+#define GUI_ID_DROPDOWN1 0x181
+#define GUI_ID_DROPDOWN2 0x182
+#define GUI_ID_DROPDOWN3 0x183
+
+#define GUI_ID_MULTIEDIT0 0x190
+#define GUI_ID_MULTIEDIT1 0x191
+#define GUI_ID_MULTIEDIT2 0x192
+#define GUI_ID_MULTIEDIT3 0x193
+
+#define GUI_ID_LISTVIEW0 0x200
+#define GUI_ID_LISTVIEW1 0x201
+#define GUI_ID_LISTVIEW2 0x202
+#define GUI_ID_LISTVIEW3 0x203
+
+#define GUI_ID_PROGBAR0 0x210
+#define GUI_ID_PROGBAR1 0x211
+#define GUI_ID_PROGBAR2 0x212
+#define GUI_ID_PROGBAR3 0x213
+
+#define GUI_ID_GRAPH0 0x220
+#define GUI_ID_GRAPH1 0x221
+#define GUI_ID_GRAPH2 0x222
+#define GUI_ID_GRAPH3 0x223
+
+#define GUI_ID_MULTIPAGE0 0x230
+#define GUI_ID_MULTIPAGE1 0x231
+#define GUI_ID_MULTIPAGE2 0x232
+#define GUI_ID_MULTIPAGE3 0x233
+
+#define GUI_ID_TREEVIEW0 0x240
+#define GUI_ID_TREEVIEW1 0x241
+#define GUI_ID_TREEVIEW2 0x242
+#define GUI_ID_TREEVIEW3 0x243
+
+#define GUI_ID_ICONVIEW0 0x250
+#define GUI_ID_ICONVIEW1 0x251
+#define GUI_ID_ICONVIEW2 0x252
+#define GUI_ID_ICONVIEW3 0x253
+
+#define GUI_ID_LISTWHEEL0 0x260
+#define GUI_ID_LISTWHEEL1 0x261
+#define GUI_ID_LISTWHEEL2 0x262
+#define GUI_ID_LISTWHEEL3 0x263
+
+#define GUI_ID_IMAGE0 0x270
+#define GUI_ID_IMAGE1 0x271
+#define GUI_ID_IMAGE2 0x272
+#define GUI_ID_IMAGE3 0x273
+#define GUI_ID_IMAGE4 0x274
+#define GUI_ID_IMAGE5 0x275
+#define GUI_ID_IMAGE6 0x276
+#define GUI_ID_IMAGE7 0x277
+#define GUI_ID_IMAGE8 0x278
+#define GUI_ID_IMAGE9 0x279
+
+#define GUI_ID_SPINBOX0 0x280
+#define GUI_ID_SPINBOX1 0x281
+#define GUI_ID_SPINBOX2 0x282
+#define GUI_ID_SPINBOX3 0x283
+#define GUI_ID_SPINBOX4 0x284
+#define GUI_ID_SPINBOX5 0x285
+#define GUI_ID_SPINBOX6 0x286
+#define GUI_ID_SPINBOX7 0x287
+#define GUI_ID_SPINBOX8 0x288
+#define GUI_ID_SPINBOX9 0x289
+
+#define GUI_ID_CALENDAR0 0x290
+
+#define GUI_ID_KNOB0 0x300
+#define GUI_ID_KNOB1 0x301
+#define GUI_ID_KNOB2 0x302
+#define GUI_ID_KNOB3 0x303
+#define GUI_ID_KNOB4 0x304
+#define GUI_ID_KNOB5 0x305
+#define GUI_ID_KNOB6 0x306
+#define GUI_ID_KNOB7 0x307
+#define GUI_ID_KNOB8 0x308
+#define GUI_ID_KNOB9 0x309
+
+#define GUI_ID_SWIPELIST0 0x320
+#define GUI_ID_SWIPELIST1 0x321
+#define GUI_ID_SWIPELIST2 0x322
+
+#define GUI_ID_USER 0x800
+
+/*********************************************************************
+*
+* Mouse buttons
+*/
+#define GUI_LBUTTON (1 << 0) /* Left button */
+#define GUI_RBUTTON (1 << 1) /* Right button */
+#define GUI_MBUTTON (1 << 2) /* Middle button */
+#define GUI_DBUTTON (1 << 7) /* Double-click button */
+
+/*********************************************************************
+*
+* Text styles
+*/
+#define GUI_TS_NORMAL (0)
+#define GUI_TS_UNDERLINE (1 << 0)
+#define GUI_TS_STRIKETHRU (1 << 1)
+#define GUI_TS_OVERLINE (1 << 2)
+
+/*********************************************************************
+*
+* Line styles
+*/
+#define GUI_LS_SOLID (0)
+#define GUI_LS_DASH (1)
+#define GUI_LS_DOT (2)
+#define GUI_LS_DASHDOT (3)
+#define GUI_LS_DASHDOTDOT (4)
+
+/*********************************************************************
+*
+* Pen shapes
+*/
+#define GUI_PS_ROUND (0)
+#define GUI_PS_FLAT (1)
+#define GUI_PS_SQUARE (2)
+
+/*********************************************************************
+*
+* Standard colors
+*/
+#define GUI_INVALID_COLOR ((((U32)GUI_TRANS_BYTE) << 24) | 0x12345678ul) /* Invalid color (transparency + determined color) */
+
+#if (GUI_USE_ARGB)
+ #define GUI_MAKE_COLOR(ABGR) (((((U32)ABGR) & 0xFF000000ul) ^ 0xFF000000ul) | ((((U32)ABGR) & 0x00FF0000ul) >> 16) | (((U32)ABGR) & 0x0000FF00ul) | ((((U32)ABGR) & 0x000000FFul) << 16))
+ #define GUI_MAKE_TRANS(Alpha) (255 - (Alpha))
+#else
+ #define GUI_MAKE_COLOR(ABGR) (ABGR)
+ #define GUI_MAKE_TRANS(Alpha) (Alpha)
+#endif
+
+#if (GUI_USE_ARGB)
+ #define GUI_TRANS_BYTE 0x00
+#else
+ #define GUI_TRANS_BYTE 0xFF
+#endif
+
+#define GUI_BLUE GUI_MAKE_COLOR(0x00FF0000)
+#define GUI_GREEN GUI_MAKE_COLOR(0x0000FF00)
+#define GUI_RED GUI_MAKE_COLOR(0x000000FF)
+#define GUI_CYAN GUI_MAKE_COLOR(0x00FFFF00)
+#define GUI_MAGENTA GUI_MAKE_COLOR(0x00FF00FF)
+#define GUI_YELLOW GUI_MAKE_COLOR(0x0000FFFF)
+#define GUI_LIGHTBLUE GUI_MAKE_COLOR(0x00FF8080)
+#define GUI_LIGHTGREEN GUI_MAKE_COLOR(0x0080FF80)
+#define GUI_LIGHTRED GUI_MAKE_COLOR(0x008080FF)
+#define GUI_LIGHTCYAN GUI_MAKE_COLOR(0x00FFFF80)
+#define GUI_LIGHTMAGENTA GUI_MAKE_COLOR(0x00FF80FF)
+#define GUI_LIGHTYELLOW GUI_MAKE_COLOR(0x0080FFFF)
+#define GUI_DARKBLUE GUI_MAKE_COLOR(0x00800000)
+#define GUI_DARKGREEN GUI_MAKE_COLOR(0x00008000)
+#define GUI_DARKRED GUI_MAKE_COLOR(0x00000080)
+#define GUI_DARKCYAN GUI_MAKE_COLOR(0x00808000)
+#define GUI_DARKMAGENTA GUI_MAKE_COLOR(0x00800080)
+#define GUI_DARKYELLOW GUI_MAKE_COLOR(0x00008080)
+#define GUI_WHITE GUI_MAKE_COLOR(0x00FFFFFF)
+#define GUI_LIGHTGRAY GUI_MAKE_COLOR(0x00D3D3D3)
+#define GUI_GRAY GUI_MAKE_COLOR(0x00808080)
+#define GUI_DARKGRAY GUI_MAKE_COLOR(0x00404040)
+#define GUI_BLACK GUI_MAKE_COLOR(0x00000000)
+#define GUI_BROWN GUI_MAKE_COLOR(0x002A2AA5)
+#define GUI_ORANGE GUI_MAKE_COLOR(0x0000A5FF)
+#define GUI_TRANSPARENT GUI_MAKE_COLOR(0xFF000000)
+
+#define GUI_GRAY_3F GUI_MAKE_COLOR(0x003F3F3F)
+#define GUI_GRAY_50 GUI_MAKE_COLOR(0x00505050)
+#define GUI_GRAY_55 GUI_MAKE_COLOR(0x00555555)
+#define GUI_GRAY_60 GUI_MAKE_COLOR(0x00606060)
+#define GUI_GRAY_7C GUI_MAKE_COLOR(0x007C7C7C)
+#define GUI_GRAY_9A GUI_MAKE_COLOR(0x009A9A9A)
+#define GUI_GRAY_AA GUI_MAKE_COLOR(0x00AAAAAA)
+#define GUI_GRAY_C0 GUI_MAKE_COLOR(0x00C0C0C0)
+#define GUI_GRAY_C8 GUI_MAKE_COLOR(0x00C8C8C8)
+#define GUI_GRAY_D0 GUI_MAKE_COLOR(0x00D0D0D0)
+#define GUI_GRAY_E7 GUI_MAKE_COLOR(0x00E7E7E7)
+#define GUI_BLUE_98 GUI_MAKE_COLOR(0x00980000)
+
+/*********************************************************************
+*
+* MultiTouch-Support
+*/
+//
+// Defines
+//
+#define GUI_MTOUCH_FLAG_DOWN (1 << 0)
+#define GUI_MTOUCH_FLAG_MOVE (1 << 1)
+#define GUI_MTOUCH_FLAG_UP (1 << 2)
+
+//
+// Variables
+//
+extern T_GUI_MTOUCH_STOREEVENT GUI_MTOUCH__pStoreEvent;
+
+//
+// Interface
+//
+void GUI_MTOUCH_Enable (int OnOff);
+int GUI_MTOUCH_GetEvent (GUI_MTOUCH_EVENT * pEvent);
+int GUI_MTOUCH_GetTouchInput (GUI_MTOUCH_EVENT * pEvent, GUI_MTOUCH_INPUT * pBuffer, unsigned Index);
+int GUI_MTOUCH_IsEmpty (void);
+void GUI_MTOUCH_SetOrientation (int Orientation);
+void GUI_MTOUCH_SetOrientationEx(int Orientation, int LayerIndex);
+void GUI_MTOUCH_StoreEvent (GUI_MTOUCH_EVENT * pEvent, GUI_MTOUCH_INPUT * pInput);
+
+/*********************************************************************
+*
+* Coordinates used in touch driver
+*/
+#define GUI_COORD_X 0
+#define GUI_COORD_Y 1
+
+/*********************************************************************
+*
+* Addresses of standard fonts
+*/
+//
+// Proportional fonts
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8_ASCII, GUI_Font8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font10S_ASCII, GUI_Font10S_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font10_ASCII, GUI_Font10_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13_ASCII, GUI_Font13_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13B_ASCII, GUI_Font13B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13H_ASCII, GUI_Font13H_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font13HB_ASCII, GUI_Font13HB_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font16_ASCII, GUI_Font16_1, GUI_Font16_HK, GUI_Font16_1HK;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font16B_ASCII, GUI_Font16B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20_ASCII, GUI_Font20_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20B_ASCII, GUI_Font20B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font24_ASCII, GUI_Font24_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font24B_ASCII, GUI_Font24B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font32_ASCII, GUI_Font32_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font32B_ASCII, GUI_Font32B_1;
+
+//
+// Proportional fonts, framed
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font20F_ASCII;
+
+//
+// Monospaced
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font4x6;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font6x8, GUI_Font6x9;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font6x8_ASCII, GUI_Font6x8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x8, GUI_Font8x9;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x8_ASCII, GUI_Font8x8_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x10_ASCII;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x12_ASCII;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x13_ASCII, GUI_Font8x13_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x15B_ASCII, GUI_Font8x15B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16, GUI_Font8x17, GUI_Font8x18;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16x1x2, GUI_Font8x16x2x2, GUI_Font8x16x3x3;
+extern GUI_CONST_STORAGE GUI_FONT GUI_Font8x16_ASCII, GUI_Font8x16_1;
+
+//
+// Digits
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD24x32;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD32;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD36x48;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD48;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD48x64;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD64;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD60x80;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontD80;
+
+//
+// Comic fonts
+//
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontComic18B_ASCII, GUI_FontComic18B_1;
+extern GUI_CONST_STORAGE GUI_FONT GUI_FontComic24B_ASCII, GUI_FontComic24B_1;
+
+/*********************************************************************
+*
+* Macros to be used
+*/
+//
+// Proportional fonts
+//
+#define GUI_FONT_8_ASCII &GUI_Font8_ASCII
+#define GUI_FONT_8_1 &GUI_Font8_1
+#define GUI_FONT_10S_ASCII &GUI_Font10S_ASCII
+#define GUI_FONT_10S_1 &GUI_Font10S_1
+#define GUI_FONT_10_ASCII &GUI_Font10_ASCII
+#define GUI_FONT_10_1 &GUI_Font10_1
+#define GUI_FONT_13_ASCII &GUI_Font13_ASCII
+#define GUI_FONT_13_1 &GUI_Font13_1
+#define GUI_FONT_13B_ASCII &GUI_Font13B_ASCII
+#define GUI_FONT_13B_1 &GUI_Font13B_1
+#define GUI_FONT_13H_ASCII &GUI_Font13H_ASCII
+#define GUI_FONT_13H_1 &GUI_Font13H_1
+#define GUI_FONT_13HB_ASCII &GUI_Font13HB_ASCII
+#define GUI_FONT_13HB_1 &GUI_Font13HB_1
+#define GUI_FONT_16_ASCII &GUI_Font16_ASCII
+#define GUI_FONT_16_1 &GUI_Font16_1
+#define GUI_FONT_16_HK &GUI_Font16_HK
+#define GUI_FONT_16_1HK &GUI_Font16_1HK
+#define GUI_FONT_16B_ASCII &GUI_Font16B_ASCII
+#define GUI_FONT_16B_1 &GUI_Font16B_1
+#define GUI_FONT_20_ASCII &GUI_Font20_ASCII
+#define GUI_FONT_20_1 &GUI_Font20_1
+#define GUI_FONT_20B_ASCII &GUI_Font20B_ASCII
+#define GUI_FONT_20B_1 &GUI_Font20B_1
+#define GUI_FONT_24_ASCII &GUI_Font24_ASCII
+#define GUI_FONT_24_1 &GUI_Font24_1
+#define GUI_FONT_24B_ASCII &GUI_Font24B_ASCII
+#define GUI_FONT_24B_1 &GUI_Font24B_1
+#define GUI_FONT_32_ASCII &GUI_Font32_ASCII
+#define GUI_FONT_32_1 &GUI_Font32_1
+#define GUI_FONT_32B_ASCII &GUI_Font32B_ASCII
+#define GUI_FONT_32B_1 &GUI_Font32B_1
+
+//
+// Proportional fonts, framed
+//
+#define GUI_FONT_20F_ASCII &GUI_Font20F_ASCII
+
+//
+// Monospaced
+//
+#define GUI_FONT_4X6 &GUI_Font4x6
+#define GUI_FONT_6X8 &GUI_Font6x8
+#define GUI_FONT_6X8_ASCII &GUI_Font6x8_ASCII
+#define GUI_FONT_6X8_1 &GUI_Font6x8_1
+#define GUI_FONT_6X9 &GUI_Font6x9
+#define GUI_FONT_8X8 &GUI_Font8x8
+#define GUI_FONT_8X8_ASCII &GUI_Font8x8_ASCII
+#define GUI_FONT_8X8_1 &GUI_Font8x8_1
+#define GUI_FONT_8X9 &GUI_Font8x9
+#define GUI_FONT_8X10_ASCII &GUI_Font8x10_ASCII
+#define GUI_FONT_8X12_ASCII &GUI_Font8x12_ASCII
+#define GUI_FONT_8X13_ASCII &GUI_Font8x13_ASCII
+#define GUI_FONT_8X13_1 &GUI_Font8x13_1
+#define GUI_FONT_8X15B_ASCII &GUI_Font8x15B_ASCII
+#define GUI_FONT_8X15B_1 &GUI_Font8x15B_1
+#define GUI_FONT_8X16 &GUI_Font8x16
+#define GUI_FONT_8X17 &GUI_Font8x17
+#define GUI_FONT_8X18 &GUI_Font8x18
+#define GUI_FONT_8X16X1X2 &GUI_Font8x16x1x2
+#define GUI_FONT_8X16X2X2 &GUI_Font8x16x2x2
+#define GUI_FONT_8X16X3X3 &GUI_Font8x16x3x3
+#define GUI_FONT_8X16_ASCII &GUI_Font8x16_ASCII
+#define GUI_FONT_8X16_1 &GUI_Font8x16_1
+
+//
+// Digits
+//
+#define GUI_FONT_D24X32 &GUI_FontD24x32
+#define GUI_FONT_D32 &GUI_FontD32
+#define GUI_FONT_D36X48 &GUI_FontD36x48
+#define GUI_FONT_D48 &GUI_FontD48
+#define GUI_FONT_D48X64 &GUI_FontD48x64
+#define GUI_FONT_D64 &GUI_FontD64
+#define GUI_FONT_D60X80 &GUI_FontD60x80
+#define GUI_FONT_D80 &GUI_FontD80
+
+//
+// Comic fonts
+//
+#define GUI_FONT_COMIC18B_ASCII &GUI_FontComic18B_ASCII
+#define GUI_FONT_COMIC18B_1 &GUI_FontComic18B_1
+#define GUI_FONT_COMIC24B_ASCII &GUI_FontComic24B_ASCII
+#define GUI_FONT_COMIC24B_1 &GUI_FontComic24B_1
+
+/*********************************************************************
+*
+* Text and drawing modes
+*
+* These defines come in two flavors: the long version (.._DRAWMODE_..)
+* and the short ones (.._DM_..). They are identical, feel free to use
+* which ever one you like best.
+*/
+#define GUI_DRAWMODE_NORMAL LCD_DRAWMODE_NORMAL
+#define GUI_DRAWMODE_XOR LCD_DRAWMODE_XOR
+#define GUI_DRAWMODE_TRANS LCD_DRAWMODE_TRANS
+#define GUI_DRAWMODE_REV LCD_DRAWMODE_REV
+#define GUI_DM_NORMAL LCD_DRAWMODE_NORMAL
+#define GUI_DM_XOR LCD_DRAWMODE_XOR
+#define GUI_DM_TRANS LCD_DRAWMODE_TRANS
+#define GUI_DM_REV LCD_DRAWMODE_REV
+
+#define GUI_TEXTMODE_NORMAL LCD_DRAWMODE_NORMAL
+#define GUI_TEXTMODE_XOR LCD_DRAWMODE_XOR
+#define GUI_TEXTMODE_TRANS LCD_DRAWMODE_TRANS
+#define GUI_TEXTMODE_REV LCD_DRAWMODE_REV
+#define GUI_TM_NORMAL LCD_DRAWMODE_NORMAL
+#define GUI_TM_XOR LCD_DRAWMODE_XOR
+#define GUI_TM_TRANS LCD_DRAWMODE_TRANS
+#define GUI_TM_REV LCD_DRAWMODE_REV
+
+/* Text alignment flags, horizontal */
+#define GUI_TA_LEFT (0)
+#define GUI_TA_HORIZONTAL (3 << 0)
+#define GUI_TA_RIGHT (1 << 0)
+#define GUI_TA_CENTER (2 << 0)
+#define GUI_TA_HCENTER GUI_TA_CENTER /* easier to remember :-) */
+
+/* Text alignment flags, vertical */
+#define GUI_TA_TOP (0)
+#define GUI_TA_VERTICAL (3 << 2)
+#define GUI_TA_BOTTOM (1 << 2)
+#define GUI_TA_BASELINE (2 << 2)
+#define GUI_TA_VCENTER (3 << 2)
+
+/* General alignment flags */
+#define GUI_ALIGN_LEFT GUI_TA_LEFT
+#define GUI_ALIGN_HCENTER GUI_TA_HCENTER
+#define GUI_ALIGN_RIGHT GUI_TA_RIGHT
+#define GUI_ALIGN_TOP GUI_TA_TOP
+#define GUI_ALIGN_VCENTER GUI_TA_VCENTER
+#define GUI_ALIGN_BOTTOM GUI_TA_BOTTOM
+#define GUI_ALIGN_HORIZONTAL GUI_TA_HORIZONTAL
+#define GUI_ALIGN_VERTICAL GUI_TA_VERTICAL
+
+/* General orientation flags */
+#define GUI_MIRROR_X (1 << 0)
+#define GUI_MIRROR_Y (1 << 1)
+#define GUI_SWAP_XY (1 << 2)
+
+#define GUI_ROTATION_0 (0)
+#define GUI_ROTATION_CW (GUI_MIRROR_X | GUI_SWAP_XY)
+#define GUI_ROTATION_180 (GUI_MIRROR_X | GUI_MIRROR_Y)
+#define GUI_ROTATION_CCW (GUI_MIRROR_Y | GUI_SWAP_XY)
+
+/*********************************************************************
+*
+* Min/Max coordinates
+*
+* Define minimum and maximum coordinates in x and y
+*/
+#define GUI_XMIN -16383
+#define GUI_XMAX 16383
+#define GUI_YMIN -16383
+#define GUI_YMAX 16383
+
+/*********************************************************************
+*
+* Defines for constants
+*/
+#define ________ 0x0
+#define _______X 0x1
+#define ______X_ 0x2
+#define ______XX 0x3
+#define _____X__ 0x4
+#define _____X_X 0x5
+#define _____XX_ 0x6
+#define _____XXX 0x7
+#define ____X___ 0x8
+#define ____X__X 0x9
+#define ____X_X_ 0xa
+#define ____X_XX 0xb
+#define ____XX__ 0xc
+#define ____XX_X 0xd
+#define ____XXX_ 0xe
+#define ____XXXX 0xf
+#define ___X____ 0x10
+#define ___X___X 0x11
+#define ___X__X_ 0x12
+#define ___X__XX 0x13
+#define ___X_X__ 0x14
+#define ___X_X_X 0x15
+#define ___X_XX_ 0x16
+#define ___X_XXX 0x17
+#define ___XX___ 0x18
+#define ___XX__X 0x19
+#define ___XX_X_ 0x1a
+#define ___XX_XX 0x1b
+#define ___XXX__ 0x1c
+#define ___XXX_X 0x1d
+#define ___XXXX_ 0x1e
+#define ___XXXXX 0x1f
+#define __X_____ 0x20
+#define __X____X 0x21
+#define __X___X_ 0x22
+#define __X___XX 0x23
+#define __X__X__ 0x24
+#define __X__X_X 0x25
+#define __X__XX_ 0x26
+#define __X__XXX 0x27
+#define __X_X___ 0x28
+#define __X_X__X 0x29
+#define __X_X_X_ 0x2a
+#define __X_X_XX 0x2b
+#define __X_XX__ 0x2c
+#define __X_XX_X 0x2d
+#define __X_XXX_ 0x2e
+#define __X_XXXX 0x2f
+#define __XX____ 0x30
+#define __XX___X 0x31
+#define __XX__X_ 0x32
+#define __XX__XX 0x33
+#define __XX_X__ 0x34
+#define __XX_X_X 0x35
+#define __XX_XX_ 0x36
+#define __XX_XXX 0x37
+#define __XXX___ 0x38
+#define __XXX__X 0x39
+#define __XXX_X_ 0x3a
+#define __XXX_XX 0x3b
+#define __XXXX__ 0x3c
+#define __XXXX_X 0x3d
+#define __XXXXX_ 0x3e
+#define __XXXXXX 0x3f
+#define _X______ 0x40
+#define _X_____X 0x41
+#define _X____X_ 0x42
+#define _X____XX 0x43
+#define _X___X__ 0x44
+#define _X___X_X 0x45
+#define _X___XX_ 0x46
+#define _X___XXX 0x47
+#define _X__X___ 0x48
+#define _X__X__X 0x49
+#define _X__X_X_ 0x4a
+#define _X__X_XX 0x4b
+#define _X__XX__ 0x4c
+#define _X__XX_X 0x4d
+#define _X__XXX_ 0x4e
+#define _X__XXXX 0x4f
+#define _X_X____ 0x50
+#define _X_X___X 0x51
+#define _X_X__X_ 0x52
+#define _X_X__XX 0x53
+#define _X_X_X__ 0x54
+#define _X_X_X_X 0x55
+#define _X_X_XX_ 0x56
+#define _X_X_XXX 0x57
+#define _X_XX___ 0x58
+#define _X_XX__X 0x59
+#define _X_XX_X_ 0x5a
+#define _X_XX_XX 0x5b
+#define _X_XXX__ 0x5c
+#define _X_XXX_X 0x5d
+#define _X_XXXX_ 0x5e
+#define _X_XXXXX 0x5f
+#define _XX_____ 0x60
+#define _XX____X 0x61
+#define _XX___X_ 0x62
+#define _XX___XX 0x63
+#define _XX__X__ 0x64
+#define _XX__X_X 0x65
+#define _XX__XX_ 0x66
+#define _XX__XXX 0x67
+#define _XX_X___ 0x68
+#define _XX_X__X 0x69
+#define _XX_X_X_ 0x6a
+#define _XX_X_XX 0x6b
+#define _XX_XX__ 0x6c
+#define _XX_XX_X 0x6d
+#define _XX_XXX_ 0x6e
+#define _XX_XXXX 0x6f
+#define _XXX____ 0x70
+#define _XXX___X 0x71
+#define _XXX__X_ 0x72
+#define _XXX__XX 0x73
+#define _XXX_X__ 0x74
+#define _XXX_X_X 0x75
+#define _XXX_XX_ 0x76
+#define _XXX_XXX 0x77
+#define _XXXX___ 0x78
+#define _XXXX__X 0x79
+#define _XXXX_X_ 0x7a
+#define _XXXX_XX 0x7b
+#define _XXXXX__ 0x7c
+#define _XXXXX_X 0x7d
+#define _XXXXXX_ 0x7e
+#define _XXXXXXX 0x7f
+#define X_______ 0x80
+#define X______X 0x81
+#define X_____X_ 0x82
+#define X_____XX 0x83
+#define X____X__ 0x84
+#define X____X_X 0x85
+#define X____XX_ 0x86
+#define X____XXX 0x87
+#define X___X___ 0x88
+#define X___X__X 0x89
+#define X___X_X_ 0x8a
+#define X___X_XX 0x8b
+#define X___XX__ 0x8c
+#define X___XX_X 0x8d
+#define X___XXX_ 0x8e
+#define X___XXXX 0x8f
+#define X__X____ 0x90
+#define X__X___X 0x91
+#define X__X__X_ 0x92
+#define X__X__XX 0x93
+#define X__X_X__ 0x94
+#define X__X_X_X 0x95
+#define X__X_XX_ 0x96
+#define X__X_XXX 0x97
+#define X__XX___ 0x98
+#define X__XX__X 0x99
+#define X__XX_X_ 0x9a
+#define X__XX_XX 0x9b
+#define X__XXX__ 0x9c
+#define X__XXX_X 0x9d
+#define X__XXXX_ 0x9e
+#define X__XXXXX 0x9f
+#define X_X_____ 0xa0
+#define X_X____X 0xa1
+#define X_X___X_ 0xa2
+#define X_X___XX 0xa3
+#define X_X__X__ 0xa4
+#define X_X__X_X 0xa5
+#define X_X__XX_ 0xa6
+#define X_X__XXX 0xa7
+#define X_X_X___ 0xa8
+#define X_X_X__X 0xa9
+#define X_X_X_X_ 0xaa
+#define X_X_X_XX 0xab
+#define X_X_XX__ 0xac
+#define X_X_XX_X 0xad
+#define X_X_XXX_ 0xae
+#define X_X_XXXX 0xaf
+#define X_XX____ 0xb0
+#define X_XX___X 0xb1
+#define X_XX__X_ 0xb2
+#define X_XX__XX 0xb3
+#define X_XX_X__ 0xb4
+#define X_XX_X_X 0xb5
+#define X_XX_XX_ 0xb6
+#define X_XX_XXX 0xb7
+#define X_XXX___ 0xb8
+#define X_XXX__X 0xb9
+#define X_XXX_X_ 0xba
+#define X_XXX_XX 0xbb
+#define X_XXXX__ 0xbc
+#define X_XXXX_X 0xbd
+#define X_XXXXX_ 0xbe
+#define X_XXXXXX 0xbf
+#define XX______ 0xc0
+#define XX_____X 0xc1
+#define XX____X_ 0xc2
+#define XX____XX 0xc3
+#define XX___X__ 0xc4
+#define XX___X_X 0xc5
+#define XX___XX_ 0xc6
+#define XX___XXX 0xc7
+#define XX__X___ 0xc8
+#define XX__X__X 0xc9
+#define XX__X_X_ 0xca
+#define XX__X_XX 0xcb
+#define XX__XX__ 0xcc
+#define XX__XX_X 0xcd
+#define XX__XXX_ 0xce
+#define XX__XXXX 0xcf
+#define XX_X____ 0xd0
+#define XX_X___X 0xd1
+#define XX_X__X_ 0xd2
+#define XX_X__XX 0xd3
+#define XX_X_X__ 0xd4
+#define XX_X_X_X 0xd5
+#define XX_X_XX_ 0xd6
+#define XX_X_XXX 0xd7
+#define XX_XX___ 0xd8
+#define XX_XX__X 0xd9
+#define XX_XX_X_ 0xda
+#define XX_XX_XX 0xdb
+#define XX_XXX__ 0xdc
+#define XX_XXX_X 0xdd
+#define XX_XXXX_ 0xde
+#define XX_XXXXX 0xdf
+#define XXX_____ 0xe0
+#define XXX____X 0xe1
+#define XXX___X_ 0xe2
+#define XXX___XX 0xe3
+#define XXX__X__ 0xe4
+#define XXX__X_X 0xe5
+#define XXX__XX_ 0xe6
+#define XXX__XXX 0xe7
+#define XXX_X___ 0xe8
+#define XXX_X__X 0xe9
+#define XXX_X_X_ 0xea
+#define XXX_X_XX 0xeb
+#define XXX_XX__ 0xec
+#define XXX_XX_X 0xed
+#define XXX_XXX_ 0xee
+#define XXX_XXXX 0xef
+#define XXXX____ 0xf0
+#define XXXX___X 0xf1
+#define XXXX__X_ 0xf2
+#define XXXX__XX 0xf3
+#define XXXX_X__ 0xf4
+#define XXXX_X_X 0xf5
+#define XXXX_XX_ 0xf6
+#define XXXX_XXX 0xf7
+#define XXXXX___ 0xf8
+#define XXXXX__X 0xf9
+#define XXXXX_X_ 0xfa
+#define XXXXX_XX 0xfb
+#define XXXXXX__ 0xfc
+#define XXXXXX_X 0xfd
+#define XXXXXXX_ 0xfe
+#define XXXXXXXX 0xff
+
+/*********************************************************************
+*
+* Compatibility with older versions
+*/
+#define GUI_DispString_UC GUI_UC_DispString
+#define TOUCH_X_ActivateX GUI_TOUCH_X_ActivateX
+#define TOUCH_X_ActivateY GUI_TOUCH_X_ActivateY
+#define TOUCH_X_Disable GUI_TOUCH_X_Disable
+#define TOUCH_X_MeasureX GUI_TOUCH_X_MeasureX
+#define TOUCH_X_MeasureY GUI_TOUCH_X_MeasureY
+#define GUI_SelLayer GUI_SelectLayer
+#define GUI_MEMDEV_FadeDevices GUI_MEMDEV_FadeInDevices
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* ifdef GUI_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_FlexColor.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,299 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_FlexColor.h
+Purpose : Interface definition for GUIDRV_FlexColor driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_FLEXCOLOR_H
+#define GUIDRV_FLEXCOLOR_H
+
+#include "GUI.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Configuration macros
+*/
+//
+// Operation modes (16bpp)
+//
+#define GUIDRV_FLEXCOLOR_M16C0B8 GUIDRV_FlexColor_SetMode16bppC0B8
+#define GUIDRV_FLEXCOLOR_M16C1B8 GUIDRV_FlexColor_SetMode16bppC1B8
+#define GUIDRV_FLEXCOLOR_M16C0B16 GUIDRV_FlexColor_SetMode16bppC0B16
+#define GUIDRV_FLEXCOLOR_M16C1B16 GUIDRV_FlexColor_SetMode16bppC1B16
+
+//
+// Operation modes (18bpp)
+//
+#define GUIDRV_FLEXCOLOR_M18C0B9 GUIDRV_FlexColor_SetMode18bppC0B9
+#define GUIDRV_FLEXCOLOR_M18C1B9 GUIDRV_FlexColor_SetMode18bppC1B9
+#define GUIDRV_FLEXCOLOR_M18C0B18 GUIDRV_FlexColor_SetMode18bppC0B18
+#define GUIDRV_FLEXCOLOR_M18C1B18 GUIDRV_FlexColor_SetMode18bppC1B18
+
+//
+// Operation mode (24bpp)
+//
+#define GUIDRV_FLEXCOLOR_M24C0B8 GUIDRV_FlexColor_SetMode24bppC0B8
+
+//
+// Controller selection
+//
+#define GUIDRV_FLEXCOLOR_F66702 GUIDRV_FlexColor_SetFunc66702
+#define GUIDRV_FLEXCOLOR_F66708 GUIDRV_FlexColor_SetFunc66708
+#define GUIDRV_FLEXCOLOR_F66709 GUIDRV_FlexColor_SetFunc66709
+#define GUIDRV_FLEXCOLOR_F66712 GUIDRV_FlexColor_SetFunc66712
+#define GUIDRV_FLEXCOLOR_F66714 GUIDRV_FlexColor_SetFunc66714
+#define GUIDRV_FLEXCOLOR_F66715 GUIDRV_FlexColor_SetFunc66715
+#define GUIDRV_FLEXCOLOR_F66718 GUIDRV_FlexColor_SetFunc66718
+#define GUIDRV_FLEXCOLOR_F66719 GUIDRV_FlexColor_SetFunc66719
+#define GUIDRV_FLEXCOLOR_F66720 GUIDRV_FlexColor_SetFunc66720
+#define GUIDRV_FLEXCOLOR_F66721 GUIDRV_FlexColor_SetFunc66721
+#define GUIDRV_FLEXCOLOR_F66722 GUIDRV_FlexColor_SetFunc66722
+#define GUIDRV_FLEXCOLOR_F66723 GUIDRV_FlexColor_SetFunc66723
+#define GUIDRV_FLEXCOLOR_F66724 GUIDRV_FlexColor_SetFunc66724
+#define GUIDRV_FLEXCOLOR_F66772 GUIDRV_FlexColor_SetFunc66772
+
+//
+// Hardware interfaces
+//
+#define GUIDRV_FLEXCOLOR_IF_TYPE_I 0
+#define GUIDRV_FLEXCOLOR_IF_TYPE_II 1
+
+//
+// Reading interface
+//
+#define GUIDRV_FLEXCOLOR_READ_FUNC_I 0
+#define GUIDRV_FLEXCOLOR_READ_FUNC_II 1
+#define GUIDRV_FLEXCOLOR_READ_FUNC_III 2
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Driver specific configuration items
+ //
+ int FirstSEG;
+ int FirstCOM;
+ int Orientation;
+ U16 RegEntryMode;
+ int NumDummyReads;
+} CONFIG_FLEXCOLOR;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_FlexColor_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_FLEXCOLOR &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_FLEXCOLOR &GUIDRV_FlexColor_API
+
+#endif
+
+/*********************************************************************
+*
+* Configuration interface
+*/
+#if !defined(WIN32) || defined(LCD_SIMCONTROLLER)
+
+ //
+ // Display controller configuration
+ //
+ void GUIDRV_FlexColor_SetFunc66702 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66708 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66709 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66712 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66714 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66715 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66718 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66719 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66720 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66721 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66722 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66723 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66724 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetFunc66772 (GUI_DEVICE * pDevice);
+
+ //
+ // Operation mode configuration (16bpp)
+ //
+ void GUIDRV_FlexColor_SetMode16bppC0B8 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetMode16bppC1B8 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetMode16bppC0B16(GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetMode16bppC1B16(GUI_DEVICE * pDevice);
+
+ //
+ // Drawing mode configuration (18bpp)
+ //
+ void GUIDRV_FlexColor_SetMode18bppC0B9 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetMode18bppC1B9 (GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetMode18bppC0B18(GUI_DEVICE * pDevice);
+ void GUIDRV_FlexColor_SetMode18bppC1B18(GUI_DEVICE * pDevice);
+
+ //
+ // Drawing mode configuration (24bpp)
+ //
+ void GUIDRV_FlexColor_SetMode24bppC0B8 (GUI_DEVICE * pDevice);
+
+ //
+ // Change orientation at runtime
+ //
+ int GUIDRV_FlexColor_SetOrientation(int Orientation, int LayerIndex);
+
+ //
+ // User interface
+ //
+ void GUIDRV_FlexColor_SetFunc(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API, void (* pfFunc)(GUI_DEVICE *), void (* pfMode)(GUI_DEVICE *));
+ void GUIDRV_FlexColor_Config (GUI_DEVICE * pDevice, CONFIG_FLEXCOLOR * pConfig);
+
+ //
+ // Setting up hardware interface to be used
+ //
+ void GUIDRV_FlexColor_SetInterface66712_B9 (GUI_DEVICE * pDevice, int Type);
+ void GUIDRV_FlexColor_SetInterface66712_B18(GUI_DEVICE * pDevice, int Type);
+ #define GUIDRV_FlexColor_SetInterface66715_B9(pDevice, Type) GUIDRV_FlexColor_SetInterface66712_B9(pDevice, Type)
+ #define GUIDRV_FlexColor_SetInterface66715_B18(pDevice, Type) GUIDRV_FlexColor_SetInterface66712_B18(pDevice, Type)
+
+ //
+ // Setting up interface for reading back data
+ //
+ void GUIDRV_FlexColor_SetReadFunc66709_B16(GUI_DEVICE * pDevice, int Func);
+ void GUIDRV_FlexColor_SetReadFunc66712_B9 (GUI_DEVICE * pDevice, int Func);
+ void GUIDRV_FlexColor_SetReadFunc66712_B16(GUI_DEVICE * pDevice, int Func);
+ #define GUIDRV_FlexColor_SetReadFunc66715_B9(pDevice, Func) GUIDRV_FlexColor_SetReadFunc66712_B9(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66715_B16(pDevice, Func) GUIDRV_FlexColor_SetReadFunc66712_B16(pDevice, Func)
+ void GUIDRV_FlexColor_SetReadFunc66720_B16(GUI_DEVICE * pDevice, int Func);
+ void GUIDRV_FlexColor_SetReadFunc66772_B8 (GUI_DEVICE * pDevice, int Func);
+ void GUIDRV_FlexColor_SetReadFunc66772_B16(GUI_DEVICE * pDevice, int Func);
+
+#else
+
+ //
+ // Display controller configuration
+ //
+ #define GUIDRV_FlexColor_SetFunc66708(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66709(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66712(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66714(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66715(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66718(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66719(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66720(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66721(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66722(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66723(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66724(pDevice)
+ #define GUIDRV_FlexColor_SetFunc66772(pDevice)
+
+ //
+ // Operation mode configuration (16bpp)
+ //
+ #define GUIDRV_FlexColor_SetMode16bppC0B8(pDevice)
+ #define GUIDRV_FlexColor_SetMode16bppC1B8(pDevice)
+ #define GUIDRV_FlexColor_SetMode16bppC0B16(pDevice)
+ #define GUIDRV_FlexColor_SetMode16bppC1B16(pDevice)
+
+ //
+ // Drawing mode configuration (18bpp)
+ //
+ #define GUIDRV_FlexColor_SetMode18bppC0B9(pDevice)
+ #define GUIDRV_FlexColor_SetMode18bppC1B9(pDevice)
+ #define GUIDRV_FlexColor_SetMode18bppC0B18(pDevice)
+ #define GUIDRV_FlexColor_SetMode18bppC1B18(pDevice)
+
+ //
+ // User interface
+ //
+ #define GUIDRV_FlexColor_SetFunc(pDevice, pHW_API, pfFunc, pfMode)
+ #define GUIDRV_FlexColor_Config(pDevice, pConfig)
+
+ //
+ // Change orientation at runtime
+ //
+ #define GUIDRV_FlexColor_SetOrientation(Orientation, LayerIndex);
+
+ //
+ // Setting up hardware interface to be used
+ //
+ #define GUIDRV_FlexColor_SetInterface66712_B9(pDevice, Type)
+ #define GUIDRV_FlexColor_SetInterface66712_B18(pDevice, Type)
+ #define GUIDRV_FlexColor_SetInterface66720_B18(pDevice, Type)
+ #define GUIDRV_FlexColor_SetInterface66715_B9(pDevice, Type)
+ #define GUIDRV_FlexColor_SetInterface66715_B18(pDevice, Type)
+
+ //
+ // Setting up interface for reading back data
+ //
+ #define GUIDRV_FlexColor_SetReadFunc66709_B16(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66712_B9(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66712_B16(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66715_B9(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66715_B16(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66720_B16(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66772_B8(pDevice, Func)
+ #define GUIDRV_FlexColor_SetReadFunc66772_B16(pDevice, Func)
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUIDRV_FLEXCOLOR_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_IST3088.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,106 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_IST3088.h
+Purpose : Interface definition for GUIDRV_IST3088 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_IST3088_H
+#define GUIDRV_IST3088_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_IST3088_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OY_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OX_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OXY_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OS_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OSY_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OSX_4_API;
+extern const GUI_DEVICE_API GUIDRV_IST3088_OSXY_4_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_IST3088_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OY_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OX_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OXY_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OS_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OSY_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OSX_4 &GUIDRV_Win_API
+ #define GUIDRV_IST3088_OSXY_4 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_IST3088_4 &GUIDRV_IST3088_4_API
+ #define GUIDRV_IST3088_OY_4 &GUIDRV_IST3088_OY_4_API
+ #define GUIDRV_IST3088_OX_4 &GUIDRV_IST3088_OX_4_API
+ #define GUIDRV_IST3088_OXY_4 &GUIDRV_IST3088_OXY_4_API
+ #define GUIDRV_IST3088_OS_4 &GUIDRV_IST3088_OS_4_API
+ #define GUIDRV_IST3088_OSY_4 &GUIDRV_IST3088_OSY_4_API
+ #define GUIDRV_IST3088_OSX_4 &GUIDRV_IST3088_OSX_4_API
+ #define GUIDRV_IST3088_OSXY_4 &GUIDRV_IST3088_OSXY_4_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+void GUIDRV_IST3088_SetBus16(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_Lin.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,264 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_Lin.h
+Purpose : Interface definition for GUIDRV_Lin driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_LIN_H
+#define GUIDRV_LIN_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_1_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_1_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_2_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_2_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_4_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_4_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_8_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_8_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_16_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_16_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_24_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_24_API;
+
+extern const GUI_DEVICE_API GUIDRV_Lin_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OY_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OX_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OXY_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OS_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSY_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSX_32_API;
+extern const GUI_DEVICE_API GUIDRV_Lin_OSXY_32_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_LIN_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_1 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_1 &GUIDRV_Win_API
+
+ #define GUIDRV_LIN_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_2 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_2 &GUIDRV_Win_API
+
+ #define GUIDRV_LIN_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_4 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_4 &GUIDRV_Win_API
+
+ #define GUIDRV_LIN_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_8 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_8 &GUIDRV_Win_API
+
+ #define GUIDRV_LIN_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_16 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_16 &GUIDRV_Win_API
+
+ #define GUIDRV_LIN_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_24 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_24 &GUIDRV_Win_API
+
+ #define GUIDRV_LIN_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OY_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OX_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OXY_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OS_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSY_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSX_32 &GUIDRV_Win_API
+ #define GUIDRV_LIN_OSXY_32 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_LIN_1 &GUIDRV_Lin_1_API
+ #define GUIDRV_LIN_OY_1 &GUIDRV_Lin_OY_1_API
+ #define GUIDRV_LIN_OX_1 &GUIDRV_Lin_OX_1_API
+ #define GUIDRV_LIN_OXY_1 &GUIDRV_Lin_OXY_1_API
+ #define GUIDRV_LIN_OS_1 &GUIDRV_Lin_OS_1_API
+ #define GUIDRV_LIN_OSY_1 &GUIDRV_Lin_OSY_1_API
+ #define GUIDRV_LIN_OSX_1 &GUIDRV_Lin_OSX_1_API
+ #define GUIDRV_LIN_OSXY_1 &GUIDRV_Lin_OSXY_1_API
+
+ #define GUIDRV_LIN_2 &GUIDRV_Lin_2_API
+ #define GUIDRV_LIN_OY_2 &GUIDRV_Lin_OY_2_API
+ #define GUIDRV_LIN_OX_2 &GUIDRV_Lin_OX_2_API
+ #define GUIDRV_LIN_OXY_2 &GUIDRV_Lin_OXY_2_API
+ #define GUIDRV_LIN_OS_2 &GUIDRV_Lin_OS_2_API
+ #define GUIDRV_LIN_OSY_2 &GUIDRV_Lin_OSY_2_API
+ #define GUIDRV_LIN_OSX_2 &GUIDRV_Lin_OSX_2_API
+ #define GUIDRV_LIN_OSXY_2 &GUIDRV_Lin_OSXY_2_API
+
+ #define GUIDRV_LIN_4 &GUIDRV_Lin_4_API
+ #define GUIDRV_LIN_OY_4 &GUIDRV_Lin_OY_4_API
+ #define GUIDRV_LIN_OX_4 &GUIDRV_Lin_OX_4_API
+ #define GUIDRV_LIN_OXY_4 &GUIDRV_Lin_OXY_4_API
+ #define GUIDRV_LIN_OS_4 &GUIDRV_Lin_OS_4_API
+ #define GUIDRV_LIN_OSY_4 &GUIDRV_Lin_OSY_4_API
+ #define GUIDRV_LIN_OSX_4 &GUIDRV_Lin_OSX_4_API
+ #define GUIDRV_LIN_OSXY_4 &GUIDRV_Lin_OSXY_4_API
+
+ #define GUIDRV_LIN_8 &GUIDRV_Lin_8_API
+ #define GUIDRV_LIN_OY_8 &GUIDRV_Lin_OY_8_API
+ #define GUIDRV_LIN_OX_8 &GUIDRV_Lin_OX_8_API
+ #define GUIDRV_LIN_OXY_8 &GUIDRV_Lin_OXY_8_API
+ #define GUIDRV_LIN_OS_8 &GUIDRV_Lin_OS_8_API
+ #define GUIDRV_LIN_OSY_8 &GUIDRV_Lin_OSY_8_API
+ #define GUIDRV_LIN_OSX_8 &GUIDRV_Lin_OSX_8_API
+ #define GUIDRV_LIN_OSXY_8 &GUIDRV_Lin_OSXY_8_API
+
+ #define GUIDRV_LIN_16 &GUIDRV_Lin_16_API
+ #define GUIDRV_LIN_OY_16 &GUIDRV_Lin_OY_16_API
+ #define GUIDRV_LIN_OX_16 &GUIDRV_Lin_OX_16_API
+ #define GUIDRV_LIN_OXY_16 &GUIDRV_Lin_OXY_16_API
+ #define GUIDRV_LIN_OS_16 &GUIDRV_Lin_OS_16_API
+ #define GUIDRV_LIN_OSY_16 &GUIDRV_Lin_OSY_16_API
+ #define GUIDRV_LIN_OSX_16 &GUIDRV_Lin_OSX_16_API
+ #define GUIDRV_LIN_OSXY_16 &GUIDRV_Lin_OSXY_16_API
+
+ #define GUIDRV_LIN_24 &GUIDRV_Lin_24_API
+ #define GUIDRV_LIN_OY_24 &GUIDRV_Lin_OY_24_API
+ #define GUIDRV_LIN_OX_24 &GUIDRV_Lin_OX_24_API
+ #define GUIDRV_LIN_OXY_24 &GUIDRV_Lin_OXY_24_API
+ #define GUIDRV_LIN_OS_24 &GUIDRV_Lin_OS_24_API
+ #define GUIDRV_LIN_OSY_24 &GUIDRV_Lin_OSY_24_API
+ #define GUIDRV_LIN_OSX_24 &GUIDRV_Lin_OSX_24_API
+ #define GUIDRV_LIN_OSXY_24 &GUIDRV_Lin_OSXY_24_API
+
+ #define GUIDRV_LIN_32 &GUIDRV_Lin_32_API
+ #define GUIDRV_LIN_OY_32 &GUIDRV_Lin_OY_32_API
+ #define GUIDRV_LIN_OX_32 &GUIDRV_Lin_OX_32_API
+ #define GUIDRV_LIN_OXY_32 &GUIDRV_Lin_OXY_32_API
+ #define GUIDRV_LIN_OS_32 &GUIDRV_Lin_OS_32_API
+ #define GUIDRV_LIN_OSY_32 &GUIDRV_Lin_OSY_32_API
+ #define GUIDRV_LIN_OSX_32 &GUIDRV_Lin_OSX_32_API
+ #define GUIDRV_LIN_OSXY_32 &GUIDRV_Lin_OSXY_32_API
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_S1D13748.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,124 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_S1D13748.h
+Purpose : Interface definition for GUIDRV_S1D13748 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_S1D13748_H
+#define GUIDRV_S1D13748_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#define GUIDRV_S1D13748_USE_MAIN 0
+#define GUIDRV_S1D13748_USE_PIP1 1
+#define GUIDRV_S1D13748_USE_PIP2 2
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Driver specific configuration items
+ //
+ U32 BufferOffset;
+ int UseLayer;
+ int WriteBufferSize;
+} CONFIG_S1D13748;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_S1D13748_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OY_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OX_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OXY_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OS_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OSY_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OSX_16_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13748_OSXY_16_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_S1D13748_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OY_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OX_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OXY_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OS_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OSY_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OSX_16 &GUIDRV_Win_API
+ #define GUIDRV_S1D13748_OSXY_16 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_S1D13748_16 &GUIDRV_S1D13748_16_API
+ #define GUIDRV_S1D13748_OY_16 &GUIDRV_S1D13748_OY_16_API
+ #define GUIDRV_S1D13748_OX_16 &GUIDRV_S1D13748_OX_16_API
+ #define GUIDRV_S1D13748_OXY_16 &GUIDRV_S1D13748_OXY_16_API
+ #define GUIDRV_S1D13748_OS_16 &GUIDRV_S1D13748_OS_16_API
+ #define GUIDRV_S1D13748_OSY_16 &GUIDRV_S1D13748_OSY_16_API
+ #define GUIDRV_S1D13748_OSX_16 &GUIDRV_S1D13748_OSX_16_API
+ #define GUIDRV_S1D13748_OSXY_16 &GUIDRV_S1D13748_OSXY_16_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+void GUIDRV_S1D13748_Config (GUI_DEVICE * pDevice, CONFIG_S1D13748 * pConfig);
+void GUIDRV_S1D13748_SetBus16(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_S1D13781.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,127 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_S1D13781.h
+Purpose : Interface definition for GUIDRV_S1D13781 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_S1D13781_H
+#define GUIDRV_S1D13781_H
+
+#define GUIDRV_S1D13781_USE_MAIN 0
+#define GUIDRV_S1D13781_USE_PIP1 1
+#define GUIDRV_S1D13781_USE_PIP2 2
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Driver specific configuration items
+ //
+ U32 BufferOffset;
+ int UseLayer;
+ int WriteBufferSize;
+ int WaitUntilVNDP;
+} CONFIG_S1D13781;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_S1D13781_8C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OXY_8C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSY_8C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSX_8C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_S1D13781_16C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OXY_16C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSY_16C0_API;
+extern const GUI_DEVICE_API GUIDRV_S1D13781_OSX_16C0_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_S1D13781_8C0 &GUIDRV_Win_API
+ #define GUIDRV_S1D13781_OXY_8C0 &GUIDRV_Win_API
+ #define GUIDRV_S1D13781_OSY_8C0 &GUIDRV_Win_API
+ #define GUIDRV_S1D13781_OSX_8C0 &GUIDRV_Win_API
+
+ #define GUIDRV_S1D13781_16C0 &GUIDRV_Win_API
+ #define GUIDRV_S1D13781_OXY_16C0 &GUIDRV_Win_API
+ #define GUIDRV_S1D13781_OSY_16C0 &GUIDRV_Win_API
+ #define GUIDRV_S1D13781_OSX_16C0 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_S1D13781_8C0 &GUIDRV_S1D13781_8C0_API
+ #define GUIDRV_S1D13781_OXY_8C0 &GUIDRV_S1D13781_OXY_8C0_API
+ #define GUIDRV_S1D13781_OSY_8C0 &GUIDRV_S1D13781_OSY_8C0_API
+ #define GUIDRV_S1D13781_OSX_8C0 &GUIDRV_S1D13781_OSX_8C0_API
+
+ #define GUIDRV_S1D13781_16C0 &GUIDRV_S1D13781_16C0_API
+ #define GUIDRV_S1D13781_OXY_16C0 &GUIDRV_S1D13781_OXY_16C0_API
+ #define GUIDRV_S1D13781_OSY_16C0 &GUIDRV_S1D13781_OSY_16C0_API
+ #define GUIDRV_S1D13781_OSX_16C0 &GUIDRV_S1D13781_OSX_16C0_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+ #define GUIDRV_S1D13781_Config(pDevice, pConfig)
+ #define GUIDRV_S1D13781_SetBusSPI(pDevice, pHW_API)
+ #define GUIDRV_S1D13781_SetOrientation(Orientation, LayerIndex)
+#else
+ void GUIDRV_S1D13781_Config (GUI_DEVICE * pDevice, CONFIG_S1D13781 * pConfig);
+ void GUIDRV_S1D13781_SetBusSPI (GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+ int GUIDRV_S1D13781_SetOrientation(int Orientation, int LayerIndex);
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_S1D15G00.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,102 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_S1D15G00.h
+Purpose : Interface definition for GUIDRV_S1D15G00 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_S1D15G00_H
+#define GUIDRV_S1D15G00_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Driver specific configuration items
+ //
+ int FirstSEG;
+ int FirstCOM;
+ int Orientation;
+ int UseCache;
+} CONFIG_S1D15G00;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_Win_API;
+
+extern const GUI_DEVICE_API GUIDRV_S1D15G00_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_S1D15G00 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_S1D15G00 &GUIDRV_S1D15G00_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+void GUIDRV_S1D15G00_Config (GUI_DEVICE * pDevice, CONFIG_S1D15G00 * pConfig);
+void GUIDRV_S1D15G00_SetBus8(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_SLin.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,199 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_SLin.h
+Purpose : Interface definition for GUIDRV_SLin driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_SLIN_H
+#define GUIDRV_SLIN_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Function pointers of hardware access routines
+ //
+ //HW_API_SLIN HW_API;
+ //
+ // Driver specific configuration items
+ //
+ int FirstSEG;
+ int FirstCOM;
+ int UseCache;
+ int UseMirror; // Only used for SSD1848
+ int CheckBusy;
+ U8 UseDualScan; // Used for T6963
+} CONFIG_SLIN;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_SLin_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OY_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OX_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OXY_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OS_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSY_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSX_1_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSXY_1_API;
+
+extern const GUI_DEVICE_API GUIDRV_SLin_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OY_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OX_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OXY_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OS_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSY_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSX_2_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSXY_2_API;
+
+extern const GUI_DEVICE_API GUIDRV_SLin_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OY_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OX_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OXY_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OS_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSY_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSX_4_API;
+extern const GUI_DEVICE_API GUIDRV_SLin_OSXY_4_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_SLIN_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OY_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OX_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OXY_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OS_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSY_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSX_1 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSXY_1 &GUIDRV_Win_API
+
+ #define GUIDRV_SLIN_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OY_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OX_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OXY_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OS_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSY_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSX_2 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSXY_2 &GUIDRV_Win_API
+
+ #define GUIDRV_SLIN_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OY_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OX_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OXY_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OS_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSY_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSX_4 &GUIDRV_Win_API
+ #define GUIDRV_SLIN_OSXY_4 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_SLIN_1 &GUIDRV_SLin_1_API
+ #define GUIDRV_SLIN_OY_1 &GUIDRV_SLin_OY_1_API
+ #define GUIDRV_SLIN_OX_1 &GUIDRV_SLin_OX_1_API
+ #define GUIDRV_SLIN_OXY_1 &GUIDRV_SLin_OXY_1_API
+ #define GUIDRV_SLIN_OS_1 &GUIDRV_SLin_OS_1_API
+ #define GUIDRV_SLIN_OSY_1 &GUIDRV_SLin_OSY_1_API
+ #define GUIDRV_SLIN_OSX_1 &GUIDRV_SLin_OSX_1_API
+ #define GUIDRV_SLIN_OSXY_1 &GUIDRV_SLin_OSXY_1_API
+
+ #define GUIDRV_SLIN_2 &GUIDRV_SLin_2_API
+ #define GUIDRV_SLIN_OY_2 &GUIDRV_SLin_OY_2_API
+ #define GUIDRV_SLIN_OX_2 &GUIDRV_SLin_OX_2_API
+ #define GUIDRV_SLIN_OXY_2 &GUIDRV_SLin_OXY_2_API
+ #define GUIDRV_SLIN_OS_2 &GUIDRV_SLin_OS_2_API
+ #define GUIDRV_SLIN_OSY_2 &GUIDRV_SLin_OSY_2_API
+ #define GUIDRV_SLIN_OSX_2 &GUIDRV_SLin_OSX_2_API
+ #define GUIDRV_SLIN_OSXY_2 &GUIDRV_SLin_OSXY_2_API
+
+ #define GUIDRV_SLIN_4 &GUIDRV_SLin_4_API
+ #define GUIDRV_SLIN_OY_4 &GUIDRV_SLin_OY_4_API
+ #define GUIDRV_SLIN_OX_4 &GUIDRV_SLin_OX_4_API
+ #define GUIDRV_SLIN_OXY_4 &GUIDRV_SLin_OXY_4_API
+ #define GUIDRV_SLIN_OS_4 &GUIDRV_SLin_OS_4_API
+ #define GUIDRV_SLIN_OSY_4 &GUIDRV_SLin_OSY_4_API
+ #define GUIDRV_SLIN_OSX_4 &GUIDRV_SLin_OSX_4_API
+ #define GUIDRV_SLIN_OSXY_4 &GUIDRV_SLin_OSXY_4_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_SLin_Config(pDevice, pConfig)
+ #define GUIDRV_SLin_SetBus8(pDevice, pHW_API)
+ #define GUIDRV_SLin_SetS1D13700(pDevice)
+ #define GUIDRV_SLin_SetSSD1848(pDevice)
+ #define GUIDRV_SLin_SetT6963(pDevice)
+ #define GUIDRV_SLin_SetUC1617(pDevice)
+
+#else
+
+ void GUIDRV_SLin_Config (GUI_DEVICE * pDevice, CONFIG_SLIN * pConfig);
+ void GUIDRV_SLin_SetBus8 (GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+ void GUIDRV_SLin_SetS1D13700(GUI_DEVICE * pDevice);
+ void GUIDRV_SLin_SetSSD1325 (GUI_DEVICE * pDevice);
+ void GUIDRV_SLin_SetSSD1848 (GUI_DEVICE * pDevice);
+ void GUIDRV_SLin_SetT6963 (GUI_DEVICE * pDevice);
+ void GUIDRV_SLin_SetUC1617 (GUI_DEVICE * pDevice);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_SPage.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,289 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_SPage.h
+Purpose : Interface definition for GUIDRV_SPage driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_SPAGE_H
+#define GUIDRV_SPAGE_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Driver specific configuration items
+ //
+ int FirstSEG;
+ int FirstCOM;
+} CONFIG_SPAGE;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_SPage_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_1C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_1C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_1C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_1C1_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_2C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_2C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_2C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_2C1_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_4C0_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_4C0_API;
+
+extern const GUI_DEVICE_API GUIDRV_SPage_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OY_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OX_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OXY_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OS_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSY_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSX_4C1_API;
+extern const GUI_DEVICE_API GUIDRV_SPage_OSXY_4C1_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_SPAGE_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OY_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OX_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OXY_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OS_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSY_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSX_1C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSXY_1C0 &GUIDRV_Win_API
+
+ #define GUIDRV_SPAGE_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OY_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OX_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OXY_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OS_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSY_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSX_1C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSXY_1C1 &GUIDRV_Win_API
+
+ #define GUIDRV_SPAGE_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OY_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OX_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OXY_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OS_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSY_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSX_2C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSXY_2C0 &GUIDRV_Win_API
+
+ #define GUIDRV_SPAGE_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OY_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OX_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OXY_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OS_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSY_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSX_2C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSXY_2C1 &GUIDRV_Win_API
+
+ #define GUIDRV_SPAGE_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OY_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OX_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OXY_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OS_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSY_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSX_4C0 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSXY_4C0 &GUIDRV_Win_API
+
+ #define GUIDRV_SPAGE_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OY_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OX_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OXY_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OS_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSY_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSX_4C1 &GUIDRV_Win_API
+ #define GUIDRV_SPAGE_OSXY_4C1 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_SPAGE_1C0 &GUIDRV_SPage_1C0_API
+ #define GUIDRV_SPAGE_OY_1C0 &GUIDRV_SPage_OY_1C0_API
+ #define GUIDRV_SPAGE_OX_1C0 &GUIDRV_SPage_OX_1C0_API
+ #define GUIDRV_SPAGE_OXY_1C0 &GUIDRV_SPage_OXY_1C0_API
+ #define GUIDRV_SPAGE_OS_1C0 &GUIDRV_SPage_OS_1C0_API
+ #define GUIDRV_SPAGE_OSY_1C0 &GUIDRV_SPage_OSY_1C0_API
+ #define GUIDRV_SPAGE_OSX_1C0 &GUIDRV_SPage_OSX_1C0_API
+ #define GUIDRV_SPAGE_OSXY_1C0 &GUIDRV_SPage_OSXY_1C0_API
+
+ #define GUIDRV_SPAGE_1C1 &GUIDRV_SPage_1C1_API
+ #define GUIDRV_SPAGE_OY_1C1 &GUIDRV_SPage_OY_1C1_API
+ #define GUIDRV_SPAGE_OX_1C1 &GUIDRV_SPage_OX_1C1_API
+ #define GUIDRV_SPAGE_OXY_1C1 &GUIDRV_SPage_OXY_1C1_API
+ #define GUIDRV_SPAGE_OS_1C1 &GUIDRV_SPage_OS_1C1_API
+ #define GUIDRV_SPAGE_OSY_1C1 &GUIDRV_SPage_OSY_1C1_API
+ #define GUIDRV_SPAGE_OSX_1C1 &GUIDRV_SPage_OSX_1C1_API
+ #define GUIDRV_SPAGE_OSXY_1C1 &GUIDRV_SPage_OSXY_1C1_API
+
+ #define GUIDRV_SPAGE_2C0 &GUIDRV_SPage_2C0_API
+ #define GUIDRV_SPAGE_OY_2C0 &GUIDRV_SPage_OY_2C0_API
+ #define GUIDRV_SPAGE_OX_2C0 &GUIDRV_SPage_OX_2C0_API
+ #define GUIDRV_SPAGE_OXY_2C0 &GUIDRV_SPage_OXY_2C0_API
+ #define GUIDRV_SPAGE_OS_2C0 &GUIDRV_SPage_OS_2C0_API
+ #define GUIDRV_SPAGE_OSY_2C0 &GUIDRV_SPage_OSY_2C0_API
+ #define GUIDRV_SPAGE_OSX_2C0 &GUIDRV_SPage_OSX_2C0_API
+ #define GUIDRV_SPAGE_OSXY_2C0 &GUIDRV_SPage_OSXY_2C0_API
+
+ #define GUIDRV_SPAGE_2C1 &GUIDRV_SPage_2C1_API
+ #define GUIDRV_SPAGE_OY_2C1 &GUIDRV_SPage_OY_2C1_API
+ #define GUIDRV_SPAGE_OX_2C1 &GUIDRV_SPage_OX_2C1_API
+ #define GUIDRV_SPAGE_OXY_2C1 &GUIDRV_SPage_OXY_2C1_API
+ #define GUIDRV_SPAGE_OS_2C1 &GUIDRV_SPage_OS_2C1_API
+ #define GUIDRV_SPAGE_OSY_2C1 &GUIDRV_SPage_OSY_2C1_API
+ #define GUIDRV_SPAGE_OSX_2C1 &GUIDRV_SPage_OSX_2C1_API
+ #define GUIDRV_SPAGE_OSXY_2C1 &GUIDRV_SPage_OSXY_2C1_API
+
+ #define GUIDRV_SPAGE_4C0 &GUIDRV_SPage_4C0_API
+ #define GUIDRV_SPAGE_OY_4C0 &GUIDRV_SPage_OY_4C0_API
+ #define GUIDRV_SPAGE_OX_4C0 &GUIDRV_SPage_OX_4C0_API
+ #define GUIDRV_SPAGE_OXY_4C0 &GUIDRV_SPage_OXY_4C0_API
+ #define GUIDRV_SPAGE_OS_4C0 &GUIDRV_SPage_OS_4C0_API
+ #define GUIDRV_SPAGE_OSY_4C0 &GUIDRV_SPage_OSY_4C0_API
+ #define GUIDRV_SPAGE_OSX_4C0 &GUIDRV_SPage_OSX_4C0_API
+ #define GUIDRV_SPAGE_OSXY_4C0 &GUIDRV_SPage_OSXY_4C0_API
+
+ #define GUIDRV_SPAGE_4C1 &GUIDRV_SPage_4C1_API
+ #define GUIDRV_SPAGE_OY_4C1 &GUIDRV_SPage_OY_4C1_API
+ #define GUIDRV_SPAGE_OX_4C1 &GUIDRV_SPage_OX_4C1_API
+ #define GUIDRV_SPAGE_OXY_4C1 &GUIDRV_SPage_OXY_4C1_API
+ #define GUIDRV_SPAGE_OS_4C1 &GUIDRV_SPage_OS_4C1_API
+ #define GUIDRV_SPAGE_OSY_4C1 &GUIDRV_SPage_OSY_4C1_API
+ #define GUIDRV_SPAGE_OSX_4C1 &GUIDRV_SPage_OSX_4C1_API
+ #define GUIDRV_SPAGE_OSXY_4C1 &GUIDRV_SPage_OSXY_4C1_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_SPage_Config(pDevice, pConfig)
+ #define GUIDRV_SPage_SetBus8(pDevice, pHW_API)
+ #define GUIDRV_SPage_Set1502(pDevice)
+ #define GUIDRV_SPage_Set1510(pDevice)
+ #define GUIDRV_SPage_Set1512(pDevice)
+ #define GUIDRV_SPage_SetST75256(pDevice)
+ #define GUIDRV_SPage_SetST7591(pDevice)
+ #define GUIDRV_SPage_SetUC1611(pDevice)
+ #define GUIDRV_SPage_SetUC1628(pDevice)
+ #define GUIDRV_SPage_SetUC1638(pDevice)
+
+ // Obsolete
+ #define GUIDRV_SPage_SetS1D15(pDevice, Controller)
+
+#else
+
+ void GUIDRV_SPage_Config (GUI_DEVICE * pDevice, CONFIG_SPAGE * pConfig);
+ void GUIDRV_SPage_SetBus8 (GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+ void GUIDRV_SPage_Set1502 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_Set1510 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_Set1512 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetST75256(GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetST75320(GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetST7591 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetUC1610 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetUC1611 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetUC1628 (GUI_DEVICE * pDevice);
+ void GUIDRV_SPage_SetUC1638 (GUI_DEVICE * pDevice);
+
+ // Obsolete
+ void GUIDRV_SPage_SetS1D15 (GUI_DEVICE * pDevice, int Controller);
+
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUIDRV_SSD1926.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,120 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUIDRV_SSD1926.h
+Purpose : Interface definition for GUIDRV_SSD1926 driver
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUIDRV_SSD1926_H
+#define GUIDRV_SSD1926_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Configuration structure
+*/
+typedef struct {
+ //
+ // Driver specific configuration items
+ //
+ int FirstSEG;
+ int FirstCOM;
+ int UseCache;
+} CONFIG_SSD1926;
+
+/*********************************************************************
+*
+* Display drivers
+*/
+//
+// Addresses
+//
+extern const GUI_DEVICE_API GUIDRV_SSD1926_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OY_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OX_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OXY_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OS_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OSY_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OSX_8_API;
+extern const GUI_DEVICE_API GUIDRV_SSD1926_OSXY_8_API;
+
+//
+// Macros to be used in configuration files
+//
+#if defined(WIN32) && !defined(LCD_SIMCONTROLLER)
+
+ #define GUIDRV_SSD1926_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OY_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OX_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OXY_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OS_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OSY_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OSX_8 &GUIDRV_Win_API
+ #define GUIDRV_SSD1926_OSXY_8 &GUIDRV_Win_API
+
+#else
+
+ #define GUIDRV_SSD1926_8 &GUIDRV_SSD1926_8_API
+ #define GUIDRV_SSD1926_OY_8 &GUIDRV_SSD1926_OY_8_API
+ #define GUIDRV_SSD1926_OX_8 &GUIDRV_SSD1926_OX_8_API
+ #define GUIDRV_SSD1926_OXY_8 &GUIDRV_SSD1926_OXY_8_API
+ #define GUIDRV_SSD1926_OS_8 &GUIDRV_SSD1926_OS_8_API
+ #define GUIDRV_SSD1926_OSY_8 &GUIDRV_SSD1926_OSY_8_API
+ #define GUIDRV_SSD1926_OSX_8 &GUIDRV_SSD1926_OSX_8_API
+ #define GUIDRV_SSD1926_OSXY_8 &GUIDRV_SSD1926_OSXY_8_API
+
+#endif
+
+/*********************************************************************
+*
+* Public routines
+*/
+void GUIDRV_SSD1926_Config (GUI_DEVICE * pDevice, CONFIG_SSD1926 * pConfig);
+void GUIDRV_SSD1926_SetBus16(GUI_DEVICE * pDevice, GUI_PORT_API * pHW_API);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/GUI_ARRAY.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,82 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : GUI_ARRAY.h +Purpose : Array handling routines +---------------------------END-OF-HEADER------------------------------ +*/ + +#ifndef GUI_ARRAY_H +#define GUI_ARRAY_H + +#include "WM_Intern.h" + +#if GUI_WINSUPPORT + +/********************************************************************* +* +* Public types +* +********************************************************************** +*/ +typedef WM_HMEM GUI_ARRAY; + +/********************************************************************* +* +* Public functions +* +********************************************************************** +*/ +GUI_ARRAY GUI_ARRAY_Create (void); +int GUI_ARRAY_AddItem (GUI_ARRAY hArray, const void * pNew, int Len); +void GUI_ARRAY_Delete (GUI_ARRAY hArray); +WM_HMEM GUI_ARRAY_GethItem (GUI_ARRAY hArray, unsigned int Index); +unsigned GUI_ARRAY_GetNumItems (GUI_ARRAY hArray); +void * GUI_ARRAY_GetpItemLocked (GUI_ARRAY hArray, unsigned int Index); +int GUI_ARRAY_SethItem (GUI_ARRAY hArray, unsigned int Index, WM_HMEM hItem); +WM_HMEM GUI_ARRAY_SetItem (GUI_ARRAY hArray, unsigned int Index, const void * pData, int Len); +void GUI_ARRAY_DeleteItem (GUI_ARRAY hArray, unsigned int Index); +char GUI_ARRAY_InsertBlankItem (GUI_ARRAY hArray, unsigned int Index); +WM_HMEM GUI_ARRAY_InsertItem (GUI_ARRAY hArray, unsigned int Index, int Len); +void * GUI_ARRAY_ResizeItemLocked(GUI_ARRAY hArray, unsigned int Index, int Len); + +#endif /* GUI_WINSUPPORT */ + +#endif /* GUI_ARRAY_H */ + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_ARRAY_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,78 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_ARRAY_Private.h
+Purpose : Private array handling routines, should be used only
+ from within GUI_ARRAY... routines!
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_ARRAY_PRIVATE_H
+#define GUI_ARRAY_PRIVATE_H
+
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Private types
+*
+**********************************************************************
+*/
+typedef struct {
+ U16 NumItems;
+ WM_HMEM haHandle; /* Handle to buffer holding handles */
+} GUI_ARRAY_OBJ;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+WM_HMEM GUI_ARRAY__GethItem (const GUI_ARRAY_OBJ * pThis, unsigned int Index);
+void * GUI_ARRAY__GetpItem (const GUI_ARRAY_OBJ * pThis, unsigned int Index);
+void * GUI_ARRAY__GetpItemLocked(const GUI_ARRAY_OBJ * pThis, unsigned int Index);
+int GUI_ARRAY__SethItem ( GUI_ARRAY_OBJ * pThis, unsigned int Index, WM_HMEM hItem);
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* GUI_ARRAY_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_BMP_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,114 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_BMP_Private.h
+Purpose : Private header file for GUI_BMP... functions
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_BMP_PRIVATE_H
+#define GUI_BMP_PRIVATE_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define BI_RGB 0
+#define BI_RLE8 1
+#define BI_RLE4 2
+#define BI_BITFIELDS 3
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+//
+// Default parameter structure for reading data from memory
+//
+typedef struct {
+ const U8 * pFileData;
+} GUI_BMP_PARAM;
+
+//
+// Context structure for getting stdio input
+//
+typedef struct {
+ GUI_GET_DATA_FUNC * pfGetData; // Function pointer
+ U32 Off; // Data pointer
+ void * pParam; // Parameter pointer passed to function
+} GUI_BMP_CONTEXT;
+
+//
+// Parameter structure for passing several required variables to the
+// functions _DrawLine_RGB() and _DrawLine_ARGB() (in GUI_BMP_EnableAlpha.c).
+//
+typedef struct {
+ const U8 * pSrc; // Pointer to data
+ I32 xSrc; // Used to read data
+ int ySrc; // Used to read data
+ I32 xSize;
+ U32 BytesPerPixel;
+ tLCDDEV_Color2Index * pfColor2Index;
+ tLCDDEV_Index2Color * pfIndex2Color; // Used to manage bitfield conversion
+ LCD_API_NEXT_PIXEL * pNextPixel_API;
+ int x0; // Used to draw data
+ int y0; // Used to draw data
+ int x1; // Used to draw data
+ int y1; // Used to draw data
+} GUI_DRAWLINE_INFO;
+
+/*********************************************************************
+*
+* Interface
+*
+**********************************************************************
+*/
+int GUI_BMP__GetData (void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off);
+int GUI_BMP__Init (GUI_BMP_CONTEXT * pContext, I32 * pWidth, I32 * pHeight, U16 * pBitCount, int * pNumColors, int * pCompression);
+int GUI_BMP__ReadData (GUI_BMP_CONTEXT * pContext, int NumBytes, const U8 ** ppData, unsigned StartOfFile);
+int GUI_BMP__ReadPalette(GUI_BMP_CONTEXT * pContext, int NumColors);
+
+#endif /* GUI_BMP_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/GUI_ConfDefaults.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,199 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : GUI_ConfDefaults.h +Purpose : Defaults for GUI config switches. +---------------------------END-OF-HEADER------------------------------ + +Attention : Do not modify this file ! If you do, you will not + be able do update to a later GUI version ! + +*/ + +#ifndef GUI_CONFDEFAULTS_H +#define GUI_CONFDEFAULTS_H + +#include "GUIConf.h" + +#ifndef GUI_USE_MIXCOLORS + #define GUI_USE_MIXCOLORS 1 +#endif + +#ifndef GUI_USE_BIDI2 + #define GUI_USE_BIDI2 1 +#endif + +#ifndef LCD_MAX_LOG_COLORS + #define LCD_MAX_LOG_COLORS 256 +#else + #if (LCD_MAX_LOG_COLORS > 256) + #error The value of LCD_MAX_LOG_COLORS must be <= 256! + #endif +#endif + +#define LCD_PIXELINDEX U32 + +#ifndef LCD_YMAG + #define LCD_YMAG 1 +#endif +#ifndef LCD_XMAG + #define LCD_XMAG 1 +#endif + +/********************************************************************** +* +* Defaults for config switches +* +*********************************************************************** +*/ + +/* ATTENTION: This define swaps the meaning of a logical color from + ABGR to ARGB. + + It further swaps the meaning of a transparent pixel: + ABGR: 0x00 means opaque, 0xFF means transparent + ARGB: 0x00 means transparent, 0xFF means opaque (default) +*/ +#ifndef GUI_USE_ARGB + #define GUI_USE_ARGB 1 +#endif + +/* Define "universal pointer". Normally, this is not needed (define will expand to nothing) + However, on some systems (AVR - IAR compiler) it can be necessary ( -> __generic), + since a default pointer can access RAM only, not the built-in Flash +*/ +#ifndef GUI_UNI_PTR + #define GUI_UNI_PTR /* Remains only for compatibility purpose, no longer used in emWin */ +#endif + +/* Define const storage. Normally, this is not needed (define will expand to const) + However, on some systems (AVR - IAR compiler) it can be necessary ( -> __flash const), + since otherwise constants are copied into RAM +*/ +#ifndef GUI_CONST_STORAGE + #define GUI_CONST_STORAGE const +#endif + +#ifndef GUI_USE_MEMDEV_1BPP_FOR_SCREEN + #define GUI_USE_MEMDEV_1BPP_FOR_SCREEN 1 +#endif + +#ifndef GUI_BIDI_MAX_CHARS_PER_LINE + #if GUI_USE_BIDI2 + #define GUI_BIDI_MAX_CHARS_PER_LINE 200 + #else + #define GUI_BIDI_MAX_CHARS_PER_LINE 80 + #endif +#endif + +#ifndef GUI_SUPPORT_TOUCH + #define GUI_SUPPORT_TOUCH 0 +#endif + +#ifndef GUI_SUPPORT_MOUSE + #define GUI_SUPPORT_MOUSE 0 +#endif + +#ifndef GUI_SUPPORT_MEMDEV + #define GUI_SUPPORT_MEMDEV 0 +#endif + +#ifndef GUI_OS + #define GUI_OS 0 +#endif + +#ifndef GUI_NUM_LAYERS + #define GUI_NUM_LAYERS 1 +#endif + +#ifndef GUI_SUPPORT_CURSOR + #define GUI_SUPPORT_CURSOR (GUI_SUPPORT_MOUSE | GUI_SUPPORT_TOUCH) +#endif + +#ifndef GUI_CURSOR_LAYER + #define GUI_CURSOR_LAYER 0 +#endif + +#ifndef GUI_SUPPORT_ROTATION + #define GUI_SUPPORT_ROTATION 1 +#endif + +/* In order to avoid warnings for undefined parameters */ +#ifndef GUI_USE_PARA + #if defined (__BORLANDC__) || defined(NC30) || defined(NC308) + #define GUI_USE_PARA(para) + #else + #define GUI_USE_PARA(para) (void)para + #endif +#endif + +/* Default for types */ +#ifndef GUI_TIMER_TIME + #define GUI_TIMER_TIME int /* default is to use 16 bits for 16 bit CPUs, + 32 bits on 32 bit CPUs for timing */ +#endif + +/* Types used for memory allocation */ +#define GUI_ALLOC_DATATYPE I32 +#define GUI_ALLOC_DATATYPE_U U32 + +#ifndef GUI_MAX_XBF_BYTES + #define GUI_MAX_XBF_BYTES 200 +#endif + +#ifndef GUI_MEMSET + #define GUI_MEMSET memset +#endif + +#ifndef GUI_MEMCPY + #define GUI_MEMCPY memcpy +#endif + +/* Optional custom drawing of memory devices */ +#ifndef GUI_MEMDEV_SUPPORT_CUSTOMDRAW + #define GUI_MEMDEV_SUPPORT_CUSTOMDRAW 0 +#endif + +/* Clip static memory devices to parent borders */ +#ifndef GUI_MEMDEV_CLIP_AT_PARENT + #define GUI_MEMDEV_CLIP_AT_PARENT 0 +#endif + +#endif /* ifdef GUI_CONFDEFAULTS_H */ + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Debug.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,200 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_Debug.h
+Purpose : Debug macros
+----------------------------------------------------------------------
+ Debug macros for logging
+
+ In the GUI Simulation, all output is transferred into the log window.
+*/
+
+#ifndef GUI_DEBUG_H
+#define GUI_DEBUG_H
+
+#include <stddef.h>
+
+#include "GUI.h"
+
+#define GUI_DEBUG_LEVEL_NOCHECK 0 /* No run time checks are performed */
+#define GUI_DEBUG_LEVEL_CHECK_PARA 1 /* Parameter checks are performed to avoid crashes */
+#define GUI_DEBUG_LEVEL_CHECK_ALL 2 /* Parameter checks and consistency checks are performed */
+#define GUI_DEBUG_LEVEL_LOG_ERRORS 3 /* Errors are recorded */
+#define GUI_DEBUG_LEVEL_LOG_WARNINGS 4 /* Errors & Warnings are recorded */
+#define GUI_DEBUG_LEVEL_LOG_ALL 5 /* Errors, Warnings and Messages are recorded. */
+
+#ifndef GUI_DEBUG_LEVEL
+ #ifdef WIN32
+ #define GUI_DEBUG_LEVEL GUI_DEBUG_LEVEL_LOG_WARNINGS /* Simulation should log all warnings */
+ #else
+ #define GUI_DEBUG_LEVEL GUI_DEBUG_LEVEL_NOCHECK /* For most targets, min. size is important */
+ #endif
+#endif
+
+#define GUI_LOCK_H(hMem) GUI_ALLOC_LockH(hMem)
+#define GUI_UNLOCK_H(pMem) GUI_ALLOC_UnlockH((void **)&pMem)
+
+/*******************************************************************
+*
+* Commandline
+*
+********************************************************************
+*/
+
+#ifdef WIN32
+ #define GUI_DEBUG_GETCMDLINE() SIM_GetCmdLine()
+#else
+ #define GUI_DEBUG_GETCMDLINE() 0
+#endif
+
+/*******************************************************************
+*
+* Error macros
+*
+********************************************************************
+*/
+
+/* Make sure the macros are actually defined */
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ERRORS
+ #define GUI_DEBUG_ERROROUT(s) GUI_ErrorOut(s)
+ #define GUI_DEBUG_ERROROUT1(s,p0) GUI_ErrorOut1(s,p0)
+ #define GUI_DEBUG_ERROROUT2(s,p0,p1) GUI_ErrorOut2(s,p0,p1)
+ #define GUI_DEBUG_ERROROUT3(s,p0,p1,p2) GUI_ErrorOut3(s,p0,p1,p2)
+ #define GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3) GUI_ErrorOut4(s,p0,p1,p2,p3)
+ #define GUI_DEBUG_ERROROUT_IF(exp,s) { if (exp) GUI_DEBUG_ERROROUT(s); }
+ #define GUI_DEBUG_ERROROUT1_IF(exp,s,p0) { if (exp) GUI_DEBUG_ERROROUT1(s,p0); }
+ #define GUI_DEBUG_ERROROUT2_IF(exp,s,p0,p1) { if (exp) GUI_DEBUG_ERROROUT2(s,p0,p1); }
+ #define GUI_DEBUG_ERROROUT3_IF(exp,s,p0,p1,p2) { if (exp) GUI_DEBUG_ERROROUT3(s,p0,p1,p2); }
+ #define GUI_DEBUG_ERROROUT4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3); }
+#else
+ #define GUI_DEBUG_ERROROUT(s)
+ #define GUI_DEBUG_ERROROUT1(s,p0)
+ #define GUI_DEBUG_ERROROUT2(s,p0,p1)
+ #define GUI_DEBUG_ERROROUT3(s,p0,p1,p2)
+ #define GUI_DEBUG_ERROROUT4(s,p0,p1,p2,p3)
+ #define GUI_DEBUG_ERROROUT_IF(exp,s)
+ #define GUI_DEBUG_ERROROUT1_IF(exp,s,p0)
+ #define GUI_DEBUG_ERROROUT2_IF(exp,s,p0,p1)
+ #define GUI_DEBUG_ERROROUT3_IF(exp,s,p0,p1,p2)
+ #define GUI_DEBUG_ERROROUT4_IF(exp,s,p0,p1,p2,p3)
+#endif
+
+/*******************************************************************
+*
+* Warning macros
+*
+********************************************************************
+*/
+
+/* Make sure the macros are actually defined */
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_WARNINGS
+ #define GUI_DEBUG_WARN(s) GUI_Warn(s)
+ #define GUI_DEBUG_WARN1(s,p0) GUI_Warn1(s,p0)
+ #define GUI_DEBUG_WARN2(s,p0,p1) GUI_Warn2(s,p0,p1)
+ #define GUI_DEBUG_WARN3(s,p0,p1,p2) GUI_Warn3(s,p0,p1,p2)
+ #define GUI_DEBUG_WARN4(s,p0,p1,p2,p3) GUI_Warn4(s,p0,p1,p2,p3)
+ #define GUI_DEBUG_WARN_IF(exp,s) { if (exp) GUI_DEBUG_WARN(s); }
+ #define GUI_DEBUG_WARN1_IF(exp,s,p0) { if (exp) GUI_DEBUG_WARN1(s,p0); }
+ #define GUI_DEBUG_WARN2_IF(exp,s,p0,p1) { if (exp) GUI_DEBUG_WARN2(s,p0,p1); }
+ #define GUI_DEBUG_WARN3_IF(exp,s,p0,p1,p2) { if (exp) GUI_DEBUG_WARN3(s,p0,p1,p2); }
+ #define GUI_DEBUG_WARN4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_WARN4(s,p0,p1,p2,p3); }
+#else
+ #define GUI_DEBUG_WARN(s)
+ #define GUI_DEBUG_WARN1(s,p0)
+ #define GUI_DEBUG_WARN2(s,p0,p1)
+ #define GUI_DEBUG_WARN3(s,p0,p1,p2)
+ #define GUI_DEBUG_WARN4(s,p0,p1,p2,p3)
+ #define GUI_DEBUG_WARN_IF(exp,s)
+ #define GUI_DEBUG_WARN1_IF(exp,s,p0)
+ #define GUI_DEBUG_WARN2_IF(exp,s,p0,p1)
+ #define GUI_DEBUG_WARN3_IF(exp,s,p0,p1,p2)
+ #define GUI_DEBUG_WARN4_IF(exp,s,p0,p1,p2,p3)
+#endif
+
+/*******************************************************************
+*
+* Logging macros
+*
+********************************************************************
+*/
+/* Make sure the macros are actually defined */
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ALL
+ #define GUI_DEBUG_LOG(s) GUI_Log(s)
+ #define GUI_DEBUG_LOG1(s,p0) GUI_Log1(s,p0)
+ #define GUI_DEBUG_LOG2(s,p0,p1) GUI_Log2(s,p0,p1)
+ #define GUI_DEBUG_LOG3(s,p0,p1,p2) GUI_Log3(s,p0,p1,p2)
+ #define GUI_DEBUG_LOG4(s,p0,p1,p2,p3) GUI_Log4(s,p0,p1,p2,p3)
+ #define GUI_DEBUG_LOG_IF(exp,s) { if (exp) GUI_DEBUG_LOG(s); }
+ #define GUI_DEBUG_LOG1_IF(exp,s,p0) { if (exp) GUI_DEBUG_LOG1(s,p0); }
+ #define GUI_DEBUG_LOG2_IF(exp,s,p0,p1) { if (exp) GUI_DEBUG_LOG2(s,p0,p1); }
+ #define GUI_DEBUG_LOG3_IF(exp,s,p0,p1,p2) { if (exp) GUI_DEBUG_LOG3(s,p0,p1,p2); }
+ #define GUI_DEBUG_LOG4_IF(exp,s,p0,p1,p2,p3) { if (exp) GUI_DEBUG_LOG4(s,p0,p1,p2,p3); }
+#else
+ #define GUI_DEBUG_LOG(s)
+ #define GUI_DEBUG_LOG1(s,p0)
+ #define GUI_DEBUG_LOG2(s,p0,p1)
+ #define GUI_DEBUG_LOG3(s,p0,p1,p2)
+ #define GUI_DEBUG_LOG4(s,p0,p1,p2,p3)
+ #define GUI_DEBUG_LOG_IF(exp,s)
+ #define GUI_DEBUG_LOG1_IF(exp,s,p0)
+ #define GUI_DEBUG_LOG2_IF(exp,s,p0,p1)
+ #define GUI_DEBUG_LOG3_IF(exp,s,p0,p1,p2)
+ #define GUI_DEBUG_LOG4_IF(exp,s,p0,p1,p2,p3)
+#endif
+
+/*******************************************************************
+*
+* Asserts
+*
+********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_ERRORS
+ #define GUI_DEBUG_ASSERT(exp) { if (!exp) GUI_DEBUG_ERROROUT(#exp); }
+#else
+ #define GUI_DEBUG_ASSERT(exp)
+#endif
+
+#endif /* LCD_H */
+
+
+
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_FontIntern.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,92 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_FontIntern.h
+Purpose : Internal declarations used in font files
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+ be able do update to a later GUI version !
+
+*/
+
+
+#ifndef GUI_FONTINTERN_H /* Guard against multiple inclusion */
+#define GUI_FONTINTERN_H
+
+#include "GUI.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8ASCII_Prop;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontF8x13_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontF8x15B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font10S_ASCII_FontProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font10ASCIIProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13H_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font13HB_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16_1_FontProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16ASCIIProp1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font16B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font20_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font20B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font24_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font24B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font32_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font32B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontComic18B_ASCII_Prop1;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_FontComic24B_ASCII_Prop1;
+
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font6x8ASCII_Prop0;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8x16ASCII_Prop0;
+extern GUI_CONST_STORAGE GUI_FONT_PROP GUI_Font8x8ASCII_Prop0;
+
+extern GUI_CONST_STORAGE GUI_CHARINFO GUI_Font16_HK_CharInfo[169];
+
+#if defined(__cplusplus)
+ }
+#endif
+
+
+#endif /* Guard against multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_GCache_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,114 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_GCache_Private.h
+Purpose : Private header
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_GCACHE_PRIVATE_H
+#define GUI_GCACHE_PRIVATE_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define DRIVER_CONTEXT DRIVER_CONTEXT_GCACHE
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* DRIVER_CONTEXT
+*/
+typedef struct {
+ int x0, y0, x1, y1, IsDirty;
+ int xSize, ySize;
+ int CacheLocked;
+ int MemSize;
+ int BitsPerPixel;
+ int BytesPerLine;
+ //
+ // Line buffer for reading operation
+ //
+ LCD_PIXELINDEX * pLineBuffer;
+ //
+ // Palette for drawing 'cache bitmap'
+ //
+ LCD_PIXELINDEX * pPalette;
+ //
+ // Cache management
+ //
+ void (* pfReadRect) (GUI_DEVICE * pDevice, int _x0, int _y0, int _x1, int _y1, LCD_PIXELINDEX * pBuffer);
+ void (* pfSendCacheRect)(GUI_DEVICE * pDevice);
+ U32 * pVMEM;
+ //
+ // Drawing functions
+ //
+ void (* pfDrawBitmap )(GUI_DEVICE * pDevice, int _x0, int _y0, int xsize, int ysize, int _BitsPerPixel, int _BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans);
+ void (* pfDrawHLine )(GUI_DEVICE * pDevice, int _x0, int _y0, int _x1);
+ void (* pfDrawVLine )(GUI_DEVICE * pDevice, int _x , int _y0, int _y1);
+ void (* pfFillRect )(GUI_DEVICE * pDevice, int _x0, int _y0, int _x1, int _y1);
+ LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE * pDevice, int _x, int _y);
+ void (* pfSetPixelIndex)(GUI_DEVICE * pDevice, int _x, int _y, LCD_PIXELINDEX ColorIndex);
+ void (* pfXorPixel )(GUI_DEVICE * pDevice, int _x, int _y);
+ //
+ // GetData function
+ //
+ void *(* pfGetDevData )(GUI_DEVICE * pDevice, int Index);
+} DRIVER_CONTEXT;
+
+/*********************************************************************
+*
+* Interface
+*
+**********************************************************************
+*/
+GUI_DEVICE * GUI_GCACHE__CreateEx(int LayerIndex, const LCD_API_COLOR_CONV * pColorConvAPI, int BitsPerPixel);
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_GIF_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,133 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_GIF_Private.h
+Purpose : Private header file for GUI_GIF... functions
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_GIF_PRIVATE_H
+#define GUI_GIF_PRIVATE_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define MAX_NUM_LWZ_BITS 12
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+/* Context structure */
+typedef struct {
+ /* Required for getting input */
+ unsigned NumBytesInBuffer; /* Remaining bytes in buffer */
+ const U8 * pBuffer; /* Pointer into buffer for reading data */
+ GUI_GET_DATA_FUNC * pfGetData; /* Function pointer */
+ void * pParam; /* Parameter pointer passed to function */
+ U32 Off; /* Data pointer */
+ /* Decompression data */
+ U8 aBuffer[258]; /* Input buffer for data block */
+ short aCode [(1 << MAX_NUM_LWZ_BITS)]; /* This array stores the LZW codes for the compressed strings */
+ U8 aPrefix[(1 << MAX_NUM_LWZ_BITS)]; /* Prefix character of the LZW code. */
+ U8 aDecompBuffer[3000]; /* Decompression buffer. The higher the compression, the more bytes are needed in the buffer. */
+ U8 * sp; /* Pointer into the decompression buffer */
+ int CurBit;
+ int LastBit;
+ int GetDone;
+ int LastByte;
+ int ReturnClear;
+ int CodeSize;
+ int SetCodeSize;
+ int MaxCode;
+ int MaxCodeSize;
+ int ClearCode;
+ int EndCode;
+ int FirstCode;
+ int OldCode;
+ /* Palette buffer */
+ GUI_COLOR aColorTable[256];
+} GUI_GIF_CONTEXT;
+
+typedef struct {
+ int XPos;
+ int YPos;
+ int XSize;
+ int YSize;
+ int Flags;
+ int NumColors;
+} IMAGE_DESCRIPTOR;
+
+/* Default parameter structure for reading data from memory */
+typedef struct {
+ const U8 * pFileData;
+ U32 FileSize;
+} GUI_GIF_PARAM;
+
+typedef int DRAW_FROM_DATABLOCK(GUI_GIF_CONTEXT * pContext, IMAGE_DESCRIPTOR * pDescriptor, int x0, int y0, int Transparency, int Disposal, int Num, int Denom);
+typedef void CLEAR_UNUSED_PIXELS(int x0, int y0, IMAGE_DESCRIPTOR * pDescriptor, GUI_GIF_IMAGE_INFO * pInfo, int Num, int Denom);
+
+/*********************************************************************
+*
+* Private data
+*
+**********************************************************************
+*/
+extern const int GUI_GIF__aInterlaceOffset[4];
+extern const int GUI_GIF__aInterlaceYPos[4];
+
+/*********************************************************************
+*
+* Interface
+*
+**********************************************************************
+*/
+int GUI_GIF__ReadData(GUI_GIF_CONTEXT * pContext, unsigned NumBytes, const U8 ** ppData, unsigned StartOfFile);
+int GUI_GIF__GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off);
+int GUI_GIF__DrawFromFilePointer(GUI_GIF_CONTEXT * pContext, int x0, int y0, int Index, int Num, int Denom, DRAW_FROM_DATABLOCK pfDrawFromDataBlock, CLEAR_UNUSED_PIXELS pfClearUnusedPixels);
+void GUI_GIF__InitLZW(GUI_GIF_CONTEXT * pContext, int InputCodeSize);
+int GUI_GIF__GetNextByte(GUI_GIF_CONTEXT * pContext);
+
+#endif /* GUI_GIF_PRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_HOOK.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,86 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_HOOK.h
+Purpose : Hook handling routines
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef GUI_HOOK_H
+#define GUI_HOOK_H
+
+#include "WM_Intern.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+
+typedef int GUI_HOOK_FUNC(WM_MESSAGE* pMsg);
+
+typedef struct GUI_HOOK {
+ struct GUI_HOOK* pNext;
+ GUI_HOOK_FUNC* pHookFunc;
+} GUI_HOOK;
+
+/*********************************************************************
+*
+* Functions
+*
+**********************************************************************
+*/
+
+void GUI_HOOK_Add (GUI_HOOK** ppFirstHook, GUI_HOOK* pNewHook, GUI_HOOK_FUNC* pHookFunc);
+void GUI_HOOK_Remove(GUI_HOOK** ppFirstHook, GUI_HOOK* pHook);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+#endif /* GUI_HOOK_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_JPEG_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,308 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_JPEG_Private.h
+Purpose : Private header
+----------------------------------------------------------------------
+
+Explanation of terms:
+
+ Component - Color channel, e.g., Red or Luminance.
+ Sample - Single component value (i.e., one number in the image data).
+ Coefficient - Frequency coefficient (a DCT transform output number).
+ Block - 8x8 group of samples or coefficients.
+ MCU - (Minimum Coded Unit) is an interleaved set of blocks of size
+ determined by the sampling factors, or a single block in a
+ noninterleaved scan.
+
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_JPEG_PRIVATE_H
+#define GUI_JPEG_PRIVATE_H
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define JPEG_LOCK_H(h) (GUI_JPEG_DCONTEXT *)GUI_LOCK_H(h)
+
+/*********************************************************************
+*
+* Scan types
+*/
+#define GRAYSCALE 0
+#define YH1V1 1
+#define YH2V1 2
+#define YH1V2 3
+#define YH2V2 4
+
+/*********************************************************************
+*
+* Maximum number of...
+*/
+#define MAX_COMPONENTS 4
+#define MAX_HUFFTABLES 8
+#define MAX_QUANTTABLES 4
+#define MAX_COMPSINSCAN 4
+#define MAX_BLOCKSPERMCU 10
+
+/*********************************************************************
+*
+* Marker definitions
+*/
+#define M_SOF0 0xc0 // Start Of Frame
+#define M_SOF1 0xc1
+#define M_SOF2 0xc2
+#define M_SOF3 0xc3
+
+#define M_SOF5 0xc5
+#define M_SOF6 0xc6
+#define M_SOF7 0xc7
+
+#define M_JPG 0xc8
+#define M_SOF9 0xc9
+#define M_SOF10 0xca
+#define M_SOF11 0xcb
+
+#define M_SOF13 0xcd
+#define M_SOF14 0xce
+#define M_SOF15 0xcf
+
+#define M_DHT 0xc4 // Define Huffman Table
+
+#define M_DAC 0xcc // Define Arithmetic Coding Table
+
+#define M_RST0 0xd0
+#define M_RST1 0xd1
+#define M_RST2 0xd2
+#define M_RST3 0xd3
+#define M_RST4 0xd4
+#define M_RST5 0xd5
+#define M_RST6 0xd6
+#define M_RST7 0xd7
+
+#define M_SOI 0xd8 // Start Of Image
+#define M_EOI 0xd9
+#define M_SOS 0xda // Start Of Scan
+#define M_DQT 0xdb // Define Quantisation Table
+#define M_DRI 0xdd // Define Restart Interval
+
+#define M_APP0 0xe0 // Application Usage
+#define M_APP14 0xee // Adobe marker
+
+#define M_TEM 0x01
+
+#define ADOBE_TRANSFORM_RGB 0
+#define ADOBE_TRANSFORM_YCBCR 1
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+//
+// Default parameter structure for reading data from memory
+//
+typedef struct {
+ const U8 * pFileData;
+ I32 FileSize;
+} GUI_JPEG_PARAM;
+
+//
+// Huffman table definition
+//
+typedef struct {
+ unsigned aLookUp[256];
+ U8 aCodeSize[256];
+ unsigned aTree[512];
+} HUFF_TABLE;
+
+//
+// Coefficient buffer used for progressive JPEGs
+//
+typedef struct {
+ int NumBlocksX;
+ int NumBlocksY;
+ unsigned BlockSize;
+ GUI_HMEM hData;
+} COEFF_BUFFER;
+
+typedef struct GUI_JPEG_DCONTEXT GUI_JPEG_DCONTEXT;
+
+struct GUI_JPEG_DCONTEXT {
+ //
+ // Function pointer for reading one byte
+ //
+ int (* pfGetU8)(GUI_JPEG_DCONTEXT * pContext, U8 * pByte);
+
+ GUI_GET_DATA_FUNC * pfGetData; // 'GetData' Function pointer
+ void * pParam; // Pointer passed to 'GetData' function
+ U32 Off; // Data pointer
+ //
+ // Image size
+ //
+ U16 xSize;
+ U16 ySize;
+ //
+ // Input buffer
+ //
+ const U8 * pBuffer;
+ unsigned NumBytesInBuffer;
+ U8 StartOfFile;
+ U8 aStuff[4]; // Stuff back buffer
+ U8 NumBytesStuffed; // Number of stuffed bytes
+ //
+ // Bit buffer
+ //
+ U32 BitBuffer;
+ int NumBitsLeft;
+ //
+ // Huffman tables
+ //
+ U8 aHuffNumTableAvail[MAX_HUFFTABLES];
+ U8 aaHuffNum[MAX_HUFFTABLES][17]; // Pointer to number of Huffman codes per bit size
+ U8 aaHuffVal[MAX_HUFFTABLES][256]; // Pointer to Huffman codes
+ HUFF_TABLE aHuffTable[MAX_HUFFTABLES];
+ HUFF_TABLE * apDC_Huff[MAX_BLOCKSPERMCU];
+ HUFF_TABLE * apAC_Huff[MAX_BLOCKSPERMCU];
+ //
+ // Quantization tables
+ //
+ U16 aaQuantTbl[MAX_QUANTTABLES][64];
+ U16 * apQuantTbl[MAX_QUANTTABLES];
+ //
+ // Component information
+ //
+ U8 NumCompsPerFrame; // Number of components per frame
+ U8 aCompHSamp[MAX_COMPONENTS]; // Component's horizontal sampling factor
+ U8 aCompVSamp[MAX_COMPONENTS]; // Component's vertical sampling factor
+ U8 aCompQuant[MAX_COMPONENTS]; // Component's quantization table selector
+ U8 aCompId [MAX_COMPONENTS]; // Component's ID
+ U8 NumCompsPerScan; // Number of components per scan
+ U8 aCompList[MAX_COMPSINSCAN]; // Components in this scan
+ U8 aCompDC_Tab[MAX_COMPONENTS]; // Component's DC Huffman coding table selector
+ U8 aCompAC_Tab[MAX_COMPONENTS]; // Component's AC Huffman coding table selector
+ unsigned * apComponent[MAX_BLOCKSPERMCU]; // Points into the table aLastDC_Val[]
+ unsigned aLastDC_Val[MAX_COMPONENTS]; // Table of last DC values
+ //
+ // Data used for progressive scans
+ //
+ U8 SpectralStart; // Spectral selection start
+ U8 SpectralEnd; // Spectral selection end
+ U8 SuccessiveLow; // Successive approximation low
+ U8 SuccessiveHigh; // Successive approximation high
+ COEFF_BUFFER aDC_Coeffs[MAX_COMPONENTS]; // DC coefficient buffer for progressive scan
+ COEFF_BUFFER aAC_Coeffs[MAX_COMPONENTS]; // AC coefficient buffer for progressive scan
+ int aBlockY_MCU[MAX_COMPONENTS]; //
+ //
+ // Common
+ //
+ U8 TransformationRequired;
+ U8 IsProgressive; // Flag is set to 1 if JPEG is progressive
+ U8 ScanType; // Gray, Yh1v1, Yh1v2, Yh2v1, Yh2v2
+ int MaxMCUsPerRow; // Maximum number of MCUs per row
+ int MaxMCUsPerCol; // Maximum number of MCUs per column
+ int MaxBlocksPerMCU; // Maximum number of blocks per MCU
+ int MaxBlocksPerRow; // Maximum number of blocks per row
+ int MaxMCU_xSize; // MCU's max. X size in pixels
+ int MaxMCU_ySize; // MCU's max. Y size in pixels
+ int DestBytesPerPixel; // 4 (RGB) or 1 (Y)
+ int DestBytesPerScanline; // Rounded up
+ int RealDestBytesPerScanline; // Actual bytes
+ int EOB_Run; // 'End Of Band' run
+ int RestartInterval;
+ int RestartsLeft;
+ int NextRestartNum;
+ int MCUsPerRow;
+ int MCUsPerCol;
+ int NumBlocksPerMCU;
+ int aMCU_Org[MAX_BLOCKSPERMCU];
+ //
+ // Block buffer
+ //
+ GUI_HMEM hBlocks;
+ GUI_HMEM hBlockMaxZagSet;
+ //
+ // Sample buffer
+ //
+ GUI_HMEM hSampleBuf;
+ U8 * pSampleBuf;
+ //
+ // Status
+ //
+ int TotalLinesLeft; // Total number of lines left in image
+ int MCULinesLeft; // Total number of lines left in current MCU
+ //
+ // Output buffer(s)
+ //
+ GUI_HMEM hScanLine0; // Buffer 0
+ GUI_HMEM hScanLine1; // Buffer 1, only used for V2 sampling factors
+ U8 BufferIndex;
+ //
+ // Arrays used for converting YCbCr to RGB
+ //
+ int aCRR[256];
+ int aCBB[256];
+ I32 aCRG[256];
+ I32 aCBG[256];
+};
+
+/*********************************************************************
+*
+* Private interface
+*
+**********************************************************************
+*/
+int GUI_JPEG__DecodeLine (GUI_JPEG_DCONTEXT * pContext);
+void GUI_JPEG__Free (GUI_JPEG_DCONTEXT * pContext);
+GUI_COLOR GUI_JPEG__GetColorGray (const U8 ** ppData, unsigned SkipCnt);
+GUI_COLOR GUI_JPEG__GetColorRGB (const U8 ** ppData, unsigned SkipCnt);
+int GUI_JPEG__GetData (void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off);
+int GUI_JPEG__InitDraw (GUI_HMEM hContext);
+int GUI_JPEG__ReadUntilSOF (GUI_HMEM hContext);
+void GUI_JPEG__SetNextBand (GUI_JPEG_DCONTEXT * pContext);
+int GUI_JPEG__SkipLine (GUI_JPEG_DCONTEXT * pContext);
+int GUI_JPEG__GetInfoEx (GUI_HMEM hContext, GUI_JPEG_INFO * pInfo);
+
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,737 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_Private.h
+Purpose : GUI internal declarations
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_PRIVATE_H
+#define GUI_PRIVATE_H
+
+#include "GUI.h"
+#include "LCD_Protected.h"
+#include "GUI_Debug.h"
+#if GUI_WINSUPPORT
+ #include "WM_GUI.h"
+#endif
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defaults for config switches
+*
+**********************************************************************
+
+ The config switches below do not affect the interface in GUI.h and
+ are therefor not required to be in GUI.h.
+*/
+
+/* Short address area.
+ For most compilers, this is "near" or "__near"
+ We do not use this except for some CPUs which we know to always have some
+ near memory, because the GUI_Context and some other data will be declared
+ to be in this short address (near) memory area as it has a major effect
+ on performance.
+ Please define in GUIConf.h (if you want to use it)
+*/
+#ifndef GUI_SADDR
+ #define GUI_SADDR
+#endif
+
+#ifndef GUI_DEFAULT_FONT
+ #define GUI_DEFAULT_FONT &GUI_Font6x8
+#endif
+
+#ifndef GUI_DEFAULT_CURSOR
+ #define GUI_DEFAULT_CURSOR &GUI_CursorArrowM
+#endif
+
+#ifndef GUI_DEFAULT_BKCOLOR
+ #define GUI_DEFAULT_BKCOLOR GUI_BLACK
+#endif
+
+#ifndef GUI_DEFAULT_COLOR
+ #define GUI_DEFAULT_COLOR GUI_WHITE
+#endif
+
+/*********************************************************************
+*
+* Angles
+*
+**********************************************************************
+*/
+#define GUI_45DEG 512
+#define GUI_90DEG (2 * GUI_45DEG)
+#define GUI_180DEG (4 * GUI_45DEG)
+#define GUI_360DEG (8 * GUI_45DEG)
+
+/*********************************************************************
+*
+* Locking checks
+*
+**********************************************************************
+*/
+#if defined (WIN32) && defined (_DEBUG) && GUI_OS
+ #define GUI_ASSERT_LOCK() GUITASK_AssertLock()
+ #define GUI_ASSERT_NO_LOCK() GUITASK_AssertNoLock()
+ void GUITASK_AssertLock(void);
+ void GUITASK_AssertNoLock(void);
+#else
+ #define GUI_ASSERT_LOCK()
+ #define GUI_ASSERT_NO_LOCK()
+#endif
+
+/*********************************************************************
+*
+* Division tables
+*
+**********************************************************************
+*/
+extern const U8 GUI__aConvert_15_255[(1 << 4)];
+extern const U8 GUI__aConvert_31_255[(1 << 5)];
+extern const U8 GUI__aConvert_63_255[(1 << 6)];
+extern const U8 GUI__aConvert_255_15[(1 << 8)];
+extern const U8 GUI__aConvert_255_31[(1 << 8)];
+extern const U8 GUI__aConvert_255_63[(1 << 8)];
+
+/*********************************************************************
+*
+* Usage internals
+*
+**********************************************************************
+*/
+typedef GUI_HMEM GUI_USAGE_Handle;
+typedef struct tsUSAGE_APIList tUSAGE_APIList;
+typedef struct GUI_Usage GUI_USAGE;
+#define GUI_USAGE_h GUI_USAGE_Handle
+
+typedef GUI_USAGE_h tUSAGE_CreateCompatible(GUI_USAGE * p);
+typedef void tUSAGE_AddPixel (GUI_USAGE * p, int x, int y);
+typedef void tUSAGE_AddHLine (GUI_USAGE * p, int x0, int y0, int len);
+typedef void tUSAGE_Clear (GUI_USAGE * p);
+typedef void tUSAGE_Delete (GUI_USAGE_h h);
+typedef int tUSAGE_GetNextDirty (GUI_USAGE * p, int * pxOff, int yOff);
+#define GUI_USAGE_LOCK_H(h) ((GUI_USAGE *)GUI_LOCK_H(h))
+
+void GUI_USAGE_DecUseCnt(GUI_USAGE_Handle hUsage);
+
+GUI_USAGE_Handle GUI_USAGE_BM_Create(int x0, int y0, int xsize, int ysize, int Flags);
+void GUI_USAGE_Select(GUI_USAGE_Handle hUsage);
+void GUI_USAGE_AddRect(GUI_USAGE * pUsage, int x0, int y0, int xSize, int ySize);
+#define GUI_USAGE_AddPixel(p, x,y) p->pAPI->pfAddPixel(p,x,y)
+#define GUI_USAGE_AddHLine(p,x,y,len) p->pAPI->pfAddHLine(p,x,y,len)
+#define GUI_USAGE_Clear(p) p->pAPI->pfClear(p)
+#define GUI_USAGE_Delete(p) p->pAPI->pfDelete(p)
+#define GUI_USAGE_GetNextDirty(p,pxOff, yOff) p->pAPI->pfGetNextDirty(p,pxOff, yOff)
+
+struct tsUSAGE_APIList {
+ tUSAGE_AddPixel * pfAddPixel;
+ tUSAGE_AddHLine * pfAddHLine;
+ tUSAGE_Clear * pfClear;
+ tUSAGE_CreateCompatible * pfCreateCompatible;
+ tUSAGE_Delete * pfDelete;
+ tUSAGE_GetNextDirty * pfGetNextDirty;
+} ;
+
+struct GUI_Usage {
+ I16P x0, y0, XSize, YSize;
+ const tUSAGE_APIList * pAPI;
+ I16 UseCnt;
+};
+
+/*********************************************************************
+*
+* GUI_MEMDEV
+*
+**********************************************************************
+*/
+#if GUI_SUPPORT_MEMDEV
+
+typedef struct {
+ GUI_DEVICE * pDevice;
+ I16P x0, y0, XSize, YSize;
+ unsigned BytesPerLine;
+ unsigned BitsPerPixel;
+ GUI_HMEM hUsage;
+} GUI_MEMDEV;
+
+#define GUI_MEMDEV_LOCK_H(h) ((GUI_MEMDEV *)GUI_LOCK_H(h))
+
+void GUI_MEMDEV__CopyFromLCD (GUI_MEMDEV_Handle hMem);
+void GUI_MEMDEV__GetRect (GUI_RECT * pRect);
+unsigned GUI_MEMDEV__Color2Index (LCD_COLOR Color);
+LCD_COLOR GUI_MEMDEV__Index2Color (int Index);
+unsigned int GUI_MEMDEV__GetIndexMask(void);
+void GUI_MEMDEV__SetAlphaCallback(unsigned(* pcbSetAlpha)(U8));
+
+GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xSize, int ySize, int Flags,
+ const GUI_DEVICE_API * pDeviceAPI,
+ const LCD_API_COLOR_CONV * pColorConvAPI);
+
+void GUI_MEMDEV__DrawSizedAt (GUI_MEMDEV_Handle hMem, int xPos, int yPos, int xSize, int ySize);
+GUI_MEMDEV_Handle GUI_MEMDEV__GetEmptyCopy32 (GUI_MEMDEV_Handle hMem, int * pxSize, int * pySize, int * pxPos, int * pyPos);
+void GUI_MEMDEV__ReadLine (int x0, int y, int x1, LCD_PIXELINDEX * pBuffer);
+void GUI_MEMDEV__WriteToActiveAlpha (GUI_MEMDEV_Handle hMem,int x, int y);
+void GUI_MEMDEV__WriteToActiveAt (GUI_MEMDEV_Handle hMem,int x, int y);
+void GUI_MEMDEV__WriteToActiveOpaque(GUI_MEMDEV_Handle hMem,int x, int y);
+void * GUI_MEMDEV__XY2PTR (int x,int y);
+void * GUI_MEMDEV__XY2PTREx (GUI_MEMDEV * pDev, int x,int y);
+void GUI_MEMDEV__BlendColor32 (GUI_MEMDEV_Handle hMem, U32 BlendColor, U8 BlendIntens);
+
+unsigned GUI__AlphaPreserveTrans(int OnOff);
+
+extern unsigned GUI_MEMDEV__TimePerFrame;
+
+#define GUI_TIME_PER_FRAME (GUI_TIMER_TIME)GUI_MEMDEV__TimePerFrame
+
+#define GUI_POS_AUTO -4095 /* Position value for auto-pos */
+
+#endif
+
+/*********************************************************************
+*
+* LCD_HL_ level defines
+*
+**********************************************************************
+*/
+#define LCD_HL_DrawHLine GUI_pContext->pLCD_HL->pfDrawHLine
+#define LCD_HL_DrawPixel GUI_pContext->pLCD_HL->pfDrawPixel
+
+/*********************************************************************
+*
+* Helper functions
+*
+**********************************************************************
+*/
+#define GUI_ZEROINIT(Obj) GUI__MEMSET(Obj, 0, sizeof(Obj))
+int GUI_cos(int angle);
+int GUI_sin(int angle);
+extern const U32 GUI_Pow10[10];
+
+/* Multi-touch */
+void GUI_MTOUCH__ManagePID(int OnOff);
+
+/* Anti-aliased drawing */
+int GUI_AA_Init (int x0, int x1);
+int GUI_AA_Init_HiRes (int x0, int x1);
+void GUI_AA_Exit (void);
+I16 GUI_AA_HiRes2Pixel(int HiRes);
+
+void GL_DrawCircleAA_HiRes(int x0, int y0, int r);
+void GL_FillCircleAA_HiRes (int x0, int y0, int r);
+void GL_FillEllipseAA_HiRes(int x0, int y0, int rx, int ry);
+
+void GUI_AA__DrawCharAA2(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 * pData);
+void GUI_AA__DrawCharAA4(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 * pData);
+void GUI_AA__DrawCharAA8(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8 * pData);
+
+/* Alpha blending helper functions */
+#define GUI_ALPHABLENDING_DONE (1 << 0)
+
+int GUI__GetAlphaBuffer (U32 ** ppCurrent, U32 ** ppConvert, U32 ** ppData, int * pVXSizeMax);
+int GUI__AllocAlphaBuffer (int AllocDataBuffer);
+U32 * GUI__DoAlphaBlending (int x, int y, U32 * pData, int xSize, tLCDDEV_Index2Color * pfIndex2Color_DEV, int * pDone);
+unsigned GUI__SetAlphaBufferSize(int xSize);
+
+/* System independent font routines */
+int GUI_SIF__GetCharDistX (U16P c, int * pSizeX);
+void GUI_SIF__GetFontInfo (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+char GUI_SIF__IsInFont (const GUI_FONT * pFont, U16 c);
+const U8 * GUI_SIF__GetpCharInfo (const GUI_FONT * pFont, U16P c, unsigned SizeOfCharInfo);
+int GUI_SIF__GetNumCharAreas (const GUI_FONT * pFont);
+int GUI_SIF__GetCharDistX_ExtFrm(U16P c, int * pSizeX);
+void GUI_SIF__GetFontInfo_ExtFrm (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+char GUI_SIF__IsInFont_ExtFrm (const GUI_FONT * pFont, U16 c);
+int GUI_SIF__GetCharInfo_ExtFrm (U16P c, GUI_CHARINFO_EXT * pInfo);
+void GUI_SIF__ClearLine_ExtFrm (const char * s, int Len);
+
+/* External binary font routines */
+int GUI_XBF__GetOff (const GUI_XBF_DATA * pXBF_Data, unsigned c, U32 * pOff);
+int GUI_XBF__GetOffAndSize(const GUI_XBF_DATA * pXBF_Data, unsigned c, U32 * pOff, U16 * pSize);
+int GUI_XBF__GetCharDistX (U16P c, int * pSizeX);
+void GUI_XBF__GetFontInfo (const GUI_FONT * pFont, GUI_FONTINFO * pInfo);
+char GUI_XBF__IsInFont (const GUI_FONT * pFont, U16 c);
+int GUI_XBF__GetCharInfo (U16P c, GUI_CHARINFO_EXT * pInfo);
+void GUI_XBF__ClearLine (const char * s, int Len);
+
+/* Conversion routines */
+void GUI_AddHex (U32 v, U8 Len, char ** ps);
+void GUI_AddBin (U32 v, U8 Len, char ** ps);
+void GUI_AddDecMin (I32 v, char ** ps);
+void GUI_AddDecShift(I32 v, U8 Len, U8 Shift, char ** ps);
+long GUI_AddSign (long v, char ** ps);
+int GUI_Long2Len (I32 v);
+
+#define GUI_UC__GetCharSize(sText) GUI_pUC_API->pfGetCharSize(sText)
+#define GUI_UC__GetCharCode(sText) GUI_pUC_API->pfGetCharCode(sText)
+
+int GUI_UC__CalcSizeOfChar (U16 Char);
+U16 GUI_UC__GetCharCodeInc (const char ** ps);
+int GUI_UC__NumChars2NumBytes(const char * s, int NumChars);
+int GUI_UC__NumBytes2NumChars(const char * s, int NumBytes);
+
+int GUI__GetLineNumChars (const char * s, int MaxNumChars);
+int GUI__GetNumChars (const char * s);
+int GUI__GetOverlap (U16 Char);
+int GUI__GetLineDistX (const char * s, int Len);
+int GUI__GetFontSizeY (void);
+int GUI__HandleEOLine (const char ** ps);
+void GUI__InvertRectColors (int x0, int y0, int x1, int y1);
+void GUI__DispLine (const char * s, int Len, const GUI_RECT * pr);
+void GUI__AddSpaceHex (U32 v, U8 Len, char ** ps);
+void GUI__CalcTextRect (const char * pText, const GUI_RECT * pTextRectIn, GUI_RECT * pTextRectOut, int TextAlign);
+
+void GUI__ClearTextBackground(int xDist, int yDist);
+
+int GUI__WrapGetNumCharsDisp (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+int GUI__WrapGetNumCharsToNextLine (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+int GUI__WrapGetNumBytesToNextLine (const char * pText, int xSize, GUI_WRAPMODE WrapMode);
+//void GUI__memset (U8 * p, U8 Fill, int NumBytes);
+void GUI__memset16 (U16 * p, U16 Fill, int NumWords);
+int GUI__strlen (const char * s);
+int GUI__strcmp (const char * s0, const char * s1);
+int GUI__strcmp_hp (GUI_HMEM hs0, const char * s1);
+
+/* Get cursor position */
+int GUI__GetCursorPosX (const char * s, int Index, int MaxNumChars);
+int GUI__GetCursorPosChar (const char * s, int x, int NumCharsToNextLine);
+U16 GUI__GetCursorCharacter(const char * s, int Index, int MaxNumChars, int * pIsRTL);
+
+/* Arabic support (tbd) */
+U16 GUI__GetPresentationForm (U16 Char, U16 Next, U16 Prev, int * pIgnoreNext, const char * s);
+int GUI__IsArabicCharacter (U16 c);
+
+/* BiDi support */
+int GUI__BIDI_Log2Vis (const char * s, int NumChars, char * pBuffer, int BufferSize);
+int GUI__BIDI_GetCursorPosX (const char * s, int NumChars, int Index);
+int GUI__BIDI_GetCursorPosChar (const char * s, int NumChars, int x);
+U16 GUI__BIDI_GetLogChar (const char * s, int NumChars, int Index);
+int GUI__BIDI_GetCharDir (const char * s, int NumChars, int Index);
+int GUI__BIDI_IsNSM (U16 Char);
+U16 GUI__BIDI_GetCursorCharacter(const char * s, int Index, int MaxNumChars, int * pIsRTL);
+int GUI__BIDI_GetWordWrap (const char * s, int xSize, int * pxDist);
+int GUI__BIDI_GetCharWrap (const char * s, int xSize);
+
+#if (GUI_USE_BIDI2)
+
+#define GUI__BIDI_Log2Vis GUI__BIDI2_Log2Vis
+#define GUI__BIDI_GetCursorPosX GUI__BIDI2_GetCursorPosX
+#define GUI__BIDI_GetCursorPosChar GUI__BIDI2_GetCursorPosChar
+#define GUI__BIDI_GetLogChar GUI__BIDI2_GetLogChar
+#define GUI__BIDI_GetCharDir GUI__BIDI2_GetCharDir
+#define GUI__BIDI_IsNSM GUI__BIDI2_IsNSM
+#define GUI__BIDI_GetCursorCharacter GUI__BIDI2_GetCursorCharacter
+#define GUI__BIDI_GetWordWrap GUI__BIDI2_GetWordWrap
+#define GUI__BIDI_GetCharWrap GUI__BIDI2_GetCharWrap
+#define GUI__BIDI_SetBaseDir GUI__BIDI2_SetBaseDir
+#define GUI__BIDI_GetBaseDir GUI__BIDI2_GetBaseDir
+
+int GUI__BIDI_Log2Vis (const char * s, int NumChars, char * pBuffer, int BufferSize);
+int GUI__BIDI_GetCursorPosX (const char * s, int NumChars, int Index);
+int GUI__BIDI_GetCursorPosChar (const char * s, int NumChars, int x);
+U16 GUI__BIDI_GetLogChar (const char * s, int NumChars, int Index);
+int GUI__BIDI_GetCharDir (const char * s, int NumChars, int Index);
+int GUI__BIDI_IsNSM (U16 Char);
+U16 GUI__BIDI_GetCursorCharacter(const char * s, int Index, int MaxNumChars, int * pIsRTL);
+int GUI__BIDI_GetWordWrap (const char * s, int xSize, int * pxDist);
+int GUI__BIDI_GetCharWrap (const char * s, int xSize);
+void GUI__BIDI_SetBaseDir (int Dir);
+int GUI__BIDI_GetBaseDir (void);
+
+#else
+
+#define GUI__BIDI_SetBaseDir
+#define GUI__BIDI_GetBaseDir
+
+#endif
+
+const char * GUI__BIDI_Log2VisBuffered(const char * s, int * pMaxNumChars, int Mode);
+
+extern int GUI__BIDI_Enabled;
+
+extern int (* _pfGUI__BIDI_Log2Vis )(const char * s, int NumChars, char * pBuffer, int BufferSize);
+extern int (* _pfGUI__BIDI_GetCursorPosX )(const char * s, int NumChars, int Index);
+extern int (* _pfGUI__BIDI_GetCursorPosChar)(const char * s, int NumChars, int x);
+extern U16 (* _pfGUI__BIDI_GetLogChar )(const char * s, int NumChars, int Index);
+extern int (* _pfGUI__BIDI_GetCharDir )(const char * s, int NumChars, int Index);
+extern int (* _pfGUI__BIDI_IsNSM )(U16 Char);
+
+/* BiDi-related function pointers */
+extern const char * (* GUI_CharLine_pfLog2Vis)(const char * s, int * pMaxNumChars, int Mode);
+
+extern int (* GUI__GetCursorPos_pfGetPosX) (const char * s, int MaxNumChars, int Index);
+extern int (* GUI__GetCursorPos_pfGetPosChar) (const char * s, int MaxNumChars, int x);
+extern U16 (* GUI__GetCursorPos_pfGetCharacter)(const char * s, int MaxNumChars, int Index, int * pIsRTL);
+
+extern int (* GUI__Wrap_pfGetWordWrap)(const char * s, int xSize, int * pxDist);
+extern int (* GUI__Wrap_pfGetCharWrap)(const char * s, int xSize);
+
+/* Proportional font support */
+const GUI_FONT_PROP * GUIPROP__FindChar(const GUI_FONT_PROP * pProp, U16P c);
+
+/* Extended proportional font support */
+const GUI_FONT_PROP_EXT * GUIPROP_EXT__FindChar(const GUI_FONT_PROP_EXT * pPropExt, U16P c);
+void GUIPROP_EXT__DispLine (const char * s, int Len);
+void GUIPROP_EXT__ClearLine (const char * s, int Len);
+void GUIPROP_EXT__SetfpClearLine(void (* fpClearLine)(const char * s, int Len));
+
+/* Reading data routines */
+U16 GUI__Read16(const U8 ** ppData);
+U32 GUI__Read32(const U8 ** ppData);
+
+/* Virtual screen support */
+void GUI__GetOrg(int * px, int * py);
+void GUI__SetOrgHook(void(* pfHook)(int x, int y));
+
+/* Timer support */
+int GUI_TIMER__IsActive (void);
+GUI_TIMER_TIME GUI_TIMER__GetPeriod (void);
+GUI_TIMER_HANDLE GUI_TIMER__GetFirstTimer (PTR_ADDR * pContext);
+GUI_TIMER_HANDLE GUI_TIMER__GetNextTimerLin(GUI_TIMER_HANDLE hTimer, PTR_ADDR * pContext);
+
+/* Get function pointers for color conversion */
+tLCDDEV_Index2Color * GUI_GetpfIndex2ColorEx(int LayerIndex);
+tLCDDEV_Color2Index * GUI_GetpfColor2IndexEx(int LayerIndex);
+
+int GUI_GetBitsPerPixelEx(int LayerIndex);
+
+LCD_PIXELINDEX * LCD_GetpPalConvTable (const LCD_LOGPALETTE * pLogPal);
+LCD_PIXELINDEX * LCD_GetpPalConvTableUncached(const LCD_LOGPALETTE * pLogPal);
+LCD_PIXELINDEX * LCD_GetpPalConvTableBM (const LCD_LOGPALETTE * pLogPal, const GUI_BITMAP * pBitmap, int LayerIndex);
+
+/* Setting a function for converting a color palette to an array of index values */
+void GUI_SetFuncGetpPalConvTable(LCD_PIXELINDEX * (* pFunc)(const LCD_LOGPALETTE * pLogPal, const GUI_BITMAP * pBitmap, int LayerIndex));
+
+/*********************************************************************
+*
+* Format definitions used by streamed bitmaps
+*
+* IMPORTANT: DO NOT CHANGE THESE VALUES!
+* THEY HAVE TO CORRESPOND TO THE DEFINITIONS WITHIN THE CODE OF THE BITMAPCONVERTER!
+*/
+#define GUI_STREAM_FORMAT_INDEXED 100 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE4 6 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE8 7 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_565 8 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M565 9 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_555 10 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M555 11 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE16 12 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLEM16 13 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_8888 16 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLE32 15 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_24 17 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_RLEALPHA 18 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_444_12 19 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M444_12 20 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_444_12_1 21 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M444_12_1 22 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_444_16 23 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M444_16 24 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_A555 25 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_AM555 26 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_A565 27 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_AM565 28 /* DO NOT CHANGE */
+#define GUI_STREAM_FORMAT_M8888I 29 /* DO NOT CHANGE */
+
+void GUI__ReadHeaderFromStream (GUI_BITMAP_STREAM * pBitmapHeader, const U8 * pData);
+void GUI__CreateBitmapFromStream(const GUI_BITMAP_STREAM * pBitmapHeader, const void * pData, GUI_BITMAP * pBMP, GUI_LOGPALETTE * pPAL, const GUI_BITMAP_METHODS * pMethods);
+
+/* Cache management */
+int GUI__ManageCache (int Cmd);
+int GUI__ManageCacheEx(int LayerIndex, int Cmd);
+
+/*********************************************************************
+*
+* 2d - GL
+*
+**********************************************************************
+*/
+void GL_DispChar (U16 c);
+void GL_DrawArc (int x0, int y0, int rx, int ry, int a0, int a1);
+void GL_DrawBitmap (const GUI_BITMAP * pBM, int x0, int y0);
+void GL_DrawCircle (int x0, int y0, int r);
+void GL_DrawEllipse (int x0, int y0, int rx, int ry, int w);
+void GL_DrawHLine (int y0, int x0, int x1);
+void GL_DrawPolygon (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GL_DrawPoint (int x, int y);
+void GL_DrawLine1 (int x0, int y0, int x1, int y1);
+void GL_DrawLine1Ex (int x0, int y0, int x1, int y1, unsigned * pPixelCnt);
+void GL_DrawLineRel (int dx, int dy);
+void GL_DrawLineTo (int x, int y);
+void GL_DrawLineToEx (int x, int y, unsigned * pPixelCnt);
+void GL_DrawLine (int x0, int y0, int x1, int y1);
+void GL_DrawLineEx (int x0, int y0, int x1, int y1, unsigned * pPixelCnt);
+void GL_MoveTo (int x, int y);
+void GL_FillCircle (int x0, int y0, int r);
+void GL_FillCircleAA (int x0, int y0, int r);
+void GL_FillEllipse (int x0, int y0, int rx, int ry);
+void GL_FillPolygon (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+void GL_SetDefault (void);
+
+/*********************************************************************
+*
+* Replacement of memcpy() and memset()
+*
+**********************************************************************
+*/
+//
+// Configurable function pointers
+//
+extern void * (* GUI__pfMemset)(void * pDest, int Fill, size_t Cnt);
+extern void * (* GUI__pfMemcpy)(void * pDest, const void * pSrc, size_t Cnt);
+
+extern int (* GUI__pfStrcmp)(const char *, const char *);
+extern size_t (* GUI__pfStrlen)(const char *);
+extern char * (* GUI__pfStrcpy)(char *, const char *);
+//
+// Macros for typesave use of function pointers
+//
+#define GUI__MEMSET(pDest, Fill, Cnt) GUI__pfMemset((void *)(pDest), (int)(Fill), (size_t)(Cnt))
+#define GUI__MEMCPY(pDest, pSrc, Cnt) GUI__pfMemcpy((void *)(pDest), (const void *)(pSrc), (size_t)(Cnt))
+
+/*********************************************************************
+*
+* Callback pointers for dynamic linkage
+*
+**********************************************************************
+Dynamic linkage pointers reduces configuration hassles.
+*/
+typedef int GUI_tfTimer(void);
+typedef int WM_tfHandlePID(void);
+
+/*********************************************************************
+*
+* Text rotation
+*
+**********************************************************************
+*/
+extern GUI_RECT GUI_RectDispString; /* Used by LCD_Rotate...() and GUI_DispStringInRect() */
+
+/*********************************************************************
+*
+* Flag for setting transparency for 'EXT' fonts
+*
+**********************************************************************
+*/
+extern U8 GUI__CharHasTrans;
+
+/*********************************************************************
+*
+* Multitasking support
+*
+**********************************************************************
+*/
+extern int GUITASK__EntranceCnt;
+
+/*********************************************************************
+*
+* Bitmap related functions
+*
+**********************************************************************
+*/
+
+int GUI_GetBitmapPixelIndex(const GUI_BITMAP * pBMP, unsigned x, unsigned y);
+GUI_COLOR GUI_GetBitmapPixelColor(const GUI_BITMAP * pBMP, unsigned x, unsigned y);
+int GUI_GetBitmapPixelIndexEx(int BitsPerPixel, int BytesPerLine, const U8 * pData, unsigned x, unsigned y);
+
+void GUI__DrawBitmap16bpp (int x0, int y0, int xsize, int ysize, const U8 * pPixel, const LCD_LOGPALETTE * pLogPal, int xMag, int yMag, tLCDDEV_Index2Color * pfIndex2Color, const LCD_API_COLOR_CONV * pColorConvAPI);
+void GUI__DrawBitmapA16bpp(int x0, int y0, int xSize, int ySize, const U8 * pPixel, const LCD_LOGPALETTE * pLogPal, int xMag, int yMag, tLCDDEV_Index2Color * pfIndex2Color);
+void GUI__SetPixelAlpha (int x, int y, U8 Alpha, LCD_COLOR Color);
+LCD_COLOR GUI__MixColors (LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+void GUI__MixColorsBulk (U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens);
+
+extern const GUI_UC_ENC_APILIST GUI_UC_None;
+
+/*********************************************************************
+*
+* LCDDEV_L0_xxx
+*
+**********************************************************************
+*/
+#define LCDDEV_L0_Color2Index GUI__apDevice[GUI_pContext->SelLayer]->pColorConvAPI->pfColor2Index
+#define LCDDEV_L0_Index2Color GUI__apDevice[GUI_pContext->SelLayer]->pColorConvAPI->pfIndex2Color
+
+#define LCDDEV_L0_DrawBitmap GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawBitmap
+#define LCDDEV_L0_DrawHLine GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawHLine
+#define LCDDEV_L0_DrawVLine GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawVLine
+#define LCDDEV_L0_DrawPixel GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfDrawPixel
+#define LCDDEV_L0_FillRect GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfFillRect
+#define LCDDEV_L0_GetPixel GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetPixel
+#define LCDDEV_L0_GetRect GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetRect
+#define LCDDEV_L0_GetPixelIndex GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetPixelIndex
+#define LCDDEV_L0_SetPixelIndex GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfSetPixelIndex
+#define LCDDEV_L0_XorPixel GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfXorPixel
+#define LCDDEV_L0_GetDevFunc GUI__apDevice[GUI_pContext->SelLayer]->pDeviceAPI->pfGetDevFunc
+
+void LCD_ReadRect (int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+void GUI_ReadRect (int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+void GUI_ReadRectEx(int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+
+void LCD_ReadRectNoClip(int x0, int y0, int x1, int y1, LCD_PIXELINDEX * pBuffer, GUI_DEVICE * pDevice);
+
+/*********************************************************************
+*
+* Internal color management
+*
+**********************************************************************
+*/
+typedef struct {
+ void (* pfSetColor) (LCD_COLOR Index);
+ void (* pfSetBkColor) (LCD_COLOR Index);
+ LCD_DRAWMODE (* pfSetDrawMode)(LCD_DRAWMODE dm);
+} LCD_SET_COLOR_API;
+
+extern const LCD_SET_COLOR_API * LCD__pSetColorAPI;
+
+#define LCD__SetBkColorIndex(Index) (*GUI_pContext->LCD_pBkColorIndex = Index)
+#define LCD__SetColorIndex(Index) (*GUI_pContext->LCD_pColorIndex = Index)
+#define LCD__GetBkColorIndex() (*GUI_pContext->LCD_pBkColorIndex)
+#define LCD__GetColorIndex() (*GUI_pContext->LCD_pColorIndex)
+
+/* The following 2 defines are only required for compatibility to older versions of the TTF library */
+#define LCD_BKCOLORINDEX (*GUI_pContext->LCD_pBkColorIndex)
+#define LCD_COLORINDEX (*GUI_pContext->LCD_pColorIndex)
+
+/*********************************************************************
+*
+* EXTERNs for GL_CORE
+*
+**********************************************************************
+*/
+extern const GUI_FONT * GUI__pFontDefault;
+extern GUI_COLOR GUI__ColorDefault;
+extern GUI_COLOR GUI__BkColorDefault;
+
+extern GUI_SADDR GUI_CONTEXT * GUI_pContext;
+
+extern GUI_DEVICE * GUI__apDevice[GUI_NUM_LAYERS];
+
+//
+// Function pointer for converting a palette containing a color array into an index array
+//
+extern LCD_PIXELINDEX * (* GUI_pfGetpPalConvTable)(const LCD_LOGPALETTE * pLogPal, const GUI_BITMAP * pBitmap, int LayerIndex);
+
+//
+// Function pointer for mixing up 2 colors
+//
+extern LCD_COLOR (* GUI__pfMixColors)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+
+//
+// Function pointer for mixing up arrays of colors
+//
+extern void (* GUI__pfMixColorsBulk)(U32 * pFG, U32 * pBG, U32 * pDst, unsigned OffFG, unsigned OffBG, unsigned OffDest, unsigned xSize, unsigned ySize, U8 Intens);
+
+//
+// Function pointer for mixing color and gamma values
+//
+extern LCD_COLOR (* LCD_AA_pfMixColors16)(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+
+//
+// Function pointer for drawing alpha memory devices
+//
+extern GUI_DRAWMEMDEV_FUNC * GUI__pfDrawAlphaMemdevFunc;
+extern GUI_DRAWMEMDEV_FUNC * GUI__pfDrawM565MemdevFunc;
+
+//
+// Function pointer for drawing alpha bitmaps
+//
+extern GUI_DRAWBITMAP_FUNC * GUI__pfDrawAlphaBitmapFunc;
+extern GUI_DRAWBITMAP_FUNC * GUI__pfDrawM565BitmapFunc;
+
+extern U8 GUI__DrawStreamedBitmap;
+
+//
+// API list to be used for MultiBuffering
+//
+extern const GUI_MULTIBUF_API GUI_MULTIBUF_APIList;
+extern const GUI_MULTIBUF_API GUI_MULTIBUF_APIListMasked;
+extern const GUI_MULTIBUF_API_EX GUI_MULTIBUF_APIListEx;
+
+#ifdef GL_CORE_C
+ #define GUI_EXTERN
+#else
+ #define GUI_EXTERN extern
+#endif
+
+GUI_EXTERN void (* GUI_pfExecAnimations)(void);
+GUI_EXTERN int (* GUI_pfUpdateSoftLayer)(void);
+
+#ifdef WIN32
+ GUI_EXTERN void (* GUI_pfSoftlayerGetPixel)(int x, int y, void * p);
+#endif
+
+GUI_EXTERN void (* GUI_pfHookMTOUCH)(const GUI_MTOUCH_STATE * pState);
+
+GUI_EXTERN const GUI_UC_ENC_APILIST * GUI_pUC_API; /* Unicode encoding API */
+
+GUI_EXTERN GUI_SADDR char GUI_DecChar;
+GUI_EXTERN GUI_tfTimer * GUI_pfTimerExec;
+GUI_EXTERN WM_tfHandlePID * WM_pfHandlePID;
+GUI_EXTERN void (* GUI_pfDispCharStyle)(U16 Char);
+GUI_EXTERN void (* GUI_pfDispCharLine)(int x0);
+
+GUI_EXTERN int GUI__BufferSize; // Required buffer size in pixels for alpha blending and/or antialiasing
+GUI_EXTERN int GUI_AA__ClipX0; // x0-clipping value for AA module
+
+GUI_EXTERN I8 GUI__aNumBuffers[GUI_NUM_LAYERS]; // Number of buffers used per layer
+GUI_EXTERN U8 GUI__PreserveTrans;
+GUI_EXTERN U8 GUI__IsInitialized;
+
+GUI_EXTERN U8 GUI__NumLayersInUse;
+GUI_EXTERN U32 GUI__LayerMask;
+
+#if GUI_SUPPORT_ROTATION
+ GUI_EXTERN const tLCD_APIList * GUI_pLCD_APIList; /* Used for rotating text */
+#endif
+
+GUI_EXTERN I16 GUI_OrgX, GUI_OrgY;
+
+#undef GUI_EXTERN
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* GUI_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_SPRITE_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,77 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_SPRITE_Private.h
+Purpose : Private header file for sprites
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_SPRITE_PRIVATE_H
+#define GUI_SPRITE_PRIVATE_H
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define SPRITE_LOCK_H(h) (GUI_SPRITE_OBJ *)GUI_LOCK_H(h)
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+//
+// The sprite object
+//
+typedef struct {
+ GUI_DEVICE * pDevice;
+ GUI_RECT Rect;
+ GUI_HMEM hColors;
+ U16 Flags;
+ const GUI_BITMAP * pBM;
+ void (* pCB)(GUI_HSPRITE hSprite, int Cmd); // Callback routine for animated sprites
+ GUI_HMEM hContext;
+} GUI_SPRITE_OBJ;
+
+
+#endif // GUI_SPRITE_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_SetOrientation.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,94 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_SetOrientation.h
+Purpose : Private include file for GUI_SetOrientation_xxx
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef GUI_SETORIENTATION_H
+#define GUI_SETORIENTATION_H
+
+#include "GUI_Private.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+//
+// Use unique context identified
+//
+#define DRIVER_CONTEXT DRIVER_CONTEXT_ORIENTATION
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* DRIVER_CONTEXT
+*/
+typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
+
+struct DRIVER_CONTEXT {
+ void (* pfLog2Phys)(DRIVER_CONTEXT * pContext, int x, int y, int * px_phys, int * py_phys);
+ U8 * pData;
+ int BytesPerPixel;
+ int BytesPerLine;
+ int Orientation;
+ int xSize, ySize;
+ int vxSize, vySize;
+ int PixelOffset;
+ const GUI_ORIENTATION_API * pDrawingAPI;
+};
+
+/*********************************************************************
+*
+* Private interface
+*
+**********************************************************************
+*/
+void GUI__Sort(int * p0, int * p1);
+
+#endif /* GUI_SETORIENTATION_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_SetOrientationCX.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,613 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_SetOrientationC0.c
+Purpose : Runtime display orientation without cache
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#include "GUI_SetOrientation.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define XY2PTR(x, y) (PIXEL *)(pContext->pData + y * pContext->BytesPerLine + x * pContext->pDrawingAPI->BytesPerPixel)
+
+/*********************************************************************
+*
+* Static code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Static code
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* _Sort
+*
+* Purpose:
+* Sorts the values pointed by the given pointers. Please note that
+* the same static function is also in GUI_SetOrientationC0.h
+* to enable better compiler optimization.
+*/
+static void _Sort(int * p0, int * p1) {
+ int temp;
+
+ if (*p0 > *p1) {
+ temp = *p0;
+ *p0 = *p1;
+ *p1 = temp;
+ }
+}
+
+/*********************************************************************
+*
+* Static code: Bitmap drawing routines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Draw Bitmap 1 BPP
+*/
+static void _DrawBitLine1BPP(GUI_DEVICE * pDevice, unsigned x, unsigned y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans) {
+ LCD_PIXELINDEX IndexMask, Index0, Index1, Pixel;
+ LCD_PIXELINDEX (* pfGetPixelIndex)(GUI_DEVICE *, int, int);
+ PIXEL * pData;
+ int x_phys, y_phys;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ Index0 = *(pTrans + 0);
+ Index1 = *(pTrans + 1);
+ x += Diff;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+ case 0:
+ do {
+ *pData = (PIXEL)((*p & (0x80 >> Diff)) ? Index1 : Index0);
+ pData += pContext->PixelOffset;
+ if (++Diff == 8) {
+ Diff = 0;
+ p++;
+ }
+ } while (--xsize);
+ break;
+ case LCD_DRAWMODE_TRANS:
+ do {
+ if (*p & (0x80 >> Diff)) {
+ *pData = (PIXEL)Index1;
+ }
+ pData += pContext->PixelOffset;
+ if (++Diff == 8) {
+ Diff = 0;
+ p++;
+ }
+ } while (--xsize);
+ break;
+ case LCD_DRAWMODE_XOR | LCD_DRAWMODE_TRANS:
+ case LCD_DRAWMODE_XOR:
+ pfGetPixelIndex = pDevice->pDeviceAPI->pfGetPixelIndex;
+ IndexMask = pDevice->pColorConvAPI->pfGetIndexMask();
+ do {
+ if (*p & (0x80 >> Diff)) {
+ Pixel = pfGetPixelIndex(pDevice, x, y);
+ Pixel ^= IndexMask;
+ *pData = (PIXEL)Pixel;
+ }
+ pData += pContext->PixelOffset;
+ x++;
+ if (++Diff == 8) {
+ Diff = 0;
+ p++;
+ }
+ } while (--xsize);
+ break;
+ }
+}
+
+/*********************************************************************
+*
+* Draw Bitmap 2 BPP
+*/
+static void _DrawBitLine2BPP(GUI_DEVICE * pDevice, int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans) {
+ LCD_PIXELINDEX Pixels, PixelIndex;
+ int CurrentPixel, Shift, Index;
+ PIXEL * pData;
+ int x_phys, y_phys;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ Pixels = *p;
+ CurrentPixel = Diff;
+ x += Diff;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+ case 0:
+ if (pTrans) {
+ do {
+ Shift = (3 - CurrentPixel) << 1;
+ Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+ PixelIndex = *(pTrans + Index);
+ *pData = (PIXEL)PixelIndex;
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 4) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ } else {
+ do {
+ Shift = (3 - CurrentPixel) << 1;
+ Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+ *pData = (PIXEL)Index;
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 4) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ }
+ break;
+ case LCD_DRAWMODE_TRANS:
+ if (pTrans) {
+ do {
+ Shift = (3 - CurrentPixel) << 1;
+ Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+ if (Index) {
+ PixelIndex = *(pTrans + Index);
+ *pData = (PIXEL)PixelIndex;
+ }
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 4) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ } else {
+ do {
+ Shift = (3 - CurrentPixel) << 1;
+ Index = (Pixels & (0xC0 >> (6 - Shift))) >> Shift;
+ if (Index) {
+ *pData = (PIXEL)Index;
+ }
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 4) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ }
+ break;
+ }
+}
+
+/*********************************************************************
+*
+* Draw Bitmap 4 BPP
+*/
+static void _DrawBitLine4BPP(GUI_DEVICE * pDevice, int x, int y, U8 const * p, int Diff, int xsize, const LCD_PIXELINDEX * pTrans) {
+ LCD_PIXELINDEX Pixels, PixelIndex;
+ int CurrentPixel, Shift, Index;
+ PIXEL * pData;
+ int x_phys, y_phys;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ Pixels = *p;
+ CurrentPixel = Diff;
+ x += Diff;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+ case 0:
+ if (pTrans) {
+ do {
+ Shift = (1 - CurrentPixel) << 2;
+ Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+ PixelIndex = *(pTrans + Index);
+ *pData = (PIXEL)PixelIndex;
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 2) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ } else {
+ do {
+ Shift = (1 - CurrentPixel) << 2;
+ Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+ *pData = (PIXEL)Index;
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 2) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ }
+ break;
+ case LCD_DRAWMODE_TRANS:
+ if (pTrans) {
+ do {
+ Shift = (1 - CurrentPixel) << 2;
+ Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+ if (Index) {
+ PixelIndex = *(pTrans + Index);
+ *pData = (PIXEL)PixelIndex;
+ }
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 2) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ } else {
+ do {
+ Shift = (1 - CurrentPixel) << 2;
+ Index = (Pixels & (0xF0 >> (4 - Shift))) >> Shift;
+ if (Index) {
+ *pData = (PIXEL)Index;
+ }
+ pData += pContext->PixelOffset;
+ if (++CurrentPixel == 2) {
+ CurrentPixel = 0;
+ Pixels = *(++p);
+ }
+ } while (--xsize);
+ }
+ break;
+ }
+}
+
+/*********************************************************************
+*
+* Draw Bitmap 8 BPP
+*/
+static void _DrawBitLine8BPP(GUI_DEVICE * pDevice, int x, int y, U8 const * p, int xsize, const LCD_PIXELINDEX * pTrans) {
+ LCD_PIXELINDEX Pixel;
+ PIXEL * pData;
+ int x_phys, y_phys;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ switch (GUI_pContext->DrawMode & (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) {
+ case 0:
+ if (pTrans) {
+ do {
+ Pixel = *p++;
+ *pData = (PIXEL)*(pTrans + Pixel);
+ pData += pContext->PixelOffset;
+ } while (--xsize);
+ } else {
+ do {
+ *pData = (PIXEL)*p++;
+ pData += pContext->PixelOffset;
+ } while (--xsize);
+ }
+ break;
+ case LCD_DRAWMODE_TRANS:
+ if (pTrans) {
+ do {
+ Pixel = *p++;
+ if (Pixel) {
+ *pData = (PIXEL)*(pTrans + Pixel);
+ }
+ pData += pContext->PixelOffset;
+ } while (--xsize);
+ } else {
+ do {
+ Pixel = *p++;
+ if (Pixel) {
+ *pData = (PIXEL)Pixel;
+ }
+ pData += pContext->PixelOffset;
+ } while (--xsize);
+ }
+ break;
+ }
+}
+
+/*********************************************************************
+*
+* Draw Bitmap 16 BPP
+*/
+static void _DrawBitLine16BPP(GUI_DEVICE * pDevice, int x, int y, U16 const * p, int xsize) {
+ PIXEL * pData;
+ int x_phys, y_phys, PixelOffset;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ PixelOffset = pContext->PixelOffset;
+ do {
+ *pData = (PIXEL)*p++;
+ pData += PixelOffset;
+ } while (--xsize);
+}
+
+/*********************************************************************
+*
+* Draw Bitmap 32 BPP
+*/
+static void _DrawBitLine32BPP(GUI_DEVICE * pDevice, int x, int y, U32 const * p, int xsize) {
+ PIXEL * pData;
+ int x_phys, y_phys, PixelOffset;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ PixelOffset = pContext->PixelOffset;
+ do {
+ *pData = (PIXEL)*p++;
+ pData += PixelOffset;
+ } while (--xsize);
+}
+
+/*********************************************************************
+*
+* Static code: API functions for drawing operations, no cache
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* _DrawBitmap_CX
+*/
+static void _DrawBitmap_CX(GUI_DEVICE * pDevice, int x0, int y0,
+ int xSize, int ySize,
+ int BitsPerPixel,
+ int BytesPerLine,
+ const U8 * pData, int Diff,
+ const LCD_PIXELINDEX * pTrans) {
+ int x0_phys, y0_phys, x1_phys, y1_phys;
+ int i;
+ PIXEL * pDataBM;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ switch (BitsPerPixel) {
+ case 1:
+ for (i = 0; i < ySize; i++) {
+ _DrawBitLine1BPP(pDevice, x0, i + y0, pData, Diff, xSize, pTrans);
+ pData += BytesPerLine;
+ }
+ break;
+ case 2:
+ for (i = 0; i < ySize; i++) {
+ _DrawBitLine2BPP(pDevice, x0, i + y0, pData, Diff, xSize, pTrans);
+ pData += BytesPerLine;
+ }
+ break;
+ case 4:
+ for (i = 0; i < ySize; i++) {
+ _DrawBitLine4BPP(pDevice, x0, i + y0, pData, Diff, xSize, pTrans);
+ pData += BytesPerLine;
+ }
+ break;
+ case 8:
+ for (i = 0; i < ySize; i++) {
+ _DrawBitLine8BPP(pDevice, x0, i + y0, pData, xSize, pTrans);
+ pData += BytesPerLine;
+ }
+ break;
+ case 16:
+ for (i = 0; i < ySize; i++) {
+ _DrawBitLine16BPP(pDevice, x0, i + y0, (U16 *)pData, xSize);
+ pData += BytesPerLine;
+ }
+ break;
+ case 32:
+ for (i = 0; i < ySize; i++) {
+ _DrawBitLine32BPP(pDevice, x0, i + y0, (U32 *)pData, xSize);
+ pData += BytesPerLine;
+ }
+ break;
+ }
+
+ pContext->pfLog2Phys(pContext, x0 + Diff, y0, &x0_phys, &y0_phys);
+ pContext->pfLog2Phys(pContext, x0 + Diff + xSize - 1, y0 + ySize - 1, &x1_phys, &y1_phys);
+ _Sort(&x0_phys, &x1_phys);
+ _Sort(&y0_phys, &y1_phys);
+ pDataBM = XY2PTR(x0_phys, y0_phys);
+ pDevice = pDevice->pNext;
+ pDevice->pDeviceAPI->pfDrawBitmap(pDevice,
+ x0_phys, y0_phys,
+ x1_phys - x0_phys + 1,
+ y1_phys - y0_phys + 1,
+ pContext->pDrawingAPI->BytesPerPixel << 3,
+ pContext->pDrawingAPI->BytesPerPixel * pContext->vxSize,
+ (U8 *)pDataBM, 0, NULL);
+}
+
+/*********************************************************************
+*
+* _GetPixelIndex_CX
+*/
+static LCD_PIXELINDEX _GetPixelIndex_CX(GUI_DEVICE * pDevice, int x, int y) {
+ PIXEL * pData;
+ PIXEL Pixel;
+ int x_phys, y_phys;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ Pixel = *pData;
+ return Pixel;
+}
+
+/*********************************************************************
+*
+* _SetPixelIndex_CX
+*/
+static void _SetPixelIndex_CX(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) {
+ PIXEL * pData;
+ int x_phys, y_phys;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ pContext->pfLog2Phys(pContext, x, y, &x_phys, &y_phys);
+ pData = XY2PTR(x_phys, y_phys);
+ *pData = (PIXEL)PixelIndex;
+ pDevice = pDevice->pNext;
+ pDevice->pDeviceAPI->pfSetPixelIndex(pDevice, x_phys, y_phys, PixelIndex);
+}
+
+/*********************************************************************
+*
+* _XorPixel_CX
+*/
+static void _XorPixel_CX(GUI_DEVICE * pDevice, int x, int y) {
+ PIXEL Pixel, IndexMask;
+
+ IndexMask = (PIXEL)pDevice->pColorConvAPI->pfGetIndexMask();
+ Pixel = (PIXEL)pDevice->pDeviceAPI->pfGetPixelIndex(pDevice, x, y);
+ Pixel ^= IndexMask;
+ pDevice->pDeviceAPI->pfSetPixelIndex(pDevice, x, y, Pixel);
+}
+
+/*********************************************************************
+*
+* _DrawHLine_CX
+*/
+static void _DrawHLine_CX(GUI_DEVICE * pDevice, int x0, int y, int x1) {
+ pDevice->pDeviceAPI->pfFillRect(pDevice, x0, y, x1, y);
+}
+
+/*********************************************************************
+*
+* _DrawVLine_CX
+*/
+static void _DrawVLine_CX(GUI_DEVICE * pDevice, int x, int y0, int y1) {
+ pDevice->pDeviceAPI->pfFillRect(pDevice, x, y0, x, y1);
+}
+
+/*********************************************************************
+*
+* _FillRect_CX
+*/
+static void _FillRect_CX(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
+ PIXEL * pData;
+ PIXEL * pLine;
+ PIXEL * pPixel;
+ PIXEL Pixel, IndexMask;
+ int x0_phys, y0_phys, x1_phys, y1_phys;
+ int NumPixels, NumLines;
+ DRIVER_CONTEXT * pContext;
+
+ pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
+ pContext->pfLog2Phys(pContext, x0, y0, &x0_phys, &y0_phys);
+ pContext->pfLog2Phys(pContext, x1, y1, &x1_phys, &y1_phys);
+ _Sort(&x0_phys, &x1_phys);
+ _Sort(&y0_phys, &y1_phys);
+ pData = pLine = XY2PTR(x0_phys, y0_phys);
+ NumLines = y1_phys - y0_phys + 1;
+ if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
+ IndexMask = (PIXEL)pDevice->pColorConvAPI->pfGetIndexMask();
+ do {
+ pPixel = pLine;
+ NumPixels = x1_phys - x0_phys + 1;
+ do {
+ *pPixel++ ^= IndexMask;
+ } while (--NumPixels);
+ pLine += pContext->vxSize;
+ } while (--NumLines);
+ } else {
+ Pixel = (PIXEL)LCD__GetColorIndex();
+ if (sizeof(Pixel) == 1) {
+ NumPixels = x1_phys - x0_phys + 1;
+ do {
+ GUI__MEMSET((U8 *)pLine, (U8)Pixel, NumPixels);
+ pLine += pContext->vxSize;
+ } while (--NumLines);
+ } else {
+ do {
+ pPixel = pLine;
+ NumPixels = x1_phys - x0_phys + 1;
+ do {
+ *pPixel++ = Pixel;
+ } while (--NumPixels);
+ pLine += pContext->vxSize;
+ } while (--NumLines);
+ }
+ }
+ pDevice = pDevice->pNext;
+ pDevice->pDeviceAPI->pfDrawBitmap(pDevice,
+ x0_phys, y0_phys,
+ x1_phys - x0_phys + 1,
+ y1_phys - y0_phys + 1,
+ pContext->pDrawingAPI->BytesPerPixel << 3,
+ pContext->pDrawingAPI->BytesPerPixel * pContext->vxSize,
+ (U8 *)pData, 0, NULL);
+}
+
+/*********************************************************************
+*
+* Static data: Drawing API(s)
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* GUI_OrientationAPI_CX
+*/
+const GUI_ORIENTATION_API API_NAME = {
+ _DrawBitmap_CX,
+ _DrawHLine_CX,
+ _DrawVLine_CX,
+ _FillRect_CX,
+ _GetPixelIndex_CX,
+ _SetPixelIndex_CX,
+ _XorPixel_CX,
+ BYTES_PER_PIXEL
+};
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_Type.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,684 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_Type.h
+Purpose : Include file define the types used for GUI
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+ be able do update to a later GUI version !
+
+*/
+
+#ifndef GUITYPE_H_INCLUDED
+#define GUITYPE_H_INCLUDED
+
+#include "LCD.h"
+#include "GUIConf.h"
+
+/*********************************************************************
+*
+* Common types
+*/
+typedef const char * GUI_ConstString;
+
+typedef LCD_COLOR GUI_COLOR;
+typedef LCD_LOGPALETTE GUI_LOGPALETTE;
+typedef LCD_DRAWMODE GUI_DRAWMODE;
+typedef LCD_RECT GUI_RECT;
+
+typedef struct {
+ void (* pfDraw) (int x0,
+ int y0,
+ int xsize,
+ int ysize,
+ const U8 * pPixel,
+ const LCD_LOGPALETTE * pLogPal,
+ int xMag,
+ int yMag);
+ GUI_COLOR (* pfIndex2Color)(LCD_PIXELINDEX Index);
+ void (* pfDrawHW)(int x0,
+ int y0,
+ int xsize,
+ int ysize,
+ const U8 * pPixel,
+ const LCD_LOGPALETTE * pLogPal,
+ int xMag,
+ int yMag);
+ const LCD_API_COLOR_CONV * pColorConvAPI;
+} GUI_BITMAP_METHODS;
+
+typedef struct {
+ U16P XSize;
+ U16P YSize;
+ U16P BytesPerLine;
+ U16P BitsPerPixel;
+ const U8 * pData;
+ const GUI_LOGPALETTE * pPal;
+ const GUI_BITMAP_METHODS * pMethods;
+} GUI_BITMAP;
+
+/* This structure may not be changed because the data that it
+ expects is read in binary form (via any kind of interface,
+ at runtime).
+ This structure should therefor not be changed.
+*/
+typedef struct {
+ U16 ID;
+ U16 Format;
+ U16 XSize;
+ U16 YSize;
+ U16 BytesPerLine;
+ U16 BitsPerPixel;
+ U16 NumColors;
+ U16 HasTrans;
+} GUI_BITMAP_STREAM;
+
+typedef struct {
+ int Cmd;
+ U32 v;
+ void * p;
+} GUI_BITMAPSTREAM_PARAM;
+
+typedef struct {
+ int XSize;
+ int YSize;
+ int BitsPerPixel;
+ int NumColors;
+ int HasTrans;
+} GUI_BITMAPSTREAM_INFO;
+
+typedef void * (* GUI_BITMAPSTREAM_CALLBACK)(GUI_BITMAPSTREAM_PARAM * pParam);
+
+typedef struct {
+ int x,y;
+ U8 Pressed;
+ U8 Layer;
+} GUI_PID_STATE;
+
+typedef struct {
+ int Key;
+ int Pressed;
+} GUI_KEY_STATE;
+
+typedef struct {
+ int xPos;
+ int yPos;
+ int xSize;
+ int ySize;
+ int Delay;
+} GUI_GIF_IMAGE_INFO;
+
+typedef struct {
+ int xSize;
+ int ySize;
+ int NumImages;
+} GUI_GIF_INFO;
+
+#define GUI_REGISTER_INIT GUI_REGISTER_HOOK
+#define GUI_REGISTER_EXIT GUI_REGISTER_HOOK
+
+typedef struct GUI_REGISTER_HOOK GUI_REGISTER_HOOK;
+
+struct GUI_REGISTER_HOOK {
+ void (* pfVoid)(void);
+ GUI_REGISTER_HOOK * pNext;
+};
+
+typedef struct {
+ void (* cbBegin)(void);
+ void (* cbEnd) (void);
+} GUI_MULTIBUF_API;
+
+typedef struct {
+ void (* cbBeginEx)(int LayerIndex);
+ void (* cbEndEx) (int LayerIndex);
+} GUI_MULTIBUF_API_EX;
+
+/*********************************************************************
+*
+* FONT structures
+*/
+
+/* Translation list. Translates a character code into up to 2
+ indices of images to display on top of each other;
+ 'á' -> index('a'), index('´') */
+typedef struct {
+ I16P c0;
+ I16P c1;
+} GUI_FONT_TRANSLIST;
+
+typedef struct {
+ U16P FirstChar;
+ U16P LastChar;
+ const GUI_FONT_TRANSLIST * pList;
+} GUI_FONT_TRANSINFO;
+
+typedef struct {
+ U8 XSize;
+ U8 XDist;
+ U8 BytesPerLine;
+ const unsigned char * pData;
+} GUI_CHARINFO;
+
+typedef struct {
+ U8 XSize;
+ U8 YSize;
+ I8 XPos;
+ I8 YPos;
+ U8 XDist;
+ const unsigned char * pData;
+} GUI_CHARINFO_EXT;
+
+typedef struct GUI_FONT_PROP {
+ U16P First; /* First character */
+ U16P Last; /* Last character */
+ const GUI_CHARINFO * paCharInfo; /* Address of first character */
+ const struct GUI_FONT_PROP * pNext; /* Pointer to next */
+} GUI_FONT_PROP;
+
+typedef struct GUI_FONT_PROP_EXT {
+ U16P First; /* First character */
+ U16P Last; /* Last character */
+ const GUI_CHARINFO_EXT * paCharInfo; /* Address of first character */
+ const struct GUI_FONT_PROP_EXT * pNext; /* Pointer to next */
+} GUI_FONT_PROP_EXT;
+
+typedef struct {
+ const unsigned char * pData;
+ const U8 * pTransData;
+ const GUI_FONT_TRANSINFO * pTrans;
+ U16P FirstChar;
+ U16P LastChar;
+ U8 XSize;
+ U8 XDist;
+ U8 BytesPerLine;
+} GUI_FONT_MONO;
+
+/*********************************************************************
+*
+* FONT structures
+*
+* This structure is used when retrieving information about a font.
+* It is designed for future expansion without incompatibilities.
+*/
+typedef struct {
+ U16 Flags;
+ U8 Baseline;
+ U8 LHeight; /* height of a small lower case character (a,x) */
+ U8 CHeight; /* height of a small upper case character (A,X) */
+} GUI_FONTINFO;
+
+#define GUI_FONTINFO_FLAG_PROP (1 << 0) /* Is proportional */
+#define GUI_FONTINFO_FLAG_MONO (1 << 1) /* Is monospaced */
+#define GUI_FONTINFO_FLAG_AA (1 << 2) /* Is an antialiased font */
+#define GUI_FONTINFO_FLAG_AA2 (1 << 3) /* Is an antialiased font, 2bpp */
+#define GUI_FONTINFO_FLAG_AA4 (1 << 4) /* Is an antialiased font, 4bpp */
+#define GUI_FONTINFO_FLAG_PROPFRM (1 << 5) /* Is proportional, framed */
+
+/*********************************************************************
+*
+* UNICODE Encoding
+*/
+typedef U16 tGUI_GetCharCode (const char * s);
+typedef int tGUI_GetCharSize (const char * s);
+typedef int tGUI_CalcSizeOfChar(U16 Char);
+typedef int tGUI_Encode (char * s, U16 Char);
+
+typedef struct {
+ tGUI_GetCharCode * pfGetCharCode;
+ tGUI_GetCharSize * pfGetCharSize;
+ tGUI_CalcSizeOfChar * pfCalcSizeOfChar;
+ tGUI_Encode * pfEncode;
+} GUI_UC_ENC_APILIST;
+
+/*********************************************************************
+*
+* FONT Encoding
+*/
+typedef int tGUI_GetLineDistX(const char * s, int Len);
+typedef int tGUI_GetLineLen (const char * s, int MaxLen);
+typedef void tGL_DispLine (const char * s, int Len);
+
+typedef struct {
+ tGUI_GetLineDistX * pfGetLineDistX;
+ tGUI_GetLineLen * pfGetLineLen;
+ tGL_DispLine * pfDispLine;
+} tGUI_ENC_APIList;
+
+extern const tGUI_ENC_APIList GUI_ENC_APIList_SJIS;
+extern const tGUI_ENC_APIList GUI_ENC_APIList_EXT;
+
+/*********************************************************************
+*
+* FONT methods
+*/
+typedef struct GUI_FONT GUI_FONT;
+
+typedef void GUI_DISPCHAR (U16 c);
+typedef int GUI_GETCHARDISTX(U16P c, int * pSizeX);
+typedef void GUI_GETFONTINFO (const GUI_FONT * pFont, GUI_FONTINFO * pfi);
+typedef char GUI_ISINFONT (const GUI_FONT * pFont, U16 c);
+typedef int GUI_GETCHARINFO (U16P c, GUI_CHARINFO_EXT * pInfo);
+
+#define DECLARE_FONT(Type) \
+void GUI##Type##_DispChar (U16P c); \
+int GUI##Type##_GetCharDistX(U16P c, int * pSizeX); \
+void GUI##Type##_GetFontInfo (const GUI_FONT * pFont, GUI_FONTINFO * pfi); \
+char GUI##Type##_IsInFont (const GUI_FONT * pFont, U16 c); \
+int GUI##Type##_GetCharInfo (U16P c, GUI_CHARINFO_EXT * pInfo)
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+DECLARE_FONT(MONO);
+DECLARE_FONT(PROP);
+DECLARE_FONT(PROP_EXT);
+DECLARE_FONT(PROP_FRM);
+DECLARE_FONT(PROPAA);
+DECLARE_FONT(PROP_AA2);
+DECLARE_FONT(PROP_AA2_EXT);
+DECLARE_FONT(PROP_AA4);
+DECLARE_FONT(PROP_AA4_EXT);
+
+/* MONO: Monospaced fonts */
+#define GUI_FONTTYPE_MONO \
+ GUIMONO_DispChar, \
+ GUIMONO_GetCharDistX, \
+ GUIMONO_GetFontInfo, \
+ GUIMONO_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ (tGUI_ENC_APIList*)0
+
+/* PROP: Proportional fonts */
+#define GUI_FONTTYPE_PROP \
+ GUIPROP_DispChar, \
+ GUIPROP_GetCharDistX, \
+ GUIPROP_GetFontInfo, \
+ GUIPROP_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ (tGUI_ENC_APIList*)0
+
+/* PROP_EXT: Extended proportional fonts */
+#define GUI_FONTTYPE_PROP_EXT \
+ GUIPROP_EXT_DispChar, \
+ GUIPROP_EXT_GetCharDistX, \
+ GUIPROP_EXT_GetFontInfo, \
+ GUIPROP_EXT_IsInFont, \
+ GUIPROP_EXT_GetCharInfo, \
+ &GUI_ENC_APIList_EXT
+
+/* PROP_FRM: Extended proportional fonts, framed */
+#define GUI_FONTTYPE_PROP_FRM \
+ GUIPROP_FRM_DispChar, \
+ GUIPROP_FRM_GetCharDistX, \
+ GUIPROP_FRM_GetFontInfo, \
+ GUIPROP_FRM_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ (tGUI_ENC_APIList*)0
+
+/* PROP: Proportional fonts SJIS */
+#define GUI_FONTTYPE_PROP_SJIS \
+ GUIPROP_DispChar, \
+ GUIPROP_GetCharDistX, \
+ GUIPROP_GetFontInfo, \
+ GUIPROP_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ &GUI_ENC_APIList_SJIS
+
+/* PROPAA: Proportional, antialiased fonts */
+#define GUI_FONTTYPE_PROPAA \
+ GUIPROPAA_DispChar, \
+ GUIPROPAA_GetCharDistX, \
+ GUIPROPAA_GetFontInfo, \
+ GUIPROPAA_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ (tGUI_ENC_APIList*)0
+
+/* PROP_AA2: Proportional, antialiased fonts, 2bpp */
+#define GUI_FONTTYPE_PROP_AA2 \
+ GUIPROP_AA2_DispChar, \
+ GUIPROP_AA2_GetCharDistX, \
+ GUIPROP_AA2_GetFontInfo, \
+ GUIPROP_AA2_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ (tGUI_ENC_APIList*)0
+
+/* PROP_AA2_EXT: Proportional, antialiased fonts, 2bpp, extended font information */
+#define GUI_FONTTYPE_PROP_AA2_EXT \
+ GUIPROP_AA2_EXT_DispChar, \
+ GUIPROP_EXT_GetCharDistX, \
+ GUIPROP_EXT_GetFontInfo, \
+ GUIPROP_EXT_IsInFont, \
+ GUIPROP_EXT_GetCharInfo, \
+ &GUI_ENC_APIList_EXT
+
+/* PROP_AA2: Proportional, antialiased fonts, 2bpp, SJIS encoding */
+#define GUI_FONTTYPE_PROP_AA2_SJIS \
+ GUIPROP_AA2_DispChar, \
+ GUIPROP_AA2_GetCharDistX, \
+ GUIPROP_AA2_GetFontInfo, \
+ GUIPROP_AA2_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ &GUI_ENC_APIList_SJIS
+
+/* PROP_AA4: Proportional, antialiased fonts, 4bpp */
+#define GUI_FONTTYPE_PROP_AA4 \
+ GUIPROP_AA4_DispChar, \
+ GUIPROP_AA4_GetCharDistX, \
+ GUIPROP_AA4_GetFontInfo, \
+ GUIPROP_AA4_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ (tGUI_ENC_APIList*)0
+
+/* PROP_AA4_EXT: Proportional, antialiased fonts, 4bpp, extended font information */
+#define GUI_FONTTYPE_PROP_AA4_EXT \
+ GUIPROP_AA4_EXT_DispChar, \
+ GUIPROP_EXT_GetCharDistX, \
+ GUIPROP_EXT_GetFontInfo, \
+ GUIPROP_EXT_IsInFont, \
+ GUIPROP_EXT_GetCharInfo, \
+ &GUI_ENC_APIList_EXT
+
+/* PROP_AA4: Proportional, antialiased fonts, 4bpp, SJIS encoding */
+#define GUI_FONTTYPE_PROP_AA4_SJIS \
+ GUIPROP_AA4_DispChar, \
+ GUIPROP_AA4_GetCharDistX, \
+ GUIPROP_AA4_GetFontInfo, \
+ GUIPROP_AA4_IsInFont, \
+ (GUI_GETCHARINFO *)0, \
+ &GUI_ENC_APIList_SJIS
+
+#if defined(__cplusplus)
+ }
+#endif
+
+struct GUI_FONT {
+ GUI_DISPCHAR * pfDispChar;
+ GUI_GETCHARDISTX * pfGetCharDistX;
+ GUI_GETFONTINFO * pfGetFontInfo;
+ GUI_ISINFONT * pfIsInFont;
+ GUI_GETCHARINFO * pfGetCharInfo;
+ const tGUI_ENC_APIList* pafEncode;
+ U8 YSize;
+ U8 YDist;
+ U8 XMag;
+ U8 YMag;
+ union {
+ const void * pFontData;
+ const GUI_FONT_MONO * pMono;
+ const GUI_FONT_PROP * pProp;
+ const GUI_FONT_PROP_EXT * pPropExt;
+ } p;
+ U8 Baseline;
+ U8 LHeight; /* Height of a small lower case character (a,x) */
+ U8 CHeight; /* Height of a small upper case character (A,X) */
+};
+
+/*********************************************************************
+*
+* Bitmap serialization (BMP)
+*/
+typedef void GUI_CALLBACK_VOID_U8_P(U8 Data, void * p);
+
+/*********************************************************************
+*
+* System independent font structures (SIF)
+*/
+typedef struct {
+ U32 ID; /* Font file ID */
+ U16 YSize; /* Height of font */
+ U16 YDist; /* Space of font Y */
+ U16 Baseline; /* Index of baseline */
+ U16 LHeight; /* Height of a small lower case character (a) */
+ U16 CHeight; /* Height of a upper case character (A) */
+ U16 NumAreas; /* Number of character areas */
+} GUI_SI_FONT;
+
+typedef struct {
+ U16 First; /* Index of first character */
+ U16 Last; /* Index of last character */
+} GUI_SIF_CHAR_AREA;
+
+typedef struct {
+ U16 XSize; /* Size of bitmap data in X */
+ U16 XDist; /* Number of pixels for increment cursor in X */
+ U16 BytesPerLine; /* Number of bytes per line */
+ U16 Dummy;
+ U32 OffData; /* Offset of pixel data */
+} GUI_SIF_CHARINFO;
+
+typedef struct {
+ U16 XSize; /* Size of bitmap data in X */
+ U16 YSize; /* Size of bitmap data in X */
+ I16 XOff; /* Display offset of bitmap data in X */
+ I16 YOff; /* Display offset of bitmap data in Y */
+ U16 XDist; /* Number of pixels for increment cursor in X */
+ U16 Dummy;
+ U32 OffData; /* Offset of pixel data */
+} GUI_SIF_CHARINFO_EXT;
+
+typedef struct tGUI_SIF_APIList_struct {
+ GUI_DISPCHAR * pfDispChar;
+ GUI_GETCHARDISTX * pfGetCharDistX;
+ GUI_GETFONTINFO * pfGetFontInfo;
+ GUI_ISINFONT * pfIsInFont;
+ GUI_GETCHARINFO * pfGetCharInfo;
+ const tGUI_ENC_APIList* pafEncode;
+} tGUI_SIF_APIList;
+
+#define GUI_SIF_TYPE tGUI_SIF_APIList
+#define GUI_SIF_TYPE_PROP &GUI_SIF_APIList_Prop
+#define GUI_SIF_TYPE_PROP_EXT &GUI_SIF_APIList_Prop_Ext
+#define GUI_SIF_TYPE_PROP_FRM &GUI_SIF_APIList_Prop_Frm
+#define GUI_SIF_TYPE_PROP_AA2 &GUI_SIF_APIList_Prop_AA2
+#define GUI_SIF_TYPE_PROP_AA4 &GUI_SIF_APIList_Prop_AA4
+#define GUI_SIF_TYPE_PROP_AA2_EXT &GUI_SIF_APIList_Prop_AA2_EXT
+#define GUI_SIF_TYPE_PROP_AA4_EXT &GUI_SIF_APIList_Prop_AA4_EXT
+
+/*********************************************************************
+*
+* External binary font structures (XBF)
+*/
+typedef int GUI_XBF_GET_DATA_FUNC(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer);
+
+typedef struct {
+ U16 First; /* First character of font */
+ U16 Last; /* Last character of font */
+ void * pVoid; /* Void pointer passed to GetData-function */
+ GUI_XBF_GET_DATA_FUNC * pfGetData; /* Pointer to callback function */
+} GUI_XBF_DATA;
+
+typedef struct tGUI_XBF_APIList_struct {
+ GUI_DISPCHAR * pfDispChar;
+ GUI_GETCHARDISTX * pfGetCharDistX;
+ GUI_GETFONTINFO * pfGetFontInfo;
+ GUI_ISINFONT * pfIsInFont;
+ GUI_GETCHARINFO * pfGetCharInfo;
+ const tGUI_ENC_APIList* pafEncode;
+} tGUI_XBF_APIList;
+
+#define GUI_XBF_TYPE tGUI_XBF_APIList
+#define GUI_XBF_TYPE_PROP &GUI_XBF_APIList_Prop
+#define GUI_XBF_TYPE_PROP_EXT &GUI_XBF_APIList_Prop_Ext
+#define GUI_XBF_TYPE_PROP_FRM &GUI_XBF_APIList_Prop_Frm
+#define GUI_XBF_TYPE_PROP_AA2_EXT &GUI_XBF_APIList_Prop_AA2_Ext
+#define GUI_XBF_TYPE_PROP_AA4_EXT &GUI_XBF_APIList_Prop_AA4_Ext
+
+/*********************************************************************
+*
+* TrueType support (TTF)
+*/
+typedef struct {
+ const void * pData; /* Pointer to TTF font file in addressable memory area */
+ U32 NumBytes; /* Size of file in bytes */
+} GUI_TTF_DATA;
+
+typedef struct {
+ GUI_TTF_DATA * pTTF; /* Pointer to GUI_TTF_DATA structure which contains location and size of font file */
+ U32 aImageTypeBuffer[4]; /* Buffer for image type structure */
+ int PixelHeight; /* Pixel height of new font. It means the height of the surrounding rectangle
+ * between the glyphs 'g' anf 'f'. Please notice that it is not the distance
+ * between two lines of text. With other words the value returned byGUI_GetFontSizeY()
+ * is not identically with this value. */
+ int FaceIndex; /* Some font files can contain more than one font face. In case of more than one face
+ * this index specifies the zero based face index to be used to create the font.
+ * Usually 0. */
+} GUI_TTF_CS;
+
+/*********************************************************************
+*
+* Task synchronization
+*/
+typedef void (* GUI_SIGNAL_EVENT_FUNC) (void);
+typedef void (* GUI_WAIT_EVENT_FUNC) (void);
+typedef void (* GUI_WAIT_EVENT_TIMED_FUNC)(int Period);
+
+/*********************************************************************
+*
+* Memory management
+*/
+#ifndef GUI_HMEM
+ #define GUI_HMEM I32
+#endif
+#define GUI_HMEM_NULL (0)
+typedef GUI_HMEM GUI_HWIN;
+typedef GUI_HMEM GUI_HSPRITE;
+
+/*********************************************************************
+*
+* Multi touch input
+*/
+#ifndef GUI_MTOUCH_MAX_NUM_POINTS
+ #define GUI_MTOUCH_MAX_NUM_POINTS 10
+#endif
+
+typedef struct {
+ I32 x;
+ I32 y;
+ U32 Id;
+ U16 Flags;
+} GUI_MTOUCH_INPUT;
+
+typedef struct {
+ int LayerIndex;
+ unsigned NumPoints;
+ GUI_TIMER_TIME TimeStamp;
+ PTR_ADDR hInput;
+} GUI_MTOUCH_EVENT;
+
+//
+// Used for emWinSPY with reduced data types and array sizes
+//
+typedef struct {
+ U8 Layer;
+ U8 NumPoints;
+ I16 ax[5];
+ I16 ay[5];
+ U16 aId[5];
+ U8 aFlags[5];
+} GUI_MTOUCH_STATE;
+
+typedef void (* T_GUI_MTOUCH_STOREEVENT)(GUI_MTOUCH_EVENT *, GUI_MTOUCH_INPUT * pInput);
+
+/*********************************************************************
+*
+* Hardware routines
+*/
+typedef struct {
+ //
+ // 8 Bit access
+ //
+ void (* pfWrite8_A0) (U8 Data);
+ void (* pfWrite8_A1) (U8 Data);
+ void (* pfWriteM8_A0) (U8 * pData, int NumItems);
+ void (* pfWriteM8_A1) (U8 * pData, int NumItems);
+ U8 (* pfRead8_A0) (void);
+ U8 (* pfRead8_A1) (void);
+ void (* pfReadM8_A0) (U8 * pData, int NumItems);
+ void (* pfReadM8_A1) (U8 * pData, int NumItems);
+ //
+ // 16 Bit access
+ //
+ void (* pfWrite16_A0) (U16 Data);
+ void (* pfWrite16_A1) (U16 Data);
+ void (* pfWriteM16_A0)(U16 * pData, int NumItems);
+ void (* pfWriteM16_A1)(U16 * pData, int NumItems);
+ U16 (* pfRead16_A0) (void);
+ U16 (* pfRead16_A1) (void);
+ void (* pfReadM16_A0) (U16 * pData, int NumItems);
+ void (* pfReadM16_A1) (U16 * pData, int NumItems);
+ //
+ // 32 Bit access
+ //
+ void (* pfWrite32_A0) (U32 Data);
+ void (* pfWrite32_A1) (U32 Data);
+ void (* pfWriteM32_A0)(U32 * pData, int NumItems);
+ void (* pfWriteM32_A1)(U32 * pData, int NumItems);
+ U32 (* pfRead32_A0) (void);
+ U32 (* pfRead32_A1) (void);
+ void (* pfReadM32_A0) (U32 * pData, int NumItems);
+ void (* pfReadM32_A1) (U32 * pData, int NumItems);
+ //
+ // SPI access
+ //
+ void (* pfSetCS) (U8 NotActive);
+ //
+ // Common routines
+ //
+ void (* pfFlushBuffer)(void);
+} GUI_PORT_API;
+
+/*********************************************************************
+*
+* Send/Receive function for VNC and/or emWinSPY
+*/
+typedef int (* GUI_tSend) (const U8 * pData, int len, void * p);
+typedef int (* GUI_tRecv) ( U8 * pData, int len, void * p);
+
+/*********************************************************************
+*
+* Memory allocation replacement for emWinSPY
+*/
+typedef void * (* GUI_tMalloc)(unsigned int);
+typedef void (* GUI_tFree) (void *);
+
+#endif /* GUITYPE_H_INCLUDED */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI_VNC.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,210 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI_VNC.h
+Purpose : Publics for the VNC server
+---------------------------END-OF-HEADER------------------------------
+
+Attention : Do not modify this file ! If you do, you will not
+ be able do update to a later GUI version !
+
+*/
+
+#ifndef GUI_VNC_H
+#define GUI_VNC_H
+
+#include "GUI_Private.h"
+#include "GUI_Type.h"
+#include "IP_FS.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define GUI_VNC_NO_ERROR 0
+#define GUI_VNC_ERROR_MISC 1
+#define GUI_VNC_ERROR_WRONGFORMAT 2
+
+#define GUI_DES_ENCRYPT 0
+#define GUI_DES_DECRYPT 1
+
+//
+// File transfer
+//
+#define GUI_VNC_SUPPORT_FILETRANSFER 0x10
+
+//
+// Extension message (used for file transfer)
+//
+#define RFB_EXTENSION 0xFCul
+
+//
+// File transfer protocol
+//
+#define RFBX_FILE_LIST_REQUEST (0x000102ul | (RFB_EXTENSION << 24))
+#define RFBX_FILE_LIST_REPLY (0x000103ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_START_REQUEST (0x000106ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_START_REPLY (0x000107ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_DATA_REQUEST (0x000108ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_DATA_REPLY (0x000109ul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_END_REQUEST (0x00010Aul | (RFB_EXTENSION << 24))
+#define RFBX_UPLOAD_END_REPLY (0x00010Bul | (RFB_EXTENSION << 24))
+
+#define RFBX_DOWNLOAD_START_REQUEST (0x00010Cul | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_START_REPLY (0x00010Dul | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_DATA_REQUEST (0x00010Eul | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_DATA_REPLY (0x00010Ful | (RFB_EXTENSION << 24))
+#define RFBX_DOWNLOAD_END_REPLY (0x000110ul | (RFB_EXTENSION << 24))
+#define RFBX_MKDIR_REQUEST (0x000111ul | (RFB_EXTENSION << 24))
+#define RFBX_MKDIR_REPLY (0x000112ul | (RFB_EXTENSION << 24))
+#define RFBX_REMOVE_REQUEST (0x000113ul | (RFB_EXTENSION << 24))
+#define RFBX_REMOVE_REPLY (0x000114ul | (RFB_EXTENSION << 24))
+#define RFBX_RENAME_REQUEST (0x000115ul | (RFB_EXTENSION << 24))
+#define RFBX_RENAME_REPLY (0x000116ul | (RFB_EXTENSION << 24))
+
+ /*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef struct {
+ U8 * pBuffer;
+ int BufferSize;
+ int NumBytesInBuffer;
+} BUFFER_CB;
+
+typedef struct GUI_VNC_CONTEXT {
+ GUI_DEVICE * pDevice;
+ struct GUI_VNC_CONTEXT * pNext;
+ int LayerIndex;
+ int BytesPerPixel;
+ int BitsPerPixel; // Note, that from within the VNC server the function LCD_GetBitsBerPixel() can not be used because the VNC server runs in a separate thread and the device chain can change during the function call
+ //
+ // Connection related data
+ //
+ GUI_tSend pfSend;
+ GUI_tRecv pfReceive;
+ void * pConnectInfo;
+ U16 ServerIndex;
+ //
+ // Display related info
+ //
+ int x0Dirty, y0Dirty, x1Dirty, y1Dirty;
+ int xSize, ySize;
+ int xOrg, yOrg, xOrgNew, yOrgNew;
+ //
+ // Status
+ //
+ char ClientSupportsHextile;
+ char IsBigEndian;
+ char OrgLock;
+ char BkFlag;
+ //
+ // Pointer to buffer
+ //
+ U8 * pBuffer;
+ unsigned SizeOfBuffer;
+ int (* pfStoreU8) (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, U8 Data);
+ int (* pfStoreU16) (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, U16 Data);
+ int (* pfStoreU32) (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, U32 Data);
+ int (* pfStoreData)(struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB, const U8 * pData, int NumBytes);
+ int (* pfFlush) (struct GUI_VNC_CONTEXT * pContext, BUFFER_CB * pBCB);
+ int (* pfRead) (struct GUI_VNC_CONTEXT * pContext, U8 *, int Len);
+} GUI_VNC_CONTEXT;
+
+typedef struct {
+ void (* pfGetChallenge)(U8 * pChallenge);
+ void (* pfGetResponse )(U8 * pResponse );
+} GUI_VNC_AUTHENTICATION;
+
+/*********************************************************************
+*
+* Private Functions
+*
+**********************************************************************
+*/
+void GUI_VNC_SetDESKey(U8 * pKey, int Mode);
+void GUI_VNC_DoDES (U8 * pInblock, U8 * pOutblock);
+
+/*********************************************************************
+*
+* Public Functions
+*
+**********************************************************************
+*/
+void GUI_VNC_AttachToLayer (GUI_VNC_CONTEXT * pContext, int LayerIndex);
+void GUI_VNC_EnableKeyboardInput(int OnOff);
+void GUI_VNC_EnableMouseInput (int OnOff);
+void GUI_VNC_EnableFileTransfer (unsigned OnOff);
+int GUI_VNC_GetNumConnections (void);
+int GUI_VNC_Process (GUI_VNC_CONTEXT * pContext, GUI_tSend pfSend, GUI_tRecv pfReceive, void * pConnectInfo);
+void GUI_VNC_RingBell (void);
+void GUI_VNC_SetAuthentication (GUI_VNC_AUTHENTICATION * pAuthentication);
+void GUI_VNC_SetPassword (U8 * sPassword);
+void GUI_VNC_SetProgName (const char * sProgName);
+void GUI_VNC_SetSize (unsigned xSize, unsigned ySize);
+void GUI_VNC_SetLockFrame (unsigned OnOff);
+void GUI_VNC_SetRetryCount (unsigned Cnt);
+void GUI_VNC_SetFS_API (const IP_FS_API * pFS_API);
+
+//
+// Private function for setting file transfer handler
+//
+void GUI_VNC__SetRFBExtensionHandler(int (* pFunc)(U32, GUI_VNC_CONTEXT *, BUFFER_CB *));
+
+//
+// External routine to link the server to the system ... USER defined !
+//
+int GUI_VNC_X_StartServer (int LayerIndex, int ServerIndex);
+int GUI_VNC_X_StartServerFT(int LayerIndex, int ServerIndex);
+void GUI_VNC_X_getpeername (U32 * Addr);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/GUI_Version.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,51 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : GUI_Version.h +Purpose : Include file defining current GUI version +---------------------------END-OF-HEADER------------------------------ +*/ + +#ifndef GUI_VERSION_H +#define GUI_VERSION_H + +#define GUI_VERSION 548111 + +#endif /* Avoid multiple inclusion */ + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI__BiDi2_Brackets_800.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,173 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI__BiDi2_Brackets_800.h
+Purpose : Bracket pairs according to Unicode V8.0.0
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifdef GUI__BIDI2
+// CodePoint
+// | Paired bracket
+// | | Bracket type
+// | | |
+// V V V
+ { 0x0028, 0x0029, BPT_O }, // LEFT PARENTHESIS
+ { 0x0029, 0x0028, BPT_C }, // RIGHT PARENTHESIS
+ { 0x005B, 0x005D, BPT_O }, // LEFT SQUARE BRACKET
+ { 0x005D, 0x005B, BPT_C }, // RIGHT SQUARE BRACKET
+ { 0x007B, 0x007D, BPT_O }, // LEFT CURLY BRACKET
+ { 0x007D, 0x007B, BPT_C }, // RIGHT CURLY BRACKET
+ { 0x0F3A, 0x0F3B, BPT_O }, // TIBETAN MARK GUG RTAGS GYON
+ { 0x0F3B, 0x0F3A, BPT_C }, // TIBETAN MARK GUG RTAGS GYAS
+ { 0x0F3C, 0x0F3D, BPT_O }, // TIBETAN MARK ANG KHANG GYON
+ { 0x0F3D, 0x0F3C, BPT_C }, // TIBETAN MARK ANG KHANG GYAS
+ { 0x169B, 0x169C, BPT_O }, // OGHAM FEATHER MARK
+ { 0x169C, 0x169B, BPT_C }, // OGHAM REVERSED FEATHER MARK
+ { 0x2045, 0x2046, BPT_O }, // LEFT SQUARE BRACKET WITH QUILL
+ { 0x2046, 0x2045, BPT_C }, // RIGHT SQUARE BRACKET WITH QUILL
+ { 0x207D, 0x207E, BPT_O }, // SUPERSCRIPT LEFT PARENTHESIS
+ { 0x207E, 0x207D, BPT_C }, // SUPERSCRIPT RIGHT PARENTHESIS
+ { 0x208D, 0x208E, BPT_O }, // SUBSCRIPT LEFT PARENTHESIS
+ { 0x208E, 0x208D, BPT_C }, // SUBSCRIPT RIGHT PARENTHESIS
+ { 0x2308, 0x2309, BPT_O }, // LEFT CEILING
+ { 0x2309, 0x2308, BPT_C }, // RIGHT CEILING
+ { 0x230A, 0x230B, BPT_O }, // LEFT FLOOR
+ { 0x230B, 0x230A, BPT_C }, // RIGHT FLOOR
+ { 0x2329, 0x232A, BPT_O }, // LEFT-POINTING ANGLE BRACKET
+ { 0x232A, 0x2329, BPT_C }, // RIGHT-POINTING ANGLE BRACKET
+ { 0x2768, 0x2769, BPT_O }, // MEDIUM LEFT PARENTHESIS ORNAMENT
+ { 0x2769, 0x2768, BPT_C }, // MEDIUM RIGHT PARENTHESIS ORNAMENT
+ { 0x276A, 0x276B, BPT_O }, // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+ { 0x276B, 0x276A, BPT_C }, // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+ { 0x276C, 0x276D, BPT_O }, // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x276D, 0x276C, BPT_C }, // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x276E, 0x276F, BPT_O }, // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+ { 0x276F, 0x276E, BPT_C }, // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+ { 0x2770, 0x2771, BPT_O }, // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x2771, 0x2770, BPT_C }, // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x2772, 0x2773, BPT_O }, // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+ { 0x2773, 0x2772, BPT_C }, // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+ { 0x2774, 0x2775, BPT_O }, // MEDIUM LEFT CURLY BRACKET ORNAMENT
+ { 0x2775, 0x2774, BPT_C }, // MEDIUM RIGHT CURLY BRACKET ORNAMENT
+ { 0x27C5, 0x27C6, BPT_O }, // LEFT S-SHAPED BAG DELIMITER
+ { 0x27C6, 0x27C5, BPT_C }, // RIGHT S-SHAPED BAG DELIMITER
+ { 0x27E6, 0x27E7, BPT_O }, // MATHEMATICAL LEFT WHITE SQUARE BRACKET
+ { 0x27E7, 0x27E6, BPT_C }, // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+ { 0x27E8, 0x27E9, BPT_O }, // MATHEMATICAL LEFT ANGLE BRACKET
+ { 0x27E9, 0x27E8, BPT_C }, // MATHEMATICAL RIGHT ANGLE BRACKET
+ { 0x27EA, 0x27EB, BPT_O }, // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+ { 0x27EB, 0x27EA, BPT_C }, // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+ { 0x27EC, 0x27ED, BPT_O }, // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+ { 0x27ED, 0x27EC, BPT_C }, // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+ { 0x27EE, 0x27EF, BPT_O }, // MATHEMATICAL LEFT FLATTENED PARENTHESIS
+ { 0x27EF, 0x27EE, BPT_C }, // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+ { 0x2983, 0x2984, BPT_O }, // LEFT WHITE CURLY BRACKET
+ { 0x2984, 0x2983, BPT_C }, // RIGHT WHITE CURLY BRACKET
+ { 0x2985, 0x2986, BPT_O }, // LEFT WHITE PARENTHESIS
+ { 0x2986, 0x2985, BPT_C }, // RIGHT WHITE PARENTHESIS
+ { 0x2987, 0x2988, BPT_O }, // Z NOTATION LEFT IMAGE BRACKET
+ { 0x2988, 0x2987, BPT_C }, // Z NOTATION RIGHT IMAGE BRACKET
+ { 0x2989, 0x298A, BPT_O }, // Z NOTATION LEFT BINDING BRACKET
+ { 0x298A, 0x2989, BPT_C }, // Z NOTATION RIGHT BINDING BRACKET
+ { 0x298B, 0x298C, BPT_O }, // LEFT SQUARE BRACKET WITH UNDERBAR
+ { 0x298C, 0x298B, BPT_C }, // RIGHT SQUARE BRACKET WITH UNDERBAR
+ { 0x298D, 0x2990, BPT_O }, // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+ { 0x298E, 0x298F, BPT_C }, // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+ { 0x298F, 0x298E, BPT_O }, // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+ { 0x2990, 0x298D, BPT_C }, // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+ { 0x2991, 0x2992, BPT_O }, // LEFT ANGLE BRACKET WITH DOT
+ { 0x2992, 0x2991, BPT_C }, // RIGHT ANGLE BRACKET WITH DOT
+ { 0x2993, 0x2994, BPT_O }, // LEFT ARC LESS-THAN BRACKET
+ { 0x2994, 0x2993, BPT_C }, // RIGHT ARC GREATER-THAN BRACKET
+ { 0x2995, 0x2996, BPT_O }, // DOUBLE LEFT ARC GREATER-THAN BRACKET
+ { 0x2996, 0x2995, BPT_C }, // DOUBLE RIGHT ARC LESS-THAN BRACKET
+ { 0x2997, 0x2998, BPT_O }, // LEFT BLACK TORTOISE SHELL BRACKET
+ { 0x2998, 0x2997, BPT_C }, // RIGHT BLACK TORTOISE SHELL BRACKET
+ { 0x29D8, 0x29D9, BPT_O }, // LEFT WIGGLY FENCE
+ { 0x29D9, 0x29D8, BPT_C }, // RIGHT WIGGLY FENCE
+ { 0x29DA, 0x29DB, BPT_O }, // LEFT DOUBLE WIGGLY FENCE
+ { 0x29DB, 0x29DA, BPT_C }, // RIGHT DOUBLE WIGGLY FENCE
+ { 0x29FC, 0x29FD, BPT_O }, // LEFT-POINTING CURVED ANGLE BRACKET
+ { 0x29FD, 0x29FC, BPT_C }, // RIGHT-POINTING CURVED ANGLE BRACKET
+ { 0x2E22, 0x2E23, BPT_O }, // TOP LEFT HALF BRACKET
+ { 0x2E23, 0x2E22, BPT_C }, // TOP RIGHT HALF BRACKET
+ { 0x2E24, 0x2E25, BPT_O }, // BOTTOM LEFT HALF BRACKET
+ { 0x2E25, 0x2E24, BPT_C }, // BOTTOM RIGHT HALF BRACKET
+ { 0x2E26, 0x2E27, BPT_O }, // LEFT SIDEWAYS U BRACKET
+ { 0x2E27, 0x2E26, BPT_C }, // RIGHT SIDEWAYS U BRACKET
+ { 0x2E28, 0x2E29, BPT_O }, // LEFT DOUBLE PARENTHESIS
+ { 0x2E29, 0x2E28, BPT_C }, // RIGHT DOUBLE PARENTHESIS
+ { 0x3008, 0x3009, BPT_O }, // LEFT ANGLE BRACKET
+ { 0x3009, 0x3008, BPT_C }, // RIGHT ANGLE BRACKET
+ { 0x300A, 0x300B, BPT_O }, // LEFT DOUBLE ANGLE BRACKET
+ { 0x300B, 0x300A, BPT_C }, // RIGHT DOUBLE ANGLE BRACKET
+ { 0x300C, 0x300D, BPT_O }, // LEFT CORNER BRACKET
+ { 0x300D, 0x300C, BPT_C }, // RIGHT CORNER BRACKET
+ { 0x300E, 0x300F, BPT_O }, // LEFT WHITE CORNER BRACKET
+ { 0x300F, 0x300E, BPT_C }, // RIGHT WHITE CORNER BRACKET
+ { 0x3010, 0x3011, BPT_O }, // LEFT BLACK LENTICULAR BRACKET
+ { 0x3011, 0x3010, BPT_C }, // RIGHT BLACK LENTICULAR BRACKET
+ { 0x3014, 0x3015, BPT_O }, // LEFT TORTOISE SHELL BRACKET
+ { 0x3015, 0x3014, BPT_C }, // RIGHT TORTOISE SHELL BRACKET
+ { 0x3016, 0x3017, BPT_O }, // LEFT WHITE LENTICULAR BRACKET
+ { 0x3017, 0x3016, BPT_C }, // RIGHT WHITE LENTICULAR BRACKET
+ { 0x3018, 0x3019, BPT_O }, // LEFT WHITE TORTOISE SHELL BRACKET
+ { 0x3019, 0x3018, BPT_C }, // RIGHT WHITE TORTOISE SHELL BRACKET
+ { 0x301A, 0x301B, BPT_O }, // LEFT WHITE SQUARE BRACKET
+ { 0x301B, 0x301A, BPT_C }, // RIGHT WHITE SQUARE BRACKET
+ { 0xFE59, 0xFE5A, BPT_O }, // SMALL LEFT PARENTHESIS
+ { 0xFE5A, 0xFE59, BPT_C }, // SMALL RIGHT PARENTHESIS
+ { 0xFE5B, 0xFE5C, BPT_O }, // SMALL LEFT CURLY BRACKET
+ { 0xFE5C, 0xFE5B, BPT_C }, // SMALL RIGHT CURLY BRACKET
+ { 0xFE5D, 0xFE5E, BPT_O }, // SMALL LEFT TORTOISE SHELL BRACKET
+ { 0xFE5E, 0xFE5D, BPT_C }, // SMALL RIGHT TORTOISE SHELL BRACKET
+ { 0xFF08, 0xFF09, BPT_O }, // FULLWIDTH LEFT PARENTHESIS
+ { 0xFF09, 0xFF08, BPT_C }, // FULLWIDTH RIGHT PARENTHESIS
+ { 0xFF3B, 0xFF3D, BPT_O }, // FULLWIDTH LEFT SQUARE BRACKET
+ { 0xFF3D, 0xFF3B, BPT_C }, // FULLWIDTH RIGHT SQUARE BRACKET
+ { 0xFF5B, 0xFF5D, BPT_O }, // FULLWIDTH LEFT CURLY BRACKET
+ { 0xFF5D, 0xFF5B, BPT_C }, // FULLWIDTH RIGHT CURLY BRACKET
+ { 0xFF5F, 0xFF60, BPT_O }, // FULLWIDTH LEFT WHITE PARENTHESIS
+ { 0xFF60, 0xFF5F, BPT_C }, // FULLWIDTH RIGHT WHITE PARENTHESIS
+ { 0xFF62, 0xFF63, BPT_O }, // HALFWIDTH LEFT CORNER BRACKET
+ { 0xFF63, 0xFF62, BPT_C }, // HALFWIDTH RIGHT CORNER BRACKET
+#endif
+
+/*************************** End of file ****************************/
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/GUI__BiDi2_Types_800.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,16606 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : GUI__BiDi2_Types_800.h
+Purpose : Bidi types according to Unicode V8.0.0
+
+ ( !!! Basic Multilingual Plane Only !!! )
+
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifdef GUI__BIDI2
+
+#ifndef GUI_BIDI_SUPPORT_RANGE_0
+ #define GUI_BIDI_SUPPORT_RANGE_0 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_1
+ #define GUI_BIDI_SUPPORT_RANGE_1 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_2
+ #define GUI_BIDI_SUPPORT_RANGE_2 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_3
+ #define GUI_BIDI_SUPPORT_RANGE_3 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_4
+ #define GUI_BIDI_SUPPORT_RANGE_4 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_A
+ #define GUI_BIDI_SUPPORT_RANGE_A 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_D
+ #define GUI_BIDI_SUPPORT_RANGE_D 1
+#endif
+#ifndef GUI_BIDI_SUPPORT_RANGE_F
+ #define GUI_BIDI_SUPPORT_RANGE_F 1
+#endif
+
+#if (GUI_BIDI_SUPPORT_RANGE_0 == 1)
+
+// CodePoint
+// | BiDi category
+// | | Unicode name
+// | | |
+// V V V
+ { 0x0000, BIDI_BN }, // <control>
+ { 0x0001, BIDI_BN }, // <control>
+ { 0x0002, BIDI_BN }, // <control>
+ { 0x0003, BIDI_BN }, // <control>
+ { 0x0004, BIDI_BN }, // <control>
+ { 0x0005, BIDI_BN }, // <control>
+ { 0x0006, BIDI_BN }, // <control>
+ { 0x0007, BIDI_BN }, // <control>
+ { 0x0008, BIDI_BN }, // <control>
+ { 0x0009, BIDI_S }, // <control>
+ { 0x000A, BIDI_B }, // <control>
+ { 0x000B, BIDI_S }, // <control>
+ { 0x000C, BIDI_WS }, // <control>
+ { 0x000D, BIDI_B }, // <control>
+ { 0x000E, BIDI_BN }, // <control>
+ { 0x000F, BIDI_BN }, // <control>
+ { 0x0010, BIDI_BN }, // <control>
+ { 0x0011, BIDI_BN }, // <control>
+ { 0x0012, BIDI_BN }, // <control>
+ { 0x0013, BIDI_BN }, // <control>
+ { 0x0014, BIDI_BN }, // <control>
+ { 0x0015, BIDI_BN }, // <control>
+ { 0x0016, BIDI_BN }, // <control>
+ { 0x0017, BIDI_BN }, // <control>
+ { 0x0018, BIDI_BN }, // <control>
+ { 0x0019, BIDI_BN }, // <control>
+ { 0x001A, BIDI_BN }, // <control>
+ { 0x001B, BIDI_BN }, // <control>
+ { 0x001C, BIDI_B }, // <control>
+ { 0x001D, BIDI_B }, // <control>
+ { 0x001E, BIDI_B }, // <control>
+ { 0x001F, BIDI_S }, // <control>
+ { 0x0020, BIDI_WS }, // SPACE
+ { 0x0021, BIDI_ON }, // EXCLAMATION MARK
+ { 0x0022, BIDI_ON }, // QUOTATION MARK
+ { 0x0023, BIDI_ET }, // NUMBER SIGN
+ { 0x0024, BIDI_ET }, // DOLLAR SIGN
+ { 0x0025, BIDI_ET }, // PERCENT SIGN
+ { 0x0026, BIDI_ON }, // AMPERSAND
+ { 0x0027, BIDI_ON }, // APOSTROPHE
+ { 0x0028, BIDI_ON }, // LEFT PARENTHESIS
+ { 0x0029, BIDI_ON }, // RIGHT PARENTHESIS
+ { 0x002A, BIDI_ON }, // ASTERISK
+ { 0x002B, BIDI_ES }, // PLUS SIGN
+ { 0x002C, BIDI_CS }, // COMMA
+ { 0x002D, BIDI_ES }, // HYPHEN-MINUS
+ { 0x002E, BIDI_CS }, // FULL STOP
+ { 0x002F, BIDI_CS }, // SOLIDUS
+ { 0x0030, BIDI_EN }, // DIGIT ZERO
+ { 0x0031, BIDI_EN }, // DIGIT ONE
+ { 0x0032, BIDI_EN }, // DIGIT TWO
+ { 0x0033, BIDI_EN }, // DIGIT THREE
+ { 0x0034, BIDI_EN }, // DIGIT FOUR
+ { 0x0035, BIDI_EN }, // DIGIT FIVE
+ { 0x0036, BIDI_EN }, // DIGIT SIX
+ { 0x0037, BIDI_EN }, // DIGIT SEVEN
+ { 0x0038, BIDI_EN }, // DIGIT EIGHT
+ { 0x0039, BIDI_EN }, // DIGIT NINE
+ { 0x003A, BIDI_CS }, // COLON
+ { 0x003B, BIDI_ON }, // SEMICOLON
+ { 0x003C, BIDI_ON }, // LESS-THAN SIGN
+ { 0x003D, BIDI_ON }, // EQUALS SIGN
+ { 0x003E, BIDI_ON }, // GREATER-THAN SIGN
+ { 0x003F, BIDI_ON }, // QUESTION MARK
+ { 0x0040, BIDI_ON }, // COMMERCIAL AT
+ { 0x0041, BIDI_L }, // LATIN CAPITAL LETTER A
+ { 0x0042, BIDI_L }, // LATIN CAPITAL LETTER B
+ { 0x0043, BIDI_L }, // LATIN CAPITAL LETTER C
+ { 0x0044, BIDI_L }, // LATIN CAPITAL LETTER D
+ { 0x0045, BIDI_L }, // LATIN CAPITAL LETTER E
+ { 0x0046, BIDI_L }, // LATIN CAPITAL LETTER F
+ { 0x0047, BIDI_L }, // LATIN CAPITAL LETTER G
+ { 0x0048, BIDI_L }, // LATIN CAPITAL LETTER H
+ { 0x0049, BIDI_L }, // LATIN CAPITAL LETTER I
+ { 0x004A, BIDI_L }, // LATIN CAPITAL LETTER J
+ { 0x004B, BIDI_L }, // LATIN CAPITAL LETTER K
+ { 0x004C, BIDI_L }, // LATIN CAPITAL LETTER L
+ { 0x004D, BIDI_L }, // LATIN CAPITAL LETTER M
+ { 0x004E, BIDI_L }, // LATIN CAPITAL LETTER N
+ { 0x004F, BIDI_L }, // LATIN CAPITAL LETTER O
+ { 0x0050, BIDI_L }, // LATIN CAPITAL LETTER P
+ { 0x0051, BIDI_L }, // LATIN CAPITAL LETTER Q
+ { 0x0052, BIDI_L }, // LATIN CAPITAL LETTER R
+ { 0x0053, BIDI_L }, // LATIN CAPITAL LETTER S
+ { 0x0054, BIDI_L }, // LATIN CAPITAL LETTER T
+ { 0x0055, BIDI_L }, // LATIN CAPITAL LETTER U
+ { 0x0056, BIDI_L }, // LATIN CAPITAL LETTER V
+ { 0x0057, BIDI_L }, // LATIN CAPITAL LETTER W
+ { 0x0058, BIDI_L }, // LATIN CAPITAL LETTER X
+ { 0x0059, BIDI_L }, // LATIN CAPITAL LETTER Y
+ { 0x005A, BIDI_L }, // LATIN CAPITAL LETTER Z
+ { 0x005B, BIDI_ON }, // LEFT SQUARE BRACKET
+ { 0x005C, BIDI_ON }, // REVERSE SOLIDUS
+ { 0x005D, BIDI_ON }, // RIGHT SQUARE BRACKET
+ { 0x005E, BIDI_ON }, // CIRCUMFLEX ACCENT
+ { 0x005F, BIDI_ON }, // LOW LINE
+ { 0x0060, BIDI_ON }, // GRAVE ACCENT
+ { 0x0061, BIDI_L }, // LATIN SMALL LETTER A
+ { 0x0062, BIDI_L }, // LATIN SMALL LETTER B
+ { 0x0063, BIDI_L }, // LATIN SMALL LETTER C
+ { 0x0064, BIDI_L }, // LATIN SMALL LETTER D
+ { 0x0065, BIDI_L }, // LATIN SMALL LETTER E
+ { 0x0066, BIDI_L }, // LATIN SMALL LETTER F
+ { 0x0067, BIDI_L }, // LATIN SMALL LETTER G
+ { 0x0068, BIDI_L }, // LATIN SMALL LETTER H
+ { 0x0069, BIDI_L }, // LATIN SMALL LETTER I
+ { 0x006A, BIDI_L }, // LATIN SMALL LETTER J
+ { 0x006B, BIDI_L }, // LATIN SMALL LETTER K
+ { 0x006C, BIDI_L }, // LATIN SMALL LETTER L
+ { 0x006D, BIDI_L }, // LATIN SMALL LETTER M
+ { 0x006E, BIDI_L }, // LATIN SMALL LETTER N
+ { 0x006F, BIDI_L }, // LATIN SMALL LETTER O
+ { 0x0070, BIDI_L }, // LATIN SMALL LETTER P
+ { 0x0071, BIDI_L }, // LATIN SMALL LETTER Q
+ { 0x0072, BIDI_L }, // LATIN SMALL LETTER R
+ { 0x0073, BIDI_L }, // LATIN SMALL LETTER S
+ { 0x0074, BIDI_L }, // LATIN SMALL LETTER T
+ { 0x0075, BIDI_L }, // LATIN SMALL LETTER U
+ { 0x0076, BIDI_L }, // LATIN SMALL LETTER V
+ { 0x0077, BIDI_L }, // LATIN SMALL LETTER W
+ { 0x0078, BIDI_L }, // LATIN SMALL LETTER X
+ { 0x0079, BIDI_L }, // LATIN SMALL LETTER Y
+ { 0x007A, BIDI_L }, // LATIN SMALL LETTER Z
+ { 0x007B, BIDI_ON }, // LEFT CURLY BRACKET
+ { 0x007C, BIDI_ON }, // VERTICAL LINE
+ { 0x007D, BIDI_ON }, // RIGHT CURLY BRACKET
+ { 0x007E, BIDI_ON }, // TILDE
+ { 0x007F, BIDI_BN }, // <control>
+ { 0x0080, BIDI_BN }, // <control>
+ { 0x0081, BIDI_BN }, // <control>
+ { 0x0082, BIDI_BN }, // <control>
+ { 0x0083, BIDI_BN }, // <control>
+ { 0x0084, BIDI_BN }, // <control>
+ { 0x0085, BIDI_B }, // <control>
+ { 0x0086, BIDI_BN }, // <control>
+ { 0x0087, BIDI_BN }, // <control>
+ { 0x0088, BIDI_BN }, // <control>
+ { 0x0089, BIDI_BN }, // <control>
+ { 0x008A, BIDI_BN }, // <control>
+ { 0x008B, BIDI_BN }, // <control>
+ { 0x008C, BIDI_BN }, // <control>
+ { 0x008D, BIDI_BN }, // <control>
+ { 0x008E, BIDI_BN }, // <control>
+ { 0x008F, BIDI_BN }, // <control>
+ { 0x0090, BIDI_BN }, // <control>
+ { 0x0091, BIDI_BN }, // <control>
+ { 0x0092, BIDI_BN }, // <control>
+ { 0x0093, BIDI_BN }, // <control>
+ { 0x0094, BIDI_BN }, // <control>
+ { 0x0095, BIDI_BN }, // <control>
+ { 0x0096, BIDI_BN }, // <control>
+ { 0x0097, BIDI_BN }, // <control>
+ { 0x0098, BIDI_BN }, // <control>
+ { 0x0099, BIDI_BN }, // <control>
+ { 0x009A, BIDI_BN }, // <control>
+ { 0x009B, BIDI_BN }, // <control>
+ { 0x009C, BIDI_BN }, // <control>
+ { 0x009D, BIDI_BN }, // <control>
+ { 0x009E, BIDI_BN }, // <control>
+ { 0x009F, BIDI_BN }, // <control>
+ { 0x00A0, BIDI_CS }, // NO-BREAK SPACE
+ { 0x00A1, BIDI_ON }, // INVERTED EXCLAMATION MARK
+ { 0x00A2, BIDI_ET }, // CENT SIGN
+ { 0x00A3, BIDI_ET }, // POUND SIGN
+ { 0x00A4, BIDI_ET }, // CURRENCY SIGN
+ { 0x00A5, BIDI_ET }, // YEN SIGN
+ { 0x00A6, BIDI_ON }, // BROKEN BAR
+ { 0x00A7, BIDI_ON }, // SECTION SIGN
+ { 0x00A8, BIDI_ON }, // DIAERESIS
+ { 0x00A9, BIDI_ON }, // COPYRIGHT SIGN
+ { 0x00AA, BIDI_L }, // FEMININE ORDINAL INDICATOR
+ { 0x00AB, BIDI_ON }, // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ { 0x00AC, BIDI_ON }, // NOT SIGN
+ { 0x00AD, BIDI_BN }, // SOFT HYPHEN
+ { 0x00AE, BIDI_ON }, // REGISTERED SIGN
+ { 0x00AF, BIDI_ON }, // MACRON
+ { 0x00B0, BIDI_ET }, // DEGREE SIGN
+ { 0x00B1, BIDI_ET }, // PLUS-MINUS SIGN
+ { 0x00B2, BIDI_EN }, // SUPERSCRIPT TWO
+ { 0x00B3, BIDI_EN }, // SUPERSCRIPT THREE
+ { 0x00B4, BIDI_ON }, // ACUTE ACCENT
+ { 0x00B5, BIDI_L }, // MICRO SIGN
+ { 0x00B6, BIDI_ON }, // PILCROW SIGN
+ { 0x00B7, BIDI_ON }, // MIDDLE DOT
+ { 0x00B8, BIDI_ON }, // CEDILLA
+ { 0x00B9, BIDI_EN }, // SUPERSCRIPT ONE
+ { 0x00BA, BIDI_L }, // MASCULINE ORDINAL INDICATOR
+ { 0x00BB, BIDI_ON }, // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ { 0x00BC, BIDI_ON }, // VULGAR FRACTION ONE QUARTER
+ { 0x00BD, BIDI_ON }, // VULGAR FRACTION ONE HALF
+ { 0x00BE, BIDI_ON }, // VULGAR FRACTION THREE QUARTERS
+ { 0x00BF, BIDI_ON }, // INVERTED QUESTION MARK
+ { 0x00C0, BIDI_L }, // LATIN CAPITAL LETTER A WITH GRAVE
+ { 0x00C1, BIDI_L }, // LATIN CAPITAL LETTER A WITH ACUTE
+ { 0x00C2, BIDI_L }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ { 0x00C3, BIDI_L }, // LATIN CAPITAL LETTER A WITH TILDE
+ { 0x00C4, BIDI_L }, // LATIN CAPITAL LETTER A WITH DIAERESIS
+ { 0x00C5, BIDI_L }, // LATIN CAPITAL LETTER A WITH RING ABOVE
+ { 0x00C6, BIDI_L }, // LATIN CAPITAL LETTER AE
+ { 0x00C7, BIDI_L }, // LATIN CAPITAL LETTER C WITH CEDILLA
+ { 0x00C8, BIDI_L }, // LATIN CAPITAL LETTER E WITH GRAVE
+ { 0x00C9, BIDI_L }, // LATIN CAPITAL LETTER E WITH ACUTE
+ { 0x00CA, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ { 0x00CB, BIDI_L }, // LATIN CAPITAL LETTER E WITH DIAERESIS
+ { 0x00CC, BIDI_L }, // LATIN CAPITAL LETTER I WITH GRAVE
+ { 0x00CD, BIDI_L }, // LATIN CAPITAL LETTER I WITH ACUTE
+ { 0x00CE, BIDI_L }, // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ { 0x00CF, BIDI_L }, // LATIN CAPITAL LETTER I WITH DIAERESIS
+ { 0x00D0, BIDI_L }, // LATIN CAPITAL LETTER ETH
+ { 0x00D1, BIDI_L }, // LATIN CAPITAL LETTER N WITH TILDE
+ { 0x00D2, BIDI_L }, // LATIN CAPITAL LETTER O WITH GRAVE
+ { 0x00D3, BIDI_L }, // LATIN CAPITAL LETTER O WITH ACUTE
+ { 0x00D4, BIDI_L }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ { 0x00D5, BIDI_L }, // LATIN CAPITAL LETTER O WITH TILDE
+ { 0x00D6, BIDI_L }, // LATIN CAPITAL LETTER O WITH DIAERESIS
+ { 0x00D7, BIDI_ON }, // MULTIPLICATION SIGN
+ { 0x00D8, BIDI_L }, // LATIN CAPITAL LETTER O WITH STROKE
+ { 0x00D9, BIDI_L }, // LATIN CAPITAL LETTER U WITH GRAVE
+ { 0x00DA, BIDI_L }, // LATIN CAPITAL LETTER U WITH ACUTE
+ { 0x00DB, BIDI_L }, // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ { 0x00DC, BIDI_L }, // LATIN CAPITAL LETTER U WITH DIAERESIS
+ { 0x00DD, BIDI_L }, // LATIN CAPITAL LETTER Y WITH ACUTE
+ { 0x00DE, BIDI_L }, // LATIN CAPITAL LETTER THORN
+ { 0x00DF, BIDI_L }, // LATIN SMALL LETTER SHARP S
+ { 0x00E0, BIDI_L }, // LATIN SMALL LETTER A WITH GRAVE
+ { 0x00E1, BIDI_L }, // LATIN SMALL LETTER A WITH ACUTE
+ { 0x00E2, BIDI_L }, // LATIN SMALL LETTER A WITH CIRCUMFLEX
+ { 0x00E3, BIDI_L }, // LATIN SMALL LETTER A WITH TILDE
+ { 0x00E4, BIDI_L }, // LATIN SMALL LETTER A WITH DIAERESIS
+ { 0x00E5, BIDI_L }, // LATIN SMALL LETTER A WITH RING ABOVE
+ { 0x00E6, BIDI_L }, // LATIN SMALL LETTER AE
+ { 0x00E7, BIDI_L }, // LATIN SMALL LETTER C WITH CEDILLA
+ { 0x00E8, BIDI_L }, // LATIN SMALL LETTER E WITH GRAVE
+ { 0x00E9, BIDI_L }, // LATIN SMALL LETTER E WITH ACUTE
+ { 0x00EA, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX
+ { 0x00EB, BIDI_L }, // LATIN SMALL LETTER E WITH DIAERESIS
+ { 0x00EC, BIDI_L }, // LATIN SMALL LETTER I WITH GRAVE
+ { 0x00ED, BIDI_L }, // LATIN SMALL LETTER I WITH ACUTE
+ { 0x00EE, BIDI_L }, // LATIN SMALL LETTER I WITH CIRCUMFLEX
+ { 0x00EF, BIDI_L }, // LATIN SMALL LETTER I WITH DIAERESIS
+ { 0x00F0, BIDI_L }, // LATIN SMALL LETTER ETH
+ { 0x00F1, BIDI_L }, // LATIN SMALL LETTER N WITH TILDE
+ { 0x00F2, BIDI_L }, // LATIN SMALL LETTER O WITH GRAVE
+ { 0x00F3, BIDI_L }, // LATIN SMALL LETTER O WITH ACUTE
+ { 0x00F4, BIDI_L }, // LATIN SMALL LETTER O WITH CIRCUMFLEX
+ { 0x00F5, BIDI_L }, // LATIN SMALL LETTER O WITH TILDE
+ { 0x00F6, BIDI_L }, // LATIN SMALL LETTER O WITH DIAERESIS
+ { 0x00F7, BIDI_ON }, // DIVISION SIGN
+ { 0x00F8, BIDI_L }, // LATIN SMALL LETTER O WITH STROKE
+ { 0x00F9, BIDI_L }, // LATIN SMALL LETTER U WITH GRAVE
+ { 0x00FA, BIDI_L }, // LATIN SMALL LETTER U WITH ACUTE
+ { 0x00FB, BIDI_L }, // LATIN SMALL LETTER U WITH CIRCUMFLEX
+ { 0x00FC, BIDI_L }, // LATIN SMALL LETTER U WITH DIAERESIS
+ { 0x00FD, BIDI_L }, // LATIN SMALL LETTER Y WITH ACUTE
+ { 0x00FE, BIDI_L }, // LATIN SMALL LETTER THORN
+ { 0x00FF, BIDI_L }, // LATIN SMALL LETTER Y WITH DIAERESIS
+ { 0x0100, BIDI_L }, // LATIN CAPITAL LETTER A WITH MACRON
+ { 0x0101, BIDI_L }, // LATIN SMALL LETTER A WITH MACRON
+ { 0x0102, BIDI_L }, // LATIN CAPITAL LETTER A WITH BREVE
+ { 0x0103, BIDI_L }, // LATIN SMALL LETTER A WITH BREVE
+ { 0x0104, BIDI_L }, // LATIN CAPITAL LETTER A WITH OGONEK
+ { 0x0105, BIDI_L }, // LATIN SMALL LETTER A WITH OGONEK
+ { 0x0106, BIDI_L }, // LATIN CAPITAL LETTER C WITH ACUTE
+ { 0x0107, BIDI_L }, // LATIN SMALL LETTER C WITH ACUTE
+ { 0x0108, BIDI_L }, // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ { 0x0109, BIDI_L }, // LATIN SMALL LETTER C WITH CIRCUMFLEX
+ { 0x010A, BIDI_L }, // LATIN CAPITAL LETTER C WITH DOT ABOVE
+ { 0x010B, BIDI_L }, // LATIN SMALL LETTER C WITH DOT ABOVE
+ { 0x010C, BIDI_L }, // LATIN CAPITAL LETTER C WITH CARON
+ { 0x010D, BIDI_L }, // LATIN SMALL LETTER C WITH CARON
+ { 0x010E, BIDI_L }, // LATIN CAPITAL LETTER D WITH CARON
+ { 0x010F, BIDI_L }, // LATIN SMALL LETTER D WITH CARON
+ { 0x0110, BIDI_L }, // LATIN CAPITAL LETTER D WITH STROKE
+ { 0x0111, BIDI_L }, // LATIN SMALL LETTER D WITH STROKE
+ { 0x0112, BIDI_L }, // LATIN CAPITAL LETTER E WITH MACRON
+ { 0x0113, BIDI_L }, // LATIN SMALL LETTER E WITH MACRON
+ { 0x0114, BIDI_L }, // LATIN CAPITAL LETTER E WITH BREVE
+ { 0x0115, BIDI_L }, // LATIN SMALL LETTER E WITH BREVE
+ { 0x0116, BIDI_L }, // LATIN CAPITAL LETTER E WITH DOT ABOVE
+ { 0x0117, BIDI_L }, // LATIN SMALL LETTER E WITH DOT ABOVE
+ { 0x0118, BIDI_L }, // LATIN CAPITAL LETTER E WITH OGONEK
+ { 0x0119, BIDI_L }, // LATIN SMALL LETTER E WITH OGONEK
+ { 0x011A, BIDI_L }, // LATIN CAPITAL LETTER E WITH CARON
+ { 0x011B, BIDI_L }, // LATIN SMALL LETTER E WITH CARON
+ { 0x011C, BIDI_L }, // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ { 0x011D, BIDI_L }, // LATIN SMALL LETTER G WITH CIRCUMFLEX
+ { 0x011E, BIDI_L }, // LATIN CAPITAL LETTER G WITH BREVE
+ { 0x011F, BIDI_L }, // LATIN SMALL LETTER G WITH BREVE
+ { 0x0120, BIDI_L }, // LATIN CAPITAL LETTER G WITH DOT ABOVE
+ { 0x0121, BIDI_L }, // LATIN SMALL LETTER G WITH DOT ABOVE
+ { 0x0122, BIDI_L }, // LATIN CAPITAL LETTER G WITH CEDILLA
+ { 0x0123, BIDI_L }, // LATIN SMALL LETTER G WITH CEDILLA
+ { 0x0124, BIDI_L }, // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ { 0x0125, BIDI_L }, // LATIN SMALL LETTER H WITH CIRCUMFLEX
+ { 0x0126, BIDI_L }, // LATIN CAPITAL LETTER H WITH STROKE
+ { 0x0127, BIDI_L }, // LATIN SMALL LETTER H WITH STROKE
+ { 0x0128, BIDI_L }, // LATIN CAPITAL LETTER I WITH TILDE
+ { 0x0129, BIDI_L }, // LATIN SMALL LETTER I WITH TILDE
+ { 0x012A, BIDI_L }, // LATIN CAPITAL LETTER I WITH MACRON
+ { 0x012B, BIDI_L }, // LATIN SMALL LETTER I WITH MACRON
+ { 0x012C, BIDI_L }, // LATIN CAPITAL LETTER I WITH BREVE
+ { 0x012D, BIDI_L }, // LATIN SMALL LETTER I WITH BREVE
+ { 0x012E, BIDI_L }, // LATIN CAPITAL LETTER I WITH OGONEK
+ { 0x012F, BIDI_L }, // LATIN SMALL LETTER I WITH OGONEK
+ { 0x0130, BIDI_L }, // LATIN CAPITAL LETTER I WITH DOT ABOVE
+ { 0x0131, BIDI_L }, // LATIN SMALL LETTER DOTLESS I
+ { 0x0132, BIDI_L }, // LATIN CAPITAL LIGATURE IJ
+ { 0x0133, BIDI_L }, // LATIN SMALL LIGATURE IJ
+ { 0x0134, BIDI_L }, // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ { 0x0135, BIDI_L }, // LATIN SMALL LETTER J WITH CIRCUMFLEX
+ { 0x0136, BIDI_L }, // LATIN CAPITAL LETTER K WITH CEDILLA
+ { 0x0137, BIDI_L }, // LATIN SMALL LETTER K WITH CEDILLA
+ { 0x0138, BIDI_L }, // LATIN SMALL LETTER KRA
+ { 0x0139, BIDI_L }, // LATIN CAPITAL LETTER L WITH ACUTE
+ { 0x013A, BIDI_L }, // LATIN SMALL LETTER L WITH ACUTE
+ { 0x013B, BIDI_L }, // LATIN CAPITAL LETTER L WITH CEDILLA
+ { 0x013C, BIDI_L }, // LATIN SMALL LETTER L WITH CEDILLA
+ { 0x013D, BIDI_L }, // LATIN CAPITAL LETTER L WITH CARON
+ { 0x013E, BIDI_L }, // LATIN SMALL LETTER L WITH CARON
+ { 0x013F, BIDI_L }, // LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ { 0x0140, BIDI_L }, // LATIN SMALL LETTER L WITH MIDDLE DOT
+ { 0x0141, BIDI_L }, // LATIN CAPITAL LETTER L WITH STROKE
+ { 0x0142, BIDI_L }, // LATIN SMALL LETTER L WITH STROKE
+ { 0x0143, BIDI_L }, // LATIN CAPITAL LETTER N WITH ACUTE
+ { 0x0144, BIDI_L }, // LATIN SMALL LETTER N WITH ACUTE
+ { 0x0145, BIDI_L }, // LATIN CAPITAL LETTER N WITH CEDILLA
+ { 0x0146, BIDI_L }, // LATIN SMALL LETTER N WITH CEDILLA
+ { 0x0147, BIDI_L }, // LATIN CAPITAL LETTER N WITH CARON
+ { 0x0148, BIDI_L }, // LATIN SMALL LETTER N WITH CARON
+ { 0x0149, BIDI_L }, // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+ { 0x014A, BIDI_L }, // LATIN CAPITAL LETTER ENG
+ { 0x014B, BIDI_L }, // LATIN SMALL LETTER ENG
+ { 0x014C, BIDI_L }, // LATIN CAPITAL LETTER O WITH MACRON
+ { 0x014D, BIDI_L }, // LATIN SMALL LETTER O WITH MACRON
+ { 0x014E, BIDI_L }, // LATIN CAPITAL LETTER O WITH BREVE
+ { 0x014F, BIDI_L }, // LATIN SMALL LETTER O WITH BREVE
+ { 0x0150, BIDI_L }, // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ { 0x0151, BIDI_L }, // LATIN SMALL LETTER O WITH DOUBLE ACUTE
+ { 0x0152, BIDI_L }, // LATIN CAPITAL LIGATURE OE
+ { 0x0153, BIDI_L }, // LATIN SMALL LIGATURE OE
+ { 0x0154, BIDI_L }, // LATIN CAPITAL LETTER R WITH ACUTE
+ { 0x0155, BIDI_L }, // LATIN SMALL LETTER R WITH ACUTE
+ { 0x0156, BIDI_L }, // LATIN CAPITAL LETTER R WITH CEDILLA
+ { 0x0157, BIDI_L }, // LATIN SMALL LETTER R WITH CEDILLA
+ { 0x0158, BIDI_L }, // LATIN CAPITAL LETTER R WITH CARON
+ { 0x0159, BIDI_L }, // LATIN SMALL LETTER R WITH CARON
+ { 0x015A, BIDI_L }, // LATIN CAPITAL LETTER S WITH ACUTE
+ { 0x015B, BIDI_L }, // LATIN SMALL LETTER S WITH ACUTE
+ { 0x015C, BIDI_L }, // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ { 0x015D, BIDI_L }, // LATIN SMALL LETTER S WITH CIRCUMFLEX
+ { 0x015E, BIDI_L }, // LATIN CAPITAL LETTER S WITH CEDILLA
+ { 0x015F, BIDI_L }, // LATIN SMALL LETTER S WITH CEDILLA
+ { 0x0160, BIDI_L }, // LATIN CAPITAL LETTER S WITH CARON
+ { 0x0161, BIDI_L }, // LATIN SMALL LETTER S WITH CARON
+ { 0x0162, BIDI_L }, // LATIN CAPITAL LETTER T WITH CEDILLA
+ { 0x0163, BIDI_L }, // LATIN SMALL LETTER T WITH CEDILLA
+ { 0x0164, BIDI_L }, // LATIN CAPITAL LETTER T WITH CARON
+ { 0x0165, BIDI_L }, // LATIN SMALL LETTER T WITH CARON
+ { 0x0166, BIDI_L }, // LATIN CAPITAL LETTER T WITH STROKE
+ { 0x0167, BIDI_L }, // LATIN SMALL LETTER T WITH STROKE
+ { 0x0168, BIDI_L }, // LATIN CAPITAL LETTER U WITH TILDE
+ { 0x0169, BIDI_L }, // LATIN SMALL LETTER U WITH TILDE
+ { 0x016A, BIDI_L }, // LATIN CAPITAL LETTER U WITH MACRON
+ { 0x016B, BIDI_L }, // LATIN SMALL LETTER U WITH MACRON
+ { 0x016C, BIDI_L }, // LATIN CAPITAL LETTER U WITH BREVE
+ { 0x016D, BIDI_L }, // LATIN SMALL LETTER U WITH BREVE
+ { 0x016E, BIDI_L }, // LATIN CAPITAL LETTER U WITH RING ABOVE
+ { 0x016F, BIDI_L }, // LATIN SMALL LETTER U WITH RING ABOVE
+ { 0x0170, BIDI_L }, // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ { 0x0171, BIDI_L }, // LATIN SMALL LETTER U WITH DOUBLE ACUTE
+ { 0x0172, BIDI_L }, // LATIN CAPITAL LETTER U WITH OGONEK
+ { 0x0173, BIDI_L }, // LATIN SMALL LETTER U WITH OGONEK
+ { 0x0174, BIDI_L }, // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ { 0x0175, BIDI_L }, // LATIN SMALL LETTER W WITH CIRCUMFLEX
+ { 0x0176, BIDI_L }, // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ { 0x0177, BIDI_L }, // LATIN SMALL LETTER Y WITH CIRCUMFLEX
+ { 0x0178, BIDI_L }, // LATIN CAPITAL LETTER Y WITH DIAERESIS
+ { 0x0179, BIDI_L }, // LATIN CAPITAL LETTER Z WITH ACUTE
+ { 0x017A, BIDI_L }, // LATIN SMALL LETTER Z WITH ACUTE
+ { 0x017B, BIDI_L }, // LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ { 0x017C, BIDI_L }, // LATIN SMALL LETTER Z WITH DOT ABOVE
+ { 0x017D, BIDI_L }, // LATIN CAPITAL LETTER Z WITH CARON
+ { 0x017E, BIDI_L }, // LATIN SMALL LETTER Z WITH CARON
+ { 0x017F, BIDI_L }, // LATIN SMALL LETTER LONG S
+ { 0x0180, BIDI_L }, // LATIN SMALL LETTER B WITH STROKE
+ { 0x0181, BIDI_L }, // LATIN CAPITAL LETTER B WITH HOOK
+ { 0x0182, BIDI_L }, // LATIN CAPITAL LETTER B WITH TOPBAR
+ { 0x0183, BIDI_L }, // LATIN SMALL LETTER B WITH TOPBAR
+ { 0x0184, BIDI_L }, // LATIN CAPITAL LETTER TONE SIX
+ { 0x0185, BIDI_L }, // LATIN SMALL LETTER TONE SIX
+ { 0x0186, BIDI_L }, // LATIN CAPITAL LETTER OPEN O
+ { 0x0187, BIDI_L }, // LATIN CAPITAL LETTER C WITH HOOK
+ { 0x0188, BIDI_L }, // LATIN SMALL LETTER C WITH HOOK
+ { 0x0189, BIDI_L }, // LATIN CAPITAL LETTER AFRICAN D
+ { 0x018A, BIDI_L }, // LATIN CAPITAL LETTER D WITH HOOK
+ { 0x018B, BIDI_L }, // LATIN CAPITAL LETTER D WITH TOPBAR
+ { 0x018C, BIDI_L }, // LATIN SMALL LETTER D WITH TOPBAR
+ { 0x018D, BIDI_L }, // LATIN SMALL LETTER TURNED DELTA
+ { 0x018E, BIDI_L }, // LATIN CAPITAL LETTER REVERSED E
+ { 0x018F, BIDI_L }, // LATIN CAPITAL LETTER SCHWA
+ { 0x0190, BIDI_L }, // LATIN CAPITAL LETTER OPEN E
+ { 0x0191, BIDI_L }, // LATIN CAPITAL LETTER F WITH HOOK
+ { 0x0192, BIDI_L }, // LATIN SMALL LETTER F WITH HOOK
+ { 0x0193, BIDI_L }, // LATIN CAPITAL LETTER G WITH HOOK
+ { 0x0194, BIDI_L }, // LATIN CAPITAL LETTER GAMMA
+ { 0x0195, BIDI_L }, // LATIN SMALL LETTER HV
+ { 0x0196, BIDI_L }, // LATIN CAPITAL LETTER IOTA
+ { 0x0197, BIDI_L }, // LATIN CAPITAL LETTER I WITH STROKE
+ { 0x0198, BIDI_L }, // LATIN CAPITAL LETTER K WITH HOOK
+ { 0x0199, BIDI_L }, // LATIN SMALL LETTER K WITH HOOK
+ { 0x019A, BIDI_L }, // LATIN SMALL LETTER L WITH BAR
+ { 0x019B, BIDI_L }, // LATIN SMALL LETTER LAMBDA WITH STROKE
+ { 0x019C, BIDI_L }, // LATIN CAPITAL LETTER TURNED M
+ { 0x019D, BIDI_L }, // LATIN CAPITAL LETTER N WITH LEFT HOOK
+ { 0x019E, BIDI_L }, // LATIN SMALL LETTER N WITH LONG RIGHT LEG
+ { 0x019F, BIDI_L }, // LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+ { 0x01A0, BIDI_L }, // LATIN CAPITAL LETTER O WITH HORN
+ { 0x01A1, BIDI_L }, // LATIN SMALL LETTER O WITH HORN
+ { 0x01A2, BIDI_L }, // LATIN CAPITAL LETTER OI
+ { 0x01A3, BIDI_L }, // LATIN SMALL LETTER OI
+ { 0x01A4, BIDI_L }, // LATIN CAPITAL LETTER P WITH HOOK
+ { 0x01A5, BIDI_L }, // LATIN SMALL LETTER P WITH HOOK
+ { 0x01A6, BIDI_L }, // LATIN LETTER YR
+ { 0x01A7, BIDI_L }, // LATIN CAPITAL LETTER TONE TWO
+ { 0x01A8, BIDI_L }, // LATIN SMALL LETTER TONE TWO
+ { 0x01A9, BIDI_L }, // LATIN CAPITAL LETTER ESH
+ { 0x01AA, BIDI_L }, // LATIN LETTER REVERSED ESH LOOP
+ { 0x01AB, BIDI_L }, // LATIN SMALL LETTER T WITH PALATAL HOOK
+ { 0x01AC, BIDI_L }, // LATIN CAPITAL LETTER T WITH HOOK
+ { 0x01AD, BIDI_L }, // LATIN SMALL LETTER T WITH HOOK
+ { 0x01AE, BIDI_L }, // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+ { 0x01AF, BIDI_L }, // LATIN CAPITAL LETTER U WITH HORN
+ { 0x01B0, BIDI_L }, // LATIN SMALL LETTER U WITH HORN
+ { 0x01B1, BIDI_L }, // LATIN CAPITAL LETTER UPSILON
+ { 0x01B2, BIDI_L }, // LATIN CAPITAL LETTER V WITH HOOK
+ { 0x01B3, BIDI_L }, // LATIN CAPITAL LETTER Y WITH HOOK
+ { 0x01B4, BIDI_L }, // LATIN SMALL LETTER Y WITH HOOK
+ { 0x01B5, BIDI_L }, // LATIN CAPITAL LETTER Z WITH STROKE
+ { 0x01B6, BIDI_L }, // LATIN SMALL LETTER Z WITH STROKE
+ { 0x01B7, BIDI_L }, // LATIN CAPITAL LETTER EZH
+ { 0x01B8, BIDI_L }, // LATIN CAPITAL LETTER EZH REVERSED
+ { 0x01B9, BIDI_L }, // LATIN SMALL LETTER EZH REVERSED
+ { 0x01BA, BIDI_L }, // LATIN SMALL LETTER EZH WITH TAIL
+ { 0x01BB, BIDI_L }, // LATIN LETTER TWO WITH STROKE
+ { 0x01BC, BIDI_L }, // LATIN CAPITAL LETTER TONE FIVE
+ { 0x01BD, BIDI_L }, // LATIN SMALL LETTER TONE FIVE
+ { 0x01BE, BIDI_L }, // LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+ { 0x01BF, BIDI_L }, // LATIN LETTER WYNN
+ { 0x01C0, BIDI_L }, // LATIN LETTER DENTAL CLICK
+ { 0x01C1, BIDI_L }, // LATIN LETTER LATERAL CLICK
+ { 0x01C2, BIDI_L }, // LATIN LETTER ALVEOLAR CLICK
+ { 0x01C3, BIDI_L }, // LATIN LETTER RETROFLEX CLICK
+ { 0x01C4, BIDI_L }, // LATIN CAPITAL LETTER DZ WITH CARON
+ { 0x01C5, BIDI_L }, // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+ { 0x01C6, BIDI_L }, // LATIN SMALL LETTER DZ WITH CARON
+ { 0x01C7, BIDI_L }, // LATIN CAPITAL LETTER LJ
+ { 0x01C8, BIDI_L }, // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ { 0x01C9, BIDI_L }, // LATIN SMALL LETTER LJ
+ { 0x01CA, BIDI_L }, // LATIN CAPITAL LETTER NJ
+ { 0x01CB, BIDI_L }, // LATIN CAPITAL LETTER N WITH SMALL LETTER J
+ { 0x01CC, BIDI_L }, // LATIN SMALL LETTER NJ
+ { 0x01CD, BIDI_L }, // LATIN CAPITAL LETTER A WITH CARON
+ { 0x01CE, BIDI_L }, // LATIN SMALL LETTER A WITH CARON
+ { 0x01CF, BIDI_L }, // LATIN CAPITAL LETTER I WITH CARON
+ { 0x01D0, BIDI_L }, // LATIN SMALL LETTER I WITH CARON
+ { 0x01D1, BIDI_L }, // LATIN CAPITAL LETTER O WITH CARON
+ { 0x01D2, BIDI_L }, // LATIN SMALL LETTER O WITH CARON
+ { 0x01D3, BIDI_L }, // LATIN CAPITAL LETTER U WITH CARON
+ { 0x01D4, BIDI_L }, // LATIN SMALL LETTER U WITH CARON
+ { 0x01D5, BIDI_L }, // LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+ { 0x01D6, BIDI_L }, // LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+ { 0x01D7, BIDI_L }, // LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+ { 0x01D8, BIDI_L }, // LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+ { 0x01D9, BIDI_L }, // LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+ { 0x01DA, BIDI_L }, // LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ { 0x01DB, BIDI_L }, // LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+ { 0x01DC, BIDI_L }, // LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ { 0x01DD, BIDI_L }, // LATIN SMALL LETTER TURNED E
+ { 0x01DE, BIDI_L }, // LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+ { 0x01DF, BIDI_L }, // LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+ { 0x01E0, BIDI_L }, // LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+ { 0x01E1, BIDI_L }, // LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+ { 0x01E2, BIDI_L }, // LATIN CAPITAL LETTER AE WITH MACRON
+ { 0x01E3, BIDI_L }, // LATIN SMALL LETTER AE WITH MACRON
+ { 0x01E4, BIDI_L }, // LATIN CAPITAL LETTER G WITH STROKE
+ { 0x01E5, BIDI_L }, // LATIN SMALL LETTER G WITH STROKE
+ { 0x01E6, BIDI_L }, // LATIN CAPITAL LETTER G WITH CARON
+ { 0x01E7, BIDI_L }, // LATIN SMALL LETTER G WITH CARON
+ { 0x01E8, BIDI_L }, // LATIN CAPITAL LETTER K WITH CARON
+ { 0x01E9, BIDI_L }, // LATIN SMALL LETTER K WITH CARON
+ { 0x01EA, BIDI_L }, // LATIN CAPITAL LETTER O WITH OGONEK
+ { 0x01EB, BIDI_L }, // LATIN SMALL LETTER O WITH OGONEK
+ { 0x01EC, BIDI_L }, // LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+ { 0x01ED, BIDI_L }, // LATIN SMALL LETTER O WITH OGONEK AND MACRON
+ { 0x01EE, BIDI_L }, // LATIN CAPITAL LETTER EZH WITH CARON
+ { 0x01EF, BIDI_L }, // LATIN SMALL LETTER EZH WITH CARON
+ { 0x01F0, BIDI_L }, // LATIN SMALL LETTER J WITH CARON
+ { 0x01F1, BIDI_L }, // LATIN CAPITAL LETTER DZ
+ { 0x01F2, BIDI_L }, // LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+ { 0x01F3, BIDI_L }, // LATIN SMALL LETTER DZ
+ { 0x01F4, BIDI_L }, // LATIN CAPITAL LETTER G WITH ACUTE
+ { 0x01F5, BIDI_L }, // LATIN SMALL LETTER G WITH ACUTE
+ { 0x01F6, BIDI_L }, // LATIN CAPITAL LETTER HWAIR
+ { 0x01F7, BIDI_L }, // LATIN CAPITAL LETTER WYNN
+ { 0x01F8, BIDI_L }, // LATIN CAPITAL LETTER N WITH GRAVE
+ { 0x01F9, BIDI_L }, // LATIN SMALL LETTER N WITH GRAVE
+ { 0x01FA, BIDI_L }, // LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+ { 0x01FB, BIDI_L }, // LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+ { 0x01FC, BIDI_L }, // LATIN CAPITAL LETTER AE WITH ACUTE
+ { 0x01FD, BIDI_L }, // LATIN SMALL LETTER AE WITH ACUTE
+ { 0x01FE, BIDI_L }, // LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+ { 0x01FF, BIDI_L }, // LATIN SMALL LETTER O WITH STROKE AND ACUTE
+ { 0x0200, BIDI_L }, // LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+ { 0x0201, BIDI_L }, // LATIN SMALL LETTER A WITH DOUBLE GRAVE
+ { 0x0202, BIDI_L }, // LATIN CAPITAL LETTER A WITH INVERTED BREVE
+ { 0x0203, BIDI_L }, // LATIN SMALL LETTER A WITH INVERTED BREVE
+ { 0x0204, BIDI_L }, // LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+ { 0x0205, BIDI_L }, // LATIN SMALL LETTER E WITH DOUBLE GRAVE
+ { 0x0206, BIDI_L }, // LATIN CAPITAL LETTER E WITH INVERTED BREVE
+ { 0x0207, BIDI_L }, // LATIN SMALL LETTER E WITH INVERTED BREVE
+ { 0x0208, BIDI_L }, // LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+ { 0x0209, BIDI_L }, // LATIN SMALL LETTER I WITH DOUBLE GRAVE
+ { 0x020A, BIDI_L }, // LATIN CAPITAL LETTER I WITH INVERTED BREVE
+ { 0x020B, BIDI_L }, // LATIN SMALL LETTER I WITH INVERTED BREVE
+ { 0x020C, BIDI_L }, // LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+ { 0x020D, BIDI_L }, // LATIN SMALL LETTER O WITH DOUBLE GRAVE
+ { 0x020E, BIDI_L }, // LATIN CAPITAL LETTER O WITH INVERTED BREVE
+ { 0x020F, BIDI_L }, // LATIN SMALL LETTER O WITH INVERTED BREVE
+ { 0x0210, BIDI_L }, // LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+ { 0x0211, BIDI_L }, // LATIN SMALL LETTER R WITH DOUBLE GRAVE
+ { 0x0212, BIDI_L }, // LATIN CAPITAL LETTER R WITH INVERTED BREVE
+ { 0x0213, BIDI_L }, // LATIN SMALL LETTER R WITH INVERTED BREVE
+ { 0x0214, BIDI_L }, // LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+ { 0x0215, BIDI_L }, // LATIN SMALL LETTER U WITH DOUBLE GRAVE
+ { 0x0216, BIDI_L }, // LATIN CAPITAL LETTER U WITH INVERTED BREVE
+ { 0x0217, BIDI_L }, // LATIN SMALL LETTER U WITH INVERTED BREVE
+ { 0x0218, BIDI_L }, // LATIN CAPITAL LETTER S WITH COMMA BELOW
+ { 0x0219, BIDI_L }, // LATIN SMALL LETTER S WITH COMMA BELOW
+ { 0x021A, BIDI_L }, // LATIN CAPITAL LETTER T WITH COMMA BELOW
+ { 0x021B, BIDI_L }, // LATIN SMALL LETTER T WITH COMMA BELOW
+ { 0x021C, BIDI_L }, // LATIN CAPITAL LETTER YOGH
+ { 0x021D, BIDI_L }, // LATIN SMALL LETTER YOGH
+ { 0x021E, BIDI_L }, // LATIN CAPITAL LETTER H WITH CARON
+ { 0x021F, BIDI_L }, // LATIN SMALL LETTER H WITH CARON
+ { 0x0220, BIDI_L }, // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+ { 0x0221, BIDI_L }, // LATIN SMALL LETTER D WITH CURL
+ { 0x0222, BIDI_L }, // LATIN CAPITAL LETTER OU
+ { 0x0223, BIDI_L }, // LATIN SMALL LETTER OU
+ { 0x0224, BIDI_L }, // LATIN CAPITAL LETTER Z WITH HOOK
+ { 0x0225, BIDI_L }, // LATIN SMALL LETTER Z WITH HOOK
+ { 0x0226, BIDI_L }, // LATIN CAPITAL LETTER A WITH DOT ABOVE
+ { 0x0227, BIDI_L }, // LATIN SMALL LETTER A WITH DOT ABOVE
+ { 0x0228, BIDI_L }, // LATIN CAPITAL LETTER E WITH CEDILLA
+ { 0x0229, BIDI_L }, // LATIN SMALL LETTER E WITH CEDILLA
+ { 0x022A, BIDI_L }, // LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+ { 0x022B, BIDI_L }, // LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+ { 0x022C, BIDI_L }, // LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+ { 0x022D, BIDI_L }, // LATIN SMALL LETTER O WITH TILDE AND MACRON
+ { 0x022E, BIDI_L }, // LATIN CAPITAL LETTER O WITH DOT ABOVE
+ { 0x022F, BIDI_L }, // LATIN SMALL LETTER O WITH DOT ABOVE
+ { 0x0230, BIDI_L }, // LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+ { 0x0231, BIDI_L }, // LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+ { 0x0232, BIDI_L }, // LATIN CAPITAL LETTER Y WITH MACRON
+ { 0x0233, BIDI_L }, // LATIN SMALL LETTER Y WITH MACRON
+ { 0x0234, BIDI_L }, // LATIN SMALL LETTER L WITH CURL
+ { 0x0235, BIDI_L }, // LATIN SMALL LETTER N WITH CURL
+ { 0x0236, BIDI_L }, // LATIN SMALL LETTER T WITH CURL
+ { 0x0237, BIDI_L }, // LATIN SMALL LETTER DOTLESS J
+ { 0x0238, BIDI_L }, // LATIN SMALL LETTER DB DIGRAPH
+ { 0x0239, BIDI_L }, // LATIN SMALL LETTER QP DIGRAPH
+ { 0x023A, BIDI_L }, // LATIN CAPITAL LETTER A WITH STROKE
+ { 0x023B, BIDI_L }, // LATIN CAPITAL LETTER C WITH STROKE
+ { 0x023C, BIDI_L }, // LATIN SMALL LETTER C WITH STROKE
+ { 0x023D, BIDI_L }, // LATIN CAPITAL LETTER L WITH BAR
+ { 0x023E, BIDI_L }, // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+ { 0x023F, BIDI_L }, // LATIN SMALL LETTER S WITH SWASH TAIL
+ { 0x0240, BIDI_L }, // LATIN SMALL LETTER Z WITH SWASH TAIL
+ { 0x0241, BIDI_L }, // LATIN CAPITAL LETTER GLOTTAL STOP
+ { 0x0242, BIDI_L }, // LATIN SMALL LETTER GLOTTAL STOP
+ { 0x0243, BIDI_L }, // LATIN CAPITAL LETTER B WITH STROKE
+ { 0x0244, BIDI_L }, // LATIN CAPITAL LETTER U BAR
+ { 0x0245, BIDI_L }, // LATIN CAPITAL LETTER TURNED V
+ { 0x0246, BIDI_L }, // LATIN CAPITAL LETTER E WITH STROKE
+ { 0x0247, BIDI_L }, // LATIN SMALL LETTER E WITH STROKE
+ { 0x0248, BIDI_L }, // LATIN CAPITAL LETTER J WITH STROKE
+ { 0x0249, BIDI_L }, // LATIN SMALL LETTER J WITH STROKE
+ { 0x024A, BIDI_L }, // LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+ { 0x024B, BIDI_L }, // LATIN SMALL LETTER Q WITH HOOK TAIL
+ { 0x024C, BIDI_L }, // LATIN CAPITAL LETTER R WITH STROKE
+ { 0x024D, BIDI_L }, // LATIN SMALL LETTER R WITH STROKE
+ { 0x024E, BIDI_L }, // LATIN CAPITAL LETTER Y WITH STROKE
+ { 0x024F, BIDI_L }, // LATIN SMALL LETTER Y WITH STROKE
+ { 0x0250, BIDI_L }, // LATIN SMALL LETTER TURNED A
+ { 0x0251, BIDI_L }, // LATIN SMALL LETTER ALPHA
+ { 0x0252, BIDI_L }, // LATIN SMALL LETTER TURNED ALPHA
+ { 0x0253, BIDI_L }, // LATIN SMALL LETTER B WITH HOOK
+ { 0x0254, BIDI_L }, // LATIN SMALL LETTER OPEN O
+ { 0x0255, BIDI_L }, // LATIN SMALL LETTER C WITH CURL
+ { 0x0256, BIDI_L }, // LATIN SMALL LETTER D WITH TAIL
+ { 0x0257, BIDI_L }, // LATIN SMALL LETTER D WITH HOOK
+ { 0x0258, BIDI_L }, // LATIN SMALL LETTER REVERSED E
+ { 0x0259, BIDI_L }, // LATIN SMALL LETTER SCHWA
+ { 0x025A, BIDI_L }, // LATIN SMALL LETTER SCHWA WITH HOOK
+ { 0x025B, BIDI_L }, // LATIN SMALL LETTER OPEN E
+ { 0x025C, BIDI_L }, // LATIN SMALL LETTER REVERSED OPEN E
+ { 0x025D, BIDI_L }, // LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+ { 0x025E, BIDI_L }, // LATIN SMALL LETTER CLOSED REVERSED OPEN E
+ { 0x025F, BIDI_L }, // LATIN SMALL LETTER DOTLESS J WITH STROKE
+ { 0x0260, BIDI_L }, // LATIN SMALL LETTER G WITH HOOK
+ { 0x0261, BIDI_L }, // LATIN SMALL LETTER SCRIPT G
+ { 0x0262, BIDI_L }, // LATIN LETTER SMALL CAPITAL G
+ { 0x0263, BIDI_L }, // LATIN SMALL LETTER GAMMA
+ { 0x0264, BIDI_L }, // LATIN SMALL LETTER RAMS HORN
+ { 0x0265, BIDI_L }, // LATIN SMALL LETTER TURNED H
+ { 0x0266, BIDI_L }, // LATIN SMALL LETTER H WITH HOOK
+ { 0x0267, BIDI_L }, // LATIN SMALL LETTER HENG WITH HOOK
+ { 0x0268, BIDI_L }, // LATIN SMALL LETTER I WITH STROKE
+ { 0x0269, BIDI_L }, // LATIN SMALL LETTER IOTA
+ { 0x026A, BIDI_L }, // LATIN LETTER SMALL CAPITAL I
+ { 0x026B, BIDI_L }, // LATIN SMALL LETTER L WITH MIDDLE TILDE
+ { 0x026C, BIDI_L }, // LATIN SMALL LETTER L WITH BELT
+ { 0x026D, BIDI_L }, // LATIN SMALL LETTER L WITH RETROFLEX HOOK
+ { 0x026E, BIDI_L }, // LATIN SMALL LETTER LEZH
+ { 0x026F, BIDI_L }, // LATIN SMALL LETTER TURNED M
+ { 0x0270, BIDI_L }, // LATIN SMALL LETTER TURNED M WITH LONG LEG
+ { 0x0271, BIDI_L }, // LATIN SMALL LETTER M WITH HOOK
+ { 0x0272, BIDI_L }, // LATIN SMALL LETTER N WITH LEFT HOOK
+ { 0x0273, BIDI_L }, // LATIN SMALL LETTER N WITH RETROFLEX HOOK
+ { 0x0274, BIDI_L }, // LATIN LETTER SMALL CAPITAL N
+ { 0x0275, BIDI_L }, // LATIN SMALL LETTER BARRED O
+ { 0x0276, BIDI_L }, // LATIN LETTER SMALL CAPITAL OE
+ { 0x0277, BIDI_L }, // LATIN SMALL LETTER CLOSED OMEGA
+ { 0x0278, BIDI_L }, // LATIN SMALL LETTER PHI
+ { 0x0279, BIDI_L }, // LATIN SMALL LETTER TURNED R
+ { 0x027A, BIDI_L }, // LATIN SMALL LETTER TURNED R WITH LONG LEG
+ { 0x027B, BIDI_L }, // LATIN SMALL LETTER TURNED R WITH HOOK
+ { 0x027C, BIDI_L }, // LATIN SMALL LETTER R WITH LONG LEG
+ { 0x027D, BIDI_L }, // LATIN SMALL LETTER R WITH TAIL
+ { 0x027E, BIDI_L }, // LATIN SMALL LETTER R WITH FISHHOOK
+ { 0x027F, BIDI_L }, // LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+ { 0x0280, BIDI_L }, // LATIN LETTER SMALL CAPITAL R
+ { 0x0281, BIDI_L }, // LATIN LETTER SMALL CAPITAL INVERTED R
+ { 0x0282, BIDI_L }, // LATIN SMALL LETTER S WITH HOOK
+ { 0x0283, BIDI_L }, // LATIN SMALL LETTER ESH
+ { 0x0284, BIDI_L }, // LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+ { 0x0285, BIDI_L }, // LATIN SMALL LETTER SQUAT REVERSED ESH
+ { 0x0286, BIDI_L }, // LATIN SMALL LETTER ESH WITH CURL
+ { 0x0287, BIDI_L }, // LATIN SMALL LETTER TURNED T
+ { 0x0288, BIDI_L }, // LATIN SMALL LETTER T WITH RETROFLEX HOOK
+ { 0x0289, BIDI_L }, // LATIN SMALL LETTER U BAR
+ { 0x028A, BIDI_L }, // LATIN SMALL LETTER UPSILON
+ { 0x028B, BIDI_L }, // LATIN SMALL LETTER V WITH HOOK
+ { 0x028C, BIDI_L }, // LATIN SMALL LETTER TURNED V
+ { 0x028D, BIDI_L }, // LATIN SMALL LETTER TURNED W
+ { 0x028E, BIDI_L }, // LATIN SMALL LETTER TURNED Y
+ { 0x028F, BIDI_L }, // LATIN LETTER SMALL CAPITAL Y
+ { 0x0290, BIDI_L }, // LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+ { 0x0291, BIDI_L }, // LATIN SMALL LETTER Z WITH CURL
+ { 0x0292, BIDI_L }, // LATIN SMALL LETTER EZH
+ { 0x0293, BIDI_L }, // LATIN SMALL LETTER EZH WITH CURL
+ { 0x0294, BIDI_L }, // LATIN LETTER GLOTTAL STOP
+ { 0x0295, BIDI_L }, // LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+ { 0x0296, BIDI_L }, // LATIN LETTER INVERTED GLOTTAL STOP
+ { 0x0297, BIDI_L }, // LATIN LETTER STRETCHED C
+ { 0x0298, BIDI_L }, // LATIN LETTER BILABIAL CLICK
+ { 0x0299, BIDI_L }, // LATIN LETTER SMALL CAPITAL B
+ { 0x029A, BIDI_L }, // LATIN SMALL LETTER CLOSED OPEN E
+ { 0x029B, BIDI_L }, // LATIN LETTER SMALL CAPITAL G WITH HOOK
+ { 0x029C, BIDI_L }, // LATIN LETTER SMALL CAPITAL H
+ { 0x029D, BIDI_L }, // LATIN SMALL LETTER J WITH CROSSED-TAIL
+ { 0x029E, BIDI_L }, // LATIN SMALL LETTER TURNED K
+ { 0x029F, BIDI_L }, // LATIN LETTER SMALL CAPITAL L
+ { 0x02A0, BIDI_L }, // LATIN SMALL LETTER Q WITH HOOK
+ { 0x02A1, BIDI_L }, // LATIN LETTER GLOTTAL STOP WITH STROKE
+ { 0x02A2, BIDI_L }, // LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+ { 0x02A3, BIDI_L }, // LATIN SMALL LETTER DZ DIGRAPH
+ { 0x02A4, BIDI_L }, // LATIN SMALL LETTER DEZH DIGRAPH
+ { 0x02A5, BIDI_L }, // LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+ { 0x02A6, BIDI_L }, // LATIN SMALL LETTER TS DIGRAPH
+ { 0x02A7, BIDI_L }, // LATIN SMALL LETTER TESH DIGRAPH
+ { 0x02A8, BIDI_L }, // LATIN SMALL LETTER TC DIGRAPH WITH CURL
+ { 0x02A9, BIDI_L }, // LATIN SMALL LETTER FENG DIGRAPH
+ { 0x02AA, BIDI_L }, // LATIN SMALL LETTER LS DIGRAPH
+ { 0x02AB, BIDI_L }, // LATIN SMALL LETTER LZ DIGRAPH
+ { 0x02AC, BIDI_L }, // LATIN LETTER BILABIAL PERCUSSIVE
+ { 0x02AD, BIDI_L }, // LATIN LETTER BIDENTAL PERCUSSIVE
+ { 0x02AE, BIDI_L }, // LATIN SMALL LETTER TURNED H WITH FISHHOOK
+ { 0x02AF, BIDI_L }, // LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+ { 0x02B0, BIDI_L }, // MODIFIER LETTER SMALL H
+ { 0x02B1, BIDI_L }, // MODIFIER LETTER SMALL H WITH HOOK
+ { 0x02B2, BIDI_L }, // MODIFIER LETTER SMALL J
+ { 0x02B3, BIDI_L }, // MODIFIER LETTER SMALL R
+ { 0x02B4, BIDI_L }, // MODIFIER LETTER SMALL TURNED R
+ { 0x02B5, BIDI_L }, // MODIFIER LETTER SMALL TURNED R WITH HOOK
+ { 0x02B6, BIDI_L }, // MODIFIER LETTER SMALL CAPITAL INVERTED R
+ { 0x02B7, BIDI_L }, // MODIFIER LETTER SMALL W
+ { 0x02B8, BIDI_L }, // MODIFIER LETTER SMALL Y
+ { 0x02B9, BIDI_ON }, // MODIFIER LETTER PRIME
+ { 0x02BA, BIDI_ON }, // MODIFIER LETTER DOUBLE PRIME
+ { 0x02BB, BIDI_L }, // MODIFIER LETTER TURNED COMMA
+ { 0x02BC, BIDI_L }, // MODIFIER LETTER APOSTROPHE
+ { 0x02BD, BIDI_L }, // MODIFIER LETTER REVERSED COMMA
+ { 0x02BE, BIDI_L }, // MODIFIER LETTER RIGHT HALF RING
+ { 0x02BF, BIDI_L }, // MODIFIER LETTER LEFT HALF RING
+ { 0x02C0, BIDI_L }, // MODIFIER LETTER GLOTTAL STOP
+ { 0x02C1, BIDI_L }, // MODIFIER LETTER REVERSED GLOTTAL STOP
+ { 0x02C2, BIDI_ON }, // MODIFIER LETTER LEFT ARROWHEAD
+ { 0x02C3, BIDI_ON }, // MODIFIER LETTER RIGHT ARROWHEAD
+ { 0x02C4, BIDI_ON }, // MODIFIER LETTER UP ARROWHEAD
+ { 0x02C5, BIDI_ON }, // MODIFIER LETTER DOWN ARROWHEAD
+ { 0x02C6, BIDI_ON }, // MODIFIER LETTER CIRCUMFLEX ACCENT
+ { 0x02C7, BIDI_ON }, // CARON
+ { 0x02C8, BIDI_ON }, // MODIFIER LETTER VERTICAL LINE
+ { 0x02C9, BIDI_ON }, // MODIFIER LETTER MACRON
+ { 0x02CA, BIDI_ON }, // MODIFIER LETTER ACUTE ACCENT
+ { 0x02CB, BIDI_ON }, // MODIFIER LETTER GRAVE ACCENT
+ { 0x02CC, BIDI_ON }, // MODIFIER LETTER LOW VERTICAL LINE
+ { 0x02CD, BIDI_ON }, // MODIFIER LETTER LOW MACRON
+ { 0x02CE, BIDI_ON }, // MODIFIER LETTER LOW GRAVE ACCENT
+ { 0x02CF, BIDI_ON }, // MODIFIER LETTER LOW ACUTE ACCENT
+ { 0x02D0, BIDI_L }, // MODIFIER LETTER TRIANGULAR COLON
+ { 0x02D1, BIDI_L }, // MODIFIER LETTER HALF TRIANGULAR COLON
+ { 0x02D2, BIDI_ON }, // MODIFIER LETTER CENTRED RIGHT HALF RING
+ { 0x02D3, BIDI_ON }, // MODIFIER LETTER CENTRED LEFT HALF RING
+ { 0x02D4, BIDI_ON }, // MODIFIER LETTER UP TACK
+ { 0x02D5, BIDI_ON }, // MODIFIER LETTER DOWN TACK
+ { 0x02D6, BIDI_ON }, // MODIFIER LETTER PLUS SIGN
+ { 0x02D7, BIDI_ON }, // MODIFIER LETTER MINUS SIGN
+ { 0x02D8, BIDI_ON }, // BREVE
+ { 0x02D9, BIDI_ON }, // DOT ABOVE
+ { 0x02DA, BIDI_ON }, // RING ABOVE
+ { 0x02DB, BIDI_ON }, // OGONEK
+ { 0x02DC, BIDI_ON }, // SMALL TILDE
+ { 0x02DD, BIDI_ON }, // DOUBLE ACUTE ACCENT
+ { 0x02DE, BIDI_ON }, // MODIFIER LETTER RHOTIC HOOK
+ { 0x02DF, BIDI_ON }, // MODIFIER LETTER CROSS ACCENT
+ { 0x02E0, BIDI_L }, // MODIFIER LETTER SMALL GAMMA
+ { 0x02E1, BIDI_L }, // MODIFIER LETTER SMALL L
+ { 0x02E2, BIDI_L }, // MODIFIER LETTER SMALL S
+ { 0x02E3, BIDI_L }, // MODIFIER LETTER SMALL X
+ { 0x02E4, BIDI_L }, // MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+ { 0x02E5, BIDI_ON }, // MODIFIER LETTER EXTRA-HIGH TONE BAR
+ { 0x02E6, BIDI_ON }, // MODIFIER LETTER HIGH TONE BAR
+ { 0x02E7, BIDI_ON }, // MODIFIER LETTER MID TONE BAR
+ { 0x02E8, BIDI_ON }, // MODIFIER LETTER LOW TONE BAR
+ { 0x02E9, BIDI_ON }, // MODIFIER LETTER EXTRA-LOW TONE BAR
+ { 0x02EA, BIDI_ON }, // MODIFIER LETTER YIN DEPARTING TONE MARK
+ { 0x02EB, BIDI_ON }, // MODIFIER LETTER YANG DEPARTING TONE MARK
+ { 0x02EC, BIDI_ON }, // MODIFIER LETTER VOICING
+ { 0x02ED, BIDI_ON }, // MODIFIER LETTER UNASPIRATED
+ { 0x02EE, BIDI_L }, // MODIFIER LETTER DOUBLE APOSTROPHE
+ { 0x02EF, BIDI_ON }, // MODIFIER LETTER LOW DOWN ARROWHEAD
+ { 0x02F0, BIDI_ON }, // MODIFIER LETTER LOW UP ARROWHEAD
+ { 0x02F1, BIDI_ON }, // MODIFIER LETTER LOW LEFT ARROWHEAD
+ { 0x02F2, BIDI_ON }, // MODIFIER LETTER LOW RIGHT ARROWHEAD
+ { 0x02F3, BIDI_ON }, // MODIFIER LETTER LOW RING
+ { 0x02F4, BIDI_ON }, // MODIFIER LETTER MIDDLE GRAVE ACCENT
+ { 0x02F5, BIDI_ON }, // MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
+ { 0x02F6, BIDI_ON }, // MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT
+ { 0x02F7, BIDI_ON }, // MODIFIER LETTER LOW TILDE
+ { 0x02F8, BIDI_ON }, // MODIFIER LETTER RAISED COLON
+ { 0x02F9, BIDI_ON }, // MODIFIER LETTER BEGIN HIGH TONE
+ { 0x02FA, BIDI_ON }, // MODIFIER LETTER END HIGH TONE
+ { 0x02FB, BIDI_ON }, // MODIFIER LETTER BEGIN LOW TONE
+ { 0x02FC, BIDI_ON }, // MODIFIER LETTER END LOW TONE
+ { 0x02FD, BIDI_ON }, // MODIFIER LETTER SHELF
+ { 0x02FE, BIDI_ON }, // MODIFIER LETTER OPEN SHELF
+ { 0x02FF, BIDI_ON }, // MODIFIER LETTER LOW LEFT ARROW
+ { 0x0300, BIDI_NSM }, // COMBINING GRAVE ACCENT
+ { 0x0301, BIDI_NSM }, // COMBINING ACUTE ACCENT
+ { 0x0302, BIDI_NSM }, // COMBINING CIRCUMFLEX ACCENT
+ { 0x0303, BIDI_NSM }, // COMBINING TILDE
+ { 0x0304, BIDI_NSM }, // COMBINING MACRON
+ { 0x0305, BIDI_NSM }, // COMBINING OVERLINE
+ { 0x0306, BIDI_NSM }, // COMBINING BREVE
+ { 0x0307, BIDI_NSM }, // COMBINING DOT ABOVE
+ { 0x0308, BIDI_NSM }, // COMBINING DIAERESIS
+ { 0x0309, BIDI_NSM }, // COMBINING HOOK ABOVE
+ { 0x030A, BIDI_NSM }, // COMBINING RING ABOVE
+ { 0x030B, BIDI_NSM }, // COMBINING DOUBLE ACUTE ACCENT
+ { 0x030C, BIDI_NSM }, // COMBINING CARON
+ { 0x030D, BIDI_NSM }, // COMBINING VERTICAL LINE ABOVE
+ { 0x030E, BIDI_NSM }, // COMBINING DOUBLE VERTICAL LINE ABOVE
+ { 0x030F, BIDI_NSM }, // COMBINING DOUBLE GRAVE ACCENT
+ { 0x0310, BIDI_NSM }, // COMBINING CANDRABINDU
+ { 0x0311, BIDI_NSM }, // COMBINING INVERTED BREVE
+ { 0x0312, BIDI_NSM }, // COMBINING TURNED COMMA ABOVE
+ { 0x0313, BIDI_NSM }, // COMBINING COMMA ABOVE
+ { 0x0314, BIDI_NSM }, // COMBINING REVERSED COMMA ABOVE
+ { 0x0315, BIDI_NSM }, // COMBINING COMMA ABOVE RIGHT
+ { 0x0316, BIDI_NSM }, // COMBINING GRAVE ACCENT BELOW
+ { 0x0317, BIDI_NSM }, // COMBINING ACUTE ACCENT BELOW
+ { 0x0318, BIDI_NSM }, // COMBINING LEFT TACK BELOW
+ { 0x0319, BIDI_NSM }, // COMBINING RIGHT TACK BELOW
+ { 0x031A, BIDI_NSM }, // COMBINING LEFT ANGLE ABOVE
+ { 0x031B, BIDI_NSM }, // COMBINING HORN
+ { 0x031C, BIDI_NSM }, // COMBINING LEFT HALF RING BELOW
+ { 0x031D, BIDI_NSM }, // COMBINING UP TACK BELOW
+ { 0x031E, BIDI_NSM }, // COMBINING DOWN TACK BELOW
+ { 0x031F, BIDI_NSM }, // COMBINING PLUS SIGN BELOW
+ { 0x0320, BIDI_NSM }, // COMBINING MINUS SIGN BELOW
+ { 0x0321, BIDI_NSM }, // COMBINING PALATALIZED HOOK BELOW
+ { 0x0322, BIDI_NSM }, // COMBINING RETROFLEX HOOK BELOW
+ { 0x0323, BIDI_NSM }, // COMBINING DOT BELOW
+ { 0x0324, BIDI_NSM }, // COMBINING DIAERESIS BELOW
+ { 0x0325, BIDI_NSM }, // COMBINING RING BELOW
+ { 0x0326, BIDI_NSM }, // COMBINING COMMA BELOW
+ { 0x0327, BIDI_NSM }, // COMBINING CEDILLA
+ { 0x0328, BIDI_NSM }, // COMBINING OGONEK
+ { 0x0329, BIDI_NSM }, // COMBINING VERTICAL LINE BELOW
+ { 0x032A, BIDI_NSM }, // COMBINING BRIDGE BELOW
+ { 0x032B, BIDI_NSM }, // COMBINING INVERTED DOUBLE ARCH BELOW
+ { 0x032C, BIDI_NSM }, // COMBINING CARON BELOW
+ { 0x032D, BIDI_NSM }, // COMBINING CIRCUMFLEX ACCENT BELOW
+ { 0x032E, BIDI_NSM }, // COMBINING BREVE BELOW
+ { 0x032F, BIDI_NSM }, // COMBINING INVERTED BREVE BELOW
+ { 0x0330, BIDI_NSM }, // COMBINING TILDE BELOW
+ { 0x0331, BIDI_NSM }, // COMBINING MACRON BELOW
+ { 0x0332, BIDI_NSM }, // COMBINING LOW LINE
+ { 0x0333, BIDI_NSM }, // COMBINING DOUBLE LOW LINE
+ { 0x0334, BIDI_NSM }, // COMBINING TILDE OVERLAY
+ { 0x0335, BIDI_NSM }, // COMBINING SHORT STROKE OVERLAY
+ { 0x0336, BIDI_NSM }, // COMBINING LONG STROKE OVERLAY
+ { 0x0337, BIDI_NSM }, // COMBINING SHORT SOLIDUS OVERLAY
+ { 0x0338, BIDI_NSM }, // COMBINING LONG SOLIDUS OVERLAY
+ { 0x0339, BIDI_NSM }, // COMBINING RIGHT HALF RING BELOW
+ { 0x033A, BIDI_NSM }, // COMBINING INVERTED BRIDGE BELOW
+ { 0x033B, BIDI_NSM }, // COMBINING SQUARE BELOW
+ { 0x033C, BIDI_NSM }, // COMBINING SEAGULL BELOW
+ { 0x033D, BIDI_NSM }, // COMBINING X ABOVE
+ { 0x033E, BIDI_NSM }, // COMBINING VERTICAL TILDE
+ { 0x033F, BIDI_NSM }, // COMBINING DOUBLE OVERLINE
+ { 0x0340, BIDI_NSM }, // COMBINING GRAVE TONE MARK
+ { 0x0341, BIDI_NSM }, // COMBINING ACUTE TONE MARK
+ { 0x0342, BIDI_NSM }, // COMBINING GREEK PERISPOMENI
+ { 0x0343, BIDI_NSM }, // COMBINING GREEK KORONIS
+ { 0x0344, BIDI_NSM }, // COMBINING GREEK DIALYTIKA TONOS
+ { 0x0345, BIDI_NSM }, // COMBINING GREEK YPOGEGRAMMENI
+ { 0x0346, BIDI_NSM }, // COMBINING BRIDGE ABOVE
+ { 0x0347, BIDI_NSM }, // COMBINING EQUALS SIGN BELOW
+ { 0x0348, BIDI_NSM }, // COMBINING DOUBLE VERTICAL LINE BELOW
+ { 0x0349, BIDI_NSM }, // COMBINING LEFT ANGLE BELOW
+ { 0x034A, BIDI_NSM }, // COMBINING NOT TILDE ABOVE
+ { 0x034B, BIDI_NSM }, // COMBINING HOMOTHETIC ABOVE
+ { 0x034C, BIDI_NSM }, // COMBINING ALMOST EQUAL TO ABOVE
+ { 0x034D, BIDI_NSM }, // COMBINING LEFT RIGHT ARROW BELOW
+ { 0x034E, BIDI_NSM }, // COMBINING UPWARDS ARROW BELOW
+ { 0x034F, BIDI_NSM }, // COMBINING GRAPHEME JOINER
+ { 0x0350, BIDI_NSM }, // COMBINING RIGHT ARROWHEAD ABOVE
+ { 0x0351, BIDI_NSM }, // COMBINING LEFT HALF RING ABOVE
+ { 0x0352, BIDI_NSM }, // COMBINING FERMATA
+ { 0x0353, BIDI_NSM }, // COMBINING X BELOW
+ { 0x0354, BIDI_NSM }, // COMBINING LEFT ARROWHEAD BELOW
+ { 0x0355, BIDI_NSM }, // COMBINING RIGHT ARROWHEAD BELOW
+ { 0x0356, BIDI_NSM }, // COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW
+ { 0x0357, BIDI_NSM }, // COMBINING RIGHT HALF RING ABOVE
+ { 0x0358, BIDI_NSM }, // COMBINING DOT ABOVE RIGHT
+ { 0x0359, BIDI_NSM }, // COMBINING ASTERISK BELOW
+ { 0x035A, BIDI_NSM }, // COMBINING DOUBLE RING BELOW
+ { 0x035B, BIDI_NSM }, // COMBINING ZIGZAG ABOVE
+ { 0x035C, BIDI_NSM }, // COMBINING DOUBLE BREVE BELOW
+ { 0x035D, BIDI_NSM }, // COMBINING DOUBLE BREVE
+ { 0x035E, BIDI_NSM }, // COMBINING DOUBLE MACRON
+ { 0x035F, BIDI_NSM }, // COMBINING DOUBLE MACRON BELOW
+ { 0x0360, BIDI_NSM }, // COMBINING DOUBLE TILDE
+ { 0x0361, BIDI_NSM }, // COMBINING DOUBLE INVERTED BREVE
+ { 0x0362, BIDI_NSM }, // COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+ { 0x0363, BIDI_NSM }, // COMBINING LATIN SMALL LETTER A
+ { 0x0364, BIDI_NSM }, // COMBINING LATIN SMALL LETTER E
+ { 0x0365, BIDI_NSM }, // COMBINING LATIN SMALL LETTER I
+ { 0x0366, BIDI_NSM }, // COMBINING LATIN SMALL LETTER O
+ { 0x0367, BIDI_NSM }, // COMBINING LATIN SMALL LETTER U
+ { 0x0368, BIDI_NSM }, // COMBINING LATIN SMALL LETTER C
+ { 0x0369, BIDI_NSM }, // COMBINING LATIN SMALL LETTER D
+ { 0x036A, BIDI_NSM }, // COMBINING LATIN SMALL LETTER H
+ { 0x036B, BIDI_NSM }, // COMBINING LATIN SMALL LETTER M
+ { 0x036C, BIDI_NSM }, // COMBINING LATIN SMALL LETTER R
+ { 0x036D, BIDI_NSM }, // COMBINING LATIN SMALL LETTER T
+ { 0x036E, BIDI_NSM }, // COMBINING LATIN SMALL LETTER V
+ { 0x036F, BIDI_NSM }, // COMBINING LATIN SMALL LETTER X
+ { 0x0370, BIDI_L }, // GREEK CAPITAL LETTER HETA
+ { 0x0371, BIDI_L }, // GREEK SMALL LETTER HETA
+ { 0x0372, BIDI_L }, // GREEK CAPITAL LETTER ARCHAIC SAMPI
+ { 0x0373, BIDI_L }, // GREEK SMALL LETTER ARCHAIC SAMPI
+ { 0x0374, BIDI_ON }, // GREEK NUMERAL SIGN
+ { 0x0375, BIDI_ON }, // GREEK LOWER NUMERAL SIGN
+ { 0x0376, BIDI_L }, // GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+ { 0x0377, BIDI_L }, // GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+ { 0x037A, BIDI_L }, // GREEK YPOGEGRAMMENI
+ { 0x037B, BIDI_L }, // GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
+ { 0x037C, BIDI_L }, // GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
+ { 0x037D, BIDI_L }, // GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+ { 0x037E, BIDI_ON }, // GREEK QUESTION MARK
+ { 0x037F, BIDI_L }, // GREEK CAPITAL LETTER YOT
+ { 0x0384, BIDI_ON }, // GREEK TONOS
+ { 0x0385, BIDI_ON }, // GREEK DIALYTIKA TONOS
+ { 0x0386, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH TONOS
+ { 0x0387, BIDI_ON }, // GREEK ANO TELEIA
+ { 0x0388, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH TONOS
+ { 0x0389, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH TONOS
+ { 0x038A, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH TONOS
+ { 0x038C, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH TONOS
+ { 0x038E, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH TONOS
+ { 0x038F, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH TONOS
+ { 0x0390, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ { 0x0391, BIDI_L }, // GREEK CAPITAL LETTER ALPHA
+ { 0x0392, BIDI_L }, // GREEK CAPITAL LETTER BETA
+ { 0x0393, BIDI_L }, // GREEK CAPITAL LETTER GAMMA
+ { 0x0394, BIDI_L }, // GREEK CAPITAL LETTER DELTA
+ { 0x0395, BIDI_L }, // GREEK CAPITAL LETTER EPSILON
+ { 0x0396, BIDI_L }, // GREEK CAPITAL LETTER ZETA
+ { 0x0397, BIDI_L }, // GREEK CAPITAL LETTER ETA
+ { 0x0398, BIDI_L }, // GREEK CAPITAL LETTER THETA
+ { 0x0399, BIDI_L }, // GREEK CAPITAL LETTER IOTA
+ { 0x039A, BIDI_L }, // GREEK CAPITAL LETTER KAPPA
+ { 0x039B, BIDI_L }, // GREEK CAPITAL LETTER LAMDA
+ { 0x039C, BIDI_L }, // GREEK CAPITAL LETTER MU
+ { 0x039D, BIDI_L }, // GREEK CAPITAL LETTER NU
+ { 0x039E, BIDI_L }, // GREEK CAPITAL LETTER XI
+ { 0x039F, BIDI_L }, // GREEK CAPITAL LETTER OMICRON
+ { 0x03A0, BIDI_L }, // GREEK CAPITAL LETTER PI
+ { 0x03A1, BIDI_L }, // GREEK CAPITAL LETTER RHO
+ { 0x03A3, BIDI_L }, // GREEK CAPITAL LETTER SIGMA
+ { 0x03A4, BIDI_L }, // GREEK CAPITAL LETTER TAU
+ { 0x03A5, BIDI_L }, // GREEK CAPITAL LETTER UPSILON
+ { 0x03A6, BIDI_L }, // GREEK CAPITAL LETTER PHI
+ { 0x03A7, BIDI_L }, // GREEK CAPITAL LETTER CHI
+ { 0x03A8, BIDI_L }, // GREEK CAPITAL LETTER PSI
+ { 0x03A9, BIDI_L }, // GREEK CAPITAL LETTER OMEGA
+ { 0x03AA, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+ { 0x03AB, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ { 0x03AC, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH TONOS
+ { 0x03AD, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH TONOS
+ { 0x03AE, BIDI_L }, // GREEK SMALL LETTER ETA WITH TONOS
+ { 0x03AF, BIDI_L }, // GREEK SMALL LETTER IOTA WITH TONOS
+ { 0x03B0, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+ { 0x03B1, BIDI_L }, // GREEK SMALL LETTER ALPHA
+ { 0x03B2, BIDI_L }, // GREEK SMALL LETTER BETA
+ { 0x03B3, BIDI_L }, // GREEK SMALL LETTER GAMMA
+ { 0x03B4, BIDI_L }, // GREEK SMALL LETTER DELTA
+ { 0x03B5, BIDI_L }, // GREEK SMALL LETTER EPSILON
+ { 0x03B6, BIDI_L }, // GREEK SMALL LETTER ZETA
+ { 0x03B7, BIDI_L }, // GREEK SMALL LETTER ETA
+ { 0x03B8, BIDI_L }, // GREEK SMALL LETTER THETA
+ { 0x03B9, BIDI_L }, // GREEK SMALL LETTER IOTA
+ { 0x03BA, BIDI_L }, // GREEK SMALL LETTER KAPPA
+ { 0x03BB, BIDI_L }, // GREEK SMALL LETTER LAMDA
+ { 0x03BC, BIDI_L }, // GREEK SMALL LETTER MU
+ { 0x03BD, BIDI_L }, // GREEK SMALL LETTER NU
+ { 0x03BE, BIDI_L }, // GREEK SMALL LETTER XI
+ { 0x03BF, BIDI_L }, // GREEK SMALL LETTER OMICRON
+ { 0x03C0, BIDI_L }, // GREEK SMALL LETTER PI
+ { 0x03C1, BIDI_L }, // GREEK SMALL LETTER RHO
+ { 0x03C2, BIDI_L }, // GREEK SMALL LETTER FINAL SIGMA
+ { 0x03C3, BIDI_L }, // GREEK SMALL LETTER SIGMA
+ { 0x03C4, BIDI_L }, // GREEK SMALL LETTER TAU
+ { 0x03C5, BIDI_L }, // GREEK SMALL LETTER UPSILON
+ { 0x03C6, BIDI_L }, // GREEK SMALL LETTER PHI
+ { 0x03C7, BIDI_L }, // GREEK SMALL LETTER CHI
+ { 0x03C8, BIDI_L }, // GREEK SMALL LETTER PSI
+ { 0x03C9, BIDI_L }, // GREEK SMALL LETTER OMEGA
+ { 0x03CA, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DIALYTIKA
+ { 0x03CB, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ { 0x03CC, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH TONOS
+ { 0x03CD, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH TONOS
+ { 0x03CE, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH TONOS
+ { 0x03CF, BIDI_L }, // GREEK CAPITAL KAI SYMBOL
+ { 0x03D0, BIDI_L }, // GREEK BETA SYMBOL
+ { 0x03D1, BIDI_L }, // GREEK THETA SYMBOL
+ { 0x03D2, BIDI_L }, // GREEK UPSILON WITH HOOK SYMBOL
+ { 0x03D3, BIDI_L }, // GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+ { 0x03D4, BIDI_L }, // GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+ { 0x03D5, BIDI_L }, // GREEK PHI SYMBOL
+ { 0x03D6, BIDI_L }, // GREEK PI SYMBOL
+ { 0x03D7, BIDI_L }, // GREEK KAI SYMBOL
+ { 0x03D8, BIDI_L }, // GREEK LETTER ARCHAIC KOPPA
+ { 0x03D9, BIDI_L }, // GREEK SMALL LETTER ARCHAIC KOPPA
+ { 0x03DA, BIDI_L }, // GREEK LETTER STIGMA
+ { 0x03DB, BIDI_L }, // GREEK SMALL LETTER STIGMA
+ { 0x03DC, BIDI_L }, // GREEK LETTER DIGAMMA
+ { 0x03DD, BIDI_L }, // GREEK SMALL LETTER DIGAMMA
+ { 0x03DE, BIDI_L }, // GREEK LETTER KOPPA
+ { 0x03DF, BIDI_L }, // GREEK SMALL LETTER KOPPA
+ { 0x03E0, BIDI_L }, // GREEK LETTER SAMPI
+ { 0x03E1, BIDI_L }, // GREEK SMALL LETTER SAMPI
+ { 0x03E2, BIDI_L }, // COPTIC CAPITAL LETTER SHEI
+ { 0x03E3, BIDI_L }, // COPTIC SMALL LETTER SHEI
+ { 0x03E4, BIDI_L }, // COPTIC CAPITAL LETTER FEI
+ { 0x03E5, BIDI_L }, // COPTIC SMALL LETTER FEI
+ { 0x03E6, BIDI_L }, // COPTIC CAPITAL LETTER KHEI
+ { 0x03E7, BIDI_L }, // COPTIC SMALL LETTER KHEI
+ { 0x03E8, BIDI_L }, // COPTIC CAPITAL LETTER HORI
+ { 0x03E9, BIDI_L }, // COPTIC SMALL LETTER HORI
+ { 0x03EA, BIDI_L }, // COPTIC CAPITAL LETTER GANGIA
+ { 0x03EB, BIDI_L }, // COPTIC SMALL LETTER GANGIA
+ { 0x03EC, BIDI_L }, // COPTIC CAPITAL LETTER SHIMA
+ { 0x03ED, BIDI_L }, // COPTIC SMALL LETTER SHIMA
+ { 0x03EE, BIDI_L }, // COPTIC CAPITAL LETTER DEI
+ { 0x03EF, BIDI_L }, // COPTIC SMALL LETTER DEI
+ { 0x03F0, BIDI_L }, // GREEK KAPPA SYMBOL
+ { 0x03F1, BIDI_L }, // GREEK RHO SYMBOL
+ { 0x03F2, BIDI_L }, // GREEK LUNATE SIGMA SYMBOL
+ { 0x03F3, BIDI_L }, // GREEK LETTER YOT
+ { 0x03F4, BIDI_L }, // GREEK CAPITAL THETA SYMBOL
+ { 0x03F5, BIDI_L }, // GREEK LUNATE EPSILON SYMBOL
+ { 0x03F6, BIDI_ON }, // GREEK REVERSED LUNATE EPSILON SYMBOL
+ { 0x03F7, BIDI_L }, // GREEK CAPITAL LETTER SHO
+ { 0x03F8, BIDI_L }, // GREEK SMALL LETTER SHO
+ { 0x03F9, BIDI_L }, // GREEK CAPITAL LUNATE SIGMA SYMBOL
+ { 0x03FA, BIDI_L }, // GREEK CAPITAL LETTER SAN
+ { 0x03FB, BIDI_L }, // GREEK SMALL LETTER SAN
+ { 0x03FC, BIDI_L }, // GREEK RHO WITH STROKE SYMBOL
+ { 0x03FD, BIDI_L }, // GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+ { 0x03FE, BIDI_L }, // GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+ { 0x03FF, BIDI_L }, // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+ { 0x0400, BIDI_L }, // CYRILLIC CAPITAL LETTER IE WITH GRAVE
+ { 0x0401, BIDI_L }, // CYRILLIC CAPITAL LETTER IO
+ { 0x0402, BIDI_L }, // CYRILLIC CAPITAL LETTER DJE
+ { 0x0403, BIDI_L }, // CYRILLIC CAPITAL LETTER GJE
+ { 0x0404, BIDI_L }, // CYRILLIC CAPITAL LETTER UKRAINIAN IE
+ { 0x0405, BIDI_L }, // CYRILLIC CAPITAL LETTER DZE
+ { 0x0406, BIDI_L }, // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ { 0x0407, BIDI_L }, // CYRILLIC CAPITAL LETTER YI
+ { 0x0408, BIDI_L }, // CYRILLIC CAPITAL LETTER JE
+ { 0x0409, BIDI_L }, // CYRILLIC CAPITAL LETTER LJE
+ { 0x040A, BIDI_L }, // CYRILLIC CAPITAL LETTER NJE
+ { 0x040B, BIDI_L }, // CYRILLIC CAPITAL LETTER TSHE
+ { 0x040C, BIDI_L }, // CYRILLIC CAPITAL LETTER KJE
+ { 0x040D, BIDI_L }, // CYRILLIC CAPITAL LETTER I WITH GRAVE
+ { 0x040E, BIDI_L }, // CYRILLIC CAPITAL LETTER SHORT U
+ { 0x040F, BIDI_L }, // CYRILLIC CAPITAL LETTER DZHE
+ { 0x0410, BIDI_L }, // CYRILLIC CAPITAL LETTER A
+ { 0x0411, BIDI_L }, // CYRILLIC CAPITAL LETTER BE
+ { 0x0412, BIDI_L }, // CYRILLIC CAPITAL LETTER VE
+ { 0x0413, BIDI_L }, // CYRILLIC CAPITAL LETTER GHE
+ { 0x0414, BIDI_L }, // CYRILLIC CAPITAL LETTER DE
+ { 0x0415, BIDI_L }, // CYRILLIC CAPITAL LETTER IE
+ { 0x0416, BIDI_L }, // CYRILLIC CAPITAL LETTER ZHE
+ { 0x0417, BIDI_L }, // CYRILLIC CAPITAL LETTER ZE
+ { 0x0418, BIDI_L }, // CYRILLIC CAPITAL LETTER I
+ { 0x0419, BIDI_L }, // CYRILLIC CAPITAL LETTER SHORT I
+ { 0x041A, BIDI_L }, // CYRILLIC CAPITAL LETTER KA
+ { 0x041B, BIDI_L }, // CYRILLIC CAPITAL LETTER EL
+ { 0x041C, BIDI_L }, // CYRILLIC CAPITAL LETTER EM
+ { 0x041D, BIDI_L }, // CYRILLIC CAPITAL LETTER EN
+ { 0x041E, BIDI_L }, // CYRILLIC CAPITAL LETTER O
+ { 0x041F, BIDI_L }, // CYRILLIC CAPITAL LETTER PE
+ { 0x0420, BIDI_L }, // CYRILLIC CAPITAL LETTER ER
+ { 0x0421, BIDI_L }, // CYRILLIC CAPITAL LETTER ES
+ { 0x0422, BIDI_L }, // CYRILLIC CAPITAL LETTER TE
+ { 0x0423, BIDI_L }, // CYRILLIC CAPITAL LETTER U
+ { 0x0424, BIDI_L }, // CYRILLIC CAPITAL LETTER EF
+ { 0x0425, BIDI_L }, // CYRILLIC CAPITAL LETTER HA
+ { 0x0426, BIDI_L }, // CYRILLIC CAPITAL LETTER TSE
+ { 0x0427, BIDI_L }, // CYRILLIC CAPITAL LETTER CHE
+ { 0x0428, BIDI_L }, // CYRILLIC CAPITAL LETTER SHA
+ { 0x0429, BIDI_L }, // CYRILLIC CAPITAL LETTER SHCHA
+ { 0x042A, BIDI_L }, // CYRILLIC CAPITAL LETTER HARD SIGN
+ { 0x042B, BIDI_L }, // CYRILLIC CAPITAL LETTER YERU
+ { 0x042C, BIDI_L }, // CYRILLIC CAPITAL LETTER SOFT SIGN
+ { 0x042D, BIDI_L }, // CYRILLIC CAPITAL LETTER E
+ { 0x042E, BIDI_L }, // CYRILLIC CAPITAL LETTER YU
+ { 0x042F, BIDI_L }, // CYRILLIC CAPITAL LETTER YA
+ { 0x0430, BIDI_L }, // CYRILLIC SMALL LETTER A
+ { 0x0431, BIDI_L }, // CYRILLIC SMALL LETTER BE
+ { 0x0432, BIDI_L }, // CYRILLIC SMALL LETTER VE
+ { 0x0433, BIDI_L }, // CYRILLIC SMALL LETTER GHE
+ { 0x0434, BIDI_L }, // CYRILLIC SMALL LETTER DE
+ { 0x0435, BIDI_L }, // CYRILLIC SMALL LETTER IE
+ { 0x0436, BIDI_L }, // CYRILLIC SMALL LETTER ZHE
+ { 0x0437, BIDI_L }, // CYRILLIC SMALL LETTER ZE
+ { 0x0438, BIDI_L }, // CYRILLIC SMALL LETTER I
+ { 0x0439, BIDI_L }, // CYRILLIC SMALL LETTER SHORT I
+ { 0x043A, BIDI_L }, // CYRILLIC SMALL LETTER KA
+ { 0x043B, BIDI_L }, // CYRILLIC SMALL LETTER EL
+ { 0x043C, BIDI_L }, // CYRILLIC SMALL LETTER EM
+ { 0x043D, BIDI_L }, // CYRILLIC SMALL LETTER EN
+ { 0x043E, BIDI_L }, // CYRILLIC SMALL LETTER O
+ { 0x043F, BIDI_L }, // CYRILLIC SMALL LETTER PE
+ { 0x0440, BIDI_L }, // CYRILLIC SMALL LETTER ER
+ { 0x0441, BIDI_L }, // CYRILLIC SMALL LETTER ES
+ { 0x0442, BIDI_L }, // CYRILLIC SMALL LETTER TE
+ { 0x0443, BIDI_L }, // CYRILLIC SMALL LETTER U
+ { 0x0444, BIDI_L }, // CYRILLIC SMALL LETTER EF
+ { 0x0445, BIDI_L }, // CYRILLIC SMALL LETTER HA
+ { 0x0446, BIDI_L }, // CYRILLIC SMALL LETTER TSE
+ { 0x0447, BIDI_L }, // CYRILLIC SMALL LETTER CHE
+ { 0x0448, BIDI_L }, // CYRILLIC SMALL LETTER SHA
+ { 0x0449, BIDI_L }, // CYRILLIC SMALL LETTER SHCHA
+ { 0x044A, BIDI_L }, // CYRILLIC SMALL LETTER HARD SIGN
+ { 0x044B, BIDI_L }, // CYRILLIC SMALL LETTER YERU
+ { 0x044C, BIDI_L }, // CYRILLIC SMALL LETTER SOFT SIGN
+ { 0x044D, BIDI_L }, // CYRILLIC SMALL LETTER E
+ { 0x044E, BIDI_L }, // CYRILLIC SMALL LETTER YU
+ { 0x044F, BIDI_L }, // CYRILLIC SMALL LETTER YA
+ { 0x0450, BIDI_L }, // CYRILLIC SMALL LETTER IE WITH GRAVE
+ { 0x0451, BIDI_L }, // CYRILLIC SMALL LETTER IO
+ { 0x0452, BIDI_L }, // CYRILLIC SMALL LETTER DJE
+ { 0x0453, BIDI_L }, // CYRILLIC SMALL LETTER GJE
+ { 0x0454, BIDI_L }, // CYRILLIC SMALL LETTER UKRAINIAN IE
+ { 0x0455, BIDI_L }, // CYRILLIC SMALL LETTER DZE
+ { 0x0456, BIDI_L }, // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ { 0x0457, BIDI_L }, // CYRILLIC SMALL LETTER YI
+ { 0x0458, BIDI_L }, // CYRILLIC SMALL LETTER JE
+ { 0x0459, BIDI_L }, // CYRILLIC SMALL LETTER LJE
+ { 0x045A, BIDI_L }, // CYRILLIC SMALL LETTER NJE
+ { 0x045B, BIDI_L }, // CYRILLIC SMALL LETTER TSHE
+ { 0x045C, BIDI_L }, // CYRILLIC SMALL LETTER KJE
+ { 0x045D, BIDI_L }, // CYRILLIC SMALL LETTER I WITH GRAVE
+ { 0x045E, BIDI_L }, // CYRILLIC SMALL LETTER SHORT U
+ { 0x045F, BIDI_L }, // CYRILLIC SMALL LETTER DZHE
+ { 0x0460, BIDI_L }, // CYRILLIC CAPITAL LETTER OMEGA
+ { 0x0461, BIDI_L }, // CYRILLIC SMALL LETTER OMEGA
+ { 0x0462, BIDI_L }, // CYRILLIC CAPITAL LETTER YAT
+ { 0x0463, BIDI_L }, // CYRILLIC SMALL LETTER YAT
+ { 0x0464, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTIFIED E
+ { 0x0465, BIDI_L }, // CYRILLIC SMALL LETTER IOTIFIED E
+ { 0x0466, BIDI_L }, // CYRILLIC CAPITAL LETTER LITTLE YUS
+ { 0x0467, BIDI_L }, // CYRILLIC SMALL LETTER LITTLE YUS
+ { 0x0468, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+ { 0x0469, BIDI_L }, // CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+ { 0x046A, BIDI_L }, // CYRILLIC CAPITAL LETTER BIG YUS
+ { 0x046B, BIDI_L }, // CYRILLIC SMALL LETTER BIG YUS
+ { 0x046C, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+ { 0x046D, BIDI_L }, // CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+ { 0x046E, BIDI_L }, // CYRILLIC CAPITAL LETTER KSI
+ { 0x046F, BIDI_L }, // CYRILLIC SMALL LETTER KSI
+ { 0x0470, BIDI_L }, // CYRILLIC CAPITAL LETTER PSI
+ { 0x0471, BIDI_L }, // CYRILLIC SMALL LETTER PSI
+ { 0x0472, BIDI_L }, // CYRILLIC CAPITAL LETTER FITA
+ { 0x0473, BIDI_L }, // CYRILLIC SMALL LETTER FITA
+ { 0x0474, BIDI_L }, // CYRILLIC CAPITAL LETTER IZHITSA
+ { 0x0475, BIDI_L }, // CYRILLIC SMALL LETTER IZHITSA
+ { 0x0476, BIDI_L }, // CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ { 0x0477, BIDI_L }, // CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+ { 0x0478, BIDI_L }, // CYRILLIC CAPITAL LETTER UK
+ { 0x0479, BIDI_L }, // CYRILLIC SMALL LETTER UK
+ { 0x047A, BIDI_L }, // CYRILLIC CAPITAL LETTER ROUND OMEGA
+ { 0x047B, BIDI_L }, // CYRILLIC SMALL LETTER ROUND OMEGA
+ { 0x047C, BIDI_L }, // CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+ { 0x047D, BIDI_L }, // CYRILLIC SMALL LETTER OMEGA WITH TITLO
+ { 0x047E, BIDI_L }, // CYRILLIC CAPITAL LETTER OT
+ { 0x047F, BIDI_L }, // CYRILLIC SMALL LETTER OT
+ { 0x0480, BIDI_L }, // CYRILLIC CAPITAL LETTER KOPPA
+ { 0x0481, BIDI_L }, // CYRILLIC SMALL LETTER KOPPA
+ { 0x0482, BIDI_L }, // CYRILLIC THOUSANDS SIGN
+ { 0x0483, BIDI_NSM }, // COMBINING CYRILLIC TITLO
+ { 0x0484, BIDI_NSM }, // COMBINING CYRILLIC PALATALIZATION
+ { 0x0485, BIDI_NSM }, // COMBINING CYRILLIC DASIA PNEUMATA
+ { 0x0486, BIDI_NSM }, // COMBINING CYRILLIC PSILI PNEUMATA
+ { 0x0487, BIDI_NSM }, // COMBINING CYRILLIC POKRYTIE
+ { 0x0488, BIDI_NSM }, // COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
+ { 0x0489, BIDI_NSM }, // COMBINING CYRILLIC MILLIONS SIGN
+ { 0x048A, BIDI_L }, // CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+ { 0x048B, BIDI_L }, // CYRILLIC SMALL LETTER SHORT I WITH TAIL
+ { 0x048C, BIDI_L }, // CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+ { 0x048D, BIDI_L }, // CYRILLIC SMALL LETTER SEMISOFT SIGN
+ { 0x048E, BIDI_L }, // CYRILLIC CAPITAL LETTER ER WITH TICK
+ { 0x048F, BIDI_L }, // CYRILLIC SMALL LETTER ER WITH TICK
+ { 0x0490, BIDI_L }, // CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ { 0x0491, BIDI_L }, // CYRILLIC SMALL LETTER GHE WITH UPTURN
+ { 0x0492, BIDI_L }, // CYRILLIC CAPITAL LETTER GHE WITH STROKE
+ { 0x0493, BIDI_L }, // CYRILLIC SMALL LETTER GHE WITH STROKE
+ { 0x0494, BIDI_L }, // CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+ { 0x0495, BIDI_L }, // CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+ { 0x0496, BIDI_L }, // CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+ { 0x0497, BIDI_L }, // CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+ { 0x0498, BIDI_L }, // CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+ { 0x0499, BIDI_L }, // CYRILLIC SMALL LETTER ZE WITH DESCENDER
+ { 0x049A, BIDI_L }, // CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+ { 0x049B, BIDI_L }, // CYRILLIC SMALL LETTER KA WITH DESCENDER
+ { 0x049C, BIDI_L }, // CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+ { 0x049D, BIDI_L }, // CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+ { 0x049E, BIDI_L }, // CYRILLIC CAPITAL LETTER KA WITH STROKE
+ { 0x049F, BIDI_L }, // CYRILLIC SMALL LETTER KA WITH STROKE
+ { 0x04A0, BIDI_L }, // CYRILLIC CAPITAL LETTER BASHKIR KA
+ { 0x04A1, BIDI_L }, // CYRILLIC SMALL LETTER BASHKIR KA
+ { 0x04A2, BIDI_L }, // CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+ { 0x04A3, BIDI_L }, // CYRILLIC SMALL LETTER EN WITH DESCENDER
+ { 0x04A4, BIDI_L }, // CYRILLIC CAPITAL LIGATURE EN GHE
+ { 0x04A5, BIDI_L }, // CYRILLIC SMALL LIGATURE EN GHE
+ { 0x04A6, BIDI_L }, // CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+ { 0x04A7, BIDI_L }, // CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+ { 0x04A8, BIDI_L }, // CYRILLIC CAPITAL LETTER ABKHASIAN HA
+ { 0x04A9, BIDI_L }, // CYRILLIC SMALL LETTER ABKHASIAN HA
+ { 0x04AA, BIDI_L }, // CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+ { 0x04AB, BIDI_L }, // CYRILLIC SMALL LETTER ES WITH DESCENDER
+ { 0x04AC, BIDI_L }, // CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+ { 0x04AD, BIDI_L }, // CYRILLIC SMALL LETTER TE WITH DESCENDER
+ { 0x04AE, BIDI_L }, // CYRILLIC CAPITAL LETTER STRAIGHT U
+ { 0x04AF, BIDI_L }, // CYRILLIC SMALL LETTER STRAIGHT U
+ { 0x04B0, BIDI_L }, // CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+ { 0x04B1, BIDI_L }, // CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+ { 0x04B2, BIDI_L }, // CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+ { 0x04B3, BIDI_L }, // CYRILLIC SMALL LETTER HA WITH DESCENDER
+ { 0x04B4, BIDI_L }, // CYRILLIC CAPITAL LIGATURE TE TSE
+ { 0x04B5, BIDI_L }, // CYRILLIC SMALL LIGATURE TE TSE
+ { 0x04B6, BIDI_L }, // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+ { 0x04B7, BIDI_L }, // CYRILLIC SMALL LETTER CHE WITH DESCENDER
+ { 0x04B8, BIDI_L }, // CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+ { 0x04B9, BIDI_L }, // CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+ { 0x04BA, BIDI_L }, // CYRILLIC CAPITAL LETTER SHHA
+ { 0x04BB, BIDI_L }, // CYRILLIC SMALL LETTER SHHA
+ { 0x04BC, BIDI_L }, // CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+ { 0x04BD, BIDI_L }, // CYRILLIC SMALL LETTER ABKHASIAN CHE
+ { 0x04BE, BIDI_L }, // CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+ { 0x04BF, BIDI_L }, // CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+ { 0x04C0, BIDI_L }, // CYRILLIC LETTER PALOCHKA
+ { 0x04C1, BIDI_L }, // CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+ { 0x04C2, BIDI_L }, // CYRILLIC SMALL LETTER ZHE WITH BREVE
+ { 0x04C3, BIDI_L }, // CYRILLIC CAPITAL LETTER KA WITH HOOK
+ { 0x04C4, BIDI_L }, // CYRILLIC SMALL LETTER KA WITH HOOK
+ { 0x04C5, BIDI_L }, // CYRILLIC CAPITAL LETTER EL WITH TAIL
+ { 0x04C6, BIDI_L }, // CYRILLIC SMALL LETTER EL WITH TAIL
+ { 0x04C7, BIDI_L }, // CYRILLIC CAPITAL LETTER EN WITH HOOK
+ { 0x04C8, BIDI_L }, // CYRILLIC SMALL LETTER EN WITH HOOK
+ { 0x04C9, BIDI_L }, // CYRILLIC CAPITAL LETTER EN WITH TAIL
+ { 0x04CA, BIDI_L }, // CYRILLIC SMALL LETTER EN WITH TAIL
+ { 0x04CB, BIDI_L }, // CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+ { 0x04CC, BIDI_L }, // CYRILLIC SMALL LETTER KHAKASSIAN CHE
+ { 0x04CD, BIDI_L }, // CYRILLIC CAPITAL LETTER EM WITH TAIL
+ { 0x04CE, BIDI_L }, // CYRILLIC SMALL LETTER EM WITH TAIL
+ { 0x04CF, BIDI_L }, // CYRILLIC SMALL LETTER PALOCHKA
+ { 0x04D0, BIDI_L }, // CYRILLIC CAPITAL LETTER A WITH BREVE
+ { 0x04D1, BIDI_L }, // CYRILLIC SMALL LETTER A WITH BREVE
+ { 0x04D2, BIDI_L }, // CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+ { 0x04D3, BIDI_L }, // CYRILLIC SMALL LETTER A WITH DIAERESIS
+ { 0x04D4, BIDI_L }, // CYRILLIC CAPITAL LIGATURE A IE
+ { 0x04D5, BIDI_L }, // CYRILLIC SMALL LIGATURE A IE
+ { 0x04D6, BIDI_L }, // CYRILLIC CAPITAL LETTER IE WITH BREVE
+ { 0x04D7, BIDI_L }, // CYRILLIC SMALL LETTER IE WITH BREVE
+ { 0x04D8, BIDI_L }, // CYRILLIC CAPITAL LETTER SCHWA
+ { 0x04D9, BIDI_L }, // CYRILLIC SMALL LETTER SCHWA
+ { 0x04DA, BIDI_L }, // CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+ { 0x04DB, BIDI_L }, // CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+ { 0x04DC, BIDI_L }, // CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+ { 0x04DD, BIDI_L }, // CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+ { 0x04DE, BIDI_L }, // CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+ { 0x04DF, BIDI_L }, // CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+ { 0x04E0, BIDI_L }, // CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+ { 0x04E1, BIDI_L }, // CYRILLIC SMALL LETTER ABKHASIAN DZE
+ { 0x04E2, BIDI_L }, // CYRILLIC CAPITAL LETTER I WITH MACRON
+ { 0x04E3, BIDI_L }, // CYRILLIC SMALL LETTER I WITH MACRON
+ { 0x04E4, BIDI_L }, // CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+ { 0x04E5, BIDI_L }, // CYRILLIC SMALL LETTER I WITH DIAERESIS
+ { 0x04E6, BIDI_L }, // CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+ { 0x04E7, BIDI_L }, // CYRILLIC SMALL LETTER O WITH DIAERESIS
+ { 0x04E8, BIDI_L }, // CYRILLIC CAPITAL LETTER BARRED O
+ { 0x04E9, BIDI_L }, // CYRILLIC SMALL LETTER BARRED O
+ { 0x04EA, BIDI_L }, // CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+ { 0x04EB, BIDI_L }, // CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+ { 0x04EC, BIDI_L }, // CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+ { 0x04ED, BIDI_L }, // CYRILLIC SMALL LETTER E WITH DIAERESIS
+ { 0x04EE, BIDI_L }, // CYRILLIC CAPITAL LETTER U WITH MACRON
+ { 0x04EF, BIDI_L }, // CYRILLIC SMALL LETTER U WITH MACRON
+ { 0x04F0, BIDI_L }, // CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+ { 0x04F1, BIDI_L }, // CYRILLIC SMALL LETTER U WITH DIAERESIS
+ { 0x04F2, BIDI_L }, // CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+ { 0x04F3, BIDI_L }, // CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+ { 0x04F4, BIDI_L }, // CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+ { 0x04F5, BIDI_L }, // CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+ { 0x04F6, BIDI_L }, // CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+ { 0x04F7, BIDI_L }, // CYRILLIC SMALL LETTER GHE WITH DESCENDER
+ { 0x04F8, BIDI_L }, // CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+ { 0x04F9, BIDI_L }, // CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+ { 0x04FA, BIDI_L }, // CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+ { 0x04FB, BIDI_L }, // CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+ { 0x04FC, BIDI_L }, // CYRILLIC CAPITAL LETTER HA WITH HOOK
+ { 0x04FD, BIDI_L }, // CYRILLIC SMALL LETTER HA WITH HOOK
+ { 0x04FE, BIDI_L }, // CYRILLIC CAPITAL LETTER HA WITH STROKE
+ { 0x04FF, BIDI_L }, // CYRILLIC SMALL LETTER HA WITH STROKE
+ { 0x0500, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI DE
+ { 0x0501, BIDI_L }, // CYRILLIC SMALL LETTER KOMI DE
+ { 0x0502, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI DJE
+ { 0x0503, BIDI_L }, // CYRILLIC SMALL LETTER KOMI DJE
+ { 0x0504, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI ZJE
+ { 0x0505, BIDI_L }, // CYRILLIC SMALL LETTER KOMI ZJE
+ { 0x0506, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI DZJE
+ { 0x0507, BIDI_L }, // CYRILLIC SMALL LETTER KOMI DZJE
+ { 0x0508, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI LJE
+ { 0x0509, BIDI_L }, // CYRILLIC SMALL LETTER KOMI LJE
+ { 0x050A, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI NJE
+ { 0x050B, BIDI_L }, // CYRILLIC SMALL LETTER KOMI NJE
+ { 0x050C, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI SJE
+ { 0x050D, BIDI_L }, // CYRILLIC SMALL LETTER KOMI SJE
+ { 0x050E, BIDI_L }, // CYRILLIC CAPITAL LETTER KOMI TJE
+ { 0x050F, BIDI_L }, // CYRILLIC SMALL LETTER KOMI TJE
+ { 0x0510, BIDI_L }, // CYRILLIC CAPITAL LETTER REVERSED ZE
+ { 0x0511, BIDI_L }, // CYRILLIC SMALL LETTER REVERSED ZE
+ { 0x0512, BIDI_L }, // CYRILLIC CAPITAL LETTER EL WITH HOOK
+ { 0x0513, BIDI_L }, // CYRILLIC SMALL LETTER EL WITH HOOK
+ { 0x0514, BIDI_L }, // CYRILLIC CAPITAL LETTER LHA
+ { 0x0515, BIDI_L }, // CYRILLIC SMALL LETTER LHA
+ { 0x0516, BIDI_L }, // CYRILLIC CAPITAL LETTER RHA
+ { 0x0517, BIDI_L }, // CYRILLIC SMALL LETTER RHA
+ { 0x0518, BIDI_L }, // CYRILLIC CAPITAL LETTER YAE
+ { 0x0519, BIDI_L }, // CYRILLIC SMALL LETTER YAE
+ { 0x051A, BIDI_L }, // CYRILLIC CAPITAL LETTER QA
+ { 0x051B, BIDI_L }, // CYRILLIC SMALL LETTER QA
+ { 0x051C, BIDI_L }, // CYRILLIC CAPITAL LETTER WE
+ { 0x051D, BIDI_L }, // CYRILLIC SMALL LETTER WE
+ { 0x051E, BIDI_L }, // CYRILLIC CAPITAL LETTER ALEUT KA
+ { 0x051F, BIDI_L }, // CYRILLIC SMALL LETTER ALEUT KA
+ { 0x0520, BIDI_L }, // CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+ { 0x0521, BIDI_L }, // CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+ { 0x0522, BIDI_L }, // CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+ { 0x0523, BIDI_L }, // CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+ { 0x0524, BIDI_L }, // CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+ { 0x0525, BIDI_L }, // CYRILLIC SMALL LETTER PE WITH DESCENDER
+ { 0x0526, BIDI_L }, // CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+ { 0x0527, BIDI_L }, // CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+ { 0x0528, BIDI_L }, // CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+ { 0x0529, BIDI_L }, // CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+ { 0x052A, BIDI_L }, // CYRILLIC CAPITAL LETTER DZZHE
+ { 0x052B, BIDI_L }, // CYRILLIC SMALL LETTER DZZHE
+ { 0x052C, BIDI_L }, // CYRILLIC CAPITAL LETTER DCHE
+ { 0x052D, BIDI_L }, // CYRILLIC SMALL LETTER DCHE
+ { 0x052E, BIDI_L }, // CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+ { 0x052F, BIDI_L }, // CYRILLIC SMALL LETTER EL WITH DESCENDER
+ { 0x0531, BIDI_L }, // ARMENIAN CAPITAL LETTER AYB
+ { 0x0532, BIDI_L }, // ARMENIAN CAPITAL LETTER BEN
+ { 0x0533, BIDI_L }, // ARMENIAN CAPITAL LETTER GIM
+ { 0x0534, BIDI_L }, // ARMENIAN CAPITAL LETTER DA
+ { 0x0535, BIDI_L }, // ARMENIAN CAPITAL LETTER ECH
+ { 0x0536, BIDI_L }, // ARMENIAN CAPITAL LETTER ZA
+ { 0x0537, BIDI_L }, // ARMENIAN CAPITAL LETTER EH
+ { 0x0538, BIDI_L }, // ARMENIAN CAPITAL LETTER ET
+ { 0x0539, BIDI_L }, // ARMENIAN CAPITAL LETTER TO
+ { 0x053A, BIDI_L }, // ARMENIAN CAPITAL LETTER ZHE
+ { 0x053B, BIDI_L }, // ARMENIAN CAPITAL LETTER INI
+ { 0x053C, BIDI_L }, // ARMENIAN CAPITAL LETTER LIWN
+ { 0x053D, BIDI_L }, // ARMENIAN CAPITAL LETTER XEH
+ { 0x053E, BIDI_L }, // ARMENIAN CAPITAL LETTER CA
+ { 0x053F, BIDI_L }, // ARMENIAN CAPITAL LETTER KEN
+ { 0x0540, BIDI_L }, // ARMENIAN CAPITAL LETTER HO
+ { 0x0541, BIDI_L }, // ARMENIAN CAPITAL LETTER JA
+ { 0x0542, BIDI_L }, // ARMENIAN CAPITAL LETTER GHAD
+ { 0x0543, BIDI_L }, // ARMENIAN CAPITAL LETTER CHEH
+ { 0x0544, BIDI_L }, // ARMENIAN CAPITAL LETTER MEN
+ { 0x0545, BIDI_L }, // ARMENIAN CAPITAL LETTER YI
+ { 0x0546, BIDI_L }, // ARMENIAN CAPITAL LETTER NOW
+ { 0x0547, BIDI_L }, // ARMENIAN CAPITAL LETTER SHA
+ { 0x0548, BIDI_L }, // ARMENIAN CAPITAL LETTER VO
+ { 0x0549, BIDI_L }, // ARMENIAN CAPITAL LETTER CHA
+ { 0x054A, BIDI_L }, // ARMENIAN CAPITAL LETTER PEH
+ { 0x054B, BIDI_L }, // ARMENIAN CAPITAL LETTER JHEH
+ { 0x054C, BIDI_L }, // ARMENIAN CAPITAL LETTER RA
+ { 0x054D, BIDI_L }, // ARMENIAN CAPITAL LETTER SEH
+ { 0x054E, BIDI_L }, // ARMENIAN CAPITAL LETTER VEW
+ { 0x054F, BIDI_L }, // ARMENIAN CAPITAL LETTER TIWN
+ { 0x0550, BIDI_L }, // ARMENIAN CAPITAL LETTER REH
+ { 0x0551, BIDI_L }, // ARMENIAN CAPITAL LETTER CO
+ { 0x0552, BIDI_L }, // ARMENIAN CAPITAL LETTER YIWN
+ { 0x0553, BIDI_L }, // ARMENIAN CAPITAL LETTER PIWR
+ { 0x0554, BIDI_L }, // ARMENIAN CAPITAL LETTER KEH
+ { 0x0555, BIDI_L }, // ARMENIAN CAPITAL LETTER OH
+ { 0x0556, BIDI_L }, // ARMENIAN CAPITAL LETTER FEH
+ { 0x0559, BIDI_L }, // ARMENIAN MODIFIER LETTER LEFT HALF RING
+ { 0x055A, BIDI_L }, // ARMENIAN APOSTROPHE
+ { 0x055B, BIDI_L }, // ARMENIAN EMPHASIS MARK
+ { 0x055C, BIDI_L }, // ARMENIAN EXCLAMATION MARK
+ { 0x055D, BIDI_L }, // ARMENIAN COMMA
+ { 0x055E, BIDI_L }, // ARMENIAN QUESTION MARK
+ { 0x055F, BIDI_L }, // ARMENIAN ABBREVIATION MARK
+ { 0x0561, BIDI_L }, // ARMENIAN SMALL LETTER AYB
+ { 0x0562, BIDI_L }, // ARMENIAN SMALL LETTER BEN
+ { 0x0563, BIDI_L }, // ARMENIAN SMALL LETTER GIM
+ { 0x0564, BIDI_L }, // ARMENIAN SMALL LETTER DA
+ { 0x0565, BIDI_L }, // ARMENIAN SMALL LETTER ECH
+ { 0x0566, BIDI_L }, // ARMENIAN SMALL LETTER ZA
+ { 0x0567, BIDI_L }, // ARMENIAN SMALL LETTER EH
+ { 0x0568, BIDI_L }, // ARMENIAN SMALL LETTER ET
+ { 0x0569, BIDI_L }, // ARMENIAN SMALL LETTER TO
+ { 0x056A, BIDI_L }, // ARMENIAN SMALL LETTER ZHE
+ { 0x056B, BIDI_L }, // ARMENIAN SMALL LETTER INI
+ { 0x056C, BIDI_L }, // ARMENIAN SMALL LETTER LIWN
+ { 0x056D, BIDI_L }, // ARMENIAN SMALL LETTER XEH
+ { 0x056E, BIDI_L }, // ARMENIAN SMALL LETTER CA
+ { 0x056F, BIDI_L }, // ARMENIAN SMALL LETTER KEN
+ { 0x0570, BIDI_L }, // ARMENIAN SMALL LETTER HO
+ { 0x0571, BIDI_L }, // ARMENIAN SMALL LETTER JA
+ { 0x0572, BIDI_L }, // ARMENIAN SMALL LETTER GHAD
+ { 0x0573, BIDI_L }, // ARMENIAN SMALL LETTER CHEH
+ { 0x0574, BIDI_L }, // ARMENIAN SMALL LETTER MEN
+ { 0x0575, BIDI_L }, // ARMENIAN SMALL LETTER YI
+ { 0x0576, BIDI_L }, // ARMENIAN SMALL LETTER NOW
+ { 0x0577, BIDI_L }, // ARMENIAN SMALL LETTER SHA
+ { 0x0578, BIDI_L }, // ARMENIAN SMALL LETTER VO
+ { 0x0579, BIDI_L }, // ARMENIAN SMALL LETTER CHA
+ { 0x057A, BIDI_L }, // ARMENIAN SMALL LETTER PEH
+ { 0x057B, BIDI_L }, // ARMENIAN SMALL LETTER JHEH
+ { 0x057C, BIDI_L }, // ARMENIAN SMALL LETTER RA
+ { 0x057D, BIDI_L }, // ARMENIAN SMALL LETTER SEH
+ { 0x057E, BIDI_L }, // ARMENIAN SMALL LETTER VEW
+ { 0x057F, BIDI_L }, // ARMENIAN SMALL LETTER TIWN
+ { 0x0580, BIDI_L }, // ARMENIAN SMALL LETTER REH
+ { 0x0581, BIDI_L }, // ARMENIAN SMALL LETTER CO
+ { 0x0582, BIDI_L }, // ARMENIAN SMALL LETTER YIWN
+ { 0x0583, BIDI_L }, // ARMENIAN SMALL LETTER PIWR
+ { 0x0584, BIDI_L }, // ARMENIAN SMALL LETTER KEH
+ { 0x0585, BIDI_L }, // ARMENIAN SMALL LETTER OH
+ { 0x0586, BIDI_L }, // ARMENIAN SMALL LETTER FEH
+ { 0x0587, BIDI_L }, // ARMENIAN SMALL LIGATURE ECH YIWN
+ { 0x0589, BIDI_L }, // ARMENIAN FULL STOP
+ { 0x058A, BIDI_ON }, // ARMENIAN HYPHEN
+ { 0x058D, BIDI_ON }, // RIGHT-FACING ARMENIAN ETERNITY SIGN
+ { 0x058E, BIDI_ON }, // LEFT-FACING ARMENIAN ETERNITY SIGN
+ { 0x058F, BIDI_ET }, // ARMENIAN DRAM SIGN
+ { 0x0591, BIDI_NSM }, // HEBREW ACCENT ETNAHTA
+ { 0x0592, BIDI_NSM }, // HEBREW ACCENT SEGOL
+ { 0x0593, BIDI_NSM }, // HEBREW ACCENT SHALSHELET
+ { 0x0594, BIDI_NSM }, // HEBREW ACCENT ZAQEF QATAN
+ { 0x0595, BIDI_NSM }, // HEBREW ACCENT ZAQEF GADOL
+ { 0x0596, BIDI_NSM }, // HEBREW ACCENT TIPEHA
+ { 0x0597, BIDI_NSM }, // HEBREW ACCENT REVIA
+ { 0x0598, BIDI_NSM }, // HEBREW ACCENT ZARQA
+ { 0x0599, BIDI_NSM }, // HEBREW ACCENT PASHTA
+ { 0x059A, BIDI_NSM }, // HEBREW ACCENT YETIV
+ { 0x059B, BIDI_NSM }, // HEBREW ACCENT TEVIR
+ { 0x059C, BIDI_NSM }, // HEBREW ACCENT GERESH
+ { 0x059D, BIDI_NSM }, // HEBREW ACCENT GERESH MUQDAM
+ { 0x059E, BIDI_NSM }, // HEBREW ACCENT GERSHAYIM
+ { 0x059F, BIDI_NSM }, // HEBREW ACCENT QARNEY PARA
+ { 0x05A0, BIDI_NSM }, // HEBREW ACCENT TELISHA GEDOLA
+ { 0x05A1, BIDI_NSM }, // HEBREW ACCENT PAZER
+ { 0x05A2, BIDI_NSM }, // HEBREW ACCENT ATNAH HAFUKH
+ { 0x05A3, BIDI_NSM }, // HEBREW ACCENT MUNAH
+ { 0x05A4, BIDI_NSM }, // HEBREW ACCENT MAHAPAKH
+ { 0x05A5, BIDI_NSM }, // HEBREW ACCENT MERKHA
+ { 0x05A6, BIDI_NSM }, // HEBREW ACCENT MERKHA KEFULA
+ { 0x05A7, BIDI_NSM }, // HEBREW ACCENT DARGA
+ { 0x05A8, BIDI_NSM }, // HEBREW ACCENT QADMA
+ { 0x05A9, BIDI_NSM }, // HEBREW ACCENT TELISHA QETANA
+ { 0x05AA, BIDI_NSM }, // HEBREW ACCENT YERAH BEN YOMO
+ { 0x05AB, BIDI_NSM }, // HEBREW ACCENT OLE
+ { 0x05AC, BIDI_NSM }, // HEBREW ACCENT ILUY
+ { 0x05AD, BIDI_NSM }, // HEBREW ACCENT DEHI
+ { 0x05AE, BIDI_NSM }, // HEBREW ACCENT ZINOR
+ { 0x05AF, BIDI_NSM }, // HEBREW MARK MASORA CIRCLE
+ { 0x05B0, BIDI_NSM }, // HEBREW POINT SHEVA
+ { 0x05B1, BIDI_NSM }, // HEBREW POINT HATAF SEGOL
+ { 0x05B2, BIDI_NSM }, // HEBREW POINT HATAF PATAH
+ { 0x05B3, BIDI_NSM }, // HEBREW POINT HATAF QAMATS
+ { 0x05B4, BIDI_NSM }, // HEBREW POINT HIRIQ
+ { 0x05B5, BIDI_NSM }, // HEBREW POINT TSERE
+ { 0x05B6, BIDI_NSM }, // HEBREW POINT SEGOL
+ { 0x05B7, BIDI_NSM }, // HEBREW POINT PATAH
+ { 0x05B8, BIDI_NSM }, // HEBREW POINT QAMATS
+ { 0x05B9, BIDI_NSM }, // HEBREW POINT HOLAM
+ { 0x05BA, BIDI_NSM }, // HEBREW POINT HOLAM HASER FOR VAV
+ { 0x05BB, BIDI_NSM }, // HEBREW POINT QUBUTS
+ { 0x05BC, BIDI_NSM }, // HEBREW POINT DAGESH OR MAPIQ
+ { 0x05BD, BIDI_NSM }, // HEBREW POINT METEG
+ { 0x05BE, BIDI_R }, // HEBREW PUNCTUATION MAQAF
+ { 0x05BF, BIDI_NSM }, // HEBREW POINT RAFE
+ { 0x05C0, BIDI_R }, // HEBREW PUNCTUATION PASEQ
+ { 0x05C1, BIDI_NSM }, // HEBREW POINT SHIN DOT
+ { 0x05C2, BIDI_NSM }, // HEBREW POINT SIN DOT
+ { 0x05C3, BIDI_R }, // HEBREW PUNCTUATION SOF PASUQ
+ { 0x05C4, BIDI_NSM }, // HEBREW MARK UPPER DOT
+ { 0x05C5, BIDI_NSM }, // HEBREW MARK LOWER DOT
+ { 0x05C6, BIDI_R }, // HEBREW PUNCTUATION NUN HAFUKHA
+ { 0x05C7, BIDI_NSM }, // HEBREW POINT QAMATS QATAN
+ { 0x05D0, BIDI_R }, // HEBREW LETTER ALEF
+ { 0x05D1, BIDI_R }, // HEBREW LETTER BET
+ { 0x05D2, BIDI_R }, // HEBREW LETTER GIMEL
+ { 0x05D3, BIDI_R }, // HEBREW LETTER DALET
+ { 0x05D4, BIDI_R }, // HEBREW LETTER HE
+ { 0x05D5, BIDI_R }, // HEBREW LETTER VAV
+ { 0x05D6, BIDI_R }, // HEBREW LETTER ZAYIN
+ { 0x05D7, BIDI_R }, // HEBREW LETTER HET
+ { 0x05D8, BIDI_R }, // HEBREW LETTER TET
+ { 0x05D9, BIDI_R }, // HEBREW LETTER YOD
+ { 0x05DA, BIDI_R }, // HEBREW LETTER FINAL KAF
+ { 0x05DB, BIDI_R }, // HEBREW LETTER KAF
+ { 0x05DC, BIDI_R }, // HEBREW LETTER LAMED
+ { 0x05DD, BIDI_R }, // HEBREW LETTER FINAL MEM
+ { 0x05DE, BIDI_R }, // HEBREW LETTER MEM
+ { 0x05DF, BIDI_R }, // HEBREW LETTER FINAL NUN
+ { 0x05E0, BIDI_R }, // HEBREW LETTER NUN
+ { 0x05E1, BIDI_R }, // HEBREW LETTER SAMEKH
+ { 0x05E2, BIDI_R }, // HEBREW LETTER AYIN
+ { 0x05E3, BIDI_R }, // HEBREW LETTER FINAL PE
+ { 0x05E4, BIDI_R }, // HEBREW LETTER PE
+ { 0x05E5, BIDI_R }, // HEBREW LETTER FINAL TSADI
+ { 0x05E6, BIDI_R }, // HEBREW LETTER TSADI
+ { 0x05E7, BIDI_R }, // HEBREW LETTER QOF
+ { 0x05E8, BIDI_R }, // HEBREW LETTER RESH
+ { 0x05E9, BIDI_R }, // HEBREW LETTER SHIN
+ { 0x05EA, BIDI_R }, // HEBREW LETTER TAV
+ { 0x05F0, BIDI_R }, // HEBREW LIGATURE YIDDISH DOUBLE VAV
+ { 0x05F1, BIDI_R }, // HEBREW LIGATURE YIDDISH VAV YOD
+ { 0x05F2, BIDI_R }, // HEBREW LIGATURE YIDDISH DOUBLE YOD
+ { 0x05F3, BIDI_R }, // HEBREW PUNCTUATION GERESH
+ { 0x05F4, BIDI_R }, // HEBREW PUNCTUATION GERSHAYIM
+ { 0x0600, BIDI_AN }, // ARABIC NUMBER SIGN
+ { 0x0601, BIDI_AN }, // ARABIC SIGN SANAH
+ { 0x0602, BIDI_AN }, // ARABIC FOOTNOTE MARKER
+ { 0x0603, BIDI_AN }, // ARABIC SIGN SAFHA
+ { 0x0604, BIDI_AN }, // ARABIC SIGN SAMVAT
+ { 0x0605, BIDI_AN }, // ARABIC NUMBER MARK ABOVE
+ { 0x0606, BIDI_ON }, // ARABIC-INDIC CUBE ROOT
+ { 0x0607, BIDI_ON }, // ARABIC-INDIC FOURTH ROOT
+ { 0x0608, BIDI_AL }, // ARABIC RAY
+ { 0x0609, BIDI_ET }, // ARABIC-INDIC PER MILLE SIGN
+ { 0x060A, BIDI_ET }, // ARABIC-INDIC PER TEN THOUSAND SIGN
+ { 0x060B, BIDI_AL }, // AFGHANI SIGN
+ { 0x060C, BIDI_CS }, // ARABIC COMMA
+ { 0x060D, BIDI_AL }, // ARABIC DATE SEPARATOR
+ { 0x060E, BIDI_ON }, // ARABIC POETIC VERSE SIGN
+ { 0x060F, BIDI_ON }, // ARABIC SIGN MISRA
+ { 0x0610, BIDI_NSM }, // ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
+ { 0x0611, BIDI_NSM }, // ARABIC SIGN ALAYHE ASSALLAM
+ { 0x0612, BIDI_NSM }, // ARABIC SIGN RAHMATULLAH ALAYHE
+ { 0x0613, BIDI_NSM }, // ARABIC SIGN RADI ALLAHOU ANHU
+ { 0x0614, BIDI_NSM }, // ARABIC SIGN TAKHALLUS
+ { 0x0615, BIDI_NSM }, // ARABIC SMALL HIGH TAH
+ { 0x0616, BIDI_NSM }, // ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH
+ { 0x0617, BIDI_NSM }, // ARABIC SMALL HIGH ZAIN
+ { 0x0618, BIDI_NSM }, // ARABIC SMALL FATHA
+ { 0x0619, BIDI_NSM }, // ARABIC SMALL DAMMA
+ { 0x061A, BIDI_NSM }, // ARABIC SMALL KASRA
+ { 0x061B, BIDI_AL }, // ARABIC SEMICOLON
+ { 0x061C, BIDI_AL }, // ARABIC LETTER MARK
+ { 0x061E, BIDI_AL }, // ARABIC TRIPLE DOT PUNCTUATION MARK
+ { 0x061F, BIDI_AL }, // ARABIC QUESTION MARK
+ { 0x0620, BIDI_AL }, // ARABIC LETTER KASHMIRI YEH
+ { 0x0621, BIDI_AL }, // ARABIC LETTER HAMZA
+ { 0x0622, BIDI_AL }, // ARABIC LETTER ALEF WITH MADDA ABOVE
+ { 0x0623, BIDI_AL }, // ARABIC LETTER ALEF WITH HAMZA ABOVE
+ { 0x0624, BIDI_AL }, // ARABIC LETTER WAW WITH HAMZA ABOVE
+ { 0x0625, BIDI_AL }, // ARABIC LETTER ALEF WITH HAMZA BELOW
+ { 0x0626, BIDI_AL }, // ARABIC LETTER YEH WITH HAMZA ABOVE
+ { 0x0627, BIDI_AL }, // ARABIC LETTER ALEF
+ { 0x0628, BIDI_AL }, // ARABIC LETTER BEH
+ { 0x0629, BIDI_AL }, // ARABIC LETTER TEH MARBUTA
+ { 0x062A, BIDI_AL }, // ARABIC LETTER TEH
+ { 0x062B, BIDI_AL }, // ARABIC LETTER THEH
+ { 0x062C, BIDI_AL }, // ARABIC LETTER JEEM
+ { 0x062D, BIDI_AL }, // ARABIC LETTER HAH
+ { 0x062E, BIDI_AL }, // ARABIC LETTER KHAH
+ { 0x062F, BIDI_AL }, // ARABIC LETTER DAL
+ { 0x0630, BIDI_AL }, // ARABIC LETTER THAL
+ { 0x0631, BIDI_AL }, // ARABIC LETTER REH
+ { 0x0632, BIDI_AL }, // ARABIC LETTER ZAIN
+ { 0x0633, BIDI_AL }, // ARABIC LETTER SEEN
+ { 0x0634, BIDI_AL }, // ARABIC LETTER SHEEN
+ { 0x0635, BIDI_AL }, // ARABIC LETTER SAD
+ { 0x0636, BIDI_AL }, // ARABIC LETTER DAD
+ { 0x0637, BIDI_AL }, // ARABIC LETTER TAH
+ { 0x0638, BIDI_AL }, // ARABIC LETTER ZAH
+ { 0x0639, BIDI_AL }, // ARABIC LETTER AIN
+ { 0x063A, BIDI_AL }, // ARABIC LETTER GHAIN
+ { 0x063B, BIDI_AL }, // ARABIC LETTER KEHEH WITH TWO DOTS ABOVE
+ { 0x063C, BIDI_AL }, // ARABIC LETTER KEHEH WITH THREE DOTS BELOW
+ { 0x063D, BIDI_AL }, // ARABIC LETTER FARSI YEH WITH INVERTED V
+ { 0x063E, BIDI_AL }, // ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE
+ { 0x063F, BIDI_AL }, // ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+ { 0x0640, BIDI_AL }, // ARABIC TATWEEL
+ { 0x0641, BIDI_AL }, // ARABIC LETTER FEH
+ { 0x0642, BIDI_AL }, // ARABIC LETTER QAF
+ { 0x0643, BIDI_AL }, // ARABIC LETTER KAF
+ { 0x0644, BIDI_AL }, // ARABIC LETTER LAM
+ { 0x0645, BIDI_AL }, // ARABIC LETTER MEEM
+ { 0x0646, BIDI_AL }, // ARABIC LETTER NOON
+ { 0x0647, BIDI_AL }, // ARABIC LETTER HEH
+ { 0x0648, BIDI_AL }, // ARABIC LETTER WAW
+ { 0x0649, BIDI_AL }, // ARABIC LETTER ALEF MAKSURA
+ { 0x064A, BIDI_AL }, // ARABIC LETTER YEH
+ { 0x064B, BIDI_NSM }, // ARABIC FATHATAN
+ { 0x064C, BIDI_NSM }, // ARABIC DAMMATAN
+ { 0x064D, BIDI_NSM }, // ARABIC KASRATAN
+ { 0x064E, BIDI_NSM }, // ARABIC FATHA
+ { 0x064F, BIDI_NSM }, // ARABIC DAMMA
+ { 0x0650, BIDI_NSM }, // ARABIC KASRA
+ { 0x0651, BIDI_NSM }, // ARABIC SHADDA
+ { 0x0652, BIDI_NSM }, // ARABIC SUKUN
+ { 0x0653, BIDI_NSM }, // ARABIC MADDAH ABOVE
+ { 0x0654, BIDI_NSM }, // ARABIC HAMZA ABOVE
+ { 0x0655, BIDI_NSM }, // ARABIC HAMZA BELOW
+ { 0x0656, BIDI_NSM }, // ARABIC SUBSCRIPT ALEF
+ { 0x0657, BIDI_NSM }, // ARABIC INVERTED DAMMA
+ { 0x0658, BIDI_NSM }, // ARABIC MARK NOON GHUNNA
+ { 0x0659, BIDI_NSM }, // ARABIC ZWARAKAY
+ { 0x065A, BIDI_NSM }, // ARABIC VOWEL SIGN SMALL V ABOVE
+ { 0x065B, BIDI_NSM }, // ARABIC VOWEL SIGN INVERTED SMALL V ABOVE
+ { 0x065C, BIDI_NSM }, // ARABIC VOWEL SIGN DOT BELOW
+ { 0x065D, BIDI_NSM }, // ARABIC REVERSED DAMMA
+ { 0x065E, BIDI_NSM }, // ARABIC FATHA WITH TWO DOTS
+ { 0x065F, BIDI_NSM }, // ARABIC WAVY HAMZA BELOW
+ { 0x0660, BIDI_AN }, // ARABIC-INDIC DIGIT ZERO
+ { 0x0661, BIDI_AN }, // ARABIC-INDIC DIGIT ONE
+ { 0x0662, BIDI_AN }, // ARABIC-INDIC DIGIT TWO
+ { 0x0663, BIDI_AN }, // ARABIC-INDIC DIGIT THREE
+ { 0x0664, BIDI_AN }, // ARABIC-INDIC DIGIT FOUR
+ { 0x0665, BIDI_AN }, // ARABIC-INDIC DIGIT FIVE
+ { 0x0666, BIDI_AN }, // ARABIC-INDIC DIGIT SIX
+ { 0x0667, BIDI_AN }, // ARABIC-INDIC DIGIT SEVEN
+ { 0x0668, BIDI_AN }, // ARABIC-INDIC DIGIT EIGHT
+ { 0x0669, BIDI_AN }, // ARABIC-INDIC DIGIT NINE
+ { 0x066A, BIDI_ET }, // ARABIC PERCENT SIGN
+ { 0x066B, BIDI_AN }, // ARABIC DECIMAL SEPARATOR
+ { 0x066C, BIDI_AN }, // ARABIC THOUSANDS SEPARATOR
+ { 0x066D, BIDI_AL }, // ARABIC FIVE POINTED STAR
+ { 0x066E, BIDI_AL }, // ARABIC LETTER DOTLESS BEH
+ { 0x066F, BIDI_AL }, // ARABIC LETTER DOTLESS QAF
+ { 0x0670, BIDI_NSM }, // ARABIC LETTER SUPERSCRIPT ALEF
+ { 0x0671, BIDI_AL }, // ARABIC LETTER ALEF WASLA
+ { 0x0672, BIDI_AL }, // ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+ { 0x0673, BIDI_AL }, // ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+ { 0x0674, BIDI_AL }, // ARABIC LETTER HIGH HAMZA
+ { 0x0675, BIDI_AL }, // ARABIC LETTER HIGH HAMZA ALEF
+ { 0x0676, BIDI_AL }, // ARABIC LETTER HIGH HAMZA WAW
+ { 0x0677, BIDI_AL }, // ARABIC LETTER U WITH HAMZA ABOVE
+ { 0x0678, BIDI_AL }, // ARABIC LETTER HIGH HAMZA YEH
+ { 0x0679, BIDI_AL }, // ARABIC LETTER TTEH
+ { 0x067A, BIDI_AL }, // ARABIC LETTER TTEHEH
+ { 0x067B, BIDI_AL }, // ARABIC LETTER BEEH
+ { 0x067C, BIDI_AL }, // ARABIC LETTER TEH WITH RING
+ { 0x067D, BIDI_AL }, // ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS
+ { 0x067E, BIDI_AL }, // ARABIC LETTER PEH
+ { 0x067F, BIDI_AL }, // ARABIC LETTER TEHEH
+ { 0x0680, BIDI_AL }, // ARABIC LETTER BEHEH
+ { 0x0681, BIDI_AL }, // ARABIC LETTER HAH WITH HAMZA ABOVE
+ { 0x0682, BIDI_AL }, // ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE
+ { 0x0683, BIDI_AL }, // ARABIC LETTER NYEH
+ { 0x0684, BIDI_AL }, // ARABIC LETTER DYEH
+ { 0x0685, BIDI_AL }, // ARABIC LETTER HAH WITH THREE DOTS ABOVE
+ { 0x0686, BIDI_AL }, // ARABIC LETTER TCHEH
+ { 0x0687, BIDI_AL }, // ARABIC LETTER TCHEHEH
+ { 0x0688, BIDI_AL }, // ARABIC LETTER DDAL
+ { 0x0689, BIDI_AL }, // ARABIC LETTER DAL WITH RING
+ { 0x068A, BIDI_AL }, // ARABIC LETTER DAL WITH DOT BELOW
+ { 0x068B, BIDI_AL }, // ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
+ { 0x068C, BIDI_AL }, // ARABIC LETTER DAHAL
+ { 0x068D, BIDI_AL }, // ARABIC LETTER DDAHAL
+ { 0x068E, BIDI_AL }, // ARABIC LETTER DUL
+ { 0x068F, BIDI_AL }, // ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS
+ { 0x0690, BIDI_AL }, // ARABIC LETTER DAL WITH FOUR DOTS ABOVE
+ { 0x0691, BIDI_AL }, // ARABIC LETTER RREH
+ { 0x0692, BIDI_AL }, // ARABIC LETTER REH WITH SMALL V
+ { 0x0693, BIDI_AL }, // ARABIC LETTER REH WITH RING
+ { 0x0694, BIDI_AL }, // ARABIC LETTER REH WITH DOT BELOW
+ { 0x0695, BIDI_AL }, // ARABIC LETTER REH WITH SMALL V BELOW
+ { 0x0696, BIDI_AL }, // ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE
+ { 0x0697, BIDI_AL }, // ARABIC LETTER REH WITH TWO DOTS ABOVE
+ { 0x0698, BIDI_AL }, // ARABIC LETTER JEH
+ { 0x0699, BIDI_AL }, // ARABIC LETTER REH WITH FOUR DOTS ABOVE
+ { 0x069A, BIDI_AL }, // ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
+ { 0x069B, BIDI_AL }, // ARABIC LETTER SEEN WITH THREE DOTS BELOW
+ { 0x069C, BIDI_AL }, // ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
+ { 0x069D, BIDI_AL }, // ARABIC LETTER SAD WITH TWO DOTS BELOW
+ { 0x069E, BIDI_AL }, // ARABIC LETTER SAD WITH THREE DOTS ABOVE
+ { 0x069F, BIDI_AL }, // ARABIC LETTER TAH WITH THREE DOTS ABOVE
+ { 0x06A0, BIDI_AL }, // ARABIC LETTER AIN WITH THREE DOTS ABOVE
+ { 0x06A1, BIDI_AL }, // ARABIC LETTER DOTLESS FEH
+ { 0x06A2, BIDI_AL }, // ARABIC LETTER FEH WITH DOT MOVED BELOW
+ { 0x06A3, BIDI_AL }, // ARABIC LETTER FEH WITH DOT BELOW
+ { 0x06A4, BIDI_AL }, // ARABIC LETTER VEH
+ { 0x06A5, BIDI_AL }, // ARABIC LETTER FEH WITH THREE DOTS BELOW
+ { 0x06A6, BIDI_AL }, // ARABIC LETTER PEHEH
+ { 0x06A7, BIDI_AL }, // ARABIC LETTER QAF WITH DOT ABOVE
+ { 0x06A8, BIDI_AL }, // ARABIC LETTER QAF WITH THREE DOTS ABOVE
+ { 0x06A9, BIDI_AL }, // ARABIC LETTER KEHEH
+ { 0x06AA, BIDI_AL }, // ARABIC LETTER SWASH KAF
+ { 0x06AB, BIDI_AL }, // ARABIC LETTER KAF WITH RING
+ { 0x06AC, BIDI_AL }, // ARABIC LETTER KAF WITH DOT ABOVE
+ { 0x06AD, BIDI_AL }, // ARABIC LETTER NG
+ { 0x06AE, BIDI_AL }, // ARABIC LETTER KAF WITH THREE DOTS BELOW
+ { 0x06AF, BIDI_AL }, // ARABIC LETTER GAF
+ { 0x06B0, BIDI_AL }, // ARABIC LETTER GAF WITH RING
+ { 0x06B1, BIDI_AL }, // ARABIC LETTER NGOEH
+ { 0x06B2, BIDI_AL }, // ARABIC LETTER GAF WITH TWO DOTS BELOW
+ { 0x06B3, BIDI_AL }, // ARABIC LETTER GUEH
+ { 0x06B4, BIDI_AL }, // ARABIC LETTER GAF WITH THREE DOTS ABOVE
+ { 0x06B5, BIDI_AL }, // ARABIC LETTER LAM WITH SMALL V
+ { 0x06B6, BIDI_AL }, // ARABIC LETTER LAM WITH DOT ABOVE
+ { 0x06B7, BIDI_AL }, // ARABIC LETTER LAM WITH THREE DOTS ABOVE
+ { 0x06B8, BIDI_AL }, // ARABIC LETTER LAM WITH THREE DOTS BELOW
+ { 0x06B9, BIDI_AL }, // ARABIC LETTER NOON WITH DOT BELOW
+ { 0x06BA, BIDI_AL }, // ARABIC LETTER NOON GHUNNA
+ { 0x06BB, BIDI_AL }, // ARABIC LETTER RNOON
+ { 0x06BC, BIDI_AL }, // ARABIC LETTER NOON WITH RING
+ { 0x06BD, BIDI_AL }, // ARABIC LETTER NOON WITH THREE DOTS ABOVE
+ { 0x06BE, BIDI_AL }, // ARABIC LETTER HEH DOACHASHMEE
+ { 0x06BF, BIDI_AL }, // ARABIC LETTER TCHEH WITH DOT ABOVE
+ { 0x06C0, BIDI_AL }, // ARABIC LETTER HEH WITH YEH ABOVE
+ { 0x06C1, BIDI_AL }, // ARABIC LETTER HEH GOAL
+ { 0x06C2, BIDI_AL }, // ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
+ { 0x06C3, BIDI_AL }, // ARABIC LETTER TEH MARBUTA GOAL
+ { 0x06C4, BIDI_AL }, // ARABIC LETTER WAW WITH RING
+ { 0x06C5, BIDI_AL }, // ARABIC LETTER KIRGHIZ OE
+ { 0x06C6, BIDI_AL }, // ARABIC LETTER OE
+ { 0x06C7, BIDI_AL }, // ARABIC LETTER U
+ { 0x06C8, BIDI_AL }, // ARABIC LETTER YU
+ { 0x06C9, BIDI_AL }, // ARABIC LETTER KIRGHIZ YU
+ { 0x06CA, BIDI_AL }, // ARABIC LETTER WAW WITH TWO DOTS ABOVE
+ { 0x06CB, BIDI_AL }, // ARABIC LETTER VE
+ { 0x06CC, BIDI_AL }, // ARABIC LETTER FARSI YEH
+ { 0x06CD, BIDI_AL }, // ARABIC LETTER YEH WITH TAIL
+ { 0x06CE, BIDI_AL }, // ARABIC LETTER YEH WITH SMALL V
+ { 0x06CF, BIDI_AL }, // ARABIC LETTER WAW WITH DOT ABOVE
+ { 0x06D0, BIDI_AL }, // ARABIC LETTER E
+ { 0x06D1, BIDI_AL }, // ARABIC LETTER YEH WITH THREE DOTS BELOW
+ { 0x06D2, BIDI_AL }, // ARABIC LETTER YEH BARREE
+ { 0x06D3, BIDI_AL }, // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+ { 0x06D4, BIDI_AL }, // ARABIC FULL STOP
+ { 0x06D5, BIDI_AL }, // ARABIC LETTER AE
+ { 0x06D6, BIDI_NSM }, // ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA
+ { 0x06D7, BIDI_NSM }, // ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA
+ { 0x06D8, BIDI_NSM }, // ARABIC SMALL HIGH MEEM INITIAL FORM
+ { 0x06D9, BIDI_NSM }, // ARABIC SMALL HIGH LAM ALEF
+ { 0x06DA, BIDI_NSM }, // ARABIC SMALL HIGH JEEM
+ { 0x06DB, BIDI_NSM }, // ARABIC SMALL HIGH THREE DOTS
+ { 0x06DC, BIDI_NSM }, // ARABIC SMALL HIGH SEEN
+ { 0x06DD, BIDI_AN }, // ARABIC END OF AYAH
+ { 0x06DE, BIDI_ON }, // ARABIC START OF RUB EL HIZB
+ { 0x06DF, BIDI_NSM }, // ARABIC SMALL HIGH ROUNDED ZERO
+ { 0x06E0, BIDI_NSM }, // ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO
+ { 0x06E1, BIDI_NSM }, // ARABIC SMALL HIGH DOTLESS HEAD OF KHAH
+ { 0x06E2, BIDI_NSM }, // ARABIC SMALL HIGH MEEM ISOLATED FORM
+ { 0x06E3, BIDI_NSM }, // ARABIC SMALL LOW SEEN
+ { 0x06E4, BIDI_NSM }, // ARABIC SMALL HIGH MADDA
+ { 0x06E5, BIDI_AL }, // ARABIC SMALL WAW
+ { 0x06E6, BIDI_AL }, // ARABIC SMALL YEH
+ { 0x06E7, BIDI_NSM }, // ARABIC SMALL HIGH YEH
+ { 0x06E8, BIDI_NSM }, // ARABIC SMALL HIGH NOON
+ { 0x06E9, BIDI_ON }, // ARABIC PLACE OF SAJDAH
+ { 0x06EA, BIDI_NSM }, // ARABIC EMPTY CENTRE LOW STOP
+ { 0x06EB, BIDI_NSM }, // ARABIC EMPTY CENTRE HIGH STOP
+ { 0x06EC, BIDI_NSM }, // ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+ { 0x06ED, BIDI_NSM }, // ARABIC SMALL LOW MEEM
+ { 0x06EE, BIDI_AL }, // ARABIC LETTER DAL WITH INVERTED V
+ { 0x06EF, BIDI_AL }, // ARABIC LETTER REH WITH INVERTED V
+ { 0x06F0, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT ZERO
+ { 0x06F1, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT ONE
+ { 0x06F2, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT TWO
+ { 0x06F3, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT THREE
+ { 0x06F4, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT FOUR
+ { 0x06F5, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT FIVE
+ { 0x06F6, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT SIX
+ { 0x06F7, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT SEVEN
+ { 0x06F8, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT EIGHT
+ { 0x06F9, BIDI_EN }, // EXTENDED ARABIC-INDIC DIGIT NINE
+ { 0x06FA, BIDI_AL }, // ARABIC LETTER SHEEN WITH DOT BELOW
+ { 0x06FB, BIDI_AL }, // ARABIC LETTER DAD WITH DOT BELOW
+ { 0x06FC, BIDI_AL }, // ARABIC LETTER GHAIN WITH DOT BELOW
+ { 0x06FD, BIDI_AL }, // ARABIC SIGN SINDHI AMPERSAND
+ { 0x06FE, BIDI_AL }, // ARABIC SIGN SINDHI POSTPOSITION MEN
+ { 0x06FF, BIDI_AL }, // ARABIC LETTER HEH WITH INVERTED V
+ { 0x0700, BIDI_AL }, // SYRIAC END OF PARAGRAPH
+ { 0x0701, BIDI_AL }, // SYRIAC SUPRALINEAR FULL STOP
+ { 0x0702, BIDI_AL }, // SYRIAC SUBLINEAR FULL STOP
+ { 0x0703, BIDI_AL }, // SYRIAC SUPRALINEAR COLON
+ { 0x0704, BIDI_AL }, // SYRIAC SUBLINEAR COLON
+ { 0x0705, BIDI_AL }, // SYRIAC HORIZONTAL COLON
+ { 0x0706, BIDI_AL }, // SYRIAC COLON SKEWED LEFT
+ { 0x0707, BIDI_AL }, // SYRIAC COLON SKEWED RIGHT
+ { 0x0708, BIDI_AL }, // SYRIAC SUPRALINEAR COLON SKEWED LEFT
+ { 0x0709, BIDI_AL }, // SYRIAC SUBLINEAR COLON SKEWED RIGHT
+ { 0x070A, BIDI_AL }, // SYRIAC CONTRACTION
+ { 0x070B, BIDI_AL }, // SYRIAC HARKLEAN OBELUS
+ { 0x070C, BIDI_AL }, // SYRIAC HARKLEAN METOBELUS
+ { 0x070D, BIDI_AL }, // SYRIAC HARKLEAN ASTERISCUS
+ { 0x070F, BIDI_AL }, // SYRIAC ABBREVIATION MARK
+ { 0x0710, BIDI_AL }, // SYRIAC LETTER ALAPH
+ { 0x0711, BIDI_NSM }, // SYRIAC LETTER SUPERSCRIPT ALAPH
+ { 0x0712, BIDI_AL }, // SYRIAC LETTER BETH
+ { 0x0713, BIDI_AL }, // SYRIAC LETTER GAMAL
+ { 0x0714, BIDI_AL }, // SYRIAC LETTER GAMAL GARSHUNI
+ { 0x0715, BIDI_AL }, // SYRIAC LETTER DALATH
+ { 0x0716, BIDI_AL }, // SYRIAC LETTER DOTLESS DALATH RISH
+ { 0x0717, BIDI_AL }, // SYRIAC LETTER HE
+ { 0x0718, BIDI_AL }, // SYRIAC LETTER WAW
+ { 0x0719, BIDI_AL }, // SYRIAC LETTER ZAIN
+ { 0x071A, BIDI_AL }, // SYRIAC LETTER HETH
+ { 0x071B, BIDI_AL }, // SYRIAC LETTER TETH
+ { 0x071C, BIDI_AL }, // SYRIAC LETTER TETH GARSHUNI
+ { 0x071D, BIDI_AL }, // SYRIAC LETTER YUDH
+ { 0x071E, BIDI_AL }, // SYRIAC LETTER YUDH HE
+ { 0x071F, BIDI_AL }, // SYRIAC LETTER KAPH
+ { 0x0720, BIDI_AL }, // SYRIAC LETTER LAMADH
+ { 0x0721, BIDI_AL }, // SYRIAC LETTER MIM
+ { 0x0722, BIDI_AL }, // SYRIAC LETTER NUN
+ { 0x0723, BIDI_AL }, // SYRIAC LETTER SEMKATH
+ { 0x0724, BIDI_AL }, // SYRIAC LETTER FINAL SEMKATH
+ { 0x0725, BIDI_AL }, // SYRIAC LETTER E
+ { 0x0726, BIDI_AL }, // SYRIAC LETTER PE
+ { 0x0727, BIDI_AL }, // SYRIAC LETTER REVERSED PE
+ { 0x0728, BIDI_AL }, // SYRIAC LETTER SADHE
+ { 0x0729, BIDI_AL }, // SYRIAC LETTER QAPH
+ { 0x072A, BIDI_AL }, // SYRIAC LETTER RISH
+ { 0x072B, BIDI_AL }, // SYRIAC LETTER SHIN
+ { 0x072C, BIDI_AL }, // SYRIAC LETTER TAW
+ { 0x072D, BIDI_AL }, // SYRIAC LETTER PERSIAN BHETH
+ { 0x072E, BIDI_AL }, // SYRIAC LETTER PERSIAN GHAMAL
+ { 0x072F, BIDI_AL }, // SYRIAC LETTER PERSIAN DHALATH
+ { 0x0730, BIDI_NSM }, // SYRIAC PTHAHA ABOVE
+ { 0x0731, BIDI_NSM }, // SYRIAC PTHAHA BELOW
+ { 0x0732, BIDI_NSM }, // SYRIAC PTHAHA DOTTED
+ { 0x0733, BIDI_NSM }, // SYRIAC ZQAPHA ABOVE
+ { 0x0734, BIDI_NSM }, // SYRIAC ZQAPHA BELOW
+ { 0x0735, BIDI_NSM }, // SYRIAC ZQAPHA DOTTED
+ { 0x0736, BIDI_NSM }, // SYRIAC RBASA ABOVE
+ { 0x0737, BIDI_NSM }, // SYRIAC RBASA BELOW
+ { 0x0738, BIDI_NSM }, // SYRIAC DOTTED ZLAMA HORIZONTAL
+ { 0x0739, BIDI_NSM }, // SYRIAC DOTTED ZLAMA ANGULAR
+ { 0x073A, BIDI_NSM }, // SYRIAC HBASA ABOVE
+ { 0x073B, BIDI_NSM }, // SYRIAC HBASA BELOW
+ { 0x073C, BIDI_NSM }, // SYRIAC HBASA-ESASA DOTTED
+ { 0x073D, BIDI_NSM }, // SYRIAC ESASA ABOVE
+ { 0x073E, BIDI_NSM }, // SYRIAC ESASA BELOW
+ { 0x073F, BIDI_NSM }, // SYRIAC RWAHA
+ { 0x0740, BIDI_NSM }, // SYRIAC FEMININE DOT
+ { 0x0741, BIDI_NSM }, // SYRIAC QUSHSHAYA
+ { 0x0742, BIDI_NSM }, // SYRIAC RUKKAKHA
+ { 0x0743, BIDI_NSM }, // SYRIAC TWO VERTICAL DOTS ABOVE
+ { 0x0744, BIDI_NSM }, // SYRIAC TWO VERTICAL DOTS BELOW
+ { 0x0745, BIDI_NSM }, // SYRIAC THREE DOTS ABOVE
+ { 0x0746, BIDI_NSM }, // SYRIAC THREE DOTS BELOW
+ { 0x0747, BIDI_NSM }, // SYRIAC OBLIQUE LINE ABOVE
+ { 0x0748, BIDI_NSM }, // SYRIAC OBLIQUE LINE BELOW
+ { 0x0749, BIDI_NSM }, // SYRIAC MUSIC
+ { 0x074A, BIDI_NSM }, // SYRIAC BARREKH
+ { 0x074D, BIDI_AL }, // SYRIAC LETTER SOGDIAN ZHAIN
+ { 0x074E, BIDI_AL }, // SYRIAC LETTER SOGDIAN KHAPH
+ { 0x074F, BIDI_AL }, // SYRIAC LETTER SOGDIAN FE
+ { 0x0750, BIDI_AL }, // ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW
+ { 0x0751, BIDI_AL }, // ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE
+ { 0x0752, BIDI_AL }, // ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW
+ { 0x0753, BIDI_AL }, // ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE
+ { 0x0754, BIDI_AL }, // ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE
+ { 0x0755, BIDI_AL }, // ARABIC LETTER BEH WITH INVERTED SMALL V BELOW
+ { 0x0756, BIDI_AL }, // ARABIC LETTER BEH WITH SMALL V
+ { 0x0757, BIDI_AL }, // ARABIC LETTER HAH WITH TWO DOTS ABOVE
+ { 0x0758, BIDI_AL }, // ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW
+ { 0x0759, BIDI_AL }, // ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH
+ { 0x075A, BIDI_AL }, // ARABIC LETTER DAL WITH INVERTED SMALL V BELOW
+ { 0x075B, BIDI_AL }, // ARABIC LETTER REH WITH STROKE
+ { 0x075C, BIDI_AL }, // ARABIC LETTER SEEN WITH FOUR DOTS ABOVE
+ { 0x075D, BIDI_AL }, // ARABIC LETTER AIN WITH TWO DOTS ABOVE
+ { 0x075E, BIDI_AL }, // ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE
+ { 0x075F, BIDI_AL }, // ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
+ { 0x0760, BIDI_AL }, // ARABIC LETTER FEH WITH TWO DOTS BELOW
+ { 0x0761, BIDI_AL }, // ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW
+ { 0x0762, BIDI_AL }, // ARABIC LETTER KEHEH WITH DOT ABOVE
+ { 0x0763, BIDI_AL }, // ARABIC LETTER KEHEH WITH THREE DOTS ABOVE
+ { 0x0764, BIDI_AL }, // ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
+ { 0x0765, BIDI_AL }, // ARABIC LETTER MEEM WITH DOT ABOVE
+ { 0x0766, BIDI_AL }, // ARABIC LETTER MEEM WITH DOT BELOW
+ { 0x0767, BIDI_AL }, // ARABIC LETTER NOON WITH TWO DOTS BELOW
+ { 0x0768, BIDI_AL }, // ARABIC LETTER NOON WITH SMALL TAH
+ { 0x0769, BIDI_AL }, // ARABIC LETTER NOON WITH SMALL V
+ { 0x076A, BIDI_AL }, // ARABIC LETTER LAM WITH BAR
+ { 0x076B, BIDI_AL }, // ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE
+ { 0x076C, BIDI_AL }, // ARABIC LETTER REH WITH HAMZA ABOVE
+ { 0x076D, BIDI_AL }, // ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+ { 0x076E, BIDI_AL }, // ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW
+ { 0x076F, BIDI_AL }, // ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+ { 0x0770, BIDI_AL }, // ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+ { 0x0771, BIDI_AL }, // ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS
+ { 0x0772, BIDI_AL }, // ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE
+ { 0x0773, BIDI_AL }, // ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+ { 0x0774, BIDI_AL }, // ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+ { 0x0775, BIDI_AL }, // ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+ { 0x0776, BIDI_AL }, // ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+ { 0x0777, BIDI_AL }, // ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+ { 0x0778, BIDI_AL }, // ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+ { 0x0779, BIDI_AL }, // ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+ { 0x077A, BIDI_AL }, // ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE
+ { 0x077B, BIDI_AL }, // ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE
+ { 0x077C, BIDI_AL }, // ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
+ { 0x077D, BIDI_AL }, // ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE
+ { 0x077E, BIDI_AL }, // ARABIC LETTER SEEN WITH INVERTED V
+ { 0x077F, BIDI_AL }, // ARABIC LETTER KAF WITH TWO DOTS ABOVE
+ { 0x0780, BIDI_AL }, // THAANA LETTER HAA
+ { 0x0781, BIDI_AL }, // THAANA LETTER SHAVIYANI
+ { 0x0782, BIDI_AL }, // THAANA LETTER NOONU
+ { 0x0783, BIDI_AL }, // THAANA LETTER RAA
+ { 0x0784, BIDI_AL }, // THAANA LETTER BAA
+ { 0x0785, BIDI_AL }, // THAANA LETTER LHAVIYANI
+ { 0x0786, BIDI_AL }, // THAANA LETTER KAAFU
+ { 0x0787, BIDI_AL }, // THAANA LETTER ALIFU
+ { 0x0788, BIDI_AL }, // THAANA LETTER VAAVU
+ { 0x0789, BIDI_AL }, // THAANA LETTER MEEMU
+ { 0x078A, BIDI_AL }, // THAANA LETTER FAAFU
+ { 0x078B, BIDI_AL }, // THAANA LETTER DHAALU
+ { 0x078C, BIDI_AL }, // THAANA LETTER THAA
+ { 0x078D, BIDI_AL }, // THAANA LETTER LAAMU
+ { 0x078E, BIDI_AL }, // THAANA LETTER GAAFU
+ { 0x078F, BIDI_AL }, // THAANA LETTER GNAVIYANI
+ { 0x0790, BIDI_AL }, // THAANA LETTER SEENU
+ { 0x0791, BIDI_AL }, // THAANA LETTER DAVIYANI
+ { 0x0792, BIDI_AL }, // THAANA LETTER ZAVIYANI
+ { 0x0793, BIDI_AL }, // THAANA LETTER TAVIYANI
+ { 0x0794, BIDI_AL }, // THAANA LETTER YAA
+ { 0x0795, BIDI_AL }, // THAANA LETTER PAVIYANI
+ { 0x0796, BIDI_AL }, // THAANA LETTER JAVIYANI
+ { 0x0797, BIDI_AL }, // THAANA LETTER CHAVIYANI
+ { 0x0798, BIDI_AL }, // THAANA LETTER TTAA
+ { 0x0799, BIDI_AL }, // THAANA LETTER HHAA
+ { 0x079A, BIDI_AL }, // THAANA LETTER KHAA
+ { 0x079B, BIDI_AL }, // THAANA LETTER THAALU
+ { 0x079C, BIDI_AL }, // THAANA LETTER ZAA
+ { 0x079D, BIDI_AL }, // THAANA LETTER SHEENU
+ { 0x079E, BIDI_AL }, // THAANA LETTER SAADHU
+ { 0x079F, BIDI_AL }, // THAANA LETTER DAADHU
+ { 0x07A0, BIDI_AL }, // THAANA LETTER TO
+ { 0x07A1, BIDI_AL }, // THAANA LETTER ZO
+ { 0x07A2, BIDI_AL }, // THAANA LETTER AINU
+ { 0x07A3, BIDI_AL }, // THAANA LETTER GHAINU
+ { 0x07A4, BIDI_AL }, // THAANA LETTER QAAFU
+ { 0x07A5, BIDI_AL }, // THAANA LETTER WAAVU
+ { 0x07A6, BIDI_NSM }, // THAANA ABAFILI
+ { 0x07A7, BIDI_NSM }, // THAANA AABAAFILI
+ { 0x07A8, BIDI_NSM }, // THAANA IBIFILI
+ { 0x07A9, BIDI_NSM }, // THAANA EEBEEFILI
+ { 0x07AA, BIDI_NSM }, // THAANA UBUFILI
+ { 0x07AB, BIDI_NSM }, // THAANA OOBOOFILI
+ { 0x07AC, BIDI_NSM }, // THAANA EBEFILI
+ { 0x07AD, BIDI_NSM }, // THAANA EYBEYFILI
+ { 0x07AE, BIDI_NSM }, // THAANA OBOFILI
+ { 0x07AF, BIDI_NSM }, // THAANA OABOAFILI
+ { 0x07B0, BIDI_NSM }, // THAANA SUKUN
+ { 0x07B1, BIDI_AL }, // THAANA LETTER NAA
+ { 0x07C0, BIDI_R }, // NKO DIGIT ZERO
+ { 0x07C1, BIDI_R }, // NKO DIGIT ONE
+ { 0x07C2, BIDI_R }, // NKO DIGIT TWO
+ { 0x07C3, BIDI_R }, // NKO DIGIT THREE
+ { 0x07C4, BIDI_R }, // NKO DIGIT FOUR
+ { 0x07C5, BIDI_R }, // NKO DIGIT FIVE
+ { 0x07C6, BIDI_R }, // NKO DIGIT SIX
+ { 0x07C7, BIDI_R }, // NKO DIGIT SEVEN
+ { 0x07C8, BIDI_R }, // NKO DIGIT EIGHT
+ { 0x07C9, BIDI_R }, // NKO DIGIT NINE
+ { 0x07CA, BIDI_R }, // NKO LETTER A
+ { 0x07CB, BIDI_R }, // NKO LETTER EE
+ { 0x07CC, BIDI_R }, // NKO LETTER I
+ { 0x07CD, BIDI_R }, // NKO LETTER E
+ { 0x07CE, BIDI_R }, // NKO LETTER U
+ { 0x07CF, BIDI_R }, // NKO LETTER OO
+ { 0x07D0, BIDI_R }, // NKO LETTER O
+ { 0x07D1, BIDI_R }, // NKO LETTER DAGBASINNA
+ { 0x07D2, BIDI_R }, // NKO LETTER N
+ { 0x07D3, BIDI_R }, // NKO LETTER BA
+ { 0x07D4, BIDI_R }, // NKO LETTER PA
+ { 0x07D5, BIDI_R }, // NKO LETTER TA
+ { 0x07D6, BIDI_R }, // NKO LETTER JA
+ { 0x07D7, BIDI_R }, // NKO LETTER CHA
+ { 0x07D8, BIDI_R }, // NKO LETTER DA
+ { 0x07D9, BIDI_R }, // NKO LETTER RA
+ { 0x07DA, BIDI_R }, // NKO LETTER RRA
+ { 0x07DB, BIDI_R }, // NKO LETTER SA
+ { 0x07DC, BIDI_R }, // NKO LETTER GBA
+ { 0x07DD, BIDI_R }, // NKO LETTER FA
+ { 0x07DE, BIDI_R }, // NKO LETTER KA
+ { 0x07DF, BIDI_R }, // NKO LETTER LA
+ { 0x07E0, BIDI_R }, // NKO LETTER NA WOLOSO
+ { 0x07E1, BIDI_R }, // NKO LETTER MA
+ { 0x07E2, BIDI_R }, // NKO LETTER NYA
+ { 0x07E3, BIDI_R }, // NKO LETTER NA
+ { 0x07E4, BIDI_R }, // NKO LETTER HA
+ { 0x07E5, BIDI_R }, // NKO LETTER WA
+ { 0x07E6, BIDI_R }, // NKO LETTER YA
+ { 0x07E7, BIDI_R }, // NKO LETTER NYA WOLOSO
+ { 0x07E8, BIDI_R }, // NKO LETTER JONA JA
+ { 0x07E9, BIDI_R }, // NKO LETTER JONA CHA
+ { 0x07EA, BIDI_R }, // NKO LETTER JONA RA
+ { 0x07EB, BIDI_NSM }, // NKO COMBINING SHORT HIGH TONE
+ { 0x07EC, BIDI_NSM }, // NKO COMBINING SHORT LOW TONE
+ { 0x07ED, BIDI_NSM }, // NKO COMBINING SHORT RISING TONE
+ { 0x07EE, BIDI_NSM }, // NKO COMBINING LONG DESCENDING TONE
+ { 0x07EF, BIDI_NSM }, // NKO COMBINING LONG HIGH TONE
+ { 0x07F0, BIDI_NSM }, // NKO COMBINING LONG LOW TONE
+ { 0x07F1, BIDI_NSM }, // NKO COMBINING LONG RISING TONE
+ { 0x07F2, BIDI_NSM }, // NKO COMBINING NASALIZATION MARK
+ { 0x07F3, BIDI_NSM }, // NKO COMBINING DOUBLE DOT ABOVE
+ { 0x07F4, BIDI_R }, // NKO HIGH TONE APOSTROPHE
+ { 0x07F5, BIDI_R }, // NKO LOW TONE APOSTROPHE
+ { 0x07F6, BIDI_ON }, // NKO SYMBOL OO DENNEN
+ { 0x07F7, BIDI_ON }, // NKO SYMBOL GBAKURUNEN
+ { 0x07F8, BIDI_ON }, // NKO COMMA
+ { 0x07F9, BIDI_ON }, // NKO EXCLAMATION MARK
+ { 0x07FA, BIDI_R }, // NKO LAJANYALAN
+ { 0x0800, BIDI_R }, // SAMARITAN LETTER ALAF
+ { 0x0801, BIDI_R }, // SAMARITAN LETTER BIT
+ { 0x0802, BIDI_R }, // SAMARITAN LETTER GAMAN
+ { 0x0803, BIDI_R }, // SAMARITAN LETTER DALAT
+ { 0x0804, BIDI_R }, // SAMARITAN LETTER IY
+ { 0x0805, BIDI_R }, // SAMARITAN LETTER BAA
+ { 0x0806, BIDI_R }, // SAMARITAN LETTER ZEN
+ { 0x0807, BIDI_R }, // SAMARITAN LETTER IT
+ { 0x0808, BIDI_R }, // SAMARITAN LETTER TIT
+ { 0x0809, BIDI_R }, // SAMARITAN LETTER YUT
+ { 0x080A, BIDI_R }, // SAMARITAN LETTER KAAF
+ { 0x080B, BIDI_R }, // SAMARITAN LETTER LABAT
+ { 0x080C, BIDI_R }, // SAMARITAN LETTER MIM
+ { 0x080D, BIDI_R }, // SAMARITAN LETTER NUN
+ { 0x080E, BIDI_R }, // SAMARITAN LETTER SINGAAT
+ { 0x080F, BIDI_R }, // SAMARITAN LETTER IN
+ { 0x0810, BIDI_R }, // SAMARITAN LETTER FI
+ { 0x0811, BIDI_R }, // SAMARITAN LETTER TSAADIY
+ { 0x0812, BIDI_R }, // SAMARITAN LETTER QUF
+ { 0x0813, BIDI_R }, // SAMARITAN LETTER RISH
+ { 0x0814, BIDI_R }, // SAMARITAN LETTER SHAN
+ { 0x0815, BIDI_R }, // SAMARITAN LETTER TAAF
+ { 0x0816, BIDI_NSM }, // SAMARITAN MARK IN
+ { 0x0817, BIDI_NSM }, // SAMARITAN MARK IN-ALAF
+ { 0x0818, BIDI_NSM }, // SAMARITAN MARK OCCLUSION
+ { 0x0819, BIDI_NSM }, // SAMARITAN MARK DAGESH
+ { 0x081A, BIDI_R }, // SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+ { 0x081B, BIDI_NSM }, // SAMARITAN MARK EPENTHETIC YUT
+ { 0x081C, BIDI_NSM }, // SAMARITAN VOWEL SIGN LONG E
+ { 0x081D, BIDI_NSM }, // SAMARITAN VOWEL SIGN E
+ { 0x081E, BIDI_NSM }, // SAMARITAN VOWEL SIGN OVERLONG AA
+ { 0x081F, BIDI_NSM }, // SAMARITAN VOWEL SIGN LONG AA
+ { 0x0820, BIDI_NSM }, // SAMARITAN VOWEL SIGN AA
+ { 0x0821, BIDI_NSM }, // SAMARITAN VOWEL SIGN OVERLONG A
+ { 0x0822, BIDI_NSM }, // SAMARITAN VOWEL SIGN LONG A
+ { 0x0823, BIDI_NSM }, // SAMARITAN VOWEL SIGN A
+ { 0x0824, BIDI_R }, // SAMARITAN MODIFIER LETTER SHORT A
+ { 0x0825, BIDI_NSM }, // SAMARITAN VOWEL SIGN SHORT A
+ { 0x0826, BIDI_NSM }, // SAMARITAN VOWEL SIGN LONG U
+ { 0x0827, BIDI_NSM }, // SAMARITAN VOWEL SIGN U
+ { 0x0828, BIDI_R }, // SAMARITAN MODIFIER LETTER I
+ { 0x0829, BIDI_NSM }, // SAMARITAN VOWEL SIGN LONG I
+ { 0x082A, BIDI_NSM }, // SAMARITAN VOWEL SIGN I
+ { 0x082B, BIDI_NSM }, // SAMARITAN VOWEL SIGN O
+ { 0x082C, BIDI_NSM }, // SAMARITAN VOWEL SIGN SUKUN
+ { 0x082D, BIDI_NSM }, // SAMARITAN MARK NEQUDAA
+ { 0x0830, BIDI_R }, // SAMARITAN PUNCTUATION NEQUDAA
+ { 0x0831, BIDI_R }, // SAMARITAN PUNCTUATION AFSAAQ
+ { 0x0832, BIDI_R }, // SAMARITAN PUNCTUATION ANGED
+ { 0x0833, BIDI_R }, // SAMARITAN PUNCTUATION BAU
+ { 0x0834, BIDI_R }, // SAMARITAN PUNCTUATION ATMAAU
+ { 0x0835, BIDI_R }, // SAMARITAN PUNCTUATION SHIYYAALAA
+ { 0x0836, BIDI_R }, // SAMARITAN ABBREVIATION MARK
+ { 0x0837, BIDI_R }, // SAMARITAN PUNCTUATION MELODIC QITSA
+ { 0x0838, BIDI_R }, // SAMARITAN PUNCTUATION ZIQAA
+ { 0x0839, BIDI_R }, // SAMARITAN PUNCTUATION QITSA
+ { 0x083A, BIDI_R }, // SAMARITAN PUNCTUATION ZAEF
+ { 0x083B, BIDI_R }, // SAMARITAN PUNCTUATION TURU
+ { 0x083C, BIDI_R }, // SAMARITAN PUNCTUATION ARKAANU
+ { 0x083D, BIDI_R }, // SAMARITAN PUNCTUATION SOF MASHFAAT
+ { 0x083E, BIDI_R }, // SAMARITAN PUNCTUATION ANNAAU
+ { 0x0840, BIDI_R }, // MANDAIC LETTER HALQA
+ { 0x0841, BIDI_R }, // MANDAIC LETTER AB
+ { 0x0842, BIDI_R }, // MANDAIC LETTER AG
+ { 0x0843, BIDI_R }, // MANDAIC LETTER AD
+ { 0x0844, BIDI_R }, // MANDAIC LETTER AH
+ { 0x0845, BIDI_R }, // MANDAIC LETTER USHENNA
+ { 0x0846, BIDI_R }, // MANDAIC LETTER AZ
+ { 0x0847, BIDI_R }, // MANDAIC LETTER IT
+ { 0x0848, BIDI_R }, // MANDAIC LETTER ATT
+ { 0x0849, BIDI_R }, // MANDAIC LETTER AKSA
+ { 0x084A, BIDI_R }, // MANDAIC LETTER AK
+ { 0x084B, BIDI_R }, // MANDAIC LETTER AL
+ { 0x084C, BIDI_R }, // MANDAIC LETTER AM
+ { 0x084D, BIDI_R }, // MANDAIC LETTER AN
+ { 0x084E, BIDI_R }, // MANDAIC LETTER AS
+ { 0x084F, BIDI_R }, // MANDAIC LETTER IN
+ { 0x0850, BIDI_R }, // MANDAIC LETTER AP
+ { 0x0851, BIDI_R }, // MANDAIC LETTER ASZ
+ { 0x0852, BIDI_R }, // MANDAIC LETTER AQ
+ { 0x0853, BIDI_R }, // MANDAIC LETTER AR
+ { 0x0854, BIDI_R }, // MANDAIC LETTER ASH
+ { 0x0855, BIDI_R }, // MANDAIC LETTER AT
+ { 0x0856, BIDI_R }, // MANDAIC LETTER DUSHENNA
+ { 0x0857, BIDI_R }, // MANDAIC LETTER KAD
+ { 0x0858, BIDI_R }, // MANDAIC LETTER AIN
+ { 0x0859, BIDI_NSM }, // MANDAIC AFFRICATION MARK
+ { 0x085A, BIDI_NSM }, // MANDAIC VOCALIZATION MARK
+ { 0x085B, BIDI_NSM }, // MANDAIC GEMINATION MARK
+ { 0x085E, BIDI_R }, // MANDAIC PUNCTUATION
+ { 0x08A0, BIDI_AL }, // ARABIC LETTER BEH WITH SMALL V BELOW
+ { 0x08A1, BIDI_AL }, // ARABIC LETTER BEH WITH HAMZA ABOVE
+ { 0x08A2, BIDI_AL }, // ARABIC LETTER JEEM WITH TWO DOTS ABOVE
+ { 0x08A3, BIDI_AL }, // ARABIC LETTER TAH WITH TWO DOTS ABOVE
+ { 0x08A4, BIDI_AL }, // ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE
+ { 0x08A5, BIDI_AL }, // ARABIC LETTER QAF WITH DOT BELOW
+ { 0x08A6, BIDI_AL }, // ARABIC LETTER LAM WITH DOUBLE BAR
+ { 0x08A7, BIDI_AL }, // ARABIC LETTER MEEM WITH THREE DOTS ABOVE
+ { 0x08A8, BIDI_AL }, // ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE
+ { 0x08A9, BIDI_AL }, // ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE
+ { 0x08AA, BIDI_AL }, // ARABIC LETTER REH WITH LOOP
+ { 0x08AB, BIDI_AL }, // ARABIC LETTER WAW WITH DOT WITHIN
+ { 0x08AC, BIDI_AL }, // ARABIC LETTER ROHINGYA YEH
+ { 0x08AD, BIDI_AL }, // ARABIC LETTER LOW ALEF
+ { 0x08AE, BIDI_AL }, // ARABIC LETTER DAL WITH THREE DOTS BELOW
+ { 0x08AF, BIDI_AL }, // ARABIC LETTER SAD WITH THREE DOTS BELOW
+ { 0x08B0, BIDI_AL }, // ARABIC LETTER GAF WITH INVERTED STROKE
+ { 0x08B1, BIDI_AL }, // ARABIC LETTER STRAIGHT WAW
+ { 0x08B2, BIDI_AL }, // ARABIC LETTER ZAIN WITH INVERTED V ABOVE
+ { 0x08B3, BIDI_AL }, // ARABIC LETTER AIN WITH THREE DOTS BELOW
+ { 0x08B4, BIDI_AL }, // ARABIC LETTER KAF WITH DOT BELOW
+ { 0x08E3, BIDI_NSM }, // ARABIC TURNED DAMMA BELOW
+ { 0x08E4, BIDI_NSM }, // ARABIC CURLY FATHA
+ { 0x08E5, BIDI_NSM }, // ARABIC CURLY DAMMA
+ { 0x08E6, BIDI_NSM }, // ARABIC CURLY KASRA
+ { 0x08E7, BIDI_NSM }, // ARABIC CURLY FATHATAN
+ { 0x08E8, BIDI_NSM }, // ARABIC CURLY DAMMATAN
+ { 0x08E9, BIDI_NSM }, // ARABIC CURLY KASRATAN
+ { 0x08EA, BIDI_NSM }, // ARABIC TONE ONE DOT ABOVE
+ { 0x08EB, BIDI_NSM }, // ARABIC TONE TWO DOTS ABOVE
+ { 0x08EC, BIDI_NSM }, // ARABIC TONE LOOP ABOVE
+ { 0x08ED, BIDI_NSM }, // ARABIC TONE ONE DOT BELOW
+ { 0x08EE, BIDI_NSM }, // ARABIC TONE TWO DOTS BELOW
+ { 0x08EF, BIDI_NSM }, // ARABIC TONE LOOP BELOW
+ { 0x08F0, BIDI_NSM }, // ARABIC OPEN FATHATAN
+ { 0x08F1, BIDI_NSM }, // ARABIC OPEN DAMMATAN
+ { 0x08F2, BIDI_NSM }, // ARABIC OPEN KASRATAN
+ { 0x08F3, BIDI_NSM }, // ARABIC SMALL HIGH WAW
+ { 0x08F4, BIDI_NSM }, // ARABIC FATHA WITH RING
+ { 0x08F5, BIDI_NSM }, // ARABIC FATHA WITH DOT ABOVE
+ { 0x08F6, BIDI_NSM }, // ARABIC KASRA WITH DOT BELOW
+ { 0x08F7, BIDI_NSM }, // ARABIC LEFT ARROWHEAD ABOVE
+ { 0x08F8, BIDI_NSM }, // ARABIC RIGHT ARROWHEAD ABOVE
+ { 0x08F9, BIDI_NSM }, // ARABIC LEFT ARROWHEAD BELOW
+ { 0x08FA, BIDI_NSM }, // ARABIC RIGHT ARROWHEAD BELOW
+ { 0x08FB, BIDI_NSM }, // ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
+ { 0x08FC, BIDI_NSM }, // ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
+ { 0x08FD, BIDI_NSM }, // ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
+ { 0x08FE, BIDI_NSM }, // ARABIC DAMMA WITH DOT
+ { 0x08FF, BIDI_NSM }, // ARABIC MARK SIDEWAYS NOON GHUNNA
+ { 0x0900, BIDI_NSM }, // DEVANAGARI SIGN INVERTED CANDRABINDU
+ { 0x0901, BIDI_NSM }, // DEVANAGARI SIGN CANDRABINDU
+ { 0x0902, BIDI_NSM }, // DEVANAGARI SIGN ANUSVARA
+ { 0x0903, BIDI_L }, // DEVANAGARI SIGN VISARGA
+ { 0x0904, BIDI_L }, // DEVANAGARI LETTER SHORT A
+ { 0x0905, BIDI_L }, // DEVANAGARI LETTER A
+ { 0x0906, BIDI_L }, // DEVANAGARI LETTER AA
+ { 0x0907, BIDI_L }, // DEVANAGARI LETTER I
+ { 0x0908, BIDI_L }, // DEVANAGARI LETTER II
+ { 0x0909, BIDI_L }, // DEVANAGARI LETTER U
+ { 0x090A, BIDI_L }, // DEVANAGARI LETTER UU
+ { 0x090B, BIDI_L }, // DEVANAGARI LETTER VOCALIC R
+ { 0x090C, BIDI_L }, // DEVANAGARI LETTER VOCALIC L
+ { 0x090D, BIDI_L }, // DEVANAGARI LETTER CANDRA E
+ { 0x090E, BIDI_L }, // DEVANAGARI LETTER SHORT E
+ { 0x090F, BIDI_L }, // DEVANAGARI LETTER E
+ { 0x0910, BIDI_L }, // DEVANAGARI LETTER AI
+ { 0x0911, BIDI_L }, // DEVANAGARI LETTER CANDRA O
+ { 0x0912, BIDI_L }, // DEVANAGARI LETTER SHORT O
+ { 0x0913, BIDI_L }, // DEVANAGARI LETTER O
+ { 0x0914, BIDI_L }, // DEVANAGARI LETTER AU
+ { 0x0915, BIDI_L }, // DEVANAGARI LETTER KA
+ { 0x0916, BIDI_L }, // DEVANAGARI LETTER KHA
+ { 0x0917, BIDI_L }, // DEVANAGARI LETTER GA
+ { 0x0918, BIDI_L }, // DEVANAGARI LETTER GHA
+ { 0x0919, BIDI_L }, // DEVANAGARI LETTER NGA
+ { 0x091A, BIDI_L }, // DEVANAGARI LETTER CA
+ { 0x091B, BIDI_L }, // DEVANAGARI LETTER CHA
+ { 0x091C, BIDI_L }, // DEVANAGARI LETTER JA
+ { 0x091D, BIDI_L }, // DEVANAGARI LETTER JHA
+ { 0x091E, BIDI_L }, // DEVANAGARI LETTER NYA
+ { 0x091F, BIDI_L }, // DEVANAGARI LETTER TTA
+ { 0x0920, BIDI_L }, // DEVANAGARI LETTER TTHA
+ { 0x0921, BIDI_L }, // DEVANAGARI LETTER DDA
+ { 0x0922, BIDI_L }, // DEVANAGARI LETTER DDHA
+ { 0x0923, BIDI_L }, // DEVANAGARI LETTER NNA
+ { 0x0924, BIDI_L }, // DEVANAGARI LETTER TA
+ { 0x0925, BIDI_L }, // DEVANAGARI LETTER THA
+ { 0x0926, BIDI_L }, // DEVANAGARI LETTER DA
+ { 0x0927, BIDI_L }, // DEVANAGARI LETTER DHA
+ { 0x0928, BIDI_L }, // DEVANAGARI LETTER NA
+ { 0x0929, BIDI_L }, // DEVANAGARI LETTER NNNA
+ { 0x092A, BIDI_L }, // DEVANAGARI LETTER PA
+ { 0x092B, BIDI_L }, // DEVANAGARI LETTER PHA
+ { 0x092C, BIDI_L }, // DEVANAGARI LETTER BA
+ { 0x092D, BIDI_L }, // DEVANAGARI LETTER BHA
+ { 0x092E, BIDI_L }, // DEVANAGARI LETTER MA
+ { 0x092F, BIDI_L }, // DEVANAGARI LETTER YA
+ { 0x0930, BIDI_L }, // DEVANAGARI LETTER RA
+ { 0x0931, BIDI_L }, // DEVANAGARI LETTER RRA
+ { 0x0932, BIDI_L }, // DEVANAGARI LETTER LA
+ { 0x0933, BIDI_L }, // DEVANAGARI LETTER LLA
+ { 0x0934, BIDI_L }, // DEVANAGARI LETTER LLLA
+ { 0x0935, BIDI_L }, // DEVANAGARI LETTER VA
+ { 0x0936, BIDI_L }, // DEVANAGARI LETTER SHA
+ { 0x0937, BIDI_L }, // DEVANAGARI LETTER SSA
+ { 0x0938, BIDI_L }, // DEVANAGARI LETTER SA
+ { 0x0939, BIDI_L }, // DEVANAGARI LETTER HA
+ { 0x093A, BIDI_NSM }, // DEVANAGARI VOWEL SIGN OE
+ { 0x093B, BIDI_L }, // DEVANAGARI VOWEL SIGN OOE
+ { 0x093C, BIDI_NSM }, // DEVANAGARI SIGN NUKTA
+ { 0x093D, BIDI_L }, // DEVANAGARI SIGN AVAGRAHA
+ { 0x093E, BIDI_L }, // DEVANAGARI VOWEL SIGN AA
+ { 0x093F, BIDI_L }, // DEVANAGARI VOWEL SIGN I
+ { 0x0940, BIDI_L }, // DEVANAGARI VOWEL SIGN II
+ { 0x0941, BIDI_NSM }, // DEVANAGARI VOWEL SIGN U
+ { 0x0942, BIDI_NSM }, // DEVANAGARI VOWEL SIGN UU
+ { 0x0943, BIDI_NSM }, // DEVANAGARI VOWEL SIGN VOCALIC R
+ { 0x0944, BIDI_NSM }, // DEVANAGARI VOWEL SIGN VOCALIC RR
+ { 0x0945, BIDI_NSM }, // DEVANAGARI VOWEL SIGN CANDRA E
+ { 0x0946, BIDI_NSM }, // DEVANAGARI VOWEL SIGN SHORT E
+ { 0x0947, BIDI_NSM }, // DEVANAGARI VOWEL SIGN E
+ { 0x0948, BIDI_NSM }, // DEVANAGARI VOWEL SIGN AI
+ { 0x0949, BIDI_L }, // DEVANAGARI VOWEL SIGN CANDRA O
+ { 0x094A, BIDI_L }, // DEVANAGARI VOWEL SIGN SHORT O
+ { 0x094B, BIDI_L }, // DEVANAGARI VOWEL SIGN O
+ { 0x094C, BIDI_L }, // DEVANAGARI VOWEL SIGN AU
+ { 0x094D, BIDI_NSM }, // DEVANAGARI SIGN VIRAMA
+ { 0x094E, BIDI_L }, // DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+ { 0x094F, BIDI_L }, // DEVANAGARI VOWEL SIGN AW
+ { 0x0950, BIDI_L }, // DEVANAGARI OM
+ { 0x0951, BIDI_NSM }, // DEVANAGARI STRESS SIGN UDATTA
+ { 0x0952, BIDI_NSM }, // DEVANAGARI STRESS SIGN ANUDATTA
+ { 0x0953, BIDI_NSM }, // DEVANAGARI GRAVE ACCENT
+ { 0x0954, BIDI_NSM }, // DEVANAGARI ACUTE ACCENT
+ { 0x0955, BIDI_NSM }, // DEVANAGARI VOWEL SIGN CANDRA LONG E
+ { 0x0956, BIDI_NSM }, // DEVANAGARI VOWEL SIGN UE
+ { 0x0957, BIDI_NSM }, // DEVANAGARI VOWEL SIGN UUE
+ { 0x0958, BIDI_L }, // DEVANAGARI LETTER QA
+ { 0x0959, BIDI_L }, // DEVANAGARI LETTER KHHA
+ { 0x095A, BIDI_L }, // DEVANAGARI LETTER GHHA
+ { 0x095B, BIDI_L }, // DEVANAGARI LETTER ZA
+ { 0x095C, BIDI_L }, // DEVANAGARI LETTER DDDHA
+ { 0x095D, BIDI_L }, // DEVANAGARI LETTER RHA
+ { 0x095E, BIDI_L }, // DEVANAGARI LETTER FA
+ { 0x095F, BIDI_L }, // DEVANAGARI LETTER YYA
+ { 0x0960, BIDI_L }, // DEVANAGARI LETTER VOCALIC RR
+ { 0x0961, BIDI_L }, // DEVANAGARI LETTER VOCALIC LL
+ { 0x0962, BIDI_NSM }, // DEVANAGARI VOWEL SIGN VOCALIC L
+ { 0x0963, BIDI_NSM }, // DEVANAGARI VOWEL SIGN VOCALIC LL
+ { 0x0964, BIDI_L }, // DEVANAGARI DANDA
+ { 0x0965, BIDI_L }, // DEVANAGARI DOUBLE DANDA
+ { 0x0966, BIDI_L }, // DEVANAGARI DIGIT ZERO
+ { 0x0967, BIDI_L }, // DEVANAGARI DIGIT ONE
+ { 0x0968, BIDI_L }, // DEVANAGARI DIGIT TWO
+ { 0x0969, BIDI_L }, // DEVANAGARI DIGIT THREE
+ { 0x096A, BIDI_L }, // DEVANAGARI DIGIT FOUR
+ { 0x096B, BIDI_L }, // DEVANAGARI DIGIT FIVE
+ { 0x096C, BIDI_L }, // DEVANAGARI DIGIT SIX
+ { 0x096D, BIDI_L }, // DEVANAGARI DIGIT SEVEN
+ { 0x096E, BIDI_L }, // DEVANAGARI DIGIT EIGHT
+ { 0x096F, BIDI_L }, // DEVANAGARI DIGIT NINE
+ { 0x0970, BIDI_L }, // DEVANAGARI ABBREVIATION SIGN
+ { 0x0971, BIDI_L }, // DEVANAGARI SIGN HIGH SPACING DOT
+ { 0x0972, BIDI_L }, // DEVANAGARI LETTER CANDRA A
+ { 0x0973, BIDI_L }, // DEVANAGARI LETTER OE
+ { 0x0974, BIDI_L }, // DEVANAGARI LETTER OOE
+ { 0x0975, BIDI_L }, // DEVANAGARI LETTER AW
+ { 0x0976, BIDI_L }, // DEVANAGARI LETTER UE
+ { 0x0977, BIDI_L }, // DEVANAGARI LETTER UUE
+ { 0x0978, BIDI_L }, // DEVANAGARI LETTER MARWARI DDA
+ { 0x0979, BIDI_L }, // DEVANAGARI LETTER ZHA
+ { 0x097A, BIDI_L }, // DEVANAGARI LETTER HEAVY YA
+ { 0x097B, BIDI_L }, // DEVANAGARI LETTER GGA
+ { 0x097C, BIDI_L }, // DEVANAGARI LETTER JJA
+ { 0x097D, BIDI_L }, // DEVANAGARI LETTER GLOTTAL STOP
+ { 0x097E, BIDI_L }, // DEVANAGARI LETTER DDDA
+ { 0x097F, BIDI_L }, // DEVANAGARI LETTER BBA
+ { 0x0980, BIDI_L }, // BENGALI ANJI
+ { 0x0981, BIDI_NSM }, // BENGALI SIGN CANDRABINDU
+ { 0x0982, BIDI_L }, // BENGALI SIGN ANUSVARA
+ { 0x0983, BIDI_L }, // BENGALI SIGN VISARGA
+ { 0x0985, BIDI_L }, // BENGALI LETTER A
+ { 0x0986, BIDI_L }, // BENGALI LETTER AA
+ { 0x0987, BIDI_L }, // BENGALI LETTER I
+ { 0x0988, BIDI_L }, // BENGALI LETTER II
+ { 0x0989, BIDI_L }, // BENGALI LETTER U
+ { 0x098A, BIDI_L }, // BENGALI LETTER UU
+ { 0x098B, BIDI_L }, // BENGALI LETTER VOCALIC R
+ { 0x098C, BIDI_L }, // BENGALI LETTER VOCALIC L
+ { 0x098F, BIDI_L }, // BENGALI LETTER E
+ { 0x0990, BIDI_L }, // BENGALI LETTER AI
+ { 0x0993, BIDI_L }, // BENGALI LETTER O
+ { 0x0994, BIDI_L }, // BENGALI LETTER AU
+ { 0x0995, BIDI_L }, // BENGALI LETTER KA
+ { 0x0996, BIDI_L }, // BENGALI LETTER KHA
+ { 0x0997, BIDI_L }, // BENGALI LETTER GA
+ { 0x0998, BIDI_L }, // BENGALI LETTER GHA
+ { 0x0999, BIDI_L }, // BENGALI LETTER NGA
+ { 0x099A, BIDI_L }, // BENGALI LETTER CA
+ { 0x099B, BIDI_L }, // BENGALI LETTER CHA
+ { 0x099C, BIDI_L }, // BENGALI LETTER JA
+ { 0x099D, BIDI_L }, // BENGALI LETTER JHA
+ { 0x099E, BIDI_L }, // BENGALI LETTER NYA
+ { 0x099F, BIDI_L }, // BENGALI LETTER TTA
+ { 0x09A0, BIDI_L }, // BENGALI LETTER TTHA
+ { 0x09A1, BIDI_L }, // BENGALI LETTER DDA
+ { 0x09A2, BIDI_L }, // BENGALI LETTER DDHA
+ { 0x09A3, BIDI_L }, // BENGALI LETTER NNA
+ { 0x09A4, BIDI_L }, // BENGALI LETTER TA
+ { 0x09A5, BIDI_L }, // BENGALI LETTER THA
+ { 0x09A6, BIDI_L }, // BENGALI LETTER DA
+ { 0x09A7, BIDI_L }, // BENGALI LETTER DHA
+ { 0x09A8, BIDI_L }, // BENGALI LETTER NA
+ { 0x09AA, BIDI_L }, // BENGALI LETTER PA
+ { 0x09AB, BIDI_L }, // BENGALI LETTER PHA
+ { 0x09AC, BIDI_L }, // BENGALI LETTER BA
+ { 0x09AD, BIDI_L }, // BENGALI LETTER BHA
+ { 0x09AE, BIDI_L }, // BENGALI LETTER MA
+ { 0x09AF, BIDI_L }, // BENGALI LETTER YA
+ { 0x09B0, BIDI_L }, // BENGALI LETTER RA
+ { 0x09B2, BIDI_L }, // BENGALI LETTER LA
+ { 0x09B6, BIDI_L }, // BENGALI LETTER SHA
+ { 0x09B7, BIDI_L }, // BENGALI LETTER SSA
+ { 0x09B8, BIDI_L }, // BENGALI LETTER SA
+ { 0x09B9, BIDI_L }, // BENGALI LETTER HA
+ { 0x09BC, BIDI_NSM }, // BENGALI SIGN NUKTA
+ { 0x09BD, BIDI_L }, // BENGALI SIGN AVAGRAHA
+ { 0x09BE, BIDI_L }, // BENGALI VOWEL SIGN AA
+ { 0x09BF, BIDI_L }, // BENGALI VOWEL SIGN I
+ { 0x09C0, BIDI_L }, // BENGALI VOWEL SIGN II
+ { 0x09C1, BIDI_NSM }, // BENGALI VOWEL SIGN U
+ { 0x09C2, BIDI_NSM }, // BENGALI VOWEL SIGN UU
+ { 0x09C3, BIDI_NSM }, // BENGALI VOWEL SIGN VOCALIC R
+ { 0x09C4, BIDI_NSM }, // BENGALI VOWEL SIGN VOCALIC RR
+ { 0x09C7, BIDI_L }, // BENGALI VOWEL SIGN E
+ { 0x09C8, BIDI_L }, // BENGALI VOWEL SIGN AI
+ { 0x09CB, BIDI_L }, // BENGALI VOWEL SIGN O
+ { 0x09CC, BIDI_L }, // BENGALI VOWEL SIGN AU
+ { 0x09CD, BIDI_NSM }, // BENGALI SIGN VIRAMA
+ { 0x09CE, BIDI_L }, // BENGALI LETTER KHANDA TA
+ { 0x09D7, BIDI_L }, // BENGALI AU LENGTH MARK
+ { 0x09DC, BIDI_L }, // BENGALI LETTER RRA
+ { 0x09DD, BIDI_L }, // BENGALI LETTER RHA
+ { 0x09DF, BIDI_L }, // BENGALI LETTER YYA
+ { 0x09E0, BIDI_L }, // BENGALI LETTER VOCALIC RR
+ { 0x09E1, BIDI_L }, // BENGALI LETTER VOCALIC LL
+ { 0x09E2, BIDI_NSM }, // BENGALI VOWEL SIGN VOCALIC L
+ { 0x09E3, BIDI_NSM }, // BENGALI VOWEL SIGN VOCALIC LL
+ { 0x09E6, BIDI_L }, // BENGALI DIGIT ZERO
+ { 0x09E7, BIDI_L }, // BENGALI DIGIT ONE
+ { 0x09E8, BIDI_L }, // BENGALI DIGIT TWO
+ { 0x09E9, BIDI_L }, // BENGALI DIGIT THREE
+ { 0x09EA, BIDI_L }, // BENGALI DIGIT FOUR
+ { 0x09EB, BIDI_L }, // BENGALI DIGIT FIVE
+ { 0x09EC, BIDI_L }, // BENGALI DIGIT SIX
+ { 0x09ED, BIDI_L }, // BENGALI DIGIT SEVEN
+ { 0x09EE, BIDI_L }, // BENGALI DIGIT EIGHT
+ { 0x09EF, BIDI_L }, // BENGALI DIGIT NINE
+ { 0x09F0, BIDI_L }, // BENGALI LETTER RA WITH MIDDLE DIAGONAL
+ { 0x09F1, BIDI_L }, // BENGALI LETTER RA WITH LOWER DIAGONAL
+ { 0x09F2, BIDI_ET }, // BENGALI RUPEE MARK
+ { 0x09F3, BIDI_ET }, // BENGALI RUPEE SIGN
+ { 0x09F4, BIDI_L }, // BENGALI CURRENCY NUMERATOR ONE
+ { 0x09F5, BIDI_L }, // BENGALI CURRENCY NUMERATOR TWO
+ { 0x09F6, BIDI_L }, // BENGALI CURRENCY NUMERATOR THREE
+ { 0x09F7, BIDI_L }, // BENGALI CURRENCY NUMERATOR FOUR
+ { 0x09F8, BIDI_L }, // BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+ { 0x09F9, BIDI_L }, // BENGALI CURRENCY DENOMINATOR SIXTEEN
+ { 0x09FA, BIDI_L }, // BENGALI ISSHAR
+ { 0x09FB, BIDI_ET }, // BENGALI GANDA MARK
+ { 0x0A01, BIDI_NSM }, // GURMUKHI SIGN ADAK BINDI
+ { 0x0A02, BIDI_NSM }, // GURMUKHI SIGN BINDI
+ { 0x0A03, BIDI_L }, // GURMUKHI SIGN VISARGA
+ { 0x0A05, BIDI_L }, // GURMUKHI LETTER A
+ { 0x0A06, BIDI_L }, // GURMUKHI LETTER AA
+ { 0x0A07, BIDI_L }, // GURMUKHI LETTER I
+ { 0x0A08, BIDI_L }, // GURMUKHI LETTER II
+ { 0x0A09, BIDI_L }, // GURMUKHI LETTER U
+ { 0x0A0A, BIDI_L }, // GURMUKHI LETTER UU
+ { 0x0A0F, BIDI_L }, // GURMUKHI LETTER EE
+ { 0x0A10, BIDI_L }, // GURMUKHI LETTER AI
+ { 0x0A13, BIDI_L }, // GURMUKHI LETTER OO
+ { 0x0A14, BIDI_L }, // GURMUKHI LETTER AU
+ { 0x0A15, BIDI_L }, // GURMUKHI LETTER KA
+ { 0x0A16, BIDI_L }, // GURMUKHI LETTER KHA
+ { 0x0A17, BIDI_L }, // GURMUKHI LETTER GA
+ { 0x0A18, BIDI_L }, // GURMUKHI LETTER GHA
+ { 0x0A19, BIDI_L }, // GURMUKHI LETTER NGA
+ { 0x0A1A, BIDI_L }, // GURMUKHI LETTER CA
+ { 0x0A1B, BIDI_L }, // GURMUKHI LETTER CHA
+ { 0x0A1C, BIDI_L }, // GURMUKHI LETTER JA
+ { 0x0A1D, BIDI_L }, // GURMUKHI LETTER JHA
+ { 0x0A1E, BIDI_L }, // GURMUKHI LETTER NYA
+ { 0x0A1F, BIDI_L }, // GURMUKHI LETTER TTA
+ { 0x0A20, BIDI_L }, // GURMUKHI LETTER TTHA
+ { 0x0A21, BIDI_L }, // GURMUKHI LETTER DDA
+ { 0x0A22, BIDI_L }, // GURMUKHI LETTER DDHA
+ { 0x0A23, BIDI_L }, // GURMUKHI LETTER NNA
+ { 0x0A24, BIDI_L }, // GURMUKHI LETTER TA
+ { 0x0A25, BIDI_L }, // GURMUKHI LETTER THA
+ { 0x0A26, BIDI_L }, // GURMUKHI LETTER DA
+ { 0x0A27, BIDI_L }, // GURMUKHI LETTER DHA
+ { 0x0A28, BIDI_L }, // GURMUKHI LETTER NA
+ { 0x0A2A, BIDI_L }, // GURMUKHI LETTER PA
+ { 0x0A2B, BIDI_L }, // GURMUKHI LETTER PHA
+ { 0x0A2C, BIDI_L }, // GURMUKHI LETTER BA
+ { 0x0A2D, BIDI_L }, // GURMUKHI LETTER BHA
+ { 0x0A2E, BIDI_L }, // GURMUKHI LETTER MA
+ { 0x0A2F, BIDI_L }, // GURMUKHI LETTER YA
+ { 0x0A30, BIDI_L }, // GURMUKHI LETTER RA
+ { 0x0A32, BIDI_L }, // GURMUKHI LETTER LA
+ { 0x0A33, BIDI_L }, // GURMUKHI LETTER LLA
+ { 0x0A35, BIDI_L }, // GURMUKHI LETTER VA
+ { 0x0A36, BIDI_L }, // GURMUKHI LETTER SHA
+ { 0x0A38, BIDI_L }, // GURMUKHI LETTER SA
+ { 0x0A39, BIDI_L }, // GURMUKHI LETTER HA
+ { 0x0A3C, BIDI_NSM }, // GURMUKHI SIGN NUKTA
+ { 0x0A3E, BIDI_L }, // GURMUKHI VOWEL SIGN AA
+ { 0x0A3F, BIDI_L }, // GURMUKHI VOWEL SIGN I
+ { 0x0A40, BIDI_L }, // GURMUKHI VOWEL SIGN II
+ { 0x0A41, BIDI_NSM }, // GURMUKHI VOWEL SIGN U
+ { 0x0A42, BIDI_NSM }, // GURMUKHI VOWEL SIGN UU
+ { 0x0A47, BIDI_NSM }, // GURMUKHI VOWEL SIGN EE
+ { 0x0A48, BIDI_NSM }, // GURMUKHI VOWEL SIGN AI
+ { 0x0A4B, BIDI_NSM }, // GURMUKHI VOWEL SIGN OO
+ { 0x0A4C, BIDI_NSM }, // GURMUKHI VOWEL SIGN AU
+ { 0x0A4D, BIDI_NSM }, // GURMUKHI SIGN VIRAMA
+ { 0x0A51, BIDI_NSM }, // GURMUKHI SIGN UDAAT
+ { 0x0A59, BIDI_L }, // GURMUKHI LETTER KHHA
+ { 0x0A5A, BIDI_L }, // GURMUKHI LETTER GHHA
+ { 0x0A5B, BIDI_L }, // GURMUKHI LETTER ZA
+ { 0x0A5C, BIDI_L }, // GURMUKHI LETTER RRA
+ { 0x0A5E, BIDI_L }, // GURMUKHI LETTER FA
+ { 0x0A66, BIDI_L }, // GURMUKHI DIGIT ZERO
+ { 0x0A67, BIDI_L }, // GURMUKHI DIGIT ONE
+ { 0x0A68, BIDI_L }, // GURMUKHI DIGIT TWO
+ { 0x0A69, BIDI_L }, // GURMUKHI DIGIT THREE
+ { 0x0A6A, BIDI_L }, // GURMUKHI DIGIT FOUR
+ { 0x0A6B, BIDI_L }, // GURMUKHI DIGIT FIVE
+ { 0x0A6C, BIDI_L }, // GURMUKHI DIGIT SIX
+ { 0x0A6D, BIDI_L }, // GURMUKHI DIGIT SEVEN
+ { 0x0A6E, BIDI_L }, // GURMUKHI DIGIT EIGHT
+ { 0x0A6F, BIDI_L }, // GURMUKHI DIGIT NINE
+ { 0x0A70, BIDI_NSM }, // GURMUKHI TIPPI
+ { 0x0A71, BIDI_NSM }, // GURMUKHI ADDAK
+ { 0x0A72, BIDI_L }, // GURMUKHI IRI
+ { 0x0A73, BIDI_L }, // GURMUKHI URA
+ { 0x0A74, BIDI_L }, // GURMUKHI EK ONKAR
+ { 0x0A75, BIDI_NSM }, // GURMUKHI SIGN YAKASH
+ { 0x0A81, BIDI_NSM }, // GUJARATI SIGN CANDRABINDU
+ { 0x0A82, BIDI_NSM }, // GUJARATI SIGN ANUSVARA
+ { 0x0A83, BIDI_L }, // GUJARATI SIGN VISARGA
+ { 0x0A85, BIDI_L }, // GUJARATI LETTER A
+ { 0x0A86, BIDI_L }, // GUJARATI LETTER AA
+ { 0x0A87, BIDI_L }, // GUJARATI LETTER I
+ { 0x0A88, BIDI_L }, // GUJARATI LETTER II
+ { 0x0A89, BIDI_L }, // GUJARATI LETTER U
+ { 0x0A8A, BIDI_L }, // GUJARATI LETTER UU
+ { 0x0A8B, BIDI_L }, // GUJARATI LETTER VOCALIC R
+ { 0x0A8C, BIDI_L }, // GUJARATI LETTER VOCALIC L
+ { 0x0A8D, BIDI_L }, // GUJARATI VOWEL CANDRA E
+ { 0x0A8F, BIDI_L }, // GUJARATI LETTER E
+ { 0x0A90, BIDI_L }, // GUJARATI LETTER AI
+ { 0x0A91, BIDI_L }, // GUJARATI VOWEL CANDRA O
+ { 0x0A93, BIDI_L }, // GUJARATI LETTER O
+ { 0x0A94, BIDI_L }, // GUJARATI LETTER AU
+ { 0x0A95, BIDI_L }, // GUJARATI LETTER KA
+ { 0x0A96, BIDI_L }, // GUJARATI LETTER KHA
+ { 0x0A97, BIDI_L }, // GUJARATI LETTER GA
+ { 0x0A98, BIDI_L }, // GUJARATI LETTER GHA
+ { 0x0A99, BIDI_L }, // GUJARATI LETTER NGA
+ { 0x0A9A, BIDI_L }, // GUJARATI LETTER CA
+ { 0x0A9B, BIDI_L }, // GUJARATI LETTER CHA
+ { 0x0A9C, BIDI_L }, // GUJARATI LETTER JA
+ { 0x0A9D, BIDI_L }, // GUJARATI LETTER JHA
+ { 0x0A9E, BIDI_L }, // GUJARATI LETTER NYA
+ { 0x0A9F, BIDI_L }, // GUJARATI LETTER TTA
+ { 0x0AA0, BIDI_L }, // GUJARATI LETTER TTHA
+ { 0x0AA1, BIDI_L }, // GUJARATI LETTER DDA
+ { 0x0AA2, BIDI_L }, // GUJARATI LETTER DDHA
+ { 0x0AA3, BIDI_L }, // GUJARATI LETTER NNA
+ { 0x0AA4, BIDI_L }, // GUJARATI LETTER TA
+ { 0x0AA5, BIDI_L }, // GUJARATI LETTER THA
+ { 0x0AA6, BIDI_L }, // GUJARATI LETTER DA
+ { 0x0AA7, BIDI_L }, // GUJARATI LETTER DHA
+ { 0x0AA8, BIDI_L }, // GUJARATI LETTER NA
+ { 0x0AAA, BIDI_L }, // GUJARATI LETTER PA
+ { 0x0AAB, BIDI_L }, // GUJARATI LETTER PHA
+ { 0x0AAC, BIDI_L }, // GUJARATI LETTER BA
+ { 0x0AAD, BIDI_L }, // GUJARATI LETTER BHA
+ { 0x0AAE, BIDI_L }, // GUJARATI LETTER MA
+ { 0x0AAF, BIDI_L }, // GUJARATI LETTER YA
+ { 0x0AB0, BIDI_L }, // GUJARATI LETTER RA
+ { 0x0AB2, BIDI_L }, // GUJARATI LETTER LA
+ { 0x0AB3, BIDI_L }, // GUJARATI LETTER LLA
+ { 0x0AB5, BIDI_L }, // GUJARATI LETTER VA
+ { 0x0AB6, BIDI_L }, // GUJARATI LETTER SHA
+ { 0x0AB7, BIDI_L }, // GUJARATI LETTER SSA
+ { 0x0AB8, BIDI_L }, // GUJARATI LETTER SA
+ { 0x0AB9, BIDI_L }, // GUJARATI LETTER HA
+ { 0x0ABC, BIDI_NSM }, // GUJARATI SIGN NUKTA
+ { 0x0ABD, BIDI_L }, // GUJARATI SIGN AVAGRAHA
+ { 0x0ABE, BIDI_L }, // GUJARATI VOWEL SIGN AA
+ { 0x0ABF, BIDI_L }, // GUJARATI VOWEL SIGN I
+ { 0x0AC0, BIDI_L }, // GUJARATI VOWEL SIGN II
+ { 0x0AC1, BIDI_NSM }, // GUJARATI VOWEL SIGN U
+ { 0x0AC2, BIDI_NSM }, // GUJARATI VOWEL SIGN UU
+ { 0x0AC3, BIDI_NSM }, // GUJARATI VOWEL SIGN VOCALIC R
+ { 0x0AC4, BIDI_NSM }, // GUJARATI VOWEL SIGN VOCALIC RR
+ { 0x0AC5, BIDI_NSM }, // GUJARATI VOWEL SIGN CANDRA E
+ { 0x0AC7, BIDI_NSM }, // GUJARATI VOWEL SIGN E
+ { 0x0AC8, BIDI_NSM }, // GUJARATI VOWEL SIGN AI
+ { 0x0AC9, BIDI_L }, // GUJARATI VOWEL SIGN CANDRA O
+ { 0x0ACB, BIDI_L }, // GUJARATI VOWEL SIGN O
+ { 0x0ACC, BIDI_L }, // GUJARATI VOWEL SIGN AU
+ { 0x0ACD, BIDI_NSM }, // GUJARATI SIGN VIRAMA
+ { 0x0AD0, BIDI_L }, // GUJARATI OM
+ { 0x0AE0, BIDI_L }, // GUJARATI LETTER VOCALIC RR
+ { 0x0AE1, BIDI_L }, // GUJARATI LETTER VOCALIC LL
+ { 0x0AE2, BIDI_NSM }, // GUJARATI VOWEL SIGN VOCALIC L
+ { 0x0AE3, BIDI_NSM }, // GUJARATI VOWEL SIGN VOCALIC LL
+ { 0x0AE6, BIDI_L }, // GUJARATI DIGIT ZERO
+ { 0x0AE7, BIDI_L }, // GUJARATI DIGIT ONE
+ { 0x0AE8, BIDI_L }, // GUJARATI DIGIT TWO
+ { 0x0AE9, BIDI_L }, // GUJARATI DIGIT THREE
+ { 0x0AEA, BIDI_L }, // GUJARATI DIGIT FOUR
+ { 0x0AEB, BIDI_L }, // GUJARATI DIGIT FIVE
+ { 0x0AEC, BIDI_L }, // GUJARATI DIGIT SIX
+ { 0x0AED, BIDI_L }, // GUJARATI DIGIT SEVEN
+ { 0x0AEE, BIDI_L }, // GUJARATI DIGIT EIGHT
+ { 0x0AEF, BIDI_L }, // GUJARATI DIGIT NINE
+ { 0x0AF0, BIDI_L }, // GUJARATI ABBREVIATION SIGN
+ { 0x0AF1, BIDI_ET }, // GUJARATI RUPEE SIGN
+ { 0x0AF9, BIDI_L }, // GUJARATI LETTER ZHA
+ { 0x0B01, BIDI_NSM }, // ORIYA SIGN CANDRABINDU
+ { 0x0B02, BIDI_L }, // ORIYA SIGN ANUSVARA
+ { 0x0B03, BIDI_L }, // ORIYA SIGN VISARGA
+ { 0x0B05, BIDI_L }, // ORIYA LETTER A
+ { 0x0B06, BIDI_L }, // ORIYA LETTER AA
+ { 0x0B07, BIDI_L }, // ORIYA LETTER I
+ { 0x0B08, BIDI_L }, // ORIYA LETTER II
+ { 0x0B09, BIDI_L }, // ORIYA LETTER U
+ { 0x0B0A, BIDI_L }, // ORIYA LETTER UU
+ { 0x0B0B, BIDI_L }, // ORIYA LETTER VOCALIC R
+ { 0x0B0C, BIDI_L }, // ORIYA LETTER VOCALIC L
+ { 0x0B0F, BIDI_L }, // ORIYA LETTER E
+ { 0x0B10, BIDI_L }, // ORIYA LETTER AI
+ { 0x0B13, BIDI_L }, // ORIYA LETTER O
+ { 0x0B14, BIDI_L }, // ORIYA LETTER AU
+ { 0x0B15, BIDI_L }, // ORIYA LETTER KA
+ { 0x0B16, BIDI_L }, // ORIYA LETTER KHA
+ { 0x0B17, BIDI_L }, // ORIYA LETTER GA
+ { 0x0B18, BIDI_L }, // ORIYA LETTER GHA
+ { 0x0B19, BIDI_L }, // ORIYA LETTER NGA
+ { 0x0B1A, BIDI_L }, // ORIYA LETTER CA
+ { 0x0B1B, BIDI_L }, // ORIYA LETTER CHA
+ { 0x0B1C, BIDI_L }, // ORIYA LETTER JA
+ { 0x0B1D, BIDI_L }, // ORIYA LETTER JHA
+ { 0x0B1E, BIDI_L }, // ORIYA LETTER NYA
+ { 0x0B1F, BIDI_L }, // ORIYA LETTER TTA
+ { 0x0B20, BIDI_L }, // ORIYA LETTER TTHA
+ { 0x0B21, BIDI_L }, // ORIYA LETTER DDA
+ { 0x0B22, BIDI_L }, // ORIYA LETTER DDHA
+ { 0x0B23, BIDI_L }, // ORIYA LETTER NNA
+ { 0x0B24, BIDI_L }, // ORIYA LETTER TA
+ { 0x0B25, BIDI_L }, // ORIYA LETTER THA
+ { 0x0B26, BIDI_L }, // ORIYA LETTER DA
+ { 0x0B27, BIDI_L }, // ORIYA LETTER DHA
+ { 0x0B28, BIDI_L }, // ORIYA LETTER NA
+ { 0x0B2A, BIDI_L }, // ORIYA LETTER PA
+ { 0x0B2B, BIDI_L }, // ORIYA LETTER PHA
+ { 0x0B2C, BIDI_L }, // ORIYA LETTER BA
+ { 0x0B2D, BIDI_L }, // ORIYA LETTER BHA
+ { 0x0B2E, BIDI_L }, // ORIYA LETTER MA
+ { 0x0B2F, BIDI_L }, // ORIYA LETTER YA
+ { 0x0B30, BIDI_L }, // ORIYA LETTER RA
+ { 0x0B32, BIDI_L }, // ORIYA LETTER LA
+ { 0x0B33, BIDI_L }, // ORIYA LETTER LLA
+ { 0x0B35, BIDI_L }, // ORIYA LETTER VA
+ { 0x0B36, BIDI_L }, // ORIYA LETTER SHA
+ { 0x0B37, BIDI_L }, // ORIYA LETTER SSA
+ { 0x0B38, BIDI_L }, // ORIYA LETTER SA
+ { 0x0B39, BIDI_L }, // ORIYA LETTER HA
+ { 0x0B3C, BIDI_NSM }, // ORIYA SIGN NUKTA
+ { 0x0B3D, BIDI_L }, // ORIYA SIGN AVAGRAHA
+ { 0x0B3E, BIDI_L }, // ORIYA VOWEL SIGN AA
+ { 0x0B3F, BIDI_NSM }, // ORIYA VOWEL SIGN I
+ { 0x0B40, BIDI_L }, // ORIYA VOWEL SIGN II
+ { 0x0B41, BIDI_NSM }, // ORIYA VOWEL SIGN U
+ { 0x0B42, BIDI_NSM }, // ORIYA VOWEL SIGN UU
+ { 0x0B43, BIDI_NSM }, // ORIYA VOWEL SIGN VOCALIC R
+ { 0x0B44, BIDI_NSM }, // ORIYA VOWEL SIGN VOCALIC RR
+ { 0x0B47, BIDI_L }, // ORIYA VOWEL SIGN E
+ { 0x0B48, BIDI_L }, // ORIYA VOWEL SIGN AI
+ { 0x0B4B, BIDI_L }, // ORIYA VOWEL SIGN O
+ { 0x0B4C, BIDI_L }, // ORIYA VOWEL SIGN AU
+ { 0x0B4D, BIDI_NSM }, // ORIYA SIGN VIRAMA
+ { 0x0B56, BIDI_NSM }, // ORIYA AI LENGTH MARK
+ { 0x0B57, BIDI_L }, // ORIYA AU LENGTH MARK
+ { 0x0B5C, BIDI_L }, // ORIYA LETTER RRA
+ { 0x0B5D, BIDI_L }, // ORIYA LETTER RHA
+ { 0x0B5F, BIDI_L }, // ORIYA LETTER YYA
+ { 0x0B60, BIDI_L }, // ORIYA LETTER VOCALIC RR
+ { 0x0B61, BIDI_L }, // ORIYA LETTER VOCALIC LL
+ { 0x0B62, BIDI_NSM }, // ORIYA VOWEL SIGN VOCALIC L
+ { 0x0B63, BIDI_NSM }, // ORIYA VOWEL SIGN VOCALIC LL
+ { 0x0B66, BIDI_L }, // ORIYA DIGIT ZERO
+ { 0x0B67, BIDI_L }, // ORIYA DIGIT ONE
+ { 0x0B68, BIDI_L }, // ORIYA DIGIT TWO
+ { 0x0B69, BIDI_L }, // ORIYA DIGIT THREE
+ { 0x0B6A, BIDI_L }, // ORIYA DIGIT FOUR
+ { 0x0B6B, BIDI_L }, // ORIYA DIGIT FIVE
+ { 0x0B6C, BIDI_L }, // ORIYA DIGIT SIX
+ { 0x0B6D, BIDI_L }, // ORIYA DIGIT SEVEN
+ { 0x0B6E, BIDI_L }, // ORIYA DIGIT EIGHT
+ { 0x0B6F, BIDI_L }, // ORIYA DIGIT NINE
+ { 0x0B70, BIDI_L }, // ORIYA ISSHAR
+ { 0x0B71, BIDI_L }, // ORIYA LETTER WA
+ { 0x0B72, BIDI_L }, // ORIYA FRACTION ONE QUARTER
+ { 0x0B73, BIDI_L }, // ORIYA FRACTION ONE HALF
+ { 0x0B74, BIDI_L }, // ORIYA FRACTION THREE QUARTERS
+ { 0x0B75, BIDI_L }, // ORIYA FRACTION ONE SIXTEENTH
+ { 0x0B76, BIDI_L }, // ORIYA FRACTION ONE EIGHTH
+ { 0x0B77, BIDI_L }, // ORIYA FRACTION THREE SIXTEENTHS
+ { 0x0B82, BIDI_NSM }, // TAMIL SIGN ANUSVARA
+ { 0x0B83, BIDI_L }, // TAMIL SIGN VISARGA
+ { 0x0B85, BIDI_L }, // TAMIL LETTER A
+ { 0x0B86, BIDI_L }, // TAMIL LETTER AA
+ { 0x0B87, BIDI_L }, // TAMIL LETTER I
+ { 0x0B88, BIDI_L }, // TAMIL LETTER II
+ { 0x0B89, BIDI_L }, // TAMIL LETTER U
+ { 0x0B8A, BIDI_L }, // TAMIL LETTER UU
+ { 0x0B8E, BIDI_L }, // TAMIL LETTER E
+ { 0x0B8F, BIDI_L }, // TAMIL LETTER EE
+ { 0x0B90, BIDI_L }, // TAMIL LETTER AI
+ { 0x0B92, BIDI_L }, // TAMIL LETTER O
+ { 0x0B93, BIDI_L }, // TAMIL LETTER OO
+ { 0x0B94, BIDI_L }, // TAMIL LETTER AU
+ { 0x0B95, BIDI_L }, // TAMIL LETTER KA
+ { 0x0B99, BIDI_L }, // TAMIL LETTER NGA
+ { 0x0B9A, BIDI_L }, // TAMIL LETTER CA
+ { 0x0B9C, BIDI_L }, // TAMIL LETTER JA
+ { 0x0B9E, BIDI_L }, // TAMIL LETTER NYA
+ { 0x0B9F, BIDI_L }, // TAMIL LETTER TTA
+ { 0x0BA3, BIDI_L }, // TAMIL LETTER NNA
+ { 0x0BA4, BIDI_L }, // TAMIL LETTER TA
+ { 0x0BA8, BIDI_L }, // TAMIL LETTER NA
+ { 0x0BA9, BIDI_L }, // TAMIL LETTER NNNA
+ { 0x0BAA, BIDI_L }, // TAMIL LETTER PA
+ { 0x0BAE, BIDI_L }, // TAMIL LETTER MA
+ { 0x0BAF, BIDI_L }, // TAMIL LETTER YA
+ { 0x0BB0, BIDI_L }, // TAMIL LETTER RA
+ { 0x0BB1, BIDI_L }, // TAMIL LETTER RRA
+ { 0x0BB2, BIDI_L }, // TAMIL LETTER LA
+ { 0x0BB3, BIDI_L }, // TAMIL LETTER LLA
+ { 0x0BB4, BIDI_L }, // TAMIL LETTER LLLA
+ { 0x0BB5, BIDI_L }, // TAMIL LETTER VA
+ { 0x0BB6, BIDI_L }, // TAMIL LETTER SHA
+ { 0x0BB7, BIDI_L }, // TAMIL LETTER SSA
+ { 0x0BB8, BIDI_L }, // TAMIL LETTER SA
+ { 0x0BB9, BIDI_L }, // TAMIL LETTER HA
+ { 0x0BBE, BIDI_L }, // TAMIL VOWEL SIGN AA
+ { 0x0BBF, BIDI_L }, // TAMIL VOWEL SIGN I
+ { 0x0BC0, BIDI_NSM }, // TAMIL VOWEL SIGN II
+ { 0x0BC1, BIDI_L }, // TAMIL VOWEL SIGN U
+ { 0x0BC2, BIDI_L }, // TAMIL VOWEL SIGN UU
+ { 0x0BC6, BIDI_L }, // TAMIL VOWEL SIGN E
+ { 0x0BC7, BIDI_L }, // TAMIL VOWEL SIGN EE
+ { 0x0BC8, BIDI_L }, // TAMIL VOWEL SIGN AI
+ { 0x0BCA, BIDI_L }, // TAMIL VOWEL SIGN O
+ { 0x0BCB, BIDI_L }, // TAMIL VOWEL SIGN OO
+ { 0x0BCC, BIDI_L }, // TAMIL VOWEL SIGN AU
+ { 0x0BCD, BIDI_NSM }, // TAMIL SIGN VIRAMA
+ { 0x0BD0, BIDI_L }, // TAMIL OM
+ { 0x0BD7, BIDI_L }, // TAMIL AU LENGTH MARK
+ { 0x0BE6, BIDI_L }, // TAMIL DIGIT ZERO
+ { 0x0BE7, BIDI_L }, // TAMIL DIGIT ONE
+ { 0x0BE8, BIDI_L }, // TAMIL DIGIT TWO
+ { 0x0BE9, BIDI_L }, // TAMIL DIGIT THREE
+ { 0x0BEA, BIDI_L }, // TAMIL DIGIT FOUR
+ { 0x0BEB, BIDI_L }, // TAMIL DIGIT FIVE
+ { 0x0BEC, BIDI_L }, // TAMIL DIGIT SIX
+ { 0x0BED, BIDI_L }, // TAMIL DIGIT SEVEN
+ { 0x0BEE, BIDI_L }, // TAMIL DIGIT EIGHT
+ { 0x0BEF, BIDI_L }, // TAMIL DIGIT NINE
+ { 0x0BF0, BIDI_L }, // TAMIL NUMBER TEN
+ { 0x0BF1, BIDI_L }, // TAMIL NUMBER ONE HUNDRED
+ { 0x0BF2, BIDI_L }, // TAMIL NUMBER ONE THOUSAND
+ { 0x0BF3, BIDI_ON }, // TAMIL DAY SIGN
+ { 0x0BF4, BIDI_ON }, // TAMIL MONTH SIGN
+ { 0x0BF5, BIDI_ON }, // TAMIL YEAR SIGN
+ { 0x0BF6, BIDI_ON }, // TAMIL DEBIT SIGN
+ { 0x0BF7, BIDI_ON }, // TAMIL CREDIT SIGN
+ { 0x0BF8, BIDI_ON }, // TAMIL AS ABOVE SIGN
+ { 0x0BF9, BIDI_ET }, // TAMIL RUPEE SIGN
+ { 0x0BFA, BIDI_ON }, // TAMIL NUMBER SIGN
+ { 0x0C00, BIDI_NSM }, // TELUGU SIGN COMBINING CANDRABINDU ABOVE
+ { 0x0C01, BIDI_L }, // TELUGU SIGN CANDRABINDU
+ { 0x0C02, BIDI_L }, // TELUGU SIGN ANUSVARA
+ { 0x0C03, BIDI_L }, // TELUGU SIGN VISARGA
+ { 0x0C05, BIDI_L }, // TELUGU LETTER A
+ { 0x0C06, BIDI_L }, // TELUGU LETTER AA
+ { 0x0C07, BIDI_L }, // TELUGU LETTER I
+ { 0x0C08, BIDI_L }, // TELUGU LETTER II
+ { 0x0C09, BIDI_L }, // TELUGU LETTER U
+ { 0x0C0A, BIDI_L }, // TELUGU LETTER UU
+ { 0x0C0B, BIDI_L }, // TELUGU LETTER VOCALIC R
+ { 0x0C0C, BIDI_L }, // TELUGU LETTER VOCALIC L
+ { 0x0C0E, BIDI_L }, // TELUGU LETTER E
+ { 0x0C0F, BIDI_L }, // TELUGU LETTER EE
+ { 0x0C10, BIDI_L }, // TELUGU LETTER AI
+ { 0x0C12, BIDI_L }, // TELUGU LETTER O
+ { 0x0C13, BIDI_L }, // TELUGU LETTER OO
+ { 0x0C14, BIDI_L }, // TELUGU LETTER AU
+ { 0x0C15, BIDI_L }, // TELUGU LETTER KA
+ { 0x0C16, BIDI_L }, // TELUGU LETTER KHA
+ { 0x0C17, BIDI_L }, // TELUGU LETTER GA
+ { 0x0C18, BIDI_L }, // TELUGU LETTER GHA
+ { 0x0C19, BIDI_L }, // TELUGU LETTER NGA
+ { 0x0C1A, BIDI_L }, // TELUGU LETTER CA
+ { 0x0C1B, BIDI_L }, // TELUGU LETTER CHA
+ { 0x0C1C, BIDI_L }, // TELUGU LETTER JA
+ { 0x0C1D, BIDI_L }, // TELUGU LETTER JHA
+ { 0x0C1E, BIDI_L }, // TELUGU LETTER NYA
+ { 0x0C1F, BIDI_L }, // TELUGU LETTER TTA
+ { 0x0C20, BIDI_L }, // TELUGU LETTER TTHA
+ { 0x0C21, BIDI_L }, // TELUGU LETTER DDA
+ { 0x0C22, BIDI_L }, // TELUGU LETTER DDHA
+ { 0x0C23, BIDI_L }, // TELUGU LETTER NNA
+ { 0x0C24, BIDI_L }, // TELUGU LETTER TA
+ { 0x0C25, BIDI_L }, // TELUGU LETTER THA
+ { 0x0C26, BIDI_L }, // TELUGU LETTER DA
+ { 0x0C27, BIDI_L }, // TELUGU LETTER DHA
+ { 0x0C28, BIDI_L }, // TELUGU LETTER NA
+ { 0x0C2A, BIDI_L }, // TELUGU LETTER PA
+ { 0x0C2B, BIDI_L }, // TELUGU LETTER PHA
+ { 0x0C2C, BIDI_L }, // TELUGU LETTER BA
+ { 0x0C2D, BIDI_L }, // TELUGU LETTER BHA
+ { 0x0C2E, BIDI_L }, // TELUGU LETTER MA
+ { 0x0C2F, BIDI_L }, // TELUGU LETTER YA
+ { 0x0C30, BIDI_L }, // TELUGU LETTER RA
+ { 0x0C31, BIDI_L }, // TELUGU LETTER RRA
+ { 0x0C32, BIDI_L }, // TELUGU LETTER LA
+ { 0x0C33, BIDI_L }, // TELUGU LETTER LLA
+ { 0x0C34, BIDI_L }, // TELUGU LETTER LLLA
+ { 0x0C35, BIDI_L }, // TELUGU LETTER VA
+ { 0x0C36, BIDI_L }, // TELUGU LETTER SHA
+ { 0x0C37, BIDI_L }, // TELUGU LETTER SSA
+ { 0x0C38, BIDI_L }, // TELUGU LETTER SA
+ { 0x0C39, BIDI_L }, // TELUGU LETTER HA
+ { 0x0C3D, BIDI_L }, // TELUGU SIGN AVAGRAHA
+ { 0x0C3E, BIDI_NSM }, // TELUGU VOWEL SIGN AA
+ { 0x0C3F, BIDI_NSM }, // TELUGU VOWEL SIGN I
+ { 0x0C40, BIDI_NSM }, // TELUGU VOWEL SIGN II
+ { 0x0C41, BIDI_L }, // TELUGU VOWEL SIGN U
+ { 0x0C42, BIDI_L }, // TELUGU VOWEL SIGN UU
+ { 0x0C43, BIDI_L }, // TELUGU VOWEL SIGN VOCALIC R
+ { 0x0C44, BIDI_L }, // TELUGU VOWEL SIGN VOCALIC RR
+ { 0x0C46, BIDI_NSM }, // TELUGU VOWEL SIGN E
+ { 0x0C47, BIDI_NSM }, // TELUGU VOWEL SIGN EE
+ { 0x0C48, BIDI_NSM }, // TELUGU VOWEL SIGN AI
+ { 0x0C4A, BIDI_NSM }, // TELUGU VOWEL SIGN O
+ { 0x0C4B, BIDI_NSM }, // TELUGU VOWEL SIGN OO
+ { 0x0C4C, BIDI_NSM }, // TELUGU VOWEL SIGN AU
+ { 0x0C4D, BIDI_NSM }, // TELUGU SIGN VIRAMA
+ { 0x0C55, BIDI_NSM }, // TELUGU LENGTH MARK
+ { 0x0C56, BIDI_NSM }, // TELUGU AI LENGTH MARK
+ { 0x0C58, BIDI_L }, // TELUGU LETTER TSA
+ { 0x0C59, BIDI_L }, // TELUGU LETTER DZA
+ { 0x0C5A, BIDI_L }, // TELUGU LETTER RRRA
+ { 0x0C60, BIDI_L }, // TELUGU LETTER VOCALIC RR
+ { 0x0C61, BIDI_L }, // TELUGU LETTER VOCALIC LL
+ { 0x0C62, BIDI_NSM }, // TELUGU VOWEL SIGN VOCALIC L
+ { 0x0C63, BIDI_NSM }, // TELUGU VOWEL SIGN VOCALIC LL
+ { 0x0C66, BIDI_L }, // TELUGU DIGIT ZERO
+ { 0x0C67, BIDI_L }, // TELUGU DIGIT ONE
+ { 0x0C68, BIDI_L }, // TELUGU DIGIT TWO
+ { 0x0C69, BIDI_L }, // TELUGU DIGIT THREE
+ { 0x0C6A, BIDI_L }, // TELUGU DIGIT FOUR
+ { 0x0C6B, BIDI_L }, // TELUGU DIGIT FIVE
+ { 0x0C6C, BIDI_L }, // TELUGU DIGIT SIX
+ { 0x0C6D, BIDI_L }, // TELUGU DIGIT SEVEN
+ { 0x0C6E, BIDI_L }, // TELUGU DIGIT EIGHT
+ { 0x0C6F, BIDI_L }, // TELUGU DIGIT NINE
+ { 0x0C78, BIDI_ON }, // TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR
+ { 0x0C79, BIDI_ON }, // TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR
+ { 0x0C7A, BIDI_ON }, // TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR
+ { 0x0C7B, BIDI_ON }, // TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR
+ { 0x0C7C, BIDI_ON }, // TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR
+ { 0x0C7D, BIDI_ON }, // TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR
+ { 0x0C7E, BIDI_ON }, // TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+ { 0x0C7F, BIDI_L }, // TELUGU SIGN TUUMU
+ { 0x0C81, BIDI_NSM }, // KANNADA SIGN CANDRABINDU
+ { 0x0C82, BIDI_L }, // KANNADA SIGN ANUSVARA
+ { 0x0C83, BIDI_L }, // KANNADA SIGN VISARGA
+ { 0x0C85, BIDI_L }, // KANNADA LETTER A
+ { 0x0C86, BIDI_L }, // KANNADA LETTER AA
+ { 0x0C87, BIDI_L }, // KANNADA LETTER I
+ { 0x0C88, BIDI_L }, // KANNADA LETTER II
+ { 0x0C89, BIDI_L }, // KANNADA LETTER U
+ { 0x0C8A, BIDI_L }, // KANNADA LETTER UU
+ { 0x0C8B, BIDI_L }, // KANNADA LETTER VOCALIC R
+ { 0x0C8C, BIDI_L }, // KANNADA LETTER VOCALIC L
+ { 0x0C8E, BIDI_L }, // KANNADA LETTER E
+ { 0x0C8F, BIDI_L }, // KANNADA LETTER EE
+ { 0x0C90, BIDI_L }, // KANNADA LETTER AI
+ { 0x0C92, BIDI_L }, // KANNADA LETTER O
+ { 0x0C93, BIDI_L }, // KANNADA LETTER OO
+ { 0x0C94, BIDI_L }, // KANNADA LETTER AU
+ { 0x0C95, BIDI_L }, // KANNADA LETTER KA
+ { 0x0C96, BIDI_L }, // KANNADA LETTER KHA
+ { 0x0C97, BIDI_L }, // KANNADA LETTER GA
+ { 0x0C98, BIDI_L }, // KANNADA LETTER GHA
+ { 0x0C99, BIDI_L }, // KANNADA LETTER NGA
+ { 0x0C9A, BIDI_L }, // KANNADA LETTER CA
+ { 0x0C9B, BIDI_L }, // KANNADA LETTER CHA
+ { 0x0C9C, BIDI_L }, // KANNADA LETTER JA
+ { 0x0C9D, BIDI_L }, // KANNADA LETTER JHA
+ { 0x0C9E, BIDI_L }, // KANNADA LETTER NYA
+ { 0x0C9F, BIDI_L }, // KANNADA LETTER TTA
+ { 0x0CA0, BIDI_L }, // KANNADA LETTER TTHA
+ { 0x0CA1, BIDI_L }, // KANNADA LETTER DDA
+ { 0x0CA2, BIDI_L }, // KANNADA LETTER DDHA
+ { 0x0CA3, BIDI_L }, // KANNADA LETTER NNA
+ { 0x0CA4, BIDI_L }, // KANNADA LETTER TA
+ { 0x0CA5, BIDI_L }, // KANNADA LETTER THA
+ { 0x0CA6, BIDI_L }, // KANNADA LETTER DA
+ { 0x0CA7, BIDI_L }, // KANNADA LETTER DHA
+ { 0x0CA8, BIDI_L }, // KANNADA LETTER NA
+ { 0x0CAA, BIDI_L }, // KANNADA LETTER PA
+ { 0x0CAB, BIDI_L }, // KANNADA LETTER PHA
+ { 0x0CAC, BIDI_L }, // KANNADA LETTER BA
+ { 0x0CAD, BIDI_L }, // KANNADA LETTER BHA
+ { 0x0CAE, BIDI_L }, // KANNADA LETTER MA
+ { 0x0CAF, BIDI_L }, // KANNADA LETTER YA
+ { 0x0CB0, BIDI_L }, // KANNADA LETTER RA
+ { 0x0CB1, BIDI_L }, // KANNADA LETTER RRA
+ { 0x0CB2, BIDI_L }, // KANNADA LETTER LA
+ { 0x0CB3, BIDI_L }, // KANNADA LETTER LLA
+ { 0x0CB5, BIDI_L }, // KANNADA LETTER VA
+ { 0x0CB6, BIDI_L }, // KANNADA LETTER SHA
+ { 0x0CB7, BIDI_L }, // KANNADA LETTER SSA
+ { 0x0CB8, BIDI_L }, // KANNADA LETTER SA
+ { 0x0CB9, BIDI_L }, // KANNADA LETTER HA
+ { 0x0CBC, BIDI_NSM }, // KANNADA SIGN NUKTA
+ { 0x0CBD, BIDI_L }, // KANNADA SIGN AVAGRAHA
+ { 0x0CBE, BIDI_L }, // KANNADA VOWEL SIGN AA
+ { 0x0CBF, BIDI_L }, // KANNADA VOWEL SIGN I
+ { 0x0CC0, BIDI_L }, // KANNADA VOWEL SIGN II
+ { 0x0CC1, BIDI_L }, // KANNADA VOWEL SIGN U
+ { 0x0CC2, BIDI_L }, // KANNADA VOWEL SIGN UU
+ { 0x0CC3, BIDI_L }, // KANNADA VOWEL SIGN VOCALIC R
+ { 0x0CC4, BIDI_L }, // KANNADA VOWEL SIGN VOCALIC RR
+ { 0x0CC6, BIDI_L }, // KANNADA VOWEL SIGN E
+ { 0x0CC7, BIDI_L }, // KANNADA VOWEL SIGN EE
+ { 0x0CC8, BIDI_L }, // KANNADA VOWEL SIGN AI
+ { 0x0CCA, BIDI_L }, // KANNADA VOWEL SIGN O
+ { 0x0CCB, BIDI_L }, // KANNADA VOWEL SIGN OO
+ { 0x0CCC, BIDI_NSM }, // KANNADA VOWEL SIGN AU
+ { 0x0CCD, BIDI_NSM }, // KANNADA SIGN VIRAMA
+ { 0x0CD5, BIDI_L }, // KANNADA LENGTH MARK
+ { 0x0CD6, BIDI_L }, // KANNADA AI LENGTH MARK
+ { 0x0CDE, BIDI_L }, // KANNADA LETTER FA
+ { 0x0CE0, BIDI_L }, // KANNADA LETTER VOCALIC RR
+ { 0x0CE1, BIDI_L }, // KANNADA LETTER VOCALIC LL
+ { 0x0CE2, BIDI_NSM }, // KANNADA VOWEL SIGN VOCALIC L
+ { 0x0CE3, BIDI_NSM }, // KANNADA VOWEL SIGN VOCALIC LL
+ { 0x0CE6, BIDI_L }, // KANNADA DIGIT ZERO
+ { 0x0CE7, BIDI_L }, // KANNADA DIGIT ONE
+ { 0x0CE8, BIDI_L }, // KANNADA DIGIT TWO
+ { 0x0CE9, BIDI_L }, // KANNADA DIGIT THREE
+ { 0x0CEA, BIDI_L }, // KANNADA DIGIT FOUR
+ { 0x0CEB, BIDI_L }, // KANNADA DIGIT FIVE
+ { 0x0CEC, BIDI_L }, // KANNADA DIGIT SIX
+ { 0x0CED, BIDI_L }, // KANNADA DIGIT SEVEN
+ { 0x0CEE, BIDI_L }, // KANNADA DIGIT EIGHT
+ { 0x0CEF, BIDI_L }, // KANNADA DIGIT NINE
+ { 0x0CF1, BIDI_L }, // KANNADA SIGN JIHVAMULIYA
+ { 0x0CF2, BIDI_L }, // KANNADA SIGN UPADHMANIYA
+ { 0x0D01, BIDI_NSM }, // MALAYALAM SIGN CANDRABINDU
+ { 0x0D02, BIDI_L }, // MALAYALAM SIGN ANUSVARA
+ { 0x0D03, BIDI_L }, // MALAYALAM SIGN VISARGA
+ { 0x0D05, BIDI_L }, // MALAYALAM LETTER A
+ { 0x0D06, BIDI_L }, // MALAYALAM LETTER AA
+ { 0x0D07, BIDI_L }, // MALAYALAM LETTER I
+ { 0x0D08, BIDI_L }, // MALAYALAM LETTER II
+ { 0x0D09, BIDI_L }, // MALAYALAM LETTER U
+ { 0x0D0A, BIDI_L }, // MALAYALAM LETTER UU
+ { 0x0D0B, BIDI_L }, // MALAYALAM LETTER VOCALIC R
+ { 0x0D0C, BIDI_L }, // MALAYALAM LETTER VOCALIC L
+ { 0x0D0E, BIDI_L }, // MALAYALAM LETTER E
+ { 0x0D0F, BIDI_L }, // MALAYALAM LETTER EE
+ { 0x0D10, BIDI_L }, // MALAYALAM LETTER AI
+ { 0x0D12, BIDI_L }, // MALAYALAM LETTER O
+ { 0x0D13, BIDI_L }, // MALAYALAM LETTER OO
+ { 0x0D14, BIDI_L }, // MALAYALAM LETTER AU
+ { 0x0D15, BIDI_L }, // MALAYALAM LETTER KA
+ { 0x0D16, BIDI_L }, // MALAYALAM LETTER KHA
+ { 0x0D17, BIDI_L }, // MALAYALAM LETTER GA
+ { 0x0D18, BIDI_L }, // MALAYALAM LETTER GHA
+ { 0x0D19, BIDI_L }, // MALAYALAM LETTER NGA
+ { 0x0D1A, BIDI_L }, // MALAYALAM LETTER CA
+ { 0x0D1B, BIDI_L }, // MALAYALAM LETTER CHA
+ { 0x0D1C, BIDI_L }, // MALAYALAM LETTER JA
+ { 0x0D1D, BIDI_L }, // MALAYALAM LETTER JHA
+ { 0x0D1E, BIDI_L }, // MALAYALAM LETTER NYA
+ { 0x0D1F, BIDI_L }, // MALAYALAM LETTER TTA
+ { 0x0D20, BIDI_L }, // MALAYALAM LETTER TTHA
+ { 0x0D21, BIDI_L }, // MALAYALAM LETTER DDA
+ { 0x0D22, BIDI_L }, // MALAYALAM LETTER DDHA
+ { 0x0D23, BIDI_L }, // MALAYALAM LETTER NNA
+ { 0x0D24, BIDI_L }, // MALAYALAM LETTER TA
+ { 0x0D25, BIDI_L }, // MALAYALAM LETTER THA
+ { 0x0D26, BIDI_L }, // MALAYALAM LETTER DA
+ { 0x0D27, BIDI_L }, // MALAYALAM LETTER DHA
+ { 0x0D28, BIDI_L }, // MALAYALAM LETTER NA
+ { 0x0D29, BIDI_L }, // MALAYALAM LETTER NNNA
+ { 0x0D2A, BIDI_L }, // MALAYALAM LETTER PA
+ { 0x0D2B, BIDI_L }, // MALAYALAM LETTER PHA
+ { 0x0D2C, BIDI_L }, // MALAYALAM LETTER BA
+ { 0x0D2D, BIDI_L }, // MALAYALAM LETTER BHA
+ { 0x0D2E, BIDI_L }, // MALAYALAM LETTER MA
+ { 0x0D2F, BIDI_L }, // MALAYALAM LETTER YA
+ { 0x0D30, BIDI_L }, // MALAYALAM LETTER RA
+ { 0x0D31, BIDI_L }, // MALAYALAM LETTER RRA
+ { 0x0D32, BIDI_L }, // MALAYALAM LETTER LA
+ { 0x0D33, BIDI_L }, // MALAYALAM LETTER LLA
+ { 0x0D34, BIDI_L }, // MALAYALAM LETTER LLLA
+ { 0x0D35, BIDI_L }, // MALAYALAM LETTER VA
+ { 0x0D36, BIDI_L }, // MALAYALAM LETTER SHA
+ { 0x0D37, BIDI_L }, // MALAYALAM LETTER SSA
+ { 0x0D38, BIDI_L }, // MALAYALAM LETTER SA
+ { 0x0D39, BIDI_L }, // MALAYALAM LETTER HA
+ { 0x0D3A, BIDI_L }, // MALAYALAM LETTER TTTA
+ { 0x0D3D, BIDI_L }, // MALAYALAM SIGN AVAGRAHA
+ { 0x0D3E, BIDI_L }, // MALAYALAM VOWEL SIGN AA
+ { 0x0D3F, BIDI_L }, // MALAYALAM VOWEL SIGN I
+ { 0x0D40, BIDI_L }, // MALAYALAM VOWEL SIGN II
+ { 0x0D41, BIDI_NSM }, // MALAYALAM VOWEL SIGN U
+ { 0x0D42, BIDI_NSM }, // MALAYALAM VOWEL SIGN UU
+ { 0x0D43, BIDI_NSM }, // MALAYALAM VOWEL SIGN VOCALIC R
+ { 0x0D44, BIDI_NSM }, // MALAYALAM VOWEL SIGN VOCALIC RR
+ { 0x0D46, BIDI_L }, // MALAYALAM VOWEL SIGN E
+ { 0x0D47, BIDI_L }, // MALAYALAM VOWEL SIGN EE
+ { 0x0D48, BIDI_L }, // MALAYALAM VOWEL SIGN AI
+ { 0x0D4A, BIDI_L }, // MALAYALAM VOWEL SIGN O
+ { 0x0D4B, BIDI_L }, // MALAYALAM VOWEL SIGN OO
+ { 0x0D4C, BIDI_L }, // MALAYALAM VOWEL SIGN AU
+ { 0x0D4D, BIDI_NSM }, // MALAYALAM SIGN VIRAMA
+ { 0x0D4E, BIDI_L }, // MALAYALAM LETTER DOT REPH
+ { 0x0D57, BIDI_L }, // MALAYALAM AU LENGTH MARK
+ { 0x0D5F, BIDI_L }, // MALAYALAM LETTER ARCHAIC II
+ { 0x0D60, BIDI_L }, // MALAYALAM LETTER VOCALIC RR
+ { 0x0D61, BIDI_L }, // MALAYALAM LETTER VOCALIC LL
+ { 0x0D62, BIDI_NSM }, // MALAYALAM VOWEL SIGN VOCALIC L
+ { 0x0D63, BIDI_NSM }, // MALAYALAM VOWEL SIGN VOCALIC LL
+ { 0x0D66, BIDI_L }, // MALAYALAM DIGIT ZERO
+ { 0x0D67, BIDI_L }, // MALAYALAM DIGIT ONE
+ { 0x0D68, BIDI_L }, // MALAYALAM DIGIT TWO
+ { 0x0D69, BIDI_L }, // MALAYALAM DIGIT THREE
+ { 0x0D6A, BIDI_L }, // MALAYALAM DIGIT FOUR
+ { 0x0D6B, BIDI_L }, // MALAYALAM DIGIT FIVE
+ { 0x0D6C, BIDI_L }, // MALAYALAM DIGIT SIX
+ { 0x0D6D, BIDI_L }, // MALAYALAM DIGIT SEVEN
+ { 0x0D6E, BIDI_L }, // MALAYALAM DIGIT EIGHT
+ { 0x0D6F, BIDI_L }, // MALAYALAM DIGIT NINE
+ { 0x0D70, BIDI_L }, // MALAYALAM NUMBER TEN
+ { 0x0D71, BIDI_L }, // MALAYALAM NUMBER ONE HUNDRED
+ { 0x0D72, BIDI_L }, // MALAYALAM NUMBER ONE THOUSAND
+ { 0x0D73, BIDI_L }, // MALAYALAM FRACTION ONE QUARTER
+ { 0x0D74, BIDI_L }, // MALAYALAM FRACTION ONE HALF
+ { 0x0D75, BIDI_L }, // MALAYALAM FRACTION THREE QUARTERS
+ { 0x0D79, BIDI_L }, // MALAYALAM DATE MARK
+ { 0x0D7A, BIDI_L }, // MALAYALAM LETTER CHILLU NN
+ { 0x0D7B, BIDI_L }, // MALAYALAM LETTER CHILLU N
+ { 0x0D7C, BIDI_L }, // MALAYALAM LETTER CHILLU RR
+ { 0x0D7D, BIDI_L }, // MALAYALAM LETTER CHILLU L
+ { 0x0D7E, BIDI_L }, // MALAYALAM LETTER CHILLU LL
+ { 0x0D7F, BIDI_L }, // MALAYALAM LETTER CHILLU K
+ { 0x0D82, BIDI_L }, // SINHALA SIGN ANUSVARAYA
+ { 0x0D83, BIDI_L }, // SINHALA SIGN VISARGAYA
+ { 0x0D85, BIDI_L }, // SINHALA LETTER AYANNA
+ { 0x0D86, BIDI_L }, // SINHALA LETTER AAYANNA
+ { 0x0D87, BIDI_L }, // SINHALA LETTER AEYANNA
+ { 0x0D88, BIDI_L }, // SINHALA LETTER AEEYANNA
+ { 0x0D89, BIDI_L }, // SINHALA LETTER IYANNA
+ { 0x0D8A, BIDI_L }, // SINHALA LETTER IIYANNA
+ { 0x0D8B, BIDI_L }, // SINHALA LETTER UYANNA
+ { 0x0D8C, BIDI_L }, // SINHALA LETTER UUYANNA
+ { 0x0D8D, BIDI_L }, // SINHALA LETTER IRUYANNA
+ { 0x0D8E, BIDI_L }, // SINHALA LETTER IRUUYANNA
+ { 0x0D8F, BIDI_L }, // SINHALA LETTER ILUYANNA
+ { 0x0D90, BIDI_L }, // SINHALA LETTER ILUUYANNA
+ { 0x0D91, BIDI_L }, // SINHALA LETTER EYANNA
+ { 0x0D92, BIDI_L }, // SINHALA LETTER EEYANNA
+ { 0x0D93, BIDI_L }, // SINHALA LETTER AIYANNA
+ { 0x0D94, BIDI_L }, // SINHALA LETTER OYANNA
+ { 0x0D95, BIDI_L }, // SINHALA LETTER OOYANNA
+ { 0x0D96, BIDI_L }, // SINHALA LETTER AUYANNA
+ { 0x0D9A, BIDI_L }, // SINHALA LETTER ALPAPRAANA KAYANNA
+ { 0x0D9B, BIDI_L }, // SINHALA LETTER MAHAAPRAANA KAYANNA
+ { 0x0D9C, BIDI_L }, // SINHALA LETTER ALPAPRAANA GAYANNA
+ { 0x0D9D, BIDI_L }, // SINHALA LETTER MAHAAPRAANA GAYANNA
+ { 0x0D9E, BIDI_L }, // SINHALA LETTER KANTAJA NAASIKYAYA
+ { 0x0D9F, BIDI_L }, // SINHALA LETTER SANYAKA GAYANNA
+ { 0x0DA0, BIDI_L }, // SINHALA LETTER ALPAPRAANA CAYANNA
+ { 0x0DA1, BIDI_L }, // SINHALA LETTER MAHAAPRAANA CAYANNA
+ { 0x0DA2, BIDI_L }, // SINHALA LETTER ALPAPRAANA JAYANNA
+ { 0x0DA3, BIDI_L }, // SINHALA LETTER MAHAAPRAANA JAYANNA
+ { 0x0DA4, BIDI_L }, // SINHALA LETTER TAALUJA NAASIKYAYA
+ { 0x0DA5, BIDI_L }, // SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+ { 0x0DA6, BIDI_L }, // SINHALA LETTER SANYAKA JAYANNA
+ { 0x0DA7, BIDI_L }, // SINHALA LETTER ALPAPRAANA TTAYANNA
+ { 0x0DA8, BIDI_L }, // SINHALA LETTER MAHAAPRAANA TTAYANNA
+ { 0x0DA9, BIDI_L }, // SINHALA LETTER ALPAPRAANA DDAYANNA
+ { 0x0DAA, BIDI_L }, // SINHALA LETTER MAHAAPRAANA DDAYANNA
+ { 0x0DAB, BIDI_L }, // SINHALA LETTER MUURDHAJA NAYANNA
+ { 0x0DAC, BIDI_L }, // SINHALA LETTER SANYAKA DDAYANNA
+ { 0x0DAD, BIDI_L }, // SINHALA LETTER ALPAPRAANA TAYANNA
+ { 0x0DAE, BIDI_L }, // SINHALA LETTER MAHAAPRAANA TAYANNA
+ { 0x0DAF, BIDI_L }, // SINHALA LETTER ALPAPRAANA DAYANNA
+ { 0x0DB0, BIDI_L }, // SINHALA LETTER MAHAAPRAANA DAYANNA
+ { 0x0DB1, BIDI_L }, // SINHALA LETTER DANTAJA NAYANNA
+ { 0x0DB3, BIDI_L }, // SINHALA LETTER SANYAKA DAYANNA
+ { 0x0DB4, BIDI_L }, // SINHALA LETTER ALPAPRAANA PAYANNA
+ { 0x0DB5, BIDI_L }, // SINHALA LETTER MAHAAPRAANA PAYANNA
+ { 0x0DB6, BIDI_L }, // SINHALA LETTER ALPAPRAANA BAYANNA
+ { 0x0DB7, BIDI_L }, // SINHALA LETTER MAHAAPRAANA BAYANNA
+ { 0x0DB8, BIDI_L }, // SINHALA LETTER MAYANNA
+ { 0x0DB9, BIDI_L }, // SINHALA LETTER AMBA BAYANNA
+ { 0x0DBA, BIDI_L }, // SINHALA LETTER YAYANNA
+ { 0x0DBB, BIDI_L }, // SINHALA LETTER RAYANNA
+ { 0x0DBD, BIDI_L }, // SINHALA LETTER DANTAJA LAYANNA
+ { 0x0DC0, BIDI_L }, // SINHALA LETTER VAYANNA
+ { 0x0DC1, BIDI_L }, // SINHALA LETTER TAALUJA SAYANNA
+ { 0x0DC2, BIDI_L }, // SINHALA LETTER MUURDHAJA SAYANNA
+ { 0x0DC3, BIDI_L }, // SINHALA LETTER DANTAJA SAYANNA
+ { 0x0DC4, BIDI_L }, // SINHALA LETTER HAYANNA
+ { 0x0DC5, BIDI_L }, // SINHALA LETTER MUURDHAJA LAYANNA
+ { 0x0DC6, BIDI_L }, // SINHALA LETTER FAYANNA
+ { 0x0DCA, BIDI_NSM }, // SINHALA SIGN AL-LAKUNA
+ { 0x0DCF, BIDI_L }, // SINHALA VOWEL SIGN AELA-PILLA
+ { 0x0DD0, BIDI_L }, // SINHALA VOWEL SIGN KETTI AEDA-PILLA
+ { 0x0DD1, BIDI_L }, // SINHALA VOWEL SIGN DIGA AEDA-PILLA
+ { 0x0DD2, BIDI_NSM }, // SINHALA VOWEL SIGN KETTI IS-PILLA
+ { 0x0DD3, BIDI_NSM }, // SINHALA VOWEL SIGN DIGA IS-PILLA
+ { 0x0DD4, BIDI_NSM }, // SINHALA VOWEL SIGN KETTI PAA-PILLA
+ { 0x0DD6, BIDI_NSM }, // SINHALA VOWEL SIGN DIGA PAA-PILLA
+ { 0x0DD8, BIDI_L }, // SINHALA VOWEL SIGN GAETTA-PILLA
+ { 0x0DD9, BIDI_L }, // SINHALA VOWEL SIGN KOMBUVA
+ { 0x0DDA, BIDI_L }, // SINHALA VOWEL SIGN DIGA KOMBUVA
+ { 0x0DDB, BIDI_L }, // SINHALA VOWEL SIGN KOMBU DEKA
+ { 0x0DDC, BIDI_L }, // SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
+ { 0x0DDD, BIDI_L }, // SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
+ { 0x0DDE, BIDI_L }, // SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+ { 0x0DDF, BIDI_L }, // SINHALA VOWEL SIGN GAYANUKITTA
+ { 0x0DE6, BIDI_L }, // SINHALA LITH DIGIT ZERO
+ { 0x0DE7, BIDI_L }, // SINHALA LITH DIGIT ONE
+ { 0x0DE8, BIDI_L }, // SINHALA LITH DIGIT TWO
+ { 0x0DE9, BIDI_L }, // SINHALA LITH DIGIT THREE
+ { 0x0DEA, BIDI_L }, // SINHALA LITH DIGIT FOUR
+ { 0x0DEB, BIDI_L }, // SINHALA LITH DIGIT FIVE
+ { 0x0DEC, BIDI_L }, // SINHALA LITH DIGIT SIX
+ { 0x0DED, BIDI_L }, // SINHALA LITH DIGIT SEVEN
+ { 0x0DEE, BIDI_L }, // SINHALA LITH DIGIT EIGHT
+ { 0x0DEF, BIDI_L }, // SINHALA LITH DIGIT NINE
+ { 0x0DF2, BIDI_L }, // SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+ { 0x0DF3, BIDI_L }, // SINHALA VOWEL SIGN DIGA GAYANUKITTA
+ { 0x0DF4, BIDI_L }, // SINHALA PUNCTUATION KUNDDALIYA
+ { 0x0E01, BIDI_L }, // THAI CHARACTER KO KAI
+ { 0x0E02, BIDI_L }, // THAI CHARACTER KHO KHAI
+ { 0x0E03, BIDI_L }, // THAI CHARACTER KHO KHUAT
+ { 0x0E04, BIDI_L }, // THAI CHARACTER KHO KHWAI
+ { 0x0E05, BIDI_L }, // THAI CHARACTER KHO KHON
+ { 0x0E06, BIDI_L }, // THAI CHARACTER KHO RAKHANG
+ { 0x0E07, BIDI_L }, // THAI CHARACTER NGO NGU
+ { 0x0E08, BIDI_L }, // THAI CHARACTER CHO CHAN
+ { 0x0E09, BIDI_L }, // THAI CHARACTER CHO CHING
+ { 0x0E0A, BIDI_L }, // THAI CHARACTER CHO CHANG
+ { 0x0E0B, BIDI_L }, // THAI CHARACTER SO SO
+ { 0x0E0C, BIDI_L }, // THAI CHARACTER CHO CHOE
+ { 0x0E0D, BIDI_L }, // THAI CHARACTER YO YING
+ { 0x0E0E, BIDI_L }, // THAI CHARACTER DO CHADA
+ { 0x0E0F, BIDI_L }, // THAI CHARACTER TO PATAK
+ { 0x0E10, BIDI_L }, // THAI CHARACTER THO THAN
+ { 0x0E11, BIDI_L }, // THAI CHARACTER THO NANGMONTHO
+ { 0x0E12, BIDI_L }, // THAI CHARACTER THO PHUTHAO
+ { 0x0E13, BIDI_L }, // THAI CHARACTER NO NEN
+ { 0x0E14, BIDI_L }, // THAI CHARACTER DO DEK
+ { 0x0E15, BIDI_L }, // THAI CHARACTER TO TAO
+ { 0x0E16, BIDI_L }, // THAI CHARACTER THO THUNG
+ { 0x0E17, BIDI_L }, // THAI CHARACTER THO THAHAN
+ { 0x0E18, BIDI_L }, // THAI CHARACTER THO THONG
+ { 0x0E19, BIDI_L }, // THAI CHARACTER NO NU
+ { 0x0E1A, BIDI_L }, // THAI CHARACTER BO BAIMAI
+ { 0x0E1B, BIDI_L }, // THAI CHARACTER PO PLA
+ { 0x0E1C, BIDI_L }, // THAI CHARACTER PHO PHUNG
+ { 0x0E1D, BIDI_L }, // THAI CHARACTER FO FA
+ { 0x0E1E, BIDI_L }, // THAI CHARACTER PHO PHAN
+ { 0x0E1F, BIDI_L }, // THAI CHARACTER FO FAN
+ { 0x0E20, BIDI_L }, // THAI CHARACTER PHO SAMPHAO
+ { 0x0E21, BIDI_L }, // THAI CHARACTER MO MA
+ { 0x0E22, BIDI_L }, // THAI CHARACTER YO YAK
+ { 0x0E23, BIDI_L }, // THAI CHARACTER RO RUA
+ { 0x0E24, BIDI_L }, // THAI CHARACTER RU
+ { 0x0E25, BIDI_L }, // THAI CHARACTER LO LING
+ { 0x0E26, BIDI_L }, // THAI CHARACTER LU
+ { 0x0E27, BIDI_L }, // THAI CHARACTER WO WAEN
+ { 0x0E28, BIDI_L }, // THAI CHARACTER SO SALA
+ { 0x0E29, BIDI_L }, // THAI CHARACTER SO RUSI
+ { 0x0E2A, BIDI_L }, // THAI CHARACTER SO SUA
+ { 0x0E2B, BIDI_L }, // THAI CHARACTER HO HIP
+ { 0x0E2C, BIDI_L }, // THAI CHARACTER LO CHULA
+ { 0x0E2D, BIDI_L }, // THAI CHARACTER O ANG
+ { 0x0E2E, BIDI_L }, // THAI CHARACTER HO NOKHUK
+ { 0x0E2F, BIDI_L }, // THAI CHARACTER PAIYANNOI
+ { 0x0E30, BIDI_L }, // THAI CHARACTER SARA A
+ { 0x0E31, BIDI_NSM }, // THAI CHARACTER MAI HAN-AKAT
+ { 0x0E32, BIDI_L }, // THAI CHARACTER SARA AA
+ { 0x0E33, BIDI_L }, // THAI CHARACTER SARA AM
+ { 0x0E34, BIDI_NSM }, // THAI CHARACTER SARA I
+ { 0x0E35, BIDI_NSM }, // THAI CHARACTER SARA II
+ { 0x0E36, BIDI_NSM }, // THAI CHARACTER SARA UE
+ { 0x0E37, BIDI_NSM }, // THAI CHARACTER SARA UEE
+ { 0x0E38, BIDI_NSM }, // THAI CHARACTER SARA U
+ { 0x0E39, BIDI_NSM }, // THAI CHARACTER SARA UU
+ { 0x0E3A, BIDI_NSM }, // THAI CHARACTER PHINTHU
+ { 0x0E3F, BIDI_ET }, // THAI CURRENCY SYMBOL BAHT
+ { 0x0E40, BIDI_L }, // THAI CHARACTER SARA E
+ { 0x0E41, BIDI_L }, // THAI CHARACTER SARA AE
+ { 0x0E42, BIDI_L }, // THAI CHARACTER SARA O
+ { 0x0E43, BIDI_L }, // THAI CHARACTER SARA AI MAIMUAN
+ { 0x0E44, BIDI_L }, // THAI CHARACTER SARA AI MAIMALAI
+ { 0x0E45, BIDI_L }, // THAI CHARACTER LAKKHANGYAO
+ { 0x0E46, BIDI_L }, // THAI CHARACTER MAIYAMOK
+ { 0x0E47, BIDI_NSM }, // THAI CHARACTER MAITAIKHU
+ { 0x0E48, BIDI_NSM }, // THAI CHARACTER MAI EK
+ { 0x0E49, BIDI_NSM }, // THAI CHARACTER MAI THO
+ { 0x0E4A, BIDI_NSM }, // THAI CHARACTER MAI TRI
+ { 0x0E4B, BIDI_NSM }, // THAI CHARACTER MAI CHATTAWA
+ { 0x0E4C, BIDI_NSM }, // THAI CHARACTER THANTHAKHAT
+ { 0x0E4D, BIDI_NSM }, // THAI CHARACTER NIKHAHIT
+ { 0x0E4E, BIDI_NSM }, // THAI CHARACTER YAMAKKAN
+ { 0x0E4F, BIDI_L }, // THAI CHARACTER FONGMAN
+ { 0x0E50, BIDI_L }, // THAI DIGIT ZERO
+ { 0x0E51, BIDI_L }, // THAI DIGIT ONE
+ { 0x0E52, BIDI_L }, // THAI DIGIT TWO
+ { 0x0E53, BIDI_L }, // THAI DIGIT THREE
+ { 0x0E54, BIDI_L }, // THAI DIGIT FOUR
+ { 0x0E55, BIDI_L }, // THAI DIGIT FIVE
+ { 0x0E56, BIDI_L }, // THAI DIGIT SIX
+ { 0x0E57, BIDI_L }, // THAI DIGIT SEVEN
+ { 0x0E58, BIDI_L }, // THAI DIGIT EIGHT
+ { 0x0E59, BIDI_L }, // THAI DIGIT NINE
+ { 0x0E5A, BIDI_L }, // THAI CHARACTER ANGKHANKHU
+ { 0x0E5B, BIDI_L }, // THAI CHARACTER KHOMUT
+ { 0x0E81, BIDI_L }, // LAO LETTER KO
+ { 0x0E82, BIDI_L }, // LAO LETTER KHO SUNG
+ { 0x0E84, BIDI_L }, // LAO LETTER KHO TAM
+ { 0x0E87, BIDI_L }, // LAO LETTER NGO
+ { 0x0E88, BIDI_L }, // LAO LETTER CO
+ { 0x0E8A, BIDI_L }, // LAO LETTER SO TAM
+ { 0x0E8D, BIDI_L }, // LAO LETTER NYO
+ { 0x0E94, BIDI_L }, // LAO LETTER DO
+ { 0x0E95, BIDI_L }, // LAO LETTER TO
+ { 0x0E96, BIDI_L }, // LAO LETTER THO SUNG
+ { 0x0E97, BIDI_L }, // LAO LETTER THO TAM
+ { 0x0E99, BIDI_L }, // LAO LETTER NO
+ { 0x0E9A, BIDI_L }, // LAO LETTER BO
+ { 0x0E9B, BIDI_L }, // LAO LETTER PO
+ { 0x0E9C, BIDI_L }, // LAO LETTER PHO SUNG
+ { 0x0E9D, BIDI_L }, // LAO LETTER FO TAM
+ { 0x0E9E, BIDI_L }, // LAO LETTER PHO TAM
+ { 0x0E9F, BIDI_L }, // LAO LETTER FO SUNG
+ { 0x0EA1, BIDI_L }, // LAO LETTER MO
+ { 0x0EA2, BIDI_L }, // LAO LETTER YO
+ { 0x0EA3, BIDI_L }, // LAO LETTER LO LING
+ { 0x0EA5, BIDI_L }, // LAO LETTER LO LOOT
+ { 0x0EA7, BIDI_L }, // LAO LETTER WO
+ { 0x0EAA, BIDI_L }, // LAO LETTER SO SUNG
+ { 0x0EAB, BIDI_L }, // LAO LETTER HO SUNG
+ { 0x0EAD, BIDI_L }, // LAO LETTER O
+ { 0x0EAE, BIDI_L }, // LAO LETTER HO TAM
+ { 0x0EAF, BIDI_L }, // LAO ELLIPSIS
+ { 0x0EB0, BIDI_L }, // LAO VOWEL SIGN A
+ { 0x0EB1, BIDI_NSM }, // LAO VOWEL SIGN MAI KAN
+ { 0x0EB2, BIDI_L }, // LAO VOWEL SIGN AA
+ { 0x0EB3, BIDI_L }, // LAO VOWEL SIGN AM
+ { 0x0EB4, BIDI_NSM }, // LAO VOWEL SIGN I
+ { 0x0EB5, BIDI_NSM }, // LAO VOWEL SIGN II
+ { 0x0EB6, BIDI_NSM }, // LAO VOWEL SIGN Y
+ { 0x0EB7, BIDI_NSM }, // LAO VOWEL SIGN YY
+ { 0x0EB8, BIDI_NSM }, // LAO VOWEL SIGN U
+ { 0x0EB9, BIDI_NSM }, // LAO VOWEL SIGN UU
+ { 0x0EBB, BIDI_NSM }, // LAO VOWEL SIGN MAI KON
+ { 0x0EBC, BIDI_NSM }, // LAO SEMIVOWEL SIGN LO
+ { 0x0EBD, BIDI_L }, // LAO SEMIVOWEL SIGN NYO
+ { 0x0EC0, BIDI_L }, // LAO VOWEL SIGN E
+ { 0x0EC1, BIDI_L }, // LAO VOWEL SIGN EI
+ { 0x0EC2, BIDI_L }, // LAO VOWEL SIGN O
+ { 0x0EC3, BIDI_L }, // LAO VOWEL SIGN AY
+ { 0x0EC4, BIDI_L }, // LAO VOWEL SIGN AI
+ { 0x0EC6, BIDI_L }, // LAO KO LA
+ { 0x0EC8, BIDI_NSM }, // LAO TONE MAI EK
+ { 0x0EC9, BIDI_NSM }, // LAO TONE MAI THO
+ { 0x0ECA, BIDI_NSM }, // LAO TONE MAI TI
+ { 0x0ECB, BIDI_NSM }, // LAO TONE MAI CATAWA
+ { 0x0ECC, BIDI_NSM }, // LAO CANCELLATION MARK
+ { 0x0ECD, BIDI_NSM }, // LAO NIGGAHITA
+ { 0x0ED0, BIDI_L }, // LAO DIGIT ZERO
+ { 0x0ED1, BIDI_L }, // LAO DIGIT ONE
+ { 0x0ED2, BIDI_L }, // LAO DIGIT TWO
+ { 0x0ED3, BIDI_L }, // LAO DIGIT THREE
+ { 0x0ED4, BIDI_L }, // LAO DIGIT FOUR
+ { 0x0ED5, BIDI_L }, // LAO DIGIT FIVE
+ { 0x0ED6, BIDI_L }, // LAO DIGIT SIX
+ { 0x0ED7, BIDI_L }, // LAO DIGIT SEVEN
+ { 0x0ED8, BIDI_L }, // LAO DIGIT EIGHT
+ { 0x0ED9, BIDI_L }, // LAO DIGIT NINE
+ { 0x0EDC, BIDI_L }, // LAO HO NO
+ { 0x0EDD, BIDI_L }, // LAO HO MO
+ { 0x0EDE, BIDI_L }, // LAO LETTER KHMU GO
+ { 0x0EDF, BIDI_L }, // LAO LETTER KHMU NYO
+ { 0x0F00, BIDI_L }, // TIBETAN SYLLABLE OM
+ { 0x0F01, BIDI_L }, // TIBETAN MARK GTER YIG MGO TRUNCATED A
+ { 0x0F02, BIDI_L }, // TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA
+ { 0x0F03, BIDI_L }, // TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+ { 0x0F04, BIDI_L }, // TIBETAN MARK INITIAL YIG MGO MDUN MA
+ { 0x0F05, BIDI_L }, // TIBETAN MARK CLOSING YIG MGO SGAB MA
+ { 0x0F06, BIDI_L }, // TIBETAN MARK CARET YIG MGO PHUR SHAD MA
+ { 0x0F07, BIDI_L }, // TIBETAN MARK YIG MGO TSHEG SHAD MA
+ { 0x0F08, BIDI_L }, // TIBETAN MARK SBRUL SHAD
+ { 0x0F09, BIDI_L }, // TIBETAN MARK BSKUR YIG MGO
+ { 0x0F0A, BIDI_L }, // TIBETAN MARK BKA- SHOG YIG MGO
+ { 0x0F0B, BIDI_L }, // TIBETAN MARK INTERSYLLABIC TSHEG
+ { 0x0F0C, BIDI_L }, // TIBETAN MARK DELIMITER TSHEG BSTAR
+ { 0x0F0D, BIDI_L }, // TIBETAN MARK SHAD
+ { 0x0F0E, BIDI_L }, // TIBETAN MARK NYIS SHAD
+ { 0x0F0F, BIDI_L }, // TIBETAN MARK TSHEG SHAD
+ { 0x0F10, BIDI_L }, // TIBETAN MARK NYIS TSHEG SHAD
+ { 0x0F11, BIDI_L }, // TIBETAN MARK RIN CHEN SPUNGS SHAD
+ { 0x0F12, BIDI_L }, // TIBETAN MARK RGYA GRAM SHAD
+ { 0x0F13, BIDI_L }, // TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+ { 0x0F14, BIDI_L }, // TIBETAN MARK GTER TSHEG
+ { 0x0F15, BIDI_L }, // TIBETAN LOGOTYPE SIGN CHAD RTAGS
+ { 0x0F16, BIDI_L }, // TIBETAN LOGOTYPE SIGN LHAG RTAGS
+ { 0x0F17, BIDI_L }, // TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+ { 0x0F18, BIDI_NSM }, // TIBETAN ASTROLOGICAL SIGN -KHYUD PA
+ { 0x0F19, BIDI_NSM }, // TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+ { 0x0F1A, BIDI_L }, // TIBETAN SIGN RDEL DKAR GCIG
+ { 0x0F1B, BIDI_L }, // TIBETAN SIGN RDEL DKAR GNYIS
+ { 0x0F1C, BIDI_L }, // TIBETAN SIGN RDEL DKAR GSUM
+ { 0x0F1D, BIDI_L }, // TIBETAN SIGN RDEL NAG GCIG
+ { 0x0F1E, BIDI_L }, // TIBETAN SIGN RDEL NAG GNYIS
+ { 0x0F1F, BIDI_L }, // TIBETAN SIGN RDEL DKAR RDEL NAG
+ { 0x0F20, BIDI_L }, // TIBETAN DIGIT ZERO
+ { 0x0F21, BIDI_L }, // TIBETAN DIGIT ONE
+ { 0x0F22, BIDI_L }, // TIBETAN DIGIT TWO
+ { 0x0F23, BIDI_L }, // TIBETAN DIGIT THREE
+ { 0x0F24, BIDI_L }, // TIBETAN DIGIT FOUR
+ { 0x0F25, BIDI_L }, // TIBETAN DIGIT FIVE
+ { 0x0F26, BIDI_L }, // TIBETAN DIGIT SIX
+ { 0x0F27, BIDI_L }, // TIBETAN DIGIT SEVEN
+ { 0x0F28, BIDI_L }, // TIBETAN DIGIT EIGHT
+ { 0x0F29, BIDI_L }, // TIBETAN DIGIT NINE
+ { 0x0F2A, BIDI_L }, // TIBETAN DIGIT HALF ONE
+ { 0x0F2B, BIDI_L }, // TIBETAN DIGIT HALF TWO
+ { 0x0F2C, BIDI_L }, // TIBETAN DIGIT HALF THREE
+ { 0x0F2D, BIDI_L }, // TIBETAN DIGIT HALF FOUR
+ { 0x0F2E, BIDI_L }, // TIBETAN DIGIT HALF FIVE
+ { 0x0F2F, BIDI_L }, // TIBETAN DIGIT HALF SIX
+ { 0x0F30, BIDI_L }, // TIBETAN DIGIT HALF SEVEN
+ { 0x0F31, BIDI_L }, // TIBETAN DIGIT HALF EIGHT
+ { 0x0F32, BIDI_L }, // TIBETAN DIGIT HALF NINE
+ { 0x0F33, BIDI_L }, // TIBETAN DIGIT HALF ZERO
+ { 0x0F34, BIDI_L }, // TIBETAN MARK BSDUS RTAGS
+ { 0x0F35, BIDI_NSM }, // TIBETAN MARK NGAS BZUNG NYI ZLA
+ { 0x0F36, BIDI_L }, // TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+ { 0x0F37, BIDI_NSM }, // TIBETAN MARK NGAS BZUNG SGOR RTAGS
+ { 0x0F38, BIDI_L }, // TIBETAN MARK CHE MGO
+ { 0x0F39, BIDI_NSM }, // TIBETAN MARK TSA -PHRU
+ { 0x0F3A, BIDI_ON }, // TIBETAN MARK GUG RTAGS GYON
+ { 0x0F3B, BIDI_ON }, // TIBETAN MARK GUG RTAGS GYAS
+ { 0x0F3C, BIDI_ON }, // TIBETAN MARK ANG KHANG GYON
+ { 0x0F3D, BIDI_ON }, // TIBETAN MARK ANG KHANG GYAS
+ { 0x0F3E, BIDI_L }, // TIBETAN SIGN YAR TSHES
+ { 0x0F3F, BIDI_L }, // TIBETAN SIGN MAR TSHES
+ { 0x0F40, BIDI_L }, // TIBETAN LETTER KA
+ { 0x0F41, BIDI_L }, // TIBETAN LETTER KHA
+ { 0x0F42, BIDI_L }, // TIBETAN LETTER GA
+ { 0x0F43, BIDI_L }, // TIBETAN LETTER GHA
+ { 0x0F44, BIDI_L }, // TIBETAN LETTER NGA
+ { 0x0F45, BIDI_L }, // TIBETAN LETTER CA
+ { 0x0F46, BIDI_L }, // TIBETAN LETTER CHA
+ { 0x0F47, BIDI_L }, // TIBETAN LETTER JA
+ { 0x0F49, BIDI_L }, // TIBETAN LETTER NYA
+ { 0x0F4A, BIDI_L }, // TIBETAN LETTER TTA
+ { 0x0F4B, BIDI_L }, // TIBETAN LETTER TTHA
+ { 0x0F4C, BIDI_L }, // TIBETAN LETTER DDA
+ { 0x0F4D, BIDI_L }, // TIBETAN LETTER DDHA
+ { 0x0F4E, BIDI_L }, // TIBETAN LETTER NNA
+ { 0x0F4F, BIDI_L }, // TIBETAN LETTER TA
+ { 0x0F50, BIDI_L }, // TIBETAN LETTER THA
+ { 0x0F51, BIDI_L }, // TIBETAN LETTER DA
+ { 0x0F52, BIDI_L }, // TIBETAN LETTER DHA
+ { 0x0F53, BIDI_L }, // TIBETAN LETTER NA
+ { 0x0F54, BIDI_L }, // TIBETAN LETTER PA
+ { 0x0F55, BIDI_L }, // TIBETAN LETTER PHA
+ { 0x0F56, BIDI_L }, // TIBETAN LETTER BA
+ { 0x0F57, BIDI_L }, // TIBETAN LETTER BHA
+ { 0x0F58, BIDI_L }, // TIBETAN LETTER MA
+ { 0x0F59, BIDI_L }, // TIBETAN LETTER TSA
+ { 0x0F5A, BIDI_L }, // TIBETAN LETTER TSHA
+ { 0x0F5B, BIDI_L }, // TIBETAN LETTER DZA
+ { 0x0F5C, BIDI_L }, // TIBETAN LETTER DZHA
+ { 0x0F5D, BIDI_L }, // TIBETAN LETTER WA
+ { 0x0F5E, BIDI_L }, // TIBETAN LETTER ZHA
+ { 0x0F5F, BIDI_L }, // TIBETAN LETTER ZA
+ { 0x0F60, BIDI_L }, // TIBETAN LETTER -A
+ { 0x0F61, BIDI_L }, // TIBETAN LETTER YA
+ { 0x0F62, BIDI_L }, // TIBETAN LETTER RA
+ { 0x0F63, BIDI_L }, // TIBETAN LETTER LA
+ { 0x0F64, BIDI_L }, // TIBETAN LETTER SHA
+ { 0x0F65, BIDI_L }, // TIBETAN LETTER SSA
+ { 0x0F66, BIDI_L }, // TIBETAN LETTER SA
+ { 0x0F67, BIDI_L }, // TIBETAN LETTER HA
+ { 0x0F68, BIDI_L }, // TIBETAN LETTER A
+ { 0x0F69, BIDI_L }, // TIBETAN LETTER KSSA
+ { 0x0F6A, BIDI_L }, // TIBETAN LETTER FIXED-FORM RA
+ { 0x0F6B, BIDI_L }, // TIBETAN LETTER KKA
+ { 0x0F6C, BIDI_L }, // TIBETAN LETTER RRA
+ { 0x0F71, BIDI_NSM }, // TIBETAN VOWEL SIGN AA
+ { 0x0F72, BIDI_NSM }, // TIBETAN VOWEL SIGN I
+ { 0x0F73, BIDI_NSM }, // TIBETAN VOWEL SIGN II
+ { 0x0F74, BIDI_NSM }, // TIBETAN VOWEL SIGN U
+ { 0x0F75, BIDI_NSM }, // TIBETAN VOWEL SIGN UU
+ { 0x0F76, BIDI_NSM }, // TIBETAN VOWEL SIGN VOCALIC R
+ { 0x0F77, BIDI_NSM }, // TIBETAN VOWEL SIGN VOCALIC RR
+ { 0x0F78, BIDI_NSM }, // TIBETAN VOWEL SIGN VOCALIC L
+ { 0x0F79, BIDI_NSM }, // TIBETAN VOWEL SIGN VOCALIC LL
+ { 0x0F7A, BIDI_NSM }, // TIBETAN VOWEL SIGN E
+ { 0x0F7B, BIDI_NSM }, // TIBETAN VOWEL SIGN EE
+ { 0x0F7C, BIDI_NSM }, // TIBETAN VOWEL SIGN O
+ { 0x0F7D, BIDI_NSM }, // TIBETAN VOWEL SIGN OO
+ { 0x0F7E, BIDI_NSM }, // TIBETAN SIGN RJES SU NGA RO
+ { 0x0F7F, BIDI_L }, // TIBETAN SIGN RNAM BCAD
+ { 0x0F80, BIDI_NSM }, // TIBETAN VOWEL SIGN REVERSED I
+ { 0x0F81, BIDI_NSM }, // TIBETAN VOWEL SIGN REVERSED II
+ { 0x0F82, BIDI_NSM }, // TIBETAN SIGN NYI ZLA NAA DA
+ { 0x0F83, BIDI_NSM }, // TIBETAN SIGN SNA LDAN
+ { 0x0F84, BIDI_NSM }, // TIBETAN MARK HALANTA
+ { 0x0F85, BIDI_L }, // TIBETAN MARK PALUTA
+ { 0x0F86, BIDI_NSM }, // TIBETAN SIGN LCI RTAGS
+ { 0x0F87, BIDI_NSM }, // TIBETAN SIGN YANG RTAGS
+ { 0x0F88, BIDI_L }, // TIBETAN SIGN LCE TSA CAN
+ { 0x0F89, BIDI_L }, // TIBETAN SIGN MCHU CAN
+ { 0x0F8A, BIDI_L }, // TIBETAN SIGN GRU CAN RGYINGS
+ { 0x0F8B, BIDI_L }, // TIBETAN SIGN GRU MED RGYINGS
+ { 0x0F8C, BIDI_L }, // TIBETAN SIGN INVERTED MCHU CAN
+ { 0x0F8D, BIDI_NSM }, // TIBETAN SUBJOINED SIGN LCE TSA CAN
+ { 0x0F8E, BIDI_NSM }, // TIBETAN SUBJOINED SIGN MCHU CAN
+ { 0x0F8F, BIDI_NSM }, // TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
+ { 0x0F90, BIDI_NSM }, // TIBETAN SUBJOINED LETTER KA
+ { 0x0F91, BIDI_NSM }, // TIBETAN SUBJOINED LETTER KHA
+ { 0x0F92, BIDI_NSM }, // TIBETAN SUBJOINED LETTER GA
+ { 0x0F93, BIDI_NSM }, // TIBETAN SUBJOINED LETTER GHA
+ { 0x0F94, BIDI_NSM }, // TIBETAN SUBJOINED LETTER NGA
+ { 0x0F95, BIDI_NSM }, // TIBETAN SUBJOINED LETTER CA
+ { 0x0F96, BIDI_NSM }, // TIBETAN SUBJOINED LETTER CHA
+ { 0x0F97, BIDI_NSM }, // TIBETAN SUBJOINED LETTER JA
+ { 0x0F99, BIDI_NSM }, // TIBETAN SUBJOINED LETTER NYA
+ { 0x0F9A, BIDI_NSM }, // TIBETAN SUBJOINED LETTER TTA
+ { 0x0F9B, BIDI_NSM }, // TIBETAN SUBJOINED LETTER TTHA
+ { 0x0F9C, BIDI_NSM }, // TIBETAN SUBJOINED LETTER DDA
+ { 0x0F9D, BIDI_NSM }, // TIBETAN SUBJOINED LETTER DDHA
+ { 0x0F9E, BIDI_NSM }, // TIBETAN SUBJOINED LETTER NNA
+ { 0x0F9F, BIDI_NSM }, // TIBETAN SUBJOINED LETTER TA
+ { 0x0FA0, BIDI_NSM }, // TIBETAN SUBJOINED LETTER THA
+ { 0x0FA1, BIDI_NSM }, // TIBETAN SUBJOINED LETTER DA
+ { 0x0FA2, BIDI_NSM }, // TIBETAN SUBJOINED LETTER DHA
+ { 0x0FA3, BIDI_NSM }, // TIBETAN SUBJOINED LETTER NA
+ { 0x0FA4, BIDI_NSM }, // TIBETAN SUBJOINED LETTER PA
+ { 0x0FA5, BIDI_NSM }, // TIBETAN SUBJOINED LETTER PHA
+ { 0x0FA6, BIDI_NSM }, // TIBETAN SUBJOINED LETTER BA
+ { 0x0FA7, BIDI_NSM }, // TIBETAN SUBJOINED LETTER BHA
+ { 0x0FA8, BIDI_NSM }, // TIBETAN SUBJOINED LETTER MA
+ { 0x0FA9, BIDI_NSM }, // TIBETAN SUBJOINED LETTER TSA
+ { 0x0FAA, BIDI_NSM }, // TIBETAN SUBJOINED LETTER TSHA
+ { 0x0FAB, BIDI_NSM }, // TIBETAN SUBJOINED LETTER DZA
+ { 0x0FAC, BIDI_NSM }, // TIBETAN SUBJOINED LETTER DZHA
+ { 0x0FAD, BIDI_NSM }, // TIBETAN SUBJOINED LETTER WA
+ { 0x0FAE, BIDI_NSM }, // TIBETAN SUBJOINED LETTER ZHA
+ { 0x0FAF, BIDI_NSM }, // TIBETAN SUBJOINED LETTER ZA
+ { 0x0FB0, BIDI_NSM }, // TIBETAN SUBJOINED LETTER -A
+ { 0x0FB1, BIDI_NSM }, // TIBETAN SUBJOINED LETTER YA
+ { 0x0FB2, BIDI_NSM }, // TIBETAN SUBJOINED LETTER RA
+ { 0x0FB3, BIDI_NSM }, // TIBETAN SUBJOINED LETTER LA
+ { 0x0FB4, BIDI_NSM }, // TIBETAN SUBJOINED LETTER SHA
+ { 0x0FB5, BIDI_NSM }, // TIBETAN SUBJOINED LETTER SSA
+ { 0x0FB6, BIDI_NSM }, // TIBETAN SUBJOINED LETTER SA
+ { 0x0FB7, BIDI_NSM }, // TIBETAN SUBJOINED LETTER HA
+ { 0x0FB8, BIDI_NSM }, // TIBETAN SUBJOINED LETTER A
+ { 0x0FB9, BIDI_NSM }, // TIBETAN SUBJOINED LETTER KSSA
+ { 0x0FBA, BIDI_NSM }, // TIBETAN SUBJOINED LETTER FIXED-FORM WA
+ { 0x0FBB, BIDI_NSM }, // TIBETAN SUBJOINED LETTER FIXED-FORM YA
+ { 0x0FBC, BIDI_NSM }, // TIBETAN SUBJOINED LETTER FIXED-FORM RA
+ { 0x0FBE, BIDI_L }, // TIBETAN KU RU KHA
+ { 0x0FBF, BIDI_L }, // TIBETAN KU RU KHA BZHI MIG CAN
+ { 0x0FC0, BIDI_L }, // TIBETAN CANTILLATION SIGN HEAVY BEAT
+ { 0x0FC1, BIDI_L }, // TIBETAN CANTILLATION SIGN LIGHT BEAT
+ { 0x0FC2, BIDI_L }, // TIBETAN CANTILLATION SIGN CANG TE-U
+ { 0x0FC3, BIDI_L }, // TIBETAN CANTILLATION SIGN SBUB -CHAL
+ { 0x0FC4, BIDI_L }, // TIBETAN SYMBOL DRIL BU
+ { 0x0FC5, BIDI_L }, // TIBETAN SYMBOL RDO RJE
+ { 0x0FC6, BIDI_NSM }, // TIBETAN SYMBOL PADMA GDAN
+ { 0x0FC7, BIDI_L }, // TIBETAN SYMBOL RDO RJE RGYA GRAM
+ { 0x0FC8, BIDI_L }, // TIBETAN SYMBOL PHUR PA
+ { 0x0FC9, BIDI_L }, // TIBETAN SYMBOL NOR BU
+ { 0x0FCA, BIDI_L }, // TIBETAN SYMBOL NOR BU NYIS -KHYIL
+ { 0x0FCB, BIDI_L }, // TIBETAN SYMBOL NOR BU GSUM -KHYIL
+ { 0x0FCC, BIDI_L }, // TIBETAN SYMBOL NOR BU BZHI -KHYIL
+ { 0x0FCE, BIDI_L }, // TIBETAN SIGN RDEL NAG RDEL DKAR
+ { 0x0FCF, BIDI_L }, // TIBETAN SIGN RDEL NAG GSUM
+ { 0x0FD0, BIDI_L }, // TIBETAN MARK BSKA- SHOG GI MGO RGYAN
+ { 0x0FD1, BIDI_L }, // TIBETAN MARK MNYAM YIG GI MGO RGYAN
+ { 0x0FD2, BIDI_L }, // TIBETAN MARK NYIS TSHEG
+ { 0x0FD3, BIDI_L }, // TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
+ { 0x0FD4, BIDI_L }, // TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+ { 0x0FD5, BIDI_L }, // RIGHT-FACING SVASTI SIGN
+ { 0x0FD6, BIDI_L }, // LEFT-FACING SVASTI SIGN
+ { 0x0FD7, BIDI_L }, // RIGHT-FACING SVASTI SIGN WITH DOTS
+ { 0x0FD8, BIDI_L }, // LEFT-FACING SVASTI SIGN WITH DOTS
+ { 0x0FD9, BIDI_L }, // TIBETAN MARK LEADING MCHAN RTAGS
+ { 0x0FDA, BIDI_L }, // TIBETAN MARK TRAILING MCHAN RTAGS
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_1 == 1)
+
+ { 0x1000, BIDI_L }, // MYANMAR LETTER KA
+ { 0x1001, BIDI_L }, // MYANMAR LETTER KHA
+ { 0x1002, BIDI_L }, // MYANMAR LETTER GA
+ { 0x1003, BIDI_L }, // MYANMAR LETTER GHA
+ { 0x1004, BIDI_L }, // MYANMAR LETTER NGA
+ { 0x1005, BIDI_L }, // MYANMAR LETTER CA
+ { 0x1006, BIDI_L }, // MYANMAR LETTER CHA
+ { 0x1007, BIDI_L }, // MYANMAR LETTER JA
+ { 0x1008, BIDI_L }, // MYANMAR LETTER JHA
+ { 0x1009, BIDI_L }, // MYANMAR LETTER NYA
+ { 0x100A, BIDI_L }, // MYANMAR LETTER NNYA
+ { 0x100B, BIDI_L }, // MYANMAR LETTER TTA
+ { 0x100C, BIDI_L }, // MYANMAR LETTER TTHA
+ { 0x100D, BIDI_L }, // MYANMAR LETTER DDA
+ { 0x100E, BIDI_L }, // MYANMAR LETTER DDHA
+ { 0x100F, BIDI_L }, // MYANMAR LETTER NNA
+ { 0x1010, BIDI_L }, // MYANMAR LETTER TA
+ { 0x1011, BIDI_L }, // MYANMAR LETTER THA
+ { 0x1012, BIDI_L }, // MYANMAR LETTER DA
+ { 0x1013, BIDI_L }, // MYANMAR LETTER DHA
+ { 0x1014, BIDI_L }, // MYANMAR LETTER NA
+ { 0x1015, BIDI_L }, // MYANMAR LETTER PA
+ { 0x1016, BIDI_L }, // MYANMAR LETTER PHA
+ { 0x1017, BIDI_L }, // MYANMAR LETTER BA
+ { 0x1018, BIDI_L }, // MYANMAR LETTER BHA
+ { 0x1019, BIDI_L }, // MYANMAR LETTER MA
+ { 0x101A, BIDI_L }, // MYANMAR LETTER YA
+ { 0x101B, BIDI_L }, // MYANMAR LETTER RA
+ { 0x101C, BIDI_L }, // MYANMAR LETTER LA
+ { 0x101D, BIDI_L }, // MYANMAR LETTER WA
+ { 0x101E, BIDI_L }, // MYANMAR LETTER SA
+ { 0x101F, BIDI_L }, // MYANMAR LETTER HA
+ { 0x1020, BIDI_L }, // MYANMAR LETTER LLA
+ { 0x1021, BIDI_L }, // MYANMAR LETTER A
+ { 0x1022, BIDI_L }, // MYANMAR LETTER SHAN A
+ { 0x1023, BIDI_L }, // MYANMAR LETTER I
+ { 0x1024, BIDI_L }, // MYANMAR LETTER II
+ { 0x1025, BIDI_L }, // MYANMAR LETTER U
+ { 0x1026, BIDI_L }, // MYANMAR LETTER UU
+ { 0x1027, BIDI_L }, // MYANMAR LETTER E
+ { 0x1028, BIDI_L }, // MYANMAR LETTER MON E
+ { 0x1029, BIDI_L }, // MYANMAR LETTER O
+ { 0x102A, BIDI_L }, // MYANMAR LETTER AU
+ { 0x102B, BIDI_L }, // MYANMAR VOWEL SIGN TALL AA
+ { 0x102C, BIDI_L }, // MYANMAR VOWEL SIGN AA
+ { 0x102D, BIDI_NSM }, // MYANMAR VOWEL SIGN I
+ { 0x102E, BIDI_NSM }, // MYANMAR VOWEL SIGN II
+ { 0x102F, BIDI_NSM }, // MYANMAR VOWEL SIGN U
+ { 0x1030, BIDI_NSM }, // MYANMAR VOWEL SIGN UU
+ { 0x1031, BIDI_L }, // MYANMAR VOWEL SIGN E
+ { 0x1032, BIDI_NSM }, // MYANMAR VOWEL SIGN AI
+ { 0x1033, BIDI_NSM }, // MYANMAR VOWEL SIGN MON II
+ { 0x1034, BIDI_NSM }, // MYANMAR VOWEL SIGN MON O
+ { 0x1035, BIDI_NSM }, // MYANMAR VOWEL SIGN E ABOVE
+ { 0x1036, BIDI_NSM }, // MYANMAR SIGN ANUSVARA
+ { 0x1037, BIDI_NSM }, // MYANMAR SIGN DOT BELOW
+ { 0x1038, BIDI_L }, // MYANMAR SIGN VISARGA
+ { 0x1039, BIDI_NSM }, // MYANMAR SIGN VIRAMA
+ { 0x103A, BIDI_NSM }, // MYANMAR SIGN ASAT
+ { 0x103B, BIDI_L }, // MYANMAR CONSONANT SIGN MEDIAL YA
+ { 0x103C, BIDI_L }, // MYANMAR CONSONANT SIGN MEDIAL RA
+ { 0x103D, BIDI_NSM }, // MYANMAR CONSONANT SIGN MEDIAL WA
+ { 0x103E, BIDI_NSM }, // MYANMAR CONSONANT SIGN MEDIAL HA
+ { 0x103F, BIDI_L }, // MYANMAR LETTER GREAT SA
+ { 0x1040, BIDI_L }, // MYANMAR DIGIT ZERO
+ { 0x1041, BIDI_L }, // MYANMAR DIGIT ONE
+ { 0x1042, BIDI_L }, // MYANMAR DIGIT TWO
+ { 0x1043, BIDI_L }, // MYANMAR DIGIT THREE
+ { 0x1044, BIDI_L }, // MYANMAR DIGIT FOUR
+ { 0x1045, BIDI_L }, // MYANMAR DIGIT FIVE
+ { 0x1046, BIDI_L }, // MYANMAR DIGIT SIX
+ { 0x1047, BIDI_L }, // MYANMAR DIGIT SEVEN
+ { 0x1048, BIDI_L }, // MYANMAR DIGIT EIGHT
+ { 0x1049, BIDI_L }, // MYANMAR DIGIT NINE
+ { 0x104A, BIDI_L }, // MYANMAR SIGN LITTLE SECTION
+ { 0x104B, BIDI_L }, // MYANMAR SIGN SECTION
+ { 0x104C, BIDI_L }, // MYANMAR SYMBOL LOCATIVE
+ { 0x104D, BIDI_L }, // MYANMAR SYMBOL COMPLETED
+ { 0x104E, BIDI_L }, // MYANMAR SYMBOL AFOREMENTIONED
+ { 0x104F, BIDI_L }, // MYANMAR SYMBOL GENITIVE
+ { 0x1050, BIDI_L }, // MYANMAR LETTER SHA
+ { 0x1051, BIDI_L }, // MYANMAR LETTER SSA
+ { 0x1052, BIDI_L }, // MYANMAR LETTER VOCALIC R
+ { 0x1053, BIDI_L }, // MYANMAR LETTER VOCALIC RR
+ { 0x1054, BIDI_L }, // MYANMAR LETTER VOCALIC L
+ { 0x1055, BIDI_L }, // MYANMAR LETTER VOCALIC LL
+ { 0x1056, BIDI_L }, // MYANMAR VOWEL SIGN VOCALIC R
+ { 0x1057, BIDI_L }, // MYANMAR VOWEL SIGN VOCALIC RR
+ { 0x1058, BIDI_NSM }, // MYANMAR VOWEL SIGN VOCALIC L
+ { 0x1059, BIDI_NSM }, // MYANMAR VOWEL SIGN VOCALIC LL
+ { 0x105A, BIDI_L }, // MYANMAR LETTER MON NGA
+ { 0x105B, BIDI_L }, // MYANMAR LETTER MON JHA
+ { 0x105C, BIDI_L }, // MYANMAR LETTER MON BBA
+ { 0x105D, BIDI_L }, // MYANMAR LETTER MON BBE
+ { 0x105E, BIDI_NSM }, // MYANMAR CONSONANT SIGN MON MEDIAL NA
+ { 0x105F, BIDI_NSM }, // MYANMAR CONSONANT SIGN MON MEDIAL MA
+ { 0x1060, BIDI_NSM }, // MYANMAR CONSONANT SIGN MON MEDIAL LA
+ { 0x1061, BIDI_L }, // MYANMAR LETTER SGAW KAREN SHA
+ { 0x1062, BIDI_L }, // MYANMAR VOWEL SIGN SGAW KAREN EU
+ { 0x1063, BIDI_L }, // MYANMAR TONE MARK SGAW KAREN HATHI
+ { 0x1064, BIDI_L }, // MYANMAR TONE MARK SGAW KAREN KE PHO
+ { 0x1065, BIDI_L }, // MYANMAR LETTER WESTERN PWO KAREN THA
+ { 0x1066, BIDI_L }, // MYANMAR LETTER WESTERN PWO KAREN PWA
+ { 0x1067, BIDI_L }, // MYANMAR VOWEL SIGN WESTERN PWO KAREN EU
+ { 0x1068, BIDI_L }, // MYANMAR VOWEL SIGN WESTERN PWO KAREN UE
+ { 0x1069, BIDI_L }, // MYANMAR SIGN WESTERN PWO KAREN TONE-1
+ { 0x106A, BIDI_L }, // MYANMAR SIGN WESTERN PWO KAREN TONE-2
+ { 0x106B, BIDI_L }, // MYANMAR SIGN WESTERN PWO KAREN TONE-3
+ { 0x106C, BIDI_L }, // MYANMAR SIGN WESTERN PWO KAREN TONE-4
+ { 0x106D, BIDI_L }, // MYANMAR SIGN WESTERN PWO KAREN TONE-5
+ { 0x106E, BIDI_L }, // MYANMAR LETTER EASTERN PWO KAREN NNA
+ { 0x106F, BIDI_L }, // MYANMAR LETTER EASTERN PWO KAREN YWA
+ { 0x1070, BIDI_L }, // MYANMAR LETTER EASTERN PWO KAREN GHWA
+ { 0x1071, BIDI_NSM }, // MYANMAR VOWEL SIGN GEBA KAREN I
+ { 0x1072, BIDI_NSM }, // MYANMAR VOWEL SIGN KAYAH OE
+ { 0x1073, BIDI_NSM }, // MYANMAR VOWEL SIGN KAYAH U
+ { 0x1074, BIDI_NSM }, // MYANMAR VOWEL SIGN KAYAH EE
+ { 0x1075, BIDI_L }, // MYANMAR LETTER SHAN KA
+ { 0x1076, BIDI_L }, // MYANMAR LETTER SHAN KHA
+ { 0x1077, BIDI_L }, // MYANMAR LETTER SHAN GA
+ { 0x1078, BIDI_L }, // MYANMAR LETTER SHAN CA
+ { 0x1079, BIDI_L }, // MYANMAR LETTER SHAN ZA
+ { 0x107A, BIDI_L }, // MYANMAR LETTER SHAN NYA
+ { 0x107B, BIDI_L }, // MYANMAR LETTER SHAN DA
+ { 0x107C, BIDI_L }, // MYANMAR LETTER SHAN NA
+ { 0x107D, BIDI_L }, // MYANMAR LETTER SHAN PHA
+ { 0x107E, BIDI_L }, // MYANMAR LETTER SHAN FA
+ { 0x107F, BIDI_L }, // MYANMAR LETTER SHAN BA
+ { 0x1080, BIDI_L }, // MYANMAR LETTER SHAN THA
+ { 0x1081, BIDI_L }, // MYANMAR LETTER SHAN HA
+ { 0x1082, BIDI_NSM }, // MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+ { 0x1083, BIDI_L }, // MYANMAR VOWEL SIGN SHAN AA
+ { 0x1084, BIDI_L }, // MYANMAR VOWEL SIGN SHAN E
+ { 0x1085, BIDI_NSM }, // MYANMAR VOWEL SIGN SHAN E ABOVE
+ { 0x1086, BIDI_NSM }, // MYANMAR VOWEL SIGN SHAN FINAL Y
+ { 0x1087, BIDI_L }, // MYANMAR SIGN SHAN TONE-2
+ { 0x1088, BIDI_L }, // MYANMAR SIGN SHAN TONE-3
+ { 0x1089, BIDI_L }, // MYANMAR SIGN SHAN TONE-5
+ { 0x108A, BIDI_L }, // MYANMAR SIGN SHAN TONE-6
+ { 0x108B, BIDI_L }, // MYANMAR SIGN SHAN COUNCIL TONE-2
+ { 0x108C, BIDI_L }, // MYANMAR SIGN SHAN COUNCIL TONE-3
+ { 0x108D, BIDI_NSM }, // MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+ { 0x108E, BIDI_L }, // MYANMAR LETTER RUMAI PALAUNG FA
+ { 0x108F, BIDI_L }, // MYANMAR SIGN RUMAI PALAUNG TONE-5
+ { 0x1090, BIDI_L }, // MYANMAR SHAN DIGIT ZERO
+ { 0x1091, BIDI_L }, // MYANMAR SHAN DIGIT ONE
+ { 0x1092, BIDI_L }, // MYANMAR SHAN DIGIT TWO
+ { 0x1093, BIDI_L }, // MYANMAR SHAN DIGIT THREE
+ { 0x1094, BIDI_L }, // MYANMAR SHAN DIGIT FOUR
+ { 0x1095, BIDI_L }, // MYANMAR SHAN DIGIT FIVE
+ { 0x1096, BIDI_L }, // MYANMAR SHAN DIGIT SIX
+ { 0x1097, BIDI_L }, // MYANMAR SHAN DIGIT SEVEN
+ { 0x1098, BIDI_L }, // MYANMAR SHAN DIGIT EIGHT
+ { 0x1099, BIDI_L }, // MYANMAR SHAN DIGIT NINE
+ { 0x109A, BIDI_L }, // MYANMAR SIGN KHAMTI TONE-1
+ { 0x109B, BIDI_L }, // MYANMAR SIGN KHAMTI TONE-3
+ { 0x109C, BIDI_L }, // MYANMAR VOWEL SIGN AITON A
+ { 0x109D, BIDI_NSM }, // MYANMAR VOWEL SIGN AITON AI
+ { 0x109E, BIDI_L }, // MYANMAR SYMBOL SHAN ONE
+ { 0x109F, BIDI_L }, // MYANMAR SYMBOL SHAN EXCLAMATION
+ { 0x10A0, BIDI_L }, // GEORGIAN CAPITAL LETTER AN
+ { 0x10A1, BIDI_L }, // GEORGIAN CAPITAL LETTER BAN
+ { 0x10A2, BIDI_L }, // GEORGIAN CAPITAL LETTER GAN
+ { 0x10A3, BIDI_L }, // GEORGIAN CAPITAL LETTER DON
+ { 0x10A4, BIDI_L }, // GEORGIAN CAPITAL LETTER EN
+ { 0x10A5, BIDI_L }, // GEORGIAN CAPITAL LETTER VIN
+ { 0x10A6, BIDI_L }, // GEORGIAN CAPITAL LETTER ZEN
+ { 0x10A7, BIDI_L }, // GEORGIAN CAPITAL LETTER TAN
+ { 0x10A8, BIDI_L }, // GEORGIAN CAPITAL LETTER IN
+ { 0x10A9, BIDI_L }, // GEORGIAN CAPITAL LETTER KAN
+ { 0x10AA, BIDI_L }, // GEORGIAN CAPITAL LETTER LAS
+ { 0x10AB, BIDI_L }, // GEORGIAN CAPITAL LETTER MAN
+ { 0x10AC, BIDI_L }, // GEORGIAN CAPITAL LETTER NAR
+ { 0x10AD, BIDI_L }, // GEORGIAN CAPITAL LETTER ON
+ { 0x10AE, BIDI_L }, // GEORGIAN CAPITAL LETTER PAR
+ { 0x10AF, BIDI_L }, // GEORGIAN CAPITAL LETTER ZHAR
+ { 0x10B0, BIDI_L }, // GEORGIAN CAPITAL LETTER RAE
+ { 0x10B1, BIDI_L }, // GEORGIAN CAPITAL LETTER SAN
+ { 0x10B2, BIDI_L }, // GEORGIAN CAPITAL LETTER TAR
+ { 0x10B3, BIDI_L }, // GEORGIAN CAPITAL LETTER UN
+ { 0x10B4, BIDI_L }, // GEORGIAN CAPITAL LETTER PHAR
+ { 0x10B5, BIDI_L }, // GEORGIAN CAPITAL LETTER KHAR
+ { 0x10B6, BIDI_L }, // GEORGIAN CAPITAL LETTER GHAN
+ { 0x10B7, BIDI_L }, // GEORGIAN CAPITAL LETTER QAR
+ { 0x10B8, BIDI_L }, // GEORGIAN CAPITAL LETTER SHIN
+ { 0x10B9, BIDI_L }, // GEORGIAN CAPITAL LETTER CHIN
+ { 0x10BA, BIDI_L }, // GEORGIAN CAPITAL LETTER CAN
+ { 0x10BB, BIDI_L }, // GEORGIAN CAPITAL LETTER JIL
+ { 0x10BC, BIDI_L }, // GEORGIAN CAPITAL LETTER CIL
+ { 0x10BD, BIDI_L }, // GEORGIAN CAPITAL LETTER CHAR
+ { 0x10BE, BIDI_L }, // GEORGIAN CAPITAL LETTER XAN
+ { 0x10BF, BIDI_L }, // GEORGIAN CAPITAL LETTER JHAN
+ { 0x10C0, BIDI_L }, // GEORGIAN CAPITAL LETTER HAE
+ { 0x10C1, BIDI_L }, // GEORGIAN CAPITAL LETTER HE
+ { 0x10C2, BIDI_L }, // GEORGIAN CAPITAL LETTER HIE
+ { 0x10C3, BIDI_L }, // GEORGIAN CAPITAL LETTER WE
+ { 0x10C4, BIDI_L }, // GEORGIAN CAPITAL LETTER HAR
+ { 0x10C5, BIDI_L }, // GEORGIAN CAPITAL LETTER HOE
+ { 0x10C7, BIDI_L }, // GEORGIAN CAPITAL LETTER YN
+ { 0x10CD, BIDI_L }, // GEORGIAN CAPITAL LETTER AEN
+ { 0x10D0, BIDI_L }, // GEORGIAN LETTER AN
+ { 0x10D1, BIDI_L }, // GEORGIAN LETTER BAN
+ { 0x10D2, BIDI_L }, // GEORGIAN LETTER GAN
+ { 0x10D3, BIDI_L }, // GEORGIAN LETTER DON
+ { 0x10D4, BIDI_L }, // GEORGIAN LETTER EN
+ { 0x10D5, BIDI_L }, // GEORGIAN LETTER VIN
+ { 0x10D6, BIDI_L }, // GEORGIAN LETTER ZEN
+ { 0x10D7, BIDI_L }, // GEORGIAN LETTER TAN
+ { 0x10D8, BIDI_L }, // GEORGIAN LETTER IN
+ { 0x10D9, BIDI_L }, // GEORGIAN LETTER KAN
+ { 0x10DA, BIDI_L }, // GEORGIAN LETTER LAS
+ { 0x10DB, BIDI_L }, // GEORGIAN LETTER MAN
+ { 0x10DC, BIDI_L }, // GEORGIAN LETTER NAR
+ { 0x10DD, BIDI_L }, // GEORGIAN LETTER ON
+ { 0x10DE, BIDI_L }, // GEORGIAN LETTER PAR
+ { 0x10DF, BIDI_L }, // GEORGIAN LETTER ZHAR
+ { 0x10E0, BIDI_L }, // GEORGIAN LETTER RAE
+ { 0x10E1, BIDI_L }, // GEORGIAN LETTER SAN
+ { 0x10E2, BIDI_L }, // GEORGIAN LETTER TAR
+ { 0x10E3, BIDI_L }, // GEORGIAN LETTER UN
+ { 0x10E4, BIDI_L }, // GEORGIAN LETTER PHAR
+ { 0x10E5, BIDI_L }, // GEORGIAN LETTER KHAR
+ { 0x10E6, BIDI_L }, // GEORGIAN LETTER GHAN
+ { 0x10E7, BIDI_L }, // GEORGIAN LETTER QAR
+ { 0x10E8, BIDI_L }, // GEORGIAN LETTER SHIN
+ { 0x10E9, BIDI_L }, // GEORGIAN LETTER CHIN
+ { 0x10EA, BIDI_L }, // GEORGIAN LETTER CAN
+ { 0x10EB, BIDI_L }, // GEORGIAN LETTER JIL
+ { 0x10EC, BIDI_L }, // GEORGIAN LETTER CIL
+ { 0x10ED, BIDI_L }, // GEORGIAN LETTER CHAR
+ { 0x10EE, BIDI_L }, // GEORGIAN LETTER XAN
+ { 0x10EF, BIDI_L }, // GEORGIAN LETTER JHAN
+ { 0x10F0, BIDI_L }, // GEORGIAN LETTER HAE
+ { 0x10F1, BIDI_L }, // GEORGIAN LETTER HE
+ { 0x10F2, BIDI_L }, // GEORGIAN LETTER HIE
+ { 0x10F3, BIDI_L }, // GEORGIAN LETTER WE
+ { 0x10F4, BIDI_L }, // GEORGIAN LETTER HAR
+ { 0x10F5, BIDI_L }, // GEORGIAN LETTER HOE
+ { 0x10F6, BIDI_L }, // GEORGIAN LETTER FI
+ { 0x10F7, BIDI_L }, // GEORGIAN LETTER YN
+ { 0x10F8, BIDI_L }, // GEORGIAN LETTER ELIFI
+ { 0x10F9, BIDI_L }, // GEORGIAN LETTER TURNED GAN
+ { 0x10FA, BIDI_L }, // GEORGIAN LETTER AIN
+ { 0x10FB, BIDI_L }, // GEORGIAN PARAGRAPH SEPARATOR
+ { 0x10FC, BIDI_L }, // MODIFIER LETTER GEORGIAN NAR
+ { 0x10FD, BIDI_L }, // GEORGIAN LETTER AEN
+ { 0x10FE, BIDI_L }, // GEORGIAN LETTER HARD SIGN
+ { 0x10FF, BIDI_L }, // GEORGIAN LETTER LABIAL SIGN
+ { 0x1100, BIDI_L }, // HANGUL CHOSEONG KIYEOK
+ { 0x1101, BIDI_L }, // HANGUL CHOSEONG SSANGKIYEOK
+ { 0x1102, BIDI_L }, // HANGUL CHOSEONG NIEUN
+ { 0x1103, BIDI_L }, // HANGUL CHOSEONG TIKEUT
+ { 0x1104, BIDI_L }, // HANGUL CHOSEONG SSANGTIKEUT
+ { 0x1105, BIDI_L }, // HANGUL CHOSEONG RIEUL
+ { 0x1106, BIDI_L }, // HANGUL CHOSEONG MIEUM
+ { 0x1107, BIDI_L }, // HANGUL CHOSEONG PIEUP
+ { 0x1108, BIDI_L }, // HANGUL CHOSEONG SSANGPIEUP
+ { 0x1109, BIDI_L }, // HANGUL CHOSEONG SIOS
+ { 0x110A, BIDI_L }, // HANGUL CHOSEONG SSANGSIOS
+ { 0x110B, BIDI_L }, // HANGUL CHOSEONG IEUNG
+ { 0x110C, BIDI_L }, // HANGUL CHOSEONG CIEUC
+ { 0x110D, BIDI_L }, // HANGUL CHOSEONG SSANGCIEUC
+ { 0x110E, BIDI_L }, // HANGUL CHOSEONG CHIEUCH
+ { 0x110F, BIDI_L }, // HANGUL CHOSEONG KHIEUKH
+ { 0x1110, BIDI_L }, // HANGUL CHOSEONG THIEUTH
+ { 0x1111, BIDI_L }, // HANGUL CHOSEONG PHIEUPH
+ { 0x1112, BIDI_L }, // HANGUL CHOSEONG HIEUH
+ { 0x1113, BIDI_L }, // HANGUL CHOSEONG NIEUN-KIYEOK
+ { 0x1114, BIDI_L }, // HANGUL CHOSEONG SSANGNIEUN
+ { 0x1115, BIDI_L }, // HANGUL CHOSEONG NIEUN-TIKEUT
+ { 0x1116, BIDI_L }, // HANGUL CHOSEONG NIEUN-PIEUP
+ { 0x1117, BIDI_L }, // HANGUL CHOSEONG TIKEUT-KIYEOK
+ { 0x1118, BIDI_L }, // HANGUL CHOSEONG RIEUL-NIEUN
+ { 0x1119, BIDI_L }, // HANGUL CHOSEONG SSANGRIEUL
+ { 0x111A, BIDI_L }, // HANGUL CHOSEONG RIEUL-HIEUH
+ { 0x111B, BIDI_L }, // HANGUL CHOSEONG KAPYEOUNRIEUL
+ { 0x111C, BIDI_L }, // HANGUL CHOSEONG MIEUM-PIEUP
+ { 0x111D, BIDI_L }, // HANGUL CHOSEONG KAPYEOUNMIEUM
+ { 0x111E, BIDI_L }, // HANGUL CHOSEONG PIEUP-KIYEOK
+ { 0x111F, BIDI_L }, // HANGUL CHOSEONG PIEUP-NIEUN
+ { 0x1120, BIDI_L }, // HANGUL CHOSEONG PIEUP-TIKEUT
+ { 0x1121, BIDI_L }, // HANGUL CHOSEONG PIEUP-SIOS
+ { 0x1122, BIDI_L }, // HANGUL CHOSEONG PIEUP-SIOS-KIYEOK
+ { 0x1123, BIDI_L }, // HANGUL CHOSEONG PIEUP-SIOS-TIKEUT
+ { 0x1124, BIDI_L }, // HANGUL CHOSEONG PIEUP-SIOS-PIEUP
+ { 0x1125, BIDI_L }, // HANGUL CHOSEONG PIEUP-SSANGSIOS
+ { 0x1126, BIDI_L }, // HANGUL CHOSEONG PIEUP-SIOS-CIEUC
+ { 0x1127, BIDI_L }, // HANGUL CHOSEONG PIEUP-CIEUC
+ { 0x1128, BIDI_L }, // HANGUL CHOSEONG PIEUP-CHIEUCH
+ { 0x1129, BIDI_L }, // HANGUL CHOSEONG PIEUP-THIEUTH
+ { 0x112A, BIDI_L }, // HANGUL CHOSEONG PIEUP-PHIEUPH
+ { 0x112B, BIDI_L }, // HANGUL CHOSEONG KAPYEOUNPIEUP
+ { 0x112C, BIDI_L }, // HANGUL CHOSEONG KAPYEOUNSSANGPIEUP
+ { 0x112D, BIDI_L }, // HANGUL CHOSEONG SIOS-KIYEOK
+ { 0x112E, BIDI_L }, // HANGUL CHOSEONG SIOS-NIEUN
+ { 0x112F, BIDI_L }, // HANGUL CHOSEONG SIOS-TIKEUT
+ { 0x1130, BIDI_L }, // HANGUL CHOSEONG SIOS-RIEUL
+ { 0x1131, BIDI_L }, // HANGUL CHOSEONG SIOS-MIEUM
+ { 0x1132, BIDI_L }, // HANGUL CHOSEONG SIOS-PIEUP
+ { 0x1133, BIDI_L }, // HANGUL CHOSEONG SIOS-PIEUP-KIYEOK
+ { 0x1134, BIDI_L }, // HANGUL CHOSEONG SIOS-SSANGSIOS
+ { 0x1135, BIDI_L }, // HANGUL CHOSEONG SIOS-IEUNG
+ { 0x1136, BIDI_L }, // HANGUL CHOSEONG SIOS-CIEUC
+ { 0x1137, BIDI_L }, // HANGUL CHOSEONG SIOS-CHIEUCH
+ { 0x1138, BIDI_L }, // HANGUL CHOSEONG SIOS-KHIEUKH
+ { 0x1139, BIDI_L }, // HANGUL CHOSEONG SIOS-THIEUTH
+ { 0x113A, BIDI_L }, // HANGUL CHOSEONG SIOS-PHIEUPH
+ { 0x113B, BIDI_L }, // HANGUL CHOSEONG SIOS-HIEUH
+ { 0x113C, BIDI_L }, // HANGUL CHOSEONG CHITUEUMSIOS
+ { 0x113D, BIDI_L }, // HANGUL CHOSEONG CHITUEUMSSANGSIOS
+ { 0x113E, BIDI_L }, // HANGUL CHOSEONG CEONGCHIEUMSIOS
+ { 0x113F, BIDI_L }, // HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS
+ { 0x1140, BIDI_L }, // HANGUL CHOSEONG PANSIOS
+ { 0x1141, BIDI_L }, // HANGUL CHOSEONG IEUNG-KIYEOK
+ { 0x1142, BIDI_L }, // HANGUL CHOSEONG IEUNG-TIKEUT
+ { 0x1143, BIDI_L }, // HANGUL CHOSEONG IEUNG-MIEUM
+ { 0x1144, BIDI_L }, // HANGUL CHOSEONG IEUNG-PIEUP
+ { 0x1145, BIDI_L }, // HANGUL CHOSEONG IEUNG-SIOS
+ { 0x1146, BIDI_L }, // HANGUL CHOSEONG IEUNG-PANSIOS
+ { 0x1147, BIDI_L }, // HANGUL CHOSEONG SSANGIEUNG
+ { 0x1148, BIDI_L }, // HANGUL CHOSEONG IEUNG-CIEUC
+ { 0x1149, BIDI_L }, // HANGUL CHOSEONG IEUNG-CHIEUCH
+ { 0x114A, BIDI_L }, // HANGUL CHOSEONG IEUNG-THIEUTH
+ { 0x114B, BIDI_L }, // HANGUL CHOSEONG IEUNG-PHIEUPH
+ { 0x114C, BIDI_L }, // HANGUL CHOSEONG YESIEUNG
+ { 0x114D, BIDI_L }, // HANGUL CHOSEONG CIEUC-IEUNG
+ { 0x114E, BIDI_L }, // HANGUL CHOSEONG CHITUEUMCIEUC
+ { 0x114F, BIDI_L }, // HANGUL CHOSEONG CHITUEUMSSANGCIEUC
+ { 0x1150, BIDI_L }, // HANGUL CHOSEONG CEONGCHIEUMCIEUC
+ { 0x1151, BIDI_L }, // HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC
+ { 0x1152, BIDI_L }, // HANGUL CHOSEONG CHIEUCH-KHIEUKH
+ { 0x1153, BIDI_L }, // HANGUL CHOSEONG CHIEUCH-HIEUH
+ { 0x1154, BIDI_L }, // HANGUL CHOSEONG CHITUEUMCHIEUCH
+ { 0x1155, BIDI_L }, // HANGUL CHOSEONG CEONGCHIEUMCHIEUCH
+ { 0x1156, BIDI_L }, // HANGUL CHOSEONG PHIEUPH-PIEUP
+ { 0x1157, BIDI_L }, // HANGUL CHOSEONG KAPYEOUNPHIEUPH
+ { 0x1158, BIDI_L }, // HANGUL CHOSEONG SSANGHIEUH
+ { 0x1159, BIDI_L }, // HANGUL CHOSEONG YEORINHIEUH
+ { 0x115A, BIDI_L }, // HANGUL CHOSEONG KIYEOK-TIKEUT
+ { 0x115B, BIDI_L }, // HANGUL CHOSEONG NIEUN-SIOS
+ { 0x115C, BIDI_L }, // HANGUL CHOSEONG NIEUN-CIEUC
+ { 0x115D, BIDI_L }, // HANGUL CHOSEONG NIEUN-HIEUH
+ { 0x115E, BIDI_L }, // HANGUL CHOSEONG TIKEUT-RIEUL
+ { 0x115F, BIDI_L }, // HANGUL CHOSEONG FILLER
+ { 0x1160, BIDI_L }, // HANGUL JUNGSEONG FILLER
+ { 0x1161, BIDI_L }, // HANGUL JUNGSEONG A
+ { 0x1162, BIDI_L }, // HANGUL JUNGSEONG AE
+ { 0x1163, BIDI_L }, // HANGUL JUNGSEONG YA
+ { 0x1164, BIDI_L }, // HANGUL JUNGSEONG YAE
+ { 0x1165, BIDI_L }, // HANGUL JUNGSEONG EO
+ { 0x1166, BIDI_L }, // HANGUL JUNGSEONG E
+ { 0x1167, BIDI_L }, // HANGUL JUNGSEONG YEO
+ { 0x1168, BIDI_L }, // HANGUL JUNGSEONG YE
+ { 0x1169, BIDI_L }, // HANGUL JUNGSEONG O
+ { 0x116A, BIDI_L }, // HANGUL JUNGSEONG WA
+ { 0x116B, BIDI_L }, // HANGUL JUNGSEONG WAE
+ { 0x116C, BIDI_L }, // HANGUL JUNGSEONG OE
+ { 0x116D, BIDI_L }, // HANGUL JUNGSEONG YO
+ { 0x116E, BIDI_L }, // HANGUL JUNGSEONG U
+ { 0x116F, BIDI_L }, // HANGUL JUNGSEONG WEO
+ { 0x1170, BIDI_L }, // HANGUL JUNGSEONG WE
+ { 0x1171, BIDI_L }, // HANGUL JUNGSEONG WI
+ { 0x1172, BIDI_L }, // HANGUL JUNGSEONG YU
+ { 0x1173, BIDI_L }, // HANGUL JUNGSEONG EU
+ { 0x1174, BIDI_L }, // HANGUL JUNGSEONG YI
+ { 0x1175, BIDI_L }, // HANGUL JUNGSEONG I
+ { 0x1176, BIDI_L }, // HANGUL JUNGSEONG A-O
+ { 0x1177, BIDI_L }, // HANGUL JUNGSEONG A-U
+ { 0x1178, BIDI_L }, // HANGUL JUNGSEONG YA-O
+ { 0x1179, BIDI_L }, // HANGUL JUNGSEONG YA-YO
+ { 0x117A, BIDI_L }, // HANGUL JUNGSEONG EO-O
+ { 0x117B, BIDI_L }, // HANGUL JUNGSEONG EO-U
+ { 0x117C, BIDI_L }, // HANGUL JUNGSEONG EO-EU
+ { 0x117D, BIDI_L }, // HANGUL JUNGSEONG YEO-O
+ { 0x117E, BIDI_L }, // HANGUL JUNGSEONG YEO-U
+ { 0x117F, BIDI_L }, // HANGUL JUNGSEONG O-EO
+ { 0x1180, BIDI_L }, // HANGUL JUNGSEONG O-E
+ { 0x1181, BIDI_L }, // HANGUL JUNGSEONG O-YE
+ { 0x1182, BIDI_L }, // HANGUL JUNGSEONG O-O
+ { 0x1183, BIDI_L }, // HANGUL JUNGSEONG O-U
+ { 0x1184, BIDI_L }, // HANGUL JUNGSEONG YO-YA
+ { 0x1185, BIDI_L }, // HANGUL JUNGSEONG YO-YAE
+ { 0x1186, BIDI_L }, // HANGUL JUNGSEONG YO-YEO
+ { 0x1187, BIDI_L }, // HANGUL JUNGSEONG YO-O
+ { 0x1188, BIDI_L }, // HANGUL JUNGSEONG YO-I
+ { 0x1189, BIDI_L }, // HANGUL JUNGSEONG U-A
+ { 0x118A, BIDI_L }, // HANGUL JUNGSEONG U-AE
+ { 0x118B, BIDI_L }, // HANGUL JUNGSEONG U-EO-EU
+ { 0x118C, BIDI_L }, // HANGUL JUNGSEONG U-YE
+ { 0x118D, BIDI_L }, // HANGUL JUNGSEONG U-U
+ { 0x118E, BIDI_L }, // HANGUL JUNGSEONG YU-A
+ { 0x118F, BIDI_L }, // HANGUL JUNGSEONG YU-EO
+ { 0x1190, BIDI_L }, // HANGUL JUNGSEONG YU-E
+ { 0x1191, BIDI_L }, // HANGUL JUNGSEONG YU-YEO
+ { 0x1192, BIDI_L }, // HANGUL JUNGSEONG YU-YE
+ { 0x1193, BIDI_L }, // HANGUL JUNGSEONG YU-U
+ { 0x1194, BIDI_L }, // HANGUL JUNGSEONG YU-I
+ { 0x1195, BIDI_L }, // HANGUL JUNGSEONG EU-U
+ { 0x1196, BIDI_L }, // HANGUL JUNGSEONG EU-EU
+ { 0x1197, BIDI_L }, // HANGUL JUNGSEONG YI-U
+ { 0x1198, BIDI_L }, // HANGUL JUNGSEONG I-A
+ { 0x1199, BIDI_L }, // HANGUL JUNGSEONG I-YA
+ { 0x119A, BIDI_L }, // HANGUL JUNGSEONG I-O
+ { 0x119B, BIDI_L }, // HANGUL JUNGSEONG I-U
+ { 0x119C, BIDI_L }, // HANGUL JUNGSEONG I-EU
+ { 0x119D, BIDI_L }, // HANGUL JUNGSEONG I-ARAEA
+ { 0x119E, BIDI_L }, // HANGUL JUNGSEONG ARAEA
+ { 0x119F, BIDI_L }, // HANGUL JUNGSEONG ARAEA-EO
+ { 0x11A0, BIDI_L }, // HANGUL JUNGSEONG ARAEA-U
+ { 0x11A1, BIDI_L }, // HANGUL JUNGSEONG ARAEA-I
+ { 0x11A2, BIDI_L }, // HANGUL JUNGSEONG SSANGARAEA
+ { 0x11A3, BIDI_L }, // HANGUL JUNGSEONG A-EU
+ { 0x11A4, BIDI_L }, // HANGUL JUNGSEONG YA-U
+ { 0x11A5, BIDI_L }, // HANGUL JUNGSEONG YEO-YA
+ { 0x11A6, BIDI_L }, // HANGUL JUNGSEONG O-YA
+ { 0x11A7, BIDI_L }, // HANGUL JUNGSEONG O-YAE
+ { 0x11A8, BIDI_L }, // HANGUL JONGSEONG KIYEOK
+ { 0x11A9, BIDI_L }, // HANGUL JONGSEONG SSANGKIYEOK
+ { 0x11AA, BIDI_L }, // HANGUL JONGSEONG KIYEOK-SIOS
+ { 0x11AB, BIDI_L }, // HANGUL JONGSEONG NIEUN
+ { 0x11AC, BIDI_L }, // HANGUL JONGSEONG NIEUN-CIEUC
+ { 0x11AD, BIDI_L }, // HANGUL JONGSEONG NIEUN-HIEUH
+ { 0x11AE, BIDI_L }, // HANGUL JONGSEONG TIKEUT
+ { 0x11AF, BIDI_L }, // HANGUL JONGSEONG RIEUL
+ { 0x11B0, BIDI_L }, // HANGUL JONGSEONG RIEUL-KIYEOK
+ { 0x11B1, BIDI_L }, // HANGUL JONGSEONG RIEUL-MIEUM
+ { 0x11B2, BIDI_L }, // HANGUL JONGSEONG RIEUL-PIEUP
+ { 0x11B3, BIDI_L }, // HANGUL JONGSEONG RIEUL-SIOS
+ { 0x11B4, BIDI_L }, // HANGUL JONGSEONG RIEUL-THIEUTH
+ { 0x11B5, BIDI_L }, // HANGUL JONGSEONG RIEUL-PHIEUPH
+ { 0x11B6, BIDI_L }, // HANGUL JONGSEONG RIEUL-HIEUH
+ { 0x11B7, BIDI_L }, // HANGUL JONGSEONG MIEUM
+ { 0x11B8, BIDI_L }, // HANGUL JONGSEONG PIEUP
+ { 0x11B9, BIDI_L }, // HANGUL JONGSEONG PIEUP-SIOS
+ { 0x11BA, BIDI_L }, // HANGUL JONGSEONG SIOS
+ { 0x11BB, BIDI_L }, // HANGUL JONGSEONG SSANGSIOS
+ { 0x11BC, BIDI_L }, // HANGUL JONGSEONG IEUNG
+ { 0x11BD, BIDI_L }, // HANGUL JONGSEONG CIEUC
+ { 0x11BE, BIDI_L }, // HANGUL JONGSEONG CHIEUCH
+ { 0x11BF, BIDI_L }, // HANGUL JONGSEONG KHIEUKH
+ { 0x11C0, BIDI_L }, // HANGUL JONGSEONG THIEUTH
+ { 0x11C1, BIDI_L }, // HANGUL JONGSEONG PHIEUPH
+ { 0x11C2, BIDI_L }, // HANGUL JONGSEONG HIEUH
+ { 0x11C3, BIDI_L }, // HANGUL JONGSEONG KIYEOK-RIEUL
+ { 0x11C4, BIDI_L }, // HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK
+ { 0x11C5, BIDI_L }, // HANGUL JONGSEONG NIEUN-KIYEOK
+ { 0x11C6, BIDI_L }, // HANGUL JONGSEONG NIEUN-TIKEUT
+ { 0x11C7, BIDI_L }, // HANGUL JONGSEONG NIEUN-SIOS
+ { 0x11C8, BIDI_L }, // HANGUL JONGSEONG NIEUN-PANSIOS
+ { 0x11C9, BIDI_L }, // HANGUL JONGSEONG NIEUN-THIEUTH
+ { 0x11CA, BIDI_L }, // HANGUL JONGSEONG TIKEUT-KIYEOK
+ { 0x11CB, BIDI_L }, // HANGUL JONGSEONG TIKEUT-RIEUL
+ { 0x11CC, BIDI_L }, // HANGUL JONGSEONG RIEUL-KIYEOK-SIOS
+ { 0x11CD, BIDI_L }, // HANGUL JONGSEONG RIEUL-NIEUN
+ { 0x11CE, BIDI_L }, // HANGUL JONGSEONG RIEUL-TIKEUT
+ { 0x11CF, BIDI_L }, // HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH
+ { 0x11D0, BIDI_L }, // HANGUL JONGSEONG SSANGRIEUL
+ { 0x11D1, BIDI_L }, // HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK
+ { 0x11D2, BIDI_L }, // HANGUL JONGSEONG RIEUL-MIEUM-SIOS
+ { 0x11D3, BIDI_L }, // HANGUL JONGSEONG RIEUL-PIEUP-SIOS
+ { 0x11D4, BIDI_L }, // HANGUL JONGSEONG RIEUL-PIEUP-HIEUH
+ { 0x11D5, BIDI_L }, // HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP
+ { 0x11D6, BIDI_L }, // HANGUL JONGSEONG RIEUL-SSANGSIOS
+ { 0x11D7, BIDI_L }, // HANGUL JONGSEONG RIEUL-PANSIOS
+ { 0x11D8, BIDI_L }, // HANGUL JONGSEONG RIEUL-KHIEUKH
+ { 0x11D9, BIDI_L }, // HANGUL JONGSEONG RIEUL-YEORINHIEUH
+ { 0x11DA, BIDI_L }, // HANGUL JONGSEONG MIEUM-KIYEOK
+ { 0x11DB, BIDI_L }, // HANGUL JONGSEONG MIEUM-RIEUL
+ { 0x11DC, BIDI_L }, // HANGUL JONGSEONG MIEUM-PIEUP
+ { 0x11DD, BIDI_L }, // HANGUL JONGSEONG MIEUM-SIOS
+ { 0x11DE, BIDI_L }, // HANGUL JONGSEONG MIEUM-SSANGSIOS
+ { 0x11DF, BIDI_L }, // HANGUL JONGSEONG MIEUM-PANSIOS
+ { 0x11E0, BIDI_L }, // HANGUL JONGSEONG MIEUM-CHIEUCH
+ { 0x11E1, BIDI_L }, // HANGUL JONGSEONG MIEUM-HIEUH
+ { 0x11E2, BIDI_L }, // HANGUL JONGSEONG KAPYEOUNMIEUM
+ { 0x11E3, BIDI_L }, // HANGUL JONGSEONG PIEUP-RIEUL
+ { 0x11E4, BIDI_L }, // HANGUL JONGSEONG PIEUP-PHIEUPH
+ { 0x11E5, BIDI_L }, // HANGUL JONGSEONG PIEUP-HIEUH
+ { 0x11E6, BIDI_L }, // HANGUL JONGSEONG KAPYEOUNPIEUP
+ { 0x11E7, BIDI_L }, // HANGUL JONGSEONG SIOS-KIYEOK
+ { 0x11E8, BIDI_L }, // HANGUL JONGSEONG SIOS-TIKEUT
+ { 0x11E9, BIDI_L }, // HANGUL JONGSEONG SIOS-RIEUL
+ { 0x11EA, BIDI_L }, // HANGUL JONGSEONG SIOS-PIEUP
+ { 0x11EB, BIDI_L }, // HANGUL JONGSEONG PANSIOS
+ { 0x11EC, BIDI_L }, // HANGUL JONGSEONG IEUNG-KIYEOK
+ { 0x11ED, BIDI_L }, // HANGUL JONGSEONG IEUNG-SSANGKIYEOK
+ { 0x11EE, BIDI_L }, // HANGUL JONGSEONG SSANGIEUNG
+ { 0x11EF, BIDI_L }, // HANGUL JONGSEONG IEUNG-KHIEUKH
+ { 0x11F0, BIDI_L }, // HANGUL JONGSEONG YESIEUNG
+ { 0x11F1, BIDI_L }, // HANGUL JONGSEONG YESIEUNG-SIOS
+ { 0x11F2, BIDI_L }, // HANGUL JONGSEONG YESIEUNG-PANSIOS
+ { 0x11F3, BIDI_L }, // HANGUL JONGSEONG PHIEUPH-PIEUP
+ { 0x11F4, BIDI_L }, // HANGUL JONGSEONG KAPYEOUNPHIEUPH
+ { 0x11F5, BIDI_L }, // HANGUL JONGSEONG HIEUH-NIEUN
+ { 0x11F6, BIDI_L }, // HANGUL JONGSEONG HIEUH-RIEUL
+ { 0x11F7, BIDI_L }, // HANGUL JONGSEONG HIEUH-MIEUM
+ { 0x11F8, BIDI_L }, // HANGUL JONGSEONG HIEUH-PIEUP
+ { 0x11F9, BIDI_L }, // HANGUL JONGSEONG YEORINHIEUH
+ { 0x11FA, BIDI_L }, // HANGUL JONGSEONG KIYEOK-NIEUN
+ { 0x11FB, BIDI_L }, // HANGUL JONGSEONG KIYEOK-PIEUP
+ { 0x11FC, BIDI_L }, // HANGUL JONGSEONG KIYEOK-CHIEUCH
+ { 0x11FD, BIDI_L }, // HANGUL JONGSEONG KIYEOK-KHIEUKH
+ { 0x11FE, BIDI_L }, // HANGUL JONGSEONG KIYEOK-HIEUH
+ { 0x11FF, BIDI_L }, // HANGUL JONGSEONG SSANGNIEUN
+ { 0x1200, BIDI_L }, // ETHIOPIC SYLLABLE HA
+ { 0x1201, BIDI_L }, // ETHIOPIC SYLLABLE HU
+ { 0x1202, BIDI_L }, // ETHIOPIC SYLLABLE HI
+ { 0x1203, BIDI_L }, // ETHIOPIC SYLLABLE HAA
+ { 0x1204, BIDI_L }, // ETHIOPIC SYLLABLE HEE
+ { 0x1205, BIDI_L }, // ETHIOPIC SYLLABLE HE
+ { 0x1206, BIDI_L }, // ETHIOPIC SYLLABLE HO
+ { 0x1207, BIDI_L }, // ETHIOPIC SYLLABLE HOA
+ { 0x1208, BIDI_L }, // ETHIOPIC SYLLABLE LA
+ { 0x1209, BIDI_L }, // ETHIOPIC SYLLABLE LU
+ { 0x120A, BIDI_L }, // ETHIOPIC SYLLABLE LI
+ { 0x120B, BIDI_L }, // ETHIOPIC SYLLABLE LAA
+ { 0x120C, BIDI_L }, // ETHIOPIC SYLLABLE LEE
+ { 0x120D, BIDI_L }, // ETHIOPIC SYLLABLE LE
+ { 0x120E, BIDI_L }, // ETHIOPIC SYLLABLE LO
+ { 0x120F, BIDI_L }, // ETHIOPIC SYLLABLE LWA
+ { 0x1210, BIDI_L }, // ETHIOPIC SYLLABLE HHA
+ { 0x1211, BIDI_L }, // ETHIOPIC SYLLABLE HHU
+ { 0x1212, BIDI_L }, // ETHIOPIC SYLLABLE HHI
+ { 0x1213, BIDI_L }, // ETHIOPIC SYLLABLE HHAA
+ { 0x1214, BIDI_L }, // ETHIOPIC SYLLABLE HHEE
+ { 0x1215, BIDI_L }, // ETHIOPIC SYLLABLE HHE
+ { 0x1216, BIDI_L }, // ETHIOPIC SYLLABLE HHO
+ { 0x1217, BIDI_L }, // ETHIOPIC SYLLABLE HHWA
+ { 0x1218, BIDI_L }, // ETHIOPIC SYLLABLE MA
+ { 0x1219, BIDI_L }, // ETHIOPIC SYLLABLE MU
+ { 0x121A, BIDI_L }, // ETHIOPIC SYLLABLE MI
+ { 0x121B, BIDI_L }, // ETHIOPIC SYLLABLE MAA
+ { 0x121C, BIDI_L }, // ETHIOPIC SYLLABLE MEE
+ { 0x121D, BIDI_L }, // ETHIOPIC SYLLABLE ME
+ { 0x121E, BIDI_L }, // ETHIOPIC SYLLABLE MO
+ { 0x121F, BIDI_L }, // ETHIOPIC SYLLABLE MWA
+ { 0x1220, BIDI_L }, // ETHIOPIC SYLLABLE SZA
+ { 0x1221, BIDI_L }, // ETHIOPIC SYLLABLE SZU
+ { 0x1222, BIDI_L }, // ETHIOPIC SYLLABLE SZI
+ { 0x1223, BIDI_L }, // ETHIOPIC SYLLABLE SZAA
+ { 0x1224, BIDI_L }, // ETHIOPIC SYLLABLE SZEE
+ { 0x1225, BIDI_L }, // ETHIOPIC SYLLABLE SZE
+ { 0x1226, BIDI_L }, // ETHIOPIC SYLLABLE SZO
+ { 0x1227, BIDI_L }, // ETHIOPIC SYLLABLE SZWA
+ { 0x1228, BIDI_L }, // ETHIOPIC SYLLABLE RA
+ { 0x1229, BIDI_L }, // ETHIOPIC SYLLABLE RU
+ { 0x122A, BIDI_L }, // ETHIOPIC SYLLABLE RI
+ { 0x122B, BIDI_L }, // ETHIOPIC SYLLABLE RAA
+ { 0x122C, BIDI_L }, // ETHIOPIC SYLLABLE REE
+ { 0x122D, BIDI_L }, // ETHIOPIC SYLLABLE RE
+ { 0x122E, BIDI_L }, // ETHIOPIC SYLLABLE RO
+ { 0x122F, BIDI_L }, // ETHIOPIC SYLLABLE RWA
+ { 0x1230, BIDI_L }, // ETHIOPIC SYLLABLE SA
+ { 0x1231, BIDI_L }, // ETHIOPIC SYLLABLE SU
+ { 0x1232, BIDI_L }, // ETHIOPIC SYLLABLE SI
+ { 0x1233, BIDI_L }, // ETHIOPIC SYLLABLE SAA
+ { 0x1234, BIDI_L }, // ETHIOPIC SYLLABLE SEE
+ { 0x1235, BIDI_L }, // ETHIOPIC SYLLABLE SE
+ { 0x1236, BIDI_L }, // ETHIOPIC SYLLABLE SO
+ { 0x1237, BIDI_L }, // ETHIOPIC SYLLABLE SWA
+ { 0x1238, BIDI_L }, // ETHIOPIC SYLLABLE SHA
+ { 0x1239, BIDI_L }, // ETHIOPIC SYLLABLE SHU
+ { 0x123A, BIDI_L }, // ETHIOPIC SYLLABLE SHI
+ { 0x123B, BIDI_L }, // ETHIOPIC SYLLABLE SHAA
+ { 0x123C, BIDI_L }, // ETHIOPIC SYLLABLE SHEE
+ { 0x123D, BIDI_L }, // ETHIOPIC SYLLABLE SHE
+ { 0x123E, BIDI_L }, // ETHIOPIC SYLLABLE SHO
+ { 0x123F, BIDI_L }, // ETHIOPIC SYLLABLE SHWA
+ { 0x1240, BIDI_L }, // ETHIOPIC SYLLABLE QA
+ { 0x1241, BIDI_L }, // ETHIOPIC SYLLABLE QU
+ { 0x1242, BIDI_L }, // ETHIOPIC SYLLABLE QI
+ { 0x1243, BIDI_L }, // ETHIOPIC SYLLABLE QAA
+ { 0x1244, BIDI_L }, // ETHIOPIC SYLLABLE QEE
+ { 0x1245, BIDI_L }, // ETHIOPIC SYLLABLE QE
+ { 0x1246, BIDI_L }, // ETHIOPIC SYLLABLE QO
+ { 0x1247, BIDI_L }, // ETHIOPIC SYLLABLE QOA
+ { 0x1248, BIDI_L }, // ETHIOPIC SYLLABLE QWA
+ { 0x124A, BIDI_L }, // ETHIOPIC SYLLABLE QWI
+ { 0x124B, BIDI_L }, // ETHIOPIC SYLLABLE QWAA
+ { 0x124C, BIDI_L }, // ETHIOPIC SYLLABLE QWEE
+ { 0x124D, BIDI_L }, // ETHIOPIC SYLLABLE QWE
+ { 0x1250, BIDI_L }, // ETHIOPIC SYLLABLE QHA
+ { 0x1251, BIDI_L }, // ETHIOPIC SYLLABLE QHU
+ { 0x1252, BIDI_L }, // ETHIOPIC SYLLABLE QHI
+ { 0x1253, BIDI_L }, // ETHIOPIC SYLLABLE QHAA
+ { 0x1254, BIDI_L }, // ETHIOPIC SYLLABLE QHEE
+ { 0x1255, BIDI_L }, // ETHIOPIC SYLLABLE QHE
+ { 0x1256, BIDI_L }, // ETHIOPIC SYLLABLE QHO
+ { 0x1258, BIDI_L }, // ETHIOPIC SYLLABLE QHWA
+ { 0x125A, BIDI_L }, // ETHIOPIC SYLLABLE QHWI
+ { 0x125B, BIDI_L }, // ETHIOPIC SYLLABLE QHWAA
+ { 0x125C, BIDI_L }, // ETHIOPIC SYLLABLE QHWEE
+ { 0x125D, BIDI_L }, // ETHIOPIC SYLLABLE QHWE
+ { 0x1260, BIDI_L }, // ETHIOPIC SYLLABLE BA
+ { 0x1261, BIDI_L }, // ETHIOPIC SYLLABLE BU
+ { 0x1262, BIDI_L }, // ETHIOPIC SYLLABLE BI
+ { 0x1263, BIDI_L }, // ETHIOPIC SYLLABLE BAA
+ { 0x1264, BIDI_L }, // ETHIOPIC SYLLABLE BEE
+ { 0x1265, BIDI_L }, // ETHIOPIC SYLLABLE BE
+ { 0x1266, BIDI_L }, // ETHIOPIC SYLLABLE BO
+ { 0x1267, BIDI_L }, // ETHIOPIC SYLLABLE BWA
+ { 0x1268, BIDI_L }, // ETHIOPIC SYLLABLE VA
+ { 0x1269, BIDI_L }, // ETHIOPIC SYLLABLE VU
+ { 0x126A, BIDI_L }, // ETHIOPIC SYLLABLE VI
+ { 0x126B, BIDI_L }, // ETHIOPIC SYLLABLE VAA
+ { 0x126C, BIDI_L }, // ETHIOPIC SYLLABLE VEE
+ { 0x126D, BIDI_L }, // ETHIOPIC SYLLABLE VE
+ { 0x126E, BIDI_L }, // ETHIOPIC SYLLABLE VO
+ { 0x126F, BIDI_L }, // ETHIOPIC SYLLABLE VWA
+ { 0x1270, BIDI_L }, // ETHIOPIC SYLLABLE TA
+ { 0x1271, BIDI_L }, // ETHIOPIC SYLLABLE TU
+ { 0x1272, BIDI_L }, // ETHIOPIC SYLLABLE TI
+ { 0x1273, BIDI_L }, // ETHIOPIC SYLLABLE TAA
+ { 0x1274, BIDI_L }, // ETHIOPIC SYLLABLE TEE
+ { 0x1275, BIDI_L }, // ETHIOPIC SYLLABLE TE
+ { 0x1276, BIDI_L }, // ETHIOPIC SYLLABLE TO
+ { 0x1277, BIDI_L }, // ETHIOPIC SYLLABLE TWA
+ { 0x1278, BIDI_L }, // ETHIOPIC SYLLABLE CA
+ { 0x1279, BIDI_L }, // ETHIOPIC SYLLABLE CU
+ { 0x127A, BIDI_L }, // ETHIOPIC SYLLABLE CI
+ { 0x127B, BIDI_L }, // ETHIOPIC SYLLABLE CAA
+ { 0x127C, BIDI_L }, // ETHIOPIC SYLLABLE CEE
+ { 0x127D, BIDI_L }, // ETHIOPIC SYLLABLE CE
+ { 0x127E, BIDI_L }, // ETHIOPIC SYLLABLE CO
+ { 0x127F, BIDI_L }, // ETHIOPIC SYLLABLE CWA
+ { 0x1280, BIDI_L }, // ETHIOPIC SYLLABLE XA
+ { 0x1281, BIDI_L }, // ETHIOPIC SYLLABLE XU
+ { 0x1282, BIDI_L }, // ETHIOPIC SYLLABLE XI
+ { 0x1283, BIDI_L }, // ETHIOPIC SYLLABLE XAA
+ { 0x1284, BIDI_L }, // ETHIOPIC SYLLABLE XEE
+ { 0x1285, BIDI_L }, // ETHIOPIC SYLLABLE XE
+ { 0x1286, BIDI_L }, // ETHIOPIC SYLLABLE XO
+ { 0x1287, BIDI_L }, // ETHIOPIC SYLLABLE XOA
+ { 0x1288, BIDI_L }, // ETHIOPIC SYLLABLE XWA
+ { 0x128A, BIDI_L }, // ETHIOPIC SYLLABLE XWI
+ { 0x128B, BIDI_L }, // ETHIOPIC SYLLABLE XWAA
+ { 0x128C, BIDI_L }, // ETHIOPIC SYLLABLE XWEE
+ { 0x128D, BIDI_L }, // ETHIOPIC SYLLABLE XWE
+ { 0x1290, BIDI_L }, // ETHIOPIC SYLLABLE NA
+ { 0x1291, BIDI_L }, // ETHIOPIC SYLLABLE NU
+ { 0x1292, BIDI_L }, // ETHIOPIC SYLLABLE NI
+ { 0x1293, BIDI_L }, // ETHIOPIC SYLLABLE NAA
+ { 0x1294, BIDI_L }, // ETHIOPIC SYLLABLE NEE
+ { 0x1295, BIDI_L }, // ETHIOPIC SYLLABLE NE
+ { 0x1296, BIDI_L }, // ETHIOPIC SYLLABLE NO
+ { 0x1297, BIDI_L }, // ETHIOPIC SYLLABLE NWA
+ { 0x1298, BIDI_L }, // ETHIOPIC SYLLABLE NYA
+ { 0x1299, BIDI_L }, // ETHIOPIC SYLLABLE NYU
+ { 0x129A, BIDI_L }, // ETHIOPIC SYLLABLE NYI
+ { 0x129B, BIDI_L }, // ETHIOPIC SYLLABLE NYAA
+ { 0x129C, BIDI_L }, // ETHIOPIC SYLLABLE NYEE
+ { 0x129D, BIDI_L }, // ETHIOPIC SYLLABLE NYE
+ { 0x129E, BIDI_L }, // ETHIOPIC SYLLABLE NYO
+ { 0x129F, BIDI_L }, // ETHIOPIC SYLLABLE NYWA
+ { 0x12A0, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL A
+ { 0x12A1, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL U
+ { 0x12A2, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL I
+ { 0x12A3, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL AA
+ { 0x12A4, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL EE
+ { 0x12A5, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL E
+ { 0x12A6, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL O
+ { 0x12A7, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL WA
+ { 0x12A8, BIDI_L }, // ETHIOPIC SYLLABLE KA
+ { 0x12A9, BIDI_L }, // ETHIOPIC SYLLABLE KU
+ { 0x12AA, BIDI_L }, // ETHIOPIC SYLLABLE KI
+ { 0x12AB, BIDI_L }, // ETHIOPIC SYLLABLE KAA
+ { 0x12AC, BIDI_L }, // ETHIOPIC SYLLABLE KEE
+ { 0x12AD, BIDI_L }, // ETHIOPIC SYLLABLE KE
+ { 0x12AE, BIDI_L }, // ETHIOPIC SYLLABLE KO
+ { 0x12AF, BIDI_L }, // ETHIOPIC SYLLABLE KOA
+ { 0x12B0, BIDI_L }, // ETHIOPIC SYLLABLE KWA
+ { 0x12B2, BIDI_L }, // ETHIOPIC SYLLABLE KWI
+ { 0x12B3, BIDI_L }, // ETHIOPIC SYLLABLE KWAA
+ { 0x12B4, BIDI_L }, // ETHIOPIC SYLLABLE KWEE
+ { 0x12B5, BIDI_L }, // ETHIOPIC SYLLABLE KWE
+ { 0x12B8, BIDI_L }, // ETHIOPIC SYLLABLE KXA
+ { 0x12B9, BIDI_L }, // ETHIOPIC SYLLABLE KXU
+ { 0x12BA, BIDI_L }, // ETHIOPIC SYLLABLE KXI
+ { 0x12BB, BIDI_L }, // ETHIOPIC SYLLABLE KXAA
+ { 0x12BC, BIDI_L }, // ETHIOPIC SYLLABLE KXEE
+ { 0x12BD, BIDI_L }, // ETHIOPIC SYLLABLE KXE
+ { 0x12BE, BIDI_L }, // ETHIOPIC SYLLABLE KXO
+ { 0x12C0, BIDI_L }, // ETHIOPIC SYLLABLE KXWA
+ { 0x12C2, BIDI_L }, // ETHIOPIC SYLLABLE KXWI
+ { 0x12C3, BIDI_L }, // ETHIOPIC SYLLABLE KXWAA
+ { 0x12C4, BIDI_L }, // ETHIOPIC SYLLABLE KXWEE
+ { 0x12C5, BIDI_L }, // ETHIOPIC SYLLABLE KXWE
+ { 0x12C8, BIDI_L }, // ETHIOPIC SYLLABLE WA
+ { 0x12C9, BIDI_L }, // ETHIOPIC SYLLABLE WU
+ { 0x12CA, BIDI_L }, // ETHIOPIC SYLLABLE WI
+ { 0x12CB, BIDI_L }, // ETHIOPIC SYLLABLE WAA
+ { 0x12CC, BIDI_L }, // ETHIOPIC SYLLABLE WEE
+ { 0x12CD, BIDI_L }, // ETHIOPIC SYLLABLE WE
+ { 0x12CE, BIDI_L }, // ETHIOPIC SYLLABLE WO
+ { 0x12CF, BIDI_L }, // ETHIOPIC SYLLABLE WOA
+ { 0x12D0, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL A
+ { 0x12D1, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL U
+ { 0x12D2, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL I
+ { 0x12D3, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL AA
+ { 0x12D4, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL EE
+ { 0x12D5, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL E
+ { 0x12D6, BIDI_L }, // ETHIOPIC SYLLABLE PHARYNGEAL O
+ { 0x12D8, BIDI_L }, // ETHIOPIC SYLLABLE ZA
+ { 0x12D9, BIDI_L }, // ETHIOPIC SYLLABLE ZU
+ { 0x12DA, BIDI_L }, // ETHIOPIC SYLLABLE ZI
+ { 0x12DB, BIDI_L }, // ETHIOPIC SYLLABLE ZAA
+ { 0x12DC, BIDI_L }, // ETHIOPIC SYLLABLE ZEE
+ { 0x12DD, BIDI_L }, // ETHIOPIC SYLLABLE ZE
+ { 0x12DE, BIDI_L }, // ETHIOPIC SYLLABLE ZO
+ { 0x12DF, BIDI_L }, // ETHIOPIC SYLLABLE ZWA
+ { 0x12E0, BIDI_L }, // ETHIOPIC SYLLABLE ZHA
+ { 0x12E1, BIDI_L }, // ETHIOPIC SYLLABLE ZHU
+ { 0x12E2, BIDI_L }, // ETHIOPIC SYLLABLE ZHI
+ { 0x12E3, BIDI_L }, // ETHIOPIC SYLLABLE ZHAA
+ { 0x12E4, BIDI_L }, // ETHIOPIC SYLLABLE ZHEE
+ { 0x12E5, BIDI_L }, // ETHIOPIC SYLLABLE ZHE
+ { 0x12E6, BIDI_L }, // ETHIOPIC SYLLABLE ZHO
+ { 0x12E7, BIDI_L }, // ETHIOPIC SYLLABLE ZHWA
+ { 0x12E8, BIDI_L }, // ETHIOPIC SYLLABLE YA
+ { 0x12E9, BIDI_L }, // ETHIOPIC SYLLABLE YU
+ { 0x12EA, BIDI_L }, // ETHIOPIC SYLLABLE YI
+ { 0x12EB, BIDI_L }, // ETHIOPIC SYLLABLE YAA
+ { 0x12EC, BIDI_L }, // ETHIOPIC SYLLABLE YEE
+ { 0x12ED, BIDI_L }, // ETHIOPIC SYLLABLE YE
+ { 0x12EE, BIDI_L }, // ETHIOPIC SYLLABLE YO
+ { 0x12EF, BIDI_L }, // ETHIOPIC SYLLABLE YOA
+ { 0x12F0, BIDI_L }, // ETHIOPIC SYLLABLE DA
+ { 0x12F1, BIDI_L }, // ETHIOPIC SYLLABLE DU
+ { 0x12F2, BIDI_L }, // ETHIOPIC SYLLABLE DI
+ { 0x12F3, BIDI_L }, // ETHIOPIC SYLLABLE DAA
+ { 0x12F4, BIDI_L }, // ETHIOPIC SYLLABLE DEE
+ { 0x12F5, BIDI_L }, // ETHIOPIC SYLLABLE DE
+ { 0x12F6, BIDI_L }, // ETHIOPIC SYLLABLE DO
+ { 0x12F7, BIDI_L }, // ETHIOPIC SYLLABLE DWA
+ { 0x12F8, BIDI_L }, // ETHIOPIC SYLLABLE DDA
+ { 0x12F9, BIDI_L }, // ETHIOPIC SYLLABLE DDU
+ { 0x12FA, BIDI_L }, // ETHIOPIC SYLLABLE DDI
+ { 0x12FB, BIDI_L }, // ETHIOPIC SYLLABLE DDAA
+ { 0x12FC, BIDI_L }, // ETHIOPIC SYLLABLE DDEE
+ { 0x12FD, BIDI_L }, // ETHIOPIC SYLLABLE DDE
+ { 0x12FE, BIDI_L }, // ETHIOPIC SYLLABLE DDO
+ { 0x12FF, BIDI_L }, // ETHIOPIC SYLLABLE DDWA
+ { 0x1300, BIDI_L }, // ETHIOPIC SYLLABLE JA
+ { 0x1301, BIDI_L }, // ETHIOPIC SYLLABLE JU
+ { 0x1302, BIDI_L }, // ETHIOPIC SYLLABLE JI
+ { 0x1303, BIDI_L }, // ETHIOPIC SYLLABLE JAA
+ { 0x1304, BIDI_L }, // ETHIOPIC SYLLABLE JEE
+ { 0x1305, BIDI_L }, // ETHIOPIC SYLLABLE JE
+ { 0x1306, BIDI_L }, // ETHIOPIC SYLLABLE JO
+ { 0x1307, BIDI_L }, // ETHIOPIC SYLLABLE JWA
+ { 0x1308, BIDI_L }, // ETHIOPIC SYLLABLE GA
+ { 0x1309, BIDI_L }, // ETHIOPIC SYLLABLE GU
+ { 0x130A, BIDI_L }, // ETHIOPIC SYLLABLE GI
+ { 0x130B, BIDI_L }, // ETHIOPIC SYLLABLE GAA
+ { 0x130C, BIDI_L }, // ETHIOPIC SYLLABLE GEE
+ { 0x130D, BIDI_L }, // ETHIOPIC SYLLABLE GE
+ { 0x130E, BIDI_L }, // ETHIOPIC SYLLABLE GO
+ { 0x130F, BIDI_L }, // ETHIOPIC SYLLABLE GOA
+ { 0x1310, BIDI_L }, // ETHIOPIC SYLLABLE GWA
+ { 0x1312, BIDI_L }, // ETHIOPIC SYLLABLE GWI
+ { 0x1313, BIDI_L }, // ETHIOPIC SYLLABLE GWAA
+ { 0x1314, BIDI_L }, // ETHIOPIC SYLLABLE GWEE
+ { 0x1315, BIDI_L }, // ETHIOPIC SYLLABLE GWE
+ { 0x1318, BIDI_L }, // ETHIOPIC SYLLABLE GGA
+ { 0x1319, BIDI_L }, // ETHIOPIC SYLLABLE GGU
+ { 0x131A, BIDI_L }, // ETHIOPIC SYLLABLE GGI
+ { 0x131B, BIDI_L }, // ETHIOPIC SYLLABLE GGAA
+ { 0x131C, BIDI_L }, // ETHIOPIC SYLLABLE GGEE
+ { 0x131D, BIDI_L }, // ETHIOPIC SYLLABLE GGE
+ { 0x131E, BIDI_L }, // ETHIOPIC SYLLABLE GGO
+ { 0x131F, BIDI_L }, // ETHIOPIC SYLLABLE GGWAA
+ { 0x1320, BIDI_L }, // ETHIOPIC SYLLABLE THA
+ { 0x1321, BIDI_L }, // ETHIOPIC SYLLABLE THU
+ { 0x1322, BIDI_L }, // ETHIOPIC SYLLABLE THI
+ { 0x1323, BIDI_L }, // ETHIOPIC SYLLABLE THAA
+ { 0x1324, BIDI_L }, // ETHIOPIC SYLLABLE THEE
+ { 0x1325, BIDI_L }, // ETHIOPIC SYLLABLE THE
+ { 0x1326, BIDI_L }, // ETHIOPIC SYLLABLE THO
+ { 0x1327, BIDI_L }, // ETHIOPIC SYLLABLE THWA
+ { 0x1328, BIDI_L }, // ETHIOPIC SYLLABLE CHA
+ { 0x1329, BIDI_L }, // ETHIOPIC SYLLABLE CHU
+ { 0x132A, BIDI_L }, // ETHIOPIC SYLLABLE CHI
+ { 0x132B, BIDI_L }, // ETHIOPIC SYLLABLE CHAA
+ { 0x132C, BIDI_L }, // ETHIOPIC SYLLABLE CHEE
+ { 0x132D, BIDI_L }, // ETHIOPIC SYLLABLE CHE
+ { 0x132E, BIDI_L }, // ETHIOPIC SYLLABLE CHO
+ { 0x132F, BIDI_L }, // ETHIOPIC SYLLABLE CHWA
+ { 0x1330, BIDI_L }, // ETHIOPIC SYLLABLE PHA
+ { 0x1331, BIDI_L }, // ETHIOPIC SYLLABLE PHU
+ { 0x1332, BIDI_L }, // ETHIOPIC SYLLABLE PHI
+ { 0x1333, BIDI_L }, // ETHIOPIC SYLLABLE PHAA
+ { 0x1334, BIDI_L }, // ETHIOPIC SYLLABLE PHEE
+ { 0x1335, BIDI_L }, // ETHIOPIC SYLLABLE PHE
+ { 0x1336, BIDI_L }, // ETHIOPIC SYLLABLE PHO
+ { 0x1337, BIDI_L }, // ETHIOPIC SYLLABLE PHWA
+ { 0x1338, BIDI_L }, // ETHIOPIC SYLLABLE TSA
+ { 0x1339, BIDI_L }, // ETHIOPIC SYLLABLE TSU
+ { 0x133A, BIDI_L }, // ETHIOPIC SYLLABLE TSI
+ { 0x133B, BIDI_L }, // ETHIOPIC SYLLABLE TSAA
+ { 0x133C, BIDI_L }, // ETHIOPIC SYLLABLE TSEE
+ { 0x133D, BIDI_L }, // ETHIOPIC SYLLABLE TSE
+ { 0x133E, BIDI_L }, // ETHIOPIC SYLLABLE TSO
+ { 0x133F, BIDI_L }, // ETHIOPIC SYLLABLE TSWA
+ { 0x1340, BIDI_L }, // ETHIOPIC SYLLABLE TZA
+ { 0x1341, BIDI_L }, // ETHIOPIC SYLLABLE TZU
+ { 0x1342, BIDI_L }, // ETHIOPIC SYLLABLE TZI
+ { 0x1343, BIDI_L }, // ETHIOPIC SYLLABLE TZAA
+ { 0x1344, BIDI_L }, // ETHIOPIC SYLLABLE TZEE
+ { 0x1345, BIDI_L }, // ETHIOPIC SYLLABLE TZE
+ { 0x1346, BIDI_L }, // ETHIOPIC SYLLABLE TZO
+ { 0x1347, BIDI_L }, // ETHIOPIC SYLLABLE TZOA
+ { 0x1348, BIDI_L }, // ETHIOPIC SYLLABLE FA
+ { 0x1349, BIDI_L }, // ETHIOPIC SYLLABLE FU
+ { 0x134A, BIDI_L }, // ETHIOPIC SYLLABLE FI
+ { 0x134B, BIDI_L }, // ETHIOPIC SYLLABLE FAA
+ { 0x134C, BIDI_L }, // ETHIOPIC SYLLABLE FEE
+ { 0x134D, BIDI_L }, // ETHIOPIC SYLLABLE FE
+ { 0x134E, BIDI_L }, // ETHIOPIC SYLLABLE FO
+ { 0x134F, BIDI_L }, // ETHIOPIC SYLLABLE FWA
+ { 0x1350, BIDI_L }, // ETHIOPIC SYLLABLE PA
+ { 0x1351, BIDI_L }, // ETHIOPIC SYLLABLE PU
+ { 0x1352, BIDI_L }, // ETHIOPIC SYLLABLE PI
+ { 0x1353, BIDI_L }, // ETHIOPIC SYLLABLE PAA
+ { 0x1354, BIDI_L }, // ETHIOPIC SYLLABLE PEE
+ { 0x1355, BIDI_L }, // ETHIOPIC SYLLABLE PE
+ { 0x1356, BIDI_L }, // ETHIOPIC SYLLABLE PO
+ { 0x1357, BIDI_L }, // ETHIOPIC SYLLABLE PWA
+ { 0x1358, BIDI_L }, // ETHIOPIC SYLLABLE RYA
+ { 0x1359, BIDI_L }, // ETHIOPIC SYLLABLE MYA
+ { 0x135A, BIDI_L }, // ETHIOPIC SYLLABLE FYA
+ { 0x135D, BIDI_NSM }, // ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK
+ { 0x135E, BIDI_NSM }, // ETHIOPIC COMBINING VOWEL LENGTH MARK
+ { 0x135F, BIDI_NSM }, // ETHIOPIC COMBINING GEMINATION MARK
+ { 0x1360, BIDI_L }, // ETHIOPIC SECTION MARK
+ { 0x1361, BIDI_L }, // ETHIOPIC WORDSPACE
+ { 0x1362, BIDI_L }, // ETHIOPIC FULL STOP
+ { 0x1363, BIDI_L }, // ETHIOPIC COMMA
+ { 0x1364, BIDI_L }, // ETHIOPIC SEMICOLON
+ { 0x1365, BIDI_L }, // ETHIOPIC COLON
+ { 0x1366, BIDI_L }, // ETHIOPIC PREFACE COLON
+ { 0x1367, BIDI_L }, // ETHIOPIC QUESTION MARK
+ { 0x1368, BIDI_L }, // ETHIOPIC PARAGRAPH SEPARATOR
+ { 0x1369, BIDI_L }, // ETHIOPIC DIGIT ONE
+ { 0x136A, BIDI_L }, // ETHIOPIC DIGIT TWO
+ { 0x136B, BIDI_L }, // ETHIOPIC DIGIT THREE
+ { 0x136C, BIDI_L }, // ETHIOPIC DIGIT FOUR
+ { 0x136D, BIDI_L }, // ETHIOPIC DIGIT FIVE
+ { 0x136E, BIDI_L }, // ETHIOPIC DIGIT SIX
+ { 0x136F, BIDI_L }, // ETHIOPIC DIGIT SEVEN
+ { 0x1370, BIDI_L }, // ETHIOPIC DIGIT EIGHT
+ { 0x1371, BIDI_L }, // ETHIOPIC DIGIT NINE
+ { 0x1372, BIDI_L }, // ETHIOPIC NUMBER TEN
+ { 0x1373, BIDI_L }, // ETHIOPIC NUMBER TWENTY
+ { 0x1374, BIDI_L }, // ETHIOPIC NUMBER THIRTY
+ { 0x1375, BIDI_L }, // ETHIOPIC NUMBER FORTY
+ { 0x1376, BIDI_L }, // ETHIOPIC NUMBER FIFTY
+ { 0x1377, BIDI_L }, // ETHIOPIC NUMBER SIXTY
+ { 0x1378, BIDI_L }, // ETHIOPIC NUMBER SEVENTY
+ { 0x1379, BIDI_L }, // ETHIOPIC NUMBER EIGHTY
+ { 0x137A, BIDI_L }, // ETHIOPIC NUMBER NINETY
+ { 0x137B, BIDI_L }, // ETHIOPIC NUMBER HUNDRED
+ { 0x137C, BIDI_L }, // ETHIOPIC NUMBER TEN THOUSAND
+ { 0x1380, BIDI_L }, // ETHIOPIC SYLLABLE SEBATBEIT MWA
+ { 0x1381, BIDI_L }, // ETHIOPIC SYLLABLE MWI
+ { 0x1382, BIDI_L }, // ETHIOPIC SYLLABLE MWEE
+ { 0x1383, BIDI_L }, // ETHIOPIC SYLLABLE MWE
+ { 0x1384, BIDI_L }, // ETHIOPIC SYLLABLE SEBATBEIT BWA
+ { 0x1385, BIDI_L }, // ETHIOPIC SYLLABLE BWI
+ { 0x1386, BIDI_L }, // ETHIOPIC SYLLABLE BWEE
+ { 0x1387, BIDI_L }, // ETHIOPIC SYLLABLE BWE
+ { 0x1388, BIDI_L }, // ETHIOPIC SYLLABLE SEBATBEIT FWA
+ { 0x1389, BIDI_L }, // ETHIOPIC SYLLABLE FWI
+ { 0x138A, BIDI_L }, // ETHIOPIC SYLLABLE FWEE
+ { 0x138B, BIDI_L }, // ETHIOPIC SYLLABLE FWE
+ { 0x138C, BIDI_L }, // ETHIOPIC SYLLABLE SEBATBEIT PWA
+ { 0x138D, BIDI_L }, // ETHIOPIC SYLLABLE PWI
+ { 0x138E, BIDI_L }, // ETHIOPIC SYLLABLE PWEE
+ { 0x138F, BIDI_L }, // ETHIOPIC SYLLABLE PWE
+ { 0x1390, BIDI_ON }, // ETHIOPIC TONAL MARK YIZET
+ { 0x1391, BIDI_ON }, // ETHIOPIC TONAL MARK DERET
+ { 0x1392, BIDI_ON }, // ETHIOPIC TONAL MARK RIKRIK
+ { 0x1393, BIDI_ON }, // ETHIOPIC TONAL MARK SHORT RIKRIK
+ { 0x1394, BIDI_ON }, // ETHIOPIC TONAL MARK DIFAT
+ { 0x1395, BIDI_ON }, // ETHIOPIC TONAL MARK KENAT
+ { 0x1396, BIDI_ON }, // ETHIOPIC TONAL MARK CHIRET
+ { 0x1397, BIDI_ON }, // ETHIOPIC TONAL MARK HIDET
+ { 0x1398, BIDI_ON }, // ETHIOPIC TONAL MARK DERET-HIDET
+ { 0x1399, BIDI_ON }, // ETHIOPIC TONAL MARK KURT
+ { 0x13A0, BIDI_L }, // CHEROKEE LETTER A
+ { 0x13A1, BIDI_L }, // CHEROKEE LETTER E
+ { 0x13A2, BIDI_L }, // CHEROKEE LETTER I
+ { 0x13A3, BIDI_L }, // CHEROKEE LETTER O
+ { 0x13A4, BIDI_L }, // CHEROKEE LETTER U
+ { 0x13A5, BIDI_L }, // CHEROKEE LETTER V
+ { 0x13A6, BIDI_L }, // CHEROKEE LETTER GA
+ { 0x13A7, BIDI_L }, // CHEROKEE LETTER KA
+ { 0x13A8, BIDI_L }, // CHEROKEE LETTER GE
+ { 0x13A9, BIDI_L }, // CHEROKEE LETTER GI
+ { 0x13AA, BIDI_L }, // CHEROKEE LETTER GO
+ { 0x13AB, BIDI_L }, // CHEROKEE LETTER GU
+ { 0x13AC, BIDI_L }, // CHEROKEE LETTER GV
+ { 0x13AD, BIDI_L }, // CHEROKEE LETTER HA
+ { 0x13AE, BIDI_L }, // CHEROKEE LETTER HE
+ { 0x13AF, BIDI_L }, // CHEROKEE LETTER HI
+ { 0x13B0, BIDI_L }, // CHEROKEE LETTER HO
+ { 0x13B1, BIDI_L }, // CHEROKEE LETTER HU
+ { 0x13B2, BIDI_L }, // CHEROKEE LETTER HV
+ { 0x13B3, BIDI_L }, // CHEROKEE LETTER LA
+ { 0x13B4, BIDI_L }, // CHEROKEE LETTER LE
+ { 0x13B5, BIDI_L }, // CHEROKEE LETTER LI
+ { 0x13B6, BIDI_L }, // CHEROKEE LETTER LO
+ { 0x13B7, BIDI_L }, // CHEROKEE LETTER LU
+ { 0x13B8, BIDI_L }, // CHEROKEE LETTER LV
+ { 0x13B9, BIDI_L }, // CHEROKEE LETTER MA
+ { 0x13BA, BIDI_L }, // CHEROKEE LETTER ME
+ { 0x13BB, BIDI_L }, // CHEROKEE LETTER MI
+ { 0x13BC, BIDI_L }, // CHEROKEE LETTER MO
+ { 0x13BD, BIDI_L }, // CHEROKEE LETTER MU
+ { 0x13BE, BIDI_L }, // CHEROKEE LETTER NA
+ { 0x13BF, BIDI_L }, // CHEROKEE LETTER HNA
+ { 0x13C0, BIDI_L }, // CHEROKEE LETTER NAH
+ { 0x13C1, BIDI_L }, // CHEROKEE LETTER NE
+ { 0x13C2, BIDI_L }, // CHEROKEE LETTER NI
+ { 0x13C3, BIDI_L }, // CHEROKEE LETTER NO
+ { 0x13C4, BIDI_L }, // CHEROKEE LETTER NU
+ { 0x13C5, BIDI_L }, // CHEROKEE LETTER NV
+ { 0x13C6, BIDI_L }, // CHEROKEE LETTER QUA
+ { 0x13C7, BIDI_L }, // CHEROKEE LETTER QUE
+ { 0x13C8, BIDI_L }, // CHEROKEE LETTER QUI
+ { 0x13C9, BIDI_L }, // CHEROKEE LETTER QUO
+ { 0x13CA, BIDI_L }, // CHEROKEE LETTER QUU
+ { 0x13CB, BIDI_L }, // CHEROKEE LETTER QUV
+ { 0x13CC, BIDI_L }, // CHEROKEE LETTER SA
+ { 0x13CD, BIDI_L }, // CHEROKEE LETTER S
+ { 0x13CE, BIDI_L }, // CHEROKEE LETTER SE
+ { 0x13CF, BIDI_L }, // CHEROKEE LETTER SI
+ { 0x13D0, BIDI_L }, // CHEROKEE LETTER SO
+ { 0x13D1, BIDI_L }, // CHEROKEE LETTER SU
+ { 0x13D2, BIDI_L }, // CHEROKEE LETTER SV
+ { 0x13D3, BIDI_L }, // CHEROKEE LETTER DA
+ { 0x13D4, BIDI_L }, // CHEROKEE LETTER TA
+ { 0x13D5, BIDI_L }, // CHEROKEE LETTER DE
+ { 0x13D6, BIDI_L }, // CHEROKEE LETTER TE
+ { 0x13D7, BIDI_L }, // CHEROKEE LETTER DI
+ { 0x13D8, BIDI_L }, // CHEROKEE LETTER TI
+ { 0x13D9, BIDI_L }, // CHEROKEE LETTER DO
+ { 0x13DA, BIDI_L }, // CHEROKEE LETTER DU
+ { 0x13DB, BIDI_L }, // CHEROKEE LETTER DV
+ { 0x13DC, BIDI_L }, // CHEROKEE LETTER DLA
+ { 0x13DD, BIDI_L }, // CHEROKEE LETTER TLA
+ { 0x13DE, BIDI_L }, // CHEROKEE LETTER TLE
+ { 0x13DF, BIDI_L }, // CHEROKEE LETTER TLI
+ { 0x13E0, BIDI_L }, // CHEROKEE LETTER TLO
+ { 0x13E1, BIDI_L }, // CHEROKEE LETTER TLU
+ { 0x13E2, BIDI_L }, // CHEROKEE LETTER TLV
+ { 0x13E3, BIDI_L }, // CHEROKEE LETTER TSA
+ { 0x13E4, BIDI_L }, // CHEROKEE LETTER TSE
+ { 0x13E5, BIDI_L }, // CHEROKEE LETTER TSI
+ { 0x13E6, BIDI_L }, // CHEROKEE LETTER TSO
+ { 0x13E7, BIDI_L }, // CHEROKEE LETTER TSU
+ { 0x13E8, BIDI_L }, // CHEROKEE LETTER TSV
+ { 0x13E9, BIDI_L }, // CHEROKEE LETTER WA
+ { 0x13EA, BIDI_L }, // CHEROKEE LETTER WE
+ { 0x13EB, BIDI_L }, // CHEROKEE LETTER WI
+ { 0x13EC, BIDI_L }, // CHEROKEE LETTER WO
+ { 0x13ED, BIDI_L }, // CHEROKEE LETTER WU
+ { 0x13EE, BIDI_L }, // CHEROKEE LETTER WV
+ { 0x13EF, BIDI_L }, // CHEROKEE LETTER YA
+ { 0x13F0, BIDI_L }, // CHEROKEE LETTER YE
+ { 0x13F1, BIDI_L }, // CHEROKEE LETTER YI
+ { 0x13F2, BIDI_L }, // CHEROKEE LETTER YO
+ { 0x13F3, BIDI_L }, // CHEROKEE LETTER YU
+ { 0x13F4, BIDI_L }, // CHEROKEE LETTER YV
+ { 0x13F5, BIDI_L }, // CHEROKEE LETTER MV
+ { 0x13F8, BIDI_L }, // CHEROKEE SMALL LETTER YE
+ { 0x13F9, BIDI_L }, // CHEROKEE SMALL LETTER YI
+ { 0x13FA, BIDI_L }, // CHEROKEE SMALL LETTER YO
+ { 0x13FB, BIDI_L }, // CHEROKEE SMALL LETTER YU
+ { 0x13FC, BIDI_L }, // CHEROKEE SMALL LETTER YV
+ { 0x13FD, BIDI_L }, // CHEROKEE SMALL LETTER MV
+ { 0x1400, BIDI_ON }, // CANADIAN SYLLABICS HYPHEN
+ { 0x1401, BIDI_L }, // CANADIAN SYLLABICS E
+ { 0x1402, BIDI_L }, // CANADIAN SYLLABICS AAI
+ { 0x1403, BIDI_L }, // CANADIAN SYLLABICS I
+ { 0x1404, BIDI_L }, // CANADIAN SYLLABICS II
+ { 0x1405, BIDI_L }, // CANADIAN SYLLABICS O
+ { 0x1406, BIDI_L }, // CANADIAN SYLLABICS OO
+ { 0x1407, BIDI_L }, // CANADIAN SYLLABICS Y-CREE OO
+ { 0x1408, BIDI_L }, // CANADIAN SYLLABICS CARRIER EE
+ { 0x1409, BIDI_L }, // CANADIAN SYLLABICS CARRIER I
+ { 0x140A, BIDI_L }, // CANADIAN SYLLABICS A
+ { 0x140B, BIDI_L }, // CANADIAN SYLLABICS AA
+ { 0x140C, BIDI_L }, // CANADIAN SYLLABICS WE
+ { 0x140D, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WE
+ { 0x140E, BIDI_L }, // CANADIAN SYLLABICS WI
+ { 0x140F, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WI
+ { 0x1410, BIDI_L }, // CANADIAN SYLLABICS WII
+ { 0x1411, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WII
+ { 0x1412, BIDI_L }, // CANADIAN SYLLABICS WO
+ { 0x1413, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WO
+ { 0x1414, BIDI_L }, // CANADIAN SYLLABICS WOO
+ { 0x1415, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WOO
+ { 0x1416, BIDI_L }, // CANADIAN SYLLABICS NASKAPI WOO
+ { 0x1417, BIDI_L }, // CANADIAN SYLLABICS WA
+ { 0x1418, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WA
+ { 0x1419, BIDI_L }, // CANADIAN SYLLABICS WAA
+ { 0x141A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE WAA
+ { 0x141B, BIDI_L }, // CANADIAN SYLLABICS NASKAPI WAA
+ { 0x141C, BIDI_L }, // CANADIAN SYLLABICS AI
+ { 0x141D, BIDI_L }, // CANADIAN SYLLABICS Y-CREE W
+ { 0x141E, BIDI_L }, // CANADIAN SYLLABICS GLOTTAL STOP
+ { 0x141F, BIDI_L }, // CANADIAN SYLLABICS FINAL ACUTE
+ { 0x1420, BIDI_L }, // CANADIAN SYLLABICS FINAL GRAVE
+ { 0x1421, BIDI_L }, // CANADIAN SYLLABICS FINAL BOTTOM HALF RING
+ { 0x1422, BIDI_L }, // CANADIAN SYLLABICS FINAL TOP HALF RING
+ { 0x1423, BIDI_L }, // CANADIAN SYLLABICS FINAL RIGHT HALF RING
+ { 0x1424, BIDI_L }, // CANADIAN SYLLABICS FINAL RING
+ { 0x1425, BIDI_L }, // CANADIAN SYLLABICS FINAL DOUBLE ACUTE
+ { 0x1426, BIDI_L }, // CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES
+ { 0x1427, BIDI_L }, // CANADIAN SYLLABICS FINAL MIDDLE DOT
+ { 0x1428, BIDI_L }, // CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE
+ { 0x1429, BIDI_L }, // CANADIAN SYLLABICS FINAL PLUS
+ { 0x142A, BIDI_L }, // CANADIAN SYLLABICS FINAL DOWN TACK
+ { 0x142B, BIDI_L }, // CANADIAN SYLLABICS EN
+ { 0x142C, BIDI_L }, // CANADIAN SYLLABICS IN
+ { 0x142D, BIDI_L }, // CANADIAN SYLLABICS ON
+ { 0x142E, BIDI_L }, // CANADIAN SYLLABICS AN
+ { 0x142F, BIDI_L }, // CANADIAN SYLLABICS PE
+ { 0x1430, BIDI_L }, // CANADIAN SYLLABICS PAAI
+ { 0x1431, BIDI_L }, // CANADIAN SYLLABICS PI
+ { 0x1432, BIDI_L }, // CANADIAN SYLLABICS PII
+ { 0x1433, BIDI_L }, // CANADIAN SYLLABICS PO
+ { 0x1434, BIDI_L }, // CANADIAN SYLLABICS POO
+ { 0x1435, BIDI_L }, // CANADIAN SYLLABICS Y-CREE POO
+ { 0x1436, BIDI_L }, // CANADIAN SYLLABICS CARRIER HEE
+ { 0x1437, BIDI_L }, // CANADIAN SYLLABICS CARRIER HI
+ { 0x1438, BIDI_L }, // CANADIAN SYLLABICS PA
+ { 0x1439, BIDI_L }, // CANADIAN SYLLABICS PAA
+ { 0x143A, BIDI_L }, // CANADIAN SYLLABICS PWE
+ { 0x143B, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWE
+ { 0x143C, BIDI_L }, // CANADIAN SYLLABICS PWI
+ { 0x143D, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWI
+ { 0x143E, BIDI_L }, // CANADIAN SYLLABICS PWII
+ { 0x143F, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWII
+ { 0x1440, BIDI_L }, // CANADIAN SYLLABICS PWO
+ { 0x1441, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWO
+ { 0x1442, BIDI_L }, // CANADIAN SYLLABICS PWOO
+ { 0x1443, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWOO
+ { 0x1444, BIDI_L }, // CANADIAN SYLLABICS PWA
+ { 0x1445, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWA
+ { 0x1446, BIDI_L }, // CANADIAN SYLLABICS PWAA
+ { 0x1447, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE PWAA
+ { 0x1448, BIDI_L }, // CANADIAN SYLLABICS Y-CREE PWAA
+ { 0x1449, BIDI_L }, // CANADIAN SYLLABICS P
+ { 0x144A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE P
+ { 0x144B, BIDI_L }, // CANADIAN SYLLABICS CARRIER H
+ { 0x144C, BIDI_L }, // CANADIAN SYLLABICS TE
+ { 0x144D, BIDI_L }, // CANADIAN SYLLABICS TAAI
+ { 0x144E, BIDI_L }, // CANADIAN SYLLABICS TI
+ { 0x144F, BIDI_L }, // CANADIAN SYLLABICS TII
+ { 0x1450, BIDI_L }, // CANADIAN SYLLABICS TO
+ { 0x1451, BIDI_L }, // CANADIAN SYLLABICS TOO
+ { 0x1452, BIDI_L }, // CANADIAN SYLLABICS Y-CREE TOO
+ { 0x1453, BIDI_L }, // CANADIAN SYLLABICS CARRIER DEE
+ { 0x1454, BIDI_L }, // CANADIAN SYLLABICS CARRIER DI
+ { 0x1455, BIDI_L }, // CANADIAN SYLLABICS TA
+ { 0x1456, BIDI_L }, // CANADIAN SYLLABICS TAA
+ { 0x1457, BIDI_L }, // CANADIAN SYLLABICS TWE
+ { 0x1458, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWE
+ { 0x1459, BIDI_L }, // CANADIAN SYLLABICS TWI
+ { 0x145A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWI
+ { 0x145B, BIDI_L }, // CANADIAN SYLLABICS TWII
+ { 0x145C, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWII
+ { 0x145D, BIDI_L }, // CANADIAN SYLLABICS TWO
+ { 0x145E, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWO
+ { 0x145F, BIDI_L }, // CANADIAN SYLLABICS TWOO
+ { 0x1460, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWOO
+ { 0x1461, BIDI_L }, // CANADIAN SYLLABICS TWA
+ { 0x1462, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWA
+ { 0x1463, BIDI_L }, // CANADIAN SYLLABICS TWAA
+ { 0x1464, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE TWAA
+ { 0x1465, BIDI_L }, // CANADIAN SYLLABICS NASKAPI TWAA
+ { 0x1466, BIDI_L }, // CANADIAN SYLLABICS T
+ { 0x1467, BIDI_L }, // CANADIAN SYLLABICS TTE
+ { 0x1468, BIDI_L }, // CANADIAN SYLLABICS TTI
+ { 0x1469, BIDI_L }, // CANADIAN SYLLABICS TTO
+ { 0x146A, BIDI_L }, // CANADIAN SYLLABICS TTA
+ { 0x146B, BIDI_L }, // CANADIAN SYLLABICS KE
+ { 0x146C, BIDI_L }, // CANADIAN SYLLABICS KAAI
+ { 0x146D, BIDI_L }, // CANADIAN SYLLABICS KI
+ { 0x146E, BIDI_L }, // CANADIAN SYLLABICS KII
+ { 0x146F, BIDI_L }, // CANADIAN SYLLABICS KO
+ { 0x1470, BIDI_L }, // CANADIAN SYLLABICS KOO
+ { 0x1471, BIDI_L }, // CANADIAN SYLLABICS Y-CREE KOO
+ { 0x1472, BIDI_L }, // CANADIAN SYLLABICS KA
+ { 0x1473, BIDI_L }, // CANADIAN SYLLABICS KAA
+ { 0x1474, BIDI_L }, // CANADIAN SYLLABICS KWE
+ { 0x1475, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWE
+ { 0x1476, BIDI_L }, // CANADIAN SYLLABICS KWI
+ { 0x1477, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWI
+ { 0x1478, BIDI_L }, // CANADIAN SYLLABICS KWII
+ { 0x1479, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWII
+ { 0x147A, BIDI_L }, // CANADIAN SYLLABICS KWO
+ { 0x147B, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWO
+ { 0x147C, BIDI_L }, // CANADIAN SYLLABICS KWOO
+ { 0x147D, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWOO
+ { 0x147E, BIDI_L }, // CANADIAN SYLLABICS KWA
+ { 0x147F, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWA
+ { 0x1480, BIDI_L }, // CANADIAN SYLLABICS KWAA
+ { 0x1481, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE KWAA
+ { 0x1482, BIDI_L }, // CANADIAN SYLLABICS NASKAPI KWAA
+ { 0x1483, BIDI_L }, // CANADIAN SYLLABICS K
+ { 0x1484, BIDI_L }, // CANADIAN SYLLABICS KW
+ { 0x1485, BIDI_L }, // CANADIAN SYLLABICS SOUTH-SLAVEY KEH
+ { 0x1486, BIDI_L }, // CANADIAN SYLLABICS SOUTH-SLAVEY KIH
+ { 0x1487, BIDI_L }, // CANADIAN SYLLABICS SOUTH-SLAVEY KOH
+ { 0x1488, BIDI_L }, // CANADIAN SYLLABICS SOUTH-SLAVEY KAH
+ { 0x1489, BIDI_L }, // CANADIAN SYLLABICS CE
+ { 0x148A, BIDI_L }, // CANADIAN SYLLABICS CAAI
+ { 0x148B, BIDI_L }, // CANADIAN SYLLABICS CI
+ { 0x148C, BIDI_L }, // CANADIAN SYLLABICS CII
+ { 0x148D, BIDI_L }, // CANADIAN SYLLABICS CO
+ { 0x148E, BIDI_L }, // CANADIAN SYLLABICS COO
+ { 0x148F, BIDI_L }, // CANADIAN SYLLABICS Y-CREE COO
+ { 0x1490, BIDI_L }, // CANADIAN SYLLABICS CA
+ { 0x1491, BIDI_L }, // CANADIAN SYLLABICS CAA
+ { 0x1492, BIDI_L }, // CANADIAN SYLLABICS CWE
+ { 0x1493, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWE
+ { 0x1494, BIDI_L }, // CANADIAN SYLLABICS CWI
+ { 0x1495, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWI
+ { 0x1496, BIDI_L }, // CANADIAN SYLLABICS CWII
+ { 0x1497, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWII
+ { 0x1498, BIDI_L }, // CANADIAN SYLLABICS CWO
+ { 0x1499, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWO
+ { 0x149A, BIDI_L }, // CANADIAN SYLLABICS CWOO
+ { 0x149B, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWOO
+ { 0x149C, BIDI_L }, // CANADIAN SYLLABICS CWA
+ { 0x149D, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWA
+ { 0x149E, BIDI_L }, // CANADIAN SYLLABICS CWAA
+ { 0x149F, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE CWAA
+ { 0x14A0, BIDI_L }, // CANADIAN SYLLABICS NASKAPI CWAA
+ { 0x14A1, BIDI_L }, // CANADIAN SYLLABICS C
+ { 0x14A2, BIDI_L }, // CANADIAN SYLLABICS SAYISI TH
+ { 0x14A3, BIDI_L }, // CANADIAN SYLLABICS ME
+ { 0x14A4, BIDI_L }, // CANADIAN SYLLABICS MAAI
+ { 0x14A5, BIDI_L }, // CANADIAN SYLLABICS MI
+ { 0x14A6, BIDI_L }, // CANADIAN SYLLABICS MII
+ { 0x14A7, BIDI_L }, // CANADIAN SYLLABICS MO
+ { 0x14A8, BIDI_L }, // CANADIAN SYLLABICS MOO
+ { 0x14A9, BIDI_L }, // CANADIAN SYLLABICS Y-CREE MOO
+ { 0x14AA, BIDI_L }, // CANADIAN SYLLABICS MA
+ { 0x14AB, BIDI_L }, // CANADIAN SYLLABICS MAA
+ { 0x14AC, BIDI_L }, // CANADIAN SYLLABICS MWE
+ { 0x14AD, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWE
+ { 0x14AE, BIDI_L }, // CANADIAN SYLLABICS MWI
+ { 0x14AF, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWI
+ { 0x14B0, BIDI_L }, // CANADIAN SYLLABICS MWII
+ { 0x14B1, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWII
+ { 0x14B2, BIDI_L }, // CANADIAN SYLLABICS MWO
+ { 0x14B3, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWO
+ { 0x14B4, BIDI_L }, // CANADIAN SYLLABICS MWOO
+ { 0x14B5, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWOO
+ { 0x14B6, BIDI_L }, // CANADIAN SYLLABICS MWA
+ { 0x14B7, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWA
+ { 0x14B8, BIDI_L }, // CANADIAN SYLLABICS MWAA
+ { 0x14B9, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE MWAA
+ { 0x14BA, BIDI_L }, // CANADIAN SYLLABICS NASKAPI MWAA
+ { 0x14BB, BIDI_L }, // CANADIAN SYLLABICS M
+ { 0x14BC, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE M
+ { 0x14BD, BIDI_L }, // CANADIAN SYLLABICS MH
+ { 0x14BE, BIDI_L }, // CANADIAN SYLLABICS ATHAPASCAN M
+ { 0x14BF, BIDI_L }, // CANADIAN SYLLABICS SAYISI M
+ { 0x14C0, BIDI_L }, // CANADIAN SYLLABICS NE
+ { 0x14C1, BIDI_L }, // CANADIAN SYLLABICS NAAI
+ { 0x14C2, BIDI_L }, // CANADIAN SYLLABICS NI
+ { 0x14C3, BIDI_L }, // CANADIAN SYLLABICS NII
+ { 0x14C4, BIDI_L }, // CANADIAN SYLLABICS NO
+ { 0x14C5, BIDI_L }, // CANADIAN SYLLABICS NOO
+ { 0x14C6, BIDI_L }, // CANADIAN SYLLABICS Y-CREE NOO
+ { 0x14C7, BIDI_L }, // CANADIAN SYLLABICS NA
+ { 0x14C8, BIDI_L }, // CANADIAN SYLLABICS NAA
+ { 0x14C9, BIDI_L }, // CANADIAN SYLLABICS NWE
+ { 0x14CA, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE NWE
+ { 0x14CB, BIDI_L }, // CANADIAN SYLLABICS NWA
+ { 0x14CC, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE NWA
+ { 0x14CD, BIDI_L }, // CANADIAN SYLLABICS NWAA
+ { 0x14CE, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE NWAA
+ { 0x14CF, BIDI_L }, // CANADIAN SYLLABICS NASKAPI NWAA
+ { 0x14D0, BIDI_L }, // CANADIAN SYLLABICS N
+ { 0x14D1, BIDI_L }, // CANADIAN SYLLABICS CARRIER NG
+ { 0x14D2, BIDI_L }, // CANADIAN SYLLABICS NH
+ { 0x14D3, BIDI_L }, // CANADIAN SYLLABICS LE
+ { 0x14D4, BIDI_L }, // CANADIAN SYLLABICS LAAI
+ { 0x14D5, BIDI_L }, // CANADIAN SYLLABICS LI
+ { 0x14D6, BIDI_L }, // CANADIAN SYLLABICS LII
+ { 0x14D7, BIDI_L }, // CANADIAN SYLLABICS LO
+ { 0x14D8, BIDI_L }, // CANADIAN SYLLABICS LOO
+ { 0x14D9, BIDI_L }, // CANADIAN SYLLABICS Y-CREE LOO
+ { 0x14DA, BIDI_L }, // CANADIAN SYLLABICS LA
+ { 0x14DB, BIDI_L }, // CANADIAN SYLLABICS LAA
+ { 0x14DC, BIDI_L }, // CANADIAN SYLLABICS LWE
+ { 0x14DD, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWE
+ { 0x14DE, BIDI_L }, // CANADIAN SYLLABICS LWI
+ { 0x14DF, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWI
+ { 0x14E0, BIDI_L }, // CANADIAN SYLLABICS LWII
+ { 0x14E1, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWII
+ { 0x14E2, BIDI_L }, // CANADIAN SYLLABICS LWO
+ { 0x14E3, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWO
+ { 0x14E4, BIDI_L }, // CANADIAN SYLLABICS LWOO
+ { 0x14E5, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWOO
+ { 0x14E6, BIDI_L }, // CANADIAN SYLLABICS LWA
+ { 0x14E7, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWA
+ { 0x14E8, BIDI_L }, // CANADIAN SYLLABICS LWAA
+ { 0x14E9, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LWAA
+ { 0x14EA, BIDI_L }, // CANADIAN SYLLABICS L
+ { 0x14EB, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE L
+ { 0x14EC, BIDI_L }, // CANADIAN SYLLABICS MEDIAL L
+ { 0x14ED, BIDI_L }, // CANADIAN SYLLABICS SE
+ { 0x14EE, BIDI_L }, // CANADIAN SYLLABICS SAAI
+ { 0x14EF, BIDI_L }, // CANADIAN SYLLABICS SI
+ { 0x14F0, BIDI_L }, // CANADIAN SYLLABICS SII
+ { 0x14F1, BIDI_L }, // CANADIAN SYLLABICS SO
+ { 0x14F2, BIDI_L }, // CANADIAN SYLLABICS SOO
+ { 0x14F3, BIDI_L }, // CANADIAN SYLLABICS Y-CREE SOO
+ { 0x14F4, BIDI_L }, // CANADIAN SYLLABICS SA
+ { 0x14F5, BIDI_L }, // CANADIAN SYLLABICS SAA
+ { 0x14F6, BIDI_L }, // CANADIAN SYLLABICS SWE
+ { 0x14F7, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWE
+ { 0x14F8, BIDI_L }, // CANADIAN SYLLABICS SWI
+ { 0x14F9, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWI
+ { 0x14FA, BIDI_L }, // CANADIAN SYLLABICS SWII
+ { 0x14FB, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWII
+ { 0x14FC, BIDI_L }, // CANADIAN SYLLABICS SWO
+ { 0x14FD, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWO
+ { 0x14FE, BIDI_L }, // CANADIAN SYLLABICS SWOO
+ { 0x14FF, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWOO
+ { 0x1500, BIDI_L }, // CANADIAN SYLLABICS SWA
+ { 0x1501, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWA
+ { 0x1502, BIDI_L }, // CANADIAN SYLLABICS SWAA
+ { 0x1503, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SWAA
+ { 0x1504, BIDI_L }, // CANADIAN SYLLABICS NASKAPI SWAA
+ { 0x1505, BIDI_L }, // CANADIAN SYLLABICS S
+ { 0x1506, BIDI_L }, // CANADIAN SYLLABICS ATHAPASCAN S
+ { 0x1507, BIDI_L }, // CANADIAN SYLLABICS SW
+ { 0x1508, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT S
+ { 0x1509, BIDI_L }, // CANADIAN SYLLABICS MOOSE-CREE SK
+ { 0x150A, BIDI_L }, // CANADIAN SYLLABICS NASKAPI SKW
+ { 0x150B, BIDI_L }, // CANADIAN SYLLABICS NASKAPI S-W
+ { 0x150C, BIDI_L }, // CANADIAN SYLLABICS NASKAPI SPWA
+ { 0x150D, BIDI_L }, // CANADIAN SYLLABICS NASKAPI STWA
+ { 0x150E, BIDI_L }, // CANADIAN SYLLABICS NASKAPI SKWA
+ { 0x150F, BIDI_L }, // CANADIAN SYLLABICS NASKAPI SCWA
+ { 0x1510, BIDI_L }, // CANADIAN SYLLABICS SHE
+ { 0x1511, BIDI_L }, // CANADIAN SYLLABICS SHI
+ { 0x1512, BIDI_L }, // CANADIAN SYLLABICS SHII
+ { 0x1513, BIDI_L }, // CANADIAN SYLLABICS SHO
+ { 0x1514, BIDI_L }, // CANADIAN SYLLABICS SHOO
+ { 0x1515, BIDI_L }, // CANADIAN SYLLABICS SHA
+ { 0x1516, BIDI_L }, // CANADIAN SYLLABICS SHAA
+ { 0x1517, BIDI_L }, // CANADIAN SYLLABICS SHWE
+ { 0x1518, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWE
+ { 0x1519, BIDI_L }, // CANADIAN SYLLABICS SHWI
+ { 0x151A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWI
+ { 0x151B, BIDI_L }, // CANADIAN SYLLABICS SHWII
+ { 0x151C, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWII
+ { 0x151D, BIDI_L }, // CANADIAN SYLLABICS SHWO
+ { 0x151E, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWO
+ { 0x151F, BIDI_L }, // CANADIAN SYLLABICS SHWOO
+ { 0x1520, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWOO
+ { 0x1521, BIDI_L }, // CANADIAN SYLLABICS SHWA
+ { 0x1522, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWA
+ { 0x1523, BIDI_L }, // CANADIAN SYLLABICS SHWAA
+ { 0x1524, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE SHWAA
+ { 0x1525, BIDI_L }, // CANADIAN SYLLABICS SH
+ { 0x1526, BIDI_L }, // CANADIAN SYLLABICS YE
+ { 0x1527, BIDI_L }, // CANADIAN SYLLABICS YAAI
+ { 0x1528, BIDI_L }, // CANADIAN SYLLABICS YI
+ { 0x1529, BIDI_L }, // CANADIAN SYLLABICS YII
+ { 0x152A, BIDI_L }, // CANADIAN SYLLABICS YO
+ { 0x152B, BIDI_L }, // CANADIAN SYLLABICS YOO
+ { 0x152C, BIDI_L }, // CANADIAN SYLLABICS Y-CREE YOO
+ { 0x152D, BIDI_L }, // CANADIAN SYLLABICS YA
+ { 0x152E, BIDI_L }, // CANADIAN SYLLABICS YAA
+ { 0x152F, BIDI_L }, // CANADIAN SYLLABICS YWE
+ { 0x1530, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWE
+ { 0x1531, BIDI_L }, // CANADIAN SYLLABICS YWI
+ { 0x1532, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWI
+ { 0x1533, BIDI_L }, // CANADIAN SYLLABICS YWII
+ { 0x1534, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWII
+ { 0x1535, BIDI_L }, // CANADIAN SYLLABICS YWO
+ { 0x1536, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWO
+ { 0x1537, BIDI_L }, // CANADIAN SYLLABICS YWOO
+ { 0x1538, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWOO
+ { 0x1539, BIDI_L }, // CANADIAN SYLLABICS YWA
+ { 0x153A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWA
+ { 0x153B, BIDI_L }, // CANADIAN SYLLABICS YWAA
+ { 0x153C, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE YWAA
+ { 0x153D, BIDI_L }, // CANADIAN SYLLABICS NASKAPI YWAA
+ { 0x153E, BIDI_L }, // CANADIAN SYLLABICS Y
+ { 0x153F, BIDI_L }, // CANADIAN SYLLABICS BIBLE-CREE Y
+ { 0x1540, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE Y
+ { 0x1541, BIDI_L }, // CANADIAN SYLLABICS SAYISI YI
+ { 0x1542, BIDI_L }, // CANADIAN SYLLABICS RE
+ { 0x1543, BIDI_L }, // CANADIAN SYLLABICS R-CREE RE
+ { 0x1544, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LE
+ { 0x1545, BIDI_L }, // CANADIAN SYLLABICS RAAI
+ { 0x1546, BIDI_L }, // CANADIAN SYLLABICS RI
+ { 0x1547, BIDI_L }, // CANADIAN SYLLABICS RII
+ { 0x1548, BIDI_L }, // CANADIAN SYLLABICS RO
+ { 0x1549, BIDI_L }, // CANADIAN SYLLABICS ROO
+ { 0x154A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LO
+ { 0x154B, BIDI_L }, // CANADIAN SYLLABICS RA
+ { 0x154C, BIDI_L }, // CANADIAN SYLLABICS RAA
+ { 0x154D, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LA
+ { 0x154E, BIDI_L }, // CANADIAN SYLLABICS RWAA
+ { 0x154F, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE RWAA
+ { 0x1550, BIDI_L }, // CANADIAN SYLLABICS R
+ { 0x1551, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE R
+ { 0x1552, BIDI_L }, // CANADIAN SYLLABICS MEDIAL R
+ { 0x1553, BIDI_L }, // CANADIAN SYLLABICS FE
+ { 0x1554, BIDI_L }, // CANADIAN SYLLABICS FAAI
+ { 0x1555, BIDI_L }, // CANADIAN SYLLABICS FI
+ { 0x1556, BIDI_L }, // CANADIAN SYLLABICS FII
+ { 0x1557, BIDI_L }, // CANADIAN SYLLABICS FO
+ { 0x1558, BIDI_L }, // CANADIAN SYLLABICS FOO
+ { 0x1559, BIDI_L }, // CANADIAN SYLLABICS FA
+ { 0x155A, BIDI_L }, // CANADIAN SYLLABICS FAA
+ { 0x155B, BIDI_L }, // CANADIAN SYLLABICS FWAA
+ { 0x155C, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE FWAA
+ { 0x155D, BIDI_L }, // CANADIAN SYLLABICS F
+ { 0x155E, BIDI_L }, // CANADIAN SYLLABICS THE
+ { 0x155F, BIDI_L }, // CANADIAN SYLLABICS N-CREE THE
+ { 0x1560, BIDI_L }, // CANADIAN SYLLABICS THI
+ { 0x1561, BIDI_L }, // CANADIAN SYLLABICS N-CREE THI
+ { 0x1562, BIDI_L }, // CANADIAN SYLLABICS THII
+ { 0x1563, BIDI_L }, // CANADIAN SYLLABICS N-CREE THII
+ { 0x1564, BIDI_L }, // CANADIAN SYLLABICS THO
+ { 0x1565, BIDI_L }, // CANADIAN SYLLABICS THOO
+ { 0x1566, BIDI_L }, // CANADIAN SYLLABICS THA
+ { 0x1567, BIDI_L }, // CANADIAN SYLLABICS THAA
+ { 0x1568, BIDI_L }, // CANADIAN SYLLABICS THWAA
+ { 0x1569, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE THWAA
+ { 0x156A, BIDI_L }, // CANADIAN SYLLABICS TH
+ { 0x156B, BIDI_L }, // CANADIAN SYLLABICS TTHE
+ { 0x156C, BIDI_L }, // CANADIAN SYLLABICS TTHI
+ { 0x156D, BIDI_L }, // CANADIAN SYLLABICS TTHO
+ { 0x156E, BIDI_L }, // CANADIAN SYLLABICS TTHA
+ { 0x156F, BIDI_L }, // CANADIAN SYLLABICS TTH
+ { 0x1570, BIDI_L }, // CANADIAN SYLLABICS TYE
+ { 0x1571, BIDI_L }, // CANADIAN SYLLABICS TYI
+ { 0x1572, BIDI_L }, // CANADIAN SYLLABICS TYO
+ { 0x1573, BIDI_L }, // CANADIAN SYLLABICS TYA
+ { 0x1574, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HE
+ { 0x1575, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HI
+ { 0x1576, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HII
+ { 0x1577, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HO
+ { 0x1578, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HOO
+ { 0x1579, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HA
+ { 0x157A, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK HAA
+ { 0x157B, BIDI_L }, // CANADIAN SYLLABICS NUNAVIK H
+ { 0x157C, BIDI_L }, // CANADIAN SYLLABICS NUNAVUT H
+ { 0x157D, BIDI_L }, // CANADIAN SYLLABICS HK
+ { 0x157E, BIDI_L }, // CANADIAN SYLLABICS QAAI
+ { 0x157F, BIDI_L }, // CANADIAN SYLLABICS QI
+ { 0x1580, BIDI_L }, // CANADIAN SYLLABICS QII
+ { 0x1581, BIDI_L }, // CANADIAN SYLLABICS QO
+ { 0x1582, BIDI_L }, // CANADIAN SYLLABICS QOO
+ { 0x1583, BIDI_L }, // CANADIAN SYLLABICS QA
+ { 0x1584, BIDI_L }, // CANADIAN SYLLABICS QAA
+ { 0x1585, BIDI_L }, // CANADIAN SYLLABICS Q
+ { 0x1586, BIDI_L }, // CANADIAN SYLLABICS TLHE
+ { 0x1587, BIDI_L }, // CANADIAN SYLLABICS TLHI
+ { 0x1588, BIDI_L }, // CANADIAN SYLLABICS TLHO
+ { 0x1589, BIDI_L }, // CANADIAN SYLLABICS TLHA
+ { 0x158A, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE RE
+ { 0x158B, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE RI
+ { 0x158C, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE RO
+ { 0x158D, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE RA
+ { 0x158E, BIDI_L }, // CANADIAN SYLLABICS NGAAI
+ { 0x158F, BIDI_L }, // CANADIAN SYLLABICS NGI
+ { 0x1590, BIDI_L }, // CANADIAN SYLLABICS NGII
+ { 0x1591, BIDI_L }, // CANADIAN SYLLABICS NGO
+ { 0x1592, BIDI_L }, // CANADIAN SYLLABICS NGOO
+ { 0x1593, BIDI_L }, // CANADIAN SYLLABICS NGA
+ { 0x1594, BIDI_L }, // CANADIAN SYLLABICS NGAA
+ { 0x1595, BIDI_L }, // CANADIAN SYLLABICS NG
+ { 0x1596, BIDI_L }, // CANADIAN SYLLABICS NNG
+ { 0x1597, BIDI_L }, // CANADIAN SYLLABICS SAYISI SHE
+ { 0x1598, BIDI_L }, // CANADIAN SYLLABICS SAYISI SHI
+ { 0x1599, BIDI_L }, // CANADIAN SYLLABICS SAYISI SHO
+ { 0x159A, BIDI_L }, // CANADIAN SYLLABICS SAYISI SHA
+ { 0x159B, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THE
+ { 0x159C, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THI
+ { 0x159D, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THO
+ { 0x159E, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THA
+ { 0x159F, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE TH
+ { 0x15A0, BIDI_L }, // CANADIAN SYLLABICS LHI
+ { 0x15A1, BIDI_L }, // CANADIAN SYLLABICS LHII
+ { 0x15A2, BIDI_L }, // CANADIAN SYLLABICS LHO
+ { 0x15A3, BIDI_L }, // CANADIAN SYLLABICS LHOO
+ { 0x15A4, BIDI_L }, // CANADIAN SYLLABICS LHA
+ { 0x15A5, BIDI_L }, // CANADIAN SYLLABICS LHAA
+ { 0x15A6, BIDI_L }, // CANADIAN SYLLABICS LH
+ { 0x15A7, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THE
+ { 0x15A8, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THI
+ { 0x15A9, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THII
+ { 0x15AA, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THO
+ { 0x15AB, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THOO
+ { 0x15AC, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THA
+ { 0x15AD, BIDI_L }, // CANADIAN SYLLABICS TH-CREE THAA
+ { 0x15AE, BIDI_L }, // CANADIAN SYLLABICS TH-CREE TH
+ { 0x15AF, BIDI_L }, // CANADIAN SYLLABICS AIVILIK B
+ { 0x15B0, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT E
+ { 0x15B1, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT I
+ { 0x15B2, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT O
+ { 0x15B3, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT A
+ { 0x15B4, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT WE
+ { 0x15B5, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT WI
+ { 0x15B6, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT WO
+ { 0x15B7, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT WA
+ { 0x15B8, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT NE
+ { 0x15B9, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT NI
+ { 0x15BA, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT NO
+ { 0x15BB, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT NA
+ { 0x15BC, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT KE
+ { 0x15BD, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT KI
+ { 0x15BE, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT KO
+ { 0x15BF, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT KA
+ { 0x15C0, BIDI_L }, // CANADIAN SYLLABICS SAYISI HE
+ { 0x15C1, BIDI_L }, // CANADIAN SYLLABICS SAYISI HI
+ { 0x15C2, BIDI_L }, // CANADIAN SYLLABICS SAYISI HO
+ { 0x15C3, BIDI_L }, // CANADIAN SYLLABICS SAYISI HA
+ { 0x15C4, BIDI_L }, // CANADIAN SYLLABICS CARRIER GHU
+ { 0x15C5, BIDI_L }, // CANADIAN SYLLABICS CARRIER GHO
+ { 0x15C6, BIDI_L }, // CANADIAN SYLLABICS CARRIER GHE
+ { 0x15C7, BIDI_L }, // CANADIAN SYLLABICS CARRIER GHEE
+ { 0x15C8, BIDI_L }, // CANADIAN SYLLABICS CARRIER GHI
+ { 0x15C9, BIDI_L }, // CANADIAN SYLLABICS CARRIER GHA
+ { 0x15CA, BIDI_L }, // CANADIAN SYLLABICS CARRIER RU
+ { 0x15CB, BIDI_L }, // CANADIAN SYLLABICS CARRIER RO
+ { 0x15CC, BIDI_L }, // CANADIAN SYLLABICS CARRIER RE
+ { 0x15CD, BIDI_L }, // CANADIAN SYLLABICS CARRIER REE
+ { 0x15CE, BIDI_L }, // CANADIAN SYLLABICS CARRIER RI
+ { 0x15CF, BIDI_L }, // CANADIAN SYLLABICS CARRIER RA
+ { 0x15D0, BIDI_L }, // CANADIAN SYLLABICS CARRIER WU
+ { 0x15D1, BIDI_L }, // CANADIAN SYLLABICS CARRIER WO
+ { 0x15D2, BIDI_L }, // CANADIAN SYLLABICS CARRIER WE
+ { 0x15D3, BIDI_L }, // CANADIAN SYLLABICS CARRIER WEE
+ { 0x15D4, BIDI_L }, // CANADIAN SYLLABICS CARRIER WI
+ { 0x15D5, BIDI_L }, // CANADIAN SYLLABICS CARRIER WA
+ { 0x15D6, BIDI_L }, // CANADIAN SYLLABICS CARRIER HWU
+ { 0x15D7, BIDI_L }, // CANADIAN SYLLABICS CARRIER HWO
+ { 0x15D8, BIDI_L }, // CANADIAN SYLLABICS CARRIER HWE
+ { 0x15D9, BIDI_L }, // CANADIAN SYLLABICS CARRIER HWEE
+ { 0x15DA, BIDI_L }, // CANADIAN SYLLABICS CARRIER HWI
+ { 0x15DB, BIDI_L }, // CANADIAN SYLLABICS CARRIER HWA
+ { 0x15DC, BIDI_L }, // CANADIAN SYLLABICS CARRIER THU
+ { 0x15DD, BIDI_L }, // CANADIAN SYLLABICS CARRIER THO
+ { 0x15DE, BIDI_L }, // CANADIAN SYLLABICS CARRIER THE
+ { 0x15DF, BIDI_L }, // CANADIAN SYLLABICS CARRIER THEE
+ { 0x15E0, BIDI_L }, // CANADIAN SYLLABICS CARRIER THI
+ { 0x15E1, BIDI_L }, // CANADIAN SYLLABICS CARRIER THA
+ { 0x15E2, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTU
+ { 0x15E3, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTO
+ { 0x15E4, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTE
+ { 0x15E5, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTEE
+ { 0x15E6, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTI
+ { 0x15E7, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTA
+ { 0x15E8, BIDI_L }, // CANADIAN SYLLABICS CARRIER PU
+ { 0x15E9, BIDI_L }, // CANADIAN SYLLABICS CARRIER PO
+ { 0x15EA, BIDI_L }, // CANADIAN SYLLABICS CARRIER PE
+ { 0x15EB, BIDI_L }, // CANADIAN SYLLABICS CARRIER PEE
+ { 0x15EC, BIDI_L }, // CANADIAN SYLLABICS CARRIER PI
+ { 0x15ED, BIDI_L }, // CANADIAN SYLLABICS CARRIER PA
+ { 0x15EE, BIDI_L }, // CANADIAN SYLLABICS CARRIER P
+ { 0x15EF, BIDI_L }, // CANADIAN SYLLABICS CARRIER GU
+ { 0x15F0, BIDI_L }, // CANADIAN SYLLABICS CARRIER GO
+ { 0x15F1, BIDI_L }, // CANADIAN SYLLABICS CARRIER GE
+ { 0x15F2, BIDI_L }, // CANADIAN SYLLABICS CARRIER GEE
+ { 0x15F3, BIDI_L }, // CANADIAN SYLLABICS CARRIER GI
+ { 0x15F4, BIDI_L }, // CANADIAN SYLLABICS CARRIER GA
+ { 0x15F5, BIDI_L }, // CANADIAN SYLLABICS CARRIER KHU
+ { 0x15F6, BIDI_L }, // CANADIAN SYLLABICS CARRIER KHO
+ { 0x15F7, BIDI_L }, // CANADIAN SYLLABICS CARRIER KHE
+ { 0x15F8, BIDI_L }, // CANADIAN SYLLABICS CARRIER KHEE
+ { 0x15F9, BIDI_L }, // CANADIAN SYLLABICS CARRIER KHI
+ { 0x15FA, BIDI_L }, // CANADIAN SYLLABICS CARRIER KHA
+ { 0x15FB, BIDI_L }, // CANADIAN SYLLABICS CARRIER KKU
+ { 0x15FC, BIDI_L }, // CANADIAN SYLLABICS CARRIER KKO
+ { 0x15FD, BIDI_L }, // CANADIAN SYLLABICS CARRIER KKE
+ { 0x15FE, BIDI_L }, // CANADIAN SYLLABICS CARRIER KKEE
+ { 0x15FF, BIDI_L }, // CANADIAN SYLLABICS CARRIER KKI
+ { 0x1600, BIDI_L }, // CANADIAN SYLLABICS CARRIER KKA
+ { 0x1601, BIDI_L }, // CANADIAN SYLLABICS CARRIER KK
+ { 0x1602, BIDI_L }, // CANADIAN SYLLABICS CARRIER NU
+ { 0x1603, BIDI_L }, // CANADIAN SYLLABICS CARRIER NO
+ { 0x1604, BIDI_L }, // CANADIAN SYLLABICS CARRIER NE
+ { 0x1605, BIDI_L }, // CANADIAN SYLLABICS CARRIER NEE
+ { 0x1606, BIDI_L }, // CANADIAN SYLLABICS CARRIER NI
+ { 0x1607, BIDI_L }, // CANADIAN SYLLABICS CARRIER NA
+ { 0x1608, BIDI_L }, // CANADIAN SYLLABICS CARRIER MU
+ { 0x1609, BIDI_L }, // CANADIAN SYLLABICS CARRIER MO
+ { 0x160A, BIDI_L }, // CANADIAN SYLLABICS CARRIER ME
+ { 0x160B, BIDI_L }, // CANADIAN SYLLABICS CARRIER MEE
+ { 0x160C, BIDI_L }, // CANADIAN SYLLABICS CARRIER MI
+ { 0x160D, BIDI_L }, // CANADIAN SYLLABICS CARRIER MA
+ { 0x160E, BIDI_L }, // CANADIAN SYLLABICS CARRIER YU
+ { 0x160F, BIDI_L }, // CANADIAN SYLLABICS CARRIER YO
+ { 0x1610, BIDI_L }, // CANADIAN SYLLABICS CARRIER YE
+ { 0x1611, BIDI_L }, // CANADIAN SYLLABICS CARRIER YEE
+ { 0x1612, BIDI_L }, // CANADIAN SYLLABICS CARRIER YI
+ { 0x1613, BIDI_L }, // CANADIAN SYLLABICS CARRIER YA
+ { 0x1614, BIDI_L }, // CANADIAN SYLLABICS CARRIER JU
+ { 0x1615, BIDI_L }, // CANADIAN SYLLABICS SAYISI JU
+ { 0x1616, BIDI_L }, // CANADIAN SYLLABICS CARRIER JO
+ { 0x1617, BIDI_L }, // CANADIAN SYLLABICS CARRIER JE
+ { 0x1618, BIDI_L }, // CANADIAN SYLLABICS CARRIER JEE
+ { 0x1619, BIDI_L }, // CANADIAN SYLLABICS CARRIER JI
+ { 0x161A, BIDI_L }, // CANADIAN SYLLABICS SAYISI JI
+ { 0x161B, BIDI_L }, // CANADIAN SYLLABICS CARRIER JA
+ { 0x161C, BIDI_L }, // CANADIAN SYLLABICS CARRIER JJU
+ { 0x161D, BIDI_L }, // CANADIAN SYLLABICS CARRIER JJO
+ { 0x161E, BIDI_L }, // CANADIAN SYLLABICS CARRIER JJE
+ { 0x161F, BIDI_L }, // CANADIAN SYLLABICS CARRIER JJEE
+ { 0x1620, BIDI_L }, // CANADIAN SYLLABICS CARRIER JJI
+ { 0x1621, BIDI_L }, // CANADIAN SYLLABICS CARRIER JJA
+ { 0x1622, BIDI_L }, // CANADIAN SYLLABICS CARRIER LU
+ { 0x1623, BIDI_L }, // CANADIAN SYLLABICS CARRIER LO
+ { 0x1624, BIDI_L }, // CANADIAN SYLLABICS CARRIER LE
+ { 0x1625, BIDI_L }, // CANADIAN SYLLABICS CARRIER LEE
+ { 0x1626, BIDI_L }, // CANADIAN SYLLABICS CARRIER LI
+ { 0x1627, BIDI_L }, // CANADIAN SYLLABICS CARRIER LA
+ { 0x1628, BIDI_L }, // CANADIAN SYLLABICS CARRIER DLU
+ { 0x1629, BIDI_L }, // CANADIAN SYLLABICS CARRIER DLO
+ { 0x162A, BIDI_L }, // CANADIAN SYLLABICS CARRIER DLE
+ { 0x162B, BIDI_L }, // CANADIAN SYLLABICS CARRIER DLEE
+ { 0x162C, BIDI_L }, // CANADIAN SYLLABICS CARRIER DLI
+ { 0x162D, BIDI_L }, // CANADIAN SYLLABICS CARRIER DLA
+ { 0x162E, BIDI_L }, // CANADIAN SYLLABICS CARRIER LHU
+ { 0x162F, BIDI_L }, // CANADIAN SYLLABICS CARRIER LHO
+ { 0x1630, BIDI_L }, // CANADIAN SYLLABICS CARRIER LHE
+ { 0x1631, BIDI_L }, // CANADIAN SYLLABICS CARRIER LHEE
+ { 0x1632, BIDI_L }, // CANADIAN SYLLABICS CARRIER LHI
+ { 0x1633, BIDI_L }, // CANADIAN SYLLABICS CARRIER LHA
+ { 0x1634, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLHU
+ { 0x1635, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLHO
+ { 0x1636, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLHE
+ { 0x1637, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLHEE
+ { 0x1638, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLHI
+ { 0x1639, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLHA
+ { 0x163A, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLU
+ { 0x163B, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLO
+ { 0x163C, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLE
+ { 0x163D, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLEE
+ { 0x163E, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLI
+ { 0x163F, BIDI_L }, // CANADIAN SYLLABICS CARRIER TLA
+ { 0x1640, BIDI_L }, // CANADIAN SYLLABICS CARRIER ZU
+ { 0x1641, BIDI_L }, // CANADIAN SYLLABICS CARRIER ZO
+ { 0x1642, BIDI_L }, // CANADIAN SYLLABICS CARRIER ZE
+ { 0x1643, BIDI_L }, // CANADIAN SYLLABICS CARRIER ZEE
+ { 0x1644, BIDI_L }, // CANADIAN SYLLABICS CARRIER ZI
+ { 0x1645, BIDI_L }, // CANADIAN SYLLABICS CARRIER ZA
+ { 0x1646, BIDI_L }, // CANADIAN SYLLABICS CARRIER Z
+ { 0x1647, BIDI_L }, // CANADIAN SYLLABICS CARRIER INITIAL Z
+ { 0x1648, BIDI_L }, // CANADIAN SYLLABICS CARRIER DZU
+ { 0x1649, BIDI_L }, // CANADIAN SYLLABICS CARRIER DZO
+ { 0x164A, BIDI_L }, // CANADIAN SYLLABICS CARRIER DZE
+ { 0x164B, BIDI_L }, // CANADIAN SYLLABICS CARRIER DZEE
+ { 0x164C, BIDI_L }, // CANADIAN SYLLABICS CARRIER DZI
+ { 0x164D, BIDI_L }, // CANADIAN SYLLABICS CARRIER DZA
+ { 0x164E, BIDI_L }, // CANADIAN SYLLABICS CARRIER SU
+ { 0x164F, BIDI_L }, // CANADIAN SYLLABICS CARRIER SO
+ { 0x1650, BIDI_L }, // CANADIAN SYLLABICS CARRIER SE
+ { 0x1651, BIDI_L }, // CANADIAN SYLLABICS CARRIER SEE
+ { 0x1652, BIDI_L }, // CANADIAN SYLLABICS CARRIER SI
+ { 0x1653, BIDI_L }, // CANADIAN SYLLABICS CARRIER SA
+ { 0x1654, BIDI_L }, // CANADIAN SYLLABICS CARRIER SHU
+ { 0x1655, BIDI_L }, // CANADIAN SYLLABICS CARRIER SHO
+ { 0x1656, BIDI_L }, // CANADIAN SYLLABICS CARRIER SHE
+ { 0x1657, BIDI_L }, // CANADIAN SYLLABICS CARRIER SHEE
+ { 0x1658, BIDI_L }, // CANADIAN SYLLABICS CARRIER SHI
+ { 0x1659, BIDI_L }, // CANADIAN SYLLABICS CARRIER SHA
+ { 0x165A, BIDI_L }, // CANADIAN SYLLABICS CARRIER SH
+ { 0x165B, BIDI_L }, // CANADIAN SYLLABICS CARRIER TSU
+ { 0x165C, BIDI_L }, // CANADIAN SYLLABICS CARRIER TSO
+ { 0x165D, BIDI_L }, // CANADIAN SYLLABICS CARRIER TSE
+ { 0x165E, BIDI_L }, // CANADIAN SYLLABICS CARRIER TSEE
+ { 0x165F, BIDI_L }, // CANADIAN SYLLABICS CARRIER TSI
+ { 0x1660, BIDI_L }, // CANADIAN SYLLABICS CARRIER TSA
+ { 0x1661, BIDI_L }, // CANADIAN SYLLABICS CARRIER CHU
+ { 0x1662, BIDI_L }, // CANADIAN SYLLABICS CARRIER CHO
+ { 0x1663, BIDI_L }, // CANADIAN SYLLABICS CARRIER CHE
+ { 0x1664, BIDI_L }, // CANADIAN SYLLABICS CARRIER CHEE
+ { 0x1665, BIDI_L }, // CANADIAN SYLLABICS CARRIER CHI
+ { 0x1666, BIDI_L }, // CANADIAN SYLLABICS CARRIER CHA
+ { 0x1667, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTSU
+ { 0x1668, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTSO
+ { 0x1669, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTSE
+ { 0x166A, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTSEE
+ { 0x166B, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTSI
+ { 0x166C, BIDI_L }, // CANADIAN SYLLABICS CARRIER TTSA
+ { 0x166D, BIDI_L }, // CANADIAN SYLLABICS CHI SIGN
+ { 0x166E, BIDI_L }, // CANADIAN SYLLABICS FULL STOP
+ { 0x166F, BIDI_L }, // CANADIAN SYLLABICS QAI
+ { 0x1670, BIDI_L }, // CANADIAN SYLLABICS NGAI
+ { 0x1671, BIDI_L }, // CANADIAN SYLLABICS NNGI
+ { 0x1672, BIDI_L }, // CANADIAN SYLLABICS NNGII
+ { 0x1673, BIDI_L }, // CANADIAN SYLLABICS NNGO
+ { 0x1674, BIDI_L }, // CANADIAN SYLLABICS NNGOO
+ { 0x1675, BIDI_L }, // CANADIAN SYLLABICS NNGA
+ { 0x1676, BIDI_L }, // CANADIAN SYLLABICS NNGAA
+ { 0x1677, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWEE
+ { 0x1678, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWI
+ { 0x1679, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWII
+ { 0x167A, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWO
+ { 0x167B, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWOO
+ { 0x167C, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWA
+ { 0x167D, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE THWAA
+ { 0x167E, BIDI_L }, // CANADIAN SYLLABICS WOODS-CREE FINAL TH
+ { 0x167F, BIDI_L }, // CANADIAN SYLLABICS BLACKFOOT W
+ { 0x1680, BIDI_WS }, // OGHAM SPACE MARK
+ { 0x1681, BIDI_L }, // OGHAM LETTER BEITH
+ { 0x1682, BIDI_L }, // OGHAM LETTER LUIS
+ { 0x1683, BIDI_L }, // OGHAM LETTER FEARN
+ { 0x1684, BIDI_L }, // OGHAM LETTER SAIL
+ { 0x1685, BIDI_L }, // OGHAM LETTER NION
+ { 0x1686, BIDI_L }, // OGHAM LETTER UATH
+ { 0x1687, BIDI_L }, // OGHAM LETTER DAIR
+ { 0x1688, BIDI_L }, // OGHAM LETTER TINNE
+ { 0x1689, BIDI_L }, // OGHAM LETTER COLL
+ { 0x168A, BIDI_L }, // OGHAM LETTER CEIRT
+ { 0x168B, BIDI_L }, // OGHAM LETTER MUIN
+ { 0x168C, BIDI_L }, // OGHAM LETTER GORT
+ { 0x168D, BIDI_L }, // OGHAM LETTER NGEADAL
+ { 0x168E, BIDI_L }, // OGHAM LETTER STRAIF
+ { 0x168F, BIDI_L }, // OGHAM LETTER RUIS
+ { 0x1690, BIDI_L }, // OGHAM LETTER AILM
+ { 0x1691, BIDI_L }, // OGHAM LETTER ONN
+ { 0x1692, BIDI_L }, // OGHAM LETTER UR
+ { 0x1693, BIDI_L }, // OGHAM LETTER EADHADH
+ { 0x1694, BIDI_L }, // OGHAM LETTER IODHADH
+ { 0x1695, BIDI_L }, // OGHAM LETTER EABHADH
+ { 0x1696, BIDI_L }, // OGHAM LETTER OR
+ { 0x1697, BIDI_L }, // OGHAM LETTER UILLEANN
+ { 0x1698, BIDI_L }, // OGHAM LETTER IFIN
+ { 0x1699, BIDI_L }, // OGHAM LETTER EAMHANCHOLL
+ { 0x169A, BIDI_L }, // OGHAM LETTER PEITH
+ { 0x169B, BIDI_ON }, // OGHAM FEATHER MARK
+ { 0x169C, BIDI_ON }, // OGHAM REVERSED FEATHER MARK
+ { 0x16A0, BIDI_L }, // RUNIC LETTER FEHU FEOH FE F
+ { 0x16A1, BIDI_L }, // RUNIC LETTER V
+ { 0x16A2, BIDI_L }, // RUNIC LETTER URUZ UR U
+ { 0x16A3, BIDI_L }, // RUNIC LETTER YR
+ { 0x16A4, BIDI_L }, // RUNIC LETTER Y
+ { 0x16A5, BIDI_L }, // RUNIC LETTER W
+ { 0x16A6, BIDI_L }, // RUNIC LETTER THURISAZ THURS THORN
+ { 0x16A7, BIDI_L }, // RUNIC LETTER ETH
+ { 0x16A8, BIDI_L }, // RUNIC LETTER ANSUZ A
+ { 0x16A9, BIDI_L }, // RUNIC LETTER OS O
+ { 0x16AA, BIDI_L }, // RUNIC LETTER AC A
+ { 0x16AB, BIDI_L }, // RUNIC LETTER AESC
+ { 0x16AC, BIDI_L }, // RUNIC LETTER LONG-BRANCH-OSS O
+ { 0x16AD, BIDI_L }, // RUNIC LETTER SHORT-TWIG-OSS O
+ { 0x16AE, BIDI_L }, // RUNIC LETTER O
+ { 0x16AF, BIDI_L }, // RUNIC LETTER OE
+ { 0x16B0, BIDI_L }, // RUNIC LETTER ON
+ { 0x16B1, BIDI_L }, // RUNIC LETTER RAIDO RAD REID R
+ { 0x16B2, BIDI_L }, // RUNIC LETTER KAUNA
+ { 0x16B3, BIDI_L }, // RUNIC LETTER CEN
+ { 0x16B4, BIDI_L }, // RUNIC LETTER KAUN K
+ { 0x16B5, BIDI_L }, // RUNIC LETTER G
+ { 0x16B6, BIDI_L }, // RUNIC LETTER ENG
+ { 0x16B7, BIDI_L }, // RUNIC LETTER GEBO GYFU G
+ { 0x16B8, BIDI_L }, // RUNIC LETTER GAR
+ { 0x16B9, BIDI_L }, // RUNIC LETTER WUNJO WYNN W
+ { 0x16BA, BIDI_L }, // RUNIC LETTER HAGLAZ H
+ { 0x16BB, BIDI_L }, // RUNIC LETTER HAEGL H
+ { 0x16BC, BIDI_L }, // RUNIC LETTER LONG-BRANCH-HAGALL H
+ { 0x16BD, BIDI_L }, // RUNIC LETTER SHORT-TWIG-HAGALL H
+ { 0x16BE, BIDI_L }, // RUNIC LETTER NAUDIZ NYD NAUD N
+ { 0x16BF, BIDI_L }, // RUNIC LETTER SHORT-TWIG-NAUD N
+ { 0x16C0, BIDI_L }, // RUNIC LETTER DOTTED-N
+ { 0x16C1, BIDI_L }, // RUNIC LETTER ISAZ IS ISS I
+ { 0x16C2, BIDI_L }, // RUNIC LETTER E
+ { 0x16C3, BIDI_L }, // RUNIC LETTER JERAN J
+ { 0x16C4, BIDI_L }, // RUNIC LETTER GER
+ { 0x16C5, BIDI_L }, // RUNIC LETTER LONG-BRANCH-AR AE
+ { 0x16C6, BIDI_L }, // RUNIC LETTER SHORT-TWIG-AR A
+ { 0x16C7, BIDI_L }, // RUNIC LETTER IWAZ EOH
+ { 0x16C8, BIDI_L }, // RUNIC LETTER PERTHO PEORTH P
+ { 0x16C9, BIDI_L }, // RUNIC LETTER ALGIZ EOLHX
+ { 0x16CA, BIDI_L }, // RUNIC LETTER SOWILO S
+ { 0x16CB, BIDI_L }, // RUNIC LETTER SIGEL LONG-BRANCH-SOL S
+ { 0x16CC, BIDI_L }, // RUNIC LETTER SHORT-TWIG-SOL S
+ { 0x16CD, BIDI_L }, // RUNIC LETTER C
+ { 0x16CE, BIDI_L }, // RUNIC LETTER Z
+ { 0x16CF, BIDI_L }, // RUNIC LETTER TIWAZ TIR TYR T
+ { 0x16D0, BIDI_L }, // RUNIC LETTER SHORT-TWIG-TYR T
+ { 0x16D1, BIDI_L }, // RUNIC LETTER D
+ { 0x16D2, BIDI_L }, // RUNIC LETTER BERKANAN BEORC BJARKAN B
+ { 0x16D3, BIDI_L }, // RUNIC LETTER SHORT-TWIG-BJARKAN B
+ { 0x16D4, BIDI_L }, // RUNIC LETTER DOTTED-P
+ { 0x16D5, BIDI_L }, // RUNIC LETTER OPEN-P
+ { 0x16D6, BIDI_L }, // RUNIC LETTER EHWAZ EH E
+ { 0x16D7, BIDI_L }, // RUNIC LETTER MANNAZ MAN M
+ { 0x16D8, BIDI_L }, // RUNIC LETTER LONG-BRANCH-MADR M
+ { 0x16D9, BIDI_L }, // RUNIC LETTER SHORT-TWIG-MADR M
+ { 0x16DA, BIDI_L }, // RUNIC LETTER LAUKAZ LAGU LOGR L
+ { 0x16DB, BIDI_L }, // RUNIC LETTER DOTTED-L
+ { 0x16DC, BIDI_L }, // RUNIC LETTER INGWAZ
+ { 0x16DD, BIDI_L }, // RUNIC LETTER ING
+ { 0x16DE, BIDI_L }, // RUNIC LETTER DAGAZ DAEG D
+ { 0x16DF, BIDI_L }, // RUNIC LETTER OTHALAN ETHEL O
+ { 0x16E0, BIDI_L }, // RUNIC LETTER EAR
+ { 0x16E1, BIDI_L }, // RUNIC LETTER IOR
+ { 0x16E2, BIDI_L }, // RUNIC LETTER CWEORTH
+ { 0x16E3, BIDI_L }, // RUNIC LETTER CALC
+ { 0x16E4, BIDI_L }, // RUNIC LETTER CEALC
+ { 0x16E5, BIDI_L }, // RUNIC LETTER STAN
+ { 0x16E6, BIDI_L }, // RUNIC LETTER LONG-BRANCH-YR
+ { 0x16E7, BIDI_L }, // RUNIC LETTER SHORT-TWIG-YR
+ { 0x16E8, BIDI_L }, // RUNIC LETTER ICELANDIC-YR
+ { 0x16E9, BIDI_L }, // RUNIC LETTER Q
+ { 0x16EA, BIDI_L }, // RUNIC LETTER X
+ { 0x16EB, BIDI_L }, // RUNIC SINGLE PUNCTUATION
+ { 0x16EC, BIDI_L }, // RUNIC MULTIPLE PUNCTUATION
+ { 0x16ED, BIDI_L }, // RUNIC CROSS PUNCTUATION
+ { 0x16EE, BIDI_L }, // RUNIC ARLAUG SYMBOL
+ { 0x16EF, BIDI_L }, // RUNIC TVIMADUR SYMBOL
+ { 0x16F0, BIDI_L }, // RUNIC BELGTHOR SYMBOL
+ { 0x16F1, BIDI_L }, // RUNIC LETTER K
+ { 0x16F2, BIDI_L }, // RUNIC LETTER SH
+ { 0x16F3, BIDI_L }, // RUNIC LETTER OO
+ { 0x16F4, BIDI_L }, // RUNIC LETTER FRANKS CASKET OS
+ { 0x16F5, BIDI_L }, // RUNIC LETTER FRANKS CASKET IS
+ { 0x16F6, BIDI_L }, // RUNIC LETTER FRANKS CASKET EH
+ { 0x16F7, BIDI_L }, // RUNIC LETTER FRANKS CASKET AC
+ { 0x16F8, BIDI_L }, // RUNIC LETTER FRANKS CASKET AESC
+ { 0x1700, BIDI_L }, // TAGALOG LETTER A
+ { 0x1701, BIDI_L }, // TAGALOG LETTER I
+ { 0x1702, BIDI_L }, // TAGALOG LETTER U
+ { 0x1703, BIDI_L }, // TAGALOG LETTER KA
+ { 0x1704, BIDI_L }, // TAGALOG LETTER GA
+ { 0x1705, BIDI_L }, // TAGALOG LETTER NGA
+ { 0x1706, BIDI_L }, // TAGALOG LETTER TA
+ { 0x1707, BIDI_L }, // TAGALOG LETTER DA
+ { 0x1708, BIDI_L }, // TAGALOG LETTER NA
+ { 0x1709, BIDI_L }, // TAGALOG LETTER PA
+ { 0x170A, BIDI_L }, // TAGALOG LETTER BA
+ { 0x170B, BIDI_L }, // TAGALOG LETTER MA
+ { 0x170C, BIDI_L }, // TAGALOG LETTER YA
+ { 0x170E, BIDI_L }, // TAGALOG LETTER LA
+ { 0x170F, BIDI_L }, // TAGALOG LETTER WA
+ { 0x1710, BIDI_L }, // TAGALOG LETTER SA
+ { 0x1711, BIDI_L }, // TAGALOG LETTER HA
+ { 0x1712, BIDI_NSM }, // TAGALOG VOWEL SIGN I
+ { 0x1713, BIDI_NSM }, // TAGALOG VOWEL SIGN U
+ { 0x1714, BIDI_NSM }, // TAGALOG SIGN VIRAMA
+ { 0x1720, BIDI_L }, // HANUNOO LETTER A
+ { 0x1721, BIDI_L }, // HANUNOO LETTER I
+ { 0x1722, BIDI_L }, // HANUNOO LETTER U
+ { 0x1723, BIDI_L }, // HANUNOO LETTER KA
+ { 0x1724, BIDI_L }, // HANUNOO LETTER GA
+ { 0x1725, BIDI_L }, // HANUNOO LETTER NGA
+ { 0x1726, BIDI_L }, // HANUNOO LETTER TA
+ { 0x1727, BIDI_L }, // HANUNOO LETTER DA
+ { 0x1728, BIDI_L }, // HANUNOO LETTER NA
+ { 0x1729, BIDI_L }, // HANUNOO LETTER PA
+ { 0x172A, BIDI_L }, // HANUNOO LETTER BA
+ { 0x172B, BIDI_L }, // HANUNOO LETTER MA
+ { 0x172C, BIDI_L }, // HANUNOO LETTER YA
+ { 0x172D, BIDI_L }, // HANUNOO LETTER RA
+ { 0x172E, BIDI_L }, // HANUNOO LETTER LA
+ { 0x172F, BIDI_L }, // HANUNOO LETTER WA
+ { 0x1730, BIDI_L }, // HANUNOO LETTER SA
+ { 0x1731, BIDI_L }, // HANUNOO LETTER HA
+ { 0x1732, BIDI_NSM }, // HANUNOO VOWEL SIGN I
+ { 0x1733, BIDI_NSM }, // HANUNOO VOWEL SIGN U
+ { 0x1734, BIDI_NSM }, // HANUNOO SIGN PAMUDPOD
+ { 0x1735, BIDI_L }, // PHILIPPINE SINGLE PUNCTUATION
+ { 0x1736, BIDI_L }, // PHILIPPINE DOUBLE PUNCTUATION
+ { 0x1740, BIDI_L }, // BUHID LETTER A
+ { 0x1741, BIDI_L }, // BUHID LETTER I
+ { 0x1742, BIDI_L }, // BUHID LETTER U
+ { 0x1743, BIDI_L }, // BUHID LETTER KA
+ { 0x1744, BIDI_L }, // BUHID LETTER GA
+ { 0x1745, BIDI_L }, // BUHID LETTER NGA
+ { 0x1746, BIDI_L }, // BUHID LETTER TA
+ { 0x1747, BIDI_L }, // BUHID LETTER DA
+ { 0x1748, BIDI_L }, // BUHID LETTER NA
+ { 0x1749, BIDI_L }, // BUHID LETTER PA
+ { 0x174A, BIDI_L }, // BUHID LETTER BA
+ { 0x174B, BIDI_L }, // BUHID LETTER MA
+ { 0x174C, BIDI_L }, // BUHID LETTER YA
+ { 0x174D, BIDI_L }, // BUHID LETTER RA
+ { 0x174E, BIDI_L }, // BUHID LETTER LA
+ { 0x174F, BIDI_L }, // BUHID LETTER WA
+ { 0x1750, BIDI_L }, // BUHID LETTER SA
+ { 0x1751, BIDI_L }, // BUHID LETTER HA
+ { 0x1752, BIDI_NSM }, // BUHID VOWEL SIGN I
+ { 0x1753, BIDI_NSM }, // BUHID VOWEL SIGN U
+ { 0x1760, BIDI_L }, // TAGBANWA LETTER A
+ { 0x1761, BIDI_L }, // TAGBANWA LETTER I
+ { 0x1762, BIDI_L }, // TAGBANWA LETTER U
+ { 0x1763, BIDI_L }, // TAGBANWA LETTER KA
+ { 0x1764, BIDI_L }, // TAGBANWA LETTER GA
+ { 0x1765, BIDI_L }, // TAGBANWA LETTER NGA
+ { 0x1766, BIDI_L }, // TAGBANWA LETTER TA
+ { 0x1767, BIDI_L }, // TAGBANWA LETTER DA
+ { 0x1768, BIDI_L }, // TAGBANWA LETTER NA
+ { 0x1769, BIDI_L }, // TAGBANWA LETTER PA
+ { 0x176A, BIDI_L }, // TAGBANWA LETTER BA
+ { 0x176B, BIDI_L }, // TAGBANWA LETTER MA
+ { 0x176C, BIDI_L }, // TAGBANWA LETTER YA
+ { 0x176E, BIDI_L }, // TAGBANWA LETTER LA
+ { 0x176F, BIDI_L }, // TAGBANWA LETTER WA
+ { 0x1770, BIDI_L }, // TAGBANWA LETTER SA
+ { 0x1772, BIDI_NSM }, // TAGBANWA VOWEL SIGN I
+ { 0x1773, BIDI_NSM }, // TAGBANWA VOWEL SIGN U
+ { 0x1780, BIDI_L }, // KHMER LETTER KA
+ { 0x1781, BIDI_L }, // KHMER LETTER KHA
+ { 0x1782, BIDI_L }, // KHMER LETTER KO
+ { 0x1783, BIDI_L }, // KHMER LETTER KHO
+ { 0x1784, BIDI_L }, // KHMER LETTER NGO
+ { 0x1785, BIDI_L }, // KHMER LETTER CA
+ { 0x1786, BIDI_L }, // KHMER LETTER CHA
+ { 0x1787, BIDI_L }, // KHMER LETTER CO
+ { 0x1788, BIDI_L }, // KHMER LETTER CHO
+ { 0x1789, BIDI_L }, // KHMER LETTER NYO
+ { 0x178A, BIDI_L }, // KHMER LETTER DA
+ { 0x178B, BIDI_L }, // KHMER LETTER TTHA
+ { 0x178C, BIDI_L }, // KHMER LETTER DO
+ { 0x178D, BIDI_L }, // KHMER LETTER TTHO
+ { 0x178E, BIDI_L }, // KHMER LETTER NNO
+ { 0x178F, BIDI_L }, // KHMER LETTER TA
+ { 0x1790, BIDI_L }, // KHMER LETTER THA
+ { 0x1791, BIDI_L }, // KHMER LETTER TO
+ { 0x1792, BIDI_L }, // KHMER LETTER THO
+ { 0x1793, BIDI_L }, // KHMER LETTER NO
+ { 0x1794, BIDI_L }, // KHMER LETTER BA
+ { 0x1795, BIDI_L }, // KHMER LETTER PHA
+ { 0x1796, BIDI_L }, // KHMER LETTER PO
+ { 0x1797, BIDI_L }, // KHMER LETTER PHO
+ { 0x1798, BIDI_L }, // KHMER LETTER MO
+ { 0x1799, BIDI_L }, // KHMER LETTER YO
+ { 0x179A, BIDI_L }, // KHMER LETTER RO
+ { 0x179B, BIDI_L }, // KHMER LETTER LO
+ { 0x179C, BIDI_L }, // KHMER LETTER VO
+ { 0x179D, BIDI_L }, // KHMER LETTER SHA
+ { 0x179E, BIDI_L }, // KHMER LETTER SSO
+ { 0x179F, BIDI_L }, // KHMER LETTER SA
+ { 0x17A0, BIDI_L }, // KHMER LETTER HA
+ { 0x17A1, BIDI_L }, // KHMER LETTER LA
+ { 0x17A2, BIDI_L }, // KHMER LETTER QA
+ { 0x17A3, BIDI_L }, // KHMER INDEPENDENT VOWEL QAQ
+ { 0x17A4, BIDI_L }, // KHMER INDEPENDENT VOWEL QAA
+ { 0x17A5, BIDI_L }, // KHMER INDEPENDENT VOWEL QI
+ { 0x17A6, BIDI_L }, // KHMER INDEPENDENT VOWEL QII
+ { 0x17A7, BIDI_L }, // KHMER INDEPENDENT VOWEL QU
+ { 0x17A8, BIDI_L }, // KHMER INDEPENDENT VOWEL QUK
+ { 0x17A9, BIDI_L }, // KHMER INDEPENDENT VOWEL QUU
+ { 0x17AA, BIDI_L }, // KHMER INDEPENDENT VOWEL QUUV
+ { 0x17AB, BIDI_L }, // KHMER INDEPENDENT VOWEL RY
+ { 0x17AC, BIDI_L }, // KHMER INDEPENDENT VOWEL RYY
+ { 0x17AD, BIDI_L }, // KHMER INDEPENDENT VOWEL LY
+ { 0x17AE, BIDI_L }, // KHMER INDEPENDENT VOWEL LYY
+ { 0x17AF, BIDI_L }, // KHMER INDEPENDENT VOWEL QE
+ { 0x17B0, BIDI_L }, // KHMER INDEPENDENT VOWEL QAI
+ { 0x17B1, BIDI_L }, // KHMER INDEPENDENT VOWEL QOO TYPE ONE
+ { 0x17B2, BIDI_L }, // KHMER INDEPENDENT VOWEL QOO TYPE TWO
+ { 0x17B3, BIDI_L }, // KHMER INDEPENDENT VOWEL QAU
+ { 0x17B4, BIDI_NSM }, // KHMER VOWEL INHERENT AQ
+ { 0x17B5, BIDI_NSM }, // KHMER VOWEL INHERENT AA
+ { 0x17B6, BIDI_L }, // KHMER VOWEL SIGN AA
+ { 0x17B7, BIDI_NSM }, // KHMER VOWEL SIGN I
+ { 0x17B8, BIDI_NSM }, // KHMER VOWEL SIGN II
+ { 0x17B9, BIDI_NSM }, // KHMER VOWEL SIGN Y
+ { 0x17BA, BIDI_NSM }, // KHMER VOWEL SIGN YY
+ { 0x17BB, BIDI_NSM }, // KHMER VOWEL SIGN U
+ { 0x17BC, BIDI_NSM }, // KHMER VOWEL SIGN UU
+ { 0x17BD, BIDI_NSM }, // KHMER VOWEL SIGN UA
+ { 0x17BE, BIDI_L }, // KHMER VOWEL SIGN OE
+ { 0x17BF, BIDI_L }, // KHMER VOWEL SIGN YA
+ { 0x17C0, BIDI_L }, // KHMER VOWEL SIGN IE
+ { 0x17C1, BIDI_L }, // KHMER VOWEL SIGN E
+ { 0x17C2, BIDI_L }, // KHMER VOWEL SIGN AE
+ { 0x17C3, BIDI_L }, // KHMER VOWEL SIGN AI
+ { 0x17C4, BIDI_L }, // KHMER VOWEL SIGN OO
+ { 0x17C5, BIDI_L }, // KHMER VOWEL SIGN AU
+ { 0x17C6, BIDI_NSM }, // KHMER SIGN NIKAHIT
+ { 0x17C7, BIDI_L }, // KHMER SIGN REAHMUK
+ { 0x17C8, BIDI_L }, // KHMER SIGN YUUKALEAPINTU
+ { 0x17C9, BIDI_NSM }, // KHMER SIGN MUUSIKATOAN
+ { 0x17CA, BIDI_NSM }, // KHMER SIGN TRIISAP
+ { 0x17CB, BIDI_NSM }, // KHMER SIGN BANTOC
+ { 0x17CC, BIDI_NSM }, // KHMER SIGN ROBAT
+ { 0x17CD, BIDI_NSM }, // KHMER SIGN TOANDAKHIAT
+ { 0x17CE, BIDI_NSM }, // KHMER SIGN KAKABAT
+ { 0x17CF, BIDI_NSM }, // KHMER SIGN AHSDA
+ { 0x17D0, BIDI_NSM }, // KHMER SIGN SAMYOK SANNYA
+ { 0x17D1, BIDI_NSM }, // KHMER SIGN VIRIAM
+ { 0x17D2, BIDI_NSM }, // KHMER SIGN COENG
+ { 0x17D3, BIDI_NSM }, // KHMER SIGN BATHAMASAT
+ { 0x17D4, BIDI_L }, // KHMER SIGN KHAN
+ { 0x17D5, BIDI_L }, // KHMER SIGN BARIYOOSAN
+ { 0x17D6, BIDI_L }, // KHMER SIGN CAMNUC PII KUUH
+ { 0x17D7, BIDI_L }, // KHMER SIGN LEK TOO
+ { 0x17D8, BIDI_L }, // KHMER SIGN BEYYAL
+ { 0x17D9, BIDI_L }, // KHMER SIGN PHNAEK MUAN
+ { 0x17DA, BIDI_L }, // KHMER SIGN KOOMUUT
+ { 0x17DB, BIDI_ET }, // KHMER CURRENCY SYMBOL RIEL
+ { 0x17DC, BIDI_L }, // KHMER SIGN AVAKRAHASANYA
+ { 0x17DD, BIDI_NSM }, // KHMER SIGN ATTHACAN
+ { 0x17E0, BIDI_L }, // KHMER DIGIT ZERO
+ { 0x17E1, BIDI_L }, // KHMER DIGIT ONE
+ { 0x17E2, BIDI_L }, // KHMER DIGIT TWO
+ { 0x17E3, BIDI_L }, // KHMER DIGIT THREE
+ { 0x17E4, BIDI_L }, // KHMER DIGIT FOUR
+ { 0x17E5, BIDI_L }, // KHMER DIGIT FIVE
+ { 0x17E6, BIDI_L }, // KHMER DIGIT SIX
+ { 0x17E7, BIDI_L }, // KHMER DIGIT SEVEN
+ { 0x17E8, BIDI_L }, // KHMER DIGIT EIGHT
+ { 0x17E9, BIDI_L }, // KHMER DIGIT NINE
+ { 0x17F0, BIDI_ON }, // KHMER SYMBOL LEK ATTAK SON
+ { 0x17F1, BIDI_ON }, // KHMER SYMBOL LEK ATTAK MUOY
+ { 0x17F2, BIDI_ON }, // KHMER SYMBOL LEK ATTAK PII
+ { 0x17F3, BIDI_ON }, // KHMER SYMBOL LEK ATTAK BEI
+ { 0x17F4, BIDI_ON }, // KHMER SYMBOL LEK ATTAK BUON
+ { 0x17F5, BIDI_ON }, // KHMER SYMBOL LEK ATTAK PRAM
+ { 0x17F6, BIDI_ON }, // KHMER SYMBOL LEK ATTAK PRAM-MUOY
+ { 0x17F7, BIDI_ON }, // KHMER SYMBOL LEK ATTAK PRAM-PII
+ { 0x17F8, BIDI_ON }, // KHMER SYMBOL LEK ATTAK PRAM-BEI
+ { 0x17F9, BIDI_ON }, // KHMER SYMBOL LEK ATTAK PRAM-BUON
+ { 0x1800, BIDI_ON }, // MONGOLIAN BIRGA
+ { 0x1801, BIDI_ON }, // MONGOLIAN ELLIPSIS
+ { 0x1802, BIDI_ON }, // MONGOLIAN COMMA
+ { 0x1803, BIDI_ON }, // MONGOLIAN FULL STOP
+ { 0x1804, BIDI_ON }, // MONGOLIAN COLON
+ { 0x1805, BIDI_ON }, // MONGOLIAN FOUR DOTS
+ { 0x1806, BIDI_ON }, // MONGOLIAN TODO SOFT HYPHEN
+ { 0x1807, BIDI_ON }, // MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
+ { 0x1808, BIDI_ON }, // MONGOLIAN MANCHU COMMA
+ { 0x1809, BIDI_ON }, // MONGOLIAN MANCHU FULL STOP
+ { 0x180A, BIDI_ON }, // MONGOLIAN NIRUGU
+ { 0x180B, BIDI_NSM }, // MONGOLIAN FREE VARIATION SELECTOR ONE
+ { 0x180C, BIDI_NSM }, // MONGOLIAN FREE VARIATION SELECTOR TWO
+ { 0x180D, BIDI_NSM }, // MONGOLIAN FREE VARIATION SELECTOR THREE
+ { 0x180E, BIDI_BN }, // MONGOLIAN VOWEL SEPARATOR
+ { 0x1810, BIDI_L }, // MONGOLIAN DIGIT ZERO
+ { 0x1811, BIDI_L }, // MONGOLIAN DIGIT ONE
+ { 0x1812, BIDI_L }, // MONGOLIAN DIGIT TWO
+ { 0x1813, BIDI_L }, // MONGOLIAN DIGIT THREE
+ { 0x1814, BIDI_L }, // MONGOLIAN DIGIT FOUR
+ { 0x1815, BIDI_L }, // MONGOLIAN DIGIT FIVE
+ { 0x1816, BIDI_L }, // MONGOLIAN DIGIT SIX
+ { 0x1817, BIDI_L }, // MONGOLIAN DIGIT SEVEN
+ { 0x1818, BIDI_L }, // MONGOLIAN DIGIT EIGHT
+ { 0x1819, BIDI_L }, // MONGOLIAN DIGIT NINE
+ { 0x1820, BIDI_L }, // MONGOLIAN LETTER A
+ { 0x1821, BIDI_L }, // MONGOLIAN LETTER E
+ { 0x1822, BIDI_L }, // MONGOLIAN LETTER I
+ { 0x1823, BIDI_L }, // MONGOLIAN LETTER O
+ { 0x1824, BIDI_L }, // MONGOLIAN LETTER U
+ { 0x1825, BIDI_L }, // MONGOLIAN LETTER OE
+ { 0x1826, BIDI_L }, // MONGOLIAN LETTER UE
+ { 0x1827, BIDI_L }, // MONGOLIAN LETTER EE
+ { 0x1828, BIDI_L }, // MONGOLIAN LETTER NA
+ { 0x1829, BIDI_L }, // MONGOLIAN LETTER ANG
+ { 0x182A, BIDI_L }, // MONGOLIAN LETTER BA
+ { 0x182B, BIDI_L }, // MONGOLIAN LETTER PA
+ { 0x182C, BIDI_L }, // MONGOLIAN LETTER QA
+ { 0x182D, BIDI_L }, // MONGOLIAN LETTER GA
+ { 0x182E, BIDI_L }, // MONGOLIAN LETTER MA
+ { 0x182F, BIDI_L }, // MONGOLIAN LETTER LA
+ { 0x1830, BIDI_L }, // MONGOLIAN LETTER SA
+ { 0x1831, BIDI_L }, // MONGOLIAN LETTER SHA
+ { 0x1832, BIDI_L }, // MONGOLIAN LETTER TA
+ { 0x1833, BIDI_L }, // MONGOLIAN LETTER DA
+ { 0x1834, BIDI_L }, // MONGOLIAN LETTER CHA
+ { 0x1835, BIDI_L }, // MONGOLIAN LETTER JA
+ { 0x1836, BIDI_L }, // MONGOLIAN LETTER YA
+ { 0x1837, BIDI_L }, // MONGOLIAN LETTER RA
+ { 0x1838, BIDI_L }, // MONGOLIAN LETTER WA
+ { 0x1839, BIDI_L }, // MONGOLIAN LETTER FA
+ { 0x183A, BIDI_L }, // MONGOLIAN LETTER KA
+ { 0x183B, BIDI_L }, // MONGOLIAN LETTER KHA
+ { 0x183C, BIDI_L }, // MONGOLIAN LETTER TSA
+ { 0x183D, BIDI_L }, // MONGOLIAN LETTER ZA
+ { 0x183E, BIDI_L }, // MONGOLIAN LETTER HAA
+ { 0x183F, BIDI_L }, // MONGOLIAN LETTER ZRA
+ { 0x1840, BIDI_L }, // MONGOLIAN LETTER LHA
+ { 0x1841, BIDI_L }, // MONGOLIAN LETTER ZHI
+ { 0x1842, BIDI_L }, // MONGOLIAN LETTER CHI
+ { 0x1843, BIDI_L }, // MONGOLIAN LETTER TODO LONG VOWEL SIGN
+ { 0x1844, BIDI_L }, // MONGOLIAN LETTER TODO E
+ { 0x1845, BIDI_L }, // MONGOLIAN LETTER TODO I
+ { 0x1846, BIDI_L }, // MONGOLIAN LETTER TODO O
+ { 0x1847, BIDI_L }, // MONGOLIAN LETTER TODO U
+ { 0x1848, BIDI_L }, // MONGOLIAN LETTER TODO OE
+ { 0x1849, BIDI_L }, // MONGOLIAN LETTER TODO UE
+ { 0x184A, BIDI_L }, // MONGOLIAN LETTER TODO ANG
+ { 0x184B, BIDI_L }, // MONGOLIAN LETTER TODO BA
+ { 0x184C, BIDI_L }, // MONGOLIAN LETTER TODO PA
+ { 0x184D, BIDI_L }, // MONGOLIAN LETTER TODO QA
+ { 0x184E, BIDI_L }, // MONGOLIAN LETTER TODO GA
+ { 0x184F, BIDI_L }, // MONGOLIAN LETTER TODO MA
+ { 0x1850, BIDI_L }, // MONGOLIAN LETTER TODO TA
+ { 0x1851, BIDI_L }, // MONGOLIAN LETTER TODO DA
+ { 0x1852, BIDI_L }, // MONGOLIAN LETTER TODO CHA
+ { 0x1853, BIDI_L }, // MONGOLIAN LETTER TODO JA
+ { 0x1854, BIDI_L }, // MONGOLIAN LETTER TODO TSA
+ { 0x1855, BIDI_L }, // MONGOLIAN LETTER TODO YA
+ { 0x1856, BIDI_L }, // MONGOLIAN LETTER TODO WA
+ { 0x1857, BIDI_L }, // MONGOLIAN LETTER TODO KA
+ { 0x1858, BIDI_L }, // MONGOLIAN LETTER TODO GAA
+ { 0x1859, BIDI_L }, // MONGOLIAN LETTER TODO HAA
+ { 0x185A, BIDI_L }, // MONGOLIAN LETTER TODO JIA
+ { 0x185B, BIDI_L }, // MONGOLIAN LETTER TODO NIA
+ { 0x185C, BIDI_L }, // MONGOLIAN LETTER TODO DZA
+ { 0x185D, BIDI_L }, // MONGOLIAN LETTER SIBE E
+ { 0x185E, BIDI_L }, // MONGOLIAN LETTER SIBE I
+ { 0x185F, BIDI_L }, // MONGOLIAN LETTER SIBE IY
+ { 0x1860, BIDI_L }, // MONGOLIAN LETTER SIBE UE
+ { 0x1861, BIDI_L }, // MONGOLIAN LETTER SIBE U
+ { 0x1862, BIDI_L }, // MONGOLIAN LETTER SIBE ANG
+ { 0x1863, BIDI_L }, // MONGOLIAN LETTER SIBE KA
+ { 0x1864, BIDI_L }, // MONGOLIAN LETTER SIBE GA
+ { 0x1865, BIDI_L }, // MONGOLIAN LETTER SIBE HA
+ { 0x1866, BIDI_L }, // MONGOLIAN LETTER SIBE PA
+ { 0x1867, BIDI_L }, // MONGOLIAN LETTER SIBE SHA
+ { 0x1868, BIDI_L }, // MONGOLIAN LETTER SIBE TA
+ { 0x1869, BIDI_L }, // MONGOLIAN LETTER SIBE DA
+ { 0x186A, BIDI_L }, // MONGOLIAN LETTER SIBE JA
+ { 0x186B, BIDI_L }, // MONGOLIAN LETTER SIBE FA
+ { 0x186C, BIDI_L }, // MONGOLIAN LETTER SIBE GAA
+ { 0x186D, BIDI_L }, // MONGOLIAN LETTER SIBE HAA
+ { 0x186E, BIDI_L }, // MONGOLIAN LETTER SIBE TSA
+ { 0x186F, BIDI_L }, // MONGOLIAN LETTER SIBE ZA
+ { 0x1870, BIDI_L }, // MONGOLIAN LETTER SIBE RAA
+ { 0x1871, BIDI_L }, // MONGOLIAN LETTER SIBE CHA
+ { 0x1872, BIDI_L }, // MONGOLIAN LETTER SIBE ZHA
+ { 0x1873, BIDI_L }, // MONGOLIAN LETTER MANCHU I
+ { 0x1874, BIDI_L }, // MONGOLIAN LETTER MANCHU KA
+ { 0x1875, BIDI_L }, // MONGOLIAN LETTER MANCHU RA
+ { 0x1876, BIDI_L }, // MONGOLIAN LETTER MANCHU FA
+ { 0x1877, BIDI_L }, // MONGOLIAN LETTER MANCHU ZHA
+ { 0x1880, BIDI_L }, // MONGOLIAN LETTER ALI GALI ANUSVARA ONE
+ { 0x1881, BIDI_L }, // MONGOLIAN LETTER ALI GALI VISARGA ONE
+ { 0x1882, BIDI_L }, // MONGOLIAN LETTER ALI GALI DAMARU
+ { 0x1883, BIDI_L }, // MONGOLIAN LETTER ALI GALI UBADAMA
+ { 0x1884, BIDI_L }, // MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+ { 0x1885, BIDI_L }, // MONGOLIAN LETTER ALI GALI BALUDA
+ { 0x1886, BIDI_L }, // MONGOLIAN LETTER ALI GALI THREE BALUDA
+ { 0x1887, BIDI_L }, // MONGOLIAN LETTER ALI GALI A
+ { 0x1888, BIDI_L }, // MONGOLIAN LETTER ALI GALI I
+ { 0x1889, BIDI_L }, // MONGOLIAN LETTER ALI GALI KA
+ { 0x188A, BIDI_L }, // MONGOLIAN LETTER ALI GALI NGA
+ { 0x188B, BIDI_L }, // MONGOLIAN LETTER ALI GALI CA
+ { 0x188C, BIDI_L }, // MONGOLIAN LETTER ALI GALI TTA
+ { 0x188D, BIDI_L }, // MONGOLIAN LETTER ALI GALI TTHA
+ { 0x188E, BIDI_L }, // MONGOLIAN LETTER ALI GALI DDA
+ { 0x188F, BIDI_L }, // MONGOLIAN LETTER ALI GALI NNA
+ { 0x1890, BIDI_L }, // MONGOLIAN LETTER ALI GALI TA
+ { 0x1891, BIDI_L }, // MONGOLIAN LETTER ALI GALI DA
+ { 0x1892, BIDI_L }, // MONGOLIAN LETTER ALI GALI PA
+ { 0x1893, BIDI_L }, // MONGOLIAN LETTER ALI GALI PHA
+ { 0x1894, BIDI_L }, // MONGOLIAN LETTER ALI GALI SSA
+ { 0x1895, BIDI_L }, // MONGOLIAN LETTER ALI GALI ZHA
+ { 0x1896, BIDI_L }, // MONGOLIAN LETTER ALI GALI ZA
+ { 0x1897, BIDI_L }, // MONGOLIAN LETTER ALI GALI AH
+ { 0x1898, BIDI_L }, // MONGOLIAN LETTER TODO ALI GALI TA
+ { 0x1899, BIDI_L }, // MONGOLIAN LETTER TODO ALI GALI ZHA
+ { 0x189A, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI GHA
+ { 0x189B, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI NGA
+ { 0x189C, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI CA
+ { 0x189D, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI JHA
+ { 0x189E, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI TTA
+ { 0x189F, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI DDHA
+ { 0x18A0, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI TA
+ { 0x18A1, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI DHA
+ { 0x18A2, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI SSA
+ { 0x18A3, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI CYA
+ { 0x18A4, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI ZHA
+ { 0x18A5, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI ZA
+ { 0x18A6, BIDI_L }, // MONGOLIAN LETTER ALI GALI HALF U
+ { 0x18A7, BIDI_L }, // MONGOLIAN LETTER ALI GALI HALF YA
+ { 0x18A8, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI BHA
+ { 0x18A9, BIDI_NSM }, // MONGOLIAN LETTER ALI GALI DAGALGA
+ { 0x18AA, BIDI_L }, // MONGOLIAN LETTER MANCHU ALI GALI LHA
+ { 0x18B0, BIDI_L }, // CANADIAN SYLLABICS OY
+ { 0x18B1, BIDI_L }, // CANADIAN SYLLABICS AY
+ { 0x18B2, BIDI_L }, // CANADIAN SYLLABICS AAY
+ { 0x18B3, BIDI_L }, // CANADIAN SYLLABICS WAY
+ { 0x18B4, BIDI_L }, // CANADIAN SYLLABICS POY
+ { 0x18B5, BIDI_L }, // CANADIAN SYLLABICS PAY
+ { 0x18B6, BIDI_L }, // CANADIAN SYLLABICS PWOY
+ { 0x18B7, BIDI_L }, // CANADIAN SYLLABICS TAY
+ { 0x18B8, BIDI_L }, // CANADIAN SYLLABICS KAY
+ { 0x18B9, BIDI_L }, // CANADIAN SYLLABICS KWAY
+ { 0x18BA, BIDI_L }, // CANADIAN SYLLABICS MAY
+ { 0x18BB, BIDI_L }, // CANADIAN SYLLABICS NOY
+ { 0x18BC, BIDI_L }, // CANADIAN SYLLABICS NAY
+ { 0x18BD, BIDI_L }, // CANADIAN SYLLABICS LAY
+ { 0x18BE, BIDI_L }, // CANADIAN SYLLABICS SOY
+ { 0x18BF, BIDI_L }, // CANADIAN SYLLABICS SAY
+ { 0x18C0, BIDI_L }, // CANADIAN SYLLABICS SHOY
+ { 0x18C1, BIDI_L }, // CANADIAN SYLLABICS SHAY
+ { 0x18C2, BIDI_L }, // CANADIAN SYLLABICS SHWOY
+ { 0x18C3, BIDI_L }, // CANADIAN SYLLABICS YOY
+ { 0x18C4, BIDI_L }, // CANADIAN SYLLABICS YAY
+ { 0x18C5, BIDI_L }, // CANADIAN SYLLABICS RAY
+ { 0x18C6, BIDI_L }, // CANADIAN SYLLABICS NWI
+ { 0x18C7, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY NWI
+ { 0x18C8, BIDI_L }, // CANADIAN SYLLABICS NWII
+ { 0x18C9, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY NWII
+ { 0x18CA, BIDI_L }, // CANADIAN SYLLABICS NWO
+ { 0x18CB, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY NWO
+ { 0x18CC, BIDI_L }, // CANADIAN SYLLABICS NWOO
+ { 0x18CD, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY NWOO
+ { 0x18CE, BIDI_L }, // CANADIAN SYLLABICS RWEE
+ { 0x18CF, BIDI_L }, // CANADIAN SYLLABICS RWI
+ { 0x18D0, BIDI_L }, // CANADIAN SYLLABICS RWII
+ { 0x18D1, BIDI_L }, // CANADIAN SYLLABICS RWO
+ { 0x18D2, BIDI_L }, // CANADIAN SYLLABICS RWOO
+ { 0x18D3, BIDI_L }, // CANADIAN SYLLABICS RWA
+ { 0x18D4, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY P
+ { 0x18D5, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY T
+ { 0x18D6, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY K
+ { 0x18D7, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY C
+ { 0x18D8, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY M
+ { 0x18D9, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY N
+ { 0x18DA, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY S
+ { 0x18DB, BIDI_L }, // CANADIAN SYLLABICS OJIBWAY SH
+ { 0x18DC, BIDI_L }, // CANADIAN SYLLABICS EASTERN W
+ { 0x18DD, BIDI_L }, // CANADIAN SYLLABICS WESTERN W
+ { 0x18DE, BIDI_L }, // CANADIAN SYLLABICS FINAL SMALL RING
+ { 0x18DF, BIDI_L }, // CANADIAN SYLLABICS FINAL RAISED DOT
+ { 0x18E0, BIDI_L }, // CANADIAN SYLLABICS R-CREE RWE
+ { 0x18E1, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LOO
+ { 0x18E2, BIDI_L }, // CANADIAN SYLLABICS WEST-CREE LAA
+ { 0x18E3, BIDI_L }, // CANADIAN SYLLABICS THWE
+ { 0x18E4, BIDI_L }, // CANADIAN SYLLABICS THWA
+ { 0x18E5, BIDI_L }, // CANADIAN SYLLABICS TTHWE
+ { 0x18E6, BIDI_L }, // CANADIAN SYLLABICS TTHOO
+ { 0x18E7, BIDI_L }, // CANADIAN SYLLABICS TTHAA
+ { 0x18E8, BIDI_L }, // CANADIAN SYLLABICS TLHWE
+ { 0x18E9, BIDI_L }, // CANADIAN SYLLABICS TLHOO
+ { 0x18EA, BIDI_L }, // CANADIAN SYLLABICS SAYISI SHWE
+ { 0x18EB, BIDI_L }, // CANADIAN SYLLABICS SAYISI SHOO
+ { 0x18EC, BIDI_L }, // CANADIAN SYLLABICS SAYISI HOO
+ { 0x18ED, BIDI_L }, // CANADIAN SYLLABICS CARRIER GWU
+ { 0x18EE, BIDI_L }, // CANADIAN SYLLABICS CARRIER DENE GEE
+ { 0x18EF, BIDI_L }, // CANADIAN SYLLABICS CARRIER GAA
+ { 0x18F0, BIDI_L }, // CANADIAN SYLLABICS CARRIER GWA
+ { 0x18F1, BIDI_L }, // CANADIAN SYLLABICS SAYISI JUU
+ { 0x18F2, BIDI_L }, // CANADIAN SYLLABICS CARRIER JWA
+ { 0x18F3, BIDI_L }, // CANADIAN SYLLABICS BEAVER DENE L
+ { 0x18F4, BIDI_L }, // CANADIAN SYLLABICS BEAVER DENE R
+ { 0x18F5, BIDI_L }, // CANADIAN SYLLABICS CARRIER DENTAL S
+ { 0x1900, BIDI_L }, // LIMBU VOWEL-CARRIER LETTER
+ { 0x1901, BIDI_L }, // LIMBU LETTER KA
+ { 0x1902, BIDI_L }, // LIMBU LETTER KHA
+ { 0x1903, BIDI_L }, // LIMBU LETTER GA
+ { 0x1904, BIDI_L }, // LIMBU LETTER GHA
+ { 0x1905, BIDI_L }, // LIMBU LETTER NGA
+ { 0x1906, BIDI_L }, // LIMBU LETTER CA
+ { 0x1907, BIDI_L }, // LIMBU LETTER CHA
+ { 0x1908, BIDI_L }, // LIMBU LETTER JA
+ { 0x1909, BIDI_L }, // LIMBU LETTER JHA
+ { 0x190A, BIDI_L }, // LIMBU LETTER YAN
+ { 0x190B, BIDI_L }, // LIMBU LETTER TA
+ { 0x190C, BIDI_L }, // LIMBU LETTER THA
+ { 0x190D, BIDI_L }, // LIMBU LETTER DA
+ { 0x190E, BIDI_L }, // LIMBU LETTER DHA
+ { 0x190F, BIDI_L }, // LIMBU LETTER NA
+ { 0x1910, BIDI_L }, // LIMBU LETTER PA
+ { 0x1911, BIDI_L }, // LIMBU LETTER PHA
+ { 0x1912, BIDI_L }, // LIMBU LETTER BA
+ { 0x1913, BIDI_L }, // LIMBU LETTER BHA
+ { 0x1914, BIDI_L }, // LIMBU LETTER MA
+ { 0x1915, BIDI_L }, // LIMBU LETTER YA
+ { 0x1916, BIDI_L }, // LIMBU LETTER RA
+ { 0x1917, BIDI_L }, // LIMBU LETTER LA
+ { 0x1918, BIDI_L }, // LIMBU LETTER WA
+ { 0x1919, BIDI_L }, // LIMBU LETTER SHA
+ { 0x191A, BIDI_L }, // LIMBU LETTER SSA
+ { 0x191B, BIDI_L }, // LIMBU LETTER SA
+ { 0x191C, BIDI_L }, // LIMBU LETTER HA
+ { 0x191D, BIDI_L }, // LIMBU LETTER GYAN
+ { 0x191E, BIDI_L }, // LIMBU LETTER TRA
+ { 0x1920, BIDI_NSM }, // LIMBU VOWEL SIGN A
+ { 0x1921, BIDI_NSM }, // LIMBU VOWEL SIGN I
+ { 0x1922, BIDI_NSM }, // LIMBU VOWEL SIGN U
+ { 0x1923, BIDI_L }, // LIMBU VOWEL SIGN EE
+ { 0x1924, BIDI_L }, // LIMBU VOWEL SIGN AI
+ { 0x1925, BIDI_L }, // LIMBU VOWEL SIGN OO
+ { 0x1926, BIDI_L }, // LIMBU VOWEL SIGN AU
+ { 0x1927, BIDI_NSM }, // LIMBU VOWEL SIGN E
+ { 0x1928, BIDI_NSM }, // LIMBU VOWEL SIGN O
+ { 0x1929, BIDI_L }, // LIMBU SUBJOINED LETTER YA
+ { 0x192A, BIDI_L }, // LIMBU SUBJOINED LETTER RA
+ { 0x192B, BIDI_L }, // LIMBU SUBJOINED LETTER WA
+ { 0x1930, BIDI_L }, // LIMBU SMALL LETTER KA
+ { 0x1931, BIDI_L }, // LIMBU SMALL LETTER NGA
+ { 0x1932, BIDI_NSM }, // LIMBU SMALL LETTER ANUSVARA
+ { 0x1933, BIDI_L }, // LIMBU SMALL LETTER TA
+ { 0x1934, BIDI_L }, // LIMBU SMALL LETTER NA
+ { 0x1935, BIDI_L }, // LIMBU SMALL LETTER PA
+ { 0x1936, BIDI_L }, // LIMBU SMALL LETTER MA
+ { 0x1937, BIDI_L }, // LIMBU SMALL LETTER RA
+ { 0x1938, BIDI_L }, // LIMBU SMALL LETTER LA
+ { 0x1939, BIDI_NSM }, // LIMBU SIGN MUKPHRENG
+ { 0x193A, BIDI_NSM }, // LIMBU SIGN KEMPHRENG
+ { 0x193B, BIDI_NSM }, // LIMBU SIGN SA-I
+ { 0x1940, BIDI_ON }, // LIMBU SIGN LOO
+ { 0x1944, BIDI_ON }, // LIMBU EXCLAMATION MARK
+ { 0x1945, BIDI_ON }, // LIMBU QUESTION MARK
+ { 0x1946, BIDI_L }, // LIMBU DIGIT ZERO
+ { 0x1947, BIDI_L }, // LIMBU DIGIT ONE
+ { 0x1948, BIDI_L }, // LIMBU DIGIT TWO
+ { 0x1949, BIDI_L }, // LIMBU DIGIT THREE
+ { 0x194A, BIDI_L }, // LIMBU DIGIT FOUR
+ { 0x194B, BIDI_L }, // LIMBU DIGIT FIVE
+ { 0x194C, BIDI_L }, // LIMBU DIGIT SIX
+ { 0x194D, BIDI_L }, // LIMBU DIGIT SEVEN
+ { 0x194E, BIDI_L }, // LIMBU DIGIT EIGHT
+ { 0x194F, BIDI_L }, // LIMBU DIGIT NINE
+ { 0x1950, BIDI_L }, // TAI LE LETTER KA
+ { 0x1951, BIDI_L }, // TAI LE LETTER XA
+ { 0x1952, BIDI_L }, // TAI LE LETTER NGA
+ { 0x1953, BIDI_L }, // TAI LE LETTER TSA
+ { 0x1954, BIDI_L }, // TAI LE LETTER SA
+ { 0x1955, BIDI_L }, // TAI LE LETTER YA
+ { 0x1956, BIDI_L }, // TAI LE LETTER TA
+ { 0x1957, BIDI_L }, // TAI LE LETTER THA
+ { 0x1958, BIDI_L }, // TAI LE LETTER LA
+ { 0x1959, BIDI_L }, // TAI LE LETTER PA
+ { 0x195A, BIDI_L }, // TAI LE LETTER PHA
+ { 0x195B, BIDI_L }, // TAI LE LETTER MA
+ { 0x195C, BIDI_L }, // TAI LE LETTER FA
+ { 0x195D, BIDI_L }, // TAI LE LETTER VA
+ { 0x195E, BIDI_L }, // TAI LE LETTER HA
+ { 0x195F, BIDI_L }, // TAI LE LETTER QA
+ { 0x1960, BIDI_L }, // TAI LE LETTER KHA
+ { 0x1961, BIDI_L }, // TAI LE LETTER TSHA
+ { 0x1962, BIDI_L }, // TAI LE LETTER NA
+ { 0x1963, BIDI_L }, // TAI LE LETTER A
+ { 0x1964, BIDI_L }, // TAI LE LETTER I
+ { 0x1965, BIDI_L }, // TAI LE LETTER EE
+ { 0x1966, BIDI_L }, // TAI LE LETTER EH
+ { 0x1967, BIDI_L }, // TAI LE LETTER U
+ { 0x1968, BIDI_L }, // TAI LE LETTER OO
+ { 0x1969, BIDI_L }, // TAI LE LETTER O
+ { 0x196A, BIDI_L }, // TAI LE LETTER UE
+ { 0x196B, BIDI_L }, // TAI LE LETTER E
+ { 0x196C, BIDI_L }, // TAI LE LETTER AUE
+ { 0x196D, BIDI_L }, // TAI LE LETTER AI
+ { 0x1970, BIDI_L }, // TAI LE LETTER TONE-2
+ { 0x1971, BIDI_L }, // TAI LE LETTER TONE-3
+ { 0x1972, BIDI_L }, // TAI LE LETTER TONE-4
+ { 0x1973, BIDI_L }, // TAI LE LETTER TONE-5
+ { 0x1974, BIDI_L }, // TAI LE LETTER TONE-6
+ { 0x1980, BIDI_L }, // NEW TAI LUE LETTER HIGH QA
+ { 0x1981, BIDI_L }, // NEW TAI LUE LETTER LOW QA
+ { 0x1982, BIDI_L }, // NEW TAI LUE LETTER HIGH KA
+ { 0x1983, BIDI_L }, // NEW TAI LUE LETTER HIGH XA
+ { 0x1984, BIDI_L }, // NEW TAI LUE LETTER HIGH NGA
+ { 0x1985, BIDI_L }, // NEW TAI LUE LETTER LOW KA
+ { 0x1986, BIDI_L }, // NEW TAI LUE LETTER LOW XA
+ { 0x1987, BIDI_L }, // NEW TAI LUE LETTER LOW NGA
+ { 0x1988, BIDI_L }, // NEW TAI LUE LETTER HIGH TSA
+ { 0x1989, BIDI_L }, // NEW TAI LUE LETTER HIGH SA
+ { 0x198A, BIDI_L }, // NEW TAI LUE LETTER HIGH YA
+ { 0x198B, BIDI_L }, // NEW TAI LUE LETTER LOW TSA
+ { 0x198C, BIDI_L }, // NEW TAI LUE LETTER LOW SA
+ { 0x198D, BIDI_L }, // NEW TAI LUE LETTER LOW YA
+ { 0x198E, BIDI_L }, // NEW TAI LUE LETTER HIGH TA
+ { 0x198F, BIDI_L }, // NEW TAI LUE LETTER HIGH THA
+ { 0x1990, BIDI_L }, // NEW TAI LUE LETTER HIGH NA
+ { 0x1991, BIDI_L }, // NEW TAI LUE LETTER LOW TA
+ { 0x1992, BIDI_L }, // NEW TAI LUE LETTER LOW THA
+ { 0x1993, BIDI_L }, // NEW TAI LUE LETTER LOW NA
+ { 0x1994, BIDI_L }, // NEW TAI LUE LETTER HIGH PA
+ { 0x1995, BIDI_L }, // NEW TAI LUE LETTER HIGH PHA
+ { 0x1996, BIDI_L }, // NEW TAI LUE LETTER HIGH MA
+ { 0x1997, BIDI_L }, // NEW TAI LUE LETTER LOW PA
+ { 0x1998, BIDI_L }, // NEW TAI LUE LETTER LOW PHA
+ { 0x1999, BIDI_L }, // NEW TAI LUE LETTER LOW MA
+ { 0x199A, BIDI_L }, // NEW TAI LUE LETTER HIGH FA
+ { 0x199B, BIDI_L }, // NEW TAI LUE LETTER HIGH VA
+ { 0x199C, BIDI_L }, // NEW TAI LUE LETTER HIGH LA
+ { 0x199D, BIDI_L }, // NEW TAI LUE LETTER LOW FA
+ { 0x199E, BIDI_L }, // NEW TAI LUE LETTER LOW VA
+ { 0x199F, BIDI_L }, // NEW TAI LUE LETTER LOW LA
+ { 0x19A0, BIDI_L }, // NEW TAI LUE LETTER HIGH HA
+ { 0x19A1, BIDI_L }, // NEW TAI LUE LETTER HIGH DA
+ { 0x19A2, BIDI_L }, // NEW TAI LUE LETTER HIGH BA
+ { 0x19A3, BIDI_L }, // NEW TAI LUE LETTER LOW HA
+ { 0x19A4, BIDI_L }, // NEW TAI LUE LETTER LOW DA
+ { 0x19A5, BIDI_L }, // NEW TAI LUE LETTER LOW BA
+ { 0x19A6, BIDI_L }, // NEW TAI LUE LETTER HIGH KVA
+ { 0x19A7, BIDI_L }, // NEW TAI LUE LETTER HIGH XVA
+ { 0x19A8, BIDI_L }, // NEW TAI LUE LETTER LOW KVA
+ { 0x19A9, BIDI_L }, // NEW TAI LUE LETTER LOW XVA
+ { 0x19AA, BIDI_L }, // NEW TAI LUE LETTER HIGH SUA
+ { 0x19AB, BIDI_L }, // NEW TAI LUE LETTER LOW SUA
+ { 0x19B0, BIDI_L }, // NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+ { 0x19B1, BIDI_L }, // NEW TAI LUE VOWEL SIGN AA
+ { 0x19B2, BIDI_L }, // NEW TAI LUE VOWEL SIGN II
+ { 0x19B3, BIDI_L }, // NEW TAI LUE VOWEL SIGN U
+ { 0x19B4, BIDI_L }, // NEW TAI LUE VOWEL SIGN UU
+ { 0x19B5, BIDI_L }, // NEW TAI LUE VOWEL SIGN E
+ { 0x19B6, BIDI_L }, // NEW TAI LUE VOWEL SIGN AE
+ { 0x19B7, BIDI_L }, // NEW TAI LUE VOWEL SIGN O
+ { 0x19B8, BIDI_L }, // NEW TAI LUE VOWEL SIGN OA
+ { 0x19B9, BIDI_L }, // NEW TAI LUE VOWEL SIGN UE
+ { 0x19BA, BIDI_L }, // NEW TAI LUE VOWEL SIGN AY
+ { 0x19BB, BIDI_L }, // NEW TAI LUE VOWEL SIGN AAY
+ { 0x19BC, BIDI_L }, // NEW TAI LUE VOWEL SIGN UY
+ { 0x19BD, BIDI_L }, // NEW TAI LUE VOWEL SIGN OY
+ { 0x19BE, BIDI_L }, // NEW TAI LUE VOWEL SIGN OAY
+ { 0x19BF, BIDI_L }, // NEW TAI LUE VOWEL SIGN UEY
+ { 0x19C0, BIDI_L }, // NEW TAI LUE VOWEL SIGN IY
+ { 0x19C1, BIDI_L }, // NEW TAI LUE LETTER FINAL V
+ { 0x19C2, BIDI_L }, // NEW TAI LUE LETTER FINAL NG
+ { 0x19C3, BIDI_L }, // NEW TAI LUE LETTER FINAL N
+ { 0x19C4, BIDI_L }, // NEW TAI LUE LETTER FINAL M
+ { 0x19C5, BIDI_L }, // NEW TAI LUE LETTER FINAL K
+ { 0x19C6, BIDI_L }, // NEW TAI LUE LETTER FINAL D
+ { 0x19C7, BIDI_L }, // NEW TAI LUE LETTER FINAL B
+ { 0x19C8, BIDI_L }, // NEW TAI LUE TONE MARK-1
+ { 0x19C9, BIDI_L }, // NEW TAI LUE TONE MARK-2
+ { 0x19D0, BIDI_L }, // NEW TAI LUE DIGIT ZERO
+ { 0x19D1, BIDI_L }, // NEW TAI LUE DIGIT ONE
+ { 0x19D2, BIDI_L }, // NEW TAI LUE DIGIT TWO
+ { 0x19D3, BIDI_L }, // NEW TAI LUE DIGIT THREE
+ { 0x19D4, BIDI_L }, // NEW TAI LUE DIGIT FOUR
+ { 0x19D5, BIDI_L }, // NEW TAI LUE DIGIT FIVE
+ { 0x19D6, BIDI_L }, // NEW TAI LUE DIGIT SIX
+ { 0x19D7, BIDI_L }, // NEW TAI LUE DIGIT SEVEN
+ { 0x19D8, BIDI_L }, // NEW TAI LUE DIGIT EIGHT
+ { 0x19D9, BIDI_L }, // NEW TAI LUE DIGIT NINE
+ { 0x19DA, BIDI_L }, // NEW TAI LUE THAM DIGIT ONE
+ { 0x19DE, BIDI_ON }, // NEW TAI LUE SIGN LAE
+ { 0x19DF, BIDI_ON }, // NEW TAI LUE SIGN LAEV
+ { 0x19E0, BIDI_ON }, // KHMER SYMBOL PATHAMASAT
+ { 0x19E1, BIDI_ON }, // KHMER SYMBOL MUOY KOET
+ { 0x19E2, BIDI_ON }, // KHMER SYMBOL PII KOET
+ { 0x19E3, BIDI_ON }, // KHMER SYMBOL BEI KOET
+ { 0x19E4, BIDI_ON }, // KHMER SYMBOL BUON KOET
+ { 0x19E5, BIDI_ON }, // KHMER SYMBOL PRAM KOET
+ { 0x19E6, BIDI_ON }, // KHMER SYMBOL PRAM-MUOY KOET
+ { 0x19E7, BIDI_ON }, // KHMER SYMBOL PRAM-PII KOET
+ { 0x19E8, BIDI_ON }, // KHMER SYMBOL PRAM-BEI KOET
+ { 0x19E9, BIDI_ON }, // KHMER SYMBOL PRAM-BUON KOET
+ { 0x19EA, BIDI_ON }, // KHMER SYMBOL DAP KOET
+ { 0x19EB, BIDI_ON }, // KHMER SYMBOL DAP-MUOY KOET
+ { 0x19EC, BIDI_ON }, // KHMER SYMBOL DAP-PII KOET
+ { 0x19ED, BIDI_ON }, // KHMER SYMBOL DAP-BEI KOET
+ { 0x19EE, BIDI_ON }, // KHMER SYMBOL DAP-BUON KOET
+ { 0x19EF, BIDI_ON }, // KHMER SYMBOL DAP-PRAM KOET
+ { 0x19F0, BIDI_ON }, // KHMER SYMBOL TUTEYASAT
+ { 0x19F1, BIDI_ON }, // KHMER SYMBOL MUOY ROC
+ { 0x19F2, BIDI_ON }, // KHMER SYMBOL PII ROC
+ { 0x19F3, BIDI_ON }, // KHMER SYMBOL BEI ROC
+ { 0x19F4, BIDI_ON }, // KHMER SYMBOL BUON ROC
+ { 0x19F5, BIDI_ON }, // KHMER SYMBOL PRAM ROC
+ { 0x19F6, BIDI_ON }, // KHMER SYMBOL PRAM-MUOY ROC
+ { 0x19F7, BIDI_ON }, // KHMER SYMBOL PRAM-PII ROC
+ { 0x19F8, BIDI_ON }, // KHMER SYMBOL PRAM-BEI ROC
+ { 0x19F9, BIDI_ON }, // KHMER SYMBOL PRAM-BUON ROC
+ { 0x19FA, BIDI_ON }, // KHMER SYMBOL DAP ROC
+ { 0x19FB, BIDI_ON }, // KHMER SYMBOL DAP-MUOY ROC
+ { 0x19FC, BIDI_ON }, // KHMER SYMBOL DAP-PII ROC
+ { 0x19FD, BIDI_ON }, // KHMER SYMBOL DAP-BEI ROC
+ { 0x19FE, BIDI_ON }, // KHMER SYMBOL DAP-BUON ROC
+ { 0x19FF, BIDI_ON }, // KHMER SYMBOL DAP-PRAM ROC
+ { 0x1A00, BIDI_L }, // BUGINESE LETTER KA
+ { 0x1A01, BIDI_L }, // BUGINESE LETTER GA
+ { 0x1A02, BIDI_L }, // BUGINESE LETTER NGA
+ { 0x1A03, BIDI_L }, // BUGINESE LETTER NGKA
+ { 0x1A04, BIDI_L }, // BUGINESE LETTER PA
+ { 0x1A05, BIDI_L }, // BUGINESE LETTER BA
+ { 0x1A06, BIDI_L }, // BUGINESE LETTER MA
+ { 0x1A07, BIDI_L }, // BUGINESE LETTER MPA
+ { 0x1A08, BIDI_L }, // BUGINESE LETTER TA
+ { 0x1A09, BIDI_L }, // BUGINESE LETTER DA
+ { 0x1A0A, BIDI_L }, // BUGINESE LETTER NA
+ { 0x1A0B, BIDI_L }, // BUGINESE LETTER NRA
+ { 0x1A0C, BIDI_L }, // BUGINESE LETTER CA
+ { 0x1A0D, BIDI_L }, // BUGINESE LETTER JA
+ { 0x1A0E, BIDI_L }, // BUGINESE LETTER NYA
+ { 0x1A0F, BIDI_L }, // BUGINESE LETTER NYCA
+ { 0x1A10, BIDI_L }, // BUGINESE LETTER YA
+ { 0x1A11, BIDI_L }, // BUGINESE LETTER RA
+ { 0x1A12, BIDI_L }, // BUGINESE LETTER LA
+ { 0x1A13, BIDI_L }, // BUGINESE LETTER VA
+ { 0x1A14, BIDI_L }, // BUGINESE LETTER SA
+ { 0x1A15, BIDI_L }, // BUGINESE LETTER A
+ { 0x1A16, BIDI_L }, // BUGINESE LETTER HA
+ { 0x1A17, BIDI_NSM }, // BUGINESE VOWEL SIGN I
+ { 0x1A18, BIDI_NSM }, // BUGINESE VOWEL SIGN U
+ { 0x1A19, BIDI_L }, // BUGINESE VOWEL SIGN E
+ { 0x1A1A, BIDI_L }, // BUGINESE VOWEL SIGN O
+ { 0x1A1B, BIDI_NSM }, // BUGINESE VOWEL SIGN AE
+ { 0x1A1E, BIDI_L }, // BUGINESE PALLAWA
+ { 0x1A1F, BIDI_L }, // BUGINESE END OF SECTION
+ { 0x1A20, BIDI_L }, // TAI THAM LETTER HIGH KA
+ { 0x1A21, BIDI_L }, // TAI THAM LETTER HIGH KHA
+ { 0x1A22, BIDI_L }, // TAI THAM LETTER HIGH KXA
+ { 0x1A23, BIDI_L }, // TAI THAM LETTER LOW KA
+ { 0x1A24, BIDI_L }, // TAI THAM LETTER LOW KXA
+ { 0x1A25, BIDI_L }, // TAI THAM LETTER LOW KHA
+ { 0x1A26, BIDI_L }, // TAI THAM LETTER NGA
+ { 0x1A27, BIDI_L }, // TAI THAM LETTER HIGH CA
+ { 0x1A28, BIDI_L }, // TAI THAM LETTER HIGH CHA
+ { 0x1A29, BIDI_L }, // TAI THAM LETTER LOW CA
+ { 0x1A2A, BIDI_L }, // TAI THAM LETTER LOW SA
+ { 0x1A2B, BIDI_L }, // TAI THAM LETTER LOW CHA
+ { 0x1A2C, BIDI_L }, // TAI THAM LETTER NYA
+ { 0x1A2D, BIDI_L }, // TAI THAM LETTER RATA
+ { 0x1A2E, BIDI_L }, // TAI THAM LETTER HIGH RATHA
+ { 0x1A2F, BIDI_L }, // TAI THAM LETTER DA
+ { 0x1A30, BIDI_L }, // TAI THAM LETTER LOW RATHA
+ { 0x1A31, BIDI_L }, // TAI THAM LETTER RANA
+ { 0x1A32, BIDI_L }, // TAI THAM LETTER HIGH TA
+ { 0x1A33, BIDI_L }, // TAI THAM LETTER HIGH THA
+ { 0x1A34, BIDI_L }, // TAI THAM LETTER LOW TA
+ { 0x1A35, BIDI_L }, // TAI THAM LETTER LOW THA
+ { 0x1A36, BIDI_L }, // TAI THAM LETTER NA
+ { 0x1A37, BIDI_L }, // TAI THAM LETTER BA
+ { 0x1A38, BIDI_L }, // TAI THAM LETTER HIGH PA
+ { 0x1A39, BIDI_L }, // TAI THAM LETTER HIGH PHA
+ { 0x1A3A, BIDI_L }, // TAI THAM LETTER HIGH FA
+ { 0x1A3B, BIDI_L }, // TAI THAM LETTER LOW PA
+ { 0x1A3C, BIDI_L }, // TAI THAM LETTER LOW FA
+ { 0x1A3D, BIDI_L }, // TAI THAM LETTER LOW PHA
+ { 0x1A3E, BIDI_L }, // TAI THAM LETTER MA
+ { 0x1A3F, BIDI_L }, // TAI THAM LETTER LOW YA
+ { 0x1A40, BIDI_L }, // TAI THAM LETTER HIGH YA
+ { 0x1A41, BIDI_L }, // TAI THAM LETTER RA
+ { 0x1A42, BIDI_L }, // TAI THAM LETTER RUE
+ { 0x1A43, BIDI_L }, // TAI THAM LETTER LA
+ { 0x1A44, BIDI_L }, // TAI THAM LETTER LUE
+ { 0x1A45, BIDI_L }, // TAI THAM LETTER WA
+ { 0x1A46, BIDI_L }, // TAI THAM LETTER HIGH SHA
+ { 0x1A47, BIDI_L }, // TAI THAM LETTER HIGH SSA
+ { 0x1A48, BIDI_L }, // TAI THAM LETTER HIGH SA
+ { 0x1A49, BIDI_L }, // TAI THAM LETTER HIGH HA
+ { 0x1A4A, BIDI_L }, // TAI THAM LETTER LLA
+ { 0x1A4B, BIDI_L }, // TAI THAM LETTER A
+ { 0x1A4C, BIDI_L }, // TAI THAM LETTER LOW HA
+ { 0x1A4D, BIDI_L }, // TAI THAM LETTER I
+ { 0x1A4E, BIDI_L }, // TAI THAM LETTER II
+ { 0x1A4F, BIDI_L }, // TAI THAM LETTER U
+ { 0x1A50, BIDI_L }, // TAI THAM LETTER UU
+ { 0x1A51, BIDI_L }, // TAI THAM LETTER EE
+ { 0x1A52, BIDI_L }, // TAI THAM LETTER OO
+ { 0x1A53, BIDI_L }, // TAI THAM LETTER LAE
+ { 0x1A54, BIDI_L }, // TAI THAM LETTER GREAT SA
+ { 0x1A55, BIDI_L }, // TAI THAM CONSONANT SIGN MEDIAL RA
+ { 0x1A56, BIDI_NSM }, // TAI THAM CONSONANT SIGN MEDIAL LA
+ { 0x1A57, BIDI_L }, // TAI THAM CONSONANT SIGN LA TANG LAI
+ { 0x1A58, BIDI_NSM }, // TAI THAM SIGN MAI KANG LAI
+ { 0x1A59, BIDI_NSM }, // TAI THAM CONSONANT SIGN FINAL NGA
+ { 0x1A5A, BIDI_NSM }, // TAI THAM CONSONANT SIGN LOW PA
+ { 0x1A5B, BIDI_NSM }, // TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA
+ { 0x1A5C, BIDI_NSM }, // TAI THAM CONSONANT SIGN MA
+ { 0x1A5D, BIDI_NSM }, // TAI THAM CONSONANT SIGN BA
+ { 0x1A5E, BIDI_NSM }, // TAI THAM CONSONANT SIGN SA
+ { 0x1A60, BIDI_NSM }, // TAI THAM SIGN SAKOT
+ { 0x1A61, BIDI_L }, // TAI THAM VOWEL SIGN A
+ { 0x1A62, BIDI_NSM }, // TAI THAM VOWEL SIGN MAI SAT
+ { 0x1A63, BIDI_L }, // TAI THAM VOWEL SIGN AA
+ { 0x1A64, BIDI_L }, // TAI THAM VOWEL SIGN TALL AA
+ { 0x1A65, BIDI_NSM }, // TAI THAM VOWEL SIGN I
+ { 0x1A66, BIDI_NSM }, // TAI THAM VOWEL SIGN II
+ { 0x1A67, BIDI_NSM }, // TAI THAM VOWEL SIGN UE
+ { 0x1A68, BIDI_NSM }, // TAI THAM VOWEL SIGN UUE
+ { 0x1A69, BIDI_NSM }, // TAI THAM VOWEL SIGN U
+ { 0x1A6A, BIDI_NSM }, // TAI THAM VOWEL SIGN UU
+ { 0x1A6B, BIDI_NSM }, // TAI THAM VOWEL SIGN O
+ { 0x1A6C, BIDI_NSM }, // TAI THAM VOWEL SIGN OA BELOW
+ { 0x1A6D, BIDI_L }, // TAI THAM VOWEL SIGN OY
+ { 0x1A6E, BIDI_L }, // TAI THAM VOWEL SIGN E
+ { 0x1A6F, BIDI_L }, // TAI THAM VOWEL SIGN AE
+ { 0x1A70, BIDI_L }, // TAI THAM VOWEL SIGN OO
+ { 0x1A71, BIDI_L }, // TAI THAM VOWEL SIGN AI
+ { 0x1A72, BIDI_L }, // TAI THAM VOWEL SIGN THAM AI
+ { 0x1A73, BIDI_NSM }, // TAI THAM VOWEL SIGN OA ABOVE
+ { 0x1A74, BIDI_NSM }, // TAI THAM SIGN MAI KANG
+ { 0x1A75, BIDI_NSM }, // TAI THAM SIGN TONE-1
+ { 0x1A76, BIDI_NSM }, // TAI THAM SIGN TONE-2
+ { 0x1A77, BIDI_NSM }, // TAI THAM SIGN KHUEN TONE-3
+ { 0x1A78, BIDI_NSM }, // TAI THAM SIGN KHUEN TONE-4
+ { 0x1A79, BIDI_NSM }, // TAI THAM SIGN KHUEN TONE-5
+ { 0x1A7A, BIDI_NSM }, // TAI THAM SIGN RA HAAM
+ { 0x1A7B, BIDI_NSM }, // TAI THAM SIGN MAI SAM
+ { 0x1A7C, BIDI_NSM }, // TAI THAM SIGN KHUEN-LUE KARAN
+ { 0x1A7F, BIDI_NSM }, // TAI THAM COMBINING CRYPTOGRAMMIC DOT
+ { 0x1A80, BIDI_L }, // TAI THAM HORA DIGIT ZERO
+ { 0x1A81, BIDI_L }, // TAI THAM HORA DIGIT ONE
+ { 0x1A82, BIDI_L }, // TAI THAM HORA DIGIT TWO
+ { 0x1A83, BIDI_L }, // TAI THAM HORA DIGIT THREE
+ { 0x1A84, BIDI_L }, // TAI THAM HORA DIGIT FOUR
+ { 0x1A85, BIDI_L }, // TAI THAM HORA DIGIT FIVE
+ { 0x1A86, BIDI_L }, // TAI THAM HORA DIGIT SIX
+ { 0x1A87, BIDI_L }, // TAI THAM HORA DIGIT SEVEN
+ { 0x1A88, BIDI_L }, // TAI THAM HORA DIGIT EIGHT
+ { 0x1A89, BIDI_L }, // TAI THAM HORA DIGIT NINE
+ { 0x1A90, BIDI_L }, // TAI THAM THAM DIGIT ZERO
+ { 0x1A91, BIDI_L }, // TAI THAM THAM DIGIT ONE
+ { 0x1A92, BIDI_L }, // TAI THAM THAM DIGIT TWO
+ { 0x1A93, BIDI_L }, // TAI THAM THAM DIGIT THREE
+ { 0x1A94, BIDI_L }, // TAI THAM THAM DIGIT FOUR
+ { 0x1A95, BIDI_L }, // TAI THAM THAM DIGIT FIVE
+ { 0x1A96, BIDI_L }, // TAI THAM THAM DIGIT SIX
+ { 0x1A97, BIDI_L }, // TAI THAM THAM DIGIT SEVEN
+ { 0x1A98, BIDI_L }, // TAI THAM THAM DIGIT EIGHT
+ { 0x1A99, BIDI_L }, // TAI THAM THAM DIGIT NINE
+ { 0x1AA0, BIDI_L }, // TAI THAM SIGN WIANG
+ { 0x1AA1, BIDI_L }, // TAI THAM SIGN WIANGWAAK
+ { 0x1AA2, BIDI_L }, // TAI THAM SIGN SAWAN
+ { 0x1AA3, BIDI_L }, // TAI THAM SIGN KEOW
+ { 0x1AA4, BIDI_L }, // TAI THAM SIGN HOY
+ { 0x1AA5, BIDI_L }, // TAI THAM SIGN DOKMAI
+ { 0x1AA6, BIDI_L }, // TAI THAM SIGN REVERSED ROTATED RANA
+ { 0x1AA7, BIDI_L }, // TAI THAM SIGN MAI YAMOK
+ { 0x1AA8, BIDI_L }, // TAI THAM SIGN KAAN
+ { 0x1AA9, BIDI_L }, // TAI THAM SIGN KAANKUU
+ { 0x1AAA, BIDI_L }, // TAI THAM SIGN SATKAAN
+ { 0x1AAB, BIDI_L }, // TAI THAM SIGN SATKAANKUU
+ { 0x1AAC, BIDI_L }, // TAI THAM SIGN HANG
+ { 0x1AAD, BIDI_L }, // TAI THAM SIGN CAANG
+ { 0x1AB0, BIDI_NSM }, // COMBINING DOUBLED CIRCUMFLEX ACCENT
+ { 0x1AB1, BIDI_NSM }, // COMBINING DIAERESIS-RING
+ { 0x1AB2, BIDI_NSM }, // COMBINING INFINITY
+ { 0x1AB3, BIDI_NSM }, // COMBINING DOWNWARDS ARROW
+ { 0x1AB4, BIDI_NSM }, // COMBINING TRIPLE DOT
+ { 0x1AB5, BIDI_NSM }, // COMBINING X-X BELOW
+ { 0x1AB6, BIDI_NSM }, // COMBINING WIGGLY LINE BELOW
+ { 0x1AB7, BIDI_NSM }, // COMBINING OPEN MARK BELOW
+ { 0x1AB8, BIDI_NSM }, // COMBINING DOUBLE OPEN MARK BELOW
+ { 0x1AB9, BIDI_NSM }, // COMBINING LIGHT CENTRALIZATION STROKE BELOW
+ { 0x1ABA, BIDI_NSM }, // COMBINING STRONG CENTRALIZATION STROKE BELOW
+ { 0x1ABB, BIDI_NSM }, // COMBINING PARENTHESES ABOVE
+ { 0x1ABC, BIDI_NSM }, // COMBINING DOUBLE PARENTHESES ABOVE
+ { 0x1ABD, BIDI_NSM }, // COMBINING PARENTHESES BELOW
+ { 0x1ABE, BIDI_NSM }, // COMBINING PARENTHESES OVERLAY
+ { 0x1B00, BIDI_NSM }, // BALINESE SIGN ULU RICEM
+ { 0x1B01, BIDI_NSM }, // BALINESE SIGN ULU CANDRA
+ { 0x1B02, BIDI_NSM }, // BALINESE SIGN CECEK
+ { 0x1B03, BIDI_NSM }, // BALINESE SIGN SURANG
+ { 0x1B04, BIDI_L }, // BALINESE SIGN BISAH
+ { 0x1B05, BIDI_L }, // BALINESE LETTER AKARA
+ { 0x1B06, BIDI_L }, // BALINESE LETTER AKARA TEDUNG
+ { 0x1B07, BIDI_L }, // BALINESE LETTER IKARA
+ { 0x1B08, BIDI_L }, // BALINESE LETTER IKARA TEDUNG
+ { 0x1B09, BIDI_L }, // BALINESE LETTER UKARA
+ { 0x1B0A, BIDI_L }, // BALINESE LETTER UKARA TEDUNG
+ { 0x1B0B, BIDI_L }, // BALINESE LETTER RA REPA
+ { 0x1B0C, BIDI_L }, // BALINESE LETTER RA REPA TEDUNG
+ { 0x1B0D, BIDI_L }, // BALINESE LETTER LA LENGA
+ { 0x1B0E, BIDI_L }, // BALINESE LETTER LA LENGA TEDUNG
+ { 0x1B0F, BIDI_L }, // BALINESE LETTER EKARA
+ { 0x1B10, BIDI_L }, // BALINESE LETTER AIKARA
+ { 0x1B11, BIDI_L }, // BALINESE LETTER OKARA
+ { 0x1B12, BIDI_L }, // BALINESE LETTER OKARA TEDUNG
+ { 0x1B13, BIDI_L }, // BALINESE LETTER KA
+ { 0x1B14, BIDI_L }, // BALINESE LETTER KA MAHAPRANA
+ { 0x1B15, BIDI_L }, // BALINESE LETTER GA
+ { 0x1B16, BIDI_L }, // BALINESE LETTER GA GORA
+ { 0x1B17, BIDI_L }, // BALINESE LETTER NGA
+ { 0x1B18, BIDI_L }, // BALINESE LETTER CA
+ { 0x1B19, BIDI_L }, // BALINESE LETTER CA LACA
+ { 0x1B1A, BIDI_L }, // BALINESE LETTER JA
+ { 0x1B1B, BIDI_L }, // BALINESE LETTER JA JERA
+ { 0x1B1C, BIDI_L }, // BALINESE LETTER NYA
+ { 0x1B1D, BIDI_L }, // BALINESE LETTER TA LATIK
+ { 0x1B1E, BIDI_L }, // BALINESE LETTER TA MURDA MAHAPRANA
+ { 0x1B1F, BIDI_L }, // BALINESE LETTER DA MURDA ALPAPRANA
+ { 0x1B20, BIDI_L }, // BALINESE LETTER DA MURDA MAHAPRANA
+ { 0x1B21, BIDI_L }, // BALINESE LETTER NA RAMBAT
+ { 0x1B22, BIDI_L }, // BALINESE LETTER TA
+ { 0x1B23, BIDI_L }, // BALINESE LETTER TA TAWA
+ { 0x1B24, BIDI_L }, // BALINESE LETTER DA
+ { 0x1B25, BIDI_L }, // BALINESE LETTER DA MADU
+ { 0x1B26, BIDI_L }, // BALINESE LETTER NA
+ { 0x1B27, BIDI_L }, // BALINESE LETTER PA
+ { 0x1B28, BIDI_L }, // BALINESE LETTER PA KAPAL
+ { 0x1B29, BIDI_L }, // BALINESE LETTER BA
+ { 0x1B2A, BIDI_L }, // BALINESE LETTER BA KEMBANG
+ { 0x1B2B, BIDI_L }, // BALINESE LETTER MA
+ { 0x1B2C, BIDI_L }, // BALINESE LETTER YA
+ { 0x1B2D, BIDI_L }, // BALINESE LETTER RA
+ { 0x1B2E, BIDI_L }, // BALINESE LETTER LA
+ { 0x1B2F, BIDI_L }, // BALINESE LETTER WA
+ { 0x1B30, BIDI_L }, // BALINESE LETTER SA SAGA
+ { 0x1B31, BIDI_L }, // BALINESE LETTER SA SAPA
+ { 0x1B32, BIDI_L }, // BALINESE LETTER SA
+ { 0x1B33, BIDI_L }, // BALINESE LETTER HA
+ { 0x1B34, BIDI_NSM }, // BALINESE SIGN REREKAN
+ { 0x1B35, BIDI_L }, // BALINESE VOWEL SIGN TEDUNG
+ { 0x1B36, BIDI_NSM }, // BALINESE VOWEL SIGN ULU
+ { 0x1B37, BIDI_NSM }, // BALINESE VOWEL SIGN ULU SARI
+ { 0x1B38, BIDI_NSM }, // BALINESE VOWEL SIGN SUKU
+ { 0x1B39, BIDI_NSM }, // BALINESE VOWEL SIGN SUKU ILUT
+ { 0x1B3A, BIDI_NSM }, // BALINESE VOWEL SIGN RA REPA
+ { 0x1B3B, BIDI_L }, // BALINESE VOWEL SIGN RA REPA TEDUNG
+ { 0x1B3C, BIDI_NSM }, // BALINESE VOWEL SIGN LA LENGA
+ { 0x1B3D, BIDI_L }, // BALINESE VOWEL SIGN LA LENGA TEDUNG
+ { 0x1B3E, BIDI_L }, // BALINESE VOWEL SIGN TALING
+ { 0x1B3F, BIDI_L }, // BALINESE VOWEL SIGN TALING REPA
+ { 0x1B40, BIDI_L }, // BALINESE VOWEL SIGN TALING TEDUNG
+ { 0x1B41, BIDI_L }, // BALINESE VOWEL SIGN TALING REPA TEDUNG
+ { 0x1B42, BIDI_NSM }, // BALINESE VOWEL SIGN PEPET
+ { 0x1B43, BIDI_L }, // BALINESE VOWEL SIGN PEPET TEDUNG
+ { 0x1B44, BIDI_L }, // BALINESE ADEG ADEG
+ { 0x1B45, BIDI_L }, // BALINESE LETTER KAF SASAK
+ { 0x1B46, BIDI_L }, // BALINESE LETTER KHOT SASAK
+ { 0x1B47, BIDI_L }, // BALINESE LETTER TZIR SASAK
+ { 0x1B48, BIDI_L }, // BALINESE LETTER EF SASAK
+ { 0x1B49, BIDI_L }, // BALINESE LETTER VE SASAK
+ { 0x1B4A, BIDI_L }, // BALINESE LETTER ZAL SASAK
+ { 0x1B4B, BIDI_L }, // BALINESE LETTER ASYURA SASAK
+ { 0x1B50, BIDI_L }, // BALINESE DIGIT ZERO
+ { 0x1B51, BIDI_L }, // BALINESE DIGIT ONE
+ { 0x1B52, BIDI_L }, // BALINESE DIGIT TWO
+ { 0x1B53, BIDI_L }, // BALINESE DIGIT THREE
+ { 0x1B54, BIDI_L }, // BALINESE DIGIT FOUR
+ { 0x1B55, BIDI_L }, // BALINESE DIGIT FIVE
+ { 0x1B56, BIDI_L }, // BALINESE DIGIT SIX
+ { 0x1B57, BIDI_L }, // BALINESE DIGIT SEVEN
+ { 0x1B58, BIDI_L }, // BALINESE DIGIT EIGHT
+ { 0x1B59, BIDI_L }, // BALINESE DIGIT NINE
+ { 0x1B5A, BIDI_L }, // BALINESE PANTI
+ { 0x1B5B, BIDI_L }, // BALINESE PAMADA
+ { 0x1B5C, BIDI_L }, // BALINESE WINDU
+ { 0x1B5D, BIDI_L }, // BALINESE CARIK PAMUNGKAH
+ { 0x1B5E, BIDI_L }, // BALINESE CARIK SIKI
+ { 0x1B5F, BIDI_L }, // BALINESE CARIK PAREREN
+ { 0x1B60, BIDI_L }, // BALINESE PAMENENG
+ { 0x1B61, BIDI_L }, // BALINESE MUSICAL SYMBOL DONG
+ { 0x1B62, BIDI_L }, // BALINESE MUSICAL SYMBOL DENG
+ { 0x1B63, BIDI_L }, // BALINESE MUSICAL SYMBOL DUNG
+ { 0x1B64, BIDI_L }, // BALINESE MUSICAL SYMBOL DANG
+ { 0x1B65, BIDI_L }, // BALINESE MUSICAL SYMBOL DANG SURANG
+ { 0x1B66, BIDI_L }, // BALINESE MUSICAL SYMBOL DING
+ { 0x1B67, BIDI_L }, // BALINESE MUSICAL SYMBOL DAENG
+ { 0x1B68, BIDI_L }, // BALINESE MUSICAL SYMBOL DEUNG
+ { 0x1B69, BIDI_L }, // BALINESE MUSICAL SYMBOL DAING
+ { 0x1B6A, BIDI_L }, // BALINESE MUSICAL SYMBOL DANG GEDE
+ { 0x1B6B, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING TEGEH
+ { 0x1B6C, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING ENDEP
+ { 0x1B6D, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING KEMPUL
+ { 0x1B6E, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING KEMPLI
+ { 0x1B6F, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING JEGOGAN
+ { 0x1B70, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN
+ { 0x1B71, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN
+ { 0x1B72, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING BENDE
+ { 0x1B73, BIDI_NSM }, // BALINESE MUSICAL SYMBOL COMBINING GONG
+ { 0x1B74, BIDI_L }, // BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG
+ { 0x1B75, BIDI_L }, // BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG
+ { 0x1B76, BIDI_L }, // BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK
+ { 0x1B77, BIDI_L }, // BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK
+ { 0x1B78, BIDI_L }, // BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG
+ { 0x1B79, BIDI_L }, // BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG
+ { 0x1B7A, BIDI_L }, // BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK
+ { 0x1B7B, BIDI_L }, // BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK
+ { 0x1B7C, BIDI_L }, // BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+ { 0x1B80, BIDI_NSM }, // SUNDANESE SIGN PANYECEK
+ { 0x1B81, BIDI_NSM }, // SUNDANESE SIGN PANGLAYAR
+ { 0x1B82, BIDI_L }, // SUNDANESE SIGN PANGWISAD
+ { 0x1B83, BIDI_L }, // SUNDANESE LETTER A
+ { 0x1B84, BIDI_L }, // SUNDANESE LETTER I
+ { 0x1B85, BIDI_L }, // SUNDANESE LETTER U
+ { 0x1B86, BIDI_L }, // SUNDANESE LETTER AE
+ { 0x1B87, BIDI_L }, // SUNDANESE LETTER O
+ { 0x1B88, BIDI_L }, // SUNDANESE LETTER E
+ { 0x1B89, BIDI_L }, // SUNDANESE LETTER EU
+ { 0x1B8A, BIDI_L }, // SUNDANESE LETTER KA
+ { 0x1B8B, BIDI_L }, // SUNDANESE LETTER QA
+ { 0x1B8C, BIDI_L }, // SUNDANESE LETTER GA
+ { 0x1B8D, BIDI_L }, // SUNDANESE LETTER NGA
+ { 0x1B8E, BIDI_L }, // SUNDANESE LETTER CA
+ { 0x1B8F, BIDI_L }, // SUNDANESE LETTER JA
+ { 0x1B90, BIDI_L }, // SUNDANESE LETTER ZA
+ { 0x1B91, BIDI_L }, // SUNDANESE LETTER NYA
+ { 0x1B92, BIDI_L }, // SUNDANESE LETTER TA
+ { 0x1B93, BIDI_L }, // SUNDANESE LETTER DA
+ { 0x1B94, BIDI_L }, // SUNDANESE LETTER NA
+ { 0x1B95, BIDI_L }, // SUNDANESE LETTER PA
+ { 0x1B96, BIDI_L }, // SUNDANESE LETTER FA
+ { 0x1B97, BIDI_L }, // SUNDANESE LETTER VA
+ { 0x1B98, BIDI_L }, // SUNDANESE LETTER BA
+ { 0x1B99, BIDI_L }, // SUNDANESE LETTER MA
+ { 0x1B9A, BIDI_L }, // SUNDANESE LETTER YA
+ { 0x1B9B, BIDI_L }, // SUNDANESE LETTER RA
+ { 0x1B9C, BIDI_L }, // SUNDANESE LETTER LA
+ { 0x1B9D, BIDI_L }, // SUNDANESE LETTER WA
+ { 0x1B9E, BIDI_L }, // SUNDANESE LETTER SA
+ { 0x1B9F, BIDI_L }, // SUNDANESE LETTER XA
+ { 0x1BA0, BIDI_L }, // SUNDANESE LETTER HA
+ { 0x1BA1, BIDI_L }, // SUNDANESE CONSONANT SIGN PAMINGKAL
+ { 0x1BA2, BIDI_NSM }, // SUNDANESE CONSONANT SIGN PANYAKRA
+ { 0x1BA3, BIDI_NSM }, // SUNDANESE CONSONANT SIGN PANYIKU
+ { 0x1BA4, BIDI_NSM }, // SUNDANESE VOWEL SIGN PANGHULU
+ { 0x1BA5, BIDI_NSM }, // SUNDANESE VOWEL SIGN PANYUKU
+ { 0x1BA6, BIDI_L }, // SUNDANESE VOWEL SIGN PANAELAENG
+ { 0x1BA7, BIDI_L }, // SUNDANESE VOWEL SIGN PANOLONG
+ { 0x1BA8, BIDI_NSM }, // SUNDANESE VOWEL SIGN PAMEPET
+ { 0x1BA9, BIDI_NSM }, // SUNDANESE VOWEL SIGN PANEULEUNG
+ { 0x1BAA, BIDI_L }, // SUNDANESE SIGN PAMAAEH
+ { 0x1BAB, BIDI_NSM }, // SUNDANESE SIGN VIRAMA
+ { 0x1BAC, BIDI_NSM }, // SUNDANESE CONSONANT SIGN PASANGAN MA
+ { 0x1BAD, BIDI_NSM }, // SUNDANESE CONSONANT SIGN PASANGAN WA
+ { 0x1BAE, BIDI_L }, // SUNDANESE LETTER KHA
+ { 0x1BAF, BIDI_L }, // SUNDANESE LETTER SYA
+ { 0x1BB0, BIDI_L }, // SUNDANESE DIGIT ZERO
+ { 0x1BB1, BIDI_L }, // SUNDANESE DIGIT ONE
+ { 0x1BB2, BIDI_L }, // SUNDANESE DIGIT TWO
+ { 0x1BB3, BIDI_L }, // SUNDANESE DIGIT THREE
+ { 0x1BB4, BIDI_L }, // SUNDANESE DIGIT FOUR
+ { 0x1BB5, BIDI_L }, // SUNDANESE DIGIT FIVE
+ { 0x1BB6, BIDI_L }, // SUNDANESE DIGIT SIX
+ { 0x1BB7, BIDI_L }, // SUNDANESE DIGIT SEVEN
+ { 0x1BB8, BIDI_L }, // SUNDANESE DIGIT EIGHT
+ { 0x1BB9, BIDI_L }, // SUNDANESE DIGIT NINE
+ { 0x1BBA, BIDI_L }, // SUNDANESE AVAGRAHA
+ { 0x1BBB, BIDI_L }, // SUNDANESE LETTER REU
+ { 0x1BBC, BIDI_L }, // SUNDANESE LETTER LEU
+ { 0x1BBD, BIDI_L }, // SUNDANESE LETTER BHA
+ { 0x1BBE, BIDI_L }, // SUNDANESE LETTER FINAL K
+ { 0x1BBF, BIDI_L }, // SUNDANESE LETTER FINAL M
+ { 0x1BC0, BIDI_L }, // BATAK LETTER A
+ { 0x1BC1, BIDI_L }, // BATAK LETTER SIMALUNGUN A
+ { 0x1BC2, BIDI_L }, // BATAK LETTER HA
+ { 0x1BC3, BIDI_L }, // BATAK LETTER SIMALUNGUN HA
+ { 0x1BC4, BIDI_L }, // BATAK LETTER MANDAILING HA
+ { 0x1BC5, BIDI_L }, // BATAK LETTER BA
+ { 0x1BC6, BIDI_L }, // BATAK LETTER KARO BA
+ { 0x1BC7, BIDI_L }, // BATAK LETTER PA
+ { 0x1BC8, BIDI_L }, // BATAK LETTER SIMALUNGUN PA
+ { 0x1BC9, BIDI_L }, // BATAK LETTER NA
+ { 0x1BCA, BIDI_L }, // BATAK LETTER MANDAILING NA
+ { 0x1BCB, BIDI_L }, // BATAK LETTER WA
+ { 0x1BCC, BIDI_L }, // BATAK LETTER SIMALUNGUN WA
+ { 0x1BCD, BIDI_L }, // BATAK LETTER PAKPAK WA
+ { 0x1BCE, BIDI_L }, // BATAK LETTER GA
+ { 0x1BCF, BIDI_L }, // BATAK LETTER SIMALUNGUN GA
+ { 0x1BD0, BIDI_L }, // BATAK LETTER JA
+ { 0x1BD1, BIDI_L }, // BATAK LETTER DA
+ { 0x1BD2, BIDI_L }, // BATAK LETTER RA
+ { 0x1BD3, BIDI_L }, // BATAK LETTER SIMALUNGUN RA
+ { 0x1BD4, BIDI_L }, // BATAK LETTER MA
+ { 0x1BD5, BIDI_L }, // BATAK LETTER SIMALUNGUN MA
+ { 0x1BD6, BIDI_L }, // BATAK LETTER SOUTHERN TA
+ { 0x1BD7, BIDI_L }, // BATAK LETTER NORTHERN TA
+ { 0x1BD8, BIDI_L }, // BATAK LETTER SA
+ { 0x1BD9, BIDI_L }, // BATAK LETTER SIMALUNGUN SA
+ { 0x1BDA, BIDI_L }, // BATAK LETTER MANDAILING SA
+ { 0x1BDB, BIDI_L }, // BATAK LETTER YA
+ { 0x1BDC, BIDI_L }, // BATAK LETTER SIMALUNGUN YA
+ { 0x1BDD, BIDI_L }, // BATAK LETTER NGA
+ { 0x1BDE, BIDI_L }, // BATAK LETTER LA
+ { 0x1BDF, BIDI_L }, // BATAK LETTER SIMALUNGUN LA
+ { 0x1BE0, BIDI_L }, // BATAK LETTER NYA
+ { 0x1BE1, BIDI_L }, // BATAK LETTER CA
+ { 0x1BE2, BIDI_L }, // BATAK LETTER NDA
+ { 0x1BE3, BIDI_L }, // BATAK LETTER MBA
+ { 0x1BE4, BIDI_L }, // BATAK LETTER I
+ { 0x1BE5, BIDI_L }, // BATAK LETTER U
+ { 0x1BE6, BIDI_NSM }, // BATAK SIGN TOMPI
+ { 0x1BE7, BIDI_L }, // BATAK VOWEL SIGN E
+ { 0x1BE8, BIDI_NSM }, // BATAK VOWEL SIGN PAKPAK E
+ { 0x1BE9, BIDI_NSM }, // BATAK VOWEL SIGN EE
+ { 0x1BEA, BIDI_L }, // BATAK VOWEL SIGN I
+ { 0x1BEB, BIDI_L }, // BATAK VOWEL SIGN KARO I
+ { 0x1BEC, BIDI_L }, // BATAK VOWEL SIGN O
+ { 0x1BED, BIDI_NSM }, // BATAK VOWEL SIGN KARO O
+ { 0x1BEE, BIDI_L }, // BATAK VOWEL SIGN U
+ { 0x1BEF, BIDI_NSM }, // BATAK VOWEL SIGN U FOR SIMALUNGUN SA
+ { 0x1BF0, BIDI_NSM }, // BATAK CONSONANT SIGN NG
+ { 0x1BF1, BIDI_NSM }, // BATAK CONSONANT SIGN H
+ { 0x1BF2, BIDI_L }, // BATAK PANGOLAT
+ { 0x1BF3, BIDI_L }, // BATAK PANONGONAN
+ { 0x1BFC, BIDI_L }, // BATAK SYMBOL BINDU NA METEK
+ { 0x1BFD, BIDI_L }, // BATAK SYMBOL BINDU PINARBORAS
+ { 0x1BFE, BIDI_L }, // BATAK SYMBOL BINDU JUDUL
+ { 0x1BFF, BIDI_L }, // BATAK SYMBOL BINDU PANGOLAT
+ { 0x1C00, BIDI_L }, // LEPCHA LETTER KA
+ { 0x1C01, BIDI_L }, // LEPCHA LETTER KLA
+ { 0x1C02, BIDI_L }, // LEPCHA LETTER KHA
+ { 0x1C03, BIDI_L }, // LEPCHA LETTER GA
+ { 0x1C04, BIDI_L }, // LEPCHA LETTER GLA
+ { 0x1C05, BIDI_L }, // LEPCHA LETTER NGA
+ { 0x1C06, BIDI_L }, // LEPCHA LETTER CA
+ { 0x1C07, BIDI_L }, // LEPCHA LETTER CHA
+ { 0x1C08, BIDI_L }, // LEPCHA LETTER JA
+ { 0x1C09, BIDI_L }, // LEPCHA LETTER NYA
+ { 0x1C0A, BIDI_L }, // LEPCHA LETTER TA
+ { 0x1C0B, BIDI_L }, // LEPCHA LETTER THA
+ { 0x1C0C, BIDI_L }, // LEPCHA LETTER DA
+ { 0x1C0D, BIDI_L }, // LEPCHA LETTER NA
+ { 0x1C0E, BIDI_L }, // LEPCHA LETTER PA
+ { 0x1C0F, BIDI_L }, // LEPCHA LETTER PLA
+ { 0x1C10, BIDI_L }, // LEPCHA LETTER PHA
+ { 0x1C11, BIDI_L }, // LEPCHA LETTER FA
+ { 0x1C12, BIDI_L }, // LEPCHA LETTER FLA
+ { 0x1C13, BIDI_L }, // LEPCHA LETTER BA
+ { 0x1C14, BIDI_L }, // LEPCHA LETTER BLA
+ { 0x1C15, BIDI_L }, // LEPCHA LETTER MA
+ { 0x1C16, BIDI_L }, // LEPCHA LETTER MLA
+ { 0x1C17, BIDI_L }, // LEPCHA LETTER TSA
+ { 0x1C18, BIDI_L }, // LEPCHA LETTER TSHA
+ { 0x1C19, BIDI_L }, // LEPCHA LETTER DZA
+ { 0x1C1A, BIDI_L }, // LEPCHA LETTER YA
+ { 0x1C1B, BIDI_L }, // LEPCHA LETTER RA
+ { 0x1C1C, BIDI_L }, // LEPCHA LETTER LA
+ { 0x1C1D, BIDI_L }, // LEPCHA LETTER HA
+ { 0x1C1E, BIDI_L }, // LEPCHA LETTER HLA
+ { 0x1C1F, BIDI_L }, // LEPCHA LETTER VA
+ { 0x1C20, BIDI_L }, // LEPCHA LETTER SA
+ { 0x1C21, BIDI_L }, // LEPCHA LETTER SHA
+ { 0x1C22, BIDI_L }, // LEPCHA LETTER WA
+ { 0x1C23, BIDI_L }, // LEPCHA LETTER A
+ { 0x1C24, BIDI_L }, // LEPCHA SUBJOINED LETTER YA
+ { 0x1C25, BIDI_L }, // LEPCHA SUBJOINED LETTER RA
+ { 0x1C26, BIDI_L }, // LEPCHA VOWEL SIGN AA
+ { 0x1C27, BIDI_L }, // LEPCHA VOWEL SIGN I
+ { 0x1C28, BIDI_L }, // LEPCHA VOWEL SIGN O
+ { 0x1C29, BIDI_L }, // LEPCHA VOWEL SIGN OO
+ { 0x1C2A, BIDI_L }, // LEPCHA VOWEL SIGN U
+ { 0x1C2B, BIDI_L }, // LEPCHA VOWEL SIGN UU
+ { 0x1C2C, BIDI_NSM }, // LEPCHA VOWEL SIGN E
+ { 0x1C2D, BIDI_NSM }, // LEPCHA CONSONANT SIGN K
+ { 0x1C2E, BIDI_NSM }, // LEPCHA CONSONANT SIGN M
+ { 0x1C2F, BIDI_NSM }, // LEPCHA CONSONANT SIGN L
+ { 0x1C30, BIDI_NSM }, // LEPCHA CONSONANT SIGN N
+ { 0x1C31, BIDI_NSM }, // LEPCHA CONSONANT SIGN P
+ { 0x1C32, BIDI_NSM }, // LEPCHA CONSONANT SIGN R
+ { 0x1C33, BIDI_NSM }, // LEPCHA CONSONANT SIGN T
+ { 0x1C34, BIDI_L }, // LEPCHA CONSONANT SIGN NYIN-DO
+ { 0x1C35, BIDI_L }, // LEPCHA CONSONANT SIGN KANG
+ { 0x1C36, BIDI_NSM }, // LEPCHA SIGN RAN
+ { 0x1C37, BIDI_NSM }, // LEPCHA SIGN NUKTA
+ { 0x1C3B, BIDI_L }, // LEPCHA PUNCTUATION TA-ROL
+ { 0x1C3C, BIDI_L }, // LEPCHA PUNCTUATION NYET THYOOM TA-ROL
+ { 0x1C3D, BIDI_L }, // LEPCHA PUNCTUATION CER-WA
+ { 0x1C3E, BIDI_L }, // LEPCHA PUNCTUATION TSHOOK CER-WA
+ { 0x1C3F, BIDI_L }, // LEPCHA PUNCTUATION TSHOOK
+ { 0x1C40, BIDI_L }, // LEPCHA DIGIT ZERO
+ { 0x1C41, BIDI_L }, // LEPCHA DIGIT ONE
+ { 0x1C42, BIDI_L }, // LEPCHA DIGIT TWO
+ { 0x1C43, BIDI_L }, // LEPCHA DIGIT THREE
+ { 0x1C44, BIDI_L }, // LEPCHA DIGIT FOUR
+ { 0x1C45, BIDI_L }, // LEPCHA DIGIT FIVE
+ { 0x1C46, BIDI_L }, // LEPCHA DIGIT SIX
+ { 0x1C47, BIDI_L }, // LEPCHA DIGIT SEVEN
+ { 0x1C48, BIDI_L }, // LEPCHA DIGIT EIGHT
+ { 0x1C49, BIDI_L }, // LEPCHA DIGIT NINE
+ { 0x1C4D, BIDI_L }, // LEPCHA LETTER TTA
+ { 0x1C4E, BIDI_L }, // LEPCHA LETTER TTHA
+ { 0x1C4F, BIDI_L }, // LEPCHA LETTER DDA
+ { 0x1C50, BIDI_L }, // OL CHIKI DIGIT ZERO
+ { 0x1C51, BIDI_L }, // OL CHIKI DIGIT ONE
+ { 0x1C52, BIDI_L }, // OL CHIKI DIGIT TWO
+ { 0x1C53, BIDI_L }, // OL CHIKI DIGIT THREE
+ { 0x1C54, BIDI_L }, // OL CHIKI DIGIT FOUR
+ { 0x1C55, BIDI_L }, // OL CHIKI DIGIT FIVE
+ { 0x1C56, BIDI_L }, // OL CHIKI DIGIT SIX
+ { 0x1C57, BIDI_L }, // OL CHIKI DIGIT SEVEN
+ { 0x1C58, BIDI_L }, // OL CHIKI DIGIT EIGHT
+ { 0x1C59, BIDI_L }, // OL CHIKI DIGIT NINE
+ { 0x1C5A, BIDI_L }, // OL CHIKI LETTER LA
+ { 0x1C5B, BIDI_L }, // OL CHIKI LETTER AT
+ { 0x1C5C, BIDI_L }, // OL CHIKI LETTER AG
+ { 0x1C5D, BIDI_L }, // OL CHIKI LETTER ANG
+ { 0x1C5E, BIDI_L }, // OL CHIKI LETTER AL
+ { 0x1C5F, BIDI_L }, // OL CHIKI LETTER LAA
+ { 0x1C60, BIDI_L }, // OL CHIKI LETTER AAK
+ { 0x1C61, BIDI_L }, // OL CHIKI LETTER AAJ
+ { 0x1C62, BIDI_L }, // OL CHIKI LETTER AAM
+ { 0x1C63, BIDI_L }, // OL CHIKI LETTER AAW
+ { 0x1C64, BIDI_L }, // OL CHIKI LETTER LI
+ { 0x1C65, BIDI_L }, // OL CHIKI LETTER IS
+ { 0x1C66, BIDI_L }, // OL CHIKI LETTER IH
+ { 0x1C67, BIDI_L }, // OL CHIKI LETTER INY
+ { 0x1C68, BIDI_L }, // OL CHIKI LETTER IR
+ { 0x1C69, BIDI_L }, // OL CHIKI LETTER LU
+ { 0x1C6A, BIDI_L }, // OL CHIKI LETTER UC
+ { 0x1C6B, BIDI_L }, // OL CHIKI LETTER UD
+ { 0x1C6C, BIDI_L }, // OL CHIKI LETTER UNN
+ { 0x1C6D, BIDI_L }, // OL CHIKI LETTER UY
+ { 0x1C6E, BIDI_L }, // OL CHIKI LETTER LE
+ { 0x1C6F, BIDI_L }, // OL CHIKI LETTER EP
+ { 0x1C70, BIDI_L }, // OL CHIKI LETTER EDD
+ { 0x1C71, BIDI_L }, // OL CHIKI LETTER EN
+ { 0x1C72, BIDI_L }, // OL CHIKI LETTER ERR
+ { 0x1C73, BIDI_L }, // OL CHIKI LETTER LO
+ { 0x1C74, BIDI_L }, // OL CHIKI LETTER OTT
+ { 0x1C75, BIDI_L }, // OL CHIKI LETTER OB
+ { 0x1C76, BIDI_L }, // OL CHIKI LETTER OV
+ { 0x1C77, BIDI_L }, // OL CHIKI LETTER OH
+ { 0x1C78, BIDI_L }, // OL CHIKI MU TTUDDAG
+ { 0x1C79, BIDI_L }, // OL CHIKI GAAHLAA TTUDDAAG
+ { 0x1C7A, BIDI_L }, // OL CHIKI MU-GAAHLAA TTUDDAAG
+ { 0x1C7B, BIDI_L }, // OL CHIKI RELAA
+ { 0x1C7C, BIDI_L }, // OL CHIKI PHAARKAA
+ { 0x1C7D, BIDI_L }, // OL CHIKI AHAD
+ { 0x1C7E, BIDI_L }, // OL CHIKI PUNCTUATION MUCAAD
+ { 0x1C7F, BIDI_L }, // OL CHIKI PUNCTUATION DOUBLE MUCAAD
+ { 0x1CC0, BIDI_L }, // SUNDANESE PUNCTUATION BINDU SURYA
+ { 0x1CC1, BIDI_L }, // SUNDANESE PUNCTUATION BINDU PANGLONG
+ { 0x1CC2, BIDI_L }, // SUNDANESE PUNCTUATION BINDU PURNAMA
+ { 0x1CC3, BIDI_L }, // SUNDANESE PUNCTUATION BINDU CAKRA
+ { 0x1CC4, BIDI_L }, // SUNDANESE PUNCTUATION BINDU LEU SATANGA
+ { 0x1CC5, BIDI_L }, // SUNDANESE PUNCTUATION BINDU KA SATANGA
+ { 0x1CC6, BIDI_L }, // SUNDANESE PUNCTUATION BINDU DA SATANGA
+ { 0x1CC7, BIDI_L }, // SUNDANESE PUNCTUATION BINDU BA SATANGA
+ { 0x1CD0, BIDI_NSM }, // VEDIC TONE KARSHANA
+ { 0x1CD1, BIDI_NSM }, // VEDIC TONE SHARA
+ { 0x1CD2, BIDI_NSM }, // VEDIC TONE PRENKHA
+ { 0x1CD3, BIDI_L }, // VEDIC SIGN NIHSHVASA
+ { 0x1CD4, BIDI_NSM }, // VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
+ { 0x1CD5, BIDI_NSM }, // VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA
+ { 0x1CD6, BIDI_NSM }, // VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
+ { 0x1CD7, BIDI_NSM }, // VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
+ { 0x1CD8, BIDI_NSM }, // VEDIC TONE CANDRA BELOW
+ { 0x1CD9, BIDI_NSM }, // VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
+ { 0x1CDA, BIDI_NSM }, // VEDIC TONE DOUBLE SVARITA
+ { 0x1CDB, BIDI_NSM }, // VEDIC TONE TRIPLE SVARITA
+ { 0x1CDC, BIDI_NSM }, // VEDIC TONE KATHAKA ANUDATTA
+ { 0x1CDD, BIDI_NSM }, // VEDIC TONE DOT BELOW
+ { 0x1CDE, BIDI_NSM }, // VEDIC TONE TWO DOTS BELOW
+ { 0x1CDF, BIDI_NSM }, // VEDIC TONE THREE DOTS BELOW
+ { 0x1CE0, BIDI_NSM }, // VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+ { 0x1CE1, BIDI_L }, // VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+ { 0x1CE2, BIDI_NSM }, // VEDIC SIGN VISARGA SVARITA
+ { 0x1CE3, BIDI_NSM }, // VEDIC SIGN VISARGA UDATTA
+ { 0x1CE4, BIDI_NSM }, // VEDIC SIGN REVERSED VISARGA UDATTA
+ { 0x1CE5, BIDI_NSM }, // VEDIC SIGN VISARGA ANUDATTA
+ { 0x1CE6, BIDI_NSM }, // VEDIC SIGN REVERSED VISARGA ANUDATTA
+ { 0x1CE7, BIDI_NSM }, // VEDIC SIGN VISARGA UDATTA WITH TAIL
+ { 0x1CE8, BIDI_NSM }, // VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+ { 0x1CE9, BIDI_L }, // VEDIC SIGN ANUSVARA ANTARGOMUKHA
+ { 0x1CEA, BIDI_L }, // VEDIC SIGN ANUSVARA BAHIRGOMUKHA
+ { 0x1CEB, BIDI_L }, // VEDIC SIGN ANUSVARA VAMAGOMUKHA
+ { 0x1CEC, BIDI_L }, // VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+ { 0x1CED, BIDI_NSM }, // VEDIC SIGN TIRYAK
+ { 0x1CEE, BIDI_L }, // VEDIC SIGN HEXIFORM LONG ANUSVARA
+ { 0x1CEF, BIDI_L }, // VEDIC SIGN LONG ANUSVARA
+ { 0x1CF0, BIDI_L }, // VEDIC SIGN RTHANG LONG ANUSVARA
+ { 0x1CF1, BIDI_L }, // VEDIC SIGN ANUSVARA UBHAYATO MUKHA
+ { 0x1CF2, BIDI_L }, // VEDIC SIGN ARDHAVISARGA
+ { 0x1CF3, BIDI_L }, // VEDIC SIGN ROTATED ARDHAVISARGA
+ { 0x1CF4, BIDI_NSM }, // VEDIC TONE CANDRA ABOVE
+ { 0x1CF5, BIDI_L }, // VEDIC SIGN JIHVAMULIYA
+ { 0x1CF6, BIDI_L }, // VEDIC SIGN UPADHMANIYA
+ { 0x1CF8, BIDI_NSM }, // VEDIC TONE RING ABOVE
+ { 0x1CF9, BIDI_NSM }, // VEDIC TONE DOUBLE RING ABOVE
+ { 0x1D00, BIDI_L }, // LATIN LETTER SMALL CAPITAL A
+ { 0x1D01, BIDI_L }, // LATIN LETTER SMALL CAPITAL AE
+ { 0x1D02, BIDI_L }, // LATIN SMALL LETTER TURNED AE
+ { 0x1D03, BIDI_L }, // LATIN LETTER SMALL CAPITAL BARRED B
+ { 0x1D04, BIDI_L }, // LATIN LETTER SMALL CAPITAL C
+ { 0x1D05, BIDI_L }, // LATIN LETTER SMALL CAPITAL D
+ { 0x1D06, BIDI_L }, // LATIN LETTER SMALL CAPITAL ETH
+ { 0x1D07, BIDI_L }, // LATIN LETTER SMALL CAPITAL E
+ { 0x1D08, BIDI_L }, // LATIN SMALL LETTER TURNED OPEN E
+ { 0x1D09, BIDI_L }, // LATIN SMALL LETTER TURNED I
+ { 0x1D0A, BIDI_L }, // LATIN LETTER SMALL CAPITAL J
+ { 0x1D0B, BIDI_L }, // LATIN LETTER SMALL CAPITAL K
+ { 0x1D0C, BIDI_L }, // LATIN LETTER SMALL CAPITAL L WITH STROKE
+ { 0x1D0D, BIDI_L }, // LATIN LETTER SMALL CAPITAL M
+ { 0x1D0E, BIDI_L }, // LATIN LETTER SMALL CAPITAL REVERSED N
+ { 0x1D0F, BIDI_L }, // LATIN LETTER SMALL CAPITAL O
+ { 0x1D10, BIDI_L }, // LATIN LETTER SMALL CAPITAL OPEN O
+ { 0x1D11, BIDI_L }, // LATIN SMALL LETTER SIDEWAYS O
+ { 0x1D12, BIDI_L }, // LATIN SMALL LETTER SIDEWAYS OPEN O
+ { 0x1D13, BIDI_L }, // LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+ { 0x1D14, BIDI_L }, // LATIN SMALL LETTER TURNED OE
+ { 0x1D15, BIDI_L }, // LATIN LETTER SMALL CAPITAL OU
+ { 0x1D16, BIDI_L }, // LATIN SMALL LETTER TOP HALF O
+ { 0x1D17, BIDI_L }, // LATIN SMALL LETTER BOTTOM HALF O
+ { 0x1D18, BIDI_L }, // LATIN LETTER SMALL CAPITAL P
+ { 0x1D19, BIDI_L }, // LATIN LETTER SMALL CAPITAL REVERSED R
+ { 0x1D1A, BIDI_L }, // LATIN LETTER SMALL CAPITAL TURNED R
+ { 0x1D1B, BIDI_L }, // LATIN LETTER SMALL CAPITAL T
+ { 0x1D1C, BIDI_L }, // LATIN LETTER SMALL CAPITAL U
+ { 0x1D1D, BIDI_L }, // LATIN SMALL LETTER SIDEWAYS U
+ { 0x1D1E, BIDI_L }, // LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+ { 0x1D1F, BIDI_L }, // LATIN SMALL LETTER SIDEWAYS TURNED M
+ { 0x1D20, BIDI_L }, // LATIN LETTER SMALL CAPITAL V
+ { 0x1D21, BIDI_L }, // LATIN LETTER SMALL CAPITAL W
+ { 0x1D22, BIDI_L }, // LATIN LETTER SMALL CAPITAL Z
+ { 0x1D23, BIDI_L }, // LATIN LETTER SMALL CAPITAL EZH
+ { 0x1D24, BIDI_L }, // LATIN LETTER VOICED LARYNGEAL SPIRANT
+ { 0x1D25, BIDI_L }, // LATIN LETTER AIN
+ { 0x1D26, BIDI_L }, // GREEK LETTER SMALL CAPITAL GAMMA
+ { 0x1D27, BIDI_L }, // GREEK LETTER SMALL CAPITAL LAMDA
+ { 0x1D28, BIDI_L }, // GREEK LETTER SMALL CAPITAL PI
+ { 0x1D29, BIDI_L }, // GREEK LETTER SMALL CAPITAL RHO
+ { 0x1D2A, BIDI_L }, // GREEK LETTER SMALL CAPITAL PSI
+ { 0x1D2B, BIDI_L }, // CYRILLIC LETTER SMALL CAPITAL EL
+ { 0x1D2C, BIDI_L }, // MODIFIER LETTER CAPITAL A
+ { 0x1D2D, BIDI_L }, // MODIFIER LETTER CAPITAL AE
+ { 0x1D2E, BIDI_L }, // MODIFIER LETTER CAPITAL B
+ { 0x1D2F, BIDI_L }, // MODIFIER LETTER CAPITAL BARRED B
+ { 0x1D30, BIDI_L }, // MODIFIER LETTER CAPITAL D
+ { 0x1D31, BIDI_L }, // MODIFIER LETTER CAPITAL E
+ { 0x1D32, BIDI_L }, // MODIFIER LETTER CAPITAL REVERSED E
+ { 0x1D33, BIDI_L }, // MODIFIER LETTER CAPITAL G
+ { 0x1D34, BIDI_L }, // MODIFIER LETTER CAPITAL H
+ { 0x1D35, BIDI_L }, // MODIFIER LETTER CAPITAL I
+ { 0x1D36, BIDI_L }, // MODIFIER LETTER CAPITAL J
+ { 0x1D37, BIDI_L }, // MODIFIER LETTER CAPITAL K
+ { 0x1D38, BIDI_L }, // MODIFIER LETTER CAPITAL L
+ { 0x1D39, BIDI_L }, // MODIFIER LETTER CAPITAL M
+ { 0x1D3A, BIDI_L }, // MODIFIER LETTER CAPITAL N
+ { 0x1D3B, BIDI_L }, // MODIFIER LETTER CAPITAL REVERSED N
+ { 0x1D3C, BIDI_L }, // MODIFIER LETTER CAPITAL O
+ { 0x1D3D, BIDI_L }, // MODIFIER LETTER CAPITAL OU
+ { 0x1D3E, BIDI_L }, // MODIFIER LETTER CAPITAL P
+ { 0x1D3F, BIDI_L }, // MODIFIER LETTER CAPITAL R
+ { 0x1D40, BIDI_L }, // MODIFIER LETTER CAPITAL T
+ { 0x1D41, BIDI_L }, // MODIFIER LETTER CAPITAL U
+ { 0x1D42, BIDI_L }, // MODIFIER LETTER CAPITAL W
+ { 0x1D43, BIDI_L }, // MODIFIER LETTER SMALL A
+ { 0x1D44, BIDI_L }, // MODIFIER LETTER SMALL TURNED A
+ { 0x1D45, BIDI_L }, // MODIFIER LETTER SMALL ALPHA
+ { 0x1D46, BIDI_L }, // MODIFIER LETTER SMALL TURNED AE
+ { 0x1D47, BIDI_L }, // MODIFIER LETTER SMALL B
+ { 0x1D48, BIDI_L }, // MODIFIER LETTER SMALL D
+ { 0x1D49, BIDI_L }, // MODIFIER LETTER SMALL E
+ { 0x1D4A, BIDI_L }, // MODIFIER LETTER SMALL SCHWA
+ { 0x1D4B, BIDI_L }, // MODIFIER LETTER SMALL OPEN E
+ { 0x1D4C, BIDI_L }, // MODIFIER LETTER SMALL TURNED OPEN E
+ { 0x1D4D, BIDI_L }, // MODIFIER LETTER SMALL G
+ { 0x1D4E, BIDI_L }, // MODIFIER LETTER SMALL TURNED I
+ { 0x1D4F, BIDI_L }, // MODIFIER LETTER SMALL K
+ { 0x1D50, BIDI_L }, // MODIFIER LETTER SMALL M
+ { 0x1D51, BIDI_L }, // MODIFIER LETTER SMALL ENG
+ { 0x1D52, BIDI_L }, // MODIFIER LETTER SMALL O
+ { 0x1D53, BIDI_L }, // MODIFIER LETTER SMALL OPEN O
+ { 0x1D54, BIDI_L }, // MODIFIER LETTER SMALL TOP HALF O
+ { 0x1D55, BIDI_L }, // MODIFIER LETTER SMALL BOTTOM HALF O
+ { 0x1D56, BIDI_L }, // MODIFIER LETTER SMALL P
+ { 0x1D57, BIDI_L }, // MODIFIER LETTER SMALL T
+ { 0x1D58, BIDI_L }, // MODIFIER LETTER SMALL U
+ { 0x1D59, BIDI_L }, // MODIFIER LETTER SMALL SIDEWAYS U
+ { 0x1D5A, BIDI_L }, // MODIFIER LETTER SMALL TURNED M
+ { 0x1D5B, BIDI_L }, // MODIFIER LETTER SMALL V
+ { 0x1D5C, BIDI_L }, // MODIFIER LETTER SMALL AIN
+ { 0x1D5D, BIDI_L }, // MODIFIER LETTER SMALL BETA
+ { 0x1D5E, BIDI_L }, // MODIFIER LETTER SMALL GREEK GAMMA
+ { 0x1D5F, BIDI_L }, // MODIFIER LETTER SMALL DELTA
+ { 0x1D60, BIDI_L }, // MODIFIER LETTER SMALL GREEK PHI
+ { 0x1D61, BIDI_L }, // MODIFIER LETTER SMALL CHI
+ { 0x1D62, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER I
+ { 0x1D63, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER R
+ { 0x1D64, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER U
+ { 0x1D65, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER V
+ { 0x1D66, BIDI_L }, // GREEK SUBSCRIPT SMALL LETTER BETA
+ { 0x1D67, BIDI_L }, // GREEK SUBSCRIPT SMALL LETTER GAMMA
+ { 0x1D68, BIDI_L }, // GREEK SUBSCRIPT SMALL LETTER RHO
+ { 0x1D69, BIDI_L }, // GREEK SUBSCRIPT SMALL LETTER PHI
+ { 0x1D6A, BIDI_L }, // GREEK SUBSCRIPT SMALL LETTER CHI
+ { 0x1D6B, BIDI_L }, // LATIN SMALL LETTER UE
+ { 0x1D6C, BIDI_L }, // LATIN SMALL LETTER B WITH MIDDLE TILDE
+ { 0x1D6D, BIDI_L }, // LATIN SMALL LETTER D WITH MIDDLE TILDE
+ { 0x1D6E, BIDI_L }, // LATIN SMALL LETTER F WITH MIDDLE TILDE
+ { 0x1D6F, BIDI_L }, // LATIN SMALL LETTER M WITH MIDDLE TILDE
+ { 0x1D70, BIDI_L }, // LATIN SMALL LETTER N WITH MIDDLE TILDE
+ { 0x1D71, BIDI_L }, // LATIN SMALL LETTER P WITH MIDDLE TILDE
+ { 0x1D72, BIDI_L }, // LATIN SMALL LETTER R WITH MIDDLE TILDE
+ { 0x1D73, BIDI_L }, // LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+ { 0x1D74, BIDI_L }, // LATIN SMALL LETTER S WITH MIDDLE TILDE
+ { 0x1D75, BIDI_L }, // LATIN SMALL LETTER T WITH MIDDLE TILDE
+ { 0x1D76, BIDI_L }, // LATIN SMALL LETTER Z WITH MIDDLE TILDE
+ { 0x1D77, BIDI_L }, // LATIN SMALL LETTER TURNED G
+ { 0x1D78, BIDI_L }, // MODIFIER LETTER CYRILLIC EN
+ { 0x1D79, BIDI_L }, // LATIN SMALL LETTER INSULAR G
+ { 0x1D7A, BIDI_L }, // LATIN SMALL LETTER TH WITH STRIKETHROUGH
+ { 0x1D7B, BIDI_L }, // LATIN SMALL CAPITAL LETTER I WITH STROKE
+ { 0x1D7C, BIDI_L }, // LATIN SMALL LETTER IOTA WITH STROKE
+ { 0x1D7D, BIDI_L }, // LATIN SMALL LETTER P WITH STROKE
+ { 0x1D7E, BIDI_L }, // LATIN SMALL CAPITAL LETTER U WITH STROKE
+ { 0x1D7F, BIDI_L }, // LATIN SMALL LETTER UPSILON WITH STROKE
+ { 0x1D80, BIDI_L }, // LATIN SMALL LETTER B WITH PALATAL HOOK
+ { 0x1D81, BIDI_L }, // LATIN SMALL LETTER D WITH PALATAL HOOK
+ { 0x1D82, BIDI_L }, // LATIN SMALL LETTER F WITH PALATAL HOOK
+ { 0x1D83, BIDI_L }, // LATIN SMALL LETTER G WITH PALATAL HOOK
+ { 0x1D84, BIDI_L }, // LATIN SMALL LETTER K WITH PALATAL HOOK
+ { 0x1D85, BIDI_L }, // LATIN SMALL LETTER L WITH PALATAL HOOK
+ { 0x1D86, BIDI_L }, // LATIN SMALL LETTER M WITH PALATAL HOOK
+ { 0x1D87, BIDI_L }, // LATIN SMALL LETTER N WITH PALATAL HOOK
+ { 0x1D88, BIDI_L }, // LATIN SMALL LETTER P WITH PALATAL HOOK
+ { 0x1D89, BIDI_L }, // LATIN SMALL LETTER R WITH PALATAL HOOK
+ { 0x1D8A, BIDI_L }, // LATIN SMALL LETTER S WITH PALATAL HOOK
+ { 0x1D8B, BIDI_L }, // LATIN SMALL LETTER ESH WITH PALATAL HOOK
+ { 0x1D8C, BIDI_L }, // LATIN SMALL LETTER V WITH PALATAL HOOK
+ { 0x1D8D, BIDI_L }, // LATIN SMALL LETTER X WITH PALATAL HOOK
+ { 0x1D8E, BIDI_L }, // LATIN SMALL LETTER Z WITH PALATAL HOOK
+ { 0x1D8F, BIDI_L }, // LATIN SMALL LETTER A WITH RETROFLEX HOOK
+ { 0x1D90, BIDI_L }, // LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+ { 0x1D91, BIDI_L }, // LATIN SMALL LETTER D WITH HOOK AND TAIL
+ { 0x1D92, BIDI_L }, // LATIN SMALL LETTER E WITH RETROFLEX HOOK
+ { 0x1D93, BIDI_L }, // LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+ { 0x1D94, BIDI_L }, // LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+ { 0x1D95, BIDI_L }, // LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+ { 0x1D96, BIDI_L }, // LATIN SMALL LETTER I WITH RETROFLEX HOOK
+ { 0x1D97, BIDI_L }, // LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+ { 0x1D98, BIDI_L }, // LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+ { 0x1D99, BIDI_L }, // LATIN SMALL LETTER U WITH RETROFLEX HOOK
+ { 0x1D9A, BIDI_L }, // LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+ { 0x1D9B, BIDI_L }, // MODIFIER LETTER SMALL TURNED ALPHA
+ { 0x1D9C, BIDI_L }, // MODIFIER LETTER SMALL C
+ { 0x1D9D, BIDI_L }, // MODIFIER LETTER SMALL C WITH CURL
+ { 0x1D9E, BIDI_L }, // MODIFIER LETTER SMALL ETH
+ { 0x1D9F, BIDI_L }, // MODIFIER LETTER SMALL REVERSED OPEN E
+ { 0x1DA0, BIDI_L }, // MODIFIER LETTER SMALL F
+ { 0x1DA1, BIDI_L }, // MODIFIER LETTER SMALL DOTLESS J WITH STROKE
+ { 0x1DA2, BIDI_L }, // MODIFIER LETTER SMALL SCRIPT G
+ { 0x1DA3, BIDI_L }, // MODIFIER LETTER SMALL TURNED H
+ { 0x1DA4, BIDI_L }, // MODIFIER LETTER SMALL I WITH STROKE
+ { 0x1DA5, BIDI_L }, // MODIFIER LETTER SMALL IOTA
+ { 0x1DA6, BIDI_L }, // MODIFIER LETTER SMALL CAPITAL I
+ { 0x1DA7, BIDI_L }, // MODIFIER LETTER SMALL CAPITAL I WITH STROKE
+ { 0x1DA8, BIDI_L }, // MODIFIER LETTER SMALL J WITH CROSSED-TAIL
+ { 0x1DA9, BIDI_L }, // MODIFIER LETTER SMALL L WITH RETROFLEX HOOK
+ { 0x1DAA, BIDI_L }, // MODIFIER LETTER SMALL L WITH PALATAL HOOK
+ { 0x1DAB, BIDI_L }, // MODIFIER LETTER SMALL CAPITAL L
+ { 0x1DAC, BIDI_L }, // MODIFIER LETTER SMALL M WITH HOOK
+ { 0x1DAD, BIDI_L }, // MODIFIER LETTER SMALL TURNED M WITH LONG LEG
+ { 0x1DAE, BIDI_L }, // MODIFIER LETTER SMALL N WITH LEFT HOOK
+ { 0x1DAF, BIDI_L }, // MODIFIER LETTER SMALL N WITH RETROFLEX HOOK
+ { 0x1DB0, BIDI_L }, // MODIFIER LETTER SMALL CAPITAL N
+ { 0x1DB1, BIDI_L }, // MODIFIER LETTER SMALL BARRED O
+ { 0x1DB2, BIDI_L }, // MODIFIER LETTER SMALL PHI
+ { 0x1DB3, BIDI_L }, // MODIFIER LETTER SMALL S WITH HOOK
+ { 0x1DB4, BIDI_L }, // MODIFIER LETTER SMALL ESH
+ { 0x1DB5, BIDI_L }, // MODIFIER LETTER SMALL T WITH PALATAL HOOK
+ { 0x1DB6, BIDI_L }, // MODIFIER LETTER SMALL U BAR
+ { 0x1DB7, BIDI_L }, // MODIFIER LETTER SMALL UPSILON
+ { 0x1DB8, BIDI_L }, // MODIFIER LETTER SMALL CAPITAL U
+ { 0x1DB9, BIDI_L }, // MODIFIER LETTER SMALL V WITH HOOK
+ { 0x1DBA, BIDI_L }, // MODIFIER LETTER SMALL TURNED V
+ { 0x1DBB, BIDI_L }, // MODIFIER LETTER SMALL Z
+ { 0x1DBC, BIDI_L }, // MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK
+ { 0x1DBD, BIDI_L }, // MODIFIER LETTER SMALL Z WITH CURL
+ { 0x1DBE, BIDI_L }, // MODIFIER LETTER SMALL EZH
+ { 0x1DBF, BIDI_L }, // MODIFIER LETTER SMALL THETA
+ { 0x1DC0, BIDI_NSM }, // COMBINING DOTTED GRAVE ACCENT
+ { 0x1DC1, BIDI_NSM }, // COMBINING DOTTED ACUTE ACCENT
+ { 0x1DC2, BIDI_NSM }, // COMBINING SNAKE BELOW
+ { 0x1DC3, BIDI_NSM }, // COMBINING SUSPENSION MARK
+ { 0x1DC4, BIDI_NSM }, // COMBINING MACRON-ACUTE
+ { 0x1DC5, BIDI_NSM }, // COMBINING GRAVE-MACRON
+ { 0x1DC6, BIDI_NSM }, // COMBINING MACRON-GRAVE
+ { 0x1DC7, BIDI_NSM }, // COMBINING ACUTE-MACRON
+ { 0x1DC8, BIDI_NSM }, // COMBINING GRAVE-ACUTE-GRAVE
+ { 0x1DC9, BIDI_NSM }, // COMBINING ACUTE-GRAVE-ACUTE
+ { 0x1DCA, BIDI_NSM }, // COMBINING LATIN SMALL LETTER R BELOW
+ { 0x1DCB, BIDI_NSM }, // COMBINING BREVE-MACRON
+ { 0x1DCC, BIDI_NSM }, // COMBINING MACRON-BREVE
+ { 0x1DCD, BIDI_NSM }, // COMBINING DOUBLE CIRCUMFLEX ABOVE
+ { 0x1DCE, BIDI_NSM }, // COMBINING OGONEK ABOVE
+ { 0x1DCF, BIDI_NSM }, // COMBINING ZIGZAG BELOW
+ { 0x1DD0, BIDI_NSM }, // COMBINING IS BELOW
+ { 0x1DD1, BIDI_NSM }, // COMBINING UR ABOVE
+ { 0x1DD2, BIDI_NSM }, // COMBINING US ABOVE
+ { 0x1DD3, BIDI_NSM }, // COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE
+ { 0x1DD4, BIDI_NSM }, // COMBINING LATIN SMALL LETTER AE
+ { 0x1DD5, BIDI_NSM }, // COMBINING LATIN SMALL LETTER AO
+ { 0x1DD6, BIDI_NSM }, // COMBINING LATIN SMALL LETTER AV
+ { 0x1DD7, BIDI_NSM }, // COMBINING LATIN SMALL LETTER C CEDILLA
+ { 0x1DD8, BIDI_NSM }, // COMBINING LATIN SMALL LETTER INSULAR D
+ { 0x1DD9, BIDI_NSM }, // COMBINING LATIN SMALL LETTER ETH
+ { 0x1DDA, BIDI_NSM }, // COMBINING LATIN SMALL LETTER G
+ { 0x1DDB, BIDI_NSM }, // COMBINING LATIN LETTER SMALL CAPITAL G
+ { 0x1DDC, BIDI_NSM }, // COMBINING LATIN SMALL LETTER K
+ { 0x1DDD, BIDI_NSM }, // COMBINING LATIN SMALL LETTER L
+ { 0x1DDE, BIDI_NSM }, // COMBINING LATIN LETTER SMALL CAPITAL L
+ { 0x1DDF, BIDI_NSM }, // COMBINING LATIN LETTER SMALL CAPITAL M
+ { 0x1DE0, BIDI_NSM }, // COMBINING LATIN SMALL LETTER N
+ { 0x1DE1, BIDI_NSM }, // COMBINING LATIN LETTER SMALL CAPITAL N
+ { 0x1DE2, BIDI_NSM }, // COMBINING LATIN LETTER SMALL CAPITAL R
+ { 0x1DE3, BIDI_NSM }, // COMBINING LATIN SMALL LETTER R ROTUNDA
+ { 0x1DE4, BIDI_NSM }, // COMBINING LATIN SMALL LETTER S
+ { 0x1DE5, BIDI_NSM }, // COMBINING LATIN SMALL LETTER LONG S
+ { 0x1DE6, BIDI_NSM }, // COMBINING LATIN SMALL LETTER Z
+ { 0x1DE7, BIDI_NSM }, // COMBINING LATIN SMALL LETTER ALPHA
+ { 0x1DE8, BIDI_NSM }, // COMBINING LATIN SMALL LETTER B
+ { 0x1DE9, BIDI_NSM }, // COMBINING LATIN SMALL LETTER BETA
+ { 0x1DEA, BIDI_NSM }, // COMBINING LATIN SMALL LETTER SCHWA
+ { 0x1DEB, BIDI_NSM }, // COMBINING LATIN SMALL LETTER F
+ { 0x1DEC, BIDI_NSM }, // COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+ { 0x1DED, BIDI_NSM }, // COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE
+ { 0x1DEE, BIDI_NSM }, // COMBINING LATIN SMALL LETTER P
+ { 0x1DEF, BIDI_NSM }, // COMBINING LATIN SMALL LETTER ESH
+ { 0x1DF0, BIDI_NSM }, // COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE
+ { 0x1DF1, BIDI_NSM }, // COMBINING LATIN SMALL LETTER W
+ { 0x1DF2, BIDI_NSM }, // COMBINING LATIN SMALL LETTER A WITH DIAERESIS
+ { 0x1DF3, BIDI_NSM }, // COMBINING LATIN SMALL LETTER O WITH DIAERESIS
+ { 0x1DF4, BIDI_NSM }, // COMBINING LATIN SMALL LETTER U WITH DIAERESIS
+ { 0x1DF5, BIDI_NSM }, // COMBINING UP TACK ABOVE
+ { 0x1DFC, BIDI_NSM }, // COMBINING DOUBLE INVERTED BREVE BELOW
+ { 0x1DFD, BIDI_NSM }, // COMBINING ALMOST EQUAL TO BELOW
+ { 0x1DFE, BIDI_NSM }, // COMBINING LEFT ARROWHEAD ABOVE
+ { 0x1DFF, BIDI_NSM }, // COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+ { 0x1E00, BIDI_L }, // LATIN CAPITAL LETTER A WITH RING BELOW
+ { 0x1E01, BIDI_L }, // LATIN SMALL LETTER A WITH RING BELOW
+ { 0x1E02, BIDI_L }, // LATIN CAPITAL LETTER B WITH DOT ABOVE
+ { 0x1E03, BIDI_L }, // LATIN SMALL LETTER B WITH DOT ABOVE
+ { 0x1E04, BIDI_L }, // LATIN CAPITAL LETTER B WITH DOT BELOW
+ { 0x1E05, BIDI_L }, // LATIN SMALL LETTER B WITH DOT BELOW
+ { 0x1E06, BIDI_L }, // LATIN CAPITAL LETTER B WITH LINE BELOW
+ { 0x1E07, BIDI_L }, // LATIN SMALL LETTER B WITH LINE BELOW
+ { 0x1E08, BIDI_L }, // LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+ { 0x1E09, BIDI_L }, // LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+ { 0x1E0A, BIDI_L }, // LATIN CAPITAL LETTER D WITH DOT ABOVE
+ { 0x1E0B, BIDI_L }, // LATIN SMALL LETTER D WITH DOT ABOVE
+ { 0x1E0C, BIDI_L }, // LATIN CAPITAL LETTER D WITH DOT BELOW
+ { 0x1E0D, BIDI_L }, // LATIN SMALL LETTER D WITH DOT BELOW
+ { 0x1E0E, BIDI_L }, // LATIN CAPITAL LETTER D WITH LINE BELOW
+ { 0x1E0F, BIDI_L }, // LATIN SMALL LETTER D WITH LINE BELOW
+ { 0x1E10, BIDI_L }, // LATIN CAPITAL LETTER D WITH CEDILLA
+ { 0x1E11, BIDI_L }, // LATIN SMALL LETTER D WITH CEDILLA
+ { 0x1E12, BIDI_L }, // LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+ { 0x1E13, BIDI_L }, // LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+ { 0x1E14, BIDI_L }, // LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+ { 0x1E15, BIDI_L }, // LATIN SMALL LETTER E WITH MACRON AND GRAVE
+ { 0x1E16, BIDI_L }, // LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+ { 0x1E17, BIDI_L }, // LATIN SMALL LETTER E WITH MACRON AND ACUTE
+ { 0x1E18, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+ { 0x1E19, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+ { 0x1E1A, BIDI_L }, // LATIN CAPITAL LETTER E WITH TILDE BELOW
+ { 0x1E1B, BIDI_L }, // LATIN SMALL LETTER E WITH TILDE BELOW
+ { 0x1E1C, BIDI_L }, // LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+ { 0x1E1D, BIDI_L }, // LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+ { 0x1E1E, BIDI_L }, // LATIN CAPITAL LETTER F WITH DOT ABOVE
+ { 0x1E1F, BIDI_L }, // LATIN SMALL LETTER F WITH DOT ABOVE
+ { 0x1E20, BIDI_L }, // LATIN CAPITAL LETTER G WITH MACRON
+ { 0x1E21, BIDI_L }, // LATIN SMALL LETTER G WITH MACRON
+ { 0x1E22, BIDI_L }, // LATIN CAPITAL LETTER H WITH DOT ABOVE
+ { 0x1E23, BIDI_L }, // LATIN SMALL LETTER H WITH DOT ABOVE
+ { 0x1E24, BIDI_L }, // LATIN CAPITAL LETTER H WITH DOT BELOW
+ { 0x1E25, BIDI_L }, // LATIN SMALL LETTER H WITH DOT BELOW
+ { 0x1E26, BIDI_L }, // LATIN CAPITAL LETTER H WITH DIAERESIS
+ { 0x1E27, BIDI_L }, // LATIN SMALL LETTER H WITH DIAERESIS
+ { 0x1E28, BIDI_L }, // LATIN CAPITAL LETTER H WITH CEDILLA
+ { 0x1E29, BIDI_L }, // LATIN SMALL LETTER H WITH CEDILLA
+ { 0x1E2A, BIDI_L }, // LATIN CAPITAL LETTER H WITH BREVE BELOW
+ { 0x1E2B, BIDI_L }, // LATIN SMALL LETTER H WITH BREVE BELOW
+ { 0x1E2C, BIDI_L }, // LATIN CAPITAL LETTER I WITH TILDE BELOW
+ { 0x1E2D, BIDI_L }, // LATIN SMALL LETTER I WITH TILDE BELOW
+ { 0x1E2E, BIDI_L }, // LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+ { 0x1E2F, BIDI_L }, // LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+ { 0x1E30, BIDI_L }, // LATIN CAPITAL LETTER K WITH ACUTE
+ { 0x1E31, BIDI_L }, // LATIN SMALL LETTER K WITH ACUTE
+ { 0x1E32, BIDI_L }, // LATIN CAPITAL LETTER K WITH DOT BELOW
+ { 0x1E33, BIDI_L }, // LATIN SMALL LETTER K WITH DOT BELOW
+ { 0x1E34, BIDI_L }, // LATIN CAPITAL LETTER K WITH LINE BELOW
+ { 0x1E35, BIDI_L }, // LATIN SMALL LETTER K WITH LINE BELOW
+ { 0x1E36, BIDI_L }, // LATIN CAPITAL LETTER L WITH DOT BELOW
+ { 0x1E37, BIDI_L }, // LATIN SMALL LETTER L WITH DOT BELOW
+ { 0x1E38, BIDI_L }, // LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+ { 0x1E39, BIDI_L }, // LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+ { 0x1E3A, BIDI_L }, // LATIN CAPITAL LETTER L WITH LINE BELOW
+ { 0x1E3B, BIDI_L }, // LATIN SMALL LETTER L WITH LINE BELOW
+ { 0x1E3C, BIDI_L }, // LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+ { 0x1E3D, BIDI_L }, // LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+ { 0x1E3E, BIDI_L }, // LATIN CAPITAL LETTER M WITH ACUTE
+ { 0x1E3F, BIDI_L }, // LATIN SMALL LETTER M WITH ACUTE
+ { 0x1E40, BIDI_L }, // LATIN CAPITAL LETTER M WITH DOT ABOVE
+ { 0x1E41, BIDI_L }, // LATIN SMALL LETTER M WITH DOT ABOVE
+ { 0x1E42, BIDI_L }, // LATIN CAPITAL LETTER M WITH DOT BELOW
+ { 0x1E43, BIDI_L }, // LATIN SMALL LETTER M WITH DOT BELOW
+ { 0x1E44, BIDI_L }, // LATIN CAPITAL LETTER N WITH DOT ABOVE
+ { 0x1E45, BIDI_L }, // LATIN SMALL LETTER N WITH DOT ABOVE
+ { 0x1E46, BIDI_L }, // LATIN CAPITAL LETTER N WITH DOT BELOW
+ { 0x1E47, BIDI_L }, // LATIN SMALL LETTER N WITH DOT BELOW
+ { 0x1E48, BIDI_L }, // LATIN CAPITAL LETTER N WITH LINE BELOW
+ { 0x1E49, BIDI_L }, // LATIN SMALL LETTER N WITH LINE BELOW
+ { 0x1E4A, BIDI_L }, // LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+ { 0x1E4B, BIDI_L }, // LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+ { 0x1E4C, BIDI_L }, // LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+ { 0x1E4D, BIDI_L }, // LATIN SMALL LETTER O WITH TILDE AND ACUTE
+ { 0x1E4E, BIDI_L }, // LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+ { 0x1E4F, BIDI_L }, // LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+ { 0x1E50, BIDI_L }, // LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+ { 0x1E51, BIDI_L }, // LATIN SMALL LETTER O WITH MACRON AND GRAVE
+ { 0x1E52, BIDI_L }, // LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+ { 0x1E53, BIDI_L }, // LATIN SMALL LETTER O WITH MACRON AND ACUTE
+ { 0x1E54, BIDI_L }, // LATIN CAPITAL LETTER P WITH ACUTE
+ { 0x1E55, BIDI_L }, // LATIN SMALL LETTER P WITH ACUTE
+ { 0x1E56, BIDI_L }, // LATIN CAPITAL LETTER P WITH DOT ABOVE
+ { 0x1E57, BIDI_L }, // LATIN SMALL LETTER P WITH DOT ABOVE
+ { 0x1E58, BIDI_L }, // LATIN CAPITAL LETTER R WITH DOT ABOVE
+ { 0x1E59, BIDI_L }, // LATIN SMALL LETTER R WITH DOT ABOVE
+ { 0x1E5A, BIDI_L }, // LATIN CAPITAL LETTER R WITH DOT BELOW
+ { 0x1E5B, BIDI_L }, // LATIN SMALL LETTER R WITH DOT BELOW
+ { 0x1E5C, BIDI_L }, // LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+ { 0x1E5D, BIDI_L }, // LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+ { 0x1E5E, BIDI_L }, // LATIN CAPITAL LETTER R WITH LINE BELOW
+ { 0x1E5F, BIDI_L }, // LATIN SMALL LETTER R WITH LINE BELOW
+ { 0x1E60, BIDI_L }, // LATIN CAPITAL LETTER S WITH DOT ABOVE
+ { 0x1E61, BIDI_L }, // LATIN SMALL LETTER S WITH DOT ABOVE
+ { 0x1E62, BIDI_L }, // LATIN CAPITAL LETTER S WITH DOT BELOW
+ { 0x1E63, BIDI_L }, // LATIN SMALL LETTER S WITH DOT BELOW
+ { 0x1E64, BIDI_L }, // LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+ { 0x1E65, BIDI_L }, // LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+ { 0x1E66, BIDI_L }, // LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+ { 0x1E67, BIDI_L }, // LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+ { 0x1E68, BIDI_L }, // LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+ { 0x1E69, BIDI_L }, // LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+ { 0x1E6A, BIDI_L }, // LATIN CAPITAL LETTER T WITH DOT ABOVE
+ { 0x1E6B, BIDI_L }, // LATIN SMALL LETTER T WITH DOT ABOVE
+ { 0x1E6C, BIDI_L }, // LATIN CAPITAL LETTER T WITH DOT BELOW
+ { 0x1E6D, BIDI_L }, // LATIN SMALL LETTER T WITH DOT BELOW
+ { 0x1E6E, BIDI_L }, // LATIN CAPITAL LETTER T WITH LINE BELOW
+ { 0x1E6F, BIDI_L }, // LATIN SMALL LETTER T WITH LINE BELOW
+ { 0x1E70, BIDI_L }, // LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+ { 0x1E71, BIDI_L }, // LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+ { 0x1E72, BIDI_L }, // LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+ { 0x1E73, BIDI_L }, // LATIN SMALL LETTER U WITH DIAERESIS BELOW
+ { 0x1E74, BIDI_L }, // LATIN CAPITAL LETTER U WITH TILDE BELOW
+ { 0x1E75, BIDI_L }, // LATIN SMALL LETTER U WITH TILDE BELOW
+ { 0x1E76, BIDI_L }, // LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+ { 0x1E77, BIDI_L }, // LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+ { 0x1E78, BIDI_L }, // LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+ { 0x1E79, BIDI_L }, // LATIN SMALL LETTER U WITH TILDE AND ACUTE
+ { 0x1E7A, BIDI_L }, // LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+ { 0x1E7B, BIDI_L }, // LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+ { 0x1E7C, BIDI_L }, // LATIN CAPITAL LETTER V WITH TILDE
+ { 0x1E7D, BIDI_L }, // LATIN SMALL LETTER V WITH TILDE
+ { 0x1E7E, BIDI_L }, // LATIN CAPITAL LETTER V WITH DOT BELOW
+ { 0x1E7F, BIDI_L }, // LATIN SMALL LETTER V WITH DOT BELOW
+ { 0x1E80, BIDI_L }, // LATIN CAPITAL LETTER W WITH GRAVE
+ { 0x1E81, BIDI_L }, // LATIN SMALL LETTER W WITH GRAVE
+ { 0x1E82, BIDI_L }, // LATIN CAPITAL LETTER W WITH ACUTE
+ { 0x1E83, BIDI_L }, // LATIN SMALL LETTER W WITH ACUTE
+ { 0x1E84, BIDI_L }, // LATIN CAPITAL LETTER W WITH DIAERESIS
+ { 0x1E85, BIDI_L }, // LATIN SMALL LETTER W WITH DIAERESIS
+ { 0x1E86, BIDI_L }, // LATIN CAPITAL LETTER W WITH DOT ABOVE
+ { 0x1E87, BIDI_L }, // LATIN SMALL LETTER W WITH DOT ABOVE
+ { 0x1E88, BIDI_L }, // LATIN CAPITAL LETTER W WITH DOT BELOW
+ { 0x1E89, BIDI_L }, // LATIN SMALL LETTER W WITH DOT BELOW
+ { 0x1E8A, BIDI_L }, // LATIN CAPITAL LETTER X WITH DOT ABOVE
+ { 0x1E8B, BIDI_L }, // LATIN SMALL LETTER X WITH DOT ABOVE
+ { 0x1E8C, BIDI_L }, // LATIN CAPITAL LETTER X WITH DIAERESIS
+ { 0x1E8D, BIDI_L }, // LATIN SMALL LETTER X WITH DIAERESIS
+ { 0x1E8E, BIDI_L }, // LATIN CAPITAL LETTER Y WITH DOT ABOVE
+ { 0x1E8F, BIDI_L }, // LATIN SMALL LETTER Y WITH DOT ABOVE
+ { 0x1E90, BIDI_L }, // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+ { 0x1E91, BIDI_L }, // LATIN SMALL LETTER Z WITH CIRCUMFLEX
+ { 0x1E92, BIDI_L }, // LATIN CAPITAL LETTER Z WITH DOT BELOW
+ { 0x1E93, BIDI_L }, // LATIN SMALL LETTER Z WITH DOT BELOW
+ { 0x1E94, BIDI_L }, // LATIN CAPITAL LETTER Z WITH LINE BELOW
+ { 0x1E95, BIDI_L }, // LATIN SMALL LETTER Z WITH LINE BELOW
+ { 0x1E96, BIDI_L }, // LATIN SMALL LETTER H WITH LINE BELOW
+ { 0x1E97, BIDI_L }, // LATIN SMALL LETTER T WITH DIAERESIS
+ { 0x1E98, BIDI_L }, // LATIN SMALL LETTER W WITH RING ABOVE
+ { 0x1E99, BIDI_L }, // LATIN SMALL LETTER Y WITH RING ABOVE
+ { 0x1E9A, BIDI_L }, // LATIN SMALL LETTER A WITH RIGHT HALF RING
+ { 0x1E9B, BIDI_L }, // LATIN SMALL LETTER LONG S WITH DOT ABOVE
+ { 0x1E9C, BIDI_L }, // LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE
+ { 0x1E9D, BIDI_L }, // LATIN SMALL LETTER LONG S WITH HIGH STROKE
+ { 0x1E9E, BIDI_L }, // LATIN CAPITAL LETTER SHARP S
+ { 0x1E9F, BIDI_L }, // LATIN SMALL LETTER DELTA
+ { 0x1EA0, BIDI_L }, // LATIN CAPITAL LETTER A WITH DOT BELOW
+ { 0x1EA1, BIDI_L }, // LATIN SMALL LETTER A WITH DOT BELOW
+ { 0x1EA2, BIDI_L }, // LATIN CAPITAL LETTER A WITH HOOK ABOVE
+ { 0x1EA3, BIDI_L }, // LATIN SMALL LETTER A WITH HOOK ABOVE
+ { 0x1EA4, BIDI_L }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+ { 0x1EA5, BIDI_L }, // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+ { 0x1EA6, BIDI_L }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+ { 0x1EA7, BIDI_L }, // LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+ { 0x1EA8, BIDI_L }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1EA9, BIDI_L }, // LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1EAA, BIDI_L }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+ { 0x1EAB, BIDI_L }, // LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+ { 0x1EAC, BIDI_L }, // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EAD, BIDI_L }, // LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EAE, BIDI_L }, // LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+ { 0x1EAF, BIDI_L }, // LATIN SMALL LETTER A WITH BREVE AND ACUTE
+ { 0x1EB0, BIDI_L }, // LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+ { 0x1EB1, BIDI_L }, // LATIN SMALL LETTER A WITH BREVE AND GRAVE
+ { 0x1EB2, BIDI_L }, // LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+ { 0x1EB3, BIDI_L }, // LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+ { 0x1EB4, BIDI_L }, // LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+ { 0x1EB5, BIDI_L }, // LATIN SMALL LETTER A WITH BREVE AND TILDE
+ { 0x1EB6, BIDI_L }, // LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+ { 0x1EB7, BIDI_L }, // LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+ { 0x1EB8, BIDI_L }, // LATIN CAPITAL LETTER E WITH DOT BELOW
+ { 0x1EB9, BIDI_L }, // LATIN SMALL LETTER E WITH DOT BELOW
+ { 0x1EBA, BIDI_L }, // LATIN CAPITAL LETTER E WITH HOOK ABOVE
+ { 0x1EBB, BIDI_L }, // LATIN SMALL LETTER E WITH HOOK ABOVE
+ { 0x1EBC, BIDI_L }, // LATIN CAPITAL LETTER E WITH TILDE
+ { 0x1EBD, BIDI_L }, // LATIN SMALL LETTER E WITH TILDE
+ { 0x1EBE, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+ { 0x1EBF, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+ { 0x1EC0, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+ { 0x1EC1, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ { 0x1EC2, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1EC3, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1EC4, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+ { 0x1EC5, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+ { 0x1EC6, BIDI_L }, // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EC7, BIDI_L }, // LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EC8, BIDI_L }, // LATIN CAPITAL LETTER I WITH HOOK ABOVE
+ { 0x1EC9, BIDI_L }, // LATIN SMALL LETTER I WITH HOOK ABOVE
+ { 0x1ECA, BIDI_L }, // LATIN CAPITAL LETTER I WITH DOT BELOW
+ { 0x1ECB, BIDI_L }, // LATIN SMALL LETTER I WITH DOT BELOW
+ { 0x1ECC, BIDI_L }, // LATIN CAPITAL LETTER O WITH DOT BELOW
+ { 0x1ECD, BIDI_L }, // LATIN SMALL LETTER O WITH DOT BELOW
+ { 0x1ECE, BIDI_L }, // LATIN CAPITAL LETTER O WITH HOOK ABOVE
+ { 0x1ECF, BIDI_L }, // LATIN SMALL LETTER O WITH HOOK ABOVE
+ { 0x1ED0, BIDI_L }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+ { 0x1ED1, BIDI_L }, // LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+ { 0x1ED2, BIDI_L }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+ { 0x1ED3, BIDI_L }, // LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+ { 0x1ED4, BIDI_L }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1ED5, BIDI_L }, // LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+ { 0x1ED6, BIDI_L }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+ { 0x1ED7, BIDI_L }, // LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+ { 0x1ED8, BIDI_L }, // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1ED9, BIDI_L }, // LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+ { 0x1EDA, BIDI_L }, // LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+ { 0x1EDB, BIDI_L }, // LATIN SMALL LETTER O WITH HORN AND ACUTE
+ { 0x1EDC, BIDI_L }, // LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+ { 0x1EDD, BIDI_L }, // LATIN SMALL LETTER O WITH HORN AND GRAVE
+ { 0x1EDE, BIDI_L }, // LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+ { 0x1EDF, BIDI_L }, // LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+ { 0x1EE0, BIDI_L }, // LATIN CAPITAL LETTER O WITH HORN AND TILDE
+ { 0x1EE1, BIDI_L }, // LATIN SMALL LETTER O WITH HORN AND TILDE
+ { 0x1EE2, BIDI_L }, // LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+ { 0x1EE3, BIDI_L }, // LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+ { 0x1EE4, BIDI_L }, // LATIN CAPITAL LETTER U WITH DOT BELOW
+ { 0x1EE5, BIDI_L }, // LATIN SMALL LETTER U WITH DOT BELOW
+ { 0x1EE6, BIDI_L }, // LATIN CAPITAL LETTER U WITH HOOK ABOVE
+ { 0x1EE7, BIDI_L }, // LATIN SMALL LETTER U WITH HOOK ABOVE
+ { 0x1EE8, BIDI_L }, // LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+ { 0x1EE9, BIDI_L }, // LATIN SMALL LETTER U WITH HORN AND ACUTE
+ { 0x1EEA, BIDI_L }, // LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+ { 0x1EEB, BIDI_L }, // LATIN SMALL LETTER U WITH HORN AND GRAVE
+ { 0x1EEC, BIDI_L }, // LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+ { 0x1EED, BIDI_L }, // LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+ { 0x1EEE, BIDI_L }, // LATIN CAPITAL LETTER U WITH HORN AND TILDE
+ { 0x1EEF, BIDI_L }, // LATIN SMALL LETTER U WITH HORN AND TILDE
+ { 0x1EF0, BIDI_L }, // LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+ { 0x1EF1, BIDI_L }, // LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+ { 0x1EF2, BIDI_L }, // LATIN CAPITAL LETTER Y WITH GRAVE
+ { 0x1EF3, BIDI_L }, // LATIN SMALL LETTER Y WITH GRAVE
+ { 0x1EF4, BIDI_L }, // LATIN CAPITAL LETTER Y WITH DOT BELOW
+ { 0x1EF5, BIDI_L }, // LATIN SMALL LETTER Y WITH DOT BELOW
+ { 0x1EF6, BIDI_L }, // LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+ { 0x1EF7, BIDI_L }, // LATIN SMALL LETTER Y WITH HOOK ABOVE
+ { 0x1EF8, BIDI_L }, // LATIN CAPITAL LETTER Y WITH TILDE
+ { 0x1EF9, BIDI_L }, // LATIN SMALL LETTER Y WITH TILDE
+ { 0x1EFA, BIDI_L }, // LATIN CAPITAL LETTER MIDDLE-WELSH LL
+ { 0x1EFB, BIDI_L }, // LATIN SMALL LETTER MIDDLE-WELSH LL
+ { 0x1EFC, BIDI_L }, // LATIN CAPITAL LETTER MIDDLE-WELSH V
+ { 0x1EFD, BIDI_L }, // LATIN SMALL LETTER MIDDLE-WELSH V
+ { 0x1EFE, BIDI_L }, // LATIN CAPITAL LETTER Y WITH LOOP
+ { 0x1EFF, BIDI_L }, // LATIN SMALL LETTER Y WITH LOOP
+ { 0x1F00, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI
+ { 0x1F01, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA
+ { 0x1F02, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+ { 0x1F03, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+ { 0x1F04, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+ { 0x1F05, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+ { 0x1F06, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ { 0x1F07, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ { 0x1F08, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI
+ { 0x1F09, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA
+ { 0x1F0A, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+ { 0x1F0B, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+ { 0x1F0C, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+ { 0x1F0D, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+ { 0x1F0E, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ { 0x1F0F, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ { 0x1F10, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH PSILI
+ { 0x1F11, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH DASIA
+ { 0x1F12, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+ { 0x1F13, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+ { 0x1F14, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+ { 0x1F15, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+ { 0x1F18, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH PSILI
+ { 0x1F19, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH DASIA
+ { 0x1F1A, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+ { 0x1F1B, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+ { 0x1F1C, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+ { 0x1F1D, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+ { 0x1F20, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI
+ { 0x1F21, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA
+ { 0x1F22, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+ { 0x1F23, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+ { 0x1F24, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+ { 0x1F25, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+ { 0x1F26, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+ { 0x1F27, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+ { 0x1F28, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI
+ { 0x1F29, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA
+ { 0x1F2A, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+ { 0x1F2B, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+ { 0x1F2C, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+ { 0x1F2D, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+ { 0x1F2E, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+ { 0x1F2F, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+ { 0x1F30, BIDI_L }, // GREEK SMALL LETTER IOTA WITH PSILI
+ { 0x1F31, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DASIA
+ { 0x1F32, BIDI_L }, // GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+ { 0x1F33, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+ { 0x1F34, BIDI_L }, // GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+ { 0x1F35, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+ { 0x1F36, BIDI_L }, // GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+ { 0x1F37, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+ { 0x1F38, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH PSILI
+ { 0x1F39, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH DASIA
+ { 0x1F3A, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+ { 0x1F3B, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+ { 0x1F3C, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+ { 0x1F3D, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+ { 0x1F3E, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+ { 0x1F3F, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+ { 0x1F40, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH PSILI
+ { 0x1F41, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH DASIA
+ { 0x1F42, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+ { 0x1F43, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+ { 0x1F44, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+ { 0x1F45, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+ { 0x1F48, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH PSILI
+ { 0x1F49, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH DASIA
+ { 0x1F4A, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+ { 0x1F4B, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+ { 0x1F4C, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+ { 0x1F4D, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+ { 0x1F50, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH PSILI
+ { 0x1F51, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DASIA
+ { 0x1F52, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+ { 0x1F53, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+ { 0x1F54, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+ { 0x1F55, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+ { 0x1F56, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+ { 0x1F57, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ { 0x1F59, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH DASIA
+ { 0x1F5B, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+ { 0x1F5D, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+ { 0x1F5F, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+ { 0x1F60, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI
+ { 0x1F61, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA
+ { 0x1F62, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+ { 0x1F63, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+ { 0x1F64, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+ { 0x1F65, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+ { 0x1F66, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ { 0x1F67, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ { 0x1F68, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI
+ { 0x1F69, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA
+ { 0x1F6A, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+ { 0x1F6B, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+ { 0x1F6C, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+ { 0x1F6D, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+ { 0x1F6E, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+ { 0x1F6F, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+ { 0x1F70, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH VARIA
+ { 0x1F71, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH OXIA
+ { 0x1F72, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH VARIA
+ { 0x1F73, BIDI_L }, // GREEK SMALL LETTER EPSILON WITH OXIA
+ { 0x1F74, BIDI_L }, // GREEK SMALL LETTER ETA WITH VARIA
+ { 0x1F75, BIDI_L }, // GREEK SMALL LETTER ETA WITH OXIA
+ { 0x1F76, BIDI_L }, // GREEK SMALL LETTER IOTA WITH VARIA
+ { 0x1F77, BIDI_L }, // GREEK SMALL LETTER IOTA WITH OXIA
+ { 0x1F78, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH VARIA
+ { 0x1F79, BIDI_L }, // GREEK SMALL LETTER OMICRON WITH OXIA
+ { 0x1F7A, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH VARIA
+ { 0x1F7B, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH OXIA
+ { 0x1F7C, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH VARIA
+ { 0x1F7D, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH OXIA
+ { 0x1F80, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+ { 0x1F81, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+ { 0x1F82, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ { 0x1F83, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ { 0x1F84, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ { 0x1F85, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ { 0x1F86, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1F87, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1F88, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+ { 0x1F89, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+ { 0x1F8A, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ { 0x1F8B, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ { 0x1F8C, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ { 0x1F8D, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ { 0x1F8E, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1F8F, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1F90, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+ { 0x1F91, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+ { 0x1F92, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ { 0x1F93, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ { 0x1F94, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ { 0x1F95, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ { 0x1F96, BIDI_L }, // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1F97, BIDI_L }, // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1F98, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+ { 0x1F99, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+ { 0x1F9A, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ { 0x1F9B, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ { 0x1F9C, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ { 0x1F9D, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ { 0x1F9E, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1F9F, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1FA0, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+ { 0x1FA1, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+ { 0x1FA2, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+ { 0x1FA3, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+ { 0x1FA4, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+ { 0x1FA5, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+ { 0x1FA6, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1FA7, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1FA8, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+ { 0x1FA9, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+ { 0x1FAA, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+ { 0x1FAB, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+ { 0x1FAC, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+ { 0x1FAD, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+ { 0x1FAE, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1FAF, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+ { 0x1FB0, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH VRACHY
+ { 0x1FB1, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH MACRON
+ { 0x1FB2, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+ { 0x1FB3, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+ { 0x1FB4, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+ { 0x1FB6, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+ { 0x1FB7, BIDI_L }, // GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1FB8, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH VRACHY
+ { 0x1FB9, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH MACRON
+ { 0x1FBA, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH VARIA
+ { 0x1FBB, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH OXIA
+ { 0x1FBC, BIDI_L }, // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+ { 0x1FBD, BIDI_ON }, // GREEK KORONIS
+ { 0x1FBE, BIDI_L }, // GREEK PROSGEGRAMMENI
+ { 0x1FBF, BIDI_ON }, // GREEK PSILI
+ { 0x1FC0, BIDI_ON }, // GREEK PERISPOMENI
+ { 0x1FC1, BIDI_ON }, // GREEK DIALYTIKA AND PERISPOMENI
+ { 0x1FC2, BIDI_L }, // GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+ { 0x1FC3, BIDI_L }, // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+ { 0x1FC4, BIDI_L }, // GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+ { 0x1FC6, BIDI_L }, // GREEK SMALL LETTER ETA WITH PERISPOMENI
+ { 0x1FC7, BIDI_L }, // GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1FC8, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH VARIA
+ { 0x1FC9, BIDI_L }, // GREEK CAPITAL LETTER EPSILON WITH OXIA
+ { 0x1FCA, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH VARIA
+ { 0x1FCB, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH OXIA
+ { 0x1FCC, BIDI_L }, // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+ { 0x1FCD, BIDI_ON }, // GREEK PSILI AND VARIA
+ { 0x1FCE, BIDI_ON }, // GREEK PSILI AND OXIA
+ { 0x1FCF, BIDI_ON }, // GREEK PSILI AND PERISPOMENI
+ { 0x1FD0, BIDI_L }, // GREEK SMALL LETTER IOTA WITH VRACHY
+ { 0x1FD1, BIDI_L }, // GREEK SMALL LETTER IOTA WITH MACRON
+ { 0x1FD2, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+ { 0x1FD3, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+ { 0x1FD6, BIDI_L }, // GREEK SMALL LETTER IOTA WITH PERISPOMENI
+ { 0x1FD7, BIDI_L }, // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+ { 0x1FD8, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH VRACHY
+ { 0x1FD9, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH MACRON
+ { 0x1FDA, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH VARIA
+ { 0x1FDB, BIDI_L }, // GREEK CAPITAL LETTER IOTA WITH OXIA
+ { 0x1FDD, BIDI_ON }, // GREEK DASIA AND VARIA
+ { 0x1FDE, BIDI_ON }, // GREEK DASIA AND OXIA
+ { 0x1FDF, BIDI_ON }, // GREEK DASIA AND PERISPOMENI
+ { 0x1FE0, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH VRACHY
+ { 0x1FE1, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH MACRON
+ { 0x1FE2, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+ { 0x1FE3, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+ { 0x1FE4, BIDI_L }, // GREEK SMALL LETTER RHO WITH PSILI
+ { 0x1FE5, BIDI_L }, // GREEK SMALL LETTER RHO WITH DASIA
+ { 0x1FE6, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+ { 0x1FE7, BIDI_L }, // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+ { 0x1FE8, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH VRACHY
+ { 0x1FE9, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH MACRON
+ { 0x1FEA, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH VARIA
+ { 0x1FEB, BIDI_L }, // GREEK CAPITAL LETTER UPSILON WITH OXIA
+ { 0x1FEC, BIDI_L }, // GREEK CAPITAL LETTER RHO WITH DASIA
+ { 0x1FED, BIDI_ON }, // GREEK DIALYTIKA AND VARIA
+ { 0x1FEE, BIDI_ON }, // GREEK DIALYTIKA AND OXIA
+ { 0x1FEF, BIDI_ON }, // GREEK VARIA
+ { 0x1FF2, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+ { 0x1FF3, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+ { 0x1FF4, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+ { 0x1FF6, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+ { 0x1FF7, BIDI_L }, // GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+ { 0x1FF8, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH VARIA
+ { 0x1FF9, BIDI_L }, // GREEK CAPITAL LETTER OMICRON WITH OXIA
+ { 0x1FFA, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH VARIA
+ { 0x1FFB, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH OXIA
+ { 0x1FFC, BIDI_L }, // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+ { 0x1FFD, BIDI_ON }, // GREEK OXIA
+ { 0x1FFE, BIDI_ON }, // GREEK DASIA
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_2 == 1)
+
+ { 0x2000, BIDI_WS }, // EN QUAD
+ { 0x2001, BIDI_WS }, // EM QUAD
+ { 0x2002, BIDI_WS }, // EN SPACE
+ { 0x2003, BIDI_WS }, // EM SPACE
+ { 0x2004, BIDI_WS }, // THREE-PER-EM SPACE
+ { 0x2005, BIDI_WS }, // FOUR-PER-EM SPACE
+ { 0x2006, BIDI_WS }, // SIX-PER-EM SPACE
+ { 0x2007, BIDI_WS }, // FIGURE SPACE
+ { 0x2008, BIDI_WS }, // PUNCTUATION SPACE
+ { 0x2009, BIDI_WS }, // THIN SPACE
+ { 0x200A, BIDI_WS }, // HAIR SPACE
+ { 0x200B, BIDI_BN }, // ZERO WIDTH SPACE
+ { 0x200C, BIDI_BN }, // ZERO WIDTH NON-JOINER
+ { 0x200D, BIDI_BN }, // ZERO WIDTH JOINER
+ { 0x200E, BIDI_L }, // LEFT-TO-RIGHT MARK
+ { 0x200F, BIDI_R }, // RIGHT-TO-LEFT MARK
+ { 0x2010, BIDI_ON }, // HYPHEN
+ { 0x2011, BIDI_ON }, // NON-BREAKING HYPHEN
+ { 0x2012, BIDI_ON }, // FIGURE DASH
+ { 0x2013, BIDI_ON }, // EN DASH
+ { 0x2014, BIDI_ON }, // EM DASH
+ { 0x2015, BIDI_ON }, // HORIZONTAL BAR
+ { 0x2016, BIDI_ON }, // DOUBLE VERTICAL LINE
+ { 0x2017, BIDI_ON }, // DOUBLE LOW LINE
+ { 0x2018, BIDI_ON }, // LEFT SINGLE QUOTATION MARK
+ { 0x2019, BIDI_ON }, // RIGHT SINGLE QUOTATION MARK
+ { 0x201A, BIDI_ON }, // SINGLE LOW-9 QUOTATION MARK
+ { 0x201B, BIDI_ON }, // SINGLE HIGH-REVERSED-9 QUOTATION MARK
+ { 0x201C, BIDI_ON }, // LEFT DOUBLE QUOTATION MARK
+ { 0x201D, BIDI_ON }, // RIGHT DOUBLE QUOTATION MARK
+ { 0x201E, BIDI_ON }, // DOUBLE LOW-9 QUOTATION MARK
+ { 0x201F, BIDI_ON }, // DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+ { 0x2020, BIDI_ON }, // DAGGER
+ { 0x2021, BIDI_ON }, // DOUBLE DAGGER
+ { 0x2022, BIDI_ON }, // BULLET
+ { 0x2023, BIDI_ON }, // TRIANGULAR BULLET
+ { 0x2024, BIDI_ON }, // ONE DOT LEADER
+ { 0x2025, BIDI_ON }, // TWO DOT LEADER
+ { 0x2026, BIDI_ON }, // HORIZONTAL ELLIPSIS
+ { 0x2027, BIDI_ON }, // HYPHENATION POINT
+ { 0x2028, BIDI_WS }, // LINE SEPARATOR
+ { 0x2029, BIDI_B }, // PARAGRAPH SEPARATOR
+ { 0x202A, BIDI_LRE }, // LEFT-TO-RIGHT EMBEDDING
+ { 0x202B, BIDI_RLE }, // RIGHT-TO-LEFT EMBEDDING
+ { 0x202C, BIDI_PDF }, // POP DIRECTIONAL FORMATTING
+ { 0x202D, BIDI_LRO }, // LEFT-TO-RIGHT OVERRIDE
+ { 0x202E, BIDI_RLO }, // RIGHT-TO-LEFT OVERRIDE
+ { 0x202F, BIDI_CS }, // NARROW NO-BREAK SPACE
+ { 0x2030, BIDI_ET }, // PER MILLE SIGN
+ { 0x2031, BIDI_ET }, // PER TEN THOUSAND SIGN
+ { 0x2032, BIDI_ET }, // PRIME
+ { 0x2033, BIDI_ET }, // DOUBLE PRIME
+ { 0x2034, BIDI_ET }, // TRIPLE PRIME
+ { 0x2035, BIDI_ON }, // REVERSED PRIME
+ { 0x2036, BIDI_ON }, // REVERSED DOUBLE PRIME
+ { 0x2037, BIDI_ON }, // REVERSED TRIPLE PRIME
+ { 0x2038, BIDI_ON }, // CARET
+ { 0x2039, BIDI_ON }, // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ { 0x203A, BIDI_ON }, // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ { 0x203B, BIDI_ON }, // REFERENCE MARK
+ { 0x203C, BIDI_ON }, // DOUBLE EXCLAMATION MARK
+ { 0x203D, BIDI_ON }, // INTERROBANG
+ { 0x203E, BIDI_ON }, // OVERLINE
+ { 0x203F, BIDI_ON }, // UNDERTIE
+ { 0x2040, BIDI_ON }, // CHARACTER TIE
+ { 0x2041, BIDI_ON }, // CARET INSERTION POINT
+ { 0x2042, BIDI_ON }, // ASTERISM
+ { 0x2043, BIDI_ON }, // HYPHEN BULLET
+ { 0x2044, BIDI_CS }, // FRACTION SLASH
+ { 0x2045, BIDI_ON }, // LEFT SQUARE BRACKET WITH QUILL
+ { 0x2046, BIDI_ON }, // RIGHT SQUARE BRACKET WITH QUILL
+ { 0x2047, BIDI_ON }, // DOUBLE QUESTION MARK
+ { 0x2048, BIDI_ON }, // QUESTION EXCLAMATION MARK
+ { 0x2049, BIDI_ON }, // EXCLAMATION QUESTION MARK
+ { 0x204A, BIDI_ON }, // TIRONIAN SIGN ET
+ { 0x204B, BIDI_ON }, // REVERSED PILCROW SIGN
+ { 0x204C, BIDI_ON }, // BLACK LEFTWARDS BULLET
+ { 0x204D, BIDI_ON }, // BLACK RIGHTWARDS BULLET
+ { 0x204E, BIDI_ON }, // LOW ASTERISK
+ { 0x204F, BIDI_ON }, // REVERSED SEMICOLON
+ { 0x2050, BIDI_ON }, // CLOSE UP
+ { 0x2051, BIDI_ON }, // TWO ASTERISKS ALIGNED VERTICALLY
+ { 0x2052, BIDI_ON }, // COMMERCIAL MINUS SIGN
+ { 0x2053, BIDI_ON }, // SWUNG DASH
+ { 0x2054, BIDI_ON }, // INVERTED UNDERTIE
+ { 0x2055, BIDI_ON }, // FLOWER PUNCTUATION MARK
+ { 0x2056, BIDI_ON }, // THREE DOT PUNCTUATION
+ { 0x2057, BIDI_ON }, // QUADRUPLE PRIME
+ { 0x2058, BIDI_ON }, // FOUR DOT PUNCTUATION
+ { 0x2059, BIDI_ON }, // FIVE DOT PUNCTUATION
+ { 0x205A, BIDI_ON }, // TWO DOT PUNCTUATION
+ { 0x205B, BIDI_ON }, // FOUR DOT MARK
+ { 0x205C, BIDI_ON }, // DOTTED CROSS
+ { 0x205D, BIDI_ON }, // TRICOLON
+ { 0x205E, BIDI_ON }, // VERTICAL FOUR DOTS
+ { 0x205F, BIDI_WS }, // MEDIUM MATHEMATICAL SPACE
+ { 0x2060, BIDI_BN }, // WORD JOINER
+ { 0x2061, BIDI_BN }, // FUNCTION APPLICATION
+ { 0x2062, BIDI_BN }, // INVISIBLE TIMES
+ { 0x2063, BIDI_BN }, // INVISIBLE SEPARATOR
+ { 0x2064, BIDI_BN }, // INVISIBLE PLUS
+ { 0x2066, BIDI_LRI }, // LEFT-TO-RIGHT ISOLATE
+ { 0x2067, BIDI_RLI }, // RIGHT-TO-LEFT ISOLATE
+ { 0x2068, BIDI_FSI }, // FIRST STRONG ISOLATE
+ { 0x2069, BIDI_PDI }, // POP DIRECTIONAL ISOLATE
+ { 0x206A, BIDI_BN }, // INHIBIT SYMMETRIC SWAPPING
+ { 0x206B, BIDI_BN }, // ACTIVATE SYMMETRIC SWAPPING
+ { 0x206C, BIDI_BN }, // INHIBIT ARABIC FORM SHAPING
+ { 0x206D, BIDI_BN }, // ACTIVATE ARABIC FORM SHAPING
+ { 0x206E, BIDI_BN }, // NATIONAL DIGIT SHAPES
+ { 0x206F, BIDI_BN }, // NOMINAL DIGIT SHAPES
+ { 0x2070, BIDI_EN }, // SUPERSCRIPT ZERO
+ { 0x2071, BIDI_L }, // SUPERSCRIPT LATIN SMALL LETTER I
+ { 0x2074, BIDI_EN }, // SUPERSCRIPT FOUR
+ { 0x2075, BIDI_EN }, // SUPERSCRIPT FIVE
+ { 0x2076, BIDI_EN }, // SUPERSCRIPT SIX
+ { 0x2077, BIDI_EN }, // SUPERSCRIPT SEVEN
+ { 0x2078, BIDI_EN }, // SUPERSCRIPT EIGHT
+ { 0x2079, BIDI_EN }, // SUPERSCRIPT NINE
+ { 0x207A, BIDI_ES }, // SUPERSCRIPT PLUS SIGN
+ { 0x207B, BIDI_ES }, // SUPERSCRIPT MINUS
+ { 0x207C, BIDI_ON }, // SUPERSCRIPT EQUALS SIGN
+ { 0x207D, BIDI_ON }, // SUPERSCRIPT LEFT PARENTHESIS
+ { 0x207E, BIDI_ON }, // SUPERSCRIPT RIGHT PARENTHESIS
+ { 0x207F, BIDI_L }, // SUPERSCRIPT LATIN SMALL LETTER N
+ { 0x2080, BIDI_EN }, // SUBSCRIPT ZERO
+ { 0x2081, BIDI_EN }, // SUBSCRIPT ONE
+ { 0x2082, BIDI_EN }, // SUBSCRIPT TWO
+ { 0x2083, BIDI_EN }, // SUBSCRIPT THREE
+ { 0x2084, BIDI_EN }, // SUBSCRIPT FOUR
+ { 0x2085, BIDI_EN }, // SUBSCRIPT FIVE
+ { 0x2086, BIDI_EN }, // SUBSCRIPT SIX
+ { 0x2087, BIDI_EN }, // SUBSCRIPT SEVEN
+ { 0x2088, BIDI_EN }, // SUBSCRIPT EIGHT
+ { 0x2089, BIDI_EN }, // SUBSCRIPT NINE
+ { 0x208A, BIDI_ES }, // SUBSCRIPT PLUS SIGN
+ { 0x208B, BIDI_ES }, // SUBSCRIPT MINUS
+ { 0x208C, BIDI_ON }, // SUBSCRIPT EQUALS SIGN
+ { 0x208D, BIDI_ON }, // SUBSCRIPT LEFT PARENTHESIS
+ { 0x208E, BIDI_ON }, // SUBSCRIPT RIGHT PARENTHESIS
+ { 0x2090, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER A
+ { 0x2091, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER E
+ { 0x2092, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER O
+ { 0x2093, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER X
+ { 0x2094, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER SCHWA
+ { 0x2095, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER H
+ { 0x2096, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER K
+ { 0x2097, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER L
+ { 0x2098, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER M
+ { 0x2099, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER N
+ { 0x209A, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER P
+ { 0x209B, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER S
+ { 0x209C, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER T
+ { 0x20A0, BIDI_ET }, // EURO-CURRENCY SIGN
+ { 0x20A1, BIDI_ET }, // COLON SIGN
+ { 0x20A2, BIDI_ET }, // CRUZEIRO SIGN
+ { 0x20A3, BIDI_ET }, // FRENCH FRANC SIGN
+ { 0x20A4, BIDI_ET }, // LIRA SIGN
+ { 0x20A5, BIDI_ET }, // MILL SIGN
+ { 0x20A6, BIDI_ET }, // NAIRA SIGN
+ { 0x20A7, BIDI_ET }, // PESETA SIGN
+ { 0x20A8, BIDI_ET }, // RUPEE SIGN
+ { 0x20A9, BIDI_ET }, // WON SIGN
+ { 0x20AA, BIDI_ET }, // NEW SHEQEL SIGN
+ { 0x20AB, BIDI_ET }, // DONG SIGN
+ { 0x20AC, BIDI_ET }, // EURO SIGN
+ { 0x20AD, BIDI_ET }, // KIP SIGN
+ { 0x20AE, BIDI_ET }, // TUGRIK SIGN
+ { 0x20AF, BIDI_ET }, // DRACHMA SIGN
+ { 0x20B0, BIDI_ET }, // GERMAN PENNY SIGN
+ { 0x20B1, BIDI_ET }, // PESO SIGN
+ { 0x20B2, BIDI_ET }, // GUARANI SIGN
+ { 0x20B3, BIDI_ET }, // AUSTRAL SIGN
+ { 0x20B4, BIDI_ET }, // HRYVNIA SIGN
+ { 0x20B5, BIDI_ET }, // CEDI SIGN
+ { 0x20B6, BIDI_ET }, // LIVRE TOURNOIS SIGN
+ { 0x20B7, BIDI_ET }, // SPESMILO SIGN
+ { 0x20B8, BIDI_ET }, // TENGE SIGN
+ { 0x20B9, BIDI_ET }, // INDIAN RUPEE SIGN
+ { 0x20BA, BIDI_ET }, // TURKISH LIRA SIGN
+ { 0x20BB, BIDI_ET }, // NORDIC MARK SIGN
+ { 0x20BC, BIDI_ET }, // MANAT SIGN
+ { 0x20BD, BIDI_ET }, // RUBLE SIGN
+ { 0x20BE, BIDI_ET }, // LARI SIGN
+ { 0x20D0, BIDI_NSM }, // COMBINING LEFT HARPOON ABOVE
+ { 0x20D1, BIDI_NSM }, // COMBINING RIGHT HARPOON ABOVE
+ { 0x20D2, BIDI_NSM }, // COMBINING LONG VERTICAL LINE OVERLAY
+ { 0x20D3, BIDI_NSM }, // COMBINING SHORT VERTICAL LINE OVERLAY
+ { 0x20D4, BIDI_NSM }, // COMBINING ANTICLOCKWISE ARROW ABOVE
+ { 0x20D5, BIDI_NSM }, // COMBINING CLOCKWISE ARROW ABOVE
+ { 0x20D6, BIDI_NSM }, // COMBINING LEFT ARROW ABOVE
+ { 0x20D7, BIDI_NSM }, // COMBINING RIGHT ARROW ABOVE
+ { 0x20D8, BIDI_NSM }, // COMBINING RING OVERLAY
+ { 0x20D9, BIDI_NSM }, // COMBINING CLOCKWISE RING OVERLAY
+ { 0x20DA, BIDI_NSM }, // COMBINING ANTICLOCKWISE RING OVERLAY
+ { 0x20DB, BIDI_NSM }, // COMBINING THREE DOTS ABOVE
+ { 0x20DC, BIDI_NSM }, // COMBINING FOUR DOTS ABOVE
+ { 0x20DD, BIDI_NSM }, // COMBINING ENCLOSING CIRCLE
+ { 0x20DE, BIDI_NSM }, // COMBINING ENCLOSING SQUARE
+ { 0x20DF, BIDI_NSM }, // COMBINING ENCLOSING DIAMOND
+ { 0x20E0, BIDI_NSM }, // COMBINING ENCLOSING CIRCLE BACKSLASH
+ { 0x20E1, BIDI_NSM }, // COMBINING LEFT RIGHT ARROW ABOVE
+ { 0x20E2, BIDI_NSM }, // COMBINING ENCLOSING SCREEN
+ { 0x20E3, BIDI_NSM }, // COMBINING ENCLOSING KEYCAP
+ { 0x20E4, BIDI_NSM }, // COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+ { 0x20E5, BIDI_NSM }, // COMBINING REVERSE SOLIDUS OVERLAY
+ { 0x20E6, BIDI_NSM }, // COMBINING DOUBLE VERTICAL STROKE OVERLAY
+ { 0x20E7, BIDI_NSM }, // COMBINING ANNUITY SYMBOL
+ { 0x20E8, BIDI_NSM }, // COMBINING TRIPLE UNDERDOT
+ { 0x20E9, BIDI_NSM }, // COMBINING WIDE BRIDGE ABOVE
+ { 0x20EA, BIDI_NSM }, // COMBINING LEFTWARDS ARROW OVERLAY
+ { 0x20EB, BIDI_NSM }, // COMBINING LONG DOUBLE SOLIDUS OVERLAY
+ { 0x20EC, BIDI_NSM }, // COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+ { 0x20ED, BIDI_NSM }, // COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS
+ { 0x20EE, BIDI_NSM }, // COMBINING LEFT ARROW BELOW
+ { 0x20EF, BIDI_NSM }, // COMBINING RIGHT ARROW BELOW
+ { 0x20F0, BIDI_NSM }, // COMBINING ASTERISK ABOVE
+ { 0x2100, BIDI_ON }, // ACCOUNT OF
+ { 0x2101, BIDI_ON }, // ADDRESSED TO THE SUBJECT
+ { 0x2102, BIDI_L }, // DOUBLE-STRUCK CAPITAL C
+ { 0x2103, BIDI_ON }, // DEGREE CELSIUS
+ { 0x2104, BIDI_ON }, // CENTRE LINE SYMBOL
+ { 0x2105, BIDI_ON }, // CARE OF
+ { 0x2106, BIDI_ON }, // CADA UNA
+ { 0x2107, BIDI_L }, // EULER CONSTANT
+ { 0x2108, BIDI_ON }, // SCRUPLE
+ { 0x2109, BIDI_ON }, // DEGREE FAHRENHEIT
+ { 0x210A, BIDI_L }, // SCRIPT SMALL G
+ { 0x210B, BIDI_L }, // SCRIPT CAPITAL H
+ { 0x210C, BIDI_L }, // BLACK-LETTER CAPITAL H
+ { 0x210D, BIDI_L }, // DOUBLE-STRUCK CAPITAL H
+ { 0x210E, BIDI_L }, // PLANCK CONSTANT
+ { 0x210F, BIDI_L }, // PLANCK CONSTANT OVER TWO PI
+ { 0x2110, BIDI_L }, // SCRIPT CAPITAL I
+ { 0x2111, BIDI_L }, // BLACK-LETTER CAPITAL I
+ { 0x2112, BIDI_L }, // SCRIPT CAPITAL L
+ { 0x2113, BIDI_L }, // SCRIPT SMALL L
+ { 0x2114, BIDI_ON }, // L B BAR SYMBOL
+ { 0x2115, BIDI_L }, // DOUBLE-STRUCK CAPITAL N
+ { 0x2116, BIDI_ON }, // NUMERO SIGN
+ { 0x2117, BIDI_ON }, // SOUND RECORDING COPYRIGHT
+ { 0x2118, BIDI_ON }, // SCRIPT CAPITAL P
+ { 0x2119, BIDI_L }, // DOUBLE-STRUCK CAPITAL P
+ { 0x211A, BIDI_L }, // DOUBLE-STRUCK CAPITAL Q
+ { 0x211B, BIDI_L }, // SCRIPT CAPITAL R
+ { 0x211C, BIDI_L }, // BLACK-LETTER CAPITAL R
+ { 0x211D, BIDI_L }, // DOUBLE-STRUCK CAPITAL R
+ { 0x211E, BIDI_ON }, // PRESCRIPTION TAKE
+ { 0x211F, BIDI_ON }, // RESPONSE
+ { 0x2120, BIDI_ON }, // SERVICE MARK
+ { 0x2121, BIDI_ON }, // TELEPHONE SIGN
+ { 0x2122, BIDI_ON }, // TRADE MARK SIGN
+ { 0x2123, BIDI_ON }, // VERSICLE
+ { 0x2124, BIDI_L }, // DOUBLE-STRUCK CAPITAL Z
+ { 0x2125, BIDI_ON }, // OUNCE SIGN
+ { 0x2126, BIDI_L }, // OHM SIGN
+ { 0x2127, BIDI_ON }, // INVERTED OHM SIGN
+ { 0x2128, BIDI_L }, // BLACK-LETTER CAPITAL Z
+ { 0x2129, BIDI_ON }, // TURNED GREEK SMALL LETTER IOTA
+ { 0x212A, BIDI_L }, // KELVIN SIGN
+ { 0x212B, BIDI_L }, // ANGSTROM SIGN
+ { 0x212C, BIDI_L }, // SCRIPT CAPITAL B
+ { 0x212D, BIDI_L }, // BLACK-LETTER CAPITAL C
+ { 0x212E, BIDI_ET }, // ESTIMATED SYMBOL
+ { 0x212F, BIDI_L }, // SCRIPT SMALL E
+ { 0x2130, BIDI_L }, // SCRIPT CAPITAL E
+ { 0x2131, BIDI_L }, // SCRIPT CAPITAL F
+ { 0x2132, BIDI_L }, // TURNED CAPITAL F
+ { 0x2133, BIDI_L }, // SCRIPT CAPITAL M
+ { 0x2134, BIDI_L }, // SCRIPT SMALL O
+ { 0x2135, BIDI_L }, // ALEF SYMBOL
+ { 0x2136, BIDI_L }, // BET SYMBOL
+ { 0x2137, BIDI_L }, // GIMEL SYMBOL
+ { 0x2138, BIDI_L }, // DALET SYMBOL
+ { 0x2139, BIDI_L }, // INFORMATION SOURCE
+ { 0x213A, BIDI_ON }, // ROTATED CAPITAL Q
+ { 0x213B, BIDI_ON }, // FACSIMILE SIGN
+ { 0x213C, BIDI_L }, // DOUBLE-STRUCK SMALL PI
+ { 0x213D, BIDI_L }, // DOUBLE-STRUCK SMALL GAMMA
+ { 0x213E, BIDI_L }, // DOUBLE-STRUCK CAPITAL GAMMA
+ { 0x213F, BIDI_L }, // DOUBLE-STRUCK CAPITAL PI
+ { 0x2140, BIDI_ON }, // DOUBLE-STRUCK N-ARY SUMMATION
+ { 0x2141, BIDI_ON }, // TURNED SANS-SERIF CAPITAL G
+ { 0x2142, BIDI_ON }, // TURNED SANS-SERIF CAPITAL L
+ { 0x2143, BIDI_ON }, // REVERSED SANS-SERIF CAPITAL L
+ { 0x2144, BIDI_ON }, // TURNED SANS-SERIF CAPITAL Y
+ { 0x2145, BIDI_L }, // DOUBLE-STRUCK ITALIC CAPITAL D
+ { 0x2146, BIDI_L }, // DOUBLE-STRUCK ITALIC SMALL D
+ { 0x2147, BIDI_L }, // DOUBLE-STRUCK ITALIC SMALL E
+ { 0x2148, BIDI_L }, // DOUBLE-STRUCK ITALIC SMALL I
+ { 0x2149, BIDI_L }, // DOUBLE-STRUCK ITALIC SMALL J
+ { 0x214A, BIDI_ON }, // PROPERTY LINE
+ { 0x214B, BIDI_ON }, // TURNED AMPERSAND
+ { 0x214C, BIDI_ON }, // PER SIGN
+ { 0x214D, BIDI_ON }, // AKTIESELSKAB
+ { 0x214E, BIDI_L }, // TURNED SMALL F
+ { 0x214F, BIDI_L }, // SYMBOL FOR SAMARITAN SOURCE
+ { 0x2150, BIDI_ON }, // VULGAR FRACTION ONE SEVENTH
+ { 0x2151, BIDI_ON }, // VULGAR FRACTION ONE NINTH
+ { 0x2152, BIDI_ON }, // VULGAR FRACTION ONE TENTH
+ { 0x2153, BIDI_ON }, // VULGAR FRACTION ONE THIRD
+ { 0x2154, BIDI_ON }, // VULGAR FRACTION TWO THIRDS
+ { 0x2155, BIDI_ON }, // VULGAR FRACTION ONE FIFTH
+ { 0x2156, BIDI_ON }, // VULGAR FRACTION TWO FIFTHS
+ { 0x2157, BIDI_ON }, // VULGAR FRACTION THREE FIFTHS
+ { 0x2158, BIDI_ON }, // VULGAR FRACTION FOUR FIFTHS
+ { 0x2159, BIDI_ON }, // VULGAR FRACTION ONE SIXTH
+ { 0x215A, BIDI_ON }, // VULGAR FRACTION FIVE SIXTHS
+ { 0x215B, BIDI_ON }, // VULGAR FRACTION ONE EIGHTH
+ { 0x215C, BIDI_ON }, // VULGAR FRACTION THREE EIGHTHS
+ { 0x215D, BIDI_ON }, // VULGAR FRACTION FIVE EIGHTHS
+ { 0x215E, BIDI_ON }, // VULGAR FRACTION SEVEN EIGHTHS
+ { 0x215F, BIDI_ON }, // FRACTION NUMERATOR ONE
+ { 0x2160, BIDI_L }, // ROMAN NUMERAL ONE
+ { 0x2161, BIDI_L }, // ROMAN NUMERAL TWO
+ { 0x2162, BIDI_L }, // ROMAN NUMERAL THREE
+ { 0x2163, BIDI_L }, // ROMAN NUMERAL FOUR
+ { 0x2164, BIDI_L }, // ROMAN NUMERAL FIVE
+ { 0x2165, BIDI_L }, // ROMAN NUMERAL SIX
+ { 0x2166, BIDI_L }, // ROMAN NUMERAL SEVEN
+ { 0x2167, BIDI_L }, // ROMAN NUMERAL EIGHT
+ { 0x2168, BIDI_L }, // ROMAN NUMERAL NINE
+ { 0x2169, BIDI_L }, // ROMAN NUMERAL TEN
+ { 0x216A, BIDI_L }, // ROMAN NUMERAL ELEVEN
+ { 0x216B, BIDI_L }, // ROMAN NUMERAL TWELVE
+ { 0x216C, BIDI_L }, // ROMAN NUMERAL FIFTY
+ { 0x216D, BIDI_L }, // ROMAN NUMERAL ONE HUNDRED
+ { 0x216E, BIDI_L }, // ROMAN NUMERAL FIVE HUNDRED
+ { 0x216F, BIDI_L }, // ROMAN NUMERAL ONE THOUSAND
+ { 0x2170, BIDI_L }, // SMALL ROMAN NUMERAL ONE
+ { 0x2171, BIDI_L }, // SMALL ROMAN NUMERAL TWO
+ { 0x2172, BIDI_L }, // SMALL ROMAN NUMERAL THREE
+ { 0x2173, BIDI_L }, // SMALL ROMAN NUMERAL FOUR
+ { 0x2174, BIDI_L }, // SMALL ROMAN NUMERAL FIVE
+ { 0x2175, BIDI_L }, // SMALL ROMAN NUMERAL SIX
+ { 0x2176, BIDI_L }, // SMALL ROMAN NUMERAL SEVEN
+ { 0x2177, BIDI_L }, // SMALL ROMAN NUMERAL EIGHT
+ { 0x2178, BIDI_L }, // SMALL ROMAN NUMERAL NINE
+ { 0x2179, BIDI_L }, // SMALL ROMAN NUMERAL TEN
+ { 0x217A, BIDI_L }, // SMALL ROMAN NUMERAL ELEVEN
+ { 0x217B, BIDI_L }, // SMALL ROMAN NUMERAL TWELVE
+ { 0x217C, BIDI_L }, // SMALL ROMAN NUMERAL FIFTY
+ { 0x217D, BIDI_L }, // SMALL ROMAN NUMERAL ONE HUNDRED
+ { 0x217E, BIDI_L }, // SMALL ROMAN NUMERAL FIVE HUNDRED
+ { 0x217F, BIDI_L }, // SMALL ROMAN NUMERAL ONE THOUSAND
+ { 0x2180, BIDI_L }, // ROMAN NUMERAL ONE THOUSAND C D
+ { 0x2181, BIDI_L }, // ROMAN NUMERAL FIVE THOUSAND
+ { 0x2182, BIDI_L }, // ROMAN NUMERAL TEN THOUSAND
+ { 0x2183, BIDI_L }, // ROMAN NUMERAL REVERSED ONE HUNDRED
+ { 0x2184, BIDI_L }, // LATIN SMALL LETTER REVERSED C
+ { 0x2185, BIDI_L }, // ROMAN NUMERAL SIX LATE FORM
+ { 0x2186, BIDI_L }, // ROMAN NUMERAL FIFTY EARLY FORM
+ { 0x2187, BIDI_L }, // ROMAN NUMERAL FIFTY THOUSAND
+ { 0x2188, BIDI_L }, // ROMAN NUMERAL ONE HUNDRED THOUSAND
+ { 0x2189, BIDI_ON }, // VULGAR FRACTION ZERO THIRDS
+ { 0x218A, BIDI_ON }, // TURNED DIGIT TWO
+ { 0x218B, BIDI_ON }, // TURNED DIGIT THREE
+ { 0x2190, BIDI_ON }, // LEFTWARDS ARROW
+ { 0x2191, BIDI_ON }, // UPWARDS ARROW
+ { 0x2192, BIDI_ON }, // RIGHTWARDS ARROW
+ { 0x2193, BIDI_ON }, // DOWNWARDS ARROW
+ { 0x2194, BIDI_ON }, // LEFT RIGHT ARROW
+ { 0x2195, BIDI_ON }, // UP DOWN ARROW
+ { 0x2196, BIDI_ON }, // NORTH WEST ARROW
+ { 0x2197, BIDI_ON }, // NORTH EAST ARROW
+ { 0x2198, BIDI_ON }, // SOUTH EAST ARROW
+ { 0x2199, BIDI_ON }, // SOUTH WEST ARROW
+ { 0x219A, BIDI_ON }, // LEFTWARDS ARROW WITH STROKE
+ { 0x219B, BIDI_ON }, // RIGHTWARDS ARROW WITH STROKE
+ { 0x219C, BIDI_ON }, // LEFTWARDS WAVE ARROW
+ { 0x219D, BIDI_ON }, // RIGHTWARDS WAVE ARROW
+ { 0x219E, BIDI_ON }, // LEFTWARDS TWO HEADED ARROW
+ { 0x219F, BIDI_ON }, // UPWARDS TWO HEADED ARROW
+ { 0x21A0, BIDI_ON }, // RIGHTWARDS TWO HEADED ARROW
+ { 0x21A1, BIDI_ON }, // DOWNWARDS TWO HEADED ARROW
+ { 0x21A2, BIDI_ON }, // LEFTWARDS ARROW WITH TAIL
+ { 0x21A3, BIDI_ON }, // RIGHTWARDS ARROW WITH TAIL
+ { 0x21A4, BIDI_ON }, // LEFTWARDS ARROW FROM BAR
+ { 0x21A5, BIDI_ON }, // UPWARDS ARROW FROM BAR
+ { 0x21A6, BIDI_ON }, // RIGHTWARDS ARROW FROM BAR
+ { 0x21A7, BIDI_ON }, // DOWNWARDS ARROW FROM BAR
+ { 0x21A8, BIDI_ON }, // UP DOWN ARROW WITH BASE
+ { 0x21A9, BIDI_ON }, // LEFTWARDS ARROW WITH HOOK
+ { 0x21AA, BIDI_ON }, // RIGHTWARDS ARROW WITH HOOK
+ { 0x21AB, BIDI_ON }, // LEFTWARDS ARROW WITH LOOP
+ { 0x21AC, BIDI_ON }, // RIGHTWARDS ARROW WITH LOOP
+ { 0x21AD, BIDI_ON }, // LEFT RIGHT WAVE ARROW
+ { 0x21AE, BIDI_ON }, // LEFT RIGHT ARROW WITH STROKE
+ { 0x21AF, BIDI_ON }, // DOWNWARDS ZIGZAG ARROW
+ { 0x21B0, BIDI_ON }, // UPWARDS ARROW WITH TIP LEFTWARDS
+ { 0x21B1, BIDI_ON }, // UPWARDS ARROW WITH TIP RIGHTWARDS
+ { 0x21B2, BIDI_ON }, // DOWNWARDS ARROW WITH TIP LEFTWARDS
+ { 0x21B3, BIDI_ON }, // DOWNWARDS ARROW WITH TIP RIGHTWARDS
+ { 0x21B4, BIDI_ON }, // RIGHTWARDS ARROW WITH CORNER DOWNWARDS
+ { 0x21B5, BIDI_ON }, // DOWNWARDS ARROW WITH CORNER LEFTWARDS
+ { 0x21B6, BIDI_ON }, // ANTICLOCKWISE TOP SEMICIRCLE ARROW
+ { 0x21B7, BIDI_ON }, // CLOCKWISE TOP SEMICIRCLE ARROW
+ { 0x21B8, BIDI_ON }, // NORTH WEST ARROW TO LONG BAR
+ { 0x21B9, BIDI_ON }, // LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+ { 0x21BA, BIDI_ON }, // ANTICLOCKWISE OPEN CIRCLE ARROW
+ { 0x21BB, BIDI_ON }, // CLOCKWISE OPEN CIRCLE ARROW
+ { 0x21BC, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB UPWARDS
+ { 0x21BD, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB DOWNWARDS
+ { 0x21BE, BIDI_ON }, // UPWARDS HARPOON WITH BARB RIGHTWARDS
+ { 0x21BF, BIDI_ON }, // UPWARDS HARPOON WITH BARB LEFTWARDS
+ { 0x21C0, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB UPWARDS
+ { 0x21C1, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB DOWNWARDS
+ { 0x21C2, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB RIGHTWARDS
+ { 0x21C3, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB LEFTWARDS
+ { 0x21C4, BIDI_ON }, // RIGHTWARDS ARROW OVER LEFTWARDS ARROW
+ { 0x21C5, BIDI_ON }, // UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW
+ { 0x21C6, BIDI_ON }, // LEFTWARDS ARROW OVER RIGHTWARDS ARROW
+ { 0x21C7, BIDI_ON }, // LEFTWARDS PAIRED ARROWS
+ { 0x21C8, BIDI_ON }, // UPWARDS PAIRED ARROWS
+ { 0x21C9, BIDI_ON }, // RIGHTWARDS PAIRED ARROWS
+ { 0x21CA, BIDI_ON }, // DOWNWARDS PAIRED ARROWS
+ { 0x21CB, BIDI_ON }, // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON
+ { 0x21CC, BIDI_ON }, // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+ { 0x21CD, BIDI_ON }, // LEFTWARDS DOUBLE ARROW WITH STROKE
+ { 0x21CE, BIDI_ON }, // LEFT RIGHT DOUBLE ARROW WITH STROKE
+ { 0x21CF, BIDI_ON }, // RIGHTWARDS DOUBLE ARROW WITH STROKE
+ { 0x21D0, BIDI_ON }, // LEFTWARDS DOUBLE ARROW
+ { 0x21D1, BIDI_ON }, // UPWARDS DOUBLE ARROW
+ { 0x21D2, BIDI_ON }, // RIGHTWARDS DOUBLE ARROW
+ { 0x21D3, BIDI_ON }, // DOWNWARDS DOUBLE ARROW
+ { 0x21D4, BIDI_ON }, // LEFT RIGHT DOUBLE ARROW
+ { 0x21D5, BIDI_ON }, // UP DOWN DOUBLE ARROW
+ { 0x21D6, BIDI_ON }, // NORTH WEST DOUBLE ARROW
+ { 0x21D7, BIDI_ON }, // NORTH EAST DOUBLE ARROW
+ { 0x21D8, BIDI_ON }, // SOUTH EAST DOUBLE ARROW
+ { 0x21D9, BIDI_ON }, // SOUTH WEST DOUBLE ARROW
+ { 0x21DA, BIDI_ON }, // LEFTWARDS TRIPLE ARROW
+ { 0x21DB, BIDI_ON }, // RIGHTWARDS TRIPLE ARROW
+ { 0x21DC, BIDI_ON }, // LEFTWARDS SQUIGGLE ARROW
+ { 0x21DD, BIDI_ON }, // RIGHTWARDS SQUIGGLE ARROW
+ { 0x21DE, BIDI_ON }, // UPWARDS ARROW WITH DOUBLE STROKE
+ { 0x21DF, BIDI_ON }, // DOWNWARDS ARROW WITH DOUBLE STROKE
+ { 0x21E0, BIDI_ON }, // LEFTWARDS DASHED ARROW
+ { 0x21E1, BIDI_ON }, // UPWARDS DASHED ARROW
+ { 0x21E2, BIDI_ON }, // RIGHTWARDS DASHED ARROW
+ { 0x21E3, BIDI_ON }, // DOWNWARDS DASHED ARROW
+ { 0x21E4, BIDI_ON }, // LEFTWARDS ARROW TO BAR
+ { 0x21E5, BIDI_ON }, // RIGHTWARDS ARROW TO BAR
+ { 0x21E6, BIDI_ON }, // LEFTWARDS WHITE ARROW
+ { 0x21E7, BIDI_ON }, // UPWARDS WHITE ARROW
+ { 0x21E8, BIDI_ON }, // RIGHTWARDS WHITE ARROW
+ { 0x21E9, BIDI_ON }, // DOWNWARDS WHITE ARROW
+ { 0x21EA, BIDI_ON }, // UPWARDS WHITE ARROW FROM BAR
+ { 0x21EB, BIDI_ON }, // UPWARDS WHITE ARROW ON PEDESTAL
+ { 0x21EC, BIDI_ON }, // UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR
+ { 0x21ED, BIDI_ON }, // UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR
+ { 0x21EE, BIDI_ON }, // UPWARDS WHITE DOUBLE ARROW
+ { 0x21EF, BIDI_ON }, // UPWARDS WHITE DOUBLE ARROW ON PEDESTAL
+ { 0x21F0, BIDI_ON }, // RIGHTWARDS WHITE ARROW FROM WALL
+ { 0x21F1, BIDI_ON }, // NORTH WEST ARROW TO CORNER
+ { 0x21F2, BIDI_ON }, // SOUTH EAST ARROW TO CORNER
+ { 0x21F3, BIDI_ON }, // UP DOWN WHITE ARROW
+ { 0x21F4, BIDI_ON }, // RIGHT ARROW WITH SMALL CIRCLE
+ { 0x21F5, BIDI_ON }, // DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW
+ { 0x21F6, BIDI_ON }, // THREE RIGHTWARDS ARROWS
+ { 0x21F7, BIDI_ON }, // LEFTWARDS ARROW WITH VERTICAL STROKE
+ { 0x21F8, BIDI_ON }, // RIGHTWARDS ARROW WITH VERTICAL STROKE
+ { 0x21F9, BIDI_ON }, // LEFT RIGHT ARROW WITH VERTICAL STROKE
+ { 0x21FA, BIDI_ON }, // LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+ { 0x21FB, BIDI_ON }, // RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE
+ { 0x21FC, BIDI_ON }, // LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE
+ { 0x21FD, BIDI_ON }, // LEFTWARDS OPEN-HEADED ARROW
+ { 0x21FE, BIDI_ON }, // RIGHTWARDS OPEN-HEADED ARROW
+ { 0x21FF, BIDI_ON }, // LEFT RIGHT OPEN-HEADED ARROW
+ { 0x2200, BIDI_ON }, // FOR ALL
+ { 0x2201, BIDI_ON }, // COMPLEMENT
+ { 0x2202, BIDI_ON }, // PARTIAL DIFFERENTIAL
+ { 0x2203, BIDI_ON }, // THERE EXISTS
+ { 0x2204, BIDI_ON }, // THERE DOES NOT EXIST
+ { 0x2205, BIDI_ON }, // EMPTY SET
+ { 0x2206, BIDI_ON }, // INCREMENT
+ { 0x2207, BIDI_ON }, // NABLA
+ { 0x2208, BIDI_ON }, // ELEMENT OF
+ { 0x2209, BIDI_ON }, // NOT AN ELEMENT OF
+ { 0x220A, BIDI_ON }, // SMALL ELEMENT OF
+ { 0x220B, BIDI_ON }, // CONTAINS AS MEMBER
+ { 0x220C, BIDI_ON }, // DOES NOT CONTAIN AS MEMBER
+ { 0x220D, BIDI_ON }, // SMALL CONTAINS AS MEMBER
+ { 0x220E, BIDI_ON }, // END OF PROOF
+ { 0x220F, BIDI_ON }, // N-ARY PRODUCT
+ { 0x2210, BIDI_ON }, // N-ARY COPRODUCT
+ { 0x2211, BIDI_ON }, // N-ARY SUMMATION
+ { 0x2212, BIDI_ES }, // MINUS SIGN
+ { 0x2213, BIDI_ET }, // MINUS-OR-PLUS SIGN
+ { 0x2214, BIDI_ON }, // DOT PLUS
+ { 0x2215, BIDI_ON }, // DIVISION SLASH
+ { 0x2216, BIDI_ON }, // SET MINUS
+ { 0x2217, BIDI_ON }, // ASTERISK OPERATOR
+ { 0x2218, BIDI_ON }, // RING OPERATOR
+ { 0x2219, BIDI_ON }, // BULLET OPERATOR
+ { 0x221A, BIDI_ON }, // SQUARE ROOT
+ { 0x221B, BIDI_ON }, // CUBE ROOT
+ { 0x221C, BIDI_ON }, // FOURTH ROOT
+ { 0x221D, BIDI_ON }, // PROPORTIONAL TO
+ { 0x221E, BIDI_ON }, // INFINITY
+ { 0x221F, BIDI_ON }, // RIGHT ANGLE
+ { 0x2220, BIDI_ON }, // ANGLE
+ { 0x2221, BIDI_ON }, // MEASURED ANGLE
+ { 0x2222, BIDI_ON }, // SPHERICAL ANGLE
+ { 0x2223, BIDI_ON }, // DIVIDES
+ { 0x2224, BIDI_ON }, // DOES NOT DIVIDE
+ { 0x2225, BIDI_ON }, // PARALLEL TO
+ { 0x2226, BIDI_ON }, // NOT PARALLEL TO
+ { 0x2227, BIDI_ON }, // LOGICAL AND
+ { 0x2228, BIDI_ON }, // LOGICAL OR
+ { 0x2229, BIDI_ON }, // INTERSECTION
+ { 0x222A, BIDI_ON }, // UNION
+ { 0x222B, BIDI_ON }, // INTEGRAL
+ { 0x222C, BIDI_ON }, // DOUBLE INTEGRAL
+ { 0x222D, BIDI_ON }, // TRIPLE INTEGRAL
+ { 0x222E, BIDI_ON }, // CONTOUR INTEGRAL
+ { 0x222F, BIDI_ON }, // SURFACE INTEGRAL
+ { 0x2230, BIDI_ON }, // VOLUME INTEGRAL
+ { 0x2231, BIDI_ON }, // CLOCKWISE INTEGRAL
+ { 0x2232, BIDI_ON }, // CLOCKWISE CONTOUR INTEGRAL
+ { 0x2233, BIDI_ON }, // ANTICLOCKWISE CONTOUR INTEGRAL
+ { 0x2234, BIDI_ON }, // THEREFORE
+ { 0x2235, BIDI_ON }, // BECAUSE
+ { 0x2236, BIDI_ON }, // RATIO
+ { 0x2237, BIDI_ON }, // PROPORTION
+ { 0x2238, BIDI_ON }, // DOT MINUS
+ { 0x2239, BIDI_ON }, // EXCESS
+ { 0x223A, BIDI_ON }, // GEOMETRIC PROPORTION
+ { 0x223B, BIDI_ON }, // HOMOTHETIC
+ { 0x223C, BIDI_ON }, // TILDE OPERATOR
+ { 0x223D, BIDI_ON }, // REVERSED TILDE
+ { 0x223E, BIDI_ON }, // INVERTED LAZY S
+ { 0x223F, BIDI_ON }, // SINE WAVE
+ { 0x2240, BIDI_ON }, // WREATH PRODUCT
+ { 0x2241, BIDI_ON }, // NOT TILDE
+ { 0x2242, BIDI_ON }, // MINUS TILDE
+ { 0x2243, BIDI_ON }, // ASYMPTOTICALLY EQUAL TO
+ { 0x2244, BIDI_ON }, // NOT ASYMPTOTICALLY EQUAL TO
+ { 0x2245, BIDI_ON }, // APPROXIMATELY EQUAL TO
+ { 0x2246, BIDI_ON }, // APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
+ { 0x2247, BIDI_ON }, // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
+ { 0x2248, BIDI_ON }, // ALMOST EQUAL TO
+ { 0x2249, BIDI_ON }, // NOT ALMOST EQUAL TO
+ { 0x224A, BIDI_ON }, // ALMOST EQUAL OR EQUAL TO
+ { 0x224B, BIDI_ON }, // TRIPLE TILDE
+ { 0x224C, BIDI_ON }, // ALL EQUAL TO
+ { 0x224D, BIDI_ON }, // EQUIVALENT TO
+ { 0x224E, BIDI_ON }, // GEOMETRICALLY EQUIVALENT TO
+ { 0x224F, BIDI_ON }, // DIFFERENCE BETWEEN
+ { 0x2250, BIDI_ON }, // APPROACHES THE LIMIT
+ { 0x2251, BIDI_ON }, // GEOMETRICALLY EQUAL TO
+ { 0x2252, BIDI_ON }, // APPROXIMATELY EQUAL TO OR THE IMAGE OF
+ { 0x2253, BIDI_ON }, // IMAGE OF OR APPROXIMATELY EQUAL TO
+ { 0x2254, BIDI_ON }, // COLON EQUALS
+ { 0x2255, BIDI_ON }, // EQUALS COLON
+ { 0x2256, BIDI_ON }, // RING IN EQUAL TO
+ { 0x2257, BIDI_ON }, // RING EQUAL TO
+ { 0x2258, BIDI_ON }, // CORRESPONDS TO
+ { 0x2259, BIDI_ON }, // ESTIMATES
+ { 0x225A, BIDI_ON }, // EQUIANGULAR TO
+ { 0x225B, BIDI_ON }, // STAR EQUALS
+ { 0x225C, BIDI_ON }, // DELTA EQUAL TO
+ { 0x225D, BIDI_ON }, // EQUAL TO BY DEFINITION
+ { 0x225E, BIDI_ON }, // MEASURED BY
+ { 0x225F, BIDI_ON }, // QUESTIONED EQUAL TO
+ { 0x2260, BIDI_ON }, // NOT EQUAL TO
+ { 0x2261, BIDI_ON }, // IDENTICAL TO
+ { 0x2262, BIDI_ON }, // NOT IDENTICAL TO
+ { 0x2263, BIDI_ON }, // STRICTLY EQUIVALENT TO
+ { 0x2264, BIDI_ON }, // LESS-THAN OR EQUAL TO
+ { 0x2265, BIDI_ON }, // GREATER-THAN OR EQUAL TO
+ { 0x2266, BIDI_ON }, // LESS-THAN OVER EQUAL TO
+ { 0x2267, BIDI_ON }, // GREATER-THAN OVER EQUAL TO
+ { 0x2268, BIDI_ON }, // LESS-THAN BUT NOT EQUAL TO
+ { 0x2269, BIDI_ON }, // GREATER-THAN BUT NOT EQUAL TO
+ { 0x226A, BIDI_ON }, // MUCH LESS-THAN
+ { 0x226B, BIDI_ON }, // MUCH GREATER-THAN
+ { 0x226C, BIDI_ON }, // BETWEEN
+ { 0x226D, BIDI_ON }, // NOT EQUIVALENT TO
+ { 0x226E, BIDI_ON }, // NOT LESS-THAN
+ { 0x226F, BIDI_ON }, // NOT GREATER-THAN
+ { 0x2270, BIDI_ON }, // NEITHER LESS-THAN NOR EQUAL TO
+ { 0x2271, BIDI_ON }, // NEITHER GREATER-THAN NOR EQUAL TO
+ { 0x2272, BIDI_ON }, // LESS-THAN OR EQUIVALENT TO
+ { 0x2273, BIDI_ON }, // GREATER-THAN OR EQUIVALENT TO
+ { 0x2274, BIDI_ON }, // NEITHER LESS-THAN NOR EQUIVALENT TO
+ { 0x2275, BIDI_ON }, // NEITHER GREATER-THAN NOR EQUIVALENT TO
+ { 0x2276, BIDI_ON }, // LESS-THAN OR GREATER-THAN
+ { 0x2277, BIDI_ON }, // GREATER-THAN OR LESS-THAN
+ { 0x2278, BIDI_ON }, // NEITHER LESS-THAN NOR GREATER-THAN
+ { 0x2279, BIDI_ON }, // NEITHER GREATER-THAN NOR LESS-THAN
+ { 0x227A, BIDI_ON }, // PRECEDES
+ { 0x227B, BIDI_ON }, // SUCCEEDS
+ { 0x227C, BIDI_ON }, // PRECEDES OR EQUAL TO
+ { 0x227D, BIDI_ON }, // SUCCEEDS OR EQUAL TO
+ { 0x227E, BIDI_ON }, // PRECEDES OR EQUIVALENT TO
+ { 0x227F, BIDI_ON }, // SUCCEEDS OR EQUIVALENT TO
+ { 0x2280, BIDI_ON }, // DOES NOT PRECEDE
+ { 0x2281, BIDI_ON }, // DOES NOT SUCCEED
+ { 0x2282, BIDI_ON }, // SUBSET OF
+ { 0x2283, BIDI_ON }, // SUPERSET OF
+ { 0x2284, BIDI_ON }, // NOT A SUBSET OF
+ { 0x2285, BIDI_ON }, // NOT A SUPERSET OF
+ { 0x2286, BIDI_ON }, // SUBSET OF OR EQUAL TO
+ { 0x2287, BIDI_ON }, // SUPERSET OF OR EQUAL TO
+ { 0x2288, BIDI_ON }, // NEITHER A SUBSET OF NOR EQUAL TO
+ { 0x2289, BIDI_ON }, // NEITHER A SUPERSET OF NOR EQUAL TO
+ { 0x228A, BIDI_ON }, // SUBSET OF WITH NOT EQUAL TO
+ { 0x228B, BIDI_ON }, // SUPERSET OF WITH NOT EQUAL TO
+ { 0x228C, BIDI_ON }, // MULTISET
+ { 0x228D, BIDI_ON }, // MULTISET MULTIPLICATION
+ { 0x228E, BIDI_ON }, // MULTISET UNION
+ { 0x228F, BIDI_ON }, // SQUARE IMAGE OF
+ { 0x2290, BIDI_ON }, // SQUARE ORIGINAL OF
+ { 0x2291, BIDI_ON }, // SQUARE IMAGE OF OR EQUAL TO
+ { 0x2292, BIDI_ON }, // SQUARE ORIGINAL OF OR EQUAL TO
+ { 0x2293, BIDI_ON }, // SQUARE CAP
+ { 0x2294, BIDI_ON }, // SQUARE CUP
+ { 0x2295, BIDI_ON }, // CIRCLED PLUS
+ { 0x2296, BIDI_ON }, // CIRCLED MINUS
+ { 0x2297, BIDI_ON }, // CIRCLED TIMES
+ { 0x2298, BIDI_ON }, // CIRCLED DIVISION SLASH
+ { 0x2299, BIDI_ON }, // CIRCLED DOT OPERATOR
+ { 0x229A, BIDI_ON }, // CIRCLED RING OPERATOR
+ { 0x229B, BIDI_ON }, // CIRCLED ASTERISK OPERATOR
+ { 0x229C, BIDI_ON }, // CIRCLED EQUALS
+ { 0x229D, BIDI_ON }, // CIRCLED DASH
+ { 0x229E, BIDI_ON }, // SQUARED PLUS
+ { 0x229F, BIDI_ON }, // SQUARED MINUS
+ { 0x22A0, BIDI_ON }, // SQUARED TIMES
+ { 0x22A1, BIDI_ON }, // SQUARED DOT OPERATOR
+ { 0x22A2, BIDI_ON }, // RIGHT TACK
+ { 0x22A3, BIDI_ON }, // LEFT TACK
+ { 0x22A4, BIDI_ON }, // DOWN TACK
+ { 0x22A5, BIDI_ON }, // UP TACK
+ { 0x22A6, BIDI_ON }, // ASSERTION
+ { 0x22A7, BIDI_ON }, // MODELS
+ { 0x22A8, BIDI_ON }, // TRUE
+ { 0x22A9, BIDI_ON }, // FORCES
+ { 0x22AA, BIDI_ON }, // TRIPLE VERTICAL BAR RIGHT TURNSTILE
+ { 0x22AB, BIDI_ON }, // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+ { 0x22AC, BIDI_ON }, // DOES NOT PROVE
+ { 0x22AD, BIDI_ON }, // NOT TRUE
+ { 0x22AE, BIDI_ON }, // DOES NOT FORCE
+ { 0x22AF, BIDI_ON }, // NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
+ { 0x22B0, BIDI_ON }, // PRECEDES UNDER RELATION
+ { 0x22B1, BIDI_ON }, // SUCCEEDS UNDER RELATION
+ { 0x22B2, BIDI_ON }, // NORMAL SUBGROUP OF
+ { 0x22B3, BIDI_ON }, // CONTAINS AS NORMAL SUBGROUP
+ { 0x22B4, BIDI_ON }, // NORMAL SUBGROUP OF OR EQUAL TO
+ { 0x22B5, BIDI_ON }, // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
+ { 0x22B6, BIDI_ON }, // ORIGINAL OF
+ { 0x22B7, BIDI_ON }, // IMAGE OF
+ { 0x22B8, BIDI_ON }, // MULTIMAP
+ { 0x22B9, BIDI_ON }, // HERMITIAN CONJUGATE MATRIX
+ { 0x22BA, BIDI_ON }, // INTERCALATE
+ { 0x22BB, BIDI_ON }, // XOR
+ { 0x22BC, BIDI_ON }, // NAND
+ { 0x22BD, BIDI_ON }, // NOR
+ { 0x22BE, BIDI_ON }, // RIGHT ANGLE WITH ARC
+ { 0x22BF, BIDI_ON }, // RIGHT TRIANGLE
+ { 0x22C0, BIDI_ON }, // N-ARY LOGICAL AND
+ { 0x22C1, BIDI_ON }, // N-ARY LOGICAL OR
+ { 0x22C2, BIDI_ON }, // N-ARY INTERSECTION
+ { 0x22C3, BIDI_ON }, // N-ARY UNION
+ { 0x22C4, BIDI_ON }, // DIAMOND OPERATOR
+ { 0x22C5, BIDI_ON }, // DOT OPERATOR
+ { 0x22C6, BIDI_ON }, // STAR OPERATOR
+ { 0x22C7, BIDI_ON }, // DIVISION TIMES
+ { 0x22C8, BIDI_ON }, // BOWTIE
+ { 0x22C9, BIDI_ON }, // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
+ { 0x22CA, BIDI_ON }, // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
+ { 0x22CB, BIDI_ON }, // LEFT SEMIDIRECT PRODUCT
+ { 0x22CC, BIDI_ON }, // RIGHT SEMIDIRECT PRODUCT
+ { 0x22CD, BIDI_ON }, // REVERSED TILDE EQUALS
+ { 0x22CE, BIDI_ON }, // CURLY LOGICAL OR
+ { 0x22CF, BIDI_ON }, // CURLY LOGICAL AND
+ { 0x22D0, BIDI_ON }, // DOUBLE SUBSET
+ { 0x22D1, BIDI_ON }, // DOUBLE SUPERSET
+ { 0x22D2, BIDI_ON }, // DOUBLE INTERSECTION
+ { 0x22D3, BIDI_ON }, // DOUBLE UNION
+ { 0x22D4, BIDI_ON }, // PITCHFORK
+ { 0x22D5, BIDI_ON }, // EQUAL AND PARALLEL TO
+ { 0x22D6, BIDI_ON }, // LESS-THAN WITH DOT
+ { 0x22D7, BIDI_ON }, // GREATER-THAN WITH DOT
+ { 0x22D8, BIDI_ON }, // VERY MUCH LESS-THAN
+ { 0x22D9, BIDI_ON }, // VERY MUCH GREATER-THAN
+ { 0x22DA, BIDI_ON }, // LESS-THAN EQUAL TO OR GREATER-THAN
+ { 0x22DB, BIDI_ON }, // GREATER-THAN EQUAL TO OR LESS-THAN
+ { 0x22DC, BIDI_ON }, // EQUAL TO OR LESS-THAN
+ { 0x22DD, BIDI_ON }, // EQUAL TO OR GREATER-THAN
+ { 0x22DE, BIDI_ON }, // EQUAL TO OR PRECEDES
+ { 0x22DF, BIDI_ON }, // EQUAL TO OR SUCCEEDS
+ { 0x22E0, BIDI_ON }, // DOES NOT PRECEDE OR EQUAL
+ { 0x22E1, BIDI_ON }, // DOES NOT SUCCEED OR EQUAL
+ { 0x22E2, BIDI_ON }, // NOT SQUARE IMAGE OF OR EQUAL TO
+ { 0x22E3, BIDI_ON }, // NOT SQUARE ORIGINAL OF OR EQUAL TO
+ { 0x22E4, BIDI_ON }, // SQUARE IMAGE OF OR NOT EQUAL TO
+ { 0x22E5, BIDI_ON }, // SQUARE ORIGINAL OF OR NOT EQUAL TO
+ { 0x22E6, BIDI_ON }, // LESS-THAN BUT NOT EQUIVALENT TO
+ { 0x22E7, BIDI_ON }, // GREATER-THAN BUT NOT EQUIVALENT TO
+ { 0x22E8, BIDI_ON }, // PRECEDES BUT NOT EQUIVALENT TO
+ { 0x22E9, BIDI_ON }, // SUCCEEDS BUT NOT EQUIVALENT TO
+ { 0x22EA, BIDI_ON }, // NOT NORMAL SUBGROUP OF
+ { 0x22EB, BIDI_ON }, // DOES NOT CONTAIN AS NORMAL SUBGROUP
+ { 0x22EC, BIDI_ON }, // NOT NORMAL SUBGROUP OF OR EQUAL TO
+ { 0x22ED, BIDI_ON }, // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
+ { 0x22EE, BIDI_ON }, // VERTICAL ELLIPSIS
+ { 0x22EF, BIDI_ON }, // MIDLINE HORIZONTAL ELLIPSIS
+ { 0x22F0, BIDI_ON }, // UP RIGHT DIAGONAL ELLIPSIS
+ { 0x22F1, BIDI_ON }, // DOWN RIGHT DIAGONAL ELLIPSIS
+ { 0x22F2, BIDI_ON }, // ELEMENT OF WITH LONG HORIZONTAL STROKE
+ { 0x22F3, BIDI_ON }, // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+ { 0x22F4, BIDI_ON }, // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+ { 0x22F5, BIDI_ON }, // ELEMENT OF WITH DOT ABOVE
+ { 0x22F6, BIDI_ON }, // ELEMENT OF WITH OVERBAR
+ { 0x22F7, BIDI_ON }, // SMALL ELEMENT OF WITH OVERBAR
+ { 0x22F8, BIDI_ON }, // ELEMENT OF WITH UNDERBAR
+ { 0x22F9, BIDI_ON }, // ELEMENT OF WITH TWO HORIZONTAL STROKES
+ { 0x22FA, BIDI_ON }, // CONTAINS WITH LONG HORIZONTAL STROKE
+ { 0x22FB, BIDI_ON }, // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+ { 0x22FC, BIDI_ON }, // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
+ { 0x22FD, BIDI_ON }, // CONTAINS WITH OVERBAR
+ { 0x22FE, BIDI_ON }, // SMALL CONTAINS WITH OVERBAR
+ { 0x22FF, BIDI_ON }, // Z NOTATION BAG MEMBERSHIP
+ { 0x2300, BIDI_ON }, // DIAMETER SIGN
+ { 0x2301, BIDI_ON }, // ELECTRIC ARROW
+ { 0x2302, BIDI_ON }, // HOUSE
+ { 0x2303, BIDI_ON }, // UP ARROWHEAD
+ { 0x2304, BIDI_ON }, // DOWN ARROWHEAD
+ { 0x2305, BIDI_ON }, // PROJECTIVE
+ { 0x2306, BIDI_ON }, // PERSPECTIVE
+ { 0x2307, BIDI_ON }, // WAVY LINE
+ { 0x2308, BIDI_ON }, // LEFT CEILING
+ { 0x2309, BIDI_ON }, // RIGHT CEILING
+ { 0x230A, BIDI_ON }, // LEFT FLOOR
+ { 0x230B, BIDI_ON }, // RIGHT FLOOR
+ { 0x230C, BIDI_ON }, // BOTTOM RIGHT CROP
+ { 0x230D, BIDI_ON }, // BOTTOM LEFT CROP
+ { 0x230E, BIDI_ON }, // TOP RIGHT CROP
+ { 0x230F, BIDI_ON }, // TOP LEFT CROP
+ { 0x2310, BIDI_ON }, // REVERSED NOT SIGN
+ { 0x2311, BIDI_ON }, // SQUARE LOZENGE
+ { 0x2312, BIDI_ON }, // ARC
+ { 0x2313, BIDI_ON }, // SEGMENT
+ { 0x2314, BIDI_ON }, // SECTOR
+ { 0x2315, BIDI_ON }, // TELEPHONE RECORDER
+ { 0x2316, BIDI_ON }, // POSITION INDICATOR
+ { 0x2317, BIDI_ON }, // VIEWDATA SQUARE
+ { 0x2318, BIDI_ON }, // PLACE OF INTEREST SIGN
+ { 0x2319, BIDI_ON }, // TURNED NOT SIGN
+ { 0x231A, BIDI_ON }, // WATCH
+ { 0x231B, BIDI_ON }, // HOURGLASS
+ { 0x231C, BIDI_ON }, // TOP LEFT CORNER
+ { 0x231D, BIDI_ON }, // TOP RIGHT CORNER
+ { 0x231E, BIDI_ON }, // BOTTOM LEFT CORNER
+ { 0x231F, BIDI_ON }, // BOTTOM RIGHT CORNER
+ { 0x2320, BIDI_ON }, // TOP HALF INTEGRAL
+ { 0x2321, BIDI_ON }, // BOTTOM HALF INTEGRAL
+ { 0x2322, BIDI_ON }, // FROWN
+ { 0x2323, BIDI_ON }, // SMILE
+ { 0x2324, BIDI_ON }, // UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS
+ { 0x2325, BIDI_ON }, // OPTION KEY
+ { 0x2326, BIDI_ON }, // ERASE TO THE RIGHT
+ { 0x2327, BIDI_ON }, // X IN A RECTANGLE BOX
+ { 0x2328, BIDI_ON }, // KEYBOARD
+ { 0x2329, BIDI_ON }, // LEFT-POINTING ANGLE BRACKET
+ { 0x232A, BIDI_ON }, // RIGHT-POINTING ANGLE BRACKET
+ { 0x232B, BIDI_ON }, // ERASE TO THE LEFT
+ { 0x232C, BIDI_ON }, // BENZENE RING
+ { 0x232D, BIDI_ON }, // CYLINDRICITY
+ { 0x232E, BIDI_ON }, // ALL AROUND-PROFILE
+ { 0x232F, BIDI_ON }, // SYMMETRY
+ { 0x2330, BIDI_ON }, // TOTAL RUNOUT
+ { 0x2331, BIDI_ON }, // DIMENSION ORIGIN
+ { 0x2332, BIDI_ON }, // CONICAL TAPER
+ { 0x2333, BIDI_ON }, // SLOPE
+ { 0x2334, BIDI_ON }, // COUNTERBORE
+ { 0x2335, BIDI_ON }, // COUNTERSINK
+ { 0x2336, BIDI_L }, // APL FUNCTIONAL SYMBOL I-BEAM
+ { 0x2337, BIDI_L }, // APL FUNCTIONAL SYMBOL SQUISH QUAD
+ { 0x2338, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD EQUAL
+ { 0x2339, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD DIVIDE
+ { 0x233A, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD DIAMOND
+ { 0x233B, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD JOT
+ { 0x233C, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD CIRCLE
+ { 0x233D, BIDI_L }, // APL FUNCTIONAL SYMBOL CIRCLE STILE
+ { 0x233E, BIDI_L }, // APL FUNCTIONAL SYMBOL CIRCLE JOT
+ { 0x233F, BIDI_L }, // APL FUNCTIONAL SYMBOL SLASH BAR
+ { 0x2340, BIDI_L }, // APL FUNCTIONAL SYMBOL BACKSLASH BAR
+ { 0x2341, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD SLASH
+ { 0x2342, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD BACKSLASH
+ { 0x2343, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD LESS-THAN
+ { 0x2344, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD GREATER-THAN
+ { 0x2345, BIDI_L }, // APL FUNCTIONAL SYMBOL LEFTWARDS VANE
+ { 0x2346, BIDI_L }, // APL FUNCTIONAL SYMBOL RIGHTWARDS VANE
+ { 0x2347, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW
+ { 0x2348, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW
+ { 0x2349, BIDI_L }, // APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH
+ { 0x234A, BIDI_L }, // APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR
+ { 0x234B, BIDI_L }, // APL FUNCTIONAL SYMBOL DELTA STILE
+ { 0x234C, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD DOWN CARET
+ { 0x234D, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD DELTA
+ { 0x234E, BIDI_L }, // APL FUNCTIONAL SYMBOL DOWN TACK JOT
+ { 0x234F, BIDI_L }, // APL FUNCTIONAL SYMBOL UPWARDS VANE
+ { 0x2350, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW
+ { 0x2351, BIDI_L }, // APL FUNCTIONAL SYMBOL UP TACK OVERBAR
+ { 0x2352, BIDI_L }, // APL FUNCTIONAL SYMBOL DEL STILE
+ { 0x2353, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD UP CARET
+ { 0x2354, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD DEL
+ { 0x2355, BIDI_L }, // APL FUNCTIONAL SYMBOL UP TACK JOT
+ { 0x2356, BIDI_L }, // APL FUNCTIONAL SYMBOL DOWNWARDS VANE
+ { 0x2357, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW
+ { 0x2358, BIDI_L }, // APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
+ { 0x2359, BIDI_L }, // APL FUNCTIONAL SYMBOL DELTA UNDERBAR
+ { 0x235A, BIDI_L }, // APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR
+ { 0x235B, BIDI_L }, // APL FUNCTIONAL SYMBOL JOT UNDERBAR
+ { 0x235C, BIDI_L }, // APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR
+ { 0x235D, BIDI_L }, // APL FUNCTIONAL SYMBOL UP SHOE JOT
+ { 0x235E, BIDI_L }, // APL FUNCTIONAL SYMBOL QUOTE QUAD
+ { 0x235F, BIDI_L }, // APL FUNCTIONAL SYMBOL CIRCLE STAR
+ { 0x2360, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD COLON
+ { 0x2361, BIDI_L }, // APL FUNCTIONAL SYMBOL UP TACK DIAERESIS
+ { 0x2362, BIDI_L }, // APL FUNCTIONAL SYMBOL DEL DIAERESIS
+ { 0x2363, BIDI_L }, // APL FUNCTIONAL SYMBOL STAR DIAERESIS
+ { 0x2364, BIDI_L }, // APL FUNCTIONAL SYMBOL JOT DIAERESIS
+ { 0x2365, BIDI_L }, // APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS
+ { 0x2366, BIDI_L }, // APL FUNCTIONAL SYMBOL DOWN SHOE STILE
+ { 0x2367, BIDI_L }, // APL FUNCTIONAL SYMBOL LEFT SHOE STILE
+ { 0x2368, BIDI_L }, // APL FUNCTIONAL SYMBOL TILDE DIAERESIS
+ { 0x2369, BIDI_L }, // APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS
+ { 0x236A, BIDI_L }, // APL FUNCTIONAL SYMBOL COMMA BAR
+ { 0x236B, BIDI_L }, // APL FUNCTIONAL SYMBOL DEL TILDE
+ { 0x236C, BIDI_L }, // APL FUNCTIONAL SYMBOL ZILDE
+ { 0x236D, BIDI_L }, // APL FUNCTIONAL SYMBOL STILE TILDE
+ { 0x236E, BIDI_L }, // APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR
+ { 0x236F, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD NOT EQUAL
+ { 0x2370, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD QUESTION
+ { 0x2371, BIDI_L }, // APL FUNCTIONAL SYMBOL DOWN CARET TILDE
+ { 0x2372, BIDI_L }, // APL FUNCTIONAL SYMBOL UP CARET TILDE
+ { 0x2373, BIDI_L }, // APL FUNCTIONAL SYMBOL IOTA
+ { 0x2374, BIDI_L }, // APL FUNCTIONAL SYMBOL RHO
+ { 0x2375, BIDI_L }, // APL FUNCTIONAL SYMBOL OMEGA
+ { 0x2376, BIDI_L }, // APL FUNCTIONAL SYMBOL ALPHA UNDERBAR
+ { 0x2377, BIDI_L }, // APL FUNCTIONAL SYMBOL EPSILON UNDERBAR
+ { 0x2378, BIDI_L }, // APL FUNCTIONAL SYMBOL IOTA UNDERBAR
+ { 0x2379, BIDI_L }, // APL FUNCTIONAL SYMBOL OMEGA UNDERBAR
+ { 0x237A, BIDI_L }, // APL FUNCTIONAL SYMBOL ALPHA
+ { 0x237B, BIDI_ON }, // NOT CHECK MARK
+ { 0x237C, BIDI_ON }, // RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+ { 0x237D, BIDI_ON }, // SHOULDERED OPEN BOX
+ { 0x237E, BIDI_ON }, // BELL SYMBOL
+ { 0x237F, BIDI_ON }, // VERTICAL LINE WITH MIDDLE DOT
+ { 0x2380, BIDI_ON }, // INSERTION SYMBOL
+ { 0x2381, BIDI_ON }, // CONTINUOUS UNDERLINE SYMBOL
+ { 0x2382, BIDI_ON }, // DISCONTINUOUS UNDERLINE SYMBOL
+ { 0x2383, BIDI_ON }, // EMPHASIS SYMBOL
+ { 0x2384, BIDI_ON }, // COMPOSITION SYMBOL
+ { 0x2385, BIDI_ON }, // WHITE SQUARE WITH CENTRE VERTICAL LINE
+ { 0x2386, BIDI_ON }, // ENTER SYMBOL
+ { 0x2387, BIDI_ON }, // ALTERNATIVE KEY SYMBOL
+ { 0x2388, BIDI_ON }, // HELM SYMBOL
+ { 0x2389, BIDI_ON }, // CIRCLED HORIZONTAL BAR WITH NOTCH
+ { 0x238A, BIDI_ON }, // CIRCLED TRIANGLE DOWN
+ { 0x238B, BIDI_ON }, // BROKEN CIRCLE WITH NORTHWEST ARROW
+ { 0x238C, BIDI_ON }, // UNDO SYMBOL
+ { 0x238D, BIDI_ON }, // MONOSTABLE SYMBOL
+ { 0x238E, BIDI_ON }, // HYSTERESIS SYMBOL
+ { 0x238F, BIDI_ON }, // OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL
+ { 0x2390, BIDI_ON }, // OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL
+ { 0x2391, BIDI_ON }, // PASSIVE-PULL-DOWN-OUTPUT SYMBOL
+ { 0x2392, BIDI_ON }, // PASSIVE-PULL-UP-OUTPUT SYMBOL
+ { 0x2393, BIDI_ON }, // DIRECT CURRENT SYMBOL FORM TWO
+ { 0x2394, BIDI_ON }, // SOFTWARE-FUNCTION SYMBOL
+ { 0x2395, BIDI_L }, // APL FUNCTIONAL SYMBOL QUAD
+ { 0x2396, BIDI_ON }, // DECIMAL SEPARATOR KEY SYMBOL
+ { 0x2397, BIDI_ON }, // PREVIOUS PAGE
+ { 0x2398, BIDI_ON }, // NEXT PAGE
+ { 0x2399, BIDI_ON }, // PRINT SCREEN SYMBOL
+ { 0x239A, BIDI_ON }, // CLEAR SCREEN SYMBOL
+ { 0x239B, BIDI_ON }, // LEFT PARENTHESIS UPPER HOOK
+ { 0x239C, BIDI_ON }, // LEFT PARENTHESIS EXTENSION
+ { 0x239D, BIDI_ON }, // LEFT PARENTHESIS LOWER HOOK
+ { 0x239E, BIDI_ON }, // RIGHT PARENTHESIS UPPER HOOK
+ { 0x239F, BIDI_ON }, // RIGHT PARENTHESIS EXTENSION
+ { 0x23A0, BIDI_ON }, // RIGHT PARENTHESIS LOWER HOOK
+ { 0x23A1, BIDI_ON }, // LEFT SQUARE BRACKET UPPER CORNER
+ { 0x23A2, BIDI_ON }, // LEFT SQUARE BRACKET EXTENSION
+ { 0x23A3, BIDI_ON }, // LEFT SQUARE BRACKET LOWER CORNER
+ { 0x23A4, BIDI_ON }, // RIGHT SQUARE BRACKET UPPER CORNER
+ { 0x23A5, BIDI_ON }, // RIGHT SQUARE BRACKET EXTENSION
+ { 0x23A6, BIDI_ON }, // RIGHT SQUARE BRACKET LOWER CORNER
+ { 0x23A7, BIDI_ON }, // LEFT CURLY BRACKET UPPER HOOK
+ { 0x23A8, BIDI_ON }, // LEFT CURLY BRACKET MIDDLE PIECE
+ { 0x23A9, BIDI_ON }, // LEFT CURLY BRACKET LOWER HOOK
+ { 0x23AA, BIDI_ON }, // CURLY BRACKET EXTENSION
+ { 0x23AB, BIDI_ON }, // RIGHT CURLY BRACKET UPPER HOOK
+ { 0x23AC, BIDI_ON }, // RIGHT CURLY BRACKET MIDDLE PIECE
+ { 0x23AD, BIDI_ON }, // RIGHT CURLY BRACKET LOWER HOOK
+ { 0x23AE, BIDI_ON }, // INTEGRAL EXTENSION
+ { 0x23AF, BIDI_ON }, // HORIZONTAL LINE EXTENSION
+ { 0x23B0, BIDI_ON }, // UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION
+ { 0x23B1, BIDI_ON }, // UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION
+ { 0x23B2, BIDI_ON }, // SUMMATION TOP
+ { 0x23B3, BIDI_ON }, // SUMMATION BOTTOM
+ { 0x23B4, BIDI_ON }, // TOP SQUARE BRACKET
+ { 0x23B5, BIDI_ON }, // BOTTOM SQUARE BRACKET
+ { 0x23B6, BIDI_ON }, // BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET
+ { 0x23B7, BIDI_ON }, // RADICAL SYMBOL BOTTOM
+ { 0x23B8, BIDI_ON }, // LEFT VERTICAL BOX LINE
+ { 0x23B9, BIDI_ON }, // RIGHT VERTICAL BOX LINE
+ { 0x23BA, BIDI_ON }, // HORIZONTAL SCAN LINE-1
+ { 0x23BB, BIDI_ON }, // HORIZONTAL SCAN LINE-3
+ { 0x23BC, BIDI_ON }, // HORIZONTAL SCAN LINE-7
+ { 0x23BD, BIDI_ON }, // HORIZONTAL SCAN LINE-9
+ { 0x23BE, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT
+ { 0x23BF, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT
+ { 0x23C0, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE
+ { 0x23C1, BIDI_ON }, // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE
+ { 0x23C2, BIDI_ON }, // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE
+ { 0x23C3, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE
+ { 0x23C4, BIDI_ON }, // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE
+ { 0x23C5, BIDI_ON }, // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE
+ { 0x23C6, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE
+ { 0x23C7, BIDI_ON }, // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE
+ { 0x23C8, BIDI_ON }, // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE
+ { 0x23C9, BIDI_ON }, // DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL
+ { 0x23CA, BIDI_ON }, // DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL
+ { 0x23CB, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT
+ { 0x23CC, BIDI_ON }, // DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT
+ { 0x23CD, BIDI_ON }, // SQUARE FOOT
+ { 0x23CE, BIDI_ON }, // RETURN SYMBOL
+ { 0x23CF, BIDI_ON }, // EJECT SYMBOL
+ { 0x23D0, BIDI_ON }, // VERTICAL LINE EXTENSION
+ { 0x23D1, BIDI_ON }, // METRICAL BREVE
+ { 0x23D2, BIDI_ON }, // METRICAL LONG OVER SHORT
+ { 0x23D3, BIDI_ON }, // METRICAL SHORT OVER LONG
+ { 0x23D4, BIDI_ON }, // METRICAL LONG OVER TWO SHORTS
+ { 0x23D5, BIDI_ON }, // METRICAL TWO SHORTS OVER LONG
+ { 0x23D6, BIDI_ON }, // METRICAL TWO SHORTS JOINED
+ { 0x23D7, BIDI_ON }, // METRICAL TRISEME
+ { 0x23D8, BIDI_ON }, // METRICAL TETRASEME
+ { 0x23D9, BIDI_ON }, // METRICAL PENTASEME
+ { 0x23DA, BIDI_ON }, // EARTH GROUND
+ { 0x23DB, BIDI_ON }, // FUSE
+ { 0x23DC, BIDI_ON }, // TOP PARENTHESIS
+ { 0x23DD, BIDI_ON }, // BOTTOM PARENTHESIS
+ { 0x23DE, BIDI_ON }, // TOP CURLY BRACKET
+ { 0x23DF, BIDI_ON }, // BOTTOM CURLY BRACKET
+ { 0x23E0, BIDI_ON }, // TOP TORTOISE SHELL BRACKET
+ { 0x23E1, BIDI_ON }, // BOTTOM TORTOISE SHELL BRACKET
+ { 0x23E2, BIDI_ON }, // WHITE TRAPEZIUM
+ { 0x23E3, BIDI_ON }, // BENZENE RING WITH CIRCLE
+ { 0x23E4, BIDI_ON }, // STRAIGHTNESS
+ { 0x23E5, BIDI_ON }, // FLATNESS
+ { 0x23E6, BIDI_ON }, // AC CURRENT
+ { 0x23E7, BIDI_ON }, // ELECTRICAL INTERSECTION
+ { 0x23E8, BIDI_ON }, // DECIMAL EXPONENT SYMBOL
+ { 0x23E9, BIDI_ON }, // BLACK RIGHT-POINTING DOUBLE TRIANGLE
+ { 0x23EA, BIDI_ON }, // BLACK LEFT-POINTING DOUBLE TRIANGLE
+ { 0x23EB, BIDI_ON }, // BLACK UP-POINTING DOUBLE TRIANGLE
+ { 0x23EC, BIDI_ON }, // BLACK DOWN-POINTING DOUBLE TRIANGLE
+ { 0x23ED, BIDI_ON }, // BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+ { 0x23EE, BIDI_ON }, // BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+ { 0x23EF, BIDI_ON }, // BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+ { 0x23F0, BIDI_ON }, // ALARM CLOCK
+ { 0x23F1, BIDI_ON }, // STOPWATCH
+ { 0x23F2, BIDI_ON }, // TIMER CLOCK
+ { 0x23F3, BIDI_ON }, // HOURGLASS WITH FLOWING SAND
+ { 0x23F4, BIDI_ON }, // BLACK MEDIUM LEFT-POINTING TRIANGLE
+ { 0x23F5, BIDI_ON }, // BLACK MEDIUM RIGHT-POINTING TRIANGLE
+ { 0x23F6, BIDI_ON }, // BLACK MEDIUM UP-POINTING TRIANGLE
+ { 0x23F7, BIDI_ON }, // BLACK MEDIUM DOWN-POINTING TRIANGLE
+ { 0x23F8, BIDI_ON }, // DOUBLE VERTICAL BAR
+ { 0x23F9, BIDI_ON }, // BLACK SQUARE FOR STOP
+ { 0x23FA, BIDI_ON }, // BLACK CIRCLE FOR RECORD
+ { 0x2400, BIDI_ON }, // SYMBOL FOR NULL
+ { 0x2401, BIDI_ON }, // SYMBOL FOR START OF HEADING
+ { 0x2402, BIDI_ON }, // SYMBOL FOR START OF TEXT
+ { 0x2403, BIDI_ON }, // SYMBOL FOR END OF TEXT
+ { 0x2404, BIDI_ON }, // SYMBOL FOR END OF TRANSMISSION
+ { 0x2405, BIDI_ON }, // SYMBOL FOR ENQUIRY
+ { 0x2406, BIDI_ON }, // SYMBOL FOR ACKNOWLEDGE
+ { 0x2407, BIDI_ON }, // SYMBOL FOR BELL
+ { 0x2408, BIDI_ON }, // SYMBOL FOR BACKSPACE
+ { 0x2409, BIDI_ON }, // SYMBOL FOR HORIZONTAL TABULATION
+ { 0x240A, BIDI_ON }, // SYMBOL FOR LINE FEED
+ { 0x240B, BIDI_ON }, // SYMBOL FOR VERTICAL TABULATION
+ { 0x240C, BIDI_ON }, // SYMBOL FOR FORM FEED
+ { 0x240D, BIDI_ON }, // SYMBOL FOR CARRIAGE RETURN
+ { 0x240E, BIDI_ON }, // SYMBOL FOR SHIFT OUT
+ { 0x240F, BIDI_ON }, // SYMBOL FOR SHIFT IN
+ { 0x2410, BIDI_ON }, // SYMBOL FOR DATA LINK ESCAPE
+ { 0x2411, BIDI_ON }, // SYMBOL FOR DEVICE CONTROL ONE
+ { 0x2412, BIDI_ON }, // SYMBOL FOR DEVICE CONTROL TWO
+ { 0x2413, BIDI_ON }, // SYMBOL FOR DEVICE CONTROL THREE
+ { 0x2414, BIDI_ON }, // SYMBOL FOR DEVICE CONTROL FOUR
+ { 0x2415, BIDI_ON }, // SYMBOL FOR NEGATIVE ACKNOWLEDGE
+ { 0x2416, BIDI_ON }, // SYMBOL FOR SYNCHRONOUS IDLE
+ { 0x2417, BIDI_ON }, // SYMBOL FOR END OF TRANSMISSION BLOCK
+ { 0x2418, BIDI_ON }, // SYMBOL FOR CANCEL
+ { 0x2419, BIDI_ON }, // SYMBOL FOR END OF MEDIUM
+ { 0x241A, BIDI_ON }, // SYMBOL FOR SUBSTITUTE
+ { 0x241B, BIDI_ON }, // SYMBOL FOR ESCAPE
+ { 0x241C, BIDI_ON }, // SYMBOL FOR FILE SEPARATOR
+ { 0x241D, BIDI_ON }, // SYMBOL FOR GROUP SEPARATOR
+ { 0x241E, BIDI_ON }, // SYMBOL FOR RECORD SEPARATOR
+ { 0x241F, BIDI_ON }, // SYMBOL FOR UNIT SEPARATOR
+ { 0x2420, BIDI_ON }, // SYMBOL FOR SPACE
+ { 0x2421, BIDI_ON }, // SYMBOL FOR DELETE
+ { 0x2422, BIDI_ON }, // BLANK SYMBOL
+ { 0x2423, BIDI_ON }, // OPEN BOX
+ { 0x2424, BIDI_ON }, // SYMBOL FOR NEWLINE
+ { 0x2425, BIDI_ON }, // SYMBOL FOR DELETE FORM TWO
+ { 0x2426, BIDI_ON }, // SYMBOL FOR SUBSTITUTE FORM TWO
+ { 0x2440, BIDI_ON }, // OCR HOOK
+ { 0x2441, BIDI_ON }, // OCR CHAIR
+ { 0x2442, BIDI_ON }, // OCR FORK
+ { 0x2443, BIDI_ON }, // OCR INVERTED FORK
+ { 0x2444, BIDI_ON }, // OCR BELT BUCKLE
+ { 0x2445, BIDI_ON }, // OCR BOW TIE
+ { 0x2446, BIDI_ON }, // OCR BRANCH BANK IDENTIFICATION
+ { 0x2447, BIDI_ON }, // OCR AMOUNT OF CHECK
+ { 0x2448, BIDI_ON }, // OCR DASH
+ { 0x2449, BIDI_ON }, // OCR CUSTOMER ACCOUNT NUMBER
+ { 0x244A, BIDI_ON }, // OCR DOUBLE BACKSLASH
+ { 0x2460, BIDI_ON }, // CIRCLED DIGIT ONE
+ { 0x2461, BIDI_ON }, // CIRCLED DIGIT TWO
+ { 0x2462, BIDI_ON }, // CIRCLED DIGIT THREE
+ { 0x2463, BIDI_ON }, // CIRCLED DIGIT FOUR
+ { 0x2464, BIDI_ON }, // CIRCLED DIGIT FIVE
+ { 0x2465, BIDI_ON }, // CIRCLED DIGIT SIX
+ { 0x2466, BIDI_ON }, // CIRCLED DIGIT SEVEN
+ { 0x2467, BIDI_ON }, // CIRCLED DIGIT EIGHT
+ { 0x2468, BIDI_ON }, // CIRCLED DIGIT NINE
+ { 0x2469, BIDI_ON }, // CIRCLED NUMBER TEN
+ { 0x246A, BIDI_ON }, // CIRCLED NUMBER ELEVEN
+ { 0x246B, BIDI_ON }, // CIRCLED NUMBER TWELVE
+ { 0x246C, BIDI_ON }, // CIRCLED NUMBER THIRTEEN
+ { 0x246D, BIDI_ON }, // CIRCLED NUMBER FOURTEEN
+ { 0x246E, BIDI_ON }, // CIRCLED NUMBER FIFTEEN
+ { 0x246F, BIDI_ON }, // CIRCLED NUMBER SIXTEEN
+ { 0x2470, BIDI_ON }, // CIRCLED NUMBER SEVENTEEN
+ { 0x2471, BIDI_ON }, // CIRCLED NUMBER EIGHTEEN
+ { 0x2472, BIDI_ON }, // CIRCLED NUMBER NINETEEN
+ { 0x2473, BIDI_ON }, // CIRCLED NUMBER TWENTY
+ { 0x2474, BIDI_ON }, // PARENTHESIZED DIGIT ONE
+ { 0x2475, BIDI_ON }, // PARENTHESIZED DIGIT TWO
+ { 0x2476, BIDI_ON }, // PARENTHESIZED DIGIT THREE
+ { 0x2477, BIDI_ON }, // PARENTHESIZED DIGIT FOUR
+ { 0x2478, BIDI_ON }, // PARENTHESIZED DIGIT FIVE
+ { 0x2479, BIDI_ON }, // PARENTHESIZED DIGIT SIX
+ { 0x247A, BIDI_ON }, // PARENTHESIZED DIGIT SEVEN
+ { 0x247B, BIDI_ON }, // PARENTHESIZED DIGIT EIGHT
+ { 0x247C, BIDI_ON }, // PARENTHESIZED DIGIT NINE
+ { 0x247D, BIDI_ON }, // PARENTHESIZED NUMBER TEN
+ { 0x247E, BIDI_ON }, // PARENTHESIZED NUMBER ELEVEN
+ { 0x247F, BIDI_ON }, // PARENTHESIZED NUMBER TWELVE
+ { 0x2480, BIDI_ON }, // PARENTHESIZED NUMBER THIRTEEN
+ { 0x2481, BIDI_ON }, // PARENTHESIZED NUMBER FOURTEEN
+ { 0x2482, BIDI_ON }, // PARENTHESIZED NUMBER FIFTEEN
+ { 0x2483, BIDI_ON }, // PARENTHESIZED NUMBER SIXTEEN
+ { 0x2484, BIDI_ON }, // PARENTHESIZED NUMBER SEVENTEEN
+ { 0x2485, BIDI_ON }, // PARENTHESIZED NUMBER EIGHTEEN
+ { 0x2486, BIDI_ON }, // PARENTHESIZED NUMBER NINETEEN
+ { 0x2487, BIDI_ON }, // PARENTHESIZED NUMBER TWENTY
+ { 0x2488, BIDI_EN }, // DIGIT ONE FULL STOP
+ { 0x2489, BIDI_EN }, // DIGIT TWO FULL STOP
+ { 0x248A, BIDI_EN }, // DIGIT THREE FULL STOP
+ { 0x248B, BIDI_EN }, // DIGIT FOUR FULL STOP
+ { 0x248C, BIDI_EN }, // DIGIT FIVE FULL STOP
+ { 0x248D, BIDI_EN }, // DIGIT SIX FULL STOP
+ { 0x248E, BIDI_EN }, // DIGIT SEVEN FULL STOP
+ { 0x248F, BIDI_EN }, // DIGIT EIGHT FULL STOP
+ { 0x2490, BIDI_EN }, // DIGIT NINE FULL STOP
+ { 0x2491, BIDI_EN }, // NUMBER TEN FULL STOP
+ { 0x2492, BIDI_EN }, // NUMBER ELEVEN FULL STOP
+ { 0x2493, BIDI_EN }, // NUMBER TWELVE FULL STOP
+ { 0x2494, BIDI_EN }, // NUMBER THIRTEEN FULL STOP
+ { 0x2495, BIDI_EN }, // NUMBER FOURTEEN FULL STOP
+ { 0x2496, BIDI_EN }, // NUMBER FIFTEEN FULL STOP
+ { 0x2497, BIDI_EN }, // NUMBER SIXTEEN FULL STOP
+ { 0x2498, BIDI_EN }, // NUMBER SEVENTEEN FULL STOP
+ { 0x2499, BIDI_EN }, // NUMBER EIGHTEEN FULL STOP
+ { 0x249A, BIDI_EN }, // NUMBER NINETEEN FULL STOP
+ { 0x249B, BIDI_EN }, // NUMBER TWENTY FULL STOP
+ { 0x249C, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER A
+ { 0x249D, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER B
+ { 0x249E, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER C
+ { 0x249F, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER D
+ { 0x24A0, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER E
+ { 0x24A1, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER F
+ { 0x24A2, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER G
+ { 0x24A3, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER H
+ { 0x24A4, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER I
+ { 0x24A5, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER J
+ { 0x24A6, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER K
+ { 0x24A7, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER L
+ { 0x24A8, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER M
+ { 0x24A9, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER N
+ { 0x24AA, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER O
+ { 0x24AB, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER P
+ { 0x24AC, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER Q
+ { 0x24AD, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER R
+ { 0x24AE, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER S
+ { 0x24AF, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER T
+ { 0x24B0, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER U
+ { 0x24B1, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER V
+ { 0x24B2, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER W
+ { 0x24B3, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER X
+ { 0x24B4, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER Y
+ { 0x24B5, BIDI_L }, // PARENTHESIZED LATIN SMALL LETTER Z
+ { 0x24B6, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER A
+ { 0x24B7, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER B
+ { 0x24B8, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER C
+ { 0x24B9, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER D
+ { 0x24BA, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER E
+ { 0x24BB, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER F
+ { 0x24BC, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER G
+ { 0x24BD, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER H
+ { 0x24BE, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER I
+ { 0x24BF, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER J
+ { 0x24C0, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER K
+ { 0x24C1, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER L
+ { 0x24C2, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER M
+ { 0x24C3, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER N
+ { 0x24C4, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER O
+ { 0x24C5, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER P
+ { 0x24C6, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER Q
+ { 0x24C7, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER R
+ { 0x24C8, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER S
+ { 0x24C9, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER T
+ { 0x24CA, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER U
+ { 0x24CB, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER V
+ { 0x24CC, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER W
+ { 0x24CD, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER X
+ { 0x24CE, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER Y
+ { 0x24CF, BIDI_L }, // CIRCLED LATIN CAPITAL LETTER Z
+ { 0x24D0, BIDI_L }, // CIRCLED LATIN SMALL LETTER A
+ { 0x24D1, BIDI_L }, // CIRCLED LATIN SMALL LETTER B
+ { 0x24D2, BIDI_L }, // CIRCLED LATIN SMALL LETTER C
+ { 0x24D3, BIDI_L }, // CIRCLED LATIN SMALL LETTER D
+ { 0x24D4, BIDI_L }, // CIRCLED LATIN SMALL LETTER E
+ { 0x24D5, BIDI_L }, // CIRCLED LATIN SMALL LETTER F
+ { 0x24D6, BIDI_L }, // CIRCLED LATIN SMALL LETTER G
+ { 0x24D7, BIDI_L }, // CIRCLED LATIN SMALL LETTER H
+ { 0x24D8, BIDI_L }, // CIRCLED LATIN SMALL LETTER I
+ { 0x24D9, BIDI_L }, // CIRCLED LATIN SMALL LETTER J
+ { 0x24DA, BIDI_L }, // CIRCLED LATIN SMALL LETTER K
+ { 0x24DB, BIDI_L }, // CIRCLED LATIN SMALL LETTER L
+ { 0x24DC, BIDI_L }, // CIRCLED LATIN SMALL LETTER M
+ { 0x24DD, BIDI_L }, // CIRCLED LATIN SMALL LETTER N
+ { 0x24DE, BIDI_L }, // CIRCLED LATIN SMALL LETTER O
+ { 0x24DF, BIDI_L }, // CIRCLED LATIN SMALL LETTER P
+ { 0x24E0, BIDI_L }, // CIRCLED LATIN SMALL LETTER Q
+ { 0x24E1, BIDI_L }, // CIRCLED LATIN SMALL LETTER R
+ { 0x24E2, BIDI_L }, // CIRCLED LATIN SMALL LETTER S
+ { 0x24E3, BIDI_L }, // CIRCLED LATIN SMALL LETTER T
+ { 0x24E4, BIDI_L }, // CIRCLED LATIN SMALL LETTER U
+ { 0x24E5, BIDI_L }, // CIRCLED LATIN SMALL LETTER V
+ { 0x24E6, BIDI_L }, // CIRCLED LATIN SMALL LETTER W
+ { 0x24E7, BIDI_L }, // CIRCLED LATIN SMALL LETTER X
+ { 0x24E8, BIDI_L }, // CIRCLED LATIN SMALL LETTER Y
+ { 0x24E9, BIDI_L }, // CIRCLED LATIN SMALL LETTER Z
+ { 0x24EA, BIDI_ON }, // CIRCLED DIGIT ZERO
+ { 0x24EB, BIDI_ON }, // NEGATIVE CIRCLED NUMBER ELEVEN
+ { 0x24EC, BIDI_ON }, // NEGATIVE CIRCLED NUMBER TWELVE
+ { 0x24ED, BIDI_ON }, // NEGATIVE CIRCLED NUMBER THIRTEEN
+ { 0x24EE, BIDI_ON }, // NEGATIVE CIRCLED NUMBER FOURTEEN
+ { 0x24EF, BIDI_ON }, // NEGATIVE CIRCLED NUMBER FIFTEEN
+ { 0x24F0, BIDI_ON }, // NEGATIVE CIRCLED NUMBER SIXTEEN
+ { 0x24F1, BIDI_ON }, // NEGATIVE CIRCLED NUMBER SEVENTEEN
+ { 0x24F2, BIDI_ON }, // NEGATIVE CIRCLED NUMBER EIGHTEEN
+ { 0x24F3, BIDI_ON }, // NEGATIVE CIRCLED NUMBER NINETEEN
+ { 0x24F4, BIDI_ON }, // NEGATIVE CIRCLED NUMBER TWENTY
+ { 0x24F5, BIDI_ON }, // DOUBLE CIRCLED DIGIT ONE
+ { 0x24F6, BIDI_ON }, // DOUBLE CIRCLED DIGIT TWO
+ { 0x24F7, BIDI_ON }, // DOUBLE CIRCLED DIGIT THREE
+ { 0x24F8, BIDI_ON }, // DOUBLE CIRCLED DIGIT FOUR
+ { 0x24F9, BIDI_ON }, // DOUBLE CIRCLED DIGIT FIVE
+ { 0x24FA, BIDI_ON }, // DOUBLE CIRCLED DIGIT SIX
+ { 0x24FB, BIDI_ON }, // DOUBLE CIRCLED DIGIT SEVEN
+ { 0x24FC, BIDI_ON }, // DOUBLE CIRCLED DIGIT EIGHT
+ { 0x24FD, BIDI_ON }, // DOUBLE CIRCLED DIGIT NINE
+ { 0x24FE, BIDI_ON }, // DOUBLE CIRCLED NUMBER TEN
+ { 0x24FF, BIDI_ON }, // NEGATIVE CIRCLED DIGIT ZERO
+ { 0x2500, BIDI_ON }, // BOX DRAWINGS LIGHT HORIZONTAL
+ { 0x2501, BIDI_ON }, // BOX DRAWINGS HEAVY HORIZONTAL
+ { 0x2502, BIDI_ON }, // BOX DRAWINGS LIGHT VERTICAL
+ { 0x2503, BIDI_ON }, // BOX DRAWINGS HEAVY VERTICAL
+ { 0x2504, BIDI_ON }, // BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+ { 0x2505, BIDI_ON }, // BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+ { 0x2506, BIDI_ON }, // BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+ { 0x2507, BIDI_ON }, // BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+ { 0x2508, BIDI_ON }, // BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+ { 0x2509, BIDI_ON }, // BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+ { 0x250A, BIDI_ON }, // BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+ { 0x250B, BIDI_ON }, // BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+ { 0x250C, BIDI_ON }, // BOX DRAWINGS LIGHT DOWN AND RIGHT
+ { 0x250D, BIDI_ON }, // BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+ { 0x250E, BIDI_ON }, // BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+ { 0x250F, BIDI_ON }, // BOX DRAWINGS HEAVY DOWN AND RIGHT
+ { 0x2510, BIDI_ON }, // BOX DRAWINGS LIGHT DOWN AND LEFT
+ { 0x2511, BIDI_ON }, // BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+ { 0x2512, BIDI_ON }, // BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+ { 0x2513, BIDI_ON }, // BOX DRAWINGS HEAVY DOWN AND LEFT
+ { 0x2514, BIDI_ON }, // BOX DRAWINGS LIGHT UP AND RIGHT
+ { 0x2515, BIDI_ON }, // BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+ { 0x2516, BIDI_ON }, // BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+ { 0x2517, BIDI_ON }, // BOX DRAWINGS HEAVY UP AND RIGHT
+ { 0x2518, BIDI_ON }, // BOX DRAWINGS LIGHT UP AND LEFT
+ { 0x2519, BIDI_ON }, // BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+ { 0x251A, BIDI_ON }, // BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+ { 0x251B, BIDI_ON }, // BOX DRAWINGS HEAVY UP AND LEFT
+ { 0x251C, BIDI_ON }, // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ { 0x251D, BIDI_ON }, // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+ { 0x251E, BIDI_ON }, // BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
+ { 0x251F, BIDI_ON }, // BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
+ { 0x2520, BIDI_ON }, // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+ { 0x2521, BIDI_ON }, // BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
+ { 0x2522, BIDI_ON }, // BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
+ { 0x2523, BIDI_ON }, // BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+ { 0x2524, BIDI_ON }, // BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ { 0x2525, BIDI_ON }, // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+ { 0x2526, BIDI_ON }, // BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
+ { 0x2527, BIDI_ON }, // BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
+ { 0x2528, BIDI_ON }, // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+ { 0x2529, BIDI_ON }, // BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
+ { 0x252A, BIDI_ON }, // BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
+ { 0x252B, BIDI_ON }, // BOX DRAWINGS HEAVY VERTICAL AND LEFT
+ { 0x252C, BIDI_ON }, // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ { 0x252D, BIDI_ON }, // BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
+ { 0x252E, BIDI_ON }, // BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
+ { 0x252F, BIDI_ON }, // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+ { 0x2530, BIDI_ON }, // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+ { 0x2531, BIDI_ON }, // BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
+ { 0x2532, BIDI_ON }, // BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
+ { 0x2533, BIDI_ON }, // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+ { 0x2534, BIDI_ON }, // BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ { 0x2535, BIDI_ON }, // BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
+ { 0x2536, BIDI_ON }, // BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
+ { 0x2537, BIDI_ON }, // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+ { 0x2538, BIDI_ON }, // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+ { 0x2539, BIDI_ON }, // BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
+ { 0x253A, BIDI_ON }, // BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
+ { 0x253B, BIDI_ON }, // BOX DRAWINGS HEAVY UP AND HORIZONTAL
+ { 0x253C, BIDI_ON }, // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ { 0x253D, BIDI_ON }, // BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
+ { 0x253E, BIDI_ON }, // BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
+ { 0x253F, BIDI_ON }, // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+ { 0x2540, BIDI_ON }, // BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
+ { 0x2541, BIDI_ON }, // BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
+ { 0x2542, BIDI_ON }, // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+ { 0x2543, BIDI_ON }, // BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
+ { 0x2544, BIDI_ON }, // BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
+ { 0x2545, BIDI_ON }, // BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
+ { 0x2546, BIDI_ON }, // BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
+ { 0x2547, BIDI_ON }, // BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
+ { 0x2548, BIDI_ON }, // BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
+ { 0x2549, BIDI_ON }, // BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
+ { 0x254A, BIDI_ON }, // BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
+ { 0x254B, BIDI_ON }, // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+ { 0x254C, BIDI_ON }, // BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+ { 0x254D, BIDI_ON }, // BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
+ { 0x254E, BIDI_ON }, // BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
+ { 0x254F, BIDI_ON }, // BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
+ { 0x2550, BIDI_ON }, // BOX DRAWINGS DOUBLE HORIZONTAL
+ { 0x2551, BIDI_ON }, // BOX DRAWINGS DOUBLE VERTICAL
+ { 0x2552, BIDI_ON }, // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ { 0x2553, BIDI_ON }, // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ { 0x2554, BIDI_ON }, // BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ { 0x2555, BIDI_ON }, // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ { 0x2556, BIDI_ON }, // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ { 0x2557, BIDI_ON }, // BOX DRAWINGS DOUBLE DOWN AND LEFT
+ { 0x2558, BIDI_ON }, // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ { 0x2559, BIDI_ON }, // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ { 0x255A, BIDI_ON }, // BOX DRAWINGS DOUBLE UP AND RIGHT
+ { 0x255B, BIDI_ON }, // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ { 0x255C, BIDI_ON }, // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ { 0x255D, BIDI_ON }, // BOX DRAWINGS DOUBLE UP AND LEFT
+ { 0x255E, BIDI_ON }, // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ { 0x255F, BIDI_ON }, // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ { 0x2560, BIDI_ON }, // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ { 0x2561, BIDI_ON }, // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ { 0x2562, BIDI_ON }, // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ { 0x2563, BIDI_ON }, // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ { 0x2564, BIDI_ON }, // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ { 0x2565, BIDI_ON }, // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ { 0x2566, BIDI_ON }, // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ { 0x2567, BIDI_ON }, // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ { 0x2568, BIDI_ON }, // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ { 0x2569, BIDI_ON }, // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ { 0x256A, BIDI_ON }, // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ { 0x256B, BIDI_ON }, // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ { 0x256C, BIDI_ON }, // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ { 0x256D, BIDI_ON }, // BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+ { 0x256E, BIDI_ON }, // BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+ { 0x256F, BIDI_ON }, // BOX DRAWINGS LIGHT ARC UP AND LEFT
+ { 0x2570, BIDI_ON }, // BOX DRAWINGS LIGHT ARC UP AND RIGHT
+ { 0x2571, BIDI_ON }, // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+ { 0x2572, BIDI_ON }, // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+ { 0x2573, BIDI_ON }, // BOX DRAWINGS LIGHT DIAGONAL CROSS
+ { 0x2574, BIDI_ON }, // BOX DRAWINGS LIGHT LEFT
+ { 0x2575, BIDI_ON }, // BOX DRAWINGS LIGHT UP
+ { 0x2576, BIDI_ON }, // BOX DRAWINGS LIGHT RIGHT
+ { 0x2577, BIDI_ON }, // BOX DRAWINGS LIGHT DOWN
+ { 0x2578, BIDI_ON }, // BOX DRAWINGS HEAVY LEFT
+ { 0x2579, BIDI_ON }, // BOX DRAWINGS HEAVY UP
+ { 0x257A, BIDI_ON }, // BOX DRAWINGS HEAVY RIGHT
+ { 0x257B, BIDI_ON }, // BOX DRAWINGS HEAVY DOWN
+ { 0x257C, BIDI_ON }, // BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
+ { 0x257D, BIDI_ON }, // BOX DRAWINGS LIGHT UP AND HEAVY DOWN
+ { 0x257E, BIDI_ON }, // BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
+ { 0x257F, BIDI_ON }, // BOX DRAWINGS HEAVY UP AND LIGHT DOWN
+ { 0x2580, BIDI_ON }, // UPPER HALF BLOCK
+ { 0x2581, BIDI_ON }, // LOWER ONE EIGHTH BLOCK
+ { 0x2582, BIDI_ON }, // LOWER ONE QUARTER BLOCK
+ { 0x2583, BIDI_ON }, // LOWER THREE EIGHTHS BLOCK
+ { 0x2584, BIDI_ON }, // LOWER HALF BLOCK
+ { 0x2585, BIDI_ON }, // LOWER FIVE EIGHTHS BLOCK
+ { 0x2586, BIDI_ON }, // LOWER THREE QUARTERS BLOCK
+ { 0x2587, BIDI_ON }, // LOWER SEVEN EIGHTHS BLOCK
+ { 0x2588, BIDI_ON }, // FULL BLOCK
+ { 0x2589, BIDI_ON }, // LEFT SEVEN EIGHTHS BLOCK
+ { 0x258A, BIDI_ON }, // LEFT THREE QUARTERS BLOCK
+ { 0x258B, BIDI_ON }, // LEFT FIVE EIGHTHS BLOCK
+ { 0x258C, BIDI_ON }, // LEFT HALF BLOCK
+ { 0x258D, BIDI_ON }, // LEFT THREE EIGHTHS BLOCK
+ { 0x258E, BIDI_ON }, // LEFT ONE QUARTER BLOCK
+ { 0x258F, BIDI_ON }, // LEFT ONE EIGHTH BLOCK
+ { 0x2590, BIDI_ON }, // RIGHT HALF BLOCK
+ { 0x2591, BIDI_ON }, // LIGHT SHADE
+ { 0x2592, BIDI_ON }, // MEDIUM SHADE
+ { 0x2593, BIDI_ON }, // DARK SHADE
+ { 0x2594, BIDI_ON }, // UPPER ONE EIGHTH BLOCK
+ { 0x2595, BIDI_ON }, // RIGHT ONE EIGHTH BLOCK
+ { 0x2596, BIDI_ON }, // QUADRANT LOWER LEFT
+ { 0x2597, BIDI_ON }, // QUADRANT LOWER RIGHT
+ { 0x2598, BIDI_ON }, // QUADRANT UPPER LEFT
+ { 0x2599, BIDI_ON }, // QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
+ { 0x259A, BIDI_ON }, // QUADRANT UPPER LEFT AND LOWER RIGHT
+ { 0x259B, BIDI_ON }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
+ { 0x259C, BIDI_ON }, // QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
+ { 0x259D, BIDI_ON }, // QUADRANT UPPER RIGHT
+ { 0x259E, BIDI_ON }, // QUADRANT UPPER RIGHT AND LOWER LEFT
+ { 0x259F, BIDI_ON }, // QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+ { 0x25A0, BIDI_ON }, // BLACK SQUARE
+ { 0x25A1, BIDI_ON }, // WHITE SQUARE
+ { 0x25A2, BIDI_ON }, // WHITE SQUARE WITH ROUNDED CORNERS
+ { 0x25A3, BIDI_ON }, // WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+ { 0x25A4, BIDI_ON }, // SQUARE WITH HORIZONTAL FILL
+ { 0x25A5, BIDI_ON }, // SQUARE WITH VERTICAL FILL
+ { 0x25A6, BIDI_ON }, // SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+ { 0x25A7, BIDI_ON }, // SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+ { 0x25A8, BIDI_ON }, // SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+ { 0x25A9, BIDI_ON }, // SQUARE WITH DIAGONAL CROSSHATCH FILL
+ { 0x25AA, BIDI_ON }, // BLACK SMALL SQUARE
+ { 0x25AB, BIDI_ON }, // WHITE SMALL SQUARE
+ { 0x25AC, BIDI_ON }, // BLACK RECTANGLE
+ { 0x25AD, BIDI_ON }, // WHITE RECTANGLE
+ { 0x25AE, BIDI_ON }, // BLACK VERTICAL RECTANGLE
+ { 0x25AF, BIDI_ON }, // WHITE VERTICAL RECTANGLE
+ { 0x25B0, BIDI_ON }, // BLACK PARALLELOGRAM
+ { 0x25B1, BIDI_ON }, // WHITE PARALLELOGRAM
+ { 0x25B2, BIDI_ON }, // BLACK UP-POINTING TRIANGLE
+ { 0x25B3, BIDI_ON }, // WHITE UP-POINTING TRIANGLE
+ { 0x25B4, BIDI_ON }, // BLACK UP-POINTING SMALL TRIANGLE
+ { 0x25B5, BIDI_ON }, // WHITE UP-POINTING SMALL TRIANGLE
+ { 0x25B6, BIDI_ON }, // BLACK RIGHT-POINTING TRIANGLE
+ { 0x25B7, BIDI_ON }, // WHITE RIGHT-POINTING TRIANGLE
+ { 0x25B8, BIDI_ON }, // BLACK RIGHT-POINTING SMALL TRIANGLE
+ { 0x25B9, BIDI_ON }, // WHITE RIGHT-POINTING SMALL TRIANGLE
+ { 0x25BA, BIDI_ON }, // BLACK RIGHT-POINTING POINTER
+ { 0x25BB, BIDI_ON }, // WHITE RIGHT-POINTING POINTER
+ { 0x25BC, BIDI_ON }, // BLACK DOWN-POINTING TRIANGLE
+ { 0x25BD, BIDI_ON }, // WHITE DOWN-POINTING TRIANGLE
+ { 0x25BE, BIDI_ON }, // BLACK DOWN-POINTING SMALL TRIANGLE
+ { 0x25BF, BIDI_ON }, // WHITE DOWN-POINTING SMALL TRIANGLE
+ { 0x25C0, BIDI_ON }, // BLACK LEFT-POINTING TRIANGLE
+ { 0x25C1, BIDI_ON }, // WHITE LEFT-POINTING TRIANGLE
+ { 0x25C2, BIDI_ON }, // BLACK LEFT-POINTING SMALL TRIANGLE
+ { 0x25C3, BIDI_ON }, // WHITE LEFT-POINTING SMALL TRIANGLE
+ { 0x25C4, BIDI_ON }, // BLACK LEFT-POINTING POINTER
+ { 0x25C5, BIDI_ON }, // WHITE LEFT-POINTING POINTER
+ { 0x25C6, BIDI_ON }, // BLACK DIAMOND
+ { 0x25C7, BIDI_ON }, // WHITE DIAMOND
+ { 0x25C8, BIDI_ON }, // WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
+ { 0x25C9, BIDI_ON }, // FISHEYE
+ { 0x25CA, BIDI_ON }, // LOZENGE
+ { 0x25CB, BIDI_ON }, // WHITE CIRCLE
+ { 0x25CC, BIDI_ON }, // DOTTED CIRCLE
+ { 0x25CD, BIDI_ON }, // CIRCLE WITH VERTICAL FILL
+ { 0x25CE, BIDI_ON }, // BULLSEYE
+ { 0x25CF, BIDI_ON }, // BLACK CIRCLE
+ { 0x25D0, BIDI_ON }, // CIRCLE WITH LEFT HALF BLACK
+ { 0x25D1, BIDI_ON }, // CIRCLE WITH RIGHT HALF BLACK
+ { 0x25D2, BIDI_ON }, // CIRCLE WITH LOWER HALF BLACK
+ { 0x25D3, BIDI_ON }, // CIRCLE WITH UPPER HALF BLACK
+ { 0x25D4, BIDI_ON }, // CIRCLE WITH UPPER RIGHT QUADRANT BLACK
+ { 0x25D5, BIDI_ON }, // CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK
+ { 0x25D6, BIDI_ON }, // LEFT HALF BLACK CIRCLE
+ { 0x25D7, BIDI_ON }, // RIGHT HALF BLACK CIRCLE
+ { 0x25D8, BIDI_ON }, // INVERSE BULLET
+ { 0x25D9, BIDI_ON }, // INVERSE WHITE CIRCLE
+ { 0x25DA, BIDI_ON }, // UPPER HALF INVERSE WHITE CIRCLE
+ { 0x25DB, BIDI_ON }, // LOWER HALF INVERSE WHITE CIRCLE
+ { 0x25DC, BIDI_ON }, // UPPER LEFT QUADRANT CIRCULAR ARC
+ { 0x25DD, BIDI_ON }, // UPPER RIGHT QUADRANT CIRCULAR ARC
+ { 0x25DE, BIDI_ON }, // LOWER RIGHT QUADRANT CIRCULAR ARC
+ { 0x25DF, BIDI_ON }, // LOWER LEFT QUADRANT CIRCULAR ARC
+ { 0x25E0, BIDI_ON }, // UPPER HALF CIRCLE
+ { 0x25E1, BIDI_ON }, // LOWER HALF CIRCLE
+ { 0x25E2, BIDI_ON }, // BLACK LOWER RIGHT TRIANGLE
+ { 0x25E3, BIDI_ON }, // BLACK LOWER LEFT TRIANGLE
+ { 0x25E4, BIDI_ON }, // BLACK UPPER LEFT TRIANGLE
+ { 0x25E5, BIDI_ON }, // BLACK UPPER RIGHT TRIANGLE
+ { 0x25E6, BIDI_ON }, // WHITE BULLET
+ { 0x25E7, BIDI_ON }, // SQUARE WITH LEFT HALF BLACK
+ { 0x25E8, BIDI_ON }, // SQUARE WITH RIGHT HALF BLACK
+ { 0x25E9, BIDI_ON }, // SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK
+ { 0x25EA, BIDI_ON }, // SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK
+ { 0x25EB, BIDI_ON }, // WHITE SQUARE WITH VERTICAL BISECTING LINE
+ { 0x25EC, BIDI_ON }, // WHITE UP-POINTING TRIANGLE WITH DOT
+ { 0x25ED, BIDI_ON }, // UP-POINTING TRIANGLE WITH LEFT HALF BLACK
+ { 0x25EE, BIDI_ON }, // UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
+ { 0x25EF, BIDI_ON }, // LARGE CIRCLE
+ { 0x25F0, BIDI_ON }, // WHITE SQUARE WITH UPPER LEFT QUADRANT
+ { 0x25F1, BIDI_ON }, // WHITE SQUARE WITH LOWER LEFT QUADRANT
+ { 0x25F2, BIDI_ON }, // WHITE SQUARE WITH LOWER RIGHT QUADRANT
+ { 0x25F3, BIDI_ON }, // WHITE SQUARE WITH UPPER RIGHT QUADRANT
+ { 0x25F4, BIDI_ON }, // WHITE CIRCLE WITH UPPER LEFT QUADRANT
+ { 0x25F5, BIDI_ON }, // WHITE CIRCLE WITH LOWER LEFT QUADRANT
+ { 0x25F6, BIDI_ON }, // WHITE CIRCLE WITH LOWER RIGHT QUADRANT
+ { 0x25F7, BIDI_ON }, // WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+ { 0x25F8, BIDI_ON }, // UPPER LEFT TRIANGLE
+ { 0x25F9, BIDI_ON }, // UPPER RIGHT TRIANGLE
+ { 0x25FA, BIDI_ON }, // LOWER LEFT TRIANGLE
+ { 0x25FB, BIDI_ON }, // WHITE MEDIUM SQUARE
+ { 0x25FC, BIDI_ON }, // BLACK MEDIUM SQUARE
+ { 0x25FD, BIDI_ON }, // WHITE MEDIUM SMALL SQUARE
+ { 0x25FE, BIDI_ON }, // BLACK MEDIUM SMALL SQUARE
+ { 0x25FF, BIDI_ON }, // LOWER RIGHT TRIANGLE
+ { 0x2600, BIDI_ON }, // BLACK SUN WITH RAYS
+ { 0x2601, BIDI_ON }, // CLOUD
+ { 0x2602, BIDI_ON }, // UMBRELLA
+ { 0x2603, BIDI_ON }, // SNOWMAN
+ { 0x2604, BIDI_ON }, // COMET
+ { 0x2605, BIDI_ON }, // BLACK STAR
+ { 0x2606, BIDI_ON }, // WHITE STAR
+ { 0x2607, BIDI_ON }, // LIGHTNING
+ { 0x2608, BIDI_ON }, // THUNDERSTORM
+ { 0x2609, BIDI_ON }, // SUN
+ { 0x260A, BIDI_ON }, // ASCENDING NODE
+ { 0x260B, BIDI_ON }, // DESCENDING NODE
+ { 0x260C, BIDI_ON }, // CONJUNCTION
+ { 0x260D, BIDI_ON }, // OPPOSITION
+ { 0x260E, BIDI_ON }, // BLACK TELEPHONE
+ { 0x260F, BIDI_ON }, // WHITE TELEPHONE
+ { 0x2610, BIDI_ON }, // BALLOT BOX
+ { 0x2611, BIDI_ON }, // BALLOT BOX WITH CHECK
+ { 0x2612, BIDI_ON }, // BALLOT BOX WITH X
+ { 0x2613, BIDI_ON }, // SALTIRE
+ { 0x2614, BIDI_ON }, // UMBRELLA WITH RAIN DROPS
+ { 0x2615, BIDI_ON }, // HOT BEVERAGE
+ { 0x2616, BIDI_ON }, // WHITE SHOGI PIECE
+ { 0x2617, BIDI_ON }, // BLACK SHOGI PIECE
+ { 0x2618, BIDI_ON }, // SHAMROCK
+ { 0x2619, BIDI_ON }, // REVERSED ROTATED FLORAL HEART BULLET
+ { 0x261A, BIDI_ON }, // BLACK LEFT POINTING INDEX
+ { 0x261B, BIDI_ON }, // BLACK RIGHT POINTING INDEX
+ { 0x261C, BIDI_ON }, // WHITE LEFT POINTING INDEX
+ { 0x261D, BIDI_ON }, // WHITE UP POINTING INDEX
+ { 0x261E, BIDI_ON }, // WHITE RIGHT POINTING INDEX
+ { 0x261F, BIDI_ON }, // WHITE DOWN POINTING INDEX
+ { 0x2620, BIDI_ON }, // SKULL AND CROSSBONES
+ { 0x2621, BIDI_ON }, // CAUTION SIGN
+ { 0x2622, BIDI_ON }, // RADIOACTIVE SIGN
+ { 0x2623, BIDI_ON }, // BIOHAZARD SIGN
+ { 0x2624, BIDI_ON }, // CADUCEUS
+ { 0x2625, BIDI_ON }, // ANKH
+ { 0x2626, BIDI_ON }, // ORTHODOX CROSS
+ { 0x2627, BIDI_ON }, // CHI RHO
+ { 0x2628, BIDI_ON }, // CROSS OF LORRAINE
+ { 0x2629, BIDI_ON }, // CROSS OF JERUSALEM
+ { 0x262A, BIDI_ON }, // STAR AND CRESCENT
+ { 0x262B, BIDI_ON }, // FARSI SYMBOL
+ { 0x262C, BIDI_ON }, // ADI SHAKTI
+ { 0x262D, BIDI_ON }, // HAMMER AND SICKLE
+ { 0x262E, BIDI_ON }, // PEACE SYMBOL
+ { 0x262F, BIDI_ON }, // YIN YANG
+ { 0x2630, BIDI_ON }, // TRIGRAM FOR HEAVEN
+ { 0x2631, BIDI_ON }, // TRIGRAM FOR LAKE
+ { 0x2632, BIDI_ON }, // TRIGRAM FOR FIRE
+ { 0x2633, BIDI_ON }, // TRIGRAM FOR THUNDER
+ { 0x2634, BIDI_ON }, // TRIGRAM FOR WIND
+ { 0x2635, BIDI_ON }, // TRIGRAM FOR WATER
+ { 0x2636, BIDI_ON }, // TRIGRAM FOR MOUNTAIN
+ { 0x2637, BIDI_ON }, // TRIGRAM FOR EARTH
+ { 0x2638, BIDI_ON }, // WHEEL OF DHARMA
+ { 0x2639, BIDI_ON }, // WHITE FROWNING FACE
+ { 0x263A, BIDI_ON }, // WHITE SMILING FACE
+ { 0x263B, BIDI_ON }, // BLACK SMILING FACE
+ { 0x263C, BIDI_ON }, // WHITE SUN WITH RAYS
+ { 0x263D, BIDI_ON }, // FIRST QUARTER MOON
+ { 0x263E, BIDI_ON }, // LAST QUARTER MOON
+ { 0x263F, BIDI_ON }, // MERCURY
+ { 0x2640, BIDI_ON }, // FEMALE SIGN
+ { 0x2641, BIDI_ON }, // EARTH
+ { 0x2642, BIDI_ON }, // MALE SIGN
+ { 0x2643, BIDI_ON }, // JUPITER
+ { 0x2644, BIDI_ON }, // SATURN
+ { 0x2645, BIDI_ON }, // URANUS
+ { 0x2646, BIDI_ON }, // NEPTUNE
+ { 0x2647, BIDI_ON }, // PLUTO
+ { 0x2648, BIDI_ON }, // ARIES
+ { 0x2649, BIDI_ON }, // TAURUS
+ { 0x264A, BIDI_ON }, // GEMINI
+ { 0x264B, BIDI_ON }, // CANCER
+ { 0x264C, BIDI_ON }, // LEO
+ { 0x264D, BIDI_ON }, // VIRGO
+ { 0x264E, BIDI_ON }, // LIBRA
+ { 0x264F, BIDI_ON }, // SCORPIUS
+ { 0x2650, BIDI_ON }, // SAGITTARIUS
+ { 0x2651, BIDI_ON }, // CAPRICORN
+ { 0x2652, BIDI_ON }, // AQUARIUS
+ { 0x2653, BIDI_ON }, // PISCES
+ { 0x2654, BIDI_ON }, // WHITE CHESS KING
+ { 0x2655, BIDI_ON }, // WHITE CHESS QUEEN
+ { 0x2656, BIDI_ON }, // WHITE CHESS ROOK
+ { 0x2657, BIDI_ON }, // WHITE CHESS BISHOP
+ { 0x2658, BIDI_ON }, // WHITE CHESS KNIGHT
+ { 0x2659, BIDI_ON }, // WHITE CHESS PAWN
+ { 0x265A, BIDI_ON }, // BLACK CHESS KING
+ { 0x265B, BIDI_ON }, // BLACK CHESS QUEEN
+ { 0x265C, BIDI_ON }, // BLACK CHESS ROOK
+ { 0x265D, BIDI_ON }, // BLACK CHESS BISHOP
+ { 0x265E, BIDI_ON }, // BLACK CHESS KNIGHT
+ { 0x265F, BIDI_ON }, // BLACK CHESS PAWN
+ { 0x2660, BIDI_ON }, // BLACK SPADE SUIT
+ { 0x2661, BIDI_ON }, // WHITE HEART SUIT
+ { 0x2662, BIDI_ON }, // WHITE DIAMOND SUIT
+ { 0x2663, BIDI_ON }, // BLACK CLUB SUIT
+ { 0x2664, BIDI_ON }, // WHITE SPADE SUIT
+ { 0x2665, BIDI_ON }, // BLACK HEART SUIT
+ { 0x2666, BIDI_ON }, // BLACK DIAMOND SUIT
+ { 0x2667, BIDI_ON }, // WHITE CLUB SUIT
+ { 0x2668, BIDI_ON }, // HOT SPRINGS
+ { 0x2669, BIDI_ON }, // QUARTER NOTE
+ { 0x266A, BIDI_ON }, // EIGHTH NOTE
+ { 0x266B, BIDI_ON }, // BEAMED EIGHTH NOTES
+ { 0x266C, BIDI_ON }, // BEAMED SIXTEENTH NOTES
+ { 0x266D, BIDI_ON }, // MUSIC FLAT SIGN
+ { 0x266E, BIDI_ON }, // MUSIC NATURAL SIGN
+ { 0x266F, BIDI_ON }, // MUSIC SHARP SIGN
+ { 0x2670, BIDI_ON }, // WEST SYRIAC CROSS
+ { 0x2671, BIDI_ON }, // EAST SYRIAC CROSS
+ { 0x2672, BIDI_ON }, // UNIVERSAL RECYCLING SYMBOL
+ { 0x2673, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-1 PLASTICS
+ { 0x2674, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-2 PLASTICS
+ { 0x2675, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-3 PLASTICS
+ { 0x2676, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-4 PLASTICS
+ { 0x2677, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-5 PLASTICS
+ { 0x2678, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-6 PLASTICS
+ { 0x2679, BIDI_ON }, // RECYCLING SYMBOL FOR TYPE-7 PLASTICS
+ { 0x267A, BIDI_ON }, // RECYCLING SYMBOL FOR GENERIC MATERIALS
+ { 0x267B, BIDI_ON }, // BLACK UNIVERSAL RECYCLING SYMBOL
+ { 0x267C, BIDI_ON }, // RECYCLED PAPER SYMBOL
+ { 0x267D, BIDI_ON }, // PARTIALLY-RECYCLED PAPER SYMBOL
+ { 0x267E, BIDI_ON }, // PERMANENT PAPER SIGN
+ { 0x267F, BIDI_ON }, // WHEELCHAIR SYMBOL
+ { 0x2680, BIDI_ON }, // DIE FACE-1
+ { 0x2681, BIDI_ON }, // DIE FACE-2
+ { 0x2682, BIDI_ON }, // DIE FACE-3
+ { 0x2683, BIDI_ON }, // DIE FACE-4
+ { 0x2684, BIDI_ON }, // DIE FACE-5
+ { 0x2685, BIDI_ON }, // DIE FACE-6
+ { 0x2686, BIDI_ON }, // WHITE CIRCLE WITH DOT RIGHT
+ { 0x2687, BIDI_ON }, // WHITE CIRCLE WITH TWO DOTS
+ { 0x2688, BIDI_ON }, // BLACK CIRCLE WITH WHITE DOT RIGHT
+ { 0x2689, BIDI_ON }, // BLACK CIRCLE WITH TWO WHITE DOTS
+ { 0x268A, BIDI_ON }, // MONOGRAM FOR YANG
+ { 0x268B, BIDI_ON }, // MONOGRAM FOR YIN
+ { 0x268C, BIDI_ON }, // DIGRAM FOR GREATER YANG
+ { 0x268D, BIDI_ON }, // DIGRAM FOR LESSER YIN
+ { 0x268E, BIDI_ON }, // DIGRAM FOR LESSER YANG
+ { 0x268F, BIDI_ON }, // DIGRAM FOR GREATER YIN
+ { 0x2690, BIDI_ON }, // WHITE FLAG
+ { 0x2691, BIDI_ON }, // BLACK FLAG
+ { 0x2692, BIDI_ON }, // HAMMER AND PICK
+ { 0x2693, BIDI_ON }, // ANCHOR
+ { 0x2694, BIDI_ON }, // CROSSED SWORDS
+ { 0x2695, BIDI_ON }, // STAFF OF AESCULAPIUS
+ { 0x2696, BIDI_ON }, // SCALES
+ { 0x2697, BIDI_ON }, // ALEMBIC
+ { 0x2698, BIDI_ON }, // FLOWER
+ { 0x2699, BIDI_ON }, // GEAR
+ { 0x269A, BIDI_ON }, // STAFF OF HERMES
+ { 0x269B, BIDI_ON }, // ATOM SYMBOL
+ { 0x269C, BIDI_ON }, // FLEUR-DE-LIS
+ { 0x269D, BIDI_ON }, // OUTLINED WHITE STAR
+ { 0x269E, BIDI_ON }, // THREE LINES CONVERGING RIGHT
+ { 0x269F, BIDI_ON }, // THREE LINES CONVERGING LEFT
+ { 0x26A0, BIDI_ON }, // WARNING SIGN
+ { 0x26A1, BIDI_ON }, // HIGH VOLTAGE SIGN
+ { 0x26A2, BIDI_ON }, // DOUBLED FEMALE SIGN
+ { 0x26A3, BIDI_ON }, // DOUBLED MALE SIGN
+ { 0x26A4, BIDI_ON }, // INTERLOCKED FEMALE AND MALE SIGN
+ { 0x26A5, BIDI_ON }, // MALE AND FEMALE SIGN
+ { 0x26A6, BIDI_ON }, // MALE WITH STROKE SIGN
+ { 0x26A7, BIDI_ON }, // MALE WITH STROKE AND MALE AND FEMALE SIGN
+ { 0x26A8, BIDI_ON }, // VERTICAL MALE WITH STROKE SIGN
+ { 0x26A9, BIDI_ON }, // HORIZONTAL MALE WITH STROKE SIGN
+ { 0x26AA, BIDI_ON }, // MEDIUM WHITE CIRCLE
+ { 0x26AB, BIDI_ON }, // MEDIUM BLACK CIRCLE
+ { 0x26AC, BIDI_L }, // MEDIUM SMALL WHITE CIRCLE
+ { 0x26AD, BIDI_ON }, // MARRIAGE SYMBOL
+ { 0x26AE, BIDI_ON }, // DIVORCE SYMBOL
+ { 0x26AF, BIDI_ON }, // UNMARRIED PARTNERSHIP SYMBOL
+ { 0x26B0, BIDI_ON }, // COFFIN
+ { 0x26B1, BIDI_ON }, // FUNERAL URN
+ { 0x26B2, BIDI_ON }, // NEUTER
+ { 0x26B3, BIDI_ON }, // CERES
+ { 0x26B4, BIDI_ON }, // PALLAS
+ { 0x26B5, BIDI_ON }, // JUNO
+ { 0x26B6, BIDI_ON }, // VESTA
+ { 0x26B7, BIDI_ON }, // CHIRON
+ { 0x26B8, BIDI_ON }, // BLACK MOON LILITH
+ { 0x26B9, BIDI_ON }, // SEXTILE
+ { 0x26BA, BIDI_ON }, // SEMISEXTILE
+ { 0x26BB, BIDI_ON }, // QUINCUNX
+ { 0x26BC, BIDI_ON }, // SESQUIQUADRATE
+ { 0x26BD, BIDI_ON }, // SOCCER BALL
+ { 0x26BE, BIDI_ON }, // BASEBALL
+ { 0x26BF, BIDI_ON }, // SQUARED KEY
+ { 0x26C0, BIDI_ON }, // WHITE DRAUGHTS MAN
+ { 0x26C1, BIDI_ON }, // WHITE DRAUGHTS KING
+ { 0x26C2, BIDI_ON }, // BLACK DRAUGHTS MAN
+ { 0x26C3, BIDI_ON }, // BLACK DRAUGHTS KING
+ { 0x26C4, BIDI_ON }, // SNOWMAN WITHOUT SNOW
+ { 0x26C5, BIDI_ON }, // SUN BEHIND CLOUD
+ { 0x26C6, BIDI_ON }, // RAIN
+ { 0x26C7, BIDI_ON }, // BLACK SNOWMAN
+ { 0x26C8, BIDI_ON }, // THUNDER CLOUD AND RAIN
+ { 0x26C9, BIDI_ON }, // TURNED WHITE SHOGI PIECE
+ { 0x26CA, BIDI_ON }, // TURNED BLACK SHOGI PIECE
+ { 0x26CB, BIDI_ON }, // WHITE DIAMOND IN SQUARE
+ { 0x26CC, BIDI_ON }, // CROSSING LANES
+ { 0x26CD, BIDI_ON }, // DISABLED CAR
+ { 0x26CE, BIDI_ON }, // OPHIUCHUS
+ { 0x26CF, BIDI_ON }, // PICK
+ { 0x26D0, BIDI_ON }, // CAR SLIDING
+ { 0x26D1, BIDI_ON }, // HELMET WITH WHITE CROSS
+ { 0x26D2, BIDI_ON }, // CIRCLED CROSSING LANES
+ { 0x26D3, BIDI_ON }, // CHAINS
+ { 0x26D4, BIDI_ON }, // NO ENTRY
+ { 0x26D5, BIDI_ON }, // ALTERNATE ONE-WAY LEFT WAY TRAFFIC
+ { 0x26D6, BIDI_ON }, // BLACK TWO-WAY LEFT WAY TRAFFIC
+ { 0x26D7, BIDI_ON }, // WHITE TWO-WAY LEFT WAY TRAFFIC
+ { 0x26D8, BIDI_ON }, // BLACK LEFT LANE MERGE
+ { 0x26D9, BIDI_ON }, // WHITE LEFT LANE MERGE
+ { 0x26DA, BIDI_ON }, // DRIVE SLOW SIGN
+ { 0x26DB, BIDI_ON }, // HEAVY WHITE DOWN-POINTING TRIANGLE
+ { 0x26DC, BIDI_ON }, // LEFT CLOSED ENTRY
+ { 0x26DD, BIDI_ON }, // SQUARED SALTIRE
+ { 0x26DE, BIDI_ON }, // FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
+ { 0x26DF, BIDI_ON }, // BLACK TRUCK
+ { 0x26E0, BIDI_ON }, // RESTRICTED LEFT ENTRY-1
+ { 0x26E1, BIDI_ON }, // RESTRICTED LEFT ENTRY-2
+ { 0x26E2, BIDI_ON }, // ASTRONOMICAL SYMBOL FOR URANUS
+ { 0x26E3, BIDI_ON }, // HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+ { 0x26E4, BIDI_ON }, // PENTAGRAM
+ { 0x26E5, BIDI_ON }, // RIGHT-HANDED INTERLACED PENTAGRAM
+ { 0x26E6, BIDI_ON }, // LEFT-HANDED INTERLACED PENTAGRAM
+ { 0x26E7, BIDI_ON }, // INVERTED PENTAGRAM
+ { 0x26E8, BIDI_ON }, // BLACK CROSS ON SHIELD
+ { 0x26E9, BIDI_ON }, // SHINTO SHRINE
+ { 0x26EA, BIDI_ON }, // CHURCH
+ { 0x26EB, BIDI_ON }, // CASTLE
+ { 0x26EC, BIDI_ON }, // HISTORIC SITE
+ { 0x26ED, BIDI_ON }, // GEAR WITHOUT HUB
+ { 0x26EE, BIDI_ON }, // GEAR WITH HANDLES
+ { 0x26EF, BIDI_ON }, // MAP SYMBOL FOR LIGHTHOUSE
+ { 0x26F0, BIDI_ON }, // MOUNTAIN
+ { 0x26F1, BIDI_ON }, // UMBRELLA ON GROUND
+ { 0x26F2, BIDI_ON }, // FOUNTAIN
+ { 0x26F3, BIDI_ON }, // FLAG IN HOLE
+ { 0x26F4, BIDI_ON }, // FERRY
+ { 0x26F5, BIDI_ON }, // SAILBOAT
+ { 0x26F6, BIDI_ON }, // SQUARE FOUR CORNERS
+ { 0x26F7, BIDI_ON }, // SKIER
+ { 0x26F8, BIDI_ON }, // ICE SKATE
+ { 0x26F9, BIDI_ON }, // PERSON WITH BALL
+ { 0x26FA, BIDI_ON }, // TENT
+ { 0x26FB, BIDI_ON }, // JAPANESE BANK SYMBOL
+ { 0x26FC, BIDI_ON }, // HEADSTONE GRAVEYARD SYMBOL
+ { 0x26FD, BIDI_ON }, // FUEL PUMP
+ { 0x26FE, BIDI_ON }, // CUP ON BLACK SQUARE
+ { 0x26FF, BIDI_ON }, // WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+ { 0x2700, BIDI_ON }, // BLACK SAFETY SCISSORS
+ { 0x2701, BIDI_ON }, // UPPER BLADE SCISSORS
+ { 0x2702, BIDI_ON }, // BLACK SCISSORS
+ { 0x2703, BIDI_ON }, // LOWER BLADE SCISSORS
+ { 0x2704, BIDI_ON }, // WHITE SCISSORS
+ { 0x2705, BIDI_ON }, // WHITE HEAVY CHECK MARK
+ { 0x2706, BIDI_ON }, // TELEPHONE LOCATION SIGN
+ { 0x2707, BIDI_ON }, // TAPE DRIVE
+ { 0x2708, BIDI_ON }, // AIRPLANE
+ { 0x2709, BIDI_ON }, // ENVELOPE
+ { 0x270A, BIDI_ON }, // RAISED FIST
+ { 0x270B, BIDI_ON }, // RAISED HAND
+ { 0x270C, BIDI_ON }, // VICTORY HAND
+ { 0x270D, BIDI_ON }, // WRITING HAND
+ { 0x270E, BIDI_ON }, // LOWER RIGHT PENCIL
+ { 0x270F, BIDI_ON }, // PENCIL
+ { 0x2710, BIDI_ON }, // UPPER RIGHT PENCIL
+ { 0x2711, BIDI_ON }, // WHITE NIB
+ { 0x2712, BIDI_ON }, // BLACK NIB
+ { 0x2713, BIDI_ON }, // CHECK MARK
+ { 0x2714, BIDI_ON }, // HEAVY CHECK MARK
+ { 0x2715, BIDI_ON }, // MULTIPLICATION X
+ { 0x2716, BIDI_ON }, // HEAVY MULTIPLICATION X
+ { 0x2717, BIDI_ON }, // BALLOT X
+ { 0x2718, BIDI_ON }, // HEAVY BALLOT X
+ { 0x2719, BIDI_ON }, // OUTLINED GREEK CROSS
+ { 0x271A, BIDI_ON }, // HEAVY GREEK CROSS
+ { 0x271B, BIDI_ON }, // OPEN CENTRE CROSS
+ { 0x271C, BIDI_ON }, // HEAVY OPEN CENTRE CROSS
+ { 0x271D, BIDI_ON }, // LATIN CROSS
+ { 0x271E, BIDI_ON }, // SHADOWED WHITE LATIN CROSS
+ { 0x271F, BIDI_ON }, // OUTLINED LATIN CROSS
+ { 0x2720, BIDI_ON }, // MALTESE CROSS
+ { 0x2721, BIDI_ON }, // STAR OF DAVID
+ { 0x2722, BIDI_ON }, // FOUR TEARDROP-SPOKED ASTERISK
+ { 0x2723, BIDI_ON }, // FOUR BALLOON-SPOKED ASTERISK
+ { 0x2724, BIDI_ON }, // HEAVY FOUR BALLOON-SPOKED ASTERISK
+ { 0x2725, BIDI_ON }, // FOUR CLUB-SPOKED ASTERISK
+ { 0x2726, BIDI_ON }, // BLACK FOUR POINTED STAR
+ { 0x2727, BIDI_ON }, // WHITE FOUR POINTED STAR
+ { 0x2728, BIDI_ON }, // SPARKLES
+ { 0x2729, BIDI_ON }, // STRESS OUTLINED WHITE STAR
+ { 0x272A, BIDI_ON }, // CIRCLED WHITE STAR
+ { 0x272B, BIDI_ON }, // OPEN CENTRE BLACK STAR
+ { 0x272C, BIDI_ON }, // BLACK CENTRE WHITE STAR
+ { 0x272D, BIDI_ON }, // OUTLINED BLACK STAR
+ { 0x272E, BIDI_ON }, // HEAVY OUTLINED BLACK STAR
+ { 0x272F, BIDI_ON }, // PINWHEEL STAR
+ { 0x2730, BIDI_ON }, // SHADOWED WHITE STAR
+ { 0x2731, BIDI_ON }, // HEAVY ASTERISK
+ { 0x2732, BIDI_ON }, // OPEN CENTRE ASTERISK
+ { 0x2733, BIDI_ON }, // EIGHT SPOKED ASTERISK
+ { 0x2734, BIDI_ON }, // EIGHT POINTED BLACK STAR
+ { 0x2735, BIDI_ON }, // EIGHT POINTED PINWHEEL STAR
+ { 0x2736, BIDI_ON }, // SIX POINTED BLACK STAR
+ { 0x2737, BIDI_ON }, // EIGHT POINTED RECTILINEAR BLACK STAR
+ { 0x2738, BIDI_ON }, // HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
+ { 0x2739, BIDI_ON }, // TWELVE POINTED BLACK STAR
+ { 0x273A, BIDI_ON }, // SIXTEEN POINTED ASTERISK
+ { 0x273B, BIDI_ON }, // TEARDROP-SPOKED ASTERISK
+ { 0x273C, BIDI_ON }, // OPEN CENTRE TEARDROP-SPOKED ASTERISK
+ { 0x273D, BIDI_ON }, // HEAVY TEARDROP-SPOKED ASTERISK
+ { 0x273E, BIDI_ON }, // SIX PETALLED BLACK AND WHITE FLORETTE
+ { 0x273F, BIDI_ON }, // BLACK FLORETTE
+ { 0x2740, BIDI_ON }, // WHITE FLORETTE
+ { 0x2741, BIDI_ON }, // EIGHT PETALLED OUTLINED BLACK FLORETTE
+ { 0x2742, BIDI_ON }, // CIRCLED OPEN CENTRE EIGHT POINTED STAR
+ { 0x2743, BIDI_ON }, // HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
+ { 0x2744, BIDI_ON }, // SNOWFLAKE
+ { 0x2745, BIDI_ON }, // TIGHT TRIFOLIATE SNOWFLAKE
+ { 0x2746, BIDI_ON }, // HEAVY CHEVRON SNOWFLAKE
+ { 0x2747, BIDI_ON }, // SPARKLE
+ { 0x2748, BIDI_ON }, // HEAVY SPARKLE
+ { 0x2749, BIDI_ON }, // BALLOON-SPOKED ASTERISK
+ { 0x274A, BIDI_ON }, // EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+ { 0x274B, BIDI_ON }, // HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+ { 0x274C, BIDI_ON }, // CROSS MARK
+ { 0x274D, BIDI_ON }, // SHADOWED WHITE CIRCLE
+ { 0x274E, BIDI_ON }, // NEGATIVE SQUARED CROSS MARK
+ { 0x274F, BIDI_ON }, // LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+ { 0x2750, BIDI_ON }, // UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+ { 0x2751, BIDI_ON }, // LOWER RIGHT SHADOWED WHITE SQUARE
+ { 0x2752, BIDI_ON }, // UPPER RIGHT SHADOWED WHITE SQUARE
+ { 0x2753, BIDI_ON }, // BLACK QUESTION MARK ORNAMENT
+ { 0x2754, BIDI_ON }, // WHITE QUESTION MARK ORNAMENT
+ { 0x2755, BIDI_ON }, // WHITE EXCLAMATION MARK ORNAMENT
+ { 0x2756, BIDI_ON }, // BLACK DIAMOND MINUS WHITE X
+ { 0x2757, BIDI_ON }, // HEAVY EXCLAMATION MARK SYMBOL
+ { 0x2758, BIDI_ON }, // LIGHT VERTICAL BAR
+ { 0x2759, BIDI_ON }, // MEDIUM VERTICAL BAR
+ { 0x275A, BIDI_ON }, // HEAVY VERTICAL BAR
+ { 0x275B, BIDI_ON }, // HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT
+ { 0x275C, BIDI_ON }, // HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+ { 0x275D, BIDI_ON }, // HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+ { 0x275E, BIDI_ON }, // HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+ { 0x275F, BIDI_ON }, // HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
+ { 0x2760, BIDI_ON }, // HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+ { 0x2761, BIDI_ON }, // CURVED STEM PARAGRAPH SIGN ORNAMENT
+ { 0x2762, BIDI_ON }, // HEAVY EXCLAMATION MARK ORNAMENT
+ { 0x2763, BIDI_ON }, // HEAVY HEART EXCLAMATION MARK ORNAMENT
+ { 0x2764, BIDI_ON }, // HEAVY BLACK HEART
+ { 0x2765, BIDI_ON }, // ROTATED HEAVY BLACK HEART BULLET
+ { 0x2766, BIDI_ON }, // FLORAL HEART
+ { 0x2767, BIDI_ON }, // ROTATED FLORAL HEART BULLET
+ { 0x2768, BIDI_ON }, // MEDIUM LEFT PARENTHESIS ORNAMENT
+ { 0x2769, BIDI_ON }, // MEDIUM RIGHT PARENTHESIS ORNAMENT
+ { 0x276A, BIDI_ON }, // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+ { 0x276B, BIDI_ON }, // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+ { 0x276C, BIDI_ON }, // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x276D, BIDI_ON }, // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x276E, BIDI_ON }, // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+ { 0x276F, BIDI_ON }, // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+ { 0x2770, BIDI_ON }, // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x2771, BIDI_ON }, // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+ { 0x2772, BIDI_ON }, // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+ { 0x2773, BIDI_ON }, // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+ { 0x2774, BIDI_ON }, // MEDIUM LEFT CURLY BRACKET ORNAMENT
+ { 0x2775, BIDI_ON }, // MEDIUM RIGHT CURLY BRACKET ORNAMENT
+ { 0x2776, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT ONE
+ { 0x2777, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT TWO
+ { 0x2778, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT THREE
+ { 0x2779, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT FOUR
+ { 0x277A, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT FIVE
+ { 0x277B, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT SIX
+ { 0x277C, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT SEVEN
+ { 0x277D, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT EIGHT
+ { 0x277E, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED DIGIT NINE
+ { 0x277F, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED NUMBER TEN
+ { 0x2780, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT ONE
+ { 0x2781, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT TWO
+ { 0x2782, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT THREE
+ { 0x2783, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
+ { 0x2784, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
+ { 0x2785, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT SIX
+ { 0x2786, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
+ { 0x2787, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
+ { 0x2788, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF DIGIT NINE
+ { 0x2789, BIDI_ON }, // DINGBAT CIRCLED SANS-SERIF NUMBER TEN
+ { 0x278A, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE
+ { 0x278B, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO
+ { 0x278C, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE
+ { 0x278D, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR
+ { 0x278E, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE
+ { 0x278F, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX
+ { 0x2790, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN
+ { 0x2791, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT
+ { 0x2792, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+ { 0x2793, BIDI_ON }, // DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+ { 0x2794, BIDI_ON }, // HEAVY WIDE-HEADED RIGHTWARDS ARROW
+ { 0x2795, BIDI_ON }, // HEAVY PLUS SIGN
+ { 0x2796, BIDI_ON }, // HEAVY MINUS SIGN
+ { 0x2797, BIDI_ON }, // HEAVY DIVISION SIGN
+ { 0x2798, BIDI_ON }, // HEAVY SOUTH EAST ARROW
+ { 0x2799, BIDI_ON }, // HEAVY RIGHTWARDS ARROW
+ { 0x279A, BIDI_ON }, // HEAVY NORTH EAST ARROW
+ { 0x279B, BIDI_ON }, // DRAFTING POINT RIGHTWARDS ARROW
+ { 0x279C, BIDI_ON }, // HEAVY ROUND-TIPPED RIGHTWARDS ARROW
+ { 0x279D, BIDI_ON }, // TRIANGLE-HEADED RIGHTWARDS ARROW
+ { 0x279E, BIDI_ON }, // HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW
+ { 0x279F, BIDI_ON }, // DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+ { 0x27A0, BIDI_ON }, // HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW
+ { 0x27A1, BIDI_ON }, // BLACK RIGHTWARDS ARROW
+ { 0x27A2, BIDI_ON }, // THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD
+ { 0x27A3, BIDI_ON }, // THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
+ { 0x27A4, BIDI_ON }, // BLACK RIGHTWARDS ARROWHEAD
+ { 0x27A5, BIDI_ON }, // HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+ { 0x27A6, BIDI_ON }, // HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+ { 0x27A7, BIDI_ON }, // SQUAT BLACK RIGHTWARDS ARROW
+ { 0x27A8, BIDI_ON }, // HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW
+ { 0x27A9, BIDI_ON }, // RIGHT-SHADED WHITE RIGHTWARDS ARROW
+ { 0x27AA, BIDI_ON }, // LEFT-SHADED WHITE RIGHTWARDS ARROW
+ { 0x27AB, BIDI_ON }, // BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+ { 0x27AC, BIDI_ON }, // FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW
+ { 0x27AD, BIDI_ON }, // HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ { 0x27AE, BIDI_ON }, // HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ { 0x27AF, BIDI_ON }, // NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ { 0x27B0, BIDI_ON }, // CURLY LOOP
+ { 0x27B1, BIDI_ON }, // NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ { 0x27B2, BIDI_ON }, // CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+ { 0x27B3, BIDI_ON }, // WHITE-FEATHERED RIGHTWARDS ARROW
+ { 0x27B4, BIDI_ON }, // BLACK-FEATHERED SOUTH EAST ARROW
+ { 0x27B5, BIDI_ON }, // BLACK-FEATHERED RIGHTWARDS ARROW
+ { 0x27B6, BIDI_ON }, // BLACK-FEATHERED NORTH EAST ARROW
+ { 0x27B7, BIDI_ON }, // HEAVY BLACK-FEATHERED SOUTH EAST ARROW
+ { 0x27B8, BIDI_ON }, // HEAVY BLACK-FEATHERED RIGHTWARDS ARROW
+ { 0x27B9, BIDI_ON }, // HEAVY BLACK-FEATHERED NORTH EAST ARROW
+ { 0x27BA, BIDI_ON }, // TEARDROP-BARBED RIGHTWARDS ARROW
+ { 0x27BB, BIDI_ON }, // HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW
+ { 0x27BC, BIDI_ON }, // WEDGE-TAILED RIGHTWARDS ARROW
+ { 0x27BD, BIDI_ON }, // HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+ { 0x27BE, BIDI_ON }, // OPEN-OUTLINED RIGHTWARDS ARROW
+ { 0x27BF, BIDI_ON }, // DOUBLE CURLY LOOP
+ { 0x27C0, BIDI_ON }, // THREE DIMENSIONAL ANGLE
+ { 0x27C1, BIDI_ON }, // WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+ { 0x27C2, BIDI_ON }, // PERPENDICULAR
+ { 0x27C3, BIDI_ON }, // OPEN SUBSET
+ { 0x27C4, BIDI_ON }, // OPEN SUPERSET
+ { 0x27C5, BIDI_ON }, // LEFT S-SHAPED BAG DELIMITER
+ { 0x27C6, BIDI_ON }, // RIGHT S-SHAPED BAG DELIMITER
+ { 0x27C7, BIDI_ON }, // OR WITH DOT INSIDE
+ { 0x27C8, BIDI_ON }, // REVERSE SOLIDUS PRECEDING SUBSET
+ { 0x27C9, BIDI_ON }, // SUPERSET PRECEDING SOLIDUS
+ { 0x27CA, BIDI_ON }, // VERTICAL BAR WITH HORIZONTAL STROKE
+ { 0x27CB, BIDI_ON }, // MATHEMATICAL RISING DIAGONAL
+ { 0x27CC, BIDI_ON }, // LONG DIVISION
+ { 0x27CD, BIDI_ON }, // MATHEMATICAL FALLING DIAGONAL
+ { 0x27CE, BIDI_ON }, // SQUARED LOGICAL AND
+ { 0x27CF, BIDI_ON }, // SQUARED LOGICAL OR
+ { 0x27D0, BIDI_ON }, // WHITE DIAMOND WITH CENTRED DOT
+ { 0x27D1, BIDI_ON }, // AND WITH DOT
+ { 0x27D2, BIDI_ON }, // ELEMENT OF OPENING UPWARDS
+ { 0x27D3, BIDI_ON }, // LOWER RIGHT CORNER WITH DOT
+ { 0x27D4, BIDI_ON }, // UPPER LEFT CORNER WITH DOT
+ { 0x27D5, BIDI_ON }, // LEFT OUTER JOIN
+ { 0x27D6, BIDI_ON }, // RIGHT OUTER JOIN
+ { 0x27D7, BIDI_ON }, // FULL OUTER JOIN
+ { 0x27D8, BIDI_ON }, // LARGE UP TACK
+ { 0x27D9, BIDI_ON }, // LARGE DOWN TACK
+ { 0x27DA, BIDI_ON }, // LEFT AND RIGHT DOUBLE TURNSTILE
+ { 0x27DB, BIDI_ON }, // LEFT AND RIGHT TACK
+ { 0x27DC, BIDI_ON }, // LEFT MULTIMAP
+ { 0x27DD, BIDI_ON }, // LONG RIGHT TACK
+ { 0x27DE, BIDI_ON }, // LONG LEFT TACK
+ { 0x27DF, BIDI_ON }, // UP TACK WITH CIRCLE ABOVE
+ { 0x27E0, BIDI_ON }, // LOZENGE DIVIDED BY HORIZONTAL RULE
+ { 0x27E1, BIDI_ON }, // WHITE CONCAVE-SIDED DIAMOND
+ { 0x27E2, BIDI_ON }, // WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
+ { 0x27E3, BIDI_ON }, // WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
+ { 0x27E4, BIDI_ON }, // WHITE SQUARE WITH LEFTWARDS TICK
+ { 0x27E5, BIDI_ON }, // WHITE SQUARE WITH RIGHTWARDS TICK
+ { 0x27E6, BIDI_ON }, // MATHEMATICAL LEFT WHITE SQUARE BRACKET
+ { 0x27E7, BIDI_ON }, // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+ { 0x27E8, BIDI_ON }, // MATHEMATICAL LEFT ANGLE BRACKET
+ { 0x27E9, BIDI_ON }, // MATHEMATICAL RIGHT ANGLE BRACKET
+ { 0x27EA, BIDI_ON }, // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+ { 0x27EB, BIDI_ON }, // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+ { 0x27EC, BIDI_ON }, // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+ { 0x27ED, BIDI_ON }, // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+ { 0x27EE, BIDI_ON }, // MATHEMATICAL LEFT FLATTENED PARENTHESIS
+ { 0x27EF, BIDI_ON }, // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+ { 0x27F0, BIDI_ON }, // UPWARDS QUADRUPLE ARROW
+ { 0x27F1, BIDI_ON }, // DOWNWARDS QUADRUPLE ARROW
+ { 0x27F2, BIDI_ON }, // ANTICLOCKWISE GAPPED CIRCLE ARROW
+ { 0x27F3, BIDI_ON }, // CLOCKWISE GAPPED CIRCLE ARROW
+ { 0x27F4, BIDI_ON }, // RIGHT ARROW WITH CIRCLED PLUS
+ { 0x27F5, BIDI_ON }, // LONG LEFTWARDS ARROW
+ { 0x27F6, BIDI_ON }, // LONG RIGHTWARDS ARROW
+ { 0x27F7, BIDI_ON }, // LONG LEFT RIGHT ARROW
+ { 0x27F8, BIDI_ON }, // LONG LEFTWARDS DOUBLE ARROW
+ { 0x27F9, BIDI_ON }, // LONG RIGHTWARDS DOUBLE ARROW
+ { 0x27FA, BIDI_ON }, // LONG LEFT RIGHT DOUBLE ARROW
+ { 0x27FB, BIDI_ON }, // LONG LEFTWARDS ARROW FROM BAR
+ { 0x27FC, BIDI_ON }, // LONG RIGHTWARDS ARROW FROM BAR
+ { 0x27FD, BIDI_ON }, // LONG LEFTWARDS DOUBLE ARROW FROM BAR
+ { 0x27FE, BIDI_ON }, // LONG RIGHTWARDS DOUBLE ARROW FROM BAR
+ { 0x27FF, BIDI_ON }, // LONG RIGHTWARDS SQUIGGLE ARROW
+ { 0x2800, BIDI_L }, // BRAILLE PATTERN BLANK
+ { 0x2801, BIDI_L }, // BRAILLE PATTERN DOTS-1
+ { 0x2802, BIDI_L }, // BRAILLE PATTERN DOTS-2
+ { 0x2803, BIDI_L }, // BRAILLE PATTERN DOTS-12
+ { 0x2804, BIDI_L }, // BRAILLE PATTERN DOTS-3
+ { 0x2805, BIDI_L }, // BRAILLE PATTERN DOTS-13
+ { 0x2806, BIDI_L }, // BRAILLE PATTERN DOTS-23
+ { 0x2807, BIDI_L }, // BRAILLE PATTERN DOTS-123
+ { 0x2808, BIDI_L }, // BRAILLE PATTERN DOTS-4
+ { 0x2809, BIDI_L }, // BRAILLE PATTERN DOTS-14
+ { 0x280A, BIDI_L }, // BRAILLE PATTERN DOTS-24
+ { 0x280B, BIDI_L }, // BRAILLE PATTERN DOTS-124
+ { 0x280C, BIDI_L }, // BRAILLE PATTERN DOTS-34
+ { 0x280D, BIDI_L }, // BRAILLE PATTERN DOTS-134
+ { 0x280E, BIDI_L }, // BRAILLE PATTERN DOTS-234
+ { 0x280F, BIDI_L }, // BRAILLE PATTERN DOTS-1234
+ { 0x2810, BIDI_L }, // BRAILLE PATTERN DOTS-5
+ { 0x2811, BIDI_L }, // BRAILLE PATTERN DOTS-15
+ { 0x2812, BIDI_L }, // BRAILLE PATTERN DOTS-25
+ { 0x2813, BIDI_L }, // BRAILLE PATTERN DOTS-125
+ { 0x2814, BIDI_L }, // BRAILLE PATTERN DOTS-35
+ { 0x2815, BIDI_L }, // BRAILLE PATTERN DOTS-135
+ { 0x2816, BIDI_L }, // BRAILLE PATTERN DOTS-235
+ { 0x2817, BIDI_L }, // BRAILLE PATTERN DOTS-1235
+ { 0x2818, BIDI_L }, // BRAILLE PATTERN DOTS-45
+ { 0x2819, BIDI_L }, // BRAILLE PATTERN DOTS-145
+ { 0x281A, BIDI_L }, // BRAILLE PATTERN DOTS-245
+ { 0x281B, BIDI_L }, // BRAILLE PATTERN DOTS-1245
+ { 0x281C, BIDI_L }, // BRAILLE PATTERN DOTS-345
+ { 0x281D, BIDI_L }, // BRAILLE PATTERN DOTS-1345
+ { 0x281E, BIDI_L }, // BRAILLE PATTERN DOTS-2345
+ { 0x281F, BIDI_L }, // BRAILLE PATTERN DOTS-12345
+ { 0x2820, BIDI_L }, // BRAILLE PATTERN DOTS-6
+ { 0x2821, BIDI_L }, // BRAILLE PATTERN DOTS-16
+ { 0x2822, BIDI_L }, // BRAILLE PATTERN DOTS-26
+ { 0x2823, BIDI_L }, // BRAILLE PATTERN DOTS-126
+ { 0x2824, BIDI_L }, // BRAILLE PATTERN DOTS-36
+ { 0x2825, BIDI_L }, // BRAILLE PATTERN DOTS-136
+ { 0x2826, BIDI_L }, // BRAILLE PATTERN DOTS-236
+ { 0x2827, BIDI_L }, // BRAILLE PATTERN DOTS-1236
+ { 0x2828, BIDI_L }, // BRAILLE PATTERN DOTS-46
+ { 0x2829, BIDI_L }, // BRAILLE PATTERN DOTS-146
+ { 0x282A, BIDI_L }, // BRAILLE PATTERN DOTS-246
+ { 0x282B, BIDI_L }, // BRAILLE PATTERN DOTS-1246
+ { 0x282C, BIDI_L }, // BRAILLE PATTERN DOTS-346
+ { 0x282D, BIDI_L }, // BRAILLE PATTERN DOTS-1346
+ { 0x282E, BIDI_L }, // BRAILLE PATTERN DOTS-2346
+ { 0x282F, BIDI_L }, // BRAILLE PATTERN DOTS-12346
+ { 0x2830, BIDI_L }, // BRAILLE PATTERN DOTS-56
+ { 0x2831, BIDI_L }, // BRAILLE PATTERN DOTS-156
+ { 0x2832, BIDI_L }, // BRAILLE PATTERN DOTS-256
+ { 0x2833, BIDI_L }, // BRAILLE PATTERN DOTS-1256
+ { 0x2834, BIDI_L }, // BRAILLE PATTERN DOTS-356
+ { 0x2835, BIDI_L }, // BRAILLE PATTERN DOTS-1356
+ { 0x2836, BIDI_L }, // BRAILLE PATTERN DOTS-2356
+ { 0x2837, BIDI_L }, // BRAILLE PATTERN DOTS-12356
+ { 0x2838, BIDI_L }, // BRAILLE PATTERN DOTS-456
+ { 0x2839, BIDI_L }, // BRAILLE PATTERN DOTS-1456
+ { 0x283A, BIDI_L }, // BRAILLE PATTERN DOTS-2456
+ { 0x283B, BIDI_L }, // BRAILLE PATTERN DOTS-12456
+ { 0x283C, BIDI_L }, // BRAILLE PATTERN DOTS-3456
+ { 0x283D, BIDI_L }, // BRAILLE PATTERN DOTS-13456
+ { 0x283E, BIDI_L }, // BRAILLE PATTERN DOTS-23456
+ { 0x283F, BIDI_L }, // BRAILLE PATTERN DOTS-123456
+ { 0x2840, BIDI_L }, // BRAILLE PATTERN DOTS-7
+ { 0x2841, BIDI_L }, // BRAILLE PATTERN DOTS-17
+ { 0x2842, BIDI_L }, // BRAILLE PATTERN DOTS-27
+ { 0x2843, BIDI_L }, // BRAILLE PATTERN DOTS-127
+ { 0x2844, BIDI_L }, // BRAILLE PATTERN DOTS-37
+ { 0x2845, BIDI_L }, // BRAILLE PATTERN DOTS-137
+ { 0x2846, BIDI_L }, // BRAILLE PATTERN DOTS-237
+ { 0x2847, BIDI_L }, // BRAILLE PATTERN DOTS-1237
+ { 0x2848, BIDI_L }, // BRAILLE PATTERN DOTS-47
+ { 0x2849, BIDI_L }, // BRAILLE PATTERN DOTS-147
+ { 0x284A, BIDI_L }, // BRAILLE PATTERN DOTS-247
+ { 0x284B, BIDI_L }, // BRAILLE PATTERN DOTS-1247
+ { 0x284C, BIDI_L }, // BRAILLE PATTERN DOTS-347
+ { 0x284D, BIDI_L }, // BRAILLE PATTERN DOTS-1347
+ { 0x284E, BIDI_L }, // BRAILLE PATTERN DOTS-2347
+ { 0x284F, BIDI_L }, // BRAILLE PATTERN DOTS-12347
+ { 0x2850, BIDI_L }, // BRAILLE PATTERN DOTS-57
+ { 0x2851, BIDI_L }, // BRAILLE PATTERN DOTS-157
+ { 0x2852, BIDI_L }, // BRAILLE PATTERN DOTS-257
+ { 0x2853, BIDI_L }, // BRAILLE PATTERN DOTS-1257
+ { 0x2854, BIDI_L }, // BRAILLE PATTERN DOTS-357
+ { 0x2855, BIDI_L }, // BRAILLE PATTERN DOTS-1357
+ { 0x2856, BIDI_L }, // BRAILLE PATTERN DOTS-2357
+ { 0x2857, BIDI_L }, // BRAILLE PATTERN DOTS-12357
+ { 0x2858, BIDI_L }, // BRAILLE PATTERN DOTS-457
+ { 0x2859, BIDI_L }, // BRAILLE PATTERN DOTS-1457
+ { 0x285A, BIDI_L }, // BRAILLE PATTERN DOTS-2457
+ { 0x285B, BIDI_L }, // BRAILLE PATTERN DOTS-12457
+ { 0x285C, BIDI_L }, // BRAILLE PATTERN DOTS-3457
+ { 0x285D, BIDI_L }, // BRAILLE PATTERN DOTS-13457
+ { 0x285E, BIDI_L }, // BRAILLE PATTERN DOTS-23457
+ { 0x285F, BIDI_L }, // BRAILLE PATTERN DOTS-123457
+ { 0x2860, BIDI_L }, // BRAILLE PATTERN DOTS-67
+ { 0x2861, BIDI_L }, // BRAILLE PATTERN DOTS-167
+ { 0x2862, BIDI_L }, // BRAILLE PATTERN DOTS-267
+ { 0x2863, BIDI_L }, // BRAILLE PATTERN DOTS-1267
+ { 0x2864, BIDI_L }, // BRAILLE PATTERN DOTS-367
+ { 0x2865, BIDI_L }, // BRAILLE PATTERN DOTS-1367
+ { 0x2866, BIDI_L }, // BRAILLE PATTERN DOTS-2367
+ { 0x2867, BIDI_L }, // BRAILLE PATTERN DOTS-12367
+ { 0x2868, BIDI_L }, // BRAILLE PATTERN DOTS-467
+ { 0x2869, BIDI_L }, // BRAILLE PATTERN DOTS-1467
+ { 0x286A, BIDI_L }, // BRAILLE PATTERN DOTS-2467
+ { 0x286B, BIDI_L }, // BRAILLE PATTERN DOTS-12467
+ { 0x286C, BIDI_L }, // BRAILLE PATTERN DOTS-3467
+ { 0x286D, BIDI_L }, // BRAILLE PATTERN DOTS-13467
+ { 0x286E, BIDI_L }, // BRAILLE PATTERN DOTS-23467
+ { 0x286F, BIDI_L }, // BRAILLE PATTERN DOTS-123467
+ { 0x2870, BIDI_L }, // BRAILLE PATTERN DOTS-567
+ { 0x2871, BIDI_L }, // BRAILLE PATTERN DOTS-1567
+ { 0x2872, BIDI_L }, // BRAILLE PATTERN DOTS-2567
+ { 0x2873, BIDI_L }, // BRAILLE PATTERN DOTS-12567
+ { 0x2874, BIDI_L }, // BRAILLE PATTERN DOTS-3567
+ { 0x2875, BIDI_L }, // BRAILLE PATTERN DOTS-13567
+ { 0x2876, BIDI_L }, // BRAILLE PATTERN DOTS-23567
+ { 0x2877, BIDI_L }, // BRAILLE PATTERN DOTS-123567
+ { 0x2878, BIDI_L }, // BRAILLE PATTERN DOTS-4567
+ { 0x2879, BIDI_L }, // BRAILLE PATTERN DOTS-14567
+ { 0x287A, BIDI_L }, // BRAILLE PATTERN DOTS-24567
+ { 0x287B, BIDI_L }, // BRAILLE PATTERN DOTS-124567
+ { 0x287C, BIDI_L }, // BRAILLE PATTERN DOTS-34567
+ { 0x287D, BIDI_L }, // BRAILLE PATTERN DOTS-134567
+ { 0x287E, BIDI_L }, // BRAILLE PATTERN DOTS-234567
+ { 0x287F, BIDI_L }, // BRAILLE PATTERN DOTS-1234567
+ { 0x2880, BIDI_L }, // BRAILLE PATTERN DOTS-8
+ { 0x2881, BIDI_L }, // BRAILLE PATTERN DOTS-18
+ { 0x2882, BIDI_L }, // BRAILLE PATTERN DOTS-28
+ { 0x2883, BIDI_L }, // BRAILLE PATTERN DOTS-128
+ { 0x2884, BIDI_L }, // BRAILLE PATTERN DOTS-38
+ { 0x2885, BIDI_L }, // BRAILLE PATTERN DOTS-138
+ { 0x2886, BIDI_L }, // BRAILLE PATTERN DOTS-238
+ { 0x2887, BIDI_L }, // BRAILLE PATTERN DOTS-1238
+ { 0x2888, BIDI_L }, // BRAILLE PATTERN DOTS-48
+ { 0x2889, BIDI_L }, // BRAILLE PATTERN DOTS-148
+ { 0x288A, BIDI_L }, // BRAILLE PATTERN DOTS-248
+ { 0x288B, BIDI_L }, // BRAILLE PATTERN DOTS-1248
+ { 0x288C, BIDI_L }, // BRAILLE PATTERN DOTS-348
+ { 0x288D, BIDI_L }, // BRAILLE PATTERN DOTS-1348
+ { 0x288E, BIDI_L }, // BRAILLE PATTERN DOTS-2348
+ { 0x288F, BIDI_L }, // BRAILLE PATTERN DOTS-12348
+ { 0x2890, BIDI_L }, // BRAILLE PATTERN DOTS-58
+ { 0x2891, BIDI_L }, // BRAILLE PATTERN DOTS-158
+ { 0x2892, BIDI_L }, // BRAILLE PATTERN DOTS-258
+ { 0x2893, BIDI_L }, // BRAILLE PATTERN DOTS-1258
+ { 0x2894, BIDI_L }, // BRAILLE PATTERN DOTS-358
+ { 0x2895, BIDI_L }, // BRAILLE PATTERN DOTS-1358
+ { 0x2896, BIDI_L }, // BRAILLE PATTERN DOTS-2358
+ { 0x2897, BIDI_L }, // BRAILLE PATTERN DOTS-12358
+ { 0x2898, BIDI_L }, // BRAILLE PATTERN DOTS-458
+ { 0x2899, BIDI_L }, // BRAILLE PATTERN DOTS-1458
+ { 0x289A, BIDI_L }, // BRAILLE PATTERN DOTS-2458
+ { 0x289B, BIDI_L }, // BRAILLE PATTERN DOTS-12458
+ { 0x289C, BIDI_L }, // BRAILLE PATTERN DOTS-3458
+ { 0x289D, BIDI_L }, // BRAILLE PATTERN DOTS-13458
+ { 0x289E, BIDI_L }, // BRAILLE PATTERN DOTS-23458
+ { 0x289F, BIDI_L }, // BRAILLE PATTERN DOTS-123458
+ { 0x28A0, BIDI_L }, // BRAILLE PATTERN DOTS-68
+ { 0x28A1, BIDI_L }, // BRAILLE PATTERN DOTS-168
+ { 0x28A2, BIDI_L }, // BRAILLE PATTERN DOTS-268
+ { 0x28A3, BIDI_L }, // BRAILLE PATTERN DOTS-1268
+ { 0x28A4, BIDI_L }, // BRAILLE PATTERN DOTS-368
+ { 0x28A5, BIDI_L }, // BRAILLE PATTERN DOTS-1368
+ { 0x28A6, BIDI_L }, // BRAILLE PATTERN DOTS-2368
+ { 0x28A7, BIDI_L }, // BRAILLE PATTERN DOTS-12368
+ { 0x28A8, BIDI_L }, // BRAILLE PATTERN DOTS-468
+ { 0x28A9, BIDI_L }, // BRAILLE PATTERN DOTS-1468
+ { 0x28AA, BIDI_L }, // BRAILLE PATTERN DOTS-2468
+ { 0x28AB, BIDI_L }, // BRAILLE PATTERN DOTS-12468
+ { 0x28AC, BIDI_L }, // BRAILLE PATTERN DOTS-3468
+ { 0x28AD, BIDI_L }, // BRAILLE PATTERN DOTS-13468
+ { 0x28AE, BIDI_L }, // BRAILLE PATTERN DOTS-23468
+ { 0x28AF, BIDI_L }, // BRAILLE PATTERN DOTS-123468
+ { 0x28B0, BIDI_L }, // BRAILLE PATTERN DOTS-568
+ { 0x28B1, BIDI_L }, // BRAILLE PATTERN DOTS-1568
+ { 0x28B2, BIDI_L }, // BRAILLE PATTERN DOTS-2568
+ { 0x28B3, BIDI_L }, // BRAILLE PATTERN DOTS-12568
+ { 0x28B4, BIDI_L }, // BRAILLE PATTERN DOTS-3568
+ { 0x28B5, BIDI_L }, // BRAILLE PATTERN DOTS-13568
+ { 0x28B6, BIDI_L }, // BRAILLE PATTERN DOTS-23568
+ { 0x28B7, BIDI_L }, // BRAILLE PATTERN DOTS-123568
+ { 0x28B8, BIDI_L }, // BRAILLE PATTERN DOTS-4568
+ { 0x28B9, BIDI_L }, // BRAILLE PATTERN DOTS-14568
+ { 0x28BA, BIDI_L }, // BRAILLE PATTERN DOTS-24568
+ { 0x28BB, BIDI_L }, // BRAILLE PATTERN DOTS-124568
+ { 0x28BC, BIDI_L }, // BRAILLE PATTERN DOTS-34568
+ { 0x28BD, BIDI_L }, // BRAILLE PATTERN DOTS-134568
+ { 0x28BE, BIDI_L }, // BRAILLE PATTERN DOTS-234568
+ { 0x28BF, BIDI_L }, // BRAILLE PATTERN DOTS-1234568
+ { 0x28C0, BIDI_L }, // BRAILLE PATTERN DOTS-78
+ { 0x28C1, BIDI_L }, // BRAILLE PATTERN DOTS-178
+ { 0x28C2, BIDI_L }, // BRAILLE PATTERN DOTS-278
+ { 0x28C3, BIDI_L }, // BRAILLE PATTERN DOTS-1278
+ { 0x28C4, BIDI_L }, // BRAILLE PATTERN DOTS-378
+ { 0x28C5, BIDI_L }, // BRAILLE PATTERN DOTS-1378
+ { 0x28C6, BIDI_L }, // BRAILLE PATTERN DOTS-2378
+ { 0x28C7, BIDI_L }, // BRAILLE PATTERN DOTS-12378
+ { 0x28C8, BIDI_L }, // BRAILLE PATTERN DOTS-478
+ { 0x28C9, BIDI_L }, // BRAILLE PATTERN DOTS-1478
+ { 0x28CA, BIDI_L }, // BRAILLE PATTERN DOTS-2478
+ { 0x28CB, BIDI_L }, // BRAILLE PATTERN DOTS-12478
+ { 0x28CC, BIDI_L }, // BRAILLE PATTERN DOTS-3478
+ { 0x28CD, BIDI_L }, // BRAILLE PATTERN DOTS-13478
+ { 0x28CE, BIDI_L }, // BRAILLE PATTERN DOTS-23478
+ { 0x28CF, BIDI_L }, // BRAILLE PATTERN DOTS-123478
+ { 0x28D0, BIDI_L }, // BRAILLE PATTERN DOTS-578
+ { 0x28D1, BIDI_L }, // BRAILLE PATTERN DOTS-1578
+ { 0x28D2, BIDI_L }, // BRAILLE PATTERN DOTS-2578
+ { 0x28D3, BIDI_L }, // BRAILLE PATTERN DOTS-12578
+ { 0x28D4, BIDI_L }, // BRAILLE PATTERN DOTS-3578
+ { 0x28D5, BIDI_L }, // BRAILLE PATTERN DOTS-13578
+ { 0x28D6, BIDI_L }, // BRAILLE PATTERN DOTS-23578
+ { 0x28D7, BIDI_L }, // BRAILLE PATTERN DOTS-123578
+ { 0x28D8, BIDI_L }, // BRAILLE PATTERN DOTS-4578
+ { 0x28D9, BIDI_L }, // BRAILLE PATTERN DOTS-14578
+ { 0x28DA, BIDI_L }, // BRAILLE PATTERN DOTS-24578
+ { 0x28DB, BIDI_L }, // BRAILLE PATTERN DOTS-124578
+ { 0x28DC, BIDI_L }, // BRAILLE PATTERN DOTS-34578
+ { 0x28DD, BIDI_L }, // BRAILLE PATTERN DOTS-134578
+ { 0x28DE, BIDI_L }, // BRAILLE PATTERN DOTS-234578
+ { 0x28DF, BIDI_L }, // BRAILLE PATTERN DOTS-1234578
+ { 0x28E0, BIDI_L }, // BRAILLE PATTERN DOTS-678
+ { 0x28E1, BIDI_L }, // BRAILLE PATTERN DOTS-1678
+ { 0x28E2, BIDI_L }, // BRAILLE PATTERN DOTS-2678
+ { 0x28E3, BIDI_L }, // BRAILLE PATTERN DOTS-12678
+ { 0x28E4, BIDI_L }, // BRAILLE PATTERN DOTS-3678
+ { 0x28E5, BIDI_L }, // BRAILLE PATTERN DOTS-13678
+ { 0x28E6, BIDI_L }, // BRAILLE PATTERN DOTS-23678
+ { 0x28E7, BIDI_L }, // BRAILLE PATTERN DOTS-123678
+ { 0x28E8, BIDI_L }, // BRAILLE PATTERN DOTS-4678
+ { 0x28E9, BIDI_L }, // BRAILLE PATTERN DOTS-14678
+ { 0x28EA, BIDI_L }, // BRAILLE PATTERN DOTS-24678
+ { 0x28EB, BIDI_L }, // BRAILLE PATTERN DOTS-124678
+ { 0x28EC, BIDI_L }, // BRAILLE PATTERN DOTS-34678
+ { 0x28ED, BIDI_L }, // BRAILLE PATTERN DOTS-134678
+ { 0x28EE, BIDI_L }, // BRAILLE PATTERN DOTS-234678
+ { 0x28EF, BIDI_L }, // BRAILLE PATTERN DOTS-1234678
+ { 0x28F0, BIDI_L }, // BRAILLE PATTERN DOTS-5678
+ { 0x28F1, BIDI_L }, // BRAILLE PATTERN DOTS-15678
+ { 0x28F2, BIDI_L }, // BRAILLE PATTERN DOTS-25678
+ { 0x28F3, BIDI_L }, // BRAILLE PATTERN DOTS-125678
+ { 0x28F4, BIDI_L }, // BRAILLE PATTERN DOTS-35678
+ { 0x28F5, BIDI_L }, // BRAILLE PATTERN DOTS-135678
+ { 0x28F6, BIDI_L }, // BRAILLE PATTERN DOTS-235678
+ { 0x28F7, BIDI_L }, // BRAILLE PATTERN DOTS-1235678
+ { 0x28F8, BIDI_L }, // BRAILLE PATTERN DOTS-45678
+ { 0x28F9, BIDI_L }, // BRAILLE PATTERN DOTS-145678
+ { 0x28FA, BIDI_L }, // BRAILLE PATTERN DOTS-245678
+ { 0x28FB, BIDI_L }, // BRAILLE PATTERN DOTS-1245678
+ { 0x28FC, BIDI_L }, // BRAILLE PATTERN DOTS-345678
+ { 0x28FD, BIDI_L }, // BRAILLE PATTERN DOTS-1345678
+ { 0x28FE, BIDI_L }, // BRAILLE PATTERN DOTS-2345678
+ { 0x28FF, BIDI_L }, // BRAILLE PATTERN DOTS-12345678
+ { 0x2900, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+ { 0x2901, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+ { 0x2902, BIDI_ON }, // LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+ { 0x2903, BIDI_ON }, // RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE
+ { 0x2904, BIDI_ON }, // LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE
+ { 0x2905, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW FROM BAR
+ { 0x2906, BIDI_ON }, // LEFTWARDS DOUBLE ARROW FROM BAR
+ { 0x2907, BIDI_ON }, // RIGHTWARDS DOUBLE ARROW FROM BAR
+ { 0x2908, BIDI_ON }, // DOWNWARDS ARROW WITH HORIZONTAL STROKE
+ { 0x2909, BIDI_ON }, // UPWARDS ARROW WITH HORIZONTAL STROKE
+ { 0x290A, BIDI_ON }, // UPWARDS TRIPLE ARROW
+ { 0x290B, BIDI_ON }, // DOWNWARDS TRIPLE ARROW
+ { 0x290C, BIDI_ON }, // LEFTWARDS DOUBLE DASH ARROW
+ { 0x290D, BIDI_ON }, // RIGHTWARDS DOUBLE DASH ARROW
+ { 0x290E, BIDI_ON }, // LEFTWARDS TRIPLE DASH ARROW
+ { 0x290F, BIDI_ON }, // RIGHTWARDS TRIPLE DASH ARROW
+ { 0x2910, BIDI_ON }, // RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW
+ { 0x2911, BIDI_ON }, // RIGHTWARDS ARROW WITH DOTTED STEM
+ { 0x2912, BIDI_ON }, // UPWARDS ARROW TO BAR
+ { 0x2913, BIDI_ON }, // DOWNWARDS ARROW TO BAR
+ { 0x2914, BIDI_ON }, // RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+ { 0x2915, BIDI_ON }, // RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+ { 0x2916, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL
+ { 0x2917, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+ { 0x2918, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+ { 0x2919, BIDI_ON }, // LEFTWARDS ARROW-TAIL
+ { 0x291A, BIDI_ON }, // RIGHTWARDS ARROW-TAIL
+ { 0x291B, BIDI_ON }, // LEFTWARDS DOUBLE ARROW-TAIL
+ { 0x291C, BIDI_ON }, // RIGHTWARDS DOUBLE ARROW-TAIL
+ { 0x291D, BIDI_ON }, // LEFTWARDS ARROW TO BLACK DIAMOND
+ { 0x291E, BIDI_ON }, // RIGHTWARDS ARROW TO BLACK DIAMOND
+ { 0x291F, BIDI_ON }, // LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND
+ { 0x2920, BIDI_ON }, // RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND
+ { 0x2921, BIDI_ON }, // NORTH WEST AND SOUTH EAST ARROW
+ { 0x2922, BIDI_ON }, // NORTH EAST AND SOUTH WEST ARROW
+ { 0x2923, BIDI_ON }, // NORTH WEST ARROW WITH HOOK
+ { 0x2924, BIDI_ON }, // NORTH EAST ARROW WITH HOOK
+ { 0x2925, BIDI_ON }, // SOUTH EAST ARROW WITH HOOK
+ { 0x2926, BIDI_ON }, // SOUTH WEST ARROW WITH HOOK
+ { 0x2927, BIDI_ON }, // NORTH WEST ARROW AND NORTH EAST ARROW
+ { 0x2928, BIDI_ON }, // NORTH EAST ARROW AND SOUTH EAST ARROW
+ { 0x2929, BIDI_ON }, // SOUTH EAST ARROW AND SOUTH WEST ARROW
+ { 0x292A, BIDI_ON }, // SOUTH WEST ARROW AND NORTH WEST ARROW
+ { 0x292B, BIDI_ON }, // RISING DIAGONAL CROSSING FALLING DIAGONAL
+ { 0x292C, BIDI_ON }, // FALLING DIAGONAL CROSSING RISING DIAGONAL
+ { 0x292D, BIDI_ON }, // SOUTH EAST ARROW CROSSING NORTH EAST ARROW
+ { 0x292E, BIDI_ON }, // NORTH EAST ARROW CROSSING SOUTH EAST ARROW
+ { 0x292F, BIDI_ON }, // FALLING DIAGONAL CROSSING NORTH EAST ARROW
+ { 0x2930, BIDI_ON }, // RISING DIAGONAL CROSSING SOUTH EAST ARROW
+ { 0x2931, BIDI_ON }, // NORTH EAST ARROW CROSSING NORTH WEST ARROW
+ { 0x2932, BIDI_ON }, // NORTH WEST ARROW CROSSING NORTH EAST ARROW
+ { 0x2933, BIDI_ON }, // WAVE ARROW POINTING DIRECTLY RIGHT
+ { 0x2934, BIDI_ON }, // ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+ { 0x2935, BIDI_ON }, // ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+ { 0x2936, BIDI_ON }, // ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS
+ { 0x2937, BIDI_ON }, // ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS
+ { 0x2938, BIDI_ON }, // RIGHT-SIDE ARC CLOCKWISE ARROW
+ { 0x2939, BIDI_ON }, // LEFT-SIDE ARC ANTICLOCKWISE ARROW
+ { 0x293A, BIDI_ON }, // TOP ARC ANTICLOCKWISE ARROW
+ { 0x293B, BIDI_ON }, // BOTTOM ARC ANTICLOCKWISE ARROW
+ { 0x293C, BIDI_ON }, // TOP ARC CLOCKWISE ARROW WITH MINUS
+ { 0x293D, BIDI_ON }, // TOP ARC ANTICLOCKWISE ARROW WITH PLUS
+ { 0x293E, BIDI_ON }, // LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW
+ { 0x293F, BIDI_ON }, // LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW
+ { 0x2940, BIDI_ON }, // ANTICLOCKWISE CLOSED CIRCLE ARROW
+ { 0x2941, BIDI_ON }, // CLOCKWISE CLOSED CIRCLE ARROW
+ { 0x2942, BIDI_ON }, // RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW
+ { 0x2943, BIDI_ON }, // LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW
+ { 0x2944, BIDI_ON }, // SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW
+ { 0x2945, BIDI_ON }, // RIGHTWARDS ARROW WITH PLUS BELOW
+ { 0x2946, BIDI_ON }, // LEFTWARDS ARROW WITH PLUS BELOW
+ { 0x2947, BIDI_ON }, // RIGHTWARDS ARROW THROUGH X
+ { 0x2948, BIDI_ON }, // LEFT RIGHT ARROW THROUGH SMALL CIRCLE
+ { 0x2949, BIDI_ON }, // UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE
+ { 0x294A, BIDI_ON }, // LEFT BARB UP RIGHT BARB DOWN HARPOON
+ { 0x294B, BIDI_ON }, // LEFT BARB DOWN RIGHT BARB UP HARPOON
+ { 0x294C, BIDI_ON }, // UP BARB RIGHT DOWN BARB LEFT HARPOON
+ { 0x294D, BIDI_ON }, // UP BARB LEFT DOWN BARB RIGHT HARPOON
+ { 0x294E, BIDI_ON }, // LEFT BARB UP RIGHT BARB UP HARPOON
+ { 0x294F, BIDI_ON }, // UP BARB RIGHT DOWN BARB RIGHT HARPOON
+ { 0x2950, BIDI_ON }, // LEFT BARB DOWN RIGHT BARB DOWN HARPOON
+ { 0x2951, BIDI_ON }, // UP BARB LEFT DOWN BARB LEFT HARPOON
+ { 0x2952, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB UP TO BAR
+ { 0x2953, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB UP TO BAR
+ { 0x2954, BIDI_ON }, // UPWARDS HARPOON WITH BARB RIGHT TO BAR
+ { 0x2955, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB RIGHT TO BAR
+ { 0x2956, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB DOWN TO BAR
+ { 0x2957, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB DOWN TO BAR
+ { 0x2958, BIDI_ON }, // UPWARDS HARPOON WITH BARB LEFT TO BAR
+ { 0x2959, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB LEFT TO BAR
+ { 0x295A, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB UP FROM BAR
+ { 0x295B, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB UP FROM BAR
+ { 0x295C, BIDI_ON }, // UPWARDS HARPOON WITH BARB RIGHT FROM BAR
+ { 0x295D, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR
+ { 0x295E, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB DOWN FROM BAR
+ { 0x295F, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR
+ { 0x2960, BIDI_ON }, // UPWARDS HARPOON WITH BARB LEFT FROM BAR
+ { 0x2961, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB LEFT FROM BAR
+ { 0x2962, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+ { 0x2963, BIDI_ON }, // UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+ { 0x2964, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+ { 0x2965, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+ { 0x2966, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP
+ { 0x2967, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN
+ { 0x2968, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP
+ { 0x2969, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN
+ { 0x296A, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+ { 0x296B, BIDI_ON }, // LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+ { 0x296C, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH
+ { 0x296D, BIDI_ON }, // RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH
+ { 0x296E, BIDI_ON }, // UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT
+ { 0x296F, BIDI_ON }, // DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT
+ { 0x2970, BIDI_ON }, // RIGHT DOUBLE ARROW WITH ROUNDED HEAD
+ { 0x2971, BIDI_ON }, // EQUALS SIGN ABOVE RIGHTWARDS ARROW
+ { 0x2972, BIDI_ON }, // TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+ { 0x2973, BIDI_ON }, // LEFTWARDS ARROW ABOVE TILDE OPERATOR
+ { 0x2974, BIDI_ON }, // RIGHTWARDS ARROW ABOVE TILDE OPERATOR
+ { 0x2975, BIDI_ON }, // RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO
+ { 0x2976, BIDI_ON }, // LESS-THAN ABOVE LEFTWARDS ARROW
+ { 0x2977, BIDI_ON }, // LEFTWARDS ARROW THROUGH LESS-THAN
+ { 0x2978, BIDI_ON }, // GREATER-THAN ABOVE RIGHTWARDS ARROW
+ { 0x2979, BIDI_ON }, // SUBSET ABOVE RIGHTWARDS ARROW
+ { 0x297A, BIDI_ON }, // LEFTWARDS ARROW THROUGH SUBSET
+ { 0x297B, BIDI_ON }, // SUPERSET ABOVE LEFTWARDS ARROW
+ { 0x297C, BIDI_ON }, // LEFT FISH TAIL
+ { 0x297D, BIDI_ON }, // RIGHT FISH TAIL
+ { 0x297E, BIDI_ON }, // UP FISH TAIL
+ { 0x297F, BIDI_ON }, // DOWN FISH TAIL
+ { 0x2980, BIDI_ON }, // TRIPLE VERTICAL BAR DELIMITER
+ { 0x2981, BIDI_ON }, // Z NOTATION SPOT
+ { 0x2982, BIDI_ON }, // Z NOTATION TYPE COLON
+ { 0x2983, BIDI_ON }, // LEFT WHITE CURLY BRACKET
+ { 0x2984, BIDI_ON }, // RIGHT WHITE CURLY BRACKET
+ { 0x2985, BIDI_ON }, // LEFT WHITE PARENTHESIS
+ { 0x2986, BIDI_ON }, // RIGHT WHITE PARENTHESIS
+ { 0x2987, BIDI_ON }, // Z NOTATION LEFT IMAGE BRACKET
+ { 0x2988, BIDI_ON }, // Z NOTATION RIGHT IMAGE BRACKET
+ { 0x2989, BIDI_ON }, // Z NOTATION LEFT BINDING BRACKET
+ { 0x298A, BIDI_ON }, // Z NOTATION RIGHT BINDING BRACKET
+ { 0x298B, BIDI_ON }, // LEFT SQUARE BRACKET WITH UNDERBAR
+ { 0x298C, BIDI_ON }, // RIGHT SQUARE BRACKET WITH UNDERBAR
+ { 0x298D, BIDI_ON }, // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+ { 0x298E, BIDI_ON }, // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+ { 0x298F, BIDI_ON }, // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+ { 0x2990, BIDI_ON }, // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+ { 0x2991, BIDI_ON }, // LEFT ANGLE BRACKET WITH DOT
+ { 0x2992, BIDI_ON }, // RIGHT ANGLE BRACKET WITH DOT
+ { 0x2993, BIDI_ON }, // LEFT ARC LESS-THAN BRACKET
+ { 0x2994, BIDI_ON }, // RIGHT ARC GREATER-THAN BRACKET
+ { 0x2995, BIDI_ON }, // DOUBLE LEFT ARC GREATER-THAN BRACKET
+ { 0x2996, BIDI_ON }, // DOUBLE RIGHT ARC LESS-THAN BRACKET
+ { 0x2997, BIDI_ON }, // LEFT BLACK TORTOISE SHELL BRACKET
+ { 0x2998, BIDI_ON }, // RIGHT BLACK TORTOISE SHELL BRACKET
+ { 0x2999, BIDI_ON }, // DOTTED FENCE
+ { 0x299A, BIDI_ON }, // VERTICAL ZIGZAG LINE
+ { 0x299B, BIDI_ON }, // MEASURED ANGLE OPENING LEFT
+ { 0x299C, BIDI_ON }, // RIGHT ANGLE VARIANT WITH SQUARE
+ { 0x299D, BIDI_ON }, // MEASURED RIGHT ANGLE WITH DOT
+ { 0x299E, BIDI_ON }, // ANGLE WITH S INSIDE
+ { 0x299F, BIDI_ON }, // ACUTE ANGLE
+ { 0x29A0, BIDI_ON }, // SPHERICAL ANGLE OPENING LEFT
+ { 0x29A1, BIDI_ON }, // SPHERICAL ANGLE OPENING UP
+ { 0x29A2, BIDI_ON }, // TURNED ANGLE
+ { 0x29A3, BIDI_ON }, // REVERSED ANGLE
+ { 0x29A4, BIDI_ON }, // ANGLE WITH UNDERBAR
+ { 0x29A5, BIDI_ON }, // REVERSED ANGLE WITH UNDERBAR
+ { 0x29A6, BIDI_ON }, // OBLIQUE ANGLE OPENING UP
+ { 0x29A7, BIDI_ON }, // OBLIQUE ANGLE OPENING DOWN
+ { 0x29A8, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
+ { 0x29A9, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
+ { 0x29AA, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
+ { 0x29AB, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
+ { 0x29AC, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
+ { 0x29AD, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
+ { 0x29AE, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
+ { 0x29AF, BIDI_ON }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
+ { 0x29B0, BIDI_ON }, // REVERSED EMPTY SET
+ { 0x29B1, BIDI_ON }, // EMPTY SET WITH OVERBAR
+ { 0x29B2, BIDI_ON }, // EMPTY SET WITH SMALL CIRCLE ABOVE
+ { 0x29B3, BIDI_ON }, // EMPTY SET WITH RIGHT ARROW ABOVE
+ { 0x29B4, BIDI_ON }, // EMPTY SET WITH LEFT ARROW ABOVE
+ { 0x29B5, BIDI_ON }, // CIRCLE WITH HORIZONTAL BAR
+ { 0x29B6, BIDI_ON }, // CIRCLED VERTICAL BAR
+ { 0x29B7, BIDI_ON }, // CIRCLED PARALLEL
+ { 0x29B8, BIDI_ON }, // CIRCLED REVERSE SOLIDUS
+ { 0x29B9, BIDI_ON }, // CIRCLED PERPENDICULAR
+ { 0x29BA, BIDI_ON }, // CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR
+ { 0x29BB, BIDI_ON }, // CIRCLE WITH SUPERIMPOSED X
+ { 0x29BC, BIDI_ON }, // CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN
+ { 0x29BD, BIDI_ON }, // UP ARROW THROUGH CIRCLE
+ { 0x29BE, BIDI_ON }, // CIRCLED WHITE BULLET
+ { 0x29BF, BIDI_ON }, // CIRCLED BULLET
+ { 0x29C0, BIDI_ON }, // CIRCLED LESS-THAN
+ { 0x29C1, BIDI_ON }, // CIRCLED GREATER-THAN
+ { 0x29C2, BIDI_ON }, // CIRCLE WITH SMALL CIRCLE TO THE RIGHT
+ { 0x29C3, BIDI_ON }, // CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT
+ { 0x29C4, BIDI_ON }, // SQUARED RISING DIAGONAL SLASH
+ { 0x29C5, BIDI_ON }, // SQUARED FALLING DIAGONAL SLASH
+ { 0x29C6, BIDI_ON }, // SQUARED ASTERISK
+ { 0x29C7, BIDI_ON }, // SQUARED SMALL CIRCLE
+ { 0x29C8, BIDI_ON }, // SQUARED SQUARE
+ { 0x29C9, BIDI_ON }, // TWO JOINED SQUARES
+ { 0x29CA, BIDI_ON }, // TRIANGLE WITH DOT ABOVE
+ { 0x29CB, BIDI_ON }, // TRIANGLE WITH UNDERBAR
+ { 0x29CC, BIDI_ON }, // S IN TRIANGLE
+ { 0x29CD, BIDI_ON }, // TRIANGLE WITH SERIFS AT BOTTOM
+ { 0x29CE, BIDI_ON }, // RIGHT TRIANGLE ABOVE LEFT TRIANGLE
+ { 0x29CF, BIDI_ON }, // LEFT TRIANGLE BESIDE VERTICAL BAR
+ { 0x29D0, BIDI_ON }, // VERTICAL BAR BESIDE RIGHT TRIANGLE
+ { 0x29D1, BIDI_ON }, // BOWTIE WITH LEFT HALF BLACK
+ { 0x29D2, BIDI_ON }, // BOWTIE WITH RIGHT HALF BLACK
+ { 0x29D3, BIDI_ON }, // BLACK BOWTIE
+ { 0x29D4, BIDI_ON }, // TIMES WITH LEFT HALF BLACK
+ { 0x29D5, BIDI_ON }, // TIMES WITH RIGHT HALF BLACK
+ { 0x29D6, BIDI_ON }, // WHITE HOURGLASS
+ { 0x29D7, BIDI_ON }, // BLACK HOURGLASS
+ { 0x29D8, BIDI_ON }, // LEFT WIGGLY FENCE
+ { 0x29D9, BIDI_ON }, // RIGHT WIGGLY FENCE
+ { 0x29DA, BIDI_ON }, // LEFT DOUBLE WIGGLY FENCE
+ { 0x29DB, BIDI_ON }, // RIGHT DOUBLE WIGGLY FENCE
+ { 0x29DC, BIDI_ON }, // INCOMPLETE INFINITY
+ { 0x29DD, BIDI_ON }, // TIE OVER INFINITY
+ { 0x29DE, BIDI_ON }, // INFINITY NEGATED WITH VERTICAL BAR
+ { 0x29DF, BIDI_ON }, // DOUBLE-ENDED MULTIMAP
+ { 0x29E0, BIDI_ON }, // SQUARE WITH CONTOURED OUTLINE
+ { 0x29E1, BIDI_ON }, // INCREASES AS
+ { 0x29E2, BIDI_ON }, // SHUFFLE PRODUCT
+ { 0x29E3, BIDI_ON }, // EQUALS SIGN AND SLANTED PARALLEL
+ { 0x29E4, BIDI_ON }, // EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE
+ { 0x29E5, BIDI_ON }, // IDENTICAL TO AND SLANTED PARALLEL
+ { 0x29E6, BIDI_ON }, // GLEICH STARK
+ { 0x29E7, BIDI_ON }, // THERMODYNAMIC
+ { 0x29E8, BIDI_ON }, // DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
+ { 0x29E9, BIDI_ON }, // DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
+ { 0x29EA, BIDI_ON }, // BLACK DIAMOND WITH DOWN ARROW
+ { 0x29EB, BIDI_ON }, // BLACK LOZENGE
+ { 0x29EC, BIDI_ON }, // WHITE CIRCLE WITH DOWN ARROW
+ { 0x29ED, BIDI_ON }, // BLACK CIRCLE WITH DOWN ARROW
+ { 0x29EE, BIDI_ON }, // ERROR-BARRED WHITE SQUARE
+ { 0x29EF, BIDI_ON }, // ERROR-BARRED BLACK SQUARE
+ { 0x29F0, BIDI_ON }, // ERROR-BARRED WHITE DIAMOND
+ { 0x29F1, BIDI_ON }, // ERROR-BARRED BLACK DIAMOND
+ { 0x29F2, BIDI_ON }, // ERROR-BARRED WHITE CIRCLE
+ { 0x29F3, BIDI_ON }, // ERROR-BARRED BLACK CIRCLE
+ { 0x29F4, BIDI_ON }, // RULE-DELAYED
+ { 0x29F5, BIDI_ON }, // REVERSE SOLIDUS OPERATOR
+ { 0x29F6, BIDI_ON }, // SOLIDUS WITH OVERBAR
+ { 0x29F7, BIDI_ON }, // REVERSE SOLIDUS WITH HORIZONTAL STROKE
+ { 0x29F8, BIDI_ON }, // BIG SOLIDUS
+ { 0x29F9, BIDI_ON }, // BIG REVERSE SOLIDUS
+ { 0x29FA, BIDI_ON }, // DOUBLE PLUS
+ { 0x29FB, BIDI_ON }, // TRIPLE PLUS
+ { 0x29FC, BIDI_ON }, // LEFT-POINTING CURVED ANGLE BRACKET
+ { 0x29FD, BIDI_ON }, // RIGHT-POINTING CURVED ANGLE BRACKET
+ { 0x29FE, BIDI_ON }, // TINY
+ { 0x29FF, BIDI_ON }, // MINY
+ { 0x2A00, BIDI_ON }, // N-ARY CIRCLED DOT OPERATOR
+ { 0x2A01, BIDI_ON }, // N-ARY CIRCLED PLUS OPERATOR
+ { 0x2A02, BIDI_ON }, // N-ARY CIRCLED TIMES OPERATOR
+ { 0x2A03, BIDI_ON }, // N-ARY UNION OPERATOR WITH DOT
+ { 0x2A04, BIDI_ON }, // N-ARY UNION OPERATOR WITH PLUS
+ { 0x2A05, BIDI_ON }, // N-ARY SQUARE INTERSECTION OPERATOR
+ { 0x2A06, BIDI_ON }, // N-ARY SQUARE UNION OPERATOR
+ { 0x2A07, BIDI_ON }, // TWO LOGICAL AND OPERATOR
+ { 0x2A08, BIDI_ON }, // TWO LOGICAL OR OPERATOR
+ { 0x2A09, BIDI_ON }, // N-ARY TIMES OPERATOR
+ { 0x2A0A, BIDI_ON }, // MODULO TWO SUM
+ { 0x2A0B, BIDI_ON }, // SUMMATION WITH INTEGRAL
+ { 0x2A0C, BIDI_ON }, // QUADRUPLE INTEGRAL OPERATOR
+ { 0x2A0D, BIDI_ON }, // FINITE PART INTEGRAL
+ { 0x2A0E, BIDI_ON }, // INTEGRAL WITH DOUBLE STROKE
+ { 0x2A0F, BIDI_ON }, // INTEGRAL AVERAGE WITH SLASH
+ { 0x2A10, BIDI_ON }, // CIRCULATION FUNCTION
+ { 0x2A11, BIDI_ON }, // ANTICLOCKWISE INTEGRATION
+ { 0x2A12, BIDI_ON }, // LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE
+ { 0x2A13, BIDI_ON }, // LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE
+ { 0x2A14, BIDI_ON }, // LINE INTEGRATION NOT INCLUDING THE POLE
+ { 0x2A15, BIDI_ON }, // INTEGRAL AROUND A POINT OPERATOR
+ { 0x2A16, BIDI_ON }, // QUATERNION INTEGRAL OPERATOR
+ { 0x2A17, BIDI_ON }, // INTEGRAL WITH LEFTWARDS ARROW WITH HOOK
+ { 0x2A18, BIDI_ON }, // INTEGRAL WITH TIMES SIGN
+ { 0x2A19, BIDI_ON }, // INTEGRAL WITH INTERSECTION
+ { 0x2A1A, BIDI_ON }, // INTEGRAL WITH UNION
+ { 0x2A1B, BIDI_ON }, // INTEGRAL WITH OVERBAR
+ { 0x2A1C, BIDI_ON }, // INTEGRAL WITH UNDERBAR
+ { 0x2A1D, BIDI_ON }, // JOIN
+ { 0x2A1E, BIDI_ON }, // LARGE LEFT TRIANGLE OPERATOR
+ { 0x2A1F, BIDI_ON }, // Z NOTATION SCHEMA COMPOSITION
+ { 0x2A20, BIDI_ON }, // Z NOTATION SCHEMA PIPING
+ { 0x2A21, BIDI_ON }, // Z NOTATION SCHEMA PROJECTION
+ { 0x2A22, BIDI_ON }, // PLUS SIGN WITH SMALL CIRCLE ABOVE
+ { 0x2A23, BIDI_ON }, // PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE
+ { 0x2A24, BIDI_ON }, // PLUS SIGN WITH TILDE ABOVE
+ { 0x2A25, BIDI_ON }, // PLUS SIGN WITH DOT BELOW
+ { 0x2A26, BIDI_ON }, // PLUS SIGN WITH TILDE BELOW
+ { 0x2A27, BIDI_ON }, // PLUS SIGN WITH SUBSCRIPT TWO
+ { 0x2A28, BIDI_ON }, // PLUS SIGN WITH BLACK TRIANGLE
+ { 0x2A29, BIDI_ON }, // MINUS SIGN WITH COMMA ABOVE
+ { 0x2A2A, BIDI_ON }, // MINUS SIGN WITH DOT BELOW
+ { 0x2A2B, BIDI_ON }, // MINUS SIGN WITH FALLING DOTS
+ { 0x2A2C, BIDI_ON }, // MINUS SIGN WITH RISING DOTS
+ { 0x2A2D, BIDI_ON }, // PLUS SIGN IN LEFT HALF CIRCLE
+ { 0x2A2E, BIDI_ON }, // PLUS SIGN IN RIGHT HALF CIRCLE
+ { 0x2A2F, BIDI_ON }, // VECTOR OR CROSS PRODUCT
+ { 0x2A30, BIDI_ON }, // MULTIPLICATION SIGN WITH DOT ABOVE
+ { 0x2A31, BIDI_ON }, // MULTIPLICATION SIGN WITH UNDERBAR
+ { 0x2A32, BIDI_ON }, // SEMIDIRECT PRODUCT WITH BOTTOM CLOSED
+ { 0x2A33, BIDI_ON }, // SMASH PRODUCT
+ { 0x2A34, BIDI_ON }, // MULTIPLICATION SIGN IN LEFT HALF CIRCLE
+ { 0x2A35, BIDI_ON }, // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
+ { 0x2A36, BIDI_ON }, // CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT
+ { 0x2A37, BIDI_ON }, // MULTIPLICATION SIGN IN DOUBLE CIRCLE
+ { 0x2A38, BIDI_ON }, // CIRCLED DIVISION SIGN
+ { 0x2A39, BIDI_ON }, // PLUS SIGN IN TRIANGLE
+ { 0x2A3A, BIDI_ON }, // MINUS SIGN IN TRIANGLE
+ { 0x2A3B, BIDI_ON }, // MULTIPLICATION SIGN IN TRIANGLE
+ { 0x2A3C, BIDI_ON }, // INTERIOR PRODUCT
+ { 0x2A3D, BIDI_ON }, // RIGHTHAND INTERIOR PRODUCT
+ { 0x2A3E, BIDI_ON }, // Z NOTATION RELATIONAL COMPOSITION
+ { 0x2A3F, BIDI_ON }, // AMALGAMATION OR COPRODUCT
+ { 0x2A40, BIDI_ON }, // INTERSECTION WITH DOT
+ { 0x2A41, BIDI_ON }, // UNION WITH MINUS SIGN
+ { 0x2A42, BIDI_ON }, // UNION WITH OVERBAR
+ { 0x2A43, BIDI_ON }, // INTERSECTION WITH OVERBAR
+ { 0x2A44, BIDI_ON }, // INTERSECTION WITH LOGICAL AND
+ { 0x2A45, BIDI_ON }, // UNION WITH LOGICAL OR
+ { 0x2A46, BIDI_ON }, // UNION ABOVE INTERSECTION
+ { 0x2A47, BIDI_ON }, // INTERSECTION ABOVE UNION
+ { 0x2A48, BIDI_ON }, // UNION ABOVE BAR ABOVE INTERSECTION
+ { 0x2A49, BIDI_ON }, // INTERSECTION ABOVE BAR ABOVE UNION
+ { 0x2A4A, BIDI_ON }, // UNION BESIDE AND JOINED WITH UNION
+ { 0x2A4B, BIDI_ON }, // INTERSECTION BESIDE AND JOINED WITH INTERSECTION
+ { 0x2A4C, BIDI_ON }, // CLOSED UNION WITH SERIFS
+ { 0x2A4D, BIDI_ON }, // CLOSED INTERSECTION WITH SERIFS
+ { 0x2A4E, BIDI_ON }, // DOUBLE SQUARE INTERSECTION
+ { 0x2A4F, BIDI_ON }, // DOUBLE SQUARE UNION
+ { 0x2A50, BIDI_ON }, // CLOSED UNION WITH SERIFS AND SMASH PRODUCT
+ { 0x2A51, BIDI_ON }, // LOGICAL AND WITH DOT ABOVE
+ { 0x2A52, BIDI_ON }, // LOGICAL OR WITH DOT ABOVE
+ { 0x2A53, BIDI_ON }, // DOUBLE LOGICAL AND
+ { 0x2A54, BIDI_ON }, // DOUBLE LOGICAL OR
+ { 0x2A55, BIDI_ON }, // TWO INTERSECTING LOGICAL AND
+ { 0x2A56, BIDI_ON }, // TWO INTERSECTING LOGICAL OR
+ { 0x2A57, BIDI_ON }, // SLOPING LARGE OR
+ { 0x2A58, BIDI_ON }, // SLOPING LARGE AND
+ { 0x2A59, BIDI_ON }, // LOGICAL OR OVERLAPPING LOGICAL AND
+ { 0x2A5A, BIDI_ON }, // LOGICAL AND WITH MIDDLE STEM
+ { 0x2A5B, BIDI_ON }, // LOGICAL OR WITH MIDDLE STEM
+ { 0x2A5C, BIDI_ON }, // LOGICAL AND WITH HORIZONTAL DASH
+ { 0x2A5D, BIDI_ON }, // LOGICAL OR WITH HORIZONTAL DASH
+ { 0x2A5E, BIDI_ON }, // LOGICAL AND WITH DOUBLE OVERBAR
+ { 0x2A5F, BIDI_ON }, // LOGICAL AND WITH UNDERBAR
+ { 0x2A60, BIDI_ON }, // LOGICAL AND WITH DOUBLE UNDERBAR
+ { 0x2A61, BIDI_ON }, // SMALL VEE WITH UNDERBAR
+ { 0x2A62, BIDI_ON }, // LOGICAL OR WITH DOUBLE OVERBAR
+ { 0x2A63, BIDI_ON }, // LOGICAL OR WITH DOUBLE UNDERBAR
+ { 0x2A64, BIDI_ON }, // Z NOTATION DOMAIN ANTIRESTRICTION
+ { 0x2A65, BIDI_ON }, // Z NOTATION RANGE ANTIRESTRICTION
+ { 0x2A66, BIDI_ON }, // EQUALS SIGN WITH DOT BELOW
+ { 0x2A67, BIDI_ON }, // IDENTICAL WITH DOT ABOVE
+ { 0x2A68, BIDI_ON }, // TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE
+ { 0x2A69, BIDI_ON }, // TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE
+ { 0x2A6A, BIDI_ON }, // TILDE OPERATOR WITH DOT ABOVE
+ { 0x2A6B, BIDI_ON }, // TILDE OPERATOR WITH RISING DOTS
+ { 0x2A6C, BIDI_ON }, // SIMILAR MINUS SIMILAR
+ { 0x2A6D, BIDI_ON }, // CONGRUENT WITH DOT ABOVE
+ { 0x2A6E, BIDI_ON }, // EQUALS WITH ASTERISK
+ { 0x2A6F, BIDI_ON }, // ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT
+ { 0x2A70, BIDI_ON }, // APPROXIMATELY EQUAL OR EQUAL TO
+ { 0x2A71, BIDI_ON }, // EQUALS SIGN ABOVE PLUS SIGN
+ { 0x2A72, BIDI_ON }, // PLUS SIGN ABOVE EQUALS SIGN
+ { 0x2A73, BIDI_ON }, // EQUALS SIGN ABOVE TILDE OPERATOR
+ { 0x2A74, BIDI_ON }, // DOUBLE COLON EQUAL
+ { 0x2A75, BIDI_ON }, // TWO CONSECUTIVE EQUALS SIGNS
+ { 0x2A76, BIDI_ON }, // THREE CONSECUTIVE EQUALS SIGNS
+ { 0x2A77, BIDI_ON }, // EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW
+ { 0x2A78, BIDI_ON }, // EQUIVALENT WITH FOUR DOTS ABOVE
+ { 0x2A79, BIDI_ON }, // LESS-THAN WITH CIRCLE INSIDE
+ { 0x2A7A, BIDI_ON }, // GREATER-THAN WITH CIRCLE INSIDE
+ { 0x2A7B, BIDI_ON }, // LESS-THAN WITH QUESTION MARK ABOVE
+ { 0x2A7C, BIDI_ON }, // GREATER-THAN WITH QUESTION MARK ABOVE
+ { 0x2A7D, BIDI_ON }, // LESS-THAN OR SLANTED EQUAL TO
+ { 0x2A7E, BIDI_ON }, // GREATER-THAN OR SLANTED EQUAL TO
+ { 0x2A7F, BIDI_ON }, // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+ { 0x2A80, BIDI_ON }, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
+ { 0x2A81, BIDI_ON }, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+ { 0x2A82, BIDI_ON }, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
+ { 0x2A83, BIDI_ON }, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
+ { 0x2A84, BIDI_ON }, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
+ { 0x2A85, BIDI_ON }, // LESS-THAN OR APPROXIMATE
+ { 0x2A86, BIDI_ON }, // GREATER-THAN OR APPROXIMATE
+ { 0x2A87, BIDI_ON }, // LESS-THAN AND SINGLE-LINE NOT EQUAL TO
+ { 0x2A88, BIDI_ON }, // GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
+ { 0x2A89, BIDI_ON }, // LESS-THAN AND NOT APPROXIMATE
+ { 0x2A8A, BIDI_ON }, // GREATER-THAN AND NOT APPROXIMATE
+ { 0x2A8B, BIDI_ON }, // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
+ { 0x2A8C, BIDI_ON }, // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
+ { 0x2A8D, BIDI_ON }, // LESS-THAN ABOVE SIMILAR OR EQUAL
+ { 0x2A8E, BIDI_ON }, // GREATER-THAN ABOVE SIMILAR OR EQUAL
+ { 0x2A8F, BIDI_ON }, // LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
+ { 0x2A90, BIDI_ON }, // GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
+ { 0x2A91, BIDI_ON }, // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
+ { 0x2A92, BIDI_ON }, // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
+ { 0x2A93, BIDI_ON }, // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
+ { 0x2A94, BIDI_ON }, // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
+ { 0x2A95, BIDI_ON }, // SLANTED EQUAL TO OR LESS-THAN
+ { 0x2A96, BIDI_ON }, // SLANTED EQUAL TO OR GREATER-THAN
+ { 0x2A97, BIDI_ON }, // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
+ { 0x2A98, BIDI_ON }, // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
+ { 0x2A99, BIDI_ON }, // DOUBLE-LINE EQUAL TO OR LESS-THAN
+ { 0x2A9A, BIDI_ON }, // DOUBLE-LINE EQUAL TO OR GREATER-THAN
+ { 0x2A9B, BIDI_ON }, // DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
+ { 0x2A9C, BIDI_ON }, // DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
+ { 0x2A9D, BIDI_ON }, // SIMILAR OR LESS-THAN
+ { 0x2A9E, BIDI_ON }, // SIMILAR OR GREATER-THAN
+ { 0x2A9F, BIDI_ON }, // SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
+ { 0x2AA0, BIDI_ON }, // SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
+ { 0x2AA1, BIDI_ON }, // DOUBLE NESTED LESS-THAN
+ { 0x2AA2, BIDI_ON }, // DOUBLE NESTED GREATER-THAN
+ { 0x2AA3, BIDI_ON }, // DOUBLE NESTED LESS-THAN WITH UNDERBAR
+ { 0x2AA4, BIDI_ON }, // GREATER-THAN OVERLAPPING LESS-THAN
+ { 0x2AA5, BIDI_ON }, // GREATER-THAN BESIDE LESS-THAN
+ { 0x2AA6, BIDI_ON }, // LESS-THAN CLOSED BY CURVE
+ { 0x2AA7, BIDI_ON }, // GREATER-THAN CLOSED BY CURVE
+ { 0x2AA8, BIDI_ON }, // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+ { 0x2AA9, BIDI_ON }, // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
+ { 0x2AAA, BIDI_ON }, // SMALLER THAN
+ { 0x2AAB, BIDI_ON }, // LARGER THAN
+ { 0x2AAC, BIDI_ON }, // SMALLER THAN OR EQUAL TO
+ { 0x2AAD, BIDI_ON }, // LARGER THAN OR EQUAL TO
+ { 0x2AAE, BIDI_ON }, // EQUALS SIGN WITH BUMPY ABOVE
+ { 0x2AAF, BIDI_ON }, // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
+ { 0x2AB0, BIDI_ON }, // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
+ { 0x2AB1, BIDI_ON }, // PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
+ { 0x2AB2, BIDI_ON }, // SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
+ { 0x2AB3, BIDI_ON }, // PRECEDES ABOVE EQUALS SIGN
+ { 0x2AB4, BIDI_ON }, // SUCCEEDS ABOVE EQUALS SIGN
+ { 0x2AB5, BIDI_ON }, // PRECEDES ABOVE NOT EQUAL TO
+ { 0x2AB6, BIDI_ON }, // SUCCEEDS ABOVE NOT EQUAL TO
+ { 0x2AB7, BIDI_ON }, // PRECEDES ABOVE ALMOST EQUAL TO
+ { 0x2AB8, BIDI_ON }, // SUCCEEDS ABOVE ALMOST EQUAL TO
+ { 0x2AB9, BIDI_ON }, // PRECEDES ABOVE NOT ALMOST EQUAL TO
+ { 0x2ABA, BIDI_ON }, // SUCCEEDS ABOVE NOT ALMOST EQUAL TO
+ { 0x2ABB, BIDI_ON }, // DOUBLE PRECEDES
+ { 0x2ABC, BIDI_ON }, // DOUBLE SUCCEEDS
+ { 0x2ABD, BIDI_ON }, // SUBSET WITH DOT
+ { 0x2ABE, BIDI_ON }, // SUPERSET WITH DOT
+ { 0x2ABF, BIDI_ON }, // SUBSET WITH PLUS SIGN BELOW
+ { 0x2AC0, BIDI_ON }, // SUPERSET WITH PLUS SIGN BELOW
+ { 0x2AC1, BIDI_ON }, // SUBSET WITH MULTIPLICATION SIGN BELOW
+ { 0x2AC2, BIDI_ON }, // SUPERSET WITH MULTIPLICATION SIGN BELOW
+ { 0x2AC3, BIDI_ON }, // SUBSET OF OR EQUAL TO WITH DOT ABOVE
+ { 0x2AC4, BIDI_ON }, // SUPERSET OF OR EQUAL TO WITH DOT ABOVE
+ { 0x2AC5, BIDI_ON }, // SUBSET OF ABOVE EQUALS SIGN
+ { 0x2AC6, BIDI_ON }, // SUPERSET OF ABOVE EQUALS SIGN
+ { 0x2AC7, BIDI_ON }, // SUBSET OF ABOVE TILDE OPERATOR
+ { 0x2AC8, BIDI_ON }, // SUPERSET OF ABOVE TILDE OPERATOR
+ { 0x2AC9, BIDI_ON }, // SUBSET OF ABOVE ALMOST EQUAL TO
+ { 0x2ACA, BIDI_ON }, // SUPERSET OF ABOVE ALMOST EQUAL TO
+ { 0x2ACB, BIDI_ON }, // SUBSET OF ABOVE NOT EQUAL TO
+ { 0x2ACC, BIDI_ON }, // SUPERSET OF ABOVE NOT EQUAL TO
+ { 0x2ACD, BIDI_ON }, // SQUARE LEFT OPEN BOX OPERATOR
+ { 0x2ACE, BIDI_ON }, // SQUARE RIGHT OPEN BOX OPERATOR
+ { 0x2ACF, BIDI_ON }, // CLOSED SUBSET
+ { 0x2AD0, BIDI_ON }, // CLOSED SUPERSET
+ { 0x2AD1, BIDI_ON }, // CLOSED SUBSET OR EQUAL TO
+ { 0x2AD2, BIDI_ON }, // CLOSED SUPERSET OR EQUAL TO
+ { 0x2AD3, BIDI_ON }, // SUBSET ABOVE SUPERSET
+ { 0x2AD4, BIDI_ON }, // SUPERSET ABOVE SUBSET
+ { 0x2AD5, BIDI_ON }, // SUBSET ABOVE SUBSET
+ { 0x2AD6, BIDI_ON }, // SUPERSET ABOVE SUPERSET
+ { 0x2AD7, BIDI_ON }, // SUPERSET BESIDE SUBSET
+ { 0x2AD8, BIDI_ON }, // SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET
+ { 0x2AD9, BIDI_ON }, // ELEMENT OF OPENING DOWNWARDS
+ { 0x2ADA, BIDI_ON }, // PITCHFORK WITH TEE TOP
+ { 0x2ADB, BIDI_ON }, // TRANSVERSAL INTERSECTION
+ { 0x2ADC, BIDI_ON }, // FORKING
+ { 0x2ADD, BIDI_ON }, // NONFORKING
+ { 0x2ADE, BIDI_ON }, // SHORT LEFT TACK
+ { 0x2ADF, BIDI_ON }, // SHORT DOWN TACK
+ { 0x2AE0, BIDI_ON }, // SHORT UP TACK
+ { 0x2AE1, BIDI_ON }, // PERPENDICULAR WITH S
+ { 0x2AE2, BIDI_ON }, // VERTICAL BAR TRIPLE RIGHT TURNSTILE
+ { 0x2AE3, BIDI_ON }, // DOUBLE VERTICAL BAR LEFT TURNSTILE
+ { 0x2AE4, BIDI_ON }, // VERTICAL BAR DOUBLE LEFT TURNSTILE
+ { 0x2AE5, BIDI_ON }, // DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
+ { 0x2AE6, BIDI_ON }, // LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL
+ { 0x2AE7, BIDI_ON }, // SHORT DOWN TACK WITH OVERBAR
+ { 0x2AE8, BIDI_ON }, // SHORT UP TACK WITH UNDERBAR
+ { 0x2AE9, BIDI_ON }, // SHORT UP TACK ABOVE SHORT DOWN TACK
+ { 0x2AEA, BIDI_ON }, // DOUBLE DOWN TACK
+ { 0x2AEB, BIDI_ON }, // DOUBLE UP TACK
+ { 0x2AEC, BIDI_ON }, // DOUBLE STROKE NOT SIGN
+ { 0x2AED, BIDI_ON }, // REVERSED DOUBLE STROKE NOT SIGN
+ { 0x2AEE, BIDI_ON }, // DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
+ { 0x2AEF, BIDI_ON }, // VERTICAL LINE WITH CIRCLE ABOVE
+ { 0x2AF0, BIDI_ON }, // VERTICAL LINE WITH CIRCLE BELOW
+ { 0x2AF1, BIDI_ON }, // DOWN TACK WITH CIRCLE BELOW
+ { 0x2AF2, BIDI_ON }, // PARALLEL WITH HORIZONTAL STROKE
+ { 0x2AF3, BIDI_ON }, // PARALLEL WITH TILDE OPERATOR
+ { 0x2AF4, BIDI_ON }, // TRIPLE VERTICAL BAR BINARY RELATION
+ { 0x2AF5, BIDI_ON }, // TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE
+ { 0x2AF6, BIDI_ON }, // TRIPLE COLON OPERATOR
+ { 0x2AF7, BIDI_ON }, // TRIPLE NESTED LESS-THAN
+ { 0x2AF8, BIDI_ON }, // TRIPLE NESTED GREATER-THAN
+ { 0x2AF9, BIDI_ON }, // DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
+ { 0x2AFA, BIDI_ON }, // DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
+ { 0x2AFB, BIDI_ON }, // TRIPLE SOLIDUS BINARY RELATION
+ { 0x2AFC, BIDI_ON }, // LARGE TRIPLE VERTICAL BAR OPERATOR
+ { 0x2AFD, BIDI_ON }, // DOUBLE SOLIDUS OPERATOR
+ { 0x2AFE, BIDI_ON }, // WHITE VERTICAL BAR
+ { 0x2AFF, BIDI_ON }, // N-ARY WHITE VERTICAL BAR
+ { 0x2B00, BIDI_ON }, // NORTH EAST WHITE ARROW
+ { 0x2B01, BIDI_ON }, // NORTH WEST WHITE ARROW
+ { 0x2B02, BIDI_ON }, // SOUTH EAST WHITE ARROW
+ { 0x2B03, BIDI_ON }, // SOUTH WEST WHITE ARROW
+ { 0x2B04, BIDI_ON }, // LEFT RIGHT WHITE ARROW
+ { 0x2B05, BIDI_ON }, // LEFTWARDS BLACK ARROW
+ { 0x2B06, BIDI_ON }, // UPWARDS BLACK ARROW
+ { 0x2B07, BIDI_ON }, // DOWNWARDS BLACK ARROW
+ { 0x2B08, BIDI_ON }, // NORTH EAST BLACK ARROW
+ { 0x2B09, BIDI_ON }, // NORTH WEST BLACK ARROW
+ { 0x2B0A, BIDI_ON }, // SOUTH EAST BLACK ARROW
+ { 0x2B0B, BIDI_ON }, // SOUTH WEST BLACK ARROW
+ { 0x2B0C, BIDI_ON }, // LEFT RIGHT BLACK ARROW
+ { 0x2B0D, BIDI_ON }, // UP DOWN BLACK ARROW
+ { 0x2B0E, BIDI_ON }, // RIGHTWARDS ARROW WITH TIP DOWNWARDS
+ { 0x2B0F, BIDI_ON }, // RIGHTWARDS ARROW WITH TIP UPWARDS
+ { 0x2B10, BIDI_ON }, // LEFTWARDS ARROW WITH TIP DOWNWARDS
+ { 0x2B11, BIDI_ON }, // LEFTWARDS ARROW WITH TIP UPWARDS
+ { 0x2B12, BIDI_ON }, // SQUARE WITH TOP HALF BLACK
+ { 0x2B13, BIDI_ON }, // SQUARE WITH BOTTOM HALF BLACK
+ { 0x2B14, BIDI_ON }, // SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK
+ { 0x2B15, BIDI_ON }, // SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK
+ { 0x2B16, BIDI_ON }, // DIAMOND WITH LEFT HALF BLACK
+ { 0x2B17, BIDI_ON }, // DIAMOND WITH RIGHT HALF BLACK
+ { 0x2B18, BIDI_ON }, // DIAMOND WITH TOP HALF BLACK
+ { 0x2B19, BIDI_ON }, // DIAMOND WITH BOTTOM HALF BLACK
+ { 0x2B1A, BIDI_ON }, // DOTTED SQUARE
+ { 0x2B1B, BIDI_ON }, // BLACK LARGE SQUARE
+ { 0x2B1C, BIDI_ON }, // WHITE LARGE SQUARE
+ { 0x2B1D, BIDI_ON }, // BLACK VERY SMALL SQUARE
+ { 0x2B1E, BIDI_ON }, // WHITE VERY SMALL SQUARE
+ { 0x2B1F, BIDI_ON }, // BLACK PENTAGON
+ { 0x2B20, BIDI_ON }, // WHITE PENTAGON
+ { 0x2B21, BIDI_ON }, // WHITE HEXAGON
+ { 0x2B22, BIDI_ON }, // BLACK HEXAGON
+ { 0x2B23, BIDI_ON }, // HORIZONTAL BLACK HEXAGON
+ { 0x2B24, BIDI_ON }, // BLACK LARGE CIRCLE
+ { 0x2B25, BIDI_ON }, // BLACK MEDIUM DIAMOND
+ { 0x2B26, BIDI_ON }, // WHITE MEDIUM DIAMOND
+ { 0x2B27, BIDI_ON }, // BLACK MEDIUM LOZENGE
+ { 0x2B28, BIDI_ON }, // WHITE MEDIUM LOZENGE
+ { 0x2B29, BIDI_ON }, // BLACK SMALL DIAMOND
+ { 0x2B2A, BIDI_ON }, // BLACK SMALL LOZENGE
+ { 0x2B2B, BIDI_ON }, // WHITE SMALL LOZENGE
+ { 0x2B2C, BIDI_ON }, // BLACK HORIZONTAL ELLIPSE
+ { 0x2B2D, BIDI_ON }, // WHITE HORIZONTAL ELLIPSE
+ { 0x2B2E, BIDI_ON }, // BLACK VERTICAL ELLIPSE
+ { 0x2B2F, BIDI_ON }, // WHITE VERTICAL ELLIPSE
+ { 0x2B30, BIDI_ON }, // LEFT ARROW WITH SMALL CIRCLE
+ { 0x2B31, BIDI_ON }, // THREE LEFTWARDS ARROWS
+ { 0x2B32, BIDI_ON }, // LEFT ARROW WITH CIRCLED PLUS
+ { 0x2B33, BIDI_ON }, // LONG LEFTWARDS SQUIGGLE ARROW
+ { 0x2B34, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE
+ { 0x2B35, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE
+ { 0x2B36, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW FROM BAR
+ { 0x2B37, BIDI_ON }, // LEFTWARDS TWO-HEADED TRIPLE DASH ARROW
+ { 0x2B38, BIDI_ON }, // LEFTWARDS ARROW WITH DOTTED STEM
+ { 0x2B39, BIDI_ON }, // LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE
+ { 0x2B3A, BIDI_ON }, // LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+ { 0x2B3B, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW WITH TAIL
+ { 0x2B3C, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE
+ { 0x2B3D, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE
+ { 0x2B3E, BIDI_ON }, // LEFTWARDS ARROW THROUGH X
+ { 0x2B3F, BIDI_ON }, // WAVE ARROW POINTING DIRECTLY LEFT
+ { 0x2B40, BIDI_ON }, // EQUALS SIGN ABOVE LEFTWARDS ARROW
+ { 0x2B41, BIDI_ON }, // REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW
+ { 0x2B42, BIDI_ON }, // LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+ { 0x2B43, BIDI_ON }, // RIGHTWARDS ARROW THROUGH GREATER-THAN
+ { 0x2B44, BIDI_ON }, // RIGHTWARDS ARROW THROUGH SUPERSET
+ { 0x2B45, BIDI_ON }, // LEFTWARDS QUADRUPLE ARROW
+ { 0x2B46, BIDI_ON }, // RIGHTWARDS QUADRUPLE ARROW
+ { 0x2B47, BIDI_ON }, // REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW
+ { 0x2B48, BIDI_ON }, // RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO
+ { 0x2B49, BIDI_ON }, // TILDE OPERATOR ABOVE LEFTWARDS ARROW
+ { 0x2B4A, BIDI_ON }, // LEFTWARDS ARROW ABOVE ALMOST EQUAL TO
+ { 0x2B4B, BIDI_ON }, // LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+ { 0x2B4C, BIDI_ON }, // RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+ { 0x2B4D, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW
+ { 0x2B4E, BIDI_ON }, // SHORT SLANTED NORTH ARROW
+ { 0x2B4F, BIDI_ON }, // SHORT BACKSLANTED SOUTH ARROW
+ { 0x2B50, BIDI_ON }, // WHITE MEDIUM STAR
+ { 0x2B51, BIDI_ON }, // BLACK SMALL STAR
+ { 0x2B52, BIDI_ON }, // WHITE SMALL STAR
+ { 0x2B53, BIDI_ON }, // BLACK RIGHT-POINTING PENTAGON
+ { 0x2B54, BIDI_ON }, // WHITE RIGHT-POINTING PENTAGON
+ { 0x2B55, BIDI_ON }, // HEAVY LARGE CIRCLE
+ { 0x2B56, BIDI_ON }, // HEAVY OVAL WITH OVAL INSIDE
+ { 0x2B57, BIDI_ON }, // HEAVY CIRCLE WITH CIRCLE INSIDE
+ { 0x2B58, BIDI_ON }, // HEAVY CIRCLE
+ { 0x2B59, BIDI_ON }, // HEAVY CIRCLED SALTIRE
+ { 0x2B5A, BIDI_ON }, // SLANTED NORTH ARROW WITH HOOKED HEAD
+ { 0x2B5B, BIDI_ON }, // BACKSLANTED SOUTH ARROW WITH HOOKED TAIL
+ { 0x2B5C, BIDI_ON }, // SLANTED NORTH ARROW WITH HORIZONTAL TAIL
+ { 0x2B5D, BIDI_ON }, // BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL
+ { 0x2B5E, BIDI_ON }, // BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
+ { 0x2B5F, BIDI_ON }, // SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST
+ { 0x2B60, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED ARROW
+ { 0x2B61, BIDI_ON }, // UPWARDS TRIANGLE-HEADED ARROW
+ { 0x2B62, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED ARROW
+ { 0x2B63, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ARROW
+ { 0x2B64, BIDI_ON }, // LEFT RIGHT TRIANGLE-HEADED ARROW
+ { 0x2B65, BIDI_ON }, // UP DOWN TRIANGLE-HEADED ARROW
+ { 0x2B66, BIDI_ON }, // NORTH WEST TRIANGLE-HEADED ARROW
+ { 0x2B67, BIDI_ON }, // NORTH EAST TRIANGLE-HEADED ARROW
+ { 0x2B68, BIDI_ON }, // SOUTH EAST TRIANGLE-HEADED ARROW
+ { 0x2B69, BIDI_ON }, // SOUTH WEST TRIANGLE-HEADED ARROW
+ { 0x2B6A, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED DASHED ARROW
+ { 0x2B6B, BIDI_ON }, // UPWARDS TRIANGLE-HEADED DASHED ARROW
+ { 0x2B6C, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED DASHED ARROW
+ { 0x2B6D, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED DASHED ARROW
+ { 0x2B6E, BIDI_ON }, // CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
+ { 0x2B6F, BIDI_ON }, // ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW
+ { 0x2B70, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B71, BIDI_ON }, // UPWARDS TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B72, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B73, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B76, BIDI_ON }, // NORTH WEST TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B77, BIDI_ON }, // NORTH EAST TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B78, BIDI_ON }, // SOUTH EAST TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B79, BIDI_ON }, // SOUTH WEST TRIANGLE-HEADED ARROW TO BAR
+ { 0x2B7A, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+ { 0x2B7B, BIDI_ON }, // UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+ { 0x2B7C, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+ { 0x2B7D, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE
+ { 0x2B7E, BIDI_ON }, // HORIZONTAL TAB KEY
+ { 0x2B7F, BIDI_ON }, // VERTICAL TAB KEY
+ { 0x2B80, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW
+ { 0x2B81, BIDI_ON }, // UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW
+ { 0x2B82, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW
+ { 0x2B83, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW
+ { 0x2B84, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS
+ { 0x2B85, BIDI_ON }, // UPWARDS TRIANGLE-HEADED PAIRED ARROWS
+ { 0x2B86, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS
+ { 0x2B87, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS
+ { 0x2B88, BIDI_ON }, // LEFTWARDS BLACK CIRCLED WHITE ARROW
+ { 0x2B89, BIDI_ON }, // UPWARDS BLACK CIRCLED WHITE ARROW
+ { 0x2B8A, BIDI_ON }, // RIGHTWARDS BLACK CIRCLED WHITE ARROW
+ { 0x2B8B, BIDI_ON }, // DOWNWARDS BLACK CIRCLED WHITE ARROW
+ { 0x2B8C, BIDI_ON }, // ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW
+ { 0x2B8D, BIDI_ON }, // ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW
+ { 0x2B8E, BIDI_ON }, // ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW
+ { 0x2B8F, BIDI_ON }, // ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW
+ { 0x2B90, BIDI_ON }, // RETURN LEFT
+ { 0x2B91, BIDI_ON }, // RETURN RIGHT
+ { 0x2B92, BIDI_ON }, // NEWLINE LEFT
+ { 0x2B93, BIDI_ON }, // NEWLINE RIGHT
+ { 0x2B94, BIDI_ON }, // FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE
+ { 0x2B95, BIDI_ON }, // RIGHTWARDS BLACK ARROW
+ { 0x2B98, BIDI_ON }, // THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD
+ { 0x2B99, BIDI_ON }, // THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD
+ { 0x2B9A, BIDI_ON }, // THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD
+ { 0x2B9B, BIDI_ON }, // THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD
+ { 0x2B9C, BIDI_ON }, // BLACK LEFTWARDS EQUILATERAL ARROWHEAD
+ { 0x2B9D, BIDI_ON }, // BLACK UPWARDS EQUILATERAL ARROWHEAD
+ { 0x2B9E, BIDI_ON }, // BLACK RIGHTWARDS EQUILATERAL ARROWHEAD
+ { 0x2B9F, BIDI_ON }, // BLACK DOWNWARDS EQUILATERAL ARROWHEAD
+ { 0x2BA0, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
+ { 0x2BA1, BIDI_ON }, // DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
+ { 0x2BA2, BIDI_ON }, // UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS
+ { 0x2BA3, BIDI_ON }, // UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS
+ { 0x2BA4, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
+ { 0x2BA5, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS
+ { 0x2BA6, BIDI_ON }, // LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
+ { 0x2BA7, BIDI_ON }, // RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS
+ { 0x2BA8, BIDI_ON }, // BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW
+ { 0x2BA9, BIDI_ON }, // BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
+ { 0x2BAA, BIDI_ON }, // BLACK CURVED UPWARDS AND LEFTWARDS ARROW
+ { 0x2BAB, BIDI_ON }, // BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
+ { 0x2BAC, BIDI_ON }, // BLACK CURVED LEFTWARDS AND UPWARDS ARROW
+ { 0x2BAD, BIDI_ON }, // BLACK CURVED RIGHTWARDS AND UPWARDS ARROW
+ { 0x2BAE, BIDI_ON }, // BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW
+ { 0x2BAF, BIDI_ON }, // BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW
+ { 0x2BB0, BIDI_ON }, // RIBBON ARROW DOWN LEFT
+ { 0x2BB1, BIDI_ON }, // RIBBON ARROW DOWN RIGHT
+ { 0x2BB2, BIDI_ON }, // RIBBON ARROW UP LEFT
+ { 0x2BB3, BIDI_ON }, // RIBBON ARROW UP RIGHT
+ { 0x2BB4, BIDI_ON }, // RIBBON ARROW LEFT UP
+ { 0x2BB5, BIDI_ON }, // RIBBON ARROW RIGHT UP
+ { 0x2BB6, BIDI_ON }, // RIBBON ARROW LEFT DOWN
+ { 0x2BB7, BIDI_ON }, // RIBBON ARROW RIGHT DOWN
+ { 0x2BB8, BIDI_ON }, // UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR
+ { 0x2BB9, BIDI_ON }, // UP ARROWHEAD IN A RECTANGLE BOX
+ { 0x2BBD, BIDI_ON }, // BALLOT BOX WITH LIGHT X
+ { 0x2BBE, BIDI_ON }, // CIRCLED X
+ { 0x2BBF, BIDI_ON }, // CIRCLED BOLD X
+ { 0x2BC0, BIDI_ON }, // BLACK SQUARE CENTRED
+ { 0x2BC1, BIDI_ON }, // BLACK DIAMOND CENTRED
+ { 0x2BC2, BIDI_ON }, // TURNED BLACK PENTAGON
+ { 0x2BC3, BIDI_ON }, // HORIZONTAL BLACK OCTAGON
+ { 0x2BC4, BIDI_ON }, // BLACK OCTAGON
+ { 0x2BC5, BIDI_ON }, // BLACK MEDIUM UP-POINTING TRIANGLE CENTRED
+ { 0x2BC6, BIDI_ON }, // BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED
+ { 0x2BC7, BIDI_ON }, // BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED
+ { 0x2BC8, BIDI_ON }, // BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+ { 0x2BCA, BIDI_ON }, // TOP HALF BLACK CIRCLE
+ { 0x2BCB, BIDI_ON }, // BOTTOM HALF BLACK CIRCLE
+ { 0x2BCC, BIDI_ON }, // LIGHT FOUR POINTED BLACK CUSP
+ { 0x2BCD, BIDI_ON }, // ROTATED LIGHT FOUR POINTED BLACK CUSP
+ { 0x2BCE, BIDI_ON }, // WHITE FOUR POINTED CUSP
+ { 0x2BCF, BIDI_ON }, // ROTATED WHITE FOUR POINTED CUSP
+ { 0x2BD0, BIDI_ON }, // SQUARE POSITION INDICATOR
+ { 0x2BD1, BIDI_ON }, // UNCERTAINTY SIGN
+ { 0x2BEC, BIDI_ON }, // LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+ { 0x2BED, BIDI_ON }, // UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+ { 0x2BEE, BIDI_ON }, // RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+ { 0x2BEF, BIDI_ON }, // DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+ { 0x2C00, BIDI_L }, // GLAGOLITIC CAPITAL LETTER AZU
+ { 0x2C01, BIDI_L }, // GLAGOLITIC CAPITAL LETTER BUKY
+ { 0x2C02, BIDI_L }, // GLAGOLITIC CAPITAL LETTER VEDE
+ { 0x2C03, BIDI_L }, // GLAGOLITIC CAPITAL LETTER GLAGOLI
+ { 0x2C04, BIDI_L }, // GLAGOLITIC CAPITAL LETTER DOBRO
+ { 0x2C05, BIDI_L }, // GLAGOLITIC CAPITAL LETTER YESTU
+ { 0x2C06, BIDI_L }, // GLAGOLITIC CAPITAL LETTER ZHIVETE
+ { 0x2C07, BIDI_L }, // GLAGOLITIC CAPITAL LETTER DZELO
+ { 0x2C08, BIDI_L }, // GLAGOLITIC CAPITAL LETTER ZEMLJA
+ { 0x2C09, BIDI_L }, // GLAGOLITIC CAPITAL LETTER IZHE
+ { 0x2C0A, BIDI_L }, // GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+ { 0x2C0B, BIDI_L }, // GLAGOLITIC CAPITAL LETTER I
+ { 0x2C0C, BIDI_L }, // GLAGOLITIC CAPITAL LETTER DJERVI
+ { 0x2C0D, BIDI_L }, // GLAGOLITIC CAPITAL LETTER KAKO
+ { 0x2C0E, BIDI_L }, // GLAGOLITIC CAPITAL LETTER LJUDIJE
+ { 0x2C0F, BIDI_L }, // GLAGOLITIC CAPITAL LETTER MYSLITE
+ { 0x2C10, BIDI_L }, // GLAGOLITIC CAPITAL LETTER NASHI
+ { 0x2C11, BIDI_L }, // GLAGOLITIC CAPITAL LETTER ONU
+ { 0x2C12, BIDI_L }, // GLAGOLITIC CAPITAL LETTER POKOJI
+ { 0x2C13, BIDI_L }, // GLAGOLITIC CAPITAL LETTER RITSI
+ { 0x2C14, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SLOVO
+ { 0x2C15, BIDI_L }, // GLAGOLITIC CAPITAL LETTER TVRIDO
+ { 0x2C16, BIDI_L }, // GLAGOLITIC CAPITAL LETTER UKU
+ { 0x2C17, BIDI_L }, // GLAGOLITIC CAPITAL LETTER FRITU
+ { 0x2C18, BIDI_L }, // GLAGOLITIC CAPITAL LETTER HERU
+ { 0x2C19, BIDI_L }, // GLAGOLITIC CAPITAL LETTER OTU
+ { 0x2C1A, BIDI_L }, // GLAGOLITIC CAPITAL LETTER PE
+ { 0x2C1B, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SHTA
+ { 0x2C1C, BIDI_L }, // GLAGOLITIC CAPITAL LETTER TSI
+ { 0x2C1D, BIDI_L }, // GLAGOLITIC CAPITAL LETTER CHRIVI
+ { 0x2C1E, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SHA
+ { 0x2C1F, BIDI_L }, // GLAGOLITIC CAPITAL LETTER YERU
+ { 0x2C20, BIDI_L }, // GLAGOLITIC CAPITAL LETTER YERI
+ { 0x2C21, BIDI_L }, // GLAGOLITIC CAPITAL LETTER YATI
+ { 0x2C22, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SPIDERY HA
+ { 0x2C23, BIDI_L }, // GLAGOLITIC CAPITAL LETTER YU
+ { 0x2C24, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SMALL YUS
+ { 0x2C25, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+ { 0x2C26, BIDI_L }, // GLAGOLITIC CAPITAL LETTER YO
+ { 0x2C27, BIDI_L }, // GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+ { 0x2C28, BIDI_L }, // GLAGOLITIC CAPITAL LETTER BIG YUS
+ { 0x2C29, BIDI_L }, // GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+ { 0x2C2A, BIDI_L }, // GLAGOLITIC CAPITAL LETTER FITA
+ { 0x2C2B, BIDI_L }, // GLAGOLITIC CAPITAL LETTER IZHITSA
+ { 0x2C2C, BIDI_L }, // GLAGOLITIC CAPITAL LETTER SHTAPIC
+ { 0x2C2D, BIDI_L }, // GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+ { 0x2C2E, BIDI_L }, // GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+ { 0x2C30, BIDI_L }, // GLAGOLITIC SMALL LETTER AZU
+ { 0x2C31, BIDI_L }, // GLAGOLITIC SMALL LETTER BUKY
+ { 0x2C32, BIDI_L }, // GLAGOLITIC SMALL LETTER VEDE
+ { 0x2C33, BIDI_L }, // GLAGOLITIC SMALL LETTER GLAGOLI
+ { 0x2C34, BIDI_L }, // GLAGOLITIC SMALL LETTER DOBRO
+ { 0x2C35, BIDI_L }, // GLAGOLITIC SMALL LETTER YESTU
+ { 0x2C36, BIDI_L }, // GLAGOLITIC SMALL LETTER ZHIVETE
+ { 0x2C37, BIDI_L }, // GLAGOLITIC SMALL LETTER DZELO
+ { 0x2C38, BIDI_L }, // GLAGOLITIC SMALL LETTER ZEMLJA
+ { 0x2C39, BIDI_L }, // GLAGOLITIC SMALL LETTER IZHE
+ { 0x2C3A, BIDI_L }, // GLAGOLITIC SMALL LETTER INITIAL IZHE
+ { 0x2C3B, BIDI_L }, // GLAGOLITIC SMALL LETTER I
+ { 0x2C3C, BIDI_L }, // GLAGOLITIC SMALL LETTER DJERVI
+ { 0x2C3D, BIDI_L }, // GLAGOLITIC SMALL LETTER KAKO
+ { 0x2C3E, BIDI_L }, // GLAGOLITIC SMALL LETTER LJUDIJE
+ { 0x2C3F, BIDI_L }, // GLAGOLITIC SMALL LETTER MYSLITE
+ { 0x2C40, BIDI_L }, // GLAGOLITIC SMALL LETTER NASHI
+ { 0x2C41, BIDI_L }, // GLAGOLITIC SMALL LETTER ONU
+ { 0x2C42, BIDI_L }, // GLAGOLITIC SMALL LETTER POKOJI
+ { 0x2C43, BIDI_L }, // GLAGOLITIC SMALL LETTER RITSI
+ { 0x2C44, BIDI_L }, // GLAGOLITIC SMALL LETTER SLOVO
+ { 0x2C45, BIDI_L }, // GLAGOLITIC SMALL LETTER TVRIDO
+ { 0x2C46, BIDI_L }, // GLAGOLITIC SMALL LETTER UKU
+ { 0x2C47, BIDI_L }, // GLAGOLITIC SMALL LETTER FRITU
+ { 0x2C48, BIDI_L }, // GLAGOLITIC SMALL LETTER HERU
+ { 0x2C49, BIDI_L }, // GLAGOLITIC SMALL LETTER OTU
+ { 0x2C4A, BIDI_L }, // GLAGOLITIC SMALL LETTER PE
+ { 0x2C4B, BIDI_L }, // GLAGOLITIC SMALL LETTER SHTA
+ { 0x2C4C, BIDI_L }, // GLAGOLITIC SMALL LETTER TSI
+ { 0x2C4D, BIDI_L }, // GLAGOLITIC SMALL LETTER CHRIVI
+ { 0x2C4E, BIDI_L }, // GLAGOLITIC SMALL LETTER SHA
+ { 0x2C4F, BIDI_L }, // GLAGOLITIC SMALL LETTER YERU
+ { 0x2C50, BIDI_L }, // GLAGOLITIC SMALL LETTER YERI
+ { 0x2C51, BIDI_L }, // GLAGOLITIC SMALL LETTER YATI
+ { 0x2C52, BIDI_L }, // GLAGOLITIC SMALL LETTER SPIDERY HA
+ { 0x2C53, BIDI_L }, // GLAGOLITIC SMALL LETTER YU
+ { 0x2C54, BIDI_L }, // GLAGOLITIC SMALL LETTER SMALL YUS
+ { 0x2C55, BIDI_L }, // GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+ { 0x2C56, BIDI_L }, // GLAGOLITIC SMALL LETTER YO
+ { 0x2C57, BIDI_L }, // GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+ { 0x2C58, BIDI_L }, // GLAGOLITIC SMALL LETTER BIG YUS
+ { 0x2C59, BIDI_L }, // GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+ { 0x2C5A, BIDI_L }, // GLAGOLITIC SMALL LETTER FITA
+ { 0x2C5B, BIDI_L }, // GLAGOLITIC SMALL LETTER IZHITSA
+ { 0x2C5C, BIDI_L }, // GLAGOLITIC SMALL LETTER SHTAPIC
+ { 0x2C5D, BIDI_L }, // GLAGOLITIC SMALL LETTER TROKUTASTI A
+ { 0x2C5E, BIDI_L }, // GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+ { 0x2C60, BIDI_L }, // LATIN CAPITAL LETTER L WITH DOUBLE BAR
+ { 0x2C61, BIDI_L }, // LATIN SMALL LETTER L WITH DOUBLE BAR
+ { 0x2C62, BIDI_L }, // LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+ { 0x2C63, BIDI_L }, // LATIN CAPITAL LETTER P WITH STROKE
+ { 0x2C64, BIDI_L }, // LATIN CAPITAL LETTER R WITH TAIL
+ { 0x2C65, BIDI_L }, // LATIN SMALL LETTER A WITH STROKE
+ { 0x2C66, BIDI_L }, // LATIN SMALL LETTER T WITH DIAGONAL STROKE
+ { 0x2C67, BIDI_L }, // LATIN CAPITAL LETTER H WITH DESCENDER
+ { 0x2C68, BIDI_L }, // LATIN SMALL LETTER H WITH DESCENDER
+ { 0x2C69, BIDI_L }, // LATIN CAPITAL LETTER K WITH DESCENDER
+ { 0x2C6A, BIDI_L }, // LATIN SMALL LETTER K WITH DESCENDER
+ { 0x2C6B, BIDI_L }, // LATIN CAPITAL LETTER Z WITH DESCENDER
+ { 0x2C6C, BIDI_L }, // LATIN SMALL LETTER Z WITH DESCENDER
+ { 0x2C6D, BIDI_L }, // LATIN CAPITAL LETTER ALPHA
+ { 0x2C6E, BIDI_L }, // LATIN CAPITAL LETTER M WITH HOOK
+ { 0x2C6F, BIDI_L }, // LATIN CAPITAL LETTER TURNED A
+ { 0x2C70, BIDI_L }, // LATIN CAPITAL LETTER TURNED ALPHA
+ { 0x2C71, BIDI_L }, // LATIN SMALL LETTER V WITH RIGHT HOOK
+ { 0x2C72, BIDI_L }, // LATIN CAPITAL LETTER W WITH HOOK
+ { 0x2C73, BIDI_L }, // LATIN SMALL LETTER W WITH HOOK
+ { 0x2C74, BIDI_L }, // LATIN SMALL LETTER V WITH CURL
+ { 0x2C75, BIDI_L }, // LATIN CAPITAL LETTER HALF H
+ { 0x2C76, BIDI_L }, // LATIN SMALL LETTER HALF H
+ { 0x2C77, BIDI_L }, // LATIN SMALL LETTER TAILLESS PHI
+ { 0x2C78, BIDI_L }, // LATIN SMALL LETTER E WITH NOTCH
+ { 0x2C79, BIDI_L }, // LATIN SMALL LETTER TURNED R WITH TAIL
+ { 0x2C7A, BIDI_L }, // LATIN SMALL LETTER O WITH LOW RING INSIDE
+ { 0x2C7B, BIDI_L }, // LATIN LETTER SMALL CAPITAL TURNED E
+ { 0x2C7C, BIDI_L }, // LATIN SUBSCRIPT SMALL LETTER J
+ { 0x2C7D, BIDI_L }, // MODIFIER LETTER CAPITAL V
+ { 0x2C7E, BIDI_L }, // LATIN CAPITAL LETTER S WITH SWASH TAIL
+ { 0x2C7F, BIDI_L }, // LATIN CAPITAL LETTER Z WITH SWASH TAIL
+ { 0x2C80, BIDI_L }, // COPTIC CAPITAL LETTER ALFA
+ { 0x2C81, BIDI_L }, // COPTIC SMALL LETTER ALFA
+ { 0x2C82, BIDI_L }, // COPTIC CAPITAL LETTER VIDA
+ { 0x2C83, BIDI_L }, // COPTIC SMALL LETTER VIDA
+ { 0x2C84, BIDI_L }, // COPTIC CAPITAL LETTER GAMMA
+ { 0x2C85, BIDI_L }, // COPTIC SMALL LETTER GAMMA
+ { 0x2C86, BIDI_L }, // COPTIC CAPITAL LETTER DALDA
+ { 0x2C87, BIDI_L }, // COPTIC SMALL LETTER DALDA
+ { 0x2C88, BIDI_L }, // COPTIC CAPITAL LETTER EIE
+ { 0x2C89, BIDI_L }, // COPTIC SMALL LETTER EIE
+ { 0x2C8A, BIDI_L }, // COPTIC CAPITAL LETTER SOU
+ { 0x2C8B, BIDI_L }, // COPTIC SMALL LETTER SOU
+ { 0x2C8C, BIDI_L }, // COPTIC CAPITAL LETTER ZATA
+ { 0x2C8D, BIDI_L }, // COPTIC SMALL LETTER ZATA
+ { 0x2C8E, BIDI_L }, // COPTIC CAPITAL LETTER HATE
+ { 0x2C8F, BIDI_L }, // COPTIC SMALL LETTER HATE
+ { 0x2C90, BIDI_L }, // COPTIC CAPITAL LETTER THETHE
+ { 0x2C91, BIDI_L }, // COPTIC SMALL LETTER THETHE
+ { 0x2C92, BIDI_L }, // COPTIC CAPITAL LETTER IAUDA
+ { 0x2C93, BIDI_L }, // COPTIC SMALL LETTER IAUDA
+ { 0x2C94, BIDI_L }, // COPTIC CAPITAL LETTER KAPA
+ { 0x2C95, BIDI_L }, // COPTIC SMALL LETTER KAPA
+ { 0x2C96, BIDI_L }, // COPTIC CAPITAL LETTER LAULA
+ { 0x2C97, BIDI_L }, // COPTIC SMALL LETTER LAULA
+ { 0x2C98, BIDI_L }, // COPTIC CAPITAL LETTER MI
+ { 0x2C99, BIDI_L }, // COPTIC SMALL LETTER MI
+ { 0x2C9A, BIDI_L }, // COPTIC CAPITAL LETTER NI
+ { 0x2C9B, BIDI_L }, // COPTIC SMALL LETTER NI
+ { 0x2C9C, BIDI_L }, // COPTIC CAPITAL LETTER KSI
+ { 0x2C9D, BIDI_L }, // COPTIC SMALL LETTER KSI
+ { 0x2C9E, BIDI_L }, // COPTIC CAPITAL LETTER O
+ { 0x2C9F, BIDI_L }, // COPTIC SMALL LETTER O
+ { 0x2CA0, BIDI_L }, // COPTIC CAPITAL LETTER PI
+ { 0x2CA1, BIDI_L }, // COPTIC SMALL LETTER PI
+ { 0x2CA2, BIDI_L }, // COPTIC CAPITAL LETTER RO
+ { 0x2CA3, BIDI_L }, // COPTIC SMALL LETTER RO
+ { 0x2CA4, BIDI_L }, // COPTIC CAPITAL LETTER SIMA
+ { 0x2CA5, BIDI_L }, // COPTIC SMALL LETTER SIMA
+ { 0x2CA6, BIDI_L }, // COPTIC CAPITAL LETTER TAU
+ { 0x2CA7, BIDI_L }, // COPTIC SMALL LETTER TAU
+ { 0x2CA8, BIDI_L }, // COPTIC CAPITAL LETTER UA
+ { 0x2CA9, BIDI_L }, // COPTIC SMALL LETTER UA
+ { 0x2CAA, BIDI_L }, // COPTIC CAPITAL LETTER FI
+ { 0x2CAB, BIDI_L }, // COPTIC SMALL LETTER FI
+ { 0x2CAC, BIDI_L }, // COPTIC CAPITAL LETTER KHI
+ { 0x2CAD, BIDI_L }, // COPTIC SMALL LETTER KHI
+ { 0x2CAE, BIDI_L }, // COPTIC CAPITAL LETTER PSI
+ { 0x2CAF, BIDI_L }, // COPTIC SMALL LETTER PSI
+ { 0x2CB0, BIDI_L }, // COPTIC CAPITAL LETTER OOU
+ { 0x2CB1, BIDI_L }, // COPTIC SMALL LETTER OOU
+ { 0x2CB2, BIDI_L }, // COPTIC CAPITAL LETTER DIALECT-P ALEF
+ { 0x2CB3, BIDI_L }, // COPTIC SMALL LETTER DIALECT-P ALEF
+ { 0x2CB4, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC AIN
+ { 0x2CB5, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC AIN
+ { 0x2CB6, BIDI_L }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+ { 0x2CB7, BIDI_L }, // COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+ { 0x2CB8, BIDI_L }, // COPTIC CAPITAL LETTER DIALECT-P KAPA
+ { 0x2CB9, BIDI_L }, // COPTIC SMALL LETTER DIALECT-P KAPA
+ { 0x2CBA, BIDI_L }, // COPTIC CAPITAL LETTER DIALECT-P NI
+ { 0x2CBB, BIDI_L }, // COPTIC SMALL LETTER DIALECT-P NI
+ { 0x2CBC, BIDI_L }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+ { 0x2CBD, BIDI_L }, // COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+ { 0x2CBE, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC OOU
+ { 0x2CBF, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC OOU
+ { 0x2CC0, BIDI_L }, // COPTIC CAPITAL LETTER SAMPI
+ { 0x2CC1, BIDI_L }, // COPTIC SMALL LETTER SAMPI
+ { 0x2CC2, BIDI_L }, // COPTIC CAPITAL LETTER CROSSED SHEI
+ { 0x2CC3, BIDI_L }, // COPTIC SMALL LETTER CROSSED SHEI
+ { 0x2CC4, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC SHEI
+ { 0x2CC5, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC SHEI
+ { 0x2CC6, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC ESH
+ { 0x2CC7, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC ESH
+ { 0x2CC8, BIDI_L }, // COPTIC CAPITAL LETTER AKHMIMIC KHEI
+ { 0x2CC9, BIDI_L }, // COPTIC SMALL LETTER AKHMIMIC KHEI
+ { 0x2CCA, BIDI_L }, // COPTIC CAPITAL LETTER DIALECT-P HORI
+ { 0x2CCB, BIDI_L }, // COPTIC SMALL LETTER DIALECT-P HORI
+ { 0x2CCC, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC HORI
+ { 0x2CCD, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC HORI
+ { 0x2CCE, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC HA
+ { 0x2CCF, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC HA
+ { 0x2CD0, BIDI_L }, // COPTIC CAPITAL LETTER L-SHAPED HA
+ { 0x2CD1, BIDI_L }, // COPTIC SMALL LETTER L-SHAPED HA
+ { 0x2CD2, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC HEI
+ { 0x2CD3, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC HEI
+ { 0x2CD4, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC HAT
+ { 0x2CD5, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC HAT
+ { 0x2CD6, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+ { 0x2CD7, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC GANGIA
+ { 0x2CD8, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC DJA
+ { 0x2CD9, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC DJA
+ { 0x2CDA, BIDI_L }, // COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+ { 0x2CDB, BIDI_L }, // COPTIC SMALL LETTER OLD COPTIC SHIMA
+ { 0x2CDC, BIDI_L }, // COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+ { 0x2CDD, BIDI_L }, // COPTIC SMALL LETTER OLD NUBIAN SHIMA
+ { 0x2CDE, BIDI_L }, // COPTIC CAPITAL LETTER OLD NUBIAN NGI
+ { 0x2CDF, BIDI_L }, // COPTIC SMALL LETTER OLD NUBIAN NGI
+ { 0x2CE0, BIDI_L }, // COPTIC CAPITAL LETTER OLD NUBIAN NYI
+ { 0x2CE1, BIDI_L }, // COPTIC SMALL LETTER OLD NUBIAN NYI
+ { 0x2CE2, BIDI_L }, // COPTIC CAPITAL LETTER OLD NUBIAN WAU
+ { 0x2CE3, BIDI_L }, // COPTIC SMALL LETTER OLD NUBIAN WAU
+ { 0x2CE4, BIDI_L }, // COPTIC SYMBOL KAI
+ { 0x2CE5, BIDI_ON }, // COPTIC SYMBOL MI RO
+ { 0x2CE6, BIDI_ON }, // COPTIC SYMBOL PI RO
+ { 0x2CE7, BIDI_ON }, // COPTIC SYMBOL STAUROS
+ { 0x2CE8, BIDI_ON }, // COPTIC SYMBOL TAU RO
+ { 0x2CE9, BIDI_ON }, // COPTIC SYMBOL KHI RO
+ { 0x2CEA, BIDI_ON }, // COPTIC SYMBOL SHIMA SIMA
+ { 0x2CEB, BIDI_L }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+ { 0x2CEC, BIDI_L }, // COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+ { 0x2CED, BIDI_L }, // COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+ { 0x2CEE, BIDI_L }, // COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+ { 0x2CEF, BIDI_NSM }, // COPTIC COMBINING NI ABOVE
+ { 0x2CF0, BIDI_NSM }, // COPTIC COMBINING SPIRITUS ASPER
+ { 0x2CF1, BIDI_NSM }, // COPTIC COMBINING SPIRITUS LENIS
+ { 0x2CF2, BIDI_L }, // COPTIC CAPITAL LETTER BOHAIRIC KHEI
+ { 0x2CF3, BIDI_L }, // COPTIC SMALL LETTER BOHAIRIC KHEI
+ { 0x2CF9, BIDI_ON }, // COPTIC OLD NUBIAN FULL STOP
+ { 0x2CFA, BIDI_ON }, // COPTIC OLD NUBIAN DIRECT QUESTION MARK
+ { 0x2CFB, BIDI_ON }, // COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+ { 0x2CFC, BIDI_ON }, // COPTIC OLD NUBIAN VERSE DIVIDER
+ { 0x2CFD, BIDI_ON }, // COPTIC FRACTION ONE HALF
+ { 0x2CFE, BIDI_ON }, // COPTIC FULL STOP
+ { 0x2CFF, BIDI_ON }, // COPTIC MORPHOLOGICAL DIVIDER
+ { 0x2D00, BIDI_L }, // GEORGIAN SMALL LETTER AN
+ { 0x2D01, BIDI_L }, // GEORGIAN SMALL LETTER BAN
+ { 0x2D02, BIDI_L }, // GEORGIAN SMALL LETTER GAN
+ { 0x2D03, BIDI_L }, // GEORGIAN SMALL LETTER DON
+ { 0x2D04, BIDI_L }, // GEORGIAN SMALL LETTER EN
+ { 0x2D05, BIDI_L }, // GEORGIAN SMALL LETTER VIN
+ { 0x2D06, BIDI_L }, // GEORGIAN SMALL LETTER ZEN
+ { 0x2D07, BIDI_L }, // GEORGIAN SMALL LETTER TAN
+ { 0x2D08, BIDI_L }, // GEORGIAN SMALL LETTER IN
+ { 0x2D09, BIDI_L }, // GEORGIAN SMALL LETTER KAN
+ { 0x2D0A, BIDI_L }, // GEORGIAN SMALL LETTER LAS
+ { 0x2D0B, BIDI_L }, // GEORGIAN SMALL LETTER MAN
+ { 0x2D0C, BIDI_L }, // GEORGIAN SMALL LETTER NAR
+ { 0x2D0D, BIDI_L }, // GEORGIAN SMALL LETTER ON
+ { 0x2D0E, BIDI_L }, // GEORGIAN SMALL LETTER PAR
+ { 0x2D0F, BIDI_L }, // GEORGIAN SMALL LETTER ZHAR
+ { 0x2D10, BIDI_L }, // GEORGIAN SMALL LETTER RAE
+ { 0x2D11, BIDI_L }, // GEORGIAN SMALL LETTER SAN
+ { 0x2D12, BIDI_L }, // GEORGIAN SMALL LETTER TAR
+ { 0x2D13, BIDI_L }, // GEORGIAN SMALL LETTER UN
+ { 0x2D14, BIDI_L }, // GEORGIAN SMALL LETTER PHAR
+ { 0x2D15, BIDI_L }, // GEORGIAN SMALL LETTER KHAR
+ { 0x2D16, BIDI_L }, // GEORGIAN SMALL LETTER GHAN
+ { 0x2D17, BIDI_L }, // GEORGIAN SMALL LETTER QAR
+ { 0x2D18, BIDI_L }, // GEORGIAN SMALL LETTER SHIN
+ { 0x2D19, BIDI_L }, // GEORGIAN SMALL LETTER CHIN
+ { 0x2D1A, BIDI_L }, // GEORGIAN SMALL LETTER CAN
+ { 0x2D1B, BIDI_L }, // GEORGIAN SMALL LETTER JIL
+ { 0x2D1C, BIDI_L }, // GEORGIAN SMALL LETTER CIL
+ { 0x2D1D, BIDI_L }, // GEORGIAN SMALL LETTER CHAR
+ { 0x2D1E, BIDI_L }, // GEORGIAN SMALL LETTER XAN
+ { 0x2D1F, BIDI_L }, // GEORGIAN SMALL LETTER JHAN
+ { 0x2D20, BIDI_L }, // GEORGIAN SMALL LETTER HAE
+ { 0x2D21, BIDI_L }, // GEORGIAN SMALL LETTER HE
+ { 0x2D22, BIDI_L }, // GEORGIAN SMALL LETTER HIE
+ { 0x2D23, BIDI_L }, // GEORGIAN SMALL LETTER WE
+ { 0x2D24, BIDI_L }, // GEORGIAN SMALL LETTER HAR
+ { 0x2D25, BIDI_L }, // GEORGIAN SMALL LETTER HOE
+ { 0x2D27, BIDI_L }, // GEORGIAN SMALL LETTER YN
+ { 0x2D2D, BIDI_L }, // GEORGIAN SMALL LETTER AEN
+ { 0x2D30, BIDI_L }, // TIFINAGH LETTER YA
+ { 0x2D31, BIDI_L }, // TIFINAGH LETTER YAB
+ { 0x2D32, BIDI_L }, // TIFINAGH LETTER YABH
+ { 0x2D33, BIDI_L }, // TIFINAGH LETTER YAG
+ { 0x2D34, BIDI_L }, // TIFINAGH LETTER YAGHH
+ { 0x2D35, BIDI_L }, // TIFINAGH LETTER BERBER ACADEMY YAJ
+ { 0x2D36, BIDI_L }, // TIFINAGH LETTER YAJ
+ { 0x2D37, BIDI_L }, // TIFINAGH LETTER YAD
+ { 0x2D38, BIDI_L }, // TIFINAGH LETTER YADH
+ { 0x2D39, BIDI_L }, // TIFINAGH LETTER YADD
+ { 0x2D3A, BIDI_L }, // TIFINAGH LETTER YADDH
+ { 0x2D3B, BIDI_L }, // TIFINAGH LETTER YEY
+ { 0x2D3C, BIDI_L }, // TIFINAGH LETTER YAF
+ { 0x2D3D, BIDI_L }, // TIFINAGH LETTER YAK
+ { 0x2D3E, BIDI_L }, // TIFINAGH LETTER TUAREG YAK
+ { 0x2D3F, BIDI_L }, // TIFINAGH LETTER YAKHH
+ { 0x2D40, BIDI_L }, // TIFINAGH LETTER YAH
+ { 0x2D41, BIDI_L }, // TIFINAGH LETTER BERBER ACADEMY YAH
+ { 0x2D42, BIDI_L }, // TIFINAGH LETTER TUAREG YAH
+ { 0x2D43, BIDI_L }, // TIFINAGH LETTER YAHH
+ { 0x2D44, BIDI_L }, // TIFINAGH LETTER YAA
+ { 0x2D45, BIDI_L }, // TIFINAGH LETTER YAKH
+ { 0x2D46, BIDI_L }, // TIFINAGH LETTER TUAREG YAKH
+ { 0x2D47, BIDI_L }, // TIFINAGH LETTER YAQ
+ { 0x2D48, BIDI_L }, // TIFINAGH LETTER TUAREG YAQ
+ { 0x2D49, BIDI_L }, // TIFINAGH LETTER YI
+ { 0x2D4A, BIDI_L }, // TIFINAGH LETTER YAZH
+ { 0x2D4B, BIDI_L }, // TIFINAGH LETTER AHAGGAR YAZH
+ { 0x2D4C, BIDI_L }, // TIFINAGH LETTER TUAREG YAZH
+ { 0x2D4D, BIDI_L }, // TIFINAGH LETTER YAL
+ { 0x2D4E, BIDI_L }, // TIFINAGH LETTER YAM
+ { 0x2D4F, BIDI_L }, // TIFINAGH LETTER YAN
+ { 0x2D50, BIDI_L }, // TIFINAGH LETTER TUAREG YAGN
+ { 0x2D51, BIDI_L }, // TIFINAGH LETTER TUAREG YANG
+ { 0x2D52, BIDI_L }, // TIFINAGH LETTER YAP
+ { 0x2D53, BIDI_L }, // TIFINAGH LETTER YU
+ { 0x2D54, BIDI_L }, // TIFINAGH LETTER YAR
+ { 0x2D55, BIDI_L }, // TIFINAGH LETTER YARR
+ { 0x2D56, BIDI_L }, // TIFINAGH LETTER YAGH
+ { 0x2D57, BIDI_L }, // TIFINAGH LETTER TUAREG YAGH
+ { 0x2D58, BIDI_L }, // TIFINAGH LETTER AYER YAGH
+ { 0x2D59, BIDI_L }, // TIFINAGH LETTER YAS
+ { 0x2D5A, BIDI_L }, // TIFINAGH LETTER YASS
+ { 0x2D5B, BIDI_L }, // TIFINAGH LETTER YASH
+ { 0x2D5C, BIDI_L }, // TIFINAGH LETTER YAT
+ { 0x2D5D, BIDI_L }, // TIFINAGH LETTER YATH
+ { 0x2D5E, BIDI_L }, // TIFINAGH LETTER YACH
+ { 0x2D5F, BIDI_L }, // TIFINAGH LETTER YATT
+ { 0x2D60, BIDI_L }, // TIFINAGH LETTER YAV
+ { 0x2D61, BIDI_L }, // TIFINAGH LETTER YAW
+ { 0x2D62, BIDI_L }, // TIFINAGH LETTER YAY
+ { 0x2D63, BIDI_L }, // TIFINAGH LETTER YAZ
+ { 0x2D64, BIDI_L }, // TIFINAGH LETTER TAWELLEMET YAZ
+ { 0x2D65, BIDI_L }, // TIFINAGH LETTER YAZZ
+ { 0x2D66, BIDI_L }, // TIFINAGH LETTER YE
+ { 0x2D67, BIDI_L }, // TIFINAGH LETTER YO
+ { 0x2D6F, BIDI_L }, // TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+ { 0x2D70, BIDI_L }, // TIFINAGH SEPARATOR MARK
+ { 0x2D7F, BIDI_NSM }, // TIFINAGH CONSONANT JOINER
+ { 0x2D80, BIDI_L }, // ETHIOPIC SYLLABLE LOA
+ { 0x2D81, BIDI_L }, // ETHIOPIC SYLLABLE MOA
+ { 0x2D82, BIDI_L }, // ETHIOPIC SYLLABLE ROA
+ { 0x2D83, BIDI_L }, // ETHIOPIC SYLLABLE SOA
+ { 0x2D84, BIDI_L }, // ETHIOPIC SYLLABLE SHOA
+ { 0x2D85, BIDI_L }, // ETHIOPIC SYLLABLE BOA
+ { 0x2D86, BIDI_L }, // ETHIOPIC SYLLABLE TOA
+ { 0x2D87, BIDI_L }, // ETHIOPIC SYLLABLE COA
+ { 0x2D88, BIDI_L }, // ETHIOPIC SYLLABLE NOA
+ { 0x2D89, BIDI_L }, // ETHIOPIC SYLLABLE NYOA
+ { 0x2D8A, BIDI_L }, // ETHIOPIC SYLLABLE GLOTTAL OA
+ { 0x2D8B, BIDI_L }, // ETHIOPIC SYLLABLE ZOA
+ { 0x2D8C, BIDI_L }, // ETHIOPIC SYLLABLE DOA
+ { 0x2D8D, BIDI_L }, // ETHIOPIC SYLLABLE DDOA
+ { 0x2D8E, BIDI_L }, // ETHIOPIC SYLLABLE JOA
+ { 0x2D8F, BIDI_L }, // ETHIOPIC SYLLABLE THOA
+ { 0x2D90, BIDI_L }, // ETHIOPIC SYLLABLE CHOA
+ { 0x2D91, BIDI_L }, // ETHIOPIC SYLLABLE PHOA
+ { 0x2D92, BIDI_L }, // ETHIOPIC SYLLABLE POA
+ { 0x2D93, BIDI_L }, // ETHIOPIC SYLLABLE GGWA
+ { 0x2D94, BIDI_L }, // ETHIOPIC SYLLABLE GGWI
+ { 0x2D95, BIDI_L }, // ETHIOPIC SYLLABLE GGWEE
+ { 0x2D96, BIDI_L }, // ETHIOPIC SYLLABLE GGWE
+ { 0x2DA0, BIDI_L }, // ETHIOPIC SYLLABLE SSA
+ { 0x2DA1, BIDI_L }, // ETHIOPIC SYLLABLE SSU
+ { 0x2DA2, BIDI_L }, // ETHIOPIC SYLLABLE SSI
+ { 0x2DA3, BIDI_L }, // ETHIOPIC SYLLABLE SSAA
+ { 0x2DA4, BIDI_L }, // ETHIOPIC SYLLABLE SSEE
+ { 0x2DA5, BIDI_L }, // ETHIOPIC SYLLABLE SSE
+ { 0x2DA6, BIDI_L }, // ETHIOPIC SYLLABLE SSO
+ { 0x2DA8, BIDI_L }, // ETHIOPIC SYLLABLE CCA
+ { 0x2DA9, BIDI_L }, // ETHIOPIC SYLLABLE CCU
+ { 0x2DAA, BIDI_L }, // ETHIOPIC SYLLABLE CCI
+ { 0x2DAB, BIDI_L }, // ETHIOPIC SYLLABLE CCAA
+ { 0x2DAC, BIDI_L }, // ETHIOPIC SYLLABLE CCEE
+ { 0x2DAD, BIDI_L }, // ETHIOPIC SYLLABLE CCE
+ { 0x2DAE, BIDI_L }, // ETHIOPIC SYLLABLE CCO
+ { 0x2DB0, BIDI_L }, // ETHIOPIC SYLLABLE ZZA
+ { 0x2DB1, BIDI_L }, // ETHIOPIC SYLLABLE ZZU
+ { 0x2DB2, BIDI_L }, // ETHIOPIC SYLLABLE ZZI
+ { 0x2DB3, BIDI_L }, // ETHIOPIC SYLLABLE ZZAA
+ { 0x2DB4, BIDI_L }, // ETHIOPIC SYLLABLE ZZEE
+ { 0x2DB5, BIDI_L }, // ETHIOPIC SYLLABLE ZZE
+ { 0x2DB6, BIDI_L }, // ETHIOPIC SYLLABLE ZZO
+ { 0x2DB8, BIDI_L }, // ETHIOPIC SYLLABLE CCHA
+ { 0x2DB9, BIDI_L }, // ETHIOPIC SYLLABLE CCHU
+ { 0x2DBA, BIDI_L }, // ETHIOPIC SYLLABLE CCHI
+ { 0x2DBB, BIDI_L }, // ETHIOPIC SYLLABLE CCHAA
+ { 0x2DBC, BIDI_L }, // ETHIOPIC SYLLABLE CCHEE
+ { 0x2DBD, BIDI_L }, // ETHIOPIC SYLLABLE CCHE
+ { 0x2DBE, BIDI_L }, // ETHIOPIC SYLLABLE CCHO
+ { 0x2DC0, BIDI_L }, // ETHIOPIC SYLLABLE QYA
+ { 0x2DC1, BIDI_L }, // ETHIOPIC SYLLABLE QYU
+ { 0x2DC2, BIDI_L }, // ETHIOPIC SYLLABLE QYI
+ { 0x2DC3, BIDI_L }, // ETHIOPIC SYLLABLE QYAA
+ { 0x2DC4, BIDI_L }, // ETHIOPIC SYLLABLE QYEE
+ { 0x2DC5, BIDI_L }, // ETHIOPIC SYLLABLE QYE
+ { 0x2DC6, BIDI_L }, // ETHIOPIC SYLLABLE QYO
+ { 0x2DC8, BIDI_L }, // ETHIOPIC SYLLABLE KYA
+ { 0x2DC9, BIDI_L }, // ETHIOPIC SYLLABLE KYU
+ { 0x2DCA, BIDI_L }, // ETHIOPIC SYLLABLE KYI
+ { 0x2DCB, BIDI_L }, // ETHIOPIC SYLLABLE KYAA
+ { 0x2DCC, BIDI_L }, // ETHIOPIC SYLLABLE KYEE
+ { 0x2DCD, BIDI_L }, // ETHIOPIC SYLLABLE KYE
+ { 0x2DCE, BIDI_L }, // ETHIOPIC SYLLABLE KYO
+ { 0x2DD0, BIDI_L }, // ETHIOPIC SYLLABLE XYA
+ { 0x2DD1, BIDI_L }, // ETHIOPIC SYLLABLE XYU
+ { 0x2DD2, BIDI_L }, // ETHIOPIC SYLLABLE XYI
+ { 0x2DD3, BIDI_L }, // ETHIOPIC SYLLABLE XYAA
+ { 0x2DD4, BIDI_L }, // ETHIOPIC SYLLABLE XYEE
+ { 0x2DD5, BIDI_L }, // ETHIOPIC SYLLABLE XYE
+ { 0x2DD6, BIDI_L }, // ETHIOPIC SYLLABLE XYO
+ { 0x2DD8, BIDI_L }, // ETHIOPIC SYLLABLE GYA
+ { 0x2DD9, BIDI_L }, // ETHIOPIC SYLLABLE GYU
+ { 0x2DDA, BIDI_L }, // ETHIOPIC SYLLABLE GYI
+ { 0x2DDB, BIDI_L }, // ETHIOPIC SYLLABLE GYAA
+ { 0x2DDC, BIDI_L }, // ETHIOPIC SYLLABLE GYEE
+ { 0x2DDD, BIDI_L }, // ETHIOPIC SYLLABLE GYE
+ { 0x2DDE, BIDI_L }, // ETHIOPIC SYLLABLE GYO
+ { 0x2DE0, BIDI_NSM }, // COMBINING CYRILLIC LETTER BE
+ { 0x2DE1, BIDI_NSM }, // COMBINING CYRILLIC LETTER VE
+ { 0x2DE2, BIDI_NSM }, // COMBINING CYRILLIC LETTER GHE
+ { 0x2DE3, BIDI_NSM }, // COMBINING CYRILLIC LETTER DE
+ { 0x2DE4, BIDI_NSM }, // COMBINING CYRILLIC LETTER ZHE
+ { 0x2DE5, BIDI_NSM }, // COMBINING CYRILLIC LETTER ZE
+ { 0x2DE6, BIDI_NSM }, // COMBINING CYRILLIC LETTER KA
+ { 0x2DE7, BIDI_NSM }, // COMBINING CYRILLIC LETTER EL
+ { 0x2DE8, BIDI_NSM }, // COMBINING CYRILLIC LETTER EM
+ { 0x2DE9, BIDI_NSM }, // COMBINING CYRILLIC LETTER EN
+ { 0x2DEA, BIDI_NSM }, // COMBINING CYRILLIC LETTER O
+ { 0x2DEB, BIDI_NSM }, // COMBINING CYRILLIC LETTER PE
+ { 0x2DEC, BIDI_NSM }, // COMBINING CYRILLIC LETTER ER
+ { 0x2DED, BIDI_NSM }, // COMBINING CYRILLIC LETTER ES
+ { 0x2DEE, BIDI_NSM }, // COMBINING CYRILLIC LETTER TE
+ { 0x2DEF, BIDI_NSM }, // COMBINING CYRILLIC LETTER HA
+ { 0x2DF0, BIDI_NSM }, // COMBINING CYRILLIC LETTER TSE
+ { 0x2DF1, BIDI_NSM }, // COMBINING CYRILLIC LETTER CHE
+ { 0x2DF2, BIDI_NSM }, // COMBINING CYRILLIC LETTER SHA
+ { 0x2DF3, BIDI_NSM }, // COMBINING CYRILLIC LETTER SHCHA
+ { 0x2DF4, BIDI_NSM }, // COMBINING CYRILLIC LETTER FITA
+ { 0x2DF5, BIDI_NSM }, // COMBINING CYRILLIC LETTER ES-TE
+ { 0x2DF6, BIDI_NSM }, // COMBINING CYRILLIC LETTER A
+ { 0x2DF7, BIDI_NSM }, // COMBINING CYRILLIC LETTER IE
+ { 0x2DF8, BIDI_NSM }, // COMBINING CYRILLIC LETTER DJERV
+ { 0x2DF9, BIDI_NSM }, // COMBINING CYRILLIC LETTER MONOGRAPH UK
+ { 0x2DFA, BIDI_NSM }, // COMBINING CYRILLIC LETTER YAT
+ { 0x2DFB, BIDI_NSM }, // COMBINING CYRILLIC LETTER YU
+ { 0x2DFC, BIDI_NSM }, // COMBINING CYRILLIC LETTER IOTIFIED A
+ { 0x2DFD, BIDI_NSM }, // COMBINING CYRILLIC LETTER LITTLE YUS
+ { 0x2DFE, BIDI_NSM }, // COMBINING CYRILLIC LETTER BIG YUS
+ { 0x2DFF, BIDI_NSM }, // COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+ { 0x2E00, BIDI_ON }, // RIGHT ANGLE SUBSTITUTION MARKER
+ { 0x2E01, BIDI_ON }, // RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+ { 0x2E02, BIDI_ON }, // LEFT SUBSTITUTION BRACKET
+ { 0x2E03, BIDI_ON }, // RIGHT SUBSTITUTION BRACKET
+ { 0x2E04, BIDI_ON }, // LEFT DOTTED SUBSTITUTION BRACKET
+ { 0x2E05, BIDI_ON }, // RIGHT DOTTED SUBSTITUTION BRACKET
+ { 0x2E06, BIDI_ON }, // RAISED INTERPOLATION MARKER
+ { 0x2E07, BIDI_ON }, // RAISED DOTTED INTERPOLATION MARKER
+ { 0x2E08, BIDI_ON }, // DOTTED TRANSPOSITION MARKER
+ { 0x2E09, BIDI_ON }, // LEFT TRANSPOSITION BRACKET
+ { 0x2E0A, BIDI_ON }, // RIGHT TRANSPOSITION BRACKET
+ { 0x2E0B, BIDI_ON }, // RAISED SQUARE
+ { 0x2E0C, BIDI_ON }, // LEFT RAISED OMISSION BRACKET
+ { 0x2E0D, BIDI_ON }, // RIGHT RAISED OMISSION BRACKET
+ { 0x2E0E, BIDI_ON }, // EDITORIAL CORONIS
+ { 0x2E0F, BIDI_ON }, // PARAGRAPHOS
+ { 0x2E10, BIDI_ON }, // FORKED PARAGRAPHOS
+ { 0x2E11, BIDI_ON }, // REVERSED FORKED PARAGRAPHOS
+ { 0x2E12, BIDI_ON }, // HYPODIASTOLE
+ { 0x2E13, BIDI_ON }, // DOTTED OBELOS
+ { 0x2E14, BIDI_ON }, // DOWNWARDS ANCORA
+ { 0x2E15, BIDI_ON }, // UPWARDS ANCORA
+ { 0x2E16, BIDI_ON }, // DOTTED RIGHT-POINTING ANGLE
+ { 0x2E17, BIDI_ON }, // DOUBLE OBLIQUE HYPHEN
+ { 0x2E18, BIDI_ON }, // INVERTED INTERROBANG
+ { 0x2E19, BIDI_ON }, // PALM BRANCH
+ { 0x2E1A, BIDI_ON }, // HYPHEN WITH DIAERESIS
+ { 0x2E1B, BIDI_ON }, // TILDE WITH RING ABOVE
+ { 0x2E1C, BIDI_ON }, // LEFT LOW PARAPHRASE BRACKET
+ { 0x2E1D, BIDI_ON }, // RIGHT LOW PARAPHRASE BRACKET
+ { 0x2E1E, BIDI_ON }, // TILDE WITH DOT ABOVE
+ { 0x2E1F, BIDI_ON }, // TILDE WITH DOT BELOW
+ { 0x2E20, BIDI_ON }, // LEFT VERTICAL BAR WITH QUILL
+ { 0x2E21, BIDI_ON }, // RIGHT VERTICAL BAR WITH QUILL
+ { 0x2E22, BIDI_ON }, // TOP LEFT HALF BRACKET
+ { 0x2E23, BIDI_ON }, // TOP RIGHT HALF BRACKET
+ { 0x2E24, BIDI_ON }, // BOTTOM LEFT HALF BRACKET
+ { 0x2E25, BIDI_ON }, // BOTTOM RIGHT HALF BRACKET
+ { 0x2E26, BIDI_ON }, // LEFT SIDEWAYS U BRACKET
+ { 0x2E27, BIDI_ON }, // RIGHT SIDEWAYS U BRACKET
+ { 0x2E28, BIDI_ON }, // LEFT DOUBLE PARENTHESIS
+ { 0x2E29, BIDI_ON }, // RIGHT DOUBLE PARENTHESIS
+ { 0x2E2A, BIDI_ON }, // TWO DOTS OVER ONE DOT PUNCTUATION
+ { 0x2E2B, BIDI_ON }, // ONE DOT OVER TWO DOTS PUNCTUATION
+ { 0x2E2C, BIDI_ON }, // SQUARED FOUR DOT PUNCTUATION
+ { 0x2E2D, BIDI_ON }, // FIVE DOT MARK
+ { 0x2E2E, BIDI_ON }, // REVERSED QUESTION MARK
+ { 0x2E2F, BIDI_ON }, // VERTICAL TILDE
+ { 0x2E30, BIDI_ON }, // RING POINT
+ { 0x2E31, BIDI_ON }, // WORD SEPARATOR MIDDLE DOT
+ { 0x2E32, BIDI_ON }, // TURNED COMMA
+ { 0x2E33, BIDI_ON }, // RAISED DOT
+ { 0x2E34, BIDI_ON }, // RAISED COMMA
+ { 0x2E35, BIDI_ON }, // TURNED SEMICOLON
+ { 0x2E36, BIDI_ON }, // DAGGER WITH LEFT GUARD
+ { 0x2E37, BIDI_ON }, // DAGGER WITH RIGHT GUARD
+ { 0x2E38, BIDI_ON }, // TURNED DAGGER
+ { 0x2E39, BIDI_ON }, // TOP HALF SECTION SIGN
+ { 0x2E3A, BIDI_ON }, // TWO-EM DASH
+ { 0x2E3B, BIDI_ON }, // THREE-EM DASH
+ { 0x2E3C, BIDI_ON }, // STENOGRAPHIC FULL STOP
+ { 0x2E3D, BIDI_ON }, // VERTICAL SIX DOTS
+ { 0x2E3E, BIDI_ON }, // WIGGLY VERTICAL LINE
+ { 0x2E3F, BIDI_ON }, // CAPITULUM
+ { 0x2E40, BIDI_ON }, // DOUBLE HYPHEN
+ { 0x2E41, BIDI_ON }, // REVERSED COMMA
+ { 0x2E42, BIDI_ON }, // DOUBLE LOW-REVERSED-9 QUOTATION MARK
+ { 0x2E80, BIDI_ON }, // CJK RADICAL REPEAT
+ { 0x2E81, BIDI_ON }, // CJK RADICAL CLIFF
+ { 0x2E82, BIDI_ON }, // CJK RADICAL SECOND ONE
+ { 0x2E83, BIDI_ON }, // CJK RADICAL SECOND TWO
+ { 0x2E84, BIDI_ON }, // CJK RADICAL SECOND THREE
+ { 0x2E85, BIDI_ON }, // CJK RADICAL PERSON
+ { 0x2E86, BIDI_ON }, // CJK RADICAL BOX
+ { 0x2E87, BIDI_ON }, // CJK RADICAL TABLE
+ { 0x2E88, BIDI_ON }, // CJK RADICAL KNIFE ONE
+ { 0x2E89, BIDI_ON }, // CJK RADICAL KNIFE TWO
+ { 0x2E8A, BIDI_ON }, // CJK RADICAL DIVINATION
+ { 0x2E8B, BIDI_ON }, // CJK RADICAL SEAL
+ { 0x2E8C, BIDI_ON }, // CJK RADICAL SMALL ONE
+ { 0x2E8D, BIDI_ON }, // CJK RADICAL SMALL TWO
+ { 0x2E8E, BIDI_ON }, // CJK RADICAL LAME ONE
+ { 0x2E8F, BIDI_ON }, // CJK RADICAL LAME TWO
+ { 0x2E90, BIDI_ON }, // CJK RADICAL LAME THREE
+ { 0x2E91, BIDI_ON }, // CJK RADICAL LAME FOUR
+ { 0x2E92, BIDI_ON }, // CJK RADICAL SNAKE
+ { 0x2E93, BIDI_ON }, // CJK RADICAL THREAD
+ { 0x2E94, BIDI_ON }, // CJK RADICAL SNOUT ONE
+ { 0x2E95, BIDI_ON }, // CJK RADICAL SNOUT TWO
+ { 0x2E96, BIDI_ON }, // CJK RADICAL HEART ONE
+ { 0x2E97, BIDI_ON }, // CJK RADICAL HEART TWO
+ { 0x2E98, BIDI_ON }, // CJK RADICAL HAND
+ { 0x2E99, BIDI_ON }, // CJK RADICAL RAP
+ { 0x2E9B, BIDI_ON }, // CJK RADICAL CHOKE
+ { 0x2E9C, BIDI_ON }, // CJK RADICAL SUN
+ { 0x2E9D, BIDI_ON }, // CJK RADICAL MOON
+ { 0x2E9E, BIDI_ON }, // CJK RADICAL DEATH
+ { 0x2E9F, BIDI_ON }, // CJK RADICAL MOTHER
+ { 0x2EA0, BIDI_ON }, // CJK RADICAL CIVILIAN
+ { 0x2EA1, BIDI_ON }, // CJK RADICAL WATER ONE
+ { 0x2EA2, BIDI_ON }, // CJK RADICAL WATER TWO
+ { 0x2EA3, BIDI_ON }, // CJK RADICAL FIRE
+ { 0x2EA4, BIDI_ON }, // CJK RADICAL PAW ONE
+ { 0x2EA5, BIDI_ON }, // CJK RADICAL PAW TWO
+ { 0x2EA6, BIDI_ON }, // CJK RADICAL SIMPLIFIED HALF TREE TRUNK
+ { 0x2EA7, BIDI_ON }, // CJK RADICAL COW
+ { 0x2EA8, BIDI_ON }, // CJK RADICAL DOG
+ { 0x2EA9, BIDI_ON }, // CJK RADICAL JADE
+ { 0x2EAA, BIDI_ON }, // CJK RADICAL BOLT OF CLOTH
+ { 0x2EAB, BIDI_ON }, // CJK RADICAL EYE
+ { 0x2EAC, BIDI_ON }, // CJK RADICAL SPIRIT ONE
+ { 0x2EAD, BIDI_ON }, // CJK RADICAL SPIRIT TWO
+ { 0x2EAE, BIDI_ON }, // CJK RADICAL BAMBOO
+ { 0x2EAF, BIDI_ON }, // CJK RADICAL SILK
+ { 0x2EB0, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED SILK
+ { 0x2EB1, BIDI_ON }, // CJK RADICAL NET ONE
+ { 0x2EB2, BIDI_ON }, // CJK RADICAL NET TWO
+ { 0x2EB3, BIDI_ON }, // CJK RADICAL NET THREE
+ { 0x2EB4, BIDI_ON }, // CJK RADICAL NET FOUR
+ { 0x2EB5, BIDI_ON }, // CJK RADICAL MESH
+ { 0x2EB6, BIDI_ON }, // CJK RADICAL SHEEP
+ { 0x2EB7, BIDI_ON }, // CJK RADICAL RAM
+ { 0x2EB8, BIDI_ON }, // CJK RADICAL EWE
+ { 0x2EB9, BIDI_ON }, // CJK RADICAL OLD
+ { 0x2EBA, BIDI_ON }, // CJK RADICAL BRUSH ONE
+ { 0x2EBB, BIDI_ON }, // CJK RADICAL BRUSH TWO
+ { 0x2EBC, BIDI_ON }, // CJK RADICAL MEAT
+ { 0x2EBD, BIDI_ON }, // CJK RADICAL MORTAR
+ { 0x2EBE, BIDI_ON }, // CJK RADICAL GRASS ONE
+ { 0x2EBF, BIDI_ON }, // CJK RADICAL GRASS TWO
+ { 0x2EC0, BIDI_ON }, // CJK RADICAL GRASS THREE
+ { 0x2EC1, BIDI_ON }, // CJK RADICAL TIGER
+ { 0x2EC2, BIDI_ON }, // CJK RADICAL CLOTHES
+ { 0x2EC3, BIDI_ON }, // CJK RADICAL WEST ONE
+ { 0x2EC4, BIDI_ON }, // CJK RADICAL WEST TWO
+ { 0x2EC5, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED SEE
+ { 0x2EC6, BIDI_ON }, // CJK RADICAL SIMPLIFIED HORN
+ { 0x2EC7, BIDI_ON }, // CJK RADICAL HORN
+ { 0x2EC8, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED SPEECH
+ { 0x2EC9, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED SHELL
+ { 0x2ECA, BIDI_ON }, // CJK RADICAL FOOT
+ { 0x2ECB, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED CART
+ { 0x2ECC, BIDI_ON }, // CJK RADICAL SIMPLIFIED WALK
+ { 0x2ECD, BIDI_ON }, // CJK RADICAL WALK ONE
+ { 0x2ECE, BIDI_ON }, // CJK RADICAL WALK TWO
+ { 0x2ECF, BIDI_ON }, // CJK RADICAL CITY
+ { 0x2ED0, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED GOLD
+ { 0x2ED1, BIDI_ON }, // CJK RADICAL LONG ONE
+ { 0x2ED2, BIDI_ON }, // CJK RADICAL LONG TWO
+ { 0x2ED3, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED LONG
+ { 0x2ED4, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED GATE
+ { 0x2ED5, BIDI_ON }, // CJK RADICAL MOUND ONE
+ { 0x2ED6, BIDI_ON }, // CJK RADICAL MOUND TWO
+ { 0x2ED7, BIDI_ON }, // CJK RADICAL RAIN
+ { 0x2ED8, BIDI_ON }, // CJK RADICAL BLUE
+ { 0x2ED9, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED TANNED LEATHER
+ { 0x2EDA, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED LEAF
+ { 0x2EDB, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED WIND
+ { 0x2EDC, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED FLY
+ { 0x2EDD, BIDI_ON }, // CJK RADICAL EAT ONE
+ { 0x2EDE, BIDI_ON }, // CJK RADICAL EAT TWO
+ { 0x2EDF, BIDI_ON }, // CJK RADICAL EAT THREE
+ { 0x2EE0, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED EAT
+ { 0x2EE1, BIDI_ON }, // CJK RADICAL HEAD
+ { 0x2EE2, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED HORSE
+ { 0x2EE3, BIDI_ON }, // CJK RADICAL BONE
+ { 0x2EE4, BIDI_ON }, // CJK RADICAL GHOST
+ { 0x2EE5, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED FISH
+ { 0x2EE6, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED BIRD
+ { 0x2EE7, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED SALT
+ { 0x2EE8, BIDI_ON }, // CJK RADICAL SIMPLIFIED WHEAT
+ { 0x2EE9, BIDI_ON }, // CJK RADICAL SIMPLIFIED YELLOW
+ { 0x2EEA, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED FROG
+ { 0x2EEB, BIDI_ON }, // CJK RADICAL J-SIMPLIFIED EVEN
+ { 0x2EEC, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED EVEN
+ { 0x2EED, BIDI_ON }, // CJK RADICAL J-SIMPLIFIED TOOTH
+ { 0x2EEE, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED TOOTH
+ { 0x2EEF, BIDI_ON }, // CJK RADICAL J-SIMPLIFIED DRAGON
+ { 0x2EF0, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED DRAGON
+ { 0x2EF1, BIDI_ON }, // CJK RADICAL TURTLE
+ { 0x2EF2, BIDI_ON }, // CJK RADICAL J-SIMPLIFIED TURTLE
+ { 0x2EF3, BIDI_ON }, // CJK RADICAL C-SIMPLIFIED TURTLE
+ { 0x2F00, BIDI_ON }, // KANGXI RADICAL ONE
+ { 0x2F01, BIDI_ON }, // KANGXI RADICAL LINE
+ { 0x2F02, BIDI_ON }, // KANGXI RADICAL DOT
+ { 0x2F03, BIDI_ON }, // KANGXI RADICAL SLASH
+ { 0x2F04, BIDI_ON }, // KANGXI RADICAL SECOND
+ { 0x2F05, BIDI_ON }, // KANGXI RADICAL HOOK
+ { 0x2F06, BIDI_ON }, // KANGXI RADICAL TWO
+ { 0x2F07, BIDI_ON }, // KANGXI RADICAL LID
+ { 0x2F08, BIDI_ON }, // KANGXI RADICAL MAN
+ { 0x2F09, BIDI_ON }, // KANGXI RADICAL LEGS
+ { 0x2F0A, BIDI_ON }, // KANGXI RADICAL ENTER
+ { 0x2F0B, BIDI_ON }, // KANGXI RADICAL EIGHT
+ { 0x2F0C, BIDI_ON }, // KANGXI RADICAL DOWN BOX
+ { 0x2F0D, BIDI_ON }, // KANGXI RADICAL COVER
+ { 0x2F0E, BIDI_ON }, // KANGXI RADICAL ICE
+ { 0x2F0F, BIDI_ON }, // KANGXI RADICAL TABLE
+ { 0x2F10, BIDI_ON }, // KANGXI RADICAL OPEN BOX
+ { 0x2F11, BIDI_ON }, // KANGXI RADICAL KNIFE
+ { 0x2F12, BIDI_ON }, // KANGXI RADICAL POWER
+ { 0x2F13, BIDI_ON }, // KANGXI RADICAL WRAP
+ { 0x2F14, BIDI_ON }, // KANGXI RADICAL SPOON
+ { 0x2F15, BIDI_ON }, // KANGXI RADICAL RIGHT OPEN BOX
+ { 0x2F16, BIDI_ON }, // KANGXI RADICAL HIDING ENCLOSURE
+ { 0x2F17, BIDI_ON }, // KANGXI RADICAL TEN
+ { 0x2F18, BIDI_ON }, // KANGXI RADICAL DIVINATION
+ { 0x2F19, BIDI_ON }, // KANGXI RADICAL SEAL
+ { 0x2F1A, BIDI_ON }, // KANGXI RADICAL CLIFF
+ { 0x2F1B, BIDI_ON }, // KANGXI RADICAL PRIVATE
+ { 0x2F1C, BIDI_ON }, // KANGXI RADICAL AGAIN
+ { 0x2F1D, BIDI_ON }, // KANGXI RADICAL MOUTH
+ { 0x2F1E, BIDI_ON }, // KANGXI RADICAL ENCLOSURE
+ { 0x2F1F, BIDI_ON }, // KANGXI RADICAL EARTH
+ { 0x2F20, BIDI_ON }, // KANGXI RADICAL SCHOLAR
+ { 0x2F21, BIDI_ON }, // KANGXI RADICAL GO
+ { 0x2F22, BIDI_ON }, // KANGXI RADICAL GO SLOWLY
+ { 0x2F23, BIDI_ON }, // KANGXI RADICAL EVENING
+ { 0x2F24, BIDI_ON }, // KANGXI RADICAL BIG
+ { 0x2F25, BIDI_ON }, // KANGXI RADICAL WOMAN
+ { 0x2F26, BIDI_ON }, // KANGXI RADICAL CHILD
+ { 0x2F27, BIDI_ON }, // KANGXI RADICAL ROOF
+ { 0x2F28, BIDI_ON }, // KANGXI RADICAL INCH
+ { 0x2F29, BIDI_ON }, // KANGXI RADICAL SMALL
+ { 0x2F2A, BIDI_ON }, // KANGXI RADICAL LAME
+ { 0x2F2B, BIDI_ON }, // KANGXI RADICAL CORPSE
+ { 0x2F2C, BIDI_ON }, // KANGXI RADICAL SPROUT
+ { 0x2F2D, BIDI_ON }, // KANGXI RADICAL MOUNTAIN
+ { 0x2F2E, BIDI_ON }, // KANGXI RADICAL RIVER
+ { 0x2F2F, BIDI_ON }, // KANGXI RADICAL WORK
+ { 0x2F30, BIDI_ON }, // KANGXI RADICAL ONESELF
+ { 0x2F31, BIDI_ON }, // KANGXI RADICAL TURBAN
+ { 0x2F32, BIDI_ON }, // KANGXI RADICAL DRY
+ { 0x2F33, BIDI_ON }, // KANGXI RADICAL SHORT THREAD
+ { 0x2F34, BIDI_ON }, // KANGXI RADICAL DOTTED CLIFF
+ { 0x2F35, BIDI_ON }, // KANGXI RADICAL LONG STRIDE
+ { 0x2F36, BIDI_ON }, // KANGXI RADICAL TWO HANDS
+ { 0x2F37, BIDI_ON }, // KANGXI RADICAL SHOOT
+ { 0x2F38, BIDI_ON }, // KANGXI RADICAL BOW
+ { 0x2F39, BIDI_ON }, // KANGXI RADICAL SNOUT
+ { 0x2F3A, BIDI_ON }, // KANGXI RADICAL BRISTLE
+ { 0x2F3B, BIDI_ON }, // KANGXI RADICAL STEP
+ { 0x2F3C, BIDI_ON }, // KANGXI RADICAL HEART
+ { 0x2F3D, BIDI_ON }, // KANGXI RADICAL HALBERD
+ { 0x2F3E, BIDI_ON }, // KANGXI RADICAL DOOR
+ { 0x2F3F, BIDI_ON }, // KANGXI RADICAL HAND
+ { 0x2F40, BIDI_ON }, // KANGXI RADICAL BRANCH
+ { 0x2F41, BIDI_ON }, // KANGXI RADICAL RAP
+ { 0x2F42, BIDI_ON }, // KANGXI RADICAL SCRIPT
+ { 0x2F43, BIDI_ON }, // KANGXI RADICAL DIPPER
+ { 0x2F44, BIDI_ON }, // KANGXI RADICAL AXE
+ { 0x2F45, BIDI_ON }, // KANGXI RADICAL SQUARE
+ { 0x2F46, BIDI_ON }, // KANGXI RADICAL NOT
+ { 0x2F47, BIDI_ON }, // KANGXI RADICAL SUN
+ { 0x2F48, BIDI_ON }, // KANGXI RADICAL SAY
+ { 0x2F49, BIDI_ON }, // KANGXI RADICAL MOON
+ { 0x2F4A, BIDI_ON }, // KANGXI RADICAL TREE
+ { 0x2F4B, BIDI_ON }, // KANGXI RADICAL LACK
+ { 0x2F4C, BIDI_ON }, // KANGXI RADICAL STOP
+ { 0x2F4D, BIDI_ON }, // KANGXI RADICAL DEATH
+ { 0x2F4E, BIDI_ON }, // KANGXI RADICAL WEAPON
+ { 0x2F4F, BIDI_ON }, // KANGXI RADICAL DO NOT
+ { 0x2F50, BIDI_ON }, // KANGXI RADICAL COMPARE
+ { 0x2F51, BIDI_ON }, // KANGXI RADICAL FUR
+ { 0x2F52, BIDI_ON }, // KANGXI RADICAL CLAN
+ { 0x2F53, BIDI_ON }, // KANGXI RADICAL STEAM
+ { 0x2F54, BIDI_ON }, // KANGXI RADICAL WATER
+ { 0x2F55, BIDI_ON }, // KANGXI RADICAL FIRE
+ { 0x2F56, BIDI_ON }, // KANGXI RADICAL CLAW
+ { 0x2F57, BIDI_ON }, // KANGXI RADICAL FATHER
+ { 0x2F58, BIDI_ON }, // KANGXI RADICAL DOUBLE X
+ { 0x2F59, BIDI_ON }, // KANGXI RADICAL HALF TREE TRUNK
+ { 0x2F5A, BIDI_ON }, // KANGXI RADICAL SLICE
+ { 0x2F5B, BIDI_ON }, // KANGXI RADICAL FANG
+ { 0x2F5C, BIDI_ON }, // KANGXI RADICAL COW
+ { 0x2F5D, BIDI_ON }, // KANGXI RADICAL DOG
+ { 0x2F5E, BIDI_ON }, // KANGXI RADICAL PROFOUND
+ { 0x2F5F, BIDI_ON }, // KANGXI RADICAL JADE
+ { 0x2F60, BIDI_ON }, // KANGXI RADICAL MELON
+ { 0x2F61, BIDI_ON }, // KANGXI RADICAL TILE
+ { 0x2F62, BIDI_ON }, // KANGXI RADICAL SWEET
+ { 0x2F63, BIDI_ON }, // KANGXI RADICAL LIFE
+ { 0x2F64, BIDI_ON }, // KANGXI RADICAL USE
+ { 0x2F65, BIDI_ON }, // KANGXI RADICAL FIELD
+ { 0x2F66, BIDI_ON }, // KANGXI RADICAL BOLT OF CLOTH
+ { 0x2F67, BIDI_ON }, // KANGXI RADICAL SICKNESS
+ { 0x2F68, BIDI_ON }, // KANGXI RADICAL DOTTED TENT
+ { 0x2F69, BIDI_ON }, // KANGXI RADICAL WHITE
+ { 0x2F6A, BIDI_ON }, // KANGXI RADICAL SKIN
+ { 0x2F6B, BIDI_ON }, // KANGXI RADICAL DISH
+ { 0x2F6C, BIDI_ON }, // KANGXI RADICAL EYE
+ { 0x2F6D, BIDI_ON }, // KANGXI RADICAL SPEAR
+ { 0x2F6E, BIDI_ON }, // KANGXI RADICAL ARROW
+ { 0x2F6F, BIDI_ON }, // KANGXI RADICAL STONE
+ { 0x2F70, BIDI_ON }, // KANGXI RADICAL SPIRIT
+ { 0x2F71, BIDI_ON }, // KANGXI RADICAL TRACK
+ { 0x2F72, BIDI_ON }, // KANGXI RADICAL GRAIN
+ { 0x2F73, BIDI_ON }, // KANGXI RADICAL CAVE
+ { 0x2F74, BIDI_ON }, // KANGXI RADICAL STAND
+ { 0x2F75, BIDI_ON }, // KANGXI RADICAL BAMBOO
+ { 0x2F76, BIDI_ON }, // KANGXI RADICAL RICE
+ { 0x2F77, BIDI_ON }, // KANGXI RADICAL SILK
+ { 0x2F78, BIDI_ON }, // KANGXI RADICAL JAR
+ { 0x2F79, BIDI_ON }, // KANGXI RADICAL NET
+ { 0x2F7A, BIDI_ON }, // KANGXI RADICAL SHEEP
+ { 0x2F7B, BIDI_ON }, // KANGXI RADICAL FEATHER
+ { 0x2F7C, BIDI_ON }, // KANGXI RADICAL OLD
+ { 0x2F7D, BIDI_ON }, // KANGXI RADICAL AND
+ { 0x2F7E, BIDI_ON }, // KANGXI RADICAL PLOW
+ { 0x2F7F, BIDI_ON }, // KANGXI RADICAL EAR
+ { 0x2F80, BIDI_ON }, // KANGXI RADICAL BRUSH
+ { 0x2F81, BIDI_ON }, // KANGXI RADICAL MEAT
+ { 0x2F82, BIDI_ON }, // KANGXI RADICAL MINISTER
+ { 0x2F83, BIDI_ON }, // KANGXI RADICAL SELF
+ { 0x2F84, BIDI_ON }, // KANGXI RADICAL ARRIVE
+ { 0x2F85, BIDI_ON }, // KANGXI RADICAL MORTAR
+ { 0x2F86, BIDI_ON }, // KANGXI RADICAL TONGUE
+ { 0x2F87, BIDI_ON }, // KANGXI RADICAL OPPOSE
+ { 0x2F88, BIDI_ON }, // KANGXI RADICAL BOAT
+ { 0x2F89, BIDI_ON }, // KANGXI RADICAL STOPPING
+ { 0x2F8A, BIDI_ON }, // KANGXI RADICAL COLOR
+ { 0x2F8B, BIDI_ON }, // KANGXI RADICAL GRASS
+ { 0x2F8C, BIDI_ON }, // KANGXI RADICAL TIGER
+ { 0x2F8D, BIDI_ON }, // KANGXI RADICAL INSECT
+ { 0x2F8E, BIDI_ON }, // KANGXI RADICAL BLOOD
+ { 0x2F8F, BIDI_ON }, // KANGXI RADICAL WALK ENCLOSURE
+ { 0x2F90, BIDI_ON }, // KANGXI RADICAL CLOTHES
+ { 0x2F91, BIDI_ON }, // KANGXI RADICAL WEST
+ { 0x2F92, BIDI_ON }, // KANGXI RADICAL SEE
+ { 0x2F93, BIDI_ON }, // KANGXI RADICAL HORN
+ { 0x2F94, BIDI_ON }, // KANGXI RADICAL SPEECH
+ { 0x2F95, BIDI_ON }, // KANGXI RADICAL VALLEY
+ { 0x2F96, BIDI_ON }, // KANGXI RADICAL BEAN
+ { 0x2F97, BIDI_ON }, // KANGXI RADICAL PIG
+ { 0x2F98, BIDI_ON }, // KANGXI RADICAL BADGER
+ { 0x2F99, BIDI_ON }, // KANGXI RADICAL SHELL
+ { 0x2F9A, BIDI_ON }, // KANGXI RADICAL RED
+ { 0x2F9B, BIDI_ON }, // KANGXI RADICAL RUN
+ { 0x2F9C, BIDI_ON }, // KANGXI RADICAL FOOT
+ { 0x2F9D, BIDI_ON }, // KANGXI RADICAL BODY
+ { 0x2F9E, BIDI_ON }, // KANGXI RADICAL CART
+ { 0x2F9F, BIDI_ON }, // KANGXI RADICAL BITTER
+ { 0x2FA0, BIDI_ON }, // KANGXI RADICAL MORNING
+ { 0x2FA1, BIDI_ON }, // KANGXI RADICAL WALK
+ { 0x2FA2, BIDI_ON }, // KANGXI RADICAL CITY
+ { 0x2FA3, BIDI_ON }, // KANGXI RADICAL WINE
+ { 0x2FA4, BIDI_ON }, // KANGXI RADICAL DISTINGUISH
+ { 0x2FA5, BIDI_ON }, // KANGXI RADICAL VILLAGE
+ { 0x2FA6, BIDI_ON }, // KANGXI RADICAL GOLD
+ { 0x2FA7, BIDI_ON }, // KANGXI RADICAL LONG
+ { 0x2FA8, BIDI_ON }, // KANGXI RADICAL GATE
+ { 0x2FA9, BIDI_ON }, // KANGXI RADICAL MOUND
+ { 0x2FAA, BIDI_ON }, // KANGXI RADICAL SLAVE
+ { 0x2FAB, BIDI_ON }, // KANGXI RADICAL SHORT TAILED BIRD
+ { 0x2FAC, BIDI_ON }, // KANGXI RADICAL RAIN
+ { 0x2FAD, BIDI_ON }, // KANGXI RADICAL BLUE
+ { 0x2FAE, BIDI_ON }, // KANGXI RADICAL WRONG
+ { 0x2FAF, BIDI_ON }, // KANGXI RADICAL FACE
+ { 0x2FB0, BIDI_ON }, // KANGXI RADICAL LEATHER
+ { 0x2FB1, BIDI_ON }, // KANGXI RADICAL TANNED LEATHER
+ { 0x2FB2, BIDI_ON }, // KANGXI RADICAL LEEK
+ { 0x2FB3, BIDI_ON }, // KANGXI RADICAL SOUND
+ { 0x2FB4, BIDI_ON }, // KANGXI RADICAL LEAF
+ { 0x2FB5, BIDI_ON }, // KANGXI RADICAL WIND
+ { 0x2FB6, BIDI_ON }, // KANGXI RADICAL FLY
+ { 0x2FB7, BIDI_ON }, // KANGXI RADICAL EAT
+ { 0x2FB8, BIDI_ON }, // KANGXI RADICAL HEAD
+ { 0x2FB9, BIDI_ON }, // KANGXI RADICAL FRAGRANT
+ { 0x2FBA, BIDI_ON }, // KANGXI RADICAL HORSE
+ { 0x2FBB, BIDI_ON }, // KANGXI RADICAL BONE
+ { 0x2FBC, BIDI_ON }, // KANGXI RADICAL TALL
+ { 0x2FBD, BIDI_ON }, // KANGXI RADICAL HAIR
+ { 0x2FBE, BIDI_ON }, // KANGXI RADICAL FIGHT
+ { 0x2FBF, BIDI_ON }, // KANGXI RADICAL SACRIFICIAL WINE
+ { 0x2FC0, BIDI_ON }, // KANGXI RADICAL CAULDRON
+ { 0x2FC1, BIDI_ON }, // KANGXI RADICAL GHOST
+ { 0x2FC2, BIDI_ON }, // KANGXI RADICAL FISH
+ { 0x2FC3, BIDI_ON }, // KANGXI RADICAL BIRD
+ { 0x2FC4, BIDI_ON }, // KANGXI RADICAL SALT
+ { 0x2FC5, BIDI_ON }, // KANGXI RADICAL DEER
+ { 0x2FC6, BIDI_ON }, // KANGXI RADICAL WHEAT
+ { 0x2FC7, BIDI_ON }, // KANGXI RADICAL HEMP
+ { 0x2FC8, BIDI_ON }, // KANGXI RADICAL YELLOW
+ { 0x2FC9, BIDI_ON }, // KANGXI RADICAL MILLET
+ { 0x2FCA, BIDI_ON }, // KANGXI RADICAL BLACK
+ { 0x2FCB, BIDI_ON }, // KANGXI RADICAL EMBROIDERY
+ { 0x2FCC, BIDI_ON }, // KANGXI RADICAL FROG
+ { 0x2FCD, BIDI_ON }, // KANGXI RADICAL TRIPOD
+ { 0x2FCE, BIDI_ON }, // KANGXI RADICAL DRUM
+ { 0x2FCF, BIDI_ON }, // KANGXI RADICAL RAT
+ { 0x2FD0, BIDI_ON }, // KANGXI RADICAL NOSE
+ { 0x2FD1, BIDI_ON }, // KANGXI RADICAL EVEN
+ { 0x2FD2, BIDI_ON }, // KANGXI RADICAL TOOTH
+ { 0x2FD3, BIDI_ON }, // KANGXI RADICAL DRAGON
+ { 0x2FD4, BIDI_ON }, // KANGXI RADICAL TURTLE
+ { 0x2FD5, BIDI_ON }, // KANGXI RADICAL FLUTE
+ { 0x2FF0, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT
+ { 0x2FF1, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW
+ { 0x2FF2, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT
+ { 0x2FF3, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW
+ { 0x2FF4, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND
+ { 0x2FF5, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE
+ { 0x2FF6, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW
+ { 0x2FF7, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT
+ { 0x2FF8, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT
+ { 0x2FF9, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT
+ { 0x2FFA, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT
+ { 0x2FFB, BIDI_ON }, // IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_3 == 1)
+
+ { 0x3000, BIDI_WS }, // IDEOGRAPHIC SPACE
+ { 0x3001, BIDI_ON }, // IDEOGRAPHIC COMMA
+ { 0x3002, BIDI_ON }, // IDEOGRAPHIC FULL STOP
+ { 0x3003, BIDI_ON }, // DITTO MARK
+ { 0x3004, BIDI_ON }, // JAPANESE INDUSTRIAL STANDARD SYMBOL
+ { 0x3005, BIDI_L }, // IDEOGRAPHIC ITERATION MARK
+ { 0x3006, BIDI_L }, // IDEOGRAPHIC CLOSING MARK
+ { 0x3007, BIDI_L }, // IDEOGRAPHIC NUMBER ZERO
+ { 0x3008, BIDI_ON }, // LEFT ANGLE BRACKET
+ { 0x3009, BIDI_ON }, // RIGHT ANGLE BRACKET
+ { 0x300A, BIDI_ON }, // LEFT DOUBLE ANGLE BRACKET
+ { 0x300B, BIDI_ON }, // RIGHT DOUBLE ANGLE BRACKET
+ { 0x300C, BIDI_ON }, // LEFT CORNER BRACKET
+ { 0x300D, BIDI_ON }, // RIGHT CORNER BRACKET
+ { 0x300E, BIDI_ON }, // LEFT WHITE CORNER BRACKET
+ { 0x300F, BIDI_ON }, // RIGHT WHITE CORNER BRACKET
+ { 0x3010, BIDI_ON }, // LEFT BLACK LENTICULAR BRACKET
+ { 0x3011, BIDI_ON }, // RIGHT BLACK LENTICULAR BRACKET
+ { 0x3012, BIDI_ON }, // POSTAL MARK
+ { 0x3013, BIDI_ON }, // GETA MARK
+ { 0x3014, BIDI_ON }, // LEFT TORTOISE SHELL BRACKET
+ { 0x3015, BIDI_ON }, // RIGHT TORTOISE SHELL BRACKET
+ { 0x3016, BIDI_ON }, // LEFT WHITE LENTICULAR BRACKET
+ { 0x3017, BIDI_ON }, // RIGHT WHITE LENTICULAR BRACKET
+ { 0x3018, BIDI_ON }, // LEFT WHITE TORTOISE SHELL BRACKET
+ { 0x3019, BIDI_ON }, // RIGHT WHITE TORTOISE SHELL BRACKET
+ { 0x301A, BIDI_ON }, // LEFT WHITE SQUARE BRACKET
+ { 0x301B, BIDI_ON }, // RIGHT WHITE SQUARE BRACKET
+ { 0x301C, BIDI_ON }, // WAVE DASH
+ { 0x301D, BIDI_ON }, // REVERSED DOUBLE PRIME QUOTATION MARK
+ { 0x301E, BIDI_ON }, // DOUBLE PRIME QUOTATION MARK
+ { 0x301F, BIDI_ON }, // LOW DOUBLE PRIME QUOTATION MARK
+ { 0x3020, BIDI_ON }, // POSTAL MARK FACE
+ { 0x3021, BIDI_L }, // HANGZHOU NUMERAL ONE
+ { 0x3022, BIDI_L }, // HANGZHOU NUMERAL TWO
+ { 0x3023, BIDI_L }, // HANGZHOU NUMERAL THREE
+ { 0x3024, BIDI_L }, // HANGZHOU NUMERAL FOUR
+ { 0x3025, BIDI_L }, // HANGZHOU NUMERAL FIVE
+ { 0x3026, BIDI_L }, // HANGZHOU NUMERAL SIX
+ { 0x3027, BIDI_L }, // HANGZHOU NUMERAL SEVEN
+ { 0x3028, BIDI_L }, // HANGZHOU NUMERAL EIGHT
+ { 0x3029, BIDI_L }, // HANGZHOU NUMERAL NINE
+ { 0x302A, BIDI_NSM }, // IDEOGRAPHIC LEVEL TONE MARK
+ { 0x302B, BIDI_NSM }, // IDEOGRAPHIC RISING TONE MARK
+ { 0x302C, BIDI_NSM }, // IDEOGRAPHIC DEPARTING TONE MARK
+ { 0x302D, BIDI_NSM }, // IDEOGRAPHIC ENTERING TONE MARK
+ { 0x302E, BIDI_L }, // HANGUL SINGLE DOT TONE MARK
+ { 0x302F, BIDI_L }, // HANGUL DOUBLE DOT TONE MARK
+ { 0x3030, BIDI_ON }, // WAVY DASH
+ { 0x3031, BIDI_L }, // VERTICAL KANA REPEAT MARK
+ { 0x3032, BIDI_L }, // VERTICAL KANA REPEAT WITH VOICED SOUND MARK
+ { 0x3033, BIDI_L }, // VERTICAL KANA REPEAT MARK UPPER HALF
+ { 0x3034, BIDI_L }, // VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF
+ { 0x3035, BIDI_L }, // VERTICAL KANA REPEAT MARK LOWER HALF
+ { 0x3036, BIDI_ON }, // CIRCLED POSTAL MARK
+ { 0x3037, BIDI_ON }, // IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+ { 0x3038, BIDI_L }, // HANGZHOU NUMERAL TEN
+ { 0x3039, BIDI_L }, // HANGZHOU NUMERAL TWENTY
+ { 0x303A, BIDI_L }, // HANGZHOU NUMERAL THIRTY
+ { 0x303B, BIDI_L }, // VERTICAL IDEOGRAPHIC ITERATION MARK
+ { 0x303C, BIDI_L }, // MASU MARK
+ { 0x303D, BIDI_ON }, // PART ALTERNATION MARK
+ { 0x303E, BIDI_ON }, // IDEOGRAPHIC VARIATION INDICATOR
+ { 0x303F, BIDI_ON }, // IDEOGRAPHIC HALF FILL SPACE
+ { 0x3041, BIDI_L }, // HIRAGANA LETTER SMALL A
+ { 0x3042, BIDI_L }, // HIRAGANA LETTER A
+ { 0x3043, BIDI_L }, // HIRAGANA LETTER SMALL I
+ { 0x3044, BIDI_L }, // HIRAGANA LETTER I
+ { 0x3045, BIDI_L }, // HIRAGANA LETTER SMALL U
+ { 0x3046, BIDI_L }, // HIRAGANA LETTER U
+ { 0x3047, BIDI_L }, // HIRAGANA LETTER SMALL E
+ { 0x3048, BIDI_L }, // HIRAGANA LETTER E
+ { 0x3049, BIDI_L }, // HIRAGANA LETTER SMALL O
+ { 0x304A, BIDI_L }, // HIRAGANA LETTER O
+ { 0x304B, BIDI_L }, // HIRAGANA LETTER KA
+ { 0x304C, BIDI_L }, // HIRAGANA LETTER GA
+ { 0x304D, BIDI_L }, // HIRAGANA LETTER KI
+ { 0x304E, BIDI_L }, // HIRAGANA LETTER GI
+ { 0x304F, BIDI_L }, // HIRAGANA LETTER KU
+ { 0x3050, BIDI_L }, // HIRAGANA LETTER GU
+ { 0x3051, BIDI_L }, // HIRAGANA LETTER KE
+ { 0x3052, BIDI_L }, // HIRAGANA LETTER GE
+ { 0x3053, BIDI_L }, // HIRAGANA LETTER KO
+ { 0x3054, BIDI_L }, // HIRAGANA LETTER GO
+ { 0x3055, BIDI_L }, // HIRAGANA LETTER SA
+ { 0x3056, BIDI_L }, // HIRAGANA LETTER ZA
+ { 0x3057, BIDI_L }, // HIRAGANA LETTER SI
+ { 0x3058, BIDI_L }, // HIRAGANA LETTER ZI
+ { 0x3059, BIDI_L }, // HIRAGANA LETTER SU
+ { 0x305A, BIDI_L }, // HIRAGANA LETTER ZU
+ { 0x305B, BIDI_L }, // HIRAGANA LETTER SE
+ { 0x305C, BIDI_L }, // HIRAGANA LETTER ZE
+ { 0x305D, BIDI_L }, // HIRAGANA LETTER SO
+ { 0x305E, BIDI_L }, // HIRAGANA LETTER ZO
+ { 0x305F, BIDI_L }, // HIRAGANA LETTER TA
+ { 0x3060, BIDI_L }, // HIRAGANA LETTER DA
+ { 0x3061, BIDI_L }, // HIRAGANA LETTER TI
+ { 0x3062, BIDI_L }, // HIRAGANA LETTER DI
+ { 0x3063, BIDI_L }, // HIRAGANA LETTER SMALL TU
+ { 0x3064, BIDI_L }, // HIRAGANA LETTER TU
+ { 0x3065, BIDI_L }, // HIRAGANA LETTER DU
+ { 0x3066, BIDI_L }, // HIRAGANA LETTER TE
+ { 0x3067, BIDI_L }, // HIRAGANA LETTER DE
+ { 0x3068, BIDI_L }, // HIRAGANA LETTER TO
+ { 0x3069, BIDI_L }, // HIRAGANA LETTER DO
+ { 0x306A, BIDI_L }, // HIRAGANA LETTER NA
+ { 0x306B, BIDI_L }, // HIRAGANA LETTER NI
+ { 0x306C, BIDI_L }, // HIRAGANA LETTER NU
+ { 0x306D, BIDI_L }, // HIRAGANA LETTER NE
+ { 0x306E, BIDI_L }, // HIRAGANA LETTER NO
+ { 0x306F, BIDI_L }, // HIRAGANA LETTER HA
+ { 0x3070, BIDI_L }, // HIRAGANA LETTER BA
+ { 0x3071, BIDI_L }, // HIRAGANA LETTER PA
+ { 0x3072, BIDI_L }, // HIRAGANA LETTER HI
+ { 0x3073, BIDI_L }, // HIRAGANA LETTER BI
+ { 0x3074, BIDI_L }, // HIRAGANA LETTER PI
+ { 0x3075, BIDI_L }, // HIRAGANA LETTER HU
+ { 0x3076, BIDI_L }, // HIRAGANA LETTER BU
+ { 0x3077, BIDI_L }, // HIRAGANA LETTER PU
+ { 0x3078, BIDI_L }, // HIRAGANA LETTER HE
+ { 0x3079, BIDI_L }, // HIRAGANA LETTER BE
+ { 0x307A, BIDI_L }, // HIRAGANA LETTER PE
+ { 0x307B, BIDI_L }, // HIRAGANA LETTER HO
+ { 0x307C, BIDI_L }, // HIRAGANA LETTER BO
+ { 0x307D, BIDI_L }, // HIRAGANA LETTER PO
+ { 0x307E, BIDI_L }, // HIRAGANA LETTER MA
+ { 0x307F, BIDI_L }, // HIRAGANA LETTER MI
+ { 0x3080, BIDI_L }, // HIRAGANA LETTER MU
+ { 0x3081, BIDI_L }, // HIRAGANA LETTER ME
+ { 0x3082, BIDI_L }, // HIRAGANA LETTER MO
+ { 0x3083, BIDI_L }, // HIRAGANA LETTER SMALL YA
+ { 0x3084, BIDI_L }, // HIRAGANA LETTER YA
+ { 0x3085, BIDI_L }, // HIRAGANA LETTER SMALL YU
+ { 0x3086, BIDI_L }, // HIRAGANA LETTER YU
+ { 0x3087, BIDI_L }, // HIRAGANA LETTER SMALL YO
+ { 0x3088, BIDI_L }, // HIRAGANA LETTER YO
+ { 0x3089, BIDI_L }, // HIRAGANA LETTER RA
+ { 0x308A, BIDI_L }, // HIRAGANA LETTER RI
+ { 0x308B, BIDI_L }, // HIRAGANA LETTER RU
+ { 0x308C, BIDI_L }, // HIRAGANA LETTER RE
+ { 0x308D, BIDI_L }, // HIRAGANA LETTER RO
+ { 0x308E, BIDI_L }, // HIRAGANA LETTER SMALL WA
+ { 0x308F, BIDI_L }, // HIRAGANA LETTER WA
+ { 0x3090, BIDI_L }, // HIRAGANA LETTER WI
+ { 0x3091, BIDI_L }, // HIRAGANA LETTER WE
+ { 0x3092, BIDI_L }, // HIRAGANA LETTER WO
+ { 0x3093, BIDI_L }, // HIRAGANA LETTER N
+ { 0x3094, BIDI_L }, // HIRAGANA LETTER VU
+ { 0x3095, BIDI_L }, // HIRAGANA LETTER SMALL KA
+ { 0x3096, BIDI_L }, // HIRAGANA LETTER SMALL KE
+ { 0x3099, BIDI_NSM }, // COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+ { 0x309A, BIDI_NSM }, // COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ { 0x309B, BIDI_ON }, // KATAKANA-HIRAGANA VOICED SOUND MARK
+ { 0x309C, BIDI_ON }, // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ { 0x309D, BIDI_L }, // HIRAGANA ITERATION MARK
+ { 0x309E, BIDI_L }, // HIRAGANA VOICED ITERATION MARK
+ { 0x309F, BIDI_L }, // HIRAGANA DIGRAPH YORI
+ { 0x30A0, BIDI_ON }, // KATAKANA-HIRAGANA DOUBLE HYPHEN
+ { 0x30A1, BIDI_L }, // KATAKANA LETTER SMALL A
+ { 0x30A2, BIDI_L }, // KATAKANA LETTER A
+ { 0x30A3, BIDI_L }, // KATAKANA LETTER SMALL I
+ { 0x30A4, BIDI_L }, // KATAKANA LETTER I
+ { 0x30A5, BIDI_L }, // KATAKANA LETTER SMALL U
+ { 0x30A6, BIDI_L }, // KATAKANA LETTER U
+ { 0x30A7, BIDI_L }, // KATAKANA LETTER SMALL E
+ { 0x30A8, BIDI_L }, // KATAKANA LETTER E
+ { 0x30A9, BIDI_L }, // KATAKANA LETTER SMALL O
+ { 0x30AA, BIDI_L }, // KATAKANA LETTER O
+ { 0x30AB, BIDI_L }, // KATAKANA LETTER KA
+ { 0x30AC, BIDI_L }, // KATAKANA LETTER GA
+ { 0x30AD, BIDI_L }, // KATAKANA LETTER KI
+ { 0x30AE, BIDI_L }, // KATAKANA LETTER GI
+ { 0x30AF, BIDI_L }, // KATAKANA LETTER KU
+ { 0x30B0, BIDI_L }, // KATAKANA LETTER GU
+ { 0x30B1, BIDI_L }, // KATAKANA LETTER KE
+ { 0x30B2, BIDI_L }, // KATAKANA LETTER GE
+ { 0x30B3, BIDI_L }, // KATAKANA LETTER KO
+ { 0x30B4, BIDI_L }, // KATAKANA LETTER GO
+ { 0x30B5, BIDI_L }, // KATAKANA LETTER SA
+ { 0x30B6, BIDI_L }, // KATAKANA LETTER ZA
+ { 0x30B7, BIDI_L }, // KATAKANA LETTER SI
+ { 0x30B8, BIDI_L }, // KATAKANA LETTER ZI
+ { 0x30B9, BIDI_L }, // KATAKANA LETTER SU
+ { 0x30BA, BIDI_L }, // KATAKANA LETTER ZU
+ { 0x30BB, BIDI_L }, // KATAKANA LETTER SE
+ { 0x30BC, BIDI_L }, // KATAKANA LETTER ZE
+ { 0x30BD, BIDI_L }, // KATAKANA LETTER SO
+ { 0x30BE, BIDI_L }, // KATAKANA LETTER ZO
+ { 0x30BF, BIDI_L }, // KATAKANA LETTER TA
+ { 0x30C0, BIDI_L }, // KATAKANA LETTER DA
+ { 0x30C1, BIDI_L }, // KATAKANA LETTER TI
+ { 0x30C2, BIDI_L }, // KATAKANA LETTER DI
+ { 0x30C3, BIDI_L }, // KATAKANA LETTER SMALL TU
+ { 0x30C4, BIDI_L }, // KATAKANA LETTER TU
+ { 0x30C5, BIDI_L }, // KATAKANA LETTER DU
+ { 0x30C6, BIDI_L }, // KATAKANA LETTER TE
+ { 0x30C7, BIDI_L }, // KATAKANA LETTER DE
+ { 0x30C8, BIDI_L }, // KATAKANA LETTER TO
+ { 0x30C9, BIDI_L }, // KATAKANA LETTER DO
+ { 0x30CA, BIDI_L }, // KATAKANA LETTER NA
+ { 0x30CB, BIDI_L }, // KATAKANA LETTER NI
+ { 0x30CC, BIDI_L }, // KATAKANA LETTER NU
+ { 0x30CD, BIDI_L }, // KATAKANA LETTER NE
+ { 0x30CE, BIDI_L }, // KATAKANA LETTER NO
+ { 0x30CF, BIDI_L }, // KATAKANA LETTER HA
+ { 0x30D0, BIDI_L }, // KATAKANA LETTER BA
+ { 0x30D1, BIDI_L }, // KATAKANA LETTER PA
+ { 0x30D2, BIDI_L }, // KATAKANA LETTER HI
+ { 0x30D3, BIDI_L }, // KATAKANA LETTER BI
+ { 0x30D4, BIDI_L }, // KATAKANA LETTER PI
+ { 0x30D5, BIDI_L }, // KATAKANA LETTER HU
+ { 0x30D6, BIDI_L }, // KATAKANA LETTER BU
+ { 0x30D7, BIDI_L }, // KATAKANA LETTER PU
+ { 0x30D8, BIDI_L }, // KATAKANA LETTER HE
+ { 0x30D9, BIDI_L }, // KATAKANA LETTER BE
+ { 0x30DA, BIDI_L }, // KATAKANA LETTER PE
+ { 0x30DB, BIDI_L }, // KATAKANA LETTER HO
+ { 0x30DC, BIDI_L }, // KATAKANA LETTER BO
+ { 0x30DD, BIDI_L }, // KATAKANA LETTER PO
+ { 0x30DE, BIDI_L }, // KATAKANA LETTER MA
+ { 0x30DF, BIDI_L }, // KATAKANA LETTER MI
+ { 0x30E0, BIDI_L }, // KATAKANA LETTER MU
+ { 0x30E1, BIDI_L }, // KATAKANA LETTER ME
+ { 0x30E2, BIDI_L }, // KATAKANA LETTER MO
+ { 0x30E3, BIDI_L }, // KATAKANA LETTER SMALL YA
+ { 0x30E4, BIDI_L }, // KATAKANA LETTER YA
+ { 0x30E5, BIDI_L }, // KATAKANA LETTER SMALL YU
+ { 0x30E6, BIDI_L }, // KATAKANA LETTER YU
+ { 0x30E7, BIDI_L }, // KATAKANA LETTER SMALL YO
+ { 0x30E8, BIDI_L }, // KATAKANA LETTER YO
+ { 0x30E9, BIDI_L }, // KATAKANA LETTER RA
+ { 0x30EA, BIDI_L }, // KATAKANA LETTER RI
+ { 0x30EB, BIDI_L }, // KATAKANA LETTER RU
+ { 0x30EC, BIDI_L }, // KATAKANA LETTER RE
+ { 0x30ED, BIDI_L }, // KATAKANA LETTER RO
+ { 0x30EE, BIDI_L }, // KATAKANA LETTER SMALL WA
+ { 0x30EF, BIDI_L }, // KATAKANA LETTER WA
+ { 0x30F0, BIDI_L }, // KATAKANA LETTER WI
+ { 0x30F1, BIDI_L }, // KATAKANA LETTER WE
+ { 0x30F2, BIDI_L }, // KATAKANA LETTER WO
+ { 0x30F3, BIDI_L }, // KATAKANA LETTER N
+ { 0x30F4, BIDI_L }, // KATAKANA LETTER VU
+ { 0x30F5, BIDI_L }, // KATAKANA LETTER SMALL KA
+ { 0x30F6, BIDI_L }, // KATAKANA LETTER SMALL KE
+ { 0x30F7, BIDI_L }, // KATAKANA LETTER VA
+ { 0x30F8, BIDI_L }, // KATAKANA LETTER VI
+ { 0x30F9, BIDI_L }, // KATAKANA LETTER VE
+ { 0x30FA, BIDI_L }, // KATAKANA LETTER VO
+ { 0x30FB, BIDI_ON }, // KATAKANA MIDDLE DOT
+ { 0x30FC, BIDI_L }, // KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ { 0x30FD, BIDI_L }, // KATAKANA ITERATION MARK
+ { 0x30FE, BIDI_L }, // KATAKANA VOICED ITERATION MARK
+ { 0x30FF, BIDI_L }, // KATAKANA DIGRAPH KOTO
+ { 0x3105, BIDI_L }, // BOPOMOFO LETTER B
+ { 0x3106, BIDI_L }, // BOPOMOFO LETTER P
+ { 0x3107, BIDI_L }, // BOPOMOFO LETTER M
+ { 0x3108, BIDI_L }, // BOPOMOFO LETTER F
+ { 0x3109, BIDI_L }, // BOPOMOFO LETTER D
+ { 0x310A, BIDI_L }, // BOPOMOFO LETTER T
+ { 0x310B, BIDI_L }, // BOPOMOFO LETTER N
+ { 0x310C, BIDI_L }, // BOPOMOFO LETTER L
+ { 0x310D, BIDI_L }, // BOPOMOFO LETTER G
+ { 0x310E, BIDI_L }, // BOPOMOFO LETTER K
+ { 0x310F, BIDI_L }, // BOPOMOFO LETTER H
+ { 0x3110, BIDI_L }, // BOPOMOFO LETTER J
+ { 0x3111, BIDI_L }, // BOPOMOFO LETTER Q
+ { 0x3112, BIDI_L }, // BOPOMOFO LETTER X
+ { 0x3113, BIDI_L }, // BOPOMOFO LETTER ZH
+ { 0x3114, BIDI_L }, // BOPOMOFO LETTER CH
+ { 0x3115, BIDI_L }, // BOPOMOFO LETTER SH
+ { 0x3116, BIDI_L }, // BOPOMOFO LETTER R
+ { 0x3117, BIDI_L }, // BOPOMOFO LETTER Z
+ { 0x3118, BIDI_L }, // BOPOMOFO LETTER C
+ { 0x3119, BIDI_L }, // BOPOMOFO LETTER S
+ { 0x311A, BIDI_L }, // BOPOMOFO LETTER A
+ { 0x311B, BIDI_L }, // BOPOMOFO LETTER O
+ { 0x311C, BIDI_L }, // BOPOMOFO LETTER E
+ { 0x311D, BIDI_L }, // BOPOMOFO LETTER EH
+ { 0x311E, BIDI_L }, // BOPOMOFO LETTER AI
+ { 0x311F, BIDI_L }, // BOPOMOFO LETTER EI
+ { 0x3120, BIDI_L }, // BOPOMOFO LETTER AU
+ { 0x3121, BIDI_L }, // BOPOMOFO LETTER OU
+ { 0x3122, BIDI_L }, // BOPOMOFO LETTER AN
+ { 0x3123, BIDI_L }, // BOPOMOFO LETTER EN
+ { 0x3124, BIDI_L }, // BOPOMOFO LETTER ANG
+ { 0x3125, BIDI_L }, // BOPOMOFO LETTER ENG
+ { 0x3126, BIDI_L }, // BOPOMOFO LETTER ER
+ { 0x3127, BIDI_L }, // BOPOMOFO LETTER I
+ { 0x3128, BIDI_L }, // BOPOMOFO LETTER U
+ { 0x3129, BIDI_L }, // BOPOMOFO LETTER IU
+ { 0x312A, BIDI_L }, // BOPOMOFO LETTER V
+ { 0x312B, BIDI_L }, // BOPOMOFO LETTER NG
+ { 0x312C, BIDI_L }, // BOPOMOFO LETTER GN
+ { 0x312D, BIDI_L }, // BOPOMOFO LETTER IH
+ { 0x3131, BIDI_L }, // HANGUL LETTER KIYEOK
+ { 0x3132, BIDI_L }, // HANGUL LETTER SSANGKIYEOK
+ { 0x3133, BIDI_L }, // HANGUL LETTER KIYEOK-SIOS
+ { 0x3134, BIDI_L }, // HANGUL LETTER NIEUN
+ { 0x3135, BIDI_L }, // HANGUL LETTER NIEUN-CIEUC
+ { 0x3136, BIDI_L }, // HANGUL LETTER NIEUN-HIEUH
+ { 0x3137, BIDI_L }, // HANGUL LETTER TIKEUT
+ { 0x3138, BIDI_L }, // HANGUL LETTER SSANGTIKEUT
+ { 0x3139, BIDI_L }, // HANGUL LETTER RIEUL
+ { 0x313A, BIDI_L }, // HANGUL LETTER RIEUL-KIYEOK
+ { 0x313B, BIDI_L }, // HANGUL LETTER RIEUL-MIEUM
+ { 0x313C, BIDI_L }, // HANGUL LETTER RIEUL-PIEUP
+ { 0x313D, BIDI_L }, // HANGUL LETTER RIEUL-SIOS
+ { 0x313E, BIDI_L }, // HANGUL LETTER RIEUL-THIEUTH
+ { 0x313F, BIDI_L }, // HANGUL LETTER RIEUL-PHIEUPH
+ { 0x3140, BIDI_L }, // HANGUL LETTER RIEUL-HIEUH
+ { 0x3141, BIDI_L }, // HANGUL LETTER MIEUM
+ { 0x3142, BIDI_L }, // HANGUL LETTER PIEUP
+ { 0x3143, BIDI_L }, // HANGUL LETTER SSANGPIEUP
+ { 0x3144, BIDI_L }, // HANGUL LETTER PIEUP-SIOS
+ { 0x3145, BIDI_L }, // HANGUL LETTER SIOS
+ { 0x3146, BIDI_L }, // HANGUL LETTER SSANGSIOS
+ { 0x3147, BIDI_L }, // HANGUL LETTER IEUNG
+ { 0x3148, BIDI_L }, // HANGUL LETTER CIEUC
+ { 0x3149, BIDI_L }, // HANGUL LETTER SSANGCIEUC
+ { 0x314A, BIDI_L }, // HANGUL LETTER CHIEUCH
+ { 0x314B, BIDI_L }, // HANGUL LETTER KHIEUKH
+ { 0x314C, BIDI_L }, // HANGUL LETTER THIEUTH
+ { 0x314D, BIDI_L }, // HANGUL LETTER PHIEUPH
+ { 0x314E, BIDI_L }, // HANGUL LETTER HIEUH
+ { 0x314F, BIDI_L }, // HANGUL LETTER A
+ { 0x3150, BIDI_L }, // HANGUL LETTER AE
+ { 0x3151, BIDI_L }, // HANGUL LETTER YA
+ { 0x3152, BIDI_L }, // HANGUL LETTER YAE
+ { 0x3153, BIDI_L }, // HANGUL LETTER EO
+ { 0x3154, BIDI_L }, // HANGUL LETTER E
+ { 0x3155, BIDI_L }, // HANGUL LETTER YEO
+ { 0x3156, BIDI_L }, // HANGUL LETTER YE
+ { 0x3157, BIDI_L }, // HANGUL LETTER O
+ { 0x3158, BIDI_L }, // HANGUL LETTER WA
+ { 0x3159, BIDI_L }, // HANGUL LETTER WAE
+ { 0x315A, BIDI_L }, // HANGUL LETTER OE
+ { 0x315B, BIDI_L }, // HANGUL LETTER YO
+ { 0x315C, BIDI_L }, // HANGUL LETTER U
+ { 0x315D, BIDI_L }, // HANGUL LETTER WEO
+ { 0x315E, BIDI_L }, // HANGUL LETTER WE
+ { 0x315F, BIDI_L }, // HANGUL LETTER WI
+ { 0x3160, BIDI_L }, // HANGUL LETTER YU
+ { 0x3161, BIDI_L }, // HANGUL LETTER EU
+ { 0x3162, BIDI_L }, // HANGUL LETTER YI
+ { 0x3163, BIDI_L }, // HANGUL LETTER I
+ { 0x3164, BIDI_L }, // HANGUL FILLER
+ { 0x3165, BIDI_L }, // HANGUL LETTER SSANGNIEUN
+ { 0x3166, BIDI_L }, // HANGUL LETTER NIEUN-TIKEUT
+ { 0x3167, BIDI_L }, // HANGUL LETTER NIEUN-SIOS
+ { 0x3168, BIDI_L }, // HANGUL LETTER NIEUN-PANSIOS
+ { 0x3169, BIDI_L }, // HANGUL LETTER RIEUL-KIYEOK-SIOS
+ { 0x316A, BIDI_L }, // HANGUL LETTER RIEUL-TIKEUT
+ { 0x316B, BIDI_L }, // HANGUL LETTER RIEUL-PIEUP-SIOS
+ { 0x316C, BIDI_L }, // HANGUL LETTER RIEUL-PANSIOS
+ { 0x316D, BIDI_L }, // HANGUL LETTER RIEUL-YEORINHIEUH
+ { 0x316E, BIDI_L }, // HANGUL LETTER MIEUM-PIEUP
+ { 0x316F, BIDI_L }, // HANGUL LETTER MIEUM-SIOS
+ { 0x3170, BIDI_L }, // HANGUL LETTER MIEUM-PANSIOS
+ { 0x3171, BIDI_L }, // HANGUL LETTER KAPYEOUNMIEUM
+ { 0x3172, BIDI_L }, // HANGUL LETTER PIEUP-KIYEOK
+ { 0x3173, BIDI_L }, // HANGUL LETTER PIEUP-TIKEUT
+ { 0x3174, BIDI_L }, // HANGUL LETTER PIEUP-SIOS-KIYEOK
+ { 0x3175, BIDI_L }, // HANGUL LETTER PIEUP-SIOS-TIKEUT
+ { 0x3176, BIDI_L }, // HANGUL LETTER PIEUP-CIEUC
+ { 0x3177, BIDI_L }, // HANGUL LETTER PIEUP-THIEUTH
+ { 0x3178, BIDI_L }, // HANGUL LETTER KAPYEOUNPIEUP
+ { 0x3179, BIDI_L }, // HANGUL LETTER KAPYEOUNSSANGPIEUP
+ { 0x317A, BIDI_L }, // HANGUL LETTER SIOS-KIYEOK
+ { 0x317B, BIDI_L }, // HANGUL LETTER SIOS-NIEUN
+ { 0x317C, BIDI_L }, // HANGUL LETTER SIOS-TIKEUT
+ { 0x317D, BIDI_L }, // HANGUL LETTER SIOS-PIEUP
+ { 0x317E, BIDI_L }, // HANGUL LETTER SIOS-CIEUC
+ { 0x317F, BIDI_L }, // HANGUL LETTER PANSIOS
+ { 0x3180, BIDI_L }, // HANGUL LETTER SSANGIEUNG
+ { 0x3181, BIDI_L }, // HANGUL LETTER YESIEUNG
+ { 0x3182, BIDI_L }, // HANGUL LETTER YESIEUNG-SIOS
+ { 0x3183, BIDI_L }, // HANGUL LETTER YESIEUNG-PANSIOS
+ { 0x3184, BIDI_L }, // HANGUL LETTER KAPYEOUNPHIEUPH
+ { 0x3185, BIDI_L }, // HANGUL LETTER SSANGHIEUH
+ { 0x3186, BIDI_L }, // HANGUL LETTER YEORINHIEUH
+ { 0x3187, BIDI_L }, // HANGUL LETTER YO-YA
+ { 0x3188, BIDI_L }, // HANGUL LETTER YO-YAE
+ { 0x3189, BIDI_L }, // HANGUL LETTER YO-I
+ { 0x318A, BIDI_L }, // HANGUL LETTER YU-YEO
+ { 0x318B, BIDI_L }, // HANGUL LETTER YU-YE
+ { 0x318C, BIDI_L }, // HANGUL LETTER YU-I
+ { 0x318D, BIDI_L }, // HANGUL LETTER ARAEA
+ { 0x318E, BIDI_L }, // HANGUL LETTER ARAEAE
+ { 0x3190, BIDI_L }, // IDEOGRAPHIC ANNOTATION LINKING MARK
+ { 0x3191, BIDI_L }, // IDEOGRAPHIC ANNOTATION REVERSE MARK
+ { 0x3192, BIDI_L }, // IDEOGRAPHIC ANNOTATION ONE MARK
+ { 0x3193, BIDI_L }, // IDEOGRAPHIC ANNOTATION TWO MARK
+ { 0x3194, BIDI_L }, // IDEOGRAPHIC ANNOTATION THREE MARK
+ { 0x3195, BIDI_L }, // IDEOGRAPHIC ANNOTATION FOUR MARK
+ { 0x3196, BIDI_L }, // IDEOGRAPHIC ANNOTATION TOP MARK
+ { 0x3197, BIDI_L }, // IDEOGRAPHIC ANNOTATION MIDDLE MARK
+ { 0x3198, BIDI_L }, // IDEOGRAPHIC ANNOTATION BOTTOM MARK
+ { 0x3199, BIDI_L }, // IDEOGRAPHIC ANNOTATION FIRST MARK
+ { 0x319A, BIDI_L }, // IDEOGRAPHIC ANNOTATION SECOND MARK
+ { 0x319B, BIDI_L }, // IDEOGRAPHIC ANNOTATION THIRD MARK
+ { 0x319C, BIDI_L }, // IDEOGRAPHIC ANNOTATION FOURTH MARK
+ { 0x319D, BIDI_L }, // IDEOGRAPHIC ANNOTATION HEAVEN MARK
+ { 0x319E, BIDI_L }, // IDEOGRAPHIC ANNOTATION EARTH MARK
+ { 0x319F, BIDI_L }, // IDEOGRAPHIC ANNOTATION MAN MARK
+ { 0x31A0, BIDI_L }, // BOPOMOFO LETTER BU
+ { 0x31A1, BIDI_L }, // BOPOMOFO LETTER ZI
+ { 0x31A2, BIDI_L }, // BOPOMOFO LETTER JI
+ { 0x31A3, BIDI_L }, // BOPOMOFO LETTER GU
+ { 0x31A4, BIDI_L }, // BOPOMOFO LETTER EE
+ { 0x31A5, BIDI_L }, // BOPOMOFO LETTER ENN
+ { 0x31A6, BIDI_L }, // BOPOMOFO LETTER OO
+ { 0x31A7, BIDI_L }, // BOPOMOFO LETTER ONN
+ { 0x31A8, BIDI_L }, // BOPOMOFO LETTER IR
+ { 0x31A9, BIDI_L }, // BOPOMOFO LETTER ANN
+ { 0x31AA, BIDI_L }, // BOPOMOFO LETTER INN
+ { 0x31AB, BIDI_L }, // BOPOMOFO LETTER UNN
+ { 0x31AC, BIDI_L }, // BOPOMOFO LETTER IM
+ { 0x31AD, BIDI_L }, // BOPOMOFO LETTER NGG
+ { 0x31AE, BIDI_L }, // BOPOMOFO LETTER AINN
+ { 0x31AF, BIDI_L }, // BOPOMOFO LETTER AUNN
+ { 0x31B0, BIDI_L }, // BOPOMOFO LETTER AM
+ { 0x31B1, BIDI_L }, // BOPOMOFO LETTER OM
+ { 0x31B2, BIDI_L }, // BOPOMOFO LETTER ONG
+ { 0x31B3, BIDI_L }, // BOPOMOFO LETTER INNN
+ { 0x31B4, BIDI_L }, // BOPOMOFO FINAL LETTER P
+ { 0x31B5, BIDI_L }, // BOPOMOFO FINAL LETTER T
+ { 0x31B6, BIDI_L }, // BOPOMOFO FINAL LETTER K
+ { 0x31B7, BIDI_L }, // BOPOMOFO FINAL LETTER H
+ { 0x31B8, BIDI_L }, // BOPOMOFO LETTER GH
+ { 0x31B9, BIDI_L }, // BOPOMOFO LETTER LH
+ { 0x31BA, BIDI_L }, // BOPOMOFO LETTER ZY
+ { 0x31C0, BIDI_ON }, // CJK STROKE T
+ { 0x31C1, BIDI_ON }, // CJK STROKE WG
+ { 0x31C2, BIDI_ON }, // CJK STROKE XG
+ { 0x31C3, BIDI_ON }, // CJK STROKE BXG
+ { 0x31C4, BIDI_ON }, // CJK STROKE SW
+ { 0x31C5, BIDI_ON }, // CJK STROKE HZZ
+ { 0x31C6, BIDI_ON }, // CJK STROKE HZG
+ { 0x31C7, BIDI_ON }, // CJK STROKE HP
+ { 0x31C8, BIDI_ON }, // CJK STROKE HZWG
+ { 0x31C9, BIDI_ON }, // CJK STROKE SZWG
+ { 0x31CA, BIDI_ON }, // CJK STROKE HZT
+ { 0x31CB, BIDI_ON }, // CJK STROKE HZZP
+ { 0x31CC, BIDI_ON }, // CJK STROKE HPWG
+ { 0x31CD, BIDI_ON }, // CJK STROKE HZW
+ { 0x31CE, BIDI_ON }, // CJK STROKE HZZZ
+ { 0x31CF, BIDI_ON }, // CJK STROKE N
+ { 0x31D0, BIDI_ON }, // CJK STROKE H
+ { 0x31D1, BIDI_ON }, // CJK STROKE S
+ { 0x31D2, BIDI_ON }, // CJK STROKE P
+ { 0x31D3, BIDI_ON }, // CJK STROKE SP
+ { 0x31D4, BIDI_ON }, // CJK STROKE D
+ { 0x31D5, BIDI_ON }, // CJK STROKE HZ
+ { 0x31D6, BIDI_ON }, // CJK STROKE HG
+ { 0x31D7, BIDI_ON }, // CJK STROKE SZ
+ { 0x31D8, BIDI_ON }, // CJK STROKE SWZ
+ { 0x31D9, BIDI_ON }, // CJK STROKE ST
+ { 0x31DA, BIDI_ON }, // CJK STROKE SG
+ { 0x31DB, BIDI_ON }, // CJK STROKE PD
+ { 0x31DC, BIDI_ON }, // CJK STROKE PZ
+ { 0x31DD, BIDI_ON }, // CJK STROKE TN
+ { 0x31DE, BIDI_ON }, // CJK STROKE SZZ
+ { 0x31DF, BIDI_ON }, // CJK STROKE SWG
+ { 0x31E0, BIDI_ON }, // CJK STROKE HXWG
+ { 0x31E1, BIDI_ON }, // CJK STROKE HZZZG
+ { 0x31E2, BIDI_ON }, // CJK STROKE PG
+ { 0x31E3, BIDI_ON }, // CJK STROKE Q
+ { 0x31F0, BIDI_L }, // KATAKANA LETTER SMALL KU
+ { 0x31F1, BIDI_L }, // KATAKANA LETTER SMALL SI
+ { 0x31F2, BIDI_L }, // KATAKANA LETTER SMALL SU
+ { 0x31F3, BIDI_L }, // KATAKANA LETTER SMALL TO
+ { 0x31F4, BIDI_L }, // KATAKANA LETTER SMALL NU
+ { 0x31F5, BIDI_L }, // KATAKANA LETTER SMALL HA
+ { 0x31F6, BIDI_L }, // KATAKANA LETTER SMALL HI
+ { 0x31F7, BIDI_L }, // KATAKANA LETTER SMALL HU
+ { 0x31F8, BIDI_L }, // KATAKANA LETTER SMALL HE
+ { 0x31F9, BIDI_L }, // KATAKANA LETTER SMALL HO
+ { 0x31FA, BIDI_L }, // KATAKANA LETTER SMALL MU
+ { 0x31FB, BIDI_L }, // KATAKANA LETTER SMALL RA
+ { 0x31FC, BIDI_L }, // KATAKANA LETTER SMALL RI
+ { 0x31FD, BIDI_L }, // KATAKANA LETTER SMALL RU
+ { 0x31FE, BIDI_L }, // KATAKANA LETTER SMALL RE
+ { 0x31FF, BIDI_L }, // KATAKANA LETTER SMALL RO
+ { 0x3200, BIDI_L }, // PARENTHESIZED HANGUL KIYEOK
+ { 0x3201, BIDI_L }, // PARENTHESIZED HANGUL NIEUN
+ { 0x3202, BIDI_L }, // PARENTHESIZED HANGUL TIKEUT
+ { 0x3203, BIDI_L }, // PARENTHESIZED HANGUL RIEUL
+ { 0x3204, BIDI_L }, // PARENTHESIZED HANGUL MIEUM
+ { 0x3205, BIDI_L }, // PARENTHESIZED HANGUL PIEUP
+ { 0x3206, BIDI_L }, // PARENTHESIZED HANGUL SIOS
+ { 0x3207, BIDI_L }, // PARENTHESIZED HANGUL IEUNG
+ { 0x3208, BIDI_L }, // PARENTHESIZED HANGUL CIEUC
+ { 0x3209, BIDI_L }, // PARENTHESIZED HANGUL CHIEUCH
+ { 0x320A, BIDI_L }, // PARENTHESIZED HANGUL KHIEUKH
+ { 0x320B, BIDI_L }, // PARENTHESIZED HANGUL THIEUTH
+ { 0x320C, BIDI_L }, // PARENTHESIZED HANGUL PHIEUPH
+ { 0x320D, BIDI_L }, // PARENTHESIZED HANGUL HIEUH
+ { 0x320E, BIDI_L }, // PARENTHESIZED HANGUL KIYEOK A
+ { 0x320F, BIDI_L }, // PARENTHESIZED HANGUL NIEUN A
+ { 0x3210, BIDI_L }, // PARENTHESIZED HANGUL TIKEUT A
+ { 0x3211, BIDI_L }, // PARENTHESIZED HANGUL RIEUL A
+ { 0x3212, BIDI_L }, // PARENTHESIZED HANGUL MIEUM A
+ { 0x3213, BIDI_L }, // PARENTHESIZED HANGUL PIEUP A
+ { 0x3214, BIDI_L }, // PARENTHESIZED HANGUL SIOS A
+ { 0x3215, BIDI_L }, // PARENTHESIZED HANGUL IEUNG A
+ { 0x3216, BIDI_L }, // PARENTHESIZED HANGUL CIEUC A
+ { 0x3217, BIDI_L }, // PARENTHESIZED HANGUL CHIEUCH A
+ { 0x3218, BIDI_L }, // PARENTHESIZED HANGUL KHIEUKH A
+ { 0x3219, BIDI_L }, // PARENTHESIZED HANGUL THIEUTH A
+ { 0x321A, BIDI_L }, // PARENTHESIZED HANGUL PHIEUPH A
+ { 0x321B, BIDI_L }, // PARENTHESIZED HANGUL HIEUH A
+ { 0x321C, BIDI_L }, // PARENTHESIZED HANGUL CIEUC U
+ { 0x321D, BIDI_ON }, // PARENTHESIZED KOREAN CHARACTER OJEON
+ { 0x321E, BIDI_ON }, // PARENTHESIZED KOREAN CHARACTER O HU
+ { 0x3220, BIDI_L }, // PARENTHESIZED IDEOGRAPH ONE
+ { 0x3221, BIDI_L }, // PARENTHESIZED IDEOGRAPH TWO
+ { 0x3222, BIDI_L }, // PARENTHESIZED IDEOGRAPH THREE
+ { 0x3223, BIDI_L }, // PARENTHESIZED IDEOGRAPH FOUR
+ { 0x3224, BIDI_L }, // PARENTHESIZED IDEOGRAPH FIVE
+ { 0x3225, BIDI_L }, // PARENTHESIZED IDEOGRAPH SIX
+ { 0x3226, BIDI_L }, // PARENTHESIZED IDEOGRAPH SEVEN
+ { 0x3227, BIDI_L }, // PARENTHESIZED IDEOGRAPH EIGHT
+ { 0x3228, BIDI_L }, // PARENTHESIZED IDEOGRAPH NINE
+ { 0x3229, BIDI_L }, // PARENTHESIZED IDEOGRAPH TEN
+ { 0x322A, BIDI_L }, // PARENTHESIZED IDEOGRAPH MOON
+ { 0x322B, BIDI_L }, // PARENTHESIZED IDEOGRAPH FIRE
+ { 0x322C, BIDI_L }, // PARENTHESIZED IDEOGRAPH WATER
+ { 0x322D, BIDI_L }, // PARENTHESIZED IDEOGRAPH WOOD
+ { 0x322E, BIDI_L }, // PARENTHESIZED IDEOGRAPH METAL
+ { 0x322F, BIDI_L }, // PARENTHESIZED IDEOGRAPH EARTH
+ { 0x3230, BIDI_L }, // PARENTHESIZED IDEOGRAPH SUN
+ { 0x3231, BIDI_L }, // PARENTHESIZED IDEOGRAPH STOCK
+ { 0x3232, BIDI_L }, // PARENTHESIZED IDEOGRAPH HAVE
+ { 0x3233, BIDI_L }, // PARENTHESIZED IDEOGRAPH SOCIETY
+ { 0x3234, BIDI_L }, // PARENTHESIZED IDEOGRAPH NAME
+ { 0x3235, BIDI_L }, // PARENTHESIZED IDEOGRAPH SPECIAL
+ { 0x3236, BIDI_L }, // PARENTHESIZED IDEOGRAPH FINANCIAL
+ { 0x3237, BIDI_L }, // PARENTHESIZED IDEOGRAPH CONGRATULATION
+ { 0x3238, BIDI_L }, // PARENTHESIZED IDEOGRAPH LABOR
+ { 0x3239, BIDI_L }, // PARENTHESIZED IDEOGRAPH REPRESENT
+ { 0x323A, BIDI_L }, // PARENTHESIZED IDEOGRAPH CALL
+ { 0x323B, BIDI_L }, // PARENTHESIZED IDEOGRAPH STUDY
+ { 0x323C, BIDI_L }, // PARENTHESIZED IDEOGRAPH SUPERVISE
+ { 0x323D, BIDI_L }, // PARENTHESIZED IDEOGRAPH ENTERPRISE
+ { 0x323E, BIDI_L }, // PARENTHESIZED IDEOGRAPH RESOURCE
+ { 0x323F, BIDI_L }, // PARENTHESIZED IDEOGRAPH ALLIANCE
+ { 0x3240, BIDI_L }, // PARENTHESIZED IDEOGRAPH FESTIVAL
+ { 0x3241, BIDI_L }, // PARENTHESIZED IDEOGRAPH REST
+ { 0x3242, BIDI_L }, // PARENTHESIZED IDEOGRAPH SELF
+ { 0x3243, BIDI_L }, // PARENTHESIZED IDEOGRAPH REACH
+ { 0x3244, BIDI_L }, // CIRCLED IDEOGRAPH QUESTION
+ { 0x3245, BIDI_L }, // CIRCLED IDEOGRAPH KINDERGARTEN
+ { 0x3246, BIDI_L }, // CIRCLED IDEOGRAPH SCHOOL
+ { 0x3247, BIDI_L }, // CIRCLED IDEOGRAPH KOTO
+ { 0x3248, BIDI_L }, // CIRCLED NUMBER TEN ON BLACK SQUARE
+ { 0x3249, BIDI_L }, // CIRCLED NUMBER TWENTY ON BLACK SQUARE
+ { 0x324A, BIDI_L }, // CIRCLED NUMBER THIRTY ON BLACK SQUARE
+ { 0x324B, BIDI_L }, // CIRCLED NUMBER FORTY ON BLACK SQUARE
+ { 0x324C, BIDI_L }, // CIRCLED NUMBER FIFTY ON BLACK SQUARE
+ { 0x324D, BIDI_L }, // CIRCLED NUMBER SIXTY ON BLACK SQUARE
+ { 0x324E, BIDI_L }, // CIRCLED NUMBER SEVENTY ON BLACK SQUARE
+ { 0x324F, BIDI_L }, // CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+ { 0x3250, BIDI_ON }, // PARTNERSHIP SIGN
+ { 0x3251, BIDI_ON }, // CIRCLED NUMBER TWENTY ONE
+ { 0x3252, BIDI_ON }, // CIRCLED NUMBER TWENTY TWO
+ { 0x3253, BIDI_ON }, // CIRCLED NUMBER TWENTY THREE
+ { 0x3254, BIDI_ON }, // CIRCLED NUMBER TWENTY FOUR
+ { 0x3255, BIDI_ON }, // CIRCLED NUMBER TWENTY FIVE
+ { 0x3256, BIDI_ON }, // CIRCLED NUMBER TWENTY SIX
+ { 0x3257, BIDI_ON }, // CIRCLED NUMBER TWENTY SEVEN
+ { 0x3258, BIDI_ON }, // CIRCLED NUMBER TWENTY EIGHT
+ { 0x3259, BIDI_ON }, // CIRCLED NUMBER TWENTY NINE
+ { 0x325A, BIDI_ON }, // CIRCLED NUMBER THIRTY
+ { 0x325B, BIDI_ON }, // CIRCLED NUMBER THIRTY ONE
+ { 0x325C, BIDI_ON }, // CIRCLED NUMBER THIRTY TWO
+ { 0x325D, BIDI_ON }, // CIRCLED NUMBER THIRTY THREE
+ { 0x325E, BIDI_ON }, // CIRCLED NUMBER THIRTY FOUR
+ { 0x325F, BIDI_ON }, // CIRCLED NUMBER THIRTY FIVE
+ { 0x3260, BIDI_L }, // CIRCLED HANGUL KIYEOK
+ { 0x3261, BIDI_L }, // CIRCLED HANGUL NIEUN
+ { 0x3262, BIDI_L }, // CIRCLED HANGUL TIKEUT
+ { 0x3263, BIDI_L }, // CIRCLED HANGUL RIEUL
+ { 0x3264, BIDI_L }, // CIRCLED HANGUL MIEUM
+ { 0x3265, BIDI_L }, // CIRCLED HANGUL PIEUP
+ { 0x3266, BIDI_L }, // CIRCLED HANGUL SIOS
+ { 0x3267, BIDI_L }, // CIRCLED HANGUL IEUNG
+ { 0x3268, BIDI_L }, // CIRCLED HANGUL CIEUC
+ { 0x3269, BIDI_L }, // CIRCLED HANGUL CHIEUCH
+ { 0x326A, BIDI_L }, // CIRCLED HANGUL KHIEUKH
+ { 0x326B, BIDI_L }, // CIRCLED HANGUL THIEUTH
+ { 0x326C, BIDI_L }, // CIRCLED HANGUL PHIEUPH
+ { 0x326D, BIDI_L }, // CIRCLED HANGUL HIEUH
+ { 0x326E, BIDI_L }, // CIRCLED HANGUL KIYEOK A
+ { 0x326F, BIDI_L }, // CIRCLED HANGUL NIEUN A
+ { 0x3270, BIDI_L }, // CIRCLED HANGUL TIKEUT A
+ { 0x3271, BIDI_L }, // CIRCLED HANGUL RIEUL A
+ { 0x3272, BIDI_L }, // CIRCLED HANGUL MIEUM A
+ { 0x3273, BIDI_L }, // CIRCLED HANGUL PIEUP A
+ { 0x3274, BIDI_L }, // CIRCLED HANGUL SIOS A
+ { 0x3275, BIDI_L }, // CIRCLED HANGUL IEUNG A
+ { 0x3276, BIDI_L }, // CIRCLED HANGUL CIEUC A
+ { 0x3277, BIDI_L }, // CIRCLED HANGUL CHIEUCH A
+ { 0x3278, BIDI_L }, // CIRCLED HANGUL KHIEUKH A
+ { 0x3279, BIDI_L }, // CIRCLED HANGUL THIEUTH A
+ { 0x327A, BIDI_L }, // CIRCLED HANGUL PHIEUPH A
+ { 0x327B, BIDI_L }, // CIRCLED HANGUL HIEUH A
+ { 0x327C, BIDI_ON }, // CIRCLED KOREAN CHARACTER CHAMKO
+ { 0x327D, BIDI_ON }, // CIRCLED KOREAN CHARACTER JUEUI
+ { 0x327E, BIDI_ON }, // CIRCLED HANGUL IEUNG U
+ { 0x327F, BIDI_L }, // KOREAN STANDARD SYMBOL
+ { 0x3280, BIDI_L }, // CIRCLED IDEOGRAPH ONE
+ { 0x3281, BIDI_L }, // CIRCLED IDEOGRAPH TWO
+ { 0x3282, BIDI_L }, // CIRCLED IDEOGRAPH THREE
+ { 0x3283, BIDI_L }, // CIRCLED IDEOGRAPH FOUR
+ { 0x3284, BIDI_L }, // CIRCLED IDEOGRAPH FIVE
+ { 0x3285, BIDI_L }, // CIRCLED IDEOGRAPH SIX
+ { 0x3286, BIDI_L }, // CIRCLED IDEOGRAPH SEVEN
+ { 0x3287, BIDI_L }, // CIRCLED IDEOGRAPH EIGHT
+ { 0x3288, BIDI_L }, // CIRCLED IDEOGRAPH NINE
+ { 0x3289, BIDI_L }, // CIRCLED IDEOGRAPH TEN
+ { 0x328A, BIDI_L }, // CIRCLED IDEOGRAPH MOON
+ { 0x328B, BIDI_L }, // CIRCLED IDEOGRAPH FIRE
+ { 0x328C, BIDI_L }, // CIRCLED IDEOGRAPH WATER
+ { 0x328D, BIDI_L }, // CIRCLED IDEOGRAPH WOOD
+ { 0x328E, BIDI_L }, // CIRCLED IDEOGRAPH METAL
+ { 0x328F, BIDI_L }, // CIRCLED IDEOGRAPH EARTH
+ { 0x3290, BIDI_L }, // CIRCLED IDEOGRAPH SUN
+ { 0x3291, BIDI_L }, // CIRCLED IDEOGRAPH STOCK
+ { 0x3292, BIDI_L }, // CIRCLED IDEOGRAPH HAVE
+ { 0x3293, BIDI_L }, // CIRCLED IDEOGRAPH SOCIETY
+ { 0x3294, BIDI_L }, // CIRCLED IDEOGRAPH NAME
+ { 0x3295, BIDI_L }, // CIRCLED IDEOGRAPH SPECIAL
+ { 0x3296, BIDI_L }, // CIRCLED IDEOGRAPH FINANCIAL
+ { 0x3297, BIDI_L }, // CIRCLED IDEOGRAPH CONGRATULATION
+ { 0x3298, BIDI_L }, // CIRCLED IDEOGRAPH LABOR
+ { 0x3299, BIDI_L }, // CIRCLED IDEOGRAPH SECRET
+ { 0x329A, BIDI_L }, // CIRCLED IDEOGRAPH MALE
+ { 0x329B, BIDI_L }, // CIRCLED IDEOGRAPH FEMALE
+ { 0x329C, BIDI_L }, // CIRCLED IDEOGRAPH SUITABLE
+ { 0x329D, BIDI_L }, // CIRCLED IDEOGRAPH EXCELLENT
+ { 0x329E, BIDI_L }, // CIRCLED IDEOGRAPH PRINT
+ { 0x329F, BIDI_L }, // CIRCLED IDEOGRAPH ATTENTION
+ { 0x32A0, BIDI_L }, // CIRCLED IDEOGRAPH ITEM
+ { 0x32A1, BIDI_L }, // CIRCLED IDEOGRAPH REST
+ { 0x32A2, BIDI_L }, // CIRCLED IDEOGRAPH COPY
+ { 0x32A3, BIDI_L }, // CIRCLED IDEOGRAPH CORRECT
+ { 0x32A4, BIDI_L }, // CIRCLED IDEOGRAPH HIGH
+ { 0x32A5, BIDI_L }, // CIRCLED IDEOGRAPH CENTRE
+ { 0x32A6, BIDI_L }, // CIRCLED IDEOGRAPH LOW
+ { 0x32A7, BIDI_L }, // CIRCLED IDEOGRAPH LEFT
+ { 0x32A8, BIDI_L }, // CIRCLED IDEOGRAPH RIGHT
+ { 0x32A9, BIDI_L }, // CIRCLED IDEOGRAPH MEDICINE
+ { 0x32AA, BIDI_L }, // CIRCLED IDEOGRAPH RELIGION
+ { 0x32AB, BIDI_L }, // CIRCLED IDEOGRAPH STUDY
+ { 0x32AC, BIDI_L }, // CIRCLED IDEOGRAPH SUPERVISE
+ { 0x32AD, BIDI_L }, // CIRCLED IDEOGRAPH ENTERPRISE
+ { 0x32AE, BIDI_L }, // CIRCLED IDEOGRAPH RESOURCE
+ { 0x32AF, BIDI_L }, // CIRCLED IDEOGRAPH ALLIANCE
+ { 0x32B0, BIDI_L }, // CIRCLED IDEOGRAPH NIGHT
+ { 0x32B1, BIDI_ON }, // CIRCLED NUMBER THIRTY SIX
+ { 0x32B2, BIDI_ON }, // CIRCLED NUMBER THIRTY SEVEN
+ { 0x32B3, BIDI_ON }, // CIRCLED NUMBER THIRTY EIGHT
+ { 0x32B4, BIDI_ON }, // CIRCLED NUMBER THIRTY NINE
+ { 0x32B5, BIDI_ON }, // CIRCLED NUMBER FORTY
+ { 0x32B6, BIDI_ON }, // CIRCLED NUMBER FORTY ONE
+ { 0x32B7, BIDI_ON }, // CIRCLED NUMBER FORTY TWO
+ { 0x32B8, BIDI_ON }, // CIRCLED NUMBER FORTY THREE
+ { 0x32B9, BIDI_ON }, // CIRCLED NUMBER FORTY FOUR
+ { 0x32BA, BIDI_ON }, // CIRCLED NUMBER FORTY FIVE
+ { 0x32BB, BIDI_ON }, // CIRCLED NUMBER FORTY SIX
+ { 0x32BC, BIDI_ON }, // CIRCLED NUMBER FORTY SEVEN
+ { 0x32BD, BIDI_ON }, // CIRCLED NUMBER FORTY EIGHT
+ { 0x32BE, BIDI_ON }, // CIRCLED NUMBER FORTY NINE
+ { 0x32BF, BIDI_ON }, // CIRCLED NUMBER FIFTY
+ { 0x32C0, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY
+ { 0x32C1, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY
+ { 0x32C2, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH
+ { 0x32C3, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL
+ { 0x32C4, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY
+ { 0x32C5, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE
+ { 0x32C6, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY
+ { 0x32C7, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST
+ { 0x32C8, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER
+ { 0x32C9, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER
+ { 0x32CA, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER
+ { 0x32CB, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+ { 0x32CC, BIDI_ON }, // SQUARE HG
+ { 0x32CD, BIDI_ON }, // SQUARE ERG
+ { 0x32CE, BIDI_ON }, // SQUARE EV
+ { 0x32CF, BIDI_ON }, // LIMITED LIABILITY SIGN
+ { 0x32D0, BIDI_L }, // CIRCLED KATAKANA A
+ { 0x32D1, BIDI_L }, // CIRCLED KATAKANA I
+ { 0x32D2, BIDI_L }, // CIRCLED KATAKANA U
+ { 0x32D3, BIDI_L }, // CIRCLED KATAKANA E
+ { 0x32D4, BIDI_L }, // CIRCLED KATAKANA O
+ { 0x32D5, BIDI_L }, // CIRCLED KATAKANA KA
+ { 0x32D6, BIDI_L }, // CIRCLED KATAKANA KI
+ { 0x32D7, BIDI_L }, // CIRCLED KATAKANA KU
+ { 0x32D8, BIDI_L }, // CIRCLED KATAKANA KE
+ { 0x32D9, BIDI_L }, // CIRCLED KATAKANA KO
+ { 0x32DA, BIDI_L }, // CIRCLED KATAKANA SA
+ { 0x32DB, BIDI_L }, // CIRCLED KATAKANA SI
+ { 0x32DC, BIDI_L }, // CIRCLED KATAKANA SU
+ { 0x32DD, BIDI_L }, // CIRCLED KATAKANA SE
+ { 0x32DE, BIDI_L }, // CIRCLED KATAKANA SO
+ { 0x32DF, BIDI_L }, // CIRCLED KATAKANA TA
+ { 0x32E0, BIDI_L }, // CIRCLED KATAKANA TI
+ { 0x32E1, BIDI_L }, // CIRCLED KATAKANA TU
+ { 0x32E2, BIDI_L }, // CIRCLED KATAKANA TE
+ { 0x32E3, BIDI_L }, // CIRCLED KATAKANA TO
+ { 0x32E4, BIDI_L }, // CIRCLED KATAKANA NA
+ { 0x32E5, BIDI_L }, // CIRCLED KATAKANA NI
+ { 0x32E6, BIDI_L }, // CIRCLED KATAKANA NU
+ { 0x32E7, BIDI_L }, // CIRCLED KATAKANA NE
+ { 0x32E8, BIDI_L }, // CIRCLED KATAKANA NO
+ { 0x32E9, BIDI_L }, // CIRCLED KATAKANA HA
+ { 0x32EA, BIDI_L }, // CIRCLED KATAKANA HI
+ { 0x32EB, BIDI_L }, // CIRCLED KATAKANA HU
+ { 0x32EC, BIDI_L }, // CIRCLED KATAKANA HE
+ { 0x32ED, BIDI_L }, // CIRCLED KATAKANA HO
+ { 0x32EE, BIDI_L }, // CIRCLED KATAKANA MA
+ { 0x32EF, BIDI_L }, // CIRCLED KATAKANA MI
+ { 0x32F0, BIDI_L }, // CIRCLED KATAKANA MU
+ { 0x32F1, BIDI_L }, // CIRCLED KATAKANA ME
+ { 0x32F2, BIDI_L }, // CIRCLED KATAKANA MO
+ { 0x32F3, BIDI_L }, // CIRCLED KATAKANA YA
+ { 0x32F4, BIDI_L }, // CIRCLED KATAKANA YU
+ { 0x32F5, BIDI_L }, // CIRCLED KATAKANA YO
+ { 0x32F6, BIDI_L }, // CIRCLED KATAKANA RA
+ { 0x32F7, BIDI_L }, // CIRCLED KATAKANA RI
+ { 0x32F8, BIDI_L }, // CIRCLED KATAKANA RU
+ { 0x32F9, BIDI_L }, // CIRCLED KATAKANA RE
+ { 0x32FA, BIDI_L }, // CIRCLED KATAKANA RO
+ { 0x32FB, BIDI_L }, // CIRCLED KATAKANA WA
+ { 0x32FC, BIDI_L }, // CIRCLED KATAKANA WI
+ { 0x32FD, BIDI_L }, // CIRCLED KATAKANA WE
+ { 0x32FE, BIDI_L }, // CIRCLED KATAKANA WO
+ { 0x3300, BIDI_L }, // SQUARE APAATO
+ { 0x3301, BIDI_L }, // SQUARE ARUHUA
+ { 0x3302, BIDI_L }, // SQUARE ANPEA
+ { 0x3303, BIDI_L }, // SQUARE AARU
+ { 0x3304, BIDI_L }, // SQUARE ININGU
+ { 0x3305, BIDI_L }, // SQUARE INTI
+ { 0x3306, BIDI_L }, // SQUARE UON
+ { 0x3307, BIDI_L }, // SQUARE ESUKUUDO
+ { 0x3308, BIDI_L }, // SQUARE EEKAA
+ { 0x3309, BIDI_L }, // SQUARE ONSU
+ { 0x330A, BIDI_L }, // SQUARE OOMU
+ { 0x330B, BIDI_L }, // SQUARE KAIRI
+ { 0x330C, BIDI_L }, // SQUARE KARATTO
+ { 0x330D, BIDI_L }, // SQUARE KARORII
+ { 0x330E, BIDI_L }, // SQUARE GARON
+ { 0x330F, BIDI_L }, // SQUARE GANMA
+ { 0x3310, BIDI_L }, // SQUARE GIGA
+ { 0x3311, BIDI_L }, // SQUARE GINII
+ { 0x3312, BIDI_L }, // SQUARE KYURII
+ { 0x3313, BIDI_L }, // SQUARE GIRUDAA
+ { 0x3314, BIDI_L }, // SQUARE KIRO
+ { 0x3315, BIDI_L }, // SQUARE KIROGURAMU
+ { 0x3316, BIDI_L }, // SQUARE KIROMEETORU
+ { 0x3317, BIDI_L }, // SQUARE KIROWATTO
+ { 0x3318, BIDI_L }, // SQUARE GURAMU
+ { 0x3319, BIDI_L }, // SQUARE GURAMUTON
+ { 0x331A, BIDI_L }, // SQUARE KURUZEIRO
+ { 0x331B, BIDI_L }, // SQUARE KUROONE
+ { 0x331C, BIDI_L }, // SQUARE KEESU
+ { 0x331D, BIDI_L }, // SQUARE KORUNA
+ { 0x331E, BIDI_L }, // SQUARE KOOPO
+ { 0x331F, BIDI_L }, // SQUARE SAIKURU
+ { 0x3320, BIDI_L }, // SQUARE SANTIIMU
+ { 0x3321, BIDI_L }, // SQUARE SIRINGU
+ { 0x3322, BIDI_L }, // SQUARE SENTI
+ { 0x3323, BIDI_L }, // SQUARE SENTO
+ { 0x3324, BIDI_L }, // SQUARE DAASU
+ { 0x3325, BIDI_L }, // SQUARE DESI
+ { 0x3326, BIDI_L }, // SQUARE DORU
+ { 0x3327, BIDI_L }, // SQUARE TON
+ { 0x3328, BIDI_L }, // SQUARE NANO
+ { 0x3329, BIDI_L }, // SQUARE NOTTO
+ { 0x332A, BIDI_L }, // SQUARE HAITU
+ { 0x332B, BIDI_L }, // SQUARE PAASENTO
+ { 0x332C, BIDI_L }, // SQUARE PAATU
+ { 0x332D, BIDI_L }, // SQUARE BAARERU
+ { 0x332E, BIDI_L }, // SQUARE PIASUTORU
+ { 0x332F, BIDI_L }, // SQUARE PIKURU
+ { 0x3330, BIDI_L }, // SQUARE PIKO
+ { 0x3331, BIDI_L }, // SQUARE BIRU
+ { 0x3332, BIDI_L }, // SQUARE HUARADDO
+ { 0x3333, BIDI_L }, // SQUARE HUIITO
+ { 0x3334, BIDI_L }, // SQUARE BUSSYERU
+ { 0x3335, BIDI_L }, // SQUARE HURAN
+ { 0x3336, BIDI_L }, // SQUARE HEKUTAARU
+ { 0x3337, BIDI_L }, // SQUARE PESO
+ { 0x3338, BIDI_L }, // SQUARE PENIHI
+ { 0x3339, BIDI_L }, // SQUARE HERUTU
+ { 0x333A, BIDI_L }, // SQUARE PENSU
+ { 0x333B, BIDI_L }, // SQUARE PEEZI
+ { 0x333C, BIDI_L }, // SQUARE BEETA
+ { 0x333D, BIDI_L }, // SQUARE POINTO
+ { 0x333E, BIDI_L }, // SQUARE BORUTO
+ { 0x333F, BIDI_L }, // SQUARE HON
+ { 0x3340, BIDI_L }, // SQUARE PONDO
+ { 0x3341, BIDI_L }, // SQUARE HOORU
+ { 0x3342, BIDI_L }, // SQUARE HOON
+ { 0x3343, BIDI_L }, // SQUARE MAIKURO
+ { 0x3344, BIDI_L }, // SQUARE MAIRU
+ { 0x3345, BIDI_L }, // SQUARE MAHHA
+ { 0x3346, BIDI_L }, // SQUARE MARUKU
+ { 0x3347, BIDI_L }, // SQUARE MANSYON
+ { 0x3348, BIDI_L }, // SQUARE MIKURON
+ { 0x3349, BIDI_L }, // SQUARE MIRI
+ { 0x334A, BIDI_L }, // SQUARE MIRIBAARU
+ { 0x334B, BIDI_L }, // SQUARE MEGA
+ { 0x334C, BIDI_L }, // SQUARE MEGATON
+ { 0x334D, BIDI_L }, // SQUARE MEETORU
+ { 0x334E, BIDI_L }, // SQUARE YAADO
+ { 0x334F, BIDI_L }, // SQUARE YAARU
+ { 0x3350, BIDI_L }, // SQUARE YUAN
+ { 0x3351, BIDI_L }, // SQUARE RITTORU
+ { 0x3352, BIDI_L }, // SQUARE RIRA
+ { 0x3353, BIDI_L }, // SQUARE RUPII
+ { 0x3354, BIDI_L }, // SQUARE RUUBURU
+ { 0x3355, BIDI_L }, // SQUARE REMU
+ { 0x3356, BIDI_L }, // SQUARE RENTOGEN
+ { 0x3357, BIDI_L }, // SQUARE WATTO
+ { 0x3358, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO
+ { 0x3359, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE
+ { 0x335A, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO
+ { 0x335B, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE
+ { 0x335C, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR
+ { 0x335D, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE
+ { 0x335E, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX
+ { 0x335F, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN
+ { 0x3360, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT
+ { 0x3361, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE
+ { 0x3362, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN
+ { 0x3363, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN
+ { 0x3364, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE
+ { 0x3365, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN
+ { 0x3366, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN
+ { 0x3367, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN
+ { 0x3368, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN
+ { 0x3369, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN
+ { 0x336A, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN
+ { 0x336B, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN
+ { 0x336C, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY
+ { 0x336D, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE
+ { 0x336E, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO
+ { 0x336F, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE
+ { 0x3370, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR
+ { 0x3371, BIDI_L }, // SQUARE HPA
+ { 0x3372, BIDI_L }, // SQUARE DA
+ { 0x3373, BIDI_L }, // SQUARE AU
+ { 0x3374, BIDI_L }, // SQUARE BAR
+ { 0x3375, BIDI_L }, // SQUARE OV
+ { 0x3376, BIDI_L }, // SQUARE PC
+ { 0x3377, BIDI_ON }, // SQUARE DM
+ { 0x3378, BIDI_ON }, // SQUARE DM SQUARED
+ { 0x3379, BIDI_ON }, // SQUARE DM CUBED
+ { 0x337A, BIDI_ON }, // SQUARE IU
+ { 0x337B, BIDI_L }, // SQUARE ERA NAME HEISEI
+ { 0x337C, BIDI_L }, // SQUARE ERA NAME SYOUWA
+ { 0x337D, BIDI_L }, // SQUARE ERA NAME TAISYOU
+ { 0x337E, BIDI_L }, // SQUARE ERA NAME MEIZI
+ { 0x337F, BIDI_L }, // SQUARE CORPORATION
+ { 0x3380, BIDI_L }, // SQUARE PA AMPS
+ { 0x3381, BIDI_L }, // SQUARE NA
+ { 0x3382, BIDI_L }, // SQUARE MU A
+ { 0x3383, BIDI_L }, // SQUARE MA
+ { 0x3384, BIDI_L }, // SQUARE KA
+ { 0x3385, BIDI_L }, // SQUARE KB
+ { 0x3386, BIDI_L }, // SQUARE MB
+ { 0x3387, BIDI_L }, // SQUARE GB
+ { 0x3388, BIDI_L }, // SQUARE CAL
+ { 0x3389, BIDI_L }, // SQUARE KCAL
+ { 0x338A, BIDI_L }, // SQUARE PF
+ { 0x338B, BIDI_L }, // SQUARE NF
+ { 0x338C, BIDI_L }, // SQUARE MU F
+ { 0x338D, BIDI_L }, // SQUARE MU G
+ { 0x338E, BIDI_L }, // SQUARE MG
+ { 0x338F, BIDI_L }, // SQUARE KG
+ { 0x3390, BIDI_L }, // SQUARE HZ
+ { 0x3391, BIDI_L }, // SQUARE KHZ
+ { 0x3392, BIDI_L }, // SQUARE MHZ
+ { 0x3393, BIDI_L }, // SQUARE GHZ
+ { 0x3394, BIDI_L }, // SQUARE THZ
+ { 0x3395, BIDI_L }, // SQUARE MU L
+ { 0x3396, BIDI_L }, // SQUARE ML
+ { 0x3397, BIDI_L }, // SQUARE DL
+ { 0x3398, BIDI_L }, // SQUARE KL
+ { 0x3399, BIDI_L }, // SQUARE FM
+ { 0x339A, BIDI_L }, // SQUARE NM
+ { 0x339B, BIDI_L }, // SQUARE MU M
+ { 0x339C, BIDI_L }, // SQUARE MM
+ { 0x339D, BIDI_L }, // SQUARE CM
+ { 0x339E, BIDI_L }, // SQUARE KM
+ { 0x339F, BIDI_L }, // SQUARE MM SQUARED
+ { 0x33A0, BIDI_L }, // SQUARE CM SQUARED
+ { 0x33A1, BIDI_L }, // SQUARE M SQUARED
+ { 0x33A2, BIDI_L }, // SQUARE KM SQUARED
+ { 0x33A3, BIDI_L }, // SQUARE MM CUBED
+ { 0x33A4, BIDI_L }, // SQUARE CM CUBED
+ { 0x33A5, BIDI_L }, // SQUARE M CUBED
+ { 0x33A6, BIDI_L }, // SQUARE KM CUBED
+ { 0x33A7, BIDI_L }, // SQUARE M OVER S
+ { 0x33A8, BIDI_L }, // SQUARE M OVER S SQUARED
+ { 0x33A9, BIDI_L }, // SQUARE PA
+ { 0x33AA, BIDI_L }, // SQUARE KPA
+ { 0x33AB, BIDI_L }, // SQUARE MPA
+ { 0x33AC, BIDI_L }, // SQUARE GPA
+ { 0x33AD, BIDI_L }, // SQUARE RAD
+ { 0x33AE, BIDI_L }, // SQUARE RAD OVER S
+ { 0x33AF, BIDI_L }, // SQUARE RAD OVER S SQUARED
+ { 0x33B0, BIDI_L }, // SQUARE PS
+ { 0x33B1, BIDI_L }, // SQUARE NS
+ { 0x33B2, BIDI_L }, // SQUARE MU S
+ { 0x33B3, BIDI_L }, // SQUARE MS
+ { 0x33B4, BIDI_L }, // SQUARE PV
+ { 0x33B5, BIDI_L }, // SQUARE NV
+ { 0x33B6, BIDI_L }, // SQUARE MU V
+ { 0x33B7, BIDI_L }, // SQUARE MV
+ { 0x33B8, BIDI_L }, // SQUARE KV
+ { 0x33B9, BIDI_L }, // SQUARE MV MEGA
+ { 0x33BA, BIDI_L }, // SQUARE PW
+ { 0x33BB, BIDI_L }, // SQUARE NW
+ { 0x33BC, BIDI_L }, // SQUARE MU W
+ { 0x33BD, BIDI_L }, // SQUARE MW
+ { 0x33BE, BIDI_L }, // SQUARE KW
+ { 0x33BF, BIDI_L }, // SQUARE MW MEGA
+ { 0x33C0, BIDI_L }, // SQUARE K OHM
+ { 0x33C1, BIDI_L }, // SQUARE M OHM
+ { 0x33C2, BIDI_L }, // SQUARE AM
+ { 0x33C3, BIDI_L }, // SQUARE BQ
+ { 0x33C4, BIDI_L }, // SQUARE CC
+ { 0x33C5, BIDI_L }, // SQUARE CD
+ { 0x33C6, BIDI_L }, // SQUARE C OVER KG
+ { 0x33C7, BIDI_L }, // SQUARE CO
+ { 0x33C8, BIDI_L }, // SQUARE DB
+ { 0x33C9, BIDI_L }, // SQUARE GY
+ { 0x33CA, BIDI_L }, // SQUARE HA
+ { 0x33CB, BIDI_L }, // SQUARE HP
+ { 0x33CC, BIDI_L }, // SQUARE IN
+ { 0x33CD, BIDI_L }, // SQUARE KK
+ { 0x33CE, BIDI_L }, // SQUARE KM CAPITAL
+ { 0x33CF, BIDI_L }, // SQUARE KT
+ { 0x33D0, BIDI_L }, // SQUARE LM
+ { 0x33D1, BIDI_L }, // SQUARE LN
+ { 0x33D2, BIDI_L }, // SQUARE LOG
+ { 0x33D3, BIDI_L }, // SQUARE LX
+ { 0x33D4, BIDI_L }, // SQUARE MB SMALL
+ { 0x33D5, BIDI_L }, // SQUARE MIL
+ { 0x33D6, BIDI_L }, // SQUARE MOL
+ { 0x33D7, BIDI_L }, // SQUARE PH
+ { 0x33D8, BIDI_L }, // SQUARE PM
+ { 0x33D9, BIDI_L }, // SQUARE PPM
+ { 0x33DA, BIDI_L }, // SQUARE PR
+ { 0x33DB, BIDI_L }, // SQUARE SR
+ { 0x33DC, BIDI_L }, // SQUARE SV
+ { 0x33DD, BIDI_L }, // SQUARE WB
+ { 0x33DE, BIDI_ON }, // SQUARE V OVER M
+ { 0x33DF, BIDI_ON }, // SQUARE A OVER M
+ { 0x33E0, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE
+ { 0x33E1, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO
+ { 0x33E2, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE
+ { 0x33E3, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR
+ { 0x33E4, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE
+ { 0x33E5, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX
+ { 0x33E6, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN
+ { 0x33E7, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT
+ { 0x33E8, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE
+ { 0x33E9, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN
+ { 0x33EA, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN
+ { 0x33EB, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE
+ { 0x33EC, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN
+ { 0x33ED, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN
+ { 0x33EE, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN
+ { 0x33EF, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN
+ { 0x33F0, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN
+ { 0x33F1, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN
+ { 0x33F2, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN
+ { 0x33F3, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY
+ { 0x33F4, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE
+ { 0x33F5, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO
+ { 0x33F6, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE
+ { 0x33F7, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR
+ { 0x33F8, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE
+ { 0x33F9, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX
+ { 0x33FA, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN
+ { 0x33FB, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT
+ { 0x33FC, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE
+ { 0x33FD, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY
+ { 0x33FE, BIDI_L }, // IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+ { 0x33FF, BIDI_ON }, // SQUARE GAL
+ //{ 0x3400, BIDI_L }, // <CJK Ideograph Extension A, First>
+ //{ 0x4DB5, BIDI_L }, // <CJK Ideograph Extension A, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_4 == 1)
+
+ { 0x4DC0, BIDI_ON }, // HEXAGRAM FOR THE CREATIVE HEAVEN
+ { 0x4DC1, BIDI_ON }, // HEXAGRAM FOR THE RECEPTIVE EARTH
+ { 0x4DC2, BIDI_ON }, // HEXAGRAM FOR DIFFICULTY AT THE BEGINNING
+ { 0x4DC3, BIDI_ON }, // HEXAGRAM FOR YOUTHFUL FOLLY
+ { 0x4DC4, BIDI_ON }, // HEXAGRAM FOR WAITING
+ { 0x4DC5, BIDI_ON }, // HEXAGRAM FOR CONFLICT
+ { 0x4DC6, BIDI_ON }, // HEXAGRAM FOR THE ARMY
+ { 0x4DC7, BIDI_ON }, // HEXAGRAM FOR HOLDING TOGETHER
+ { 0x4DC8, BIDI_ON }, // HEXAGRAM FOR SMALL TAMING
+ { 0x4DC9, BIDI_ON }, // HEXAGRAM FOR TREADING
+ { 0x4DCA, BIDI_ON }, // HEXAGRAM FOR PEACE
+ { 0x4DCB, BIDI_ON }, // HEXAGRAM FOR STANDSTILL
+ { 0x4DCC, BIDI_ON }, // HEXAGRAM FOR FELLOWSHIP
+ { 0x4DCD, BIDI_ON }, // HEXAGRAM FOR GREAT POSSESSION
+ { 0x4DCE, BIDI_ON }, // HEXAGRAM FOR MODESTY
+ { 0x4DCF, BIDI_ON }, // HEXAGRAM FOR ENTHUSIASM
+ { 0x4DD0, BIDI_ON }, // HEXAGRAM FOR FOLLOWING
+ { 0x4DD1, BIDI_ON }, // HEXAGRAM FOR WORK ON THE DECAYED
+ { 0x4DD2, BIDI_ON }, // HEXAGRAM FOR APPROACH
+ { 0x4DD3, BIDI_ON }, // HEXAGRAM FOR CONTEMPLATION
+ { 0x4DD4, BIDI_ON }, // HEXAGRAM FOR BITING THROUGH
+ { 0x4DD5, BIDI_ON }, // HEXAGRAM FOR GRACE
+ { 0x4DD6, BIDI_ON }, // HEXAGRAM FOR SPLITTING APART
+ { 0x4DD7, BIDI_ON }, // HEXAGRAM FOR RETURN
+ { 0x4DD8, BIDI_ON }, // HEXAGRAM FOR INNOCENCE
+ { 0x4DD9, BIDI_ON }, // HEXAGRAM FOR GREAT TAMING
+ { 0x4DDA, BIDI_ON }, // HEXAGRAM FOR MOUTH CORNERS
+ { 0x4DDB, BIDI_ON }, // HEXAGRAM FOR GREAT PREPONDERANCE
+ { 0x4DDC, BIDI_ON }, // HEXAGRAM FOR THE ABYSMAL WATER
+ { 0x4DDD, BIDI_ON }, // HEXAGRAM FOR THE CLINGING FIRE
+ { 0x4DDE, BIDI_ON }, // HEXAGRAM FOR INFLUENCE
+ { 0x4DDF, BIDI_ON }, // HEXAGRAM FOR DURATION
+ { 0x4DE0, BIDI_ON }, // HEXAGRAM FOR RETREAT
+ { 0x4DE1, BIDI_ON }, // HEXAGRAM FOR GREAT POWER
+ { 0x4DE2, BIDI_ON }, // HEXAGRAM FOR PROGRESS
+ { 0x4DE3, BIDI_ON }, // HEXAGRAM FOR DARKENING OF THE LIGHT
+ { 0x4DE4, BIDI_ON }, // HEXAGRAM FOR THE FAMILY
+ { 0x4DE5, BIDI_ON }, // HEXAGRAM FOR OPPOSITION
+ { 0x4DE6, BIDI_ON }, // HEXAGRAM FOR OBSTRUCTION
+ { 0x4DE7, BIDI_ON }, // HEXAGRAM FOR DELIVERANCE
+ { 0x4DE8, BIDI_ON }, // HEXAGRAM FOR DECREASE
+ { 0x4DE9, BIDI_ON }, // HEXAGRAM FOR INCREASE
+ { 0x4DEA, BIDI_ON }, // HEXAGRAM FOR BREAKTHROUGH
+ { 0x4DEB, BIDI_ON }, // HEXAGRAM FOR COMING TO MEET
+ { 0x4DEC, BIDI_ON }, // HEXAGRAM FOR GATHERING TOGETHER
+ { 0x4DED, BIDI_ON }, // HEXAGRAM FOR PUSHING UPWARD
+ { 0x4DEE, BIDI_ON }, // HEXAGRAM FOR OPPRESSION
+ { 0x4DEF, BIDI_ON }, // HEXAGRAM FOR THE WELL
+ { 0x4DF0, BIDI_ON }, // HEXAGRAM FOR REVOLUTION
+ { 0x4DF1, BIDI_ON }, // HEXAGRAM FOR THE CAULDRON
+ { 0x4DF2, BIDI_ON }, // HEXAGRAM FOR THE AROUSING THUNDER
+ { 0x4DF3, BIDI_ON }, // HEXAGRAM FOR THE KEEPING STILL MOUNTAIN
+ { 0x4DF4, BIDI_ON }, // HEXAGRAM FOR DEVELOPMENT
+ { 0x4DF5, BIDI_ON }, // HEXAGRAM FOR THE MARRYING MAIDEN
+ { 0x4DF6, BIDI_ON }, // HEXAGRAM FOR ABUNDANCE
+ { 0x4DF7, BIDI_ON }, // HEXAGRAM FOR THE WANDERER
+ { 0x4DF8, BIDI_ON }, // HEXAGRAM FOR THE GENTLE WIND
+ { 0x4DF9, BIDI_ON }, // HEXAGRAM FOR THE JOYOUS LAKE
+ { 0x4DFA, BIDI_ON }, // HEXAGRAM FOR DISPERSION
+ { 0x4DFB, BIDI_ON }, // HEXAGRAM FOR LIMITATION
+ { 0x4DFC, BIDI_ON }, // HEXAGRAM FOR INNER TRUTH
+ { 0x4DFD, BIDI_ON }, // HEXAGRAM FOR SMALL PREPONDERANCE
+ { 0x4DFE, BIDI_ON }, // HEXAGRAM FOR AFTER COMPLETION
+ { 0x4DFF, BIDI_ON }, // HEXAGRAM FOR BEFORE COMPLETION
+ //{ 0x4E00, BIDI_L }, // <CJK Ideograph, First>
+ //{ 0x9FD5, BIDI_L }, // <CJK Ideograph, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_A == 1)
+
+ { 0xA000, BIDI_L }, // YI SYLLABLE IT
+ { 0xA001, BIDI_L }, // YI SYLLABLE IX
+ { 0xA002, BIDI_L }, // YI SYLLABLE I
+ { 0xA003, BIDI_L }, // YI SYLLABLE IP
+ { 0xA004, BIDI_L }, // YI SYLLABLE IET
+ { 0xA005, BIDI_L }, // YI SYLLABLE IEX
+ { 0xA006, BIDI_L }, // YI SYLLABLE IE
+ { 0xA007, BIDI_L }, // YI SYLLABLE IEP
+ { 0xA008, BIDI_L }, // YI SYLLABLE AT
+ { 0xA009, BIDI_L }, // YI SYLLABLE AX
+ { 0xA00A, BIDI_L }, // YI SYLLABLE A
+ { 0xA00B, BIDI_L }, // YI SYLLABLE AP
+ { 0xA00C, BIDI_L }, // YI SYLLABLE UOX
+ { 0xA00D, BIDI_L }, // YI SYLLABLE UO
+ { 0xA00E, BIDI_L }, // YI SYLLABLE UOP
+ { 0xA00F, BIDI_L }, // YI SYLLABLE OT
+ { 0xA010, BIDI_L }, // YI SYLLABLE OX
+ { 0xA011, BIDI_L }, // YI SYLLABLE O
+ { 0xA012, BIDI_L }, // YI SYLLABLE OP
+ { 0xA013, BIDI_L }, // YI SYLLABLE EX
+ { 0xA014, BIDI_L }, // YI SYLLABLE E
+ { 0xA015, BIDI_L }, // YI SYLLABLE WU
+ { 0xA016, BIDI_L }, // YI SYLLABLE BIT
+ { 0xA017, BIDI_L }, // YI SYLLABLE BIX
+ { 0xA018, BIDI_L }, // YI SYLLABLE BI
+ { 0xA019, BIDI_L }, // YI SYLLABLE BIP
+ { 0xA01A, BIDI_L }, // YI SYLLABLE BIET
+ { 0xA01B, BIDI_L }, // YI SYLLABLE BIEX
+ { 0xA01C, BIDI_L }, // YI SYLLABLE BIE
+ { 0xA01D, BIDI_L }, // YI SYLLABLE BIEP
+ { 0xA01E, BIDI_L }, // YI SYLLABLE BAT
+ { 0xA01F, BIDI_L }, // YI SYLLABLE BAX
+ { 0xA020, BIDI_L }, // YI SYLLABLE BA
+ { 0xA021, BIDI_L }, // YI SYLLABLE BAP
+ { 0xA022, BIDI_L }, // YI SYLLABLE BUOX
+ { 0xA023, BIDI_L }, // YI SYLLABLE BUO
+ { 0xA024, BIDI_L }, // YI SYLLABLE BUOP
+ { 0xA025, BIDI_L }, // YI SYLLABLE BOT
+ { 0xA026, BIDI_L }, // YI SYLLABLE BOX
+ { 0xA027, BIDI_L }, // YI SYLLABLE BO
+ { 0xA028, BIDI_L }, // YI SYLLABLE BOP
+ { 0xA029, BIDI_L }, // YI SYLLABLE BEX
+ { 0xA02A, BIDI_L }, // YI SYLLABLE BE
+ { 0xA02B, BIDI_L }, // YI SYLLABLE BEP
+ { 0xA02C, BIDI_L }, // YI SYLLABLE BUT
+ { 0xA02D, BIDI_L }, // YI SYLLABLE BUX
+ { 0xA02E, BIDI_L }, // YI SYLLABLE BU
+ { 0xA02F, BIDI_L }, // YI SYLLABLE BUP
+ { 0xA030, BIDI_L }, // YI SYLLABLE BURX
+ { 0xA031, BIDI_L }, // YI SYLLABLE BUR
+ { 0xA032, BIDI_L }, // YI SYLLABLE BYT
+ { 0xA033, BIDI_L }, // YI SYLLABLE BYX
+ { 0xA034, BIDI_L }, // YI SYLLABLE BY
+ { 0xA035, BIDI_L }, // YI SYLLABLE BYP
+ { 0xA036, BIDI_L }, // YI SYLLABLE BYRX
+ { 0xA037, BIDI_L }, // YI SYLLABLE BYR
+ { 0xA038, BIDI_L }, // YI SYLLABLE PIT
+ { 0xA039, BIDI_L }, // YI SYLLABLE PIX
+ { 0xA03A, BIDI_L }, // YI SYLLABLE PI
+ { 0xA03B, BIDI_L }, // YI SYLLABLE PIP
+ { 0xA03C, BIDI_L }, // YI SYLLABLE PIEX
+ { 0xA03D, BIDI_L }, // YI SYLLABLE PIE
+ { 0xA03E, BIDI_L }, // YI SYLLABLE PIEP
+ { 0xA03F, BIDI_L }, // YI SYLLABLE PAT
+ { 0xA040, BIDI_L }, // YI SYLLABLE PAX
+ { 0xA041, BIDI_L }, // YI SYLLABLE PA
+ { 0xA042, BIDI_L }, // YI SYLLABLE PAP
+ { 0xA043, BIDI_L }, // YI SYLLABLE PUOX
+ { 0xA044, BIDI_L }, // YI SYLLABLE PUO
+ { 0xA045, BIDI_L }, // YI SYLLABLE PUOP
+ { 0xA046, BIDI_L }, // YI SYLLABLE POT
+ { 0xA047, BIDI_L }, // YI SYLLABLE POX
+ { 0xA048, BIDI_L }, // YI SYLLABLE PO
+ { 0xA049, BIDI_L }, // YI SYLLABLE POP
+ { 0xA04A, BIDI_L }, // YI SYLLABLE PUT
+ { 0xA04B, BIDI_L }, // YI SYLLABLE PUX
+ { 0xA04C, BIDI_L }, // YI SYLLABLE PU
+ { 0xA04D, BIDI_L }, // YI SYLLABLE PUP
+ { 0xA04E, BIDI_L }, // YI SYLLABLE PURX
+ { 0xA04F, BIDI_L }, // YI SYLLABLE PUR
+ { 0xA050, BIDI_L }, // YI SYLLABLE PYT
+ { 0xA051, BIDI_L }, // YI SYLLABLE PYX
+ { 0xA052, BIDI_L }, // YI SYLLABLE PY
+ { 0xA053, BIDI_L }, // YI SYLLABLE PYP
+ { 0xA054, BIDI_L }, // YI SYLLABLE PYRX
+ { 0xA055, BIDI_L }, // YI SYLLABLE PYR
+ { 0xA056, BIDI_L }, // YI SYLLABLE BBIT
+ { 0xA057, BIDI_L }, // YI SYLLABLE BBIX
+ { 0xA058, BIDI_L }, // YI SYLLABLE BBI
+ { 0xA059, BIDI_L }, // YI SYLLABLE BBIP
+ { 0xA05A, BIDI_L }, // YI SYLLABLE BBIET
+ { 0xA05B, BIDI_L }, // YI SYLLABLE BBIEX
+ { 0xA05C, BIDI_L }, // YI SYLLABLE BBIE
+ { 0xA05D, BIDI_L }, // YI SYLLABLE BBIEP
+ { 0xA05E, BIDI_L }, // YI SYLLABLE BBAT
+ { 0xA05F, BIDI_L }, // YI SYLLABLE BBAX
+ { 0xA060, BIDI_L }, // YI SYLLABLE BBA
+ { 0xA061, BIDI_L }, // YI SYLLABLE BBAP
+ { 0xA062, BIDI_L }, // YI SYLLABLE BBUOX
+ { 0xA063, BIDI_L }, // YI SYLLABLE BBUO
+ { 0xA064, BIDI_L }, // YI SYLLABLE BBUOP
+ { 0xA065, BIDI_L }, // YI SYLLABLE BBOT
+ { 0xA066, BIDI_L }, // YI SYLLABLE BBOX
+ { 0xA067, BIDI_L }, // YI SYLLABLE BBO
+ { 0xA068, BIDI_L }, // YI SYLLABLE BBOP
+ { 0xA069, BIDI_L }, // YI SYLLABLE BBEX
+ { 0xA06A, BIDI_L }, // YI SYLLABLE BBE
+ { 0xA06B, BIDI_L }, // YI SYLLABLE BBEP
+ { 0xA06C, BIDI_L }, // YI SYLLABLE BBUT
+ { 0xA06D, BIDI_L }, // YI SYLLABLE BBUX
+ { 0xA06E, BIDI_L }, // YI SYLLABLE BBU
+ { 0xA06F, BIDI_L }, // YI SYLLABLE BBUP
+ { 0xA070, BIDI_L }, // YI SYLLABLE BBURX
+ { 0xA071, BIDI_L }, // YI SYLLABLE BBUR
+ { 0xA072, BIDI_L }, // YI SYLLABLE BBYT
+ { 0xA073, BIDI_L }, // YI SYLLABLE BBYX
+ { 0xA074, BIDI_L }, // YI SYLLABLE BBY
+ { 0xA075, BIDI_L }, // YI SYLLABLE BBYP
+ { 0xA076, BIDI_L }, // YI SYLLABLE NBIT
+ { 0xA077, BIDI_L }, // YI SYLLABLE NBIX
+ { 0xA078, BIDI_L }, // YI SYLLABLE NBI
+ { 0xA079, BIDI_L }, // YI SYLLABLE NBIP
+ { 0xA07A, BIDI_L }, // YI SYLLABLE NBIEX
+ { 0xA07B, BIDI_L }, // YI SYLLABLE NBIE
+ { 0xA07C, BIDI_L }, // YI SYLLABLE NBIEP
+ { 0xA07D, BIDI_L }, // YI SYLLABLE NBAT
+ { 0xA07E, BIDI_L }, // YI SYLLABLE NBAX
+ { 0xA07F, BIDI_L }, // YI SYLLABLE NBA
+ { 0xA080, BIDI_L }, // YI SYLLABLE NBAP
+ { 0xA081, BIDI_L }, // YI SYLLABLE NBOT
+ { 0xA082, BIDI_L }, // YI SYLLABLE NBOX
+ { 0xA083, BIDI_L }, // YI SYLLABLE NBO
+ { 0xA084, BIDI_L }, // YI SYLLABLE NBOP
+ { 0xA085, BIDI_L }, // YI SYLLABLE NBUT
+ { 0xA086, BIDI_L }, // YI SYLLABLE NBUX
+ { 0xA087, BIDI_L }, // YI SYLLABLE NBU
+ { 0xA088, BIDI_L }, // YI SYLLABLE NBUP
+ { 0xA089, BIDI_L }, // YI SYLLABLE NBURX
+ { 0xA08A, BIDI_L }, // YI SYLLABLE NBUR
+ { 0xA08B, BIDI_L }, // YI SYLLABLE NBYT
+ { 0xA08C, BIDI_L }, // YI SYLLABLE NBYX
+ { 0xA08D, BIDI_L }, // YI SYLLABLE NBY
+ { 0xA08E, BIDI_L }, // YI SYLLABLE NBYP
+ { 0xA08F, BIDI_L }, // YI SYLLABLE NBYRX
+ { 0xA090, BIDI_L }, // YI SYLLABLE NBYR
+ { 0xA091, BIDI_L }, // YI SYLLABLE HMIT
+ { 0xA092, BIDI_L }, // YI SYLLABLE HMIX
+ { 0xA093, BIDI_L }, // YI SYLLABLE HMI
+ { 0xA094, BIDI_L }, // YI SYLLABLE HMIP
+ { 0xA095, BIDI_L }, // YI SYLLABLE HMIEX
+ { 0xA096, BIDI_L }, // YI SYLLABLE HMIE
+ { 0xA097, BIDI_L }, // YI SYLLABLE HMIEP
+ { 0xA098, BIDI_L }, // YI SYLLABLE HMAT
+ { 0xA099, BIDI_L }, // YI SYLLABLE HMAX
+ { 0xA09A, BIDI_L }, // YI SYLLABLE HMA
+ { 0xA09B, BIDI_L }, // YI SYLLABLE HMAP
+ { 0xA09C, BIDI_L }, // YI SYLLABLE HMUOX
+ { 0xA09D, BIDI_L }, // YI SYLLABLE HMUO
+ { 0xA09E, BIDI_L }, // YI SYLLABLE HMUOP
+ { 0xA09F, BIDI_L }, // YI SYLLABLE HMOT
+ { 0xA0A0, BIDI_L }, // YI SYLLABLE HMOX
+ { 0xA0A1, BIDI_L }, // YI SYLLABLE HMO
+ { 0xA0A2, BIDI_L }, // YI SYLLABLE HMOP
+ { 0xA0A3, BIDI_L }, // YI SYLLABLE HMUT
+ { 0xA0A4, BIDI_L }, // YI SYLLABLE HMUX
+ { 0xA0A5, BIDI_L }, // YI SYLLABLE HMU
+ { 0xA0A6, BIDI_L }, // YI SYLLABLE HMUP
+ { 0xA0A7, BIDI_L }, // YI SYLLABLE HMURX
+ { 0xA0A8, BIDI_L }, // YI SYLLABLE HMUR
+ { 0xA0A9, BIDI_L }, // YI SYLLABLE HMYX
+ { 0xA0AA, BIDI_L }, // YI SYLLABLE HMY
+ { 0xA0AB, BIDI_L }, // YI SYLLABLE HMYP
+ { 0xA0AC, BIDI_L }, // YI SYLLABLE HMYRX
+ { 0xA0AD, BIDI_L }, // YI SYLLABLE HMYR
+ { 0xA0AE, BIDI_L }, // YI SYLLABLE MIT
+ { 0xA0AF, BIDI_L }, // YI SYLLABLE MIX
+ { 0xA0B0, BIDI_L }, // YI SYLLABLE MI
+ { 0xA0B1, BIDI_L }, // YI SYLLABLE MIP
+ { 0xA0B2, BIDI_L }, // YI SYLLABLE MIEX
+ { 0xA0B3, BIDI_L }, // YI SYLLABLE MIE
+ { 0xA0B4, BIDI_L }, // YI SYLLABLE MIEP
+ { 0xA0B5, BIDI_L }, // YI SYLLABLE MAT
+ { 0xA0B6, BIDI_L }, // YI SYLLABLE MAX
+ { 0xA0B7, BIDI_L }, // YI SYLLABLE MA
+ { 0xA0B8, BIDI_L }, // YI SYLLABLE MAP
+ { 0xA0B9, BIDI_L }, // YI SYLLABLE MUOT
+ { 0xA0BA, BIDI_L }, // YI SYLLABLE MUOX
+ { 0xA0BB, BIDI_L }, // YI SYLLABLE MUO
+ { 0xA0BC, BIDI_L }, // YI SYLLABLE MUOP
+ { 0xA0BD, BIDI_L }, // YI SYLLABLE MOT
+ { 0xA0BE, BIDI_L }, // YI SYLLABLE MOX
+ { 0xA0BF, BIDI_L }, // YI SYLLABLE MO
+ { 0xA0C0, BIDI_L }, // YI SYLLABLE MOP
+ { 0xA0C1, BIDI_L }, // YI SYLLABLE MEX
+ { 0xA0C2, BIDI_L }, // YI SYLLABLE ME
+ { 0xA0C3, BIDI_L }, // YI SYLLABLE MUT
+ { 0xA0C4, BIDI_L }, // YI SYLLABLE MUX
+ { 0xA0C5, BIDI_L }, // YI SYLLABLE MU
+ { 0xA0C6, BIDI_L }, // YI SYLLABLE MUP
+ { 0xA0C7, BIDI_L }, // YI SYLLABLE MURX
+ { 0xA0C8, BIDI_L }, // YI SYLLABLE MUR
+ { 0xA0C9, BIDI_L }, // YI SYLLABLE MYT
+ { 0xA0CA, BIDI_L }, // YI SYLLABLE MYX
+ { 0xA0CB, BIDI_L }, // YI SYLLABLE MY
+ { 0xA0CC, BIDI_L }, // YI SYLLABLE MYP
+ { 0xA0CD, BIDI_L }, // YI SYLLABLE FIT
+ { 0xA0CE, BIDI_L }, // YI SYLLABLE FIX
+ { 0xA0CF, BIDI_L }, // YI SYLLABLE FI
+ { 0xA0D0, BIDI_L }, // YI SYLLABLE FIP
+ { 0xA0D1, BIDI_L }, // YI SYLLABLE FAT
+ { 0xA0D2, BIDI_L }, // YI SYLLABLE FAX
+ { 0xA0D3, BIDI_L }, // YI SYLLABLE FA
+ { 0xA0D4, BIDI_L }, // YI SYLLABLE FAP
+ { 0xA0D5, BIDI_L }, // YI SYLLABLE FOX
+ { 0xA0D6, BIDI_L }, // YI SYLLABLE FO
+ { 0xA0D7, BIDI_L }, // YI SYLLABLE FOP
+ { 0xA0D8, BIDI_L }, // YI SYLLABLE FUT
+ { 0xA0D9, BIDI_L }, // YI SYLLABLE FUX
+ { 0xA0DA, BIDI_L }, // YI SYLLABLE FU
+ { 0xA0DB, BIDI_L }, // YI SYLLABLE FUP
+ { 0xA0DC, BIDI_L }, // YI SYLLABLE FURX
+ { 0xA0DD, BIDI_L }, // YI SYLLABLE FUR
+ { 0xA0DE, BIDI_L }, // YI SYLLABLE FYT
+ { 0xA0DF, BIDI_L }, // YI SYLLABLE FYX
+ { 0xA0E0, BIDI_L }, // YI SYLLABLE FY
+ { 0xA0E1, BIDI_L }, // YI SYLLABLE FYP
+ { 0xA0E2, BIDI_L }, // YI SYLLABLE VIT
+ { 0xA0E3, BIDI_L }, // YI SYLLABLE VIX
+ { 0xA0E4, BIDI_L }, // YI SYLLABLE VI
+ { 0xA0E5, BIDI_L }, // YI SYLLABLE VIP
+ { 0xA0E6, BIDI_L }, // YI SYLLABLE VIET
+ { 0xA0E7, BIDI_L }, // YI SYLLABLE VIEX
+ { 0xA0E8, BIDI_L }, // YI SYLLABLE VIE
+ { 0xA0E9, BIDI_L }, // YI SYLLABLE VIEP
+ { 0xA0EA, BIDI_L }, // YI SYLLABLE VAT
+ { 0xA0EB, BIDI_L }, // YI SYLLABLE VAX
+ { 0xA0EC, BIDI_L }, // YI SYLLABLE VA
+ { 0xA0ED, BIDI_L }, // YI SYLLABLE VAP
+ { 0xA0EE, BIDI_L }, // YI SYLLABLE VOT
+ { 0xA0EF, BIDI_L }, // YI SYLLABLE VOX
+ { 0xA0F0, BIDI_L }, // YI SYLLABLE VO
+ { 0xA0F1, BIDI_L }, // YI SYLLABLE VOP
+ { 0xA0F2, BIDI_L }, // YI SYLLABLE VEX
+ { 0xA0F3, BIDI_L }, // YI SYLLABLE VEP
+ { 0xA0F4, BIDI_L }, // YI SYLLABLE VUT
+ { 0xA0F5, BIDI_L }, // YI SYLLABLE VUX
+ { 0xA0F6, BIDI_L }, // YI SYLLABLE VU
+ { 0xA0F7, BIDI_L }, // YI SYLLABLE VUP
+ { 0xA0F8, BIDI_L }, // YI SYLLABLE VURX
+ { 0xA0F9, BIDI_L }, // YI SYLLABLE VUR
+ { 0xA0FA, BIDI_L }, // YI SYLLABLE VYT
+ { 0xA0FB, BIDI_L }, // YI SYLLABLE VYX
+ { 0xA0FC, BIDI_L }, // YI SYLLABLE VY
+ { 0xA0FD, BIDI_L }, // YI SYLLABLE VYP
+ { 0xA0FE, BIDI_L }, // YI SYLLABLE VYRX
+ { 0xA0FF, BIDI_L }, // YI SYLLABLE VYR
+ { 0xA100, BIDI_L }, // YI SYLLABLE DIT
+ { 0xA101, BIDI_L }, // YI SYLLABLE DIX
+ { 0xA102, BIDI_L }, // YI SYLLABLE DI
+ { 0xA103, BIDI_L }, // YI SYLLABLE DIP
+ { 0xA104, BIDI_L }, // YI SYLLABLE DIEX
+ { 0xA105, BIDI_L }, // YI SYLLABLE DIE
+ { 0xA106, BIDI_L }, // YI SYLLABLE DIEP
+ { 0xA107, BIDI_L }, // YI SYLLABLE DAT
+ { 0xA108, BIDI_L }, // YI SYLLABLE DAX
+ { 0xA109, BIDI_L }, // YI SYLLABLE DA
+ { 0xA10A, BIDI_L }, // YI SYLLABLE DAP
+ { 0xA10B, BIDI_L }, // YI SYLLABLE DUOX
+ { 0xA10C, BIDI_L }, // YI SYLLABLE DUO
+ { 0xA10D, BIDI_L }, // YI SYLLABLE DOT
+ { 0xA10E, BIDI_L }, // YI SYLLABLE DOX
+ { 0xA10F, BIDI_L }, // YI SYLLABLE DO
+ { 0xA110, BIDI_L }, // YI SYLLABLE DOP
+ { 0xA111, BIDI_L }, // YI SYLLABLE DEX
+ { 0xA112, BIDI_L }, // YI SYLLABLE DE
+ { 0xA113, BIDI_L }, // YI SYLLABLE DEP
+ { 0xA114, BIDI_L }, // YI SYLLABLE DUT
+ { 0xA115, BIDI_L }, // YI SYLLABLE DUX
+ { 0xA116, BIDI_L }, // YI SYLLABLE DU
+ { 0xA117, BIDI_L }, // YI SYLLABLE DUP
+ { 0xA118, BIDI_L }, // YI SYLLABLE DURX
+ { 0xA119, BIDI_L }, // YI SYLLABLE DUR
+ { 0xA11A, BIDI_L }, // YI SYLLABLE TIT
+ { 0xA11B, BIDI_L }, // YI SYLLABLE TIX
+ { 0xA11C, BIDI_L }, // YI SYLLABLE TI
+ { 0xA11D, BIDI_L }, // YI SYLLABLE TIP
+ { 0xA11E, BIDI_L }, // YI SYLLABLE TIEX
+ { 0xA11F, BIDI_L }, // YI SYLLABLE TIE
+ { 0xA120, BIDI_L }, // YI SYLLABLE TIEP
+ { 0xA121, BIDI_L }, // YI SYLLABLE TAT
+ { 0xA122, BIDI_L }, // YI SYLLABLE TAX
+ { 0xA123, BIDI_L }, // YI SYLLABLE TA
+ { 0xA124, BIDI_L }, // YI SYLLABLE TAP
+ { 0xA125, BIDI_L }, // YI SYLLABLE TUOT
+ { 0xA126, BIDI_L }, // YI SYLLABLE TUOX
+ { 0xA127, BIDI_L }, // YI SYLLABLE TUO
+ { 0xA128, BIDI_L }, // YI SYLLABLE TUOP
+ { 0xA129, BIDI_L }, // YI SYLLABLE TOT
+ { 0xA12A, BIDI_L }, // YI SYLLABLE TOX
+ { 0xA12B, BIDI_L }, // YI SYLLABLE TO
+ { 0xA12C, BIDI_L }, // YI SYLLABLE TOP
+ { 0xA12D, BIDI_L }, // YI SYLLABLE TEX
+ { 0xA12E, BIDI_L }, // YI SYLLABLE TE
+ { 0xA12F, BIDI_L }, // YI SYLLABLE TEP
+ { 0xA130, BIDI_L }, // YI SYLLABLE TUT
+ { 0xA131, BIDI_L }, // YI SYLLABLE TUX
+ { 0xA132, BIDI_L }, // YI SYLLABLE TU
+ { 0xA133, BIDI_L }, // YI SYLLABLE TUP
+ { 0xA134, BIDI_L }, // YI SYLLABLE TURX
+ { 0xA135, BIDI_L }, // YI SYLLABLE TUR
+ { 0xA136, BIDI_L }, // YI SYLLABLE DDIT
+ { 0xA137, BIDI_L }, // YI SYLLABLE DDIX
+ { 0xA138, BIDI_L }, // YI SYLLABLE DDI
+ { 0xA139, BIDI_L }, // YI SYLLABLE DDIP
+ { 0xA13A, BIDI_L }, // YI SYLLABLE DDIEX
+ { 0xA13B, BIDI_L }, // YI SYLLABLE DDIE
+ { 0xA13C, BIDI_L }, // YI SYLLABLE DDIEP
+ { 0xA13D, BIDI_L }, // YI SYLLABLE DDAT
+ { 0xA13E, BIDI_L }, // YI SYLLABLE DDAX
+ { 0xA13F, BIDI_L }, // YI SYLLABLE DDA
+ { 0xA140, BIDI_L }, // YI SYLLABLE DDAP
+ { 0xA141, BIDI_L }, // YI SYLLABLE DDUOX
+ { 0xA142, BIDI_L }, // YI SYLLABLE DDUO
+ { 0xA143, BIDI_L }, // YI SYLLABLE DDUOP
+ { 0xA144, BIDI_L }, // YI SYLLABLE DDOT
+ { 0xA145, BIDI_L }, // YI SYLLABLE DDOX
+ { 0xA146, BIDI_L }, // YI SYLLABLE DDO
+ { 0xA147, BIDI_L }, // YI SYLLABLE DDOP
+ { 0xA148, BIDI_L }, // YI SYLLABLE DDEX
+ { 0xA149, BIDI_L }, // YI SYLLABLE DDE
+ { 0xA14A, BIDI_L }, // YI SYLLABLE DDEP
+ { 0xA14B, BIDI_L }, // YI SYLLABLE DDUT
+ { 0xA14C, BIDI_L }, // YI SYLLABLE DDUX
+ { 0xA14D, BIDI_L }, // YI SYLLABLE DDU
+ { 0xA14E, BIDI_L }, // YI SYLLABLE DDUP
+ { 0xA14F, BIDI_L }, // YI SYLLABLE DDURX
+ { 0xA150, BIDI_L }, // YI SYLLABLE DDUR
+ { 0xA151, BIDI_L }, // YI SYLLABLE NDIT
+ { 0xA152, BIDI_L }, // YI SYLLABLE NDIX
+ { 0xA153, BIDI_L }, // YI SYLLABLE NDI
+ { 0xA154, BIDI_L }, // YI SYLLABLE NDIP
+ { 0xA155, BIDI_L }, // YI SYLLABLE NDIEX
+ { 0xA156, BIDI_L }, // YI SYLLABLE NDIE
+ { 0xA157, BIDI_L }, // YI SYLLABLE NDAT
+ { 0xA158, BIDI_L }, // YI SYLLABLE NDAX
+ { 0xA159, BIDI_L }, // YI SYLLABLE NDA
+ { 0xA15A, BIDI_L }, // YI SYLLABLE NDAP
+ { 0xA15B, BIDI_L }, // YI SYLLABLE NDOT
+ { 0xA15C, BIDI_L }, // YI SYLLABLE NDOX
+ { 0xA15D, BIDI_L }, // YI SYLLABLE NDO
+ { 0xA15E, BIDI_L }, // YI SYLLABLE NDOP
+ { 0xA15F, BIDI_L }, // YI SYLLABLE NDEX
+ { 0xA160, BIDI_L }, // YI SYLLABLE NDE
+ { 0xA161, BIDI_L }, // YI SYLLABLE NDEP
+ { 0xA162, BIDI_L }, // YI SYLLABLE NDUT
+ { 0xA163, BIDI_L }, // YI SYLLABLE NDUX
+ { 0xA164, BIDI_L }, // YI SYLLABLE NDU
+ { 0xA165, BIDI_L }, // YI SYLLABLE NDUP
+ { 0xA166, BIDI_L }, // YI SYLLABLE NDURX
+ { 0xA167, BIDI_L }, // YI SYLLABLE NDUR
+ { 0xA168, BIDI_L }, // YI SYLLABLE HNIT
+ { 0xA169, BIDI_L }, // YI SYLLABLE HNIX
+ { 0xA16A, BIDI_L }, // YI SYLLABLE HNI
+ { 0xA16B, BIDI_L }, // YI SYLLABLE HNIP
+ { 0xA16C, BIDI_L }, // YI SYLLABLE HNIET
+ { 0xA16D, BIDI_L }, // YI SYLLABLE HNIEX
+ { 0xA16E, BIDI_L }, // YI SYLLABLE HNIE
+ { 0xA16F, BIDI_L }, // YI SYLLABLE HNIEP
+ { 0xA170, BIDI_L }, // YI SYLLABLE HNAT
+ { 0xA171, BIDI_L }, // YI SYLLABLE HNAX
+ { 0xA172, BIDI_L }, // YI SYLLABLE HNA
+ { 0xA173, BIDI_L }, // YI SYLLABLE HNAP
+ { 0xA174, BIDI_L }, // YI SYLLABLE HNUOX
+ { 0xA175, BIDI_L }, // YI SYLLABLE HNUO
+ { 0xA176, BIDI_L }, // YI SYLLABLE HNOT
+ { 0xA177, BIDI_L }, // YI SYLLABLE HNOX
+ { 0xA178, BIDI_L }, // YI SYLLABLE HNOP
+ { 0xA179, BIDI_L }, // YI SYLLABLE HNEX
+ { 0xA17A, BIDI_L }, // YI SYLLABLE HNE
+ { 0xA17B, BIDI_L }, // YI SYLLABLE HNEP
+ { 0xA17C, BIDI_L }, // YI SYLLABLE HNUT
+ { 0xA17D, BIDI_L }, // YI SYLLABLE NIT
+ { 0xA17E, BIDI_L }, // YI SYLLABLE NIX
+ { 0xA17F, BIDI_L }, // YI SYLLABLE NI
+ { 0xA180, BIDI_L }, // YI SYLLABLE NIP
+ { 0xA181, BIDI_L }, // YI SYLLABLE NIEX
+ { 0xA182, BIDI_L }, // YI SYLLABLE NIE
+ { 0xA183, BIDI_L }, // YI SYLLABLE NIEP
+ { 0xA184, BIDI_L }, // YI SYLLABLE NAX
+ { 0xA185, BIDI_L }, // YI SYLLABLE NA
+ { 0xA186, BIDI_L }, // YI SYLLABLE NAP
+ { 0xA187, BIDI_L }, // YI SYLLABLE NUOX
+ { 0xA188, BIDI_L }, // YI SYLLABLE NUO
+ { 0xA189, BIDI_L }, // YI SYLLABLE NUOP
+ { 0xA18A, BIDI_L }, // YI SYLLABLE NOT
+ { 0xA18B, BIDI_L }, // YI SYLLABLE NOX
+ { 0xA18C, BIDI_L }, // YI SYLLABLE NO
+ { 0xA18D, BIDI_L }, // YI SYLLABLE NOP
+ { 0xA18E, BIDI_L }, // YI SYLLABLE NEX
+ { 0xA18F, BIDI_L }, // YI SYLLABLE NE
+ { 0xA190, BIDI_L }, // YI SYLLABLE NEP
+ { 0xA191, BIDI_L }, // YI SYLLABLE NUT
+ { 0xA192, BIDI_L }, // YI SYLLABLE NUX
+ { 0xA193, BIDI_L }, // YI SYLLABLE NU
+ { 0xA194, BIDI_L }, // YI SYLLABLE NUP
+ { 0xA195, BIDI_L }, // YI SYLLABLE NURX
+ { 0xA196, BIDI_L }, // YI SYLLABLE NUR
+ { 0xA197, BIDI_L }, // YI SYLLABLE HLIT
+ { 0xA198, BIDI_L }, // YI SYLLABLE HLIX
+ { 0xA199, BIDI_L }, // YI SYLLABLE HLI
+ { 0xA19A, BIDI_L }, // YI SYLLABLE HLIP
+ { 0xA19B, BIDI_L }, // YI SYLLABLE HLIEX
+ { 0xA19C, BIDI_L }, // YI SYLLABLE HLIE
+ { 0xA19D, BIDI_L }, // YI SYLLABLE HLIEP
+ { 0xA19E, BIDI_L }, // YI SYLLABLE HLAT
+ { 0xA19F, BIDI_L }, // YI SYLLABLE HLAX
+ { 0xA1A0, BIDI_L }, // YI SYLLABLE HLA
+ { 0xA1A1, BIDI_L }, // YI SYLLABLE HLAP
+ { 0xA1A2, BIDI_L }, // YI SYLLABLE HLUOX
+ { 0xA1A3, BIDI_L }, // YI SYLLABLE HLUO
+ { 0xA1A4, BIDI_L }, // YI SYLLABLE HLUOP
+ { 0xA1A5, BIDI_L }, // YI SYLLABLE HLOX
+ { 0xA1A6, BIDI_L }, // YI SYLLABLE HLO
+ { 0xA1A7, BIDI_L }, // YI SYLLABLE HLOP
+ { 0xA1A8, BIDI_L }, // YI SYLLABLE HLEX
+ { 0xA1A9, BIDI_L }, // YI SYLLABLE HLE
+ { 0xA1AA, BIDI_L }, // YI SYLLABLE HLEP
+ { 0xA1AB, BIDI_L }, // YI SYLLABLE HLUT
+ { 0xA1AC, BIDI_L }, // YI SYLLABLE HLUX
+ { 0xA1AD, BIDI_L }, // YI SYLLABLE HLU
+ { 0xA1AE, BIDI_L }, // YI SYLLABLE HLUP
+ { 0xA1AF, BIDI_L }, // YI SYLLABLE HLURX
+ { 0xA1B0, BIDI_L }, // YI SYLLABLE HLUR
+ { 0xA1B1, BIDI_L }, // YI SYLLABLE HLYT
+ { 0xA1B2, BIDI_L }, // YI SYLLABLE HLYX
+ { 0xA1B3, BIDI_L }, // YI SYLLABLE HLY
+ { 0xA1B4, BIDI_L }, // YI SYLLABLE HLYP
+ { 0xA1B5, BIDI_L }, // YI SYLLABLE HLYRX
+ { 0xA1B6, BIDI_L }, // YI SYLLABLE HLYR
+ { 0xA1B7, BIDI_L }, // YI SYLLABLE LIT
+ { 0xA1B8, BIDI_L }, // YI SYLLABLE LIX
+ { 0xA1B9, BIDI_L }, // YI SYLLABLE LI
+ { 0xA1BA, BIDI_L }, // YI SYLLABLE LIP
+ { 0xA1BB, BIDI_L }, // YI SYLLABLE LIET
+ { 0xA1BC, BIDI_L }, // YI SYLLABLE LIEX
+ { 0xA1BD, BIDI_L }, // YI SYLLABLE LIE
+ { 0xA1BE, BIDI_L }, // YI SYLLABLE LIEP
+ { 0xA1BF, BIDI_L }, // YI SYLLABLE LAT
+ { 0xA1C0, BIDI_L }, // YI SYLLABLE LAX
+ { 0xA1C1, BIDI_L }, // YI SYLLABLE LA
+ { 0xA1C2, BIDI_L }, // YI SYLLABLE LAP
+ { 0xA1C3, BIDI_L }, // YI SYLLABLE LUOT
+ { 0xA1C4, BIDI_L }, // YI SYLLABLE LUOX
+ { 0xA1C5, BIDI_L }, // YI SYLLABLE LUO
+ { 0xA1C6, BIDI_L }, // YI SYLLABLE LUOP
+ { 0xA1C7, BIDI_L }, // YI SYLLABLE LOT
+ { 0xA1C8, BIDI_L }, // YI SYLLABLE LOX
+ { 0xA1C9, BIDI_L }, // YI SYLLABLE LO
+ { 0xA1CA, BIDI_L }, // YI SYLLABLE LOP
+ { 0xA1CB, BIDI_L }, // YI SYLLABLE LEX
+ { 0xA1CC, BIDI_L }, // YI SYLLABLE LE
+ { 0xA1CD, BIDI_L }, // YI SYLLABLE LEP
+ { 0xA1CE, BIDI_L }, // YI SYLLABLE LUT
+ { 0xA1CF, BIDI_L }, // YI SYLLABLE LUX
+ { 0xA1D0, BIDI_L }, // YI SYLLABLE LU
+ { 0xA1D1, BIDI_L }, // YI SYLLABLE LUP
+ { 0xA1D2, BIDI_L }, // YI SYLLABLE LURX
+ { 0xA1D3, BIDI_L }, // YI SYLLABLE LUR
+ { 0xA1D4, BIDI_L }, // YI SYLLABLE LYT
+ { 0xA1D5, BIDI_L }, // YI SYLLABLE LYX
+ { 0xA1D6, BIDI_L }, // YI SYLLABLE LY
+ { 0xA1D7, BIDI_L }, // YI SYLLABLE LYP
+ { 0xA1D8, BIDI_L }, // YI SYLLABLE LYRX
+ { 0xA1D9, BIDI_L }, // YI SYLLABLE LYR
+ { 0xA1DA, BIDI_L }, // YI SYLLABLE GIT
+ { 0xA1DB, BIDI_L }, // YI SYLLABLE GIX
+ { 0xA1DC, BIDI_L }, // YI SYLLABLE GI
+ { 0xA1DD, BIDI_L }, // YI SYLLABLE GIP
+ { 0xA1DE, BIDI_L }, // YI SYLLABLE GIET
+ { 0xA1DF, BIDI_L }, // YI SYLLABLE GIEX
+ { 0xA1E0, BIDI_L }, // YI SYLLABLE GIE
+ { 0xA1E1, BIDI_L }, // YI SYLLABLE GIEP
+ { 0xA1E2, BIDI_L }, // YI SYLLABLE GAT
+ { 0xA1E3, BIDI_L }, // YI SYLLABLE GAX
+ { 0xA1E4, BIDI_L }, // YI SYLLABLE GA
+ { 0xA1E5, BIDI_L }, // YI SYLLABLE GAP
+ { 0xA1E6, BIDI_L }, // YI SYLLABLE GUOT
+ { 0xA1E7, BIDI_L }, // YI SYLLABLE GUOX
+ { 0xA1E8, BIDI_L }, // YI SYLLABLE GUO
+ { 0xA1E9, BIDI_L }, // YI SYLLABLE GUOP
+ { 0xA1EA, BIDI_L }, // YI SYLLABLE GOT
+ { 0xA1EB, BIDI_L }, // YI SYLLABLE GOX
+ { 0xA1EC, BIDI_L }, // YI SYLLABLE GO
+ { 0xA1ED, BIDI_L }, // YI SYLLABLE GOP
+ { 0xA1EE, BIDI_L }, // YI SYLLABLE GET
+ { 0xA1EF, BIDI_L }, // YI SYLLABLE GEX
+ { 0xA1F0, BIDI_L }, // YI SYLLABLE GE
+ { 0xA1F1, BIDI_L }, // YI SYLLABLE GEP
+ { 0xA1F2, BIDI_L }, // YI SYLLABLE GUT
+ { 0xA1F3, BIDI_L }, // YI SYLLABLE GUX
+ { 0xA1F4, BIDI_L }, // YI SYLLABLE GU
+ { 0xA1F5, BIDI_L }, // YI SYLLABLE GUP
+ { 0xA1F6, BIDI_L }, // YI SYLLABLE GURX
+ { 0xA1F7, BIDI_L }, // YI SYLLABLE GUR
+ { 0xA1F8, BIDI_L }, // YI SYLLABLE KIT
+ { 0xA1F9, BIDI_L }, // YI SYLLABLE KIX
+ { 0xA1FA, BIDI_L }, // YI SYLLABLE KI
+ { 0xA1FB, BIDI_L }, // YI SYLLABLE KIP
+ { 0xA1FC, BIDI_L }, // YI SYLLABLE KIEX
+ { 0xA1FD, BIDI_L }, // YI SYLLABLE KIE
+ { 0xA1FE, BIDI_L }, // YI SYLLABLE KIEP
+ { 0xA1FF, BIDI_L }, // YI SYLLABLE KAT
+ { 0xA200, BIDI_L }, // YI SYLLABLE KAX
+ { 0xA201, BIDI_L }, // YI SYLLABLE KA
+ { 0xA202, BIDI_L }, // YI SYLLABLE KAP
+ { 0xA203, BIDI_L }, // YI SYLLABLE KUOX
+ { 0xA204, BIDI_L }, // YI SYLLABLE KUO
+ { 0xA205, BIDI_L }, // YI SYLLABLE KUOP
+ { 0xA206, BIDI_L }, // YI SYLLABLE KOT
+ { 0xA207, BIDI_L }, // YI SYLLABLE KOX
+ { 0xA208, BIDI_L }, // YI SYLLABLE KO
+ { 0xA209, BIDI_L }, // YI SYLLABLE KOP
+ { 0xA20A, BIDI_L }, // YI SYLLABLE KET
+ { 0xA20B, BIDI_L }, // YI SYLLABLE KEX
+ { 0xA20C, BIDI_L }, // YI SYLLABLE KE
+ { 0xA20D, BIDI_L }, // YI SYLLABLE KEP
+ { 0xA20E, BIDI_L }, // YI SYLLABLE KUT
+ { 0xA20F, BIDI_L }, // YI SYLLABLE KUX
+ { 0xA210, BIDI_L }, // YI SYLLABLE KU
+ { 0xA211, BIDI_L }, // YI SYLLABLE KUP
+ { 0xA212, BIDI_L }, // YI SYLLABLE KURX
+ { 0xA213, BIDI_L }, // YI SYLLABLE KUR
+ { 0xA214, BIDI_L }, // YI SYLLABLE GGIT
+ { 0xA215, BIDI_L }, // YI SYLLABLE GGIX
+ { 0xA216, BIDI_L }, // YI SYLLABLE GGI
+ { 0xA217, BIDI_L }, // YI SYLLABLE GGIEX
+ { 0xA218, BIDI_L }, // YI SYLLABLE GGIE
+ { 0xA219, BIDI_L }, // YI SYLLABLE GGIEP
+ { 0xA21A, BIDI_L }, // YI SYLLABLE GGAT
+ { 0xA21B, BIDI_L }, // YI SYLLABLE GGAX
+ { 0xA21C, BIDI_L }, // YI SYLLABLE GGA
+ { 0xA21D, BIDI_L }, // YI SYLLABLE GGAP
+ { 0xA21E, BIDI_L }, // YI SYLLABLE GGUOT
+ { 0xA21F, BIDI_L }, // YI SYLLABLE GGUOX
+ { 0xA220, BIDI_L }, // YI SYLLABLE GGUO
+ { 0xA221, BIDI_L }, // YI SYLLABLE GGUOP
+ { 0xA222, BIDI_L }, // YI SYLLABLE GGOT
+ { 0xA223, BIDI_L }, // YI SYLLABLE GGOX
+ { 0xA224, BIDI_L }, // YI SYLLABLE GGO
+ { 0xA225, BIDI_L }, // YI SYLLABLE GGOP
+ { 0xA226, BIDI_L }, // YI SYLLABLE GGET
+ { 0xA227, BIDI_L }, // YI SYLLABLE GGEX
+ { 0xA228, BIDI_L }, // YI SYLLABLE GGE
+ { 0xA229, BIDI_L }, // YI SYLLABLE GGEP
+ { 0xA22A, BIDI_L }, // YI SYLLABLE GGUT
+ { 0xA22B, BIDI_L }, // YI SYLLABLE GGUX
+ { 0xA22C, BIDI_L }, // YI SYLLABLE GGU
+ { 0xA22D, BIDI_L }, // YI SYLLABLE GGUP
+ { 0xA22E, BIDI_L }, // YI SYLLABLE GGURX
+ { 0xA22F, BIDI_L }, // YI SYLLABLE GGUR
+ { 0xA230, BIDI_L }, // YI SYLLABLE MGIEX
+ { 0xA231, BIDI_L }, // YI SYLLABLE MGIE
+ { 0xA232, BIDI_L }, // YI SYLLABLE MGAT
+ { 0xA233, BIDI_L }, // YI SYLLABLE MGAX
+ { 0xA234, BIDI_L }, // YI SYLLABLE MGA
+ { 0xA235, BIDI_L }, // YI SYLLABLE MGAP
+ { 0xA236, BIDI_L }, // YI SYLLABLE MGUOX
+ { 0xA237, BIDI_L }, // YI SYLLABLE MGUO
+ { 0xA238, BIDI_L }, // YI SYLLABLE MGUOP
+ { 0xA239, BIDI_L }, // YI SYLLABLE MGOT
+ { 0xA23A, BIDI_L }, // YI SYLLABLE MGOX
+ { 0xA23B, BIDI_L }, // YI SYLLABLE MGO
+ { 0xA23C, BIDI_L }, // YI SYLLABLE MGOP
+ { 0xA23D, BIDI_L }, // YI SYLLABLE MGEX
+ { 0xA23E, BIDI_L }, // YI SYLLABLE MGE
+ { 0xA23F, BIDI_L }, // YI SYLLABLE MGEP
+ { 0xA240, BIDI_L }, // YI SYLLABLE MGUT
+ { 0xA241, BIDI_L }, // YI SYLLABLE MGUX
+ { 0xA242, BIDI_L }, // YI SYLLABLE MGU
+ { 0xA243, BIDI_L }, // YI SYLLABLE MGUP
+ { 0xA244, BIDI_L }, // YI SYLLABLE MGURX
+ { 0xA245, BIDI_L }, // YI SYLLABLE MGUR
+ { 0xA246, BIDI_L }, // YI SYLLABLE HXIT
+ { 0xA247, BIDI_L }, // YI SYLLABLE HXIX
+ { 0xA248, BIDI_L }, // YI SYLLABLE HXI
+ { 0xA249, BIDI_L }, // YI SYLLABLE HXIP
+ { 0xA24A, BIDI_L }, // YI SYLLABLE HXIET
+ { 0xA24B, BIDI_L }, // YI SYLLABLE HXIEX
+ { 0xA24C, BIDI_L }, // YI SYLLABLE HXIE
+ { 0xA24D, BIDI_L }, // YI SYLLABLE HXIEP
+ { 0xA24E, BIDI_L }, // YI SYLLABLE HXAT
+ { 0xA24F, BIDI_L }, // YI SYLLABLE HXAX
+ { 0xA250, BIDI_L }, // YI SYLLABLE HXA
+ { 0xA251, BIDI_L }, // YI SYLLABLE HXAP
+ { 0xA252, BIDI_L }, // YI SYLLABLE HXUOT
+ { 0xA253, BIDI_L }, // YI SYLLABLE HXUOX
+ { 0xA254, BIDI_L }, // YI SYLLABLE HXUO
+ { 0xA255, BIDI_L }, // YI SYLLABLE HXUOP
+ { 0xA256, BIDI_L }, // YI SYLLABLE HXOT
+ { 0xA257, BIDI_L }, // YI SYLLABLE HXOX
+ { 0xA258, BIDI_L }, // YI SYLLABLE HXO
+ { 0xA259, BIDI_L }, // YI SYLLABLE HXOP
+ { 0xA25A, BIDI_L }, // YI SYLLABLE HXEX
+ { 0xA25B, BIDI_L }, // YI SYLLABLE HXE
+ { 0xA25C, BIDI_L }, // YI SYLLABLE HXEP
+ { 0xA25D, BIDI_L }, // YI SYLLABLE NGIEX
+ { 0xA25E, BIDI_L }, // YI SYLLABLE NGIE
+ { 0xA25F, BIDI_L }, // YI SYLLABLE NGIEP
+ { 0xA260, BIDI_L }, // YI SYLLABLE NGAT
+ { 0xA261, BIDI_L }, // YI SYLLABLE NGAX
+ { 0xA262, BIDI_L }, // YI SYLLABLE NGA
+ { 0xA263, BIDI_L }, // YI SYLLABLE NGAP
+ { 0xA264, BIDI_L }, // YI SYLLABLE NGUOT
+ { 0xA265, BIDI_L }, // YI SYLLABLE NGUOX
+ { 0xA266, BIDI_L }, // YI SYLLABLE NGUO
+ { 0xA267, BIDI_L }, // YI SYLLABLE NGOT
+ { 0xA268, BIDI_L }, // YI SYLLABLE NGOX
+ { 0xA269, BIDI_L }, // YI SYLLABLE NGO
+ { 0xA26A, BIDI_L }, // YI SYLLABLE NGOP
+ { 0xA26B, BIDI_L }, // YI SYLLABLE NGEX
+ { 0xA26C, BIDI_L }, // YI SYLLABLE NGE
+ { 0xA26D, BIDI_L }, // YI SYLLABLE NGEP
+ { 0xA26E, BIDI_L }, // YI SYLLABLE HIT
+ { 0xA26F, BIDI_L }, // YI SYLLABLE HIEX
+ { 0xA270, BIDI_L }, // YI SYLLABLE HIE
+ { 0xA271, BIDI_L }, // YI SYLLABLE HAT
+ { 0xA272, BIDI_L }, // YI SYLLABLE HAX
+ { 0xA273, BIDI_L }, // YI SYLLABLE HA
+ { 0xA274, BIDI_L }, // YI SYLLABLE HAP
+ { 0xA275, BIDI_L }, // YI SYLLABLE HUOT
+ { 0xA276, BIDI_L }, // YI SYLLABLE HUOX
+ { 0xA277, BIDI_L }, // YI SYLLABLE HUO
+ { 0xA278, BIDI_L }, // YI SYLLABLE HUOP
+ { 0xA279, BIDI_L }, // YI SYLLABLE HOT
+ { 0xA27A, BIDI_L }, // YI SYLLABLE HOX
+ { 0xA27B, BIDI_L }, // YI SYLLABLE HO
+ { 0xA27C, BIDI_L }, // YI SYLLABLE HOP
+ { 0xA27D, BIDI_L }, // YI SYLLABLE HEX
+ { 0xA27E, BIDI_L }, // YI SYLLABLE HE
+ { 0xA27F, BIDI_L }, // YI SYLLABLE HEP
+ { 0xA280, BIDI_L }, // YI SYLLABLE WAT
+ { 0xA281, BIDI_L }, // YI SYLLABLE WAX
+ { 0xA282, BIDI_L }, // YI SYLLABLE WA
+ { 0xA283, BIDI_L }, // YI SYLLABLE WAP
+ { 0xA284, BIDI_L }, // YI SYLLABLE WUOX
+ { 0xA285, BIDI_L }, // YI SYLLABLE WUO
+ { 0xA286, BIDI_L }, // YI SYLLABLE WUOP
+ { 0xA287, BIDI_L }, // YI SYLLABLE WOX
+ { 0xA288, BIDI_L }, // YI SYLLABLE WO
+ { 0xA289, BIDI_L }, // YI SYLLABLE WOP
+ { 0xA28A, BIDI_L }, // YI SYLLABLE WEX
+ { 0xA28B, BIDI_L }, // YI SYLLABLE WE
+ { 0xA28C, BIDI_L }, // YI SYLLABLE WEP
+ { 0xA28D, BIDI_L }, // YI SYLLABLE ZIT
+ { 0xA28E, BIDI_L }, // YI SYLLABLE ZIX
+ { 0xA28F, BIDI_L }, // YI SYLLABLE ZI
+ { 0xA290, BIDI_L }, // YI SYLLABLE ZIP
+ { 0xA291, BIDI_L }, // YI SYLLABLE ZIEX
+ { 0xA292, BIDI_L }, // YI SYLLABLE ZIE
+ { 0xA293, BIDI_L }, // YI SYLLABLE ZIEP
+ { 0xA294, BIDI_L }, // YI SYLLABLE ZAT
+ { 0xA295, BIDI_L }, // YI SYLLABLE ZAX
+ { 0xA296, BIDI_L }, // YI SYLLABLE ZA
+ { 0xA297, BIDI_L }, // YI SYLLABLE ZAP
+ { 0xA298, BIDI_L }, // YI SYLLABLE ZUOX
+ { 0xA299, BIDI_L }, // YI SYLLABLE ZUO
+ { 0xA29A, BIDI_L }, // YI SYLLABLE ZUOP
+ { 0xA29B, BIDI_L }, // YI SYLLABLE ZOT
+ { 0xA29C, BIDI_L }, // YI SYLLABLE ZOX
+ { 0xA29D, BIDI_L }, // YI SYLLABLE ZO
+ { 0xA29E, BIDI_L }, // YI SYLLABLE ZOP
+ { 0xA29F, BIDI_L }, // YI SYLLABLE ZEX
+ { 0xA2A0, BIDI_L }, // YI SYLLABLE ZE
+ { 0xA2A1, BIDI_L }, // YI SYLLABLE ZEP
+ { 0xA2A2, BIDI_L }, // YI SYLLABLE ZUT
+ { 0xA2A3, BIDI_L }, // YI SYLLABLE ZUX
+ { 0xA2A4, BIDI_L }, // YI SYLLABLE ZU
+ { 0xA2A5, BIDI_L }, // YI SYLLABLE ZUP
+ { 0xA2A6, BIDI_L }, // YI SYLLABLE ZURX
+ { 0xA2A7, BIDI_L }, // YI SYLLABLE ZUR
+ { 0xA2A8, BIDI_L }, // YI SYLLABLE ZYT
+ { 0xA2A9, BIDI_L }, // YI SYLLABLE ZYX
+ { 0xA2AA, BIDI_L }, // YI SYLLABLE ZY
+ { 0xA2AB, BIDI_L }, // YI SYLLABLE ZYP
+ { 0xA2AC, BIDI_L }, // YI SYLLABLE ZYRX
+ { 0xA2AD, BIDI_L }, // YI SYLLABLE ZYR
+ { 0xA2AE, BIDI_L }, // YI SYLLABLE CIT
+ { 0xA2AF, BIDI_L }, // YI SYLLABLE CIX
+ { 0xA2B0, BIDI_L }, // YI SYLLABLE CI
+ { 0xA2B1, BIDI_L }, // YI SYLLABLE CIP
+ { 0xA2B2, BIDI_L }, // YI SYLLABLE CIET
+ { 0xA2B3, BIDI_L }, // YI SYLLABLE CIEX
+ { 0xA2B4, BIDI_L }, // YI SYLLABLE CIE
+ { 0xA2B5, BIDI_L }, // YI SYLLABLE CIEP
+ { 0xA2B6, BIDI_L }, // YI SYLLABLE CAT
+ { 0xA2B7, BIDI_L }, // YI SYLLABLE CAX
+ { 0xA2B8, BIDI_L }, // YI SYLLABLE CA
+ { 0xA2B9, BIDI_L }, // YI SYLLABLE CAP
+ { 0xA2BA, BIDI_L }, // YI SYLLABLE CUOX
+ { 0xA2BB, BIDI_L }, // YI SYLLABLE CUO
+ { 0xA2BC, BIDI_L }, // YI SYLLABLE CUOP
+ { 0xA2BD, BIDI_L }, // YI SYLLABLE COT
+ { 0xA2BE, BIDI_L }, // YI SYLLABLE COX
+ { 0xA2BF, BIDI_L }, // YI SYLLABLE CO
+ { 0xA2C0, BIDI_L }, // YI SYLLABLE COP
+ { 0xA2C1, BIDI_L }, // YI SYLLABLE CEX
+ { 0xA2C2, BIDI_L }, // YI SYLLABLE CE
+ { 0xA2C3, BIDI_L }, // YI SYLLABLE CEP
+ { 0xA2C4, BIDI_L }, // YI SYLLABLE CUT
+ { 0xA2C5, BIDI_L }, // YI SYLLABLE CUX
+ { 0xA2C6, BIDI_L }, // YI SYLLABLE CU
+ { 0xA2C7, BIDI_L }, // YI SYLLABLE CUP
+ { 0xA2C8, BIDI_L }, // YI SYLLABLE CURX
+ { 0xA2C9, BIDI_L }, // YI SYLLABLE CUR
+ { 0xA2CA, BIDI_L }, // YI SYLLABLE CYT
+ { 0xA2CB, BIDI_L }, // YI SYLLABLE CYX
+ { 0xA2CC, BIDI_L }, // YI SYLLABLE CY
+ { 0xA2CD, BIDI_L }, // YI SYLLABLE CYP
+ { 0xA2CE, BIDI_L }, // YI SYLLABLE CYRX
+ { 0xA2CF, BIDI_L }, // YI SYLLABLE CYR
+ { 0xA2D0, BIDI_L }, // YI SYLLABLE ZZIT
+ { 0xA2D1, BIDI_L }, // YI SYLLABLE ZZIX
+ { 0xA2D2, BIDI_L }, // YI SYLLABLE ZZI
+ { 0xA2D3, BIDI_L }, // YI SYLLABLE ZZIP
+ { 0xA2D4, BIDI_L }, // YI SYLLABLE ZZIET
+ { 0xA2D5, BIDI_L }, // YI SYLLABLE ZZIEX
+ { 0xA2D6, BIDI_L }, // YI SYLLABLE ZZIE
+ { 0xA2D7, BIDI_L }, // YI SYLLABLE ZZIEP
+ { 0xA2D8, BIDI_L }, // YI SYLLABLE ZZAT
+ { 0xA2D9, BIDI_L }, // YI SYLLABLE ZZAX
+ { 0xA2DA, BIDI_L }, // YI SYLLABLE ZZA
+ { 0xA2DB, BIDI_L }, // YI SYLLABLE ZZAP
+ { 0xA2DC, BIDI_L }, // YI SYLLABLE ZZOX
+ { 0xA2DD, BIDI_L }, // YI SYLLABLE ZZO
+ { 0xA2DE, BIDI_L }, // YI SYLLABLE ZZOP
+ { 0xA2DF, BIDI_L }, // YI SYLLABLE ZZEX
+ { 0xA2E0, BIDI_L }, // YI SYLLABLE ZZE
+ { 0xA2E1, BIDI_L }, // YI SYLLABLE ZZEP
+ { 0xA2E2, BIDI_L }, // YI SYLLABLE ZZUX
+ { 0xA2E3, BIDI_L }, // YI SYLLABLE ZZU
+ { 0xA2E4, BIDI_L }, // YI SYLLABLE ZZUP
+ { 0xA2E5, BIDI_L }, // YI SYLLABLE ZZURX
+ { 0xA2E6, BIDI_L }, // YI SYLLABLE ZZUR
+ { 0xA2E7, BIDI_L }, // YI SYLLABLE ZZYT
+ { 0xA2E8, BIDI_L }, // YI SYLLABLE ZZYX
+ { 0xA2E9, BIDI_L }, // YI SYLLABLE ZZY
+ { 0xA2EA, BIDI_L }, // YI SYLLABLE ZZYP
+ { 0xA2EB, BIDI_L }, // YI SYLLABLE ZZYRX
+ { 0xA2EC, BIDI_L }, // YI SYLLABLE ZZYR
+ { 0xA2ED, BIDI_L }, // YI SYLLABLE NZIT
+ { 0xA2EE, BIDI_L }, // YI SYLLABLE NZIX
+ { 0xA2EF, BIDI_L }, // YI SYLLABLE NZI
+ { 0xA2F0, BIDI_L }, // YI SYLLABLE NZIP
+ { 0xA2F1, BIDI_L }, // YI SYLLABLE NZIEX
+ { 0xA2F2, BIDI_L }, // YI SYLLABLE NZIE
+ { 0xA2F3, BIDI_L }, // YI SYLLABLE NZIEP
+ { 0xA2F4, BIDI_L }, // YI SYLLABLE NZAT
+ { 0xA2F5, BIDI_L }, // YI SYLLABLE NZAX
+ { 0xA2F6, BIDI_L }, // YI SYLLABLE NZA
+ { 0xA2F7, BIDI_L }, // YI SYLLABLE NZAP
+ { 0xA2F8, BIDI_L }, // YI SYLLABLE NZUOX
+ { 0xA2F9, BIDI_L }, // YI SYLLABLE NZUO
+ { 0xA2FA, BIDI_L }, // YI SYLLABLE NZOX
+ { 0xA2FB, BIDI_L }, // YI SYLLABLE NZOP
+ { 0xA2FC, BIDI_L }, // YI SYLLABLE NZEX
+ { 0xA2FD, BIDI_L }, // YI SYLLABLE NZE
+ { 0xA2FE, BIDI_L }, // YI SYLLABLE NZUX
+ { 0xA2FF, BIDI_L }, // YI SYLLABLE NZU
+ { 0xA300, BIDI_L }, // YI SYLLABLE NZUP
+ { 0xA301, BIDI_L }, // YI SYLLABLE NZURX
+ { 0xA302, BIDI_L }, // YI SYLLABLE NZUR
+ { 0xA303, BIDI_L }, // YI SYLLABLE NZYT
+ { 0xA304, BIDI_L }, // YI SYLLABLE NZYX
+ { 0xA305, BIDI_L }, // YI SYLLABLE NZY
+ { 0xA306, BIDI_L }, // YI SYLLABLE NZYP
+ { 0xA307, BIDI_L }, // YI SYLLABLE NZYRX
+ { 0xA308, BIDI_L }, // YI SYLLABLE NZYR
+ { 0xA309, BIDI_L }, // YI SYLLABLE SIT
+ { 0xA30A, BIDI_L }, // YI SYLLABLE SIX
+ { 0xA30B, BIDI_L }, // YI SYLLABLE SI
+ { 0xA30C, BIDI_L }, // YI SYLLABLE SIP
+ { 0xA30D, BIDI_L }, // YI SYLLABLE SIEX
+ { 0xA30E, BIDI_L }, // YI SYLLABLE SIE
+ { 0xA30F, BIDI_L }, // YI SYLLABLE SIEP
+ { 0xA310, BIDI_L }, // YI SYLLABLE SAT
+ { 0xA311, BIDI_L }, // YI SYLLABLE SAX
+ { 0xA312, BIDI_L }, // YI SYLLABLE SA
+ { 0xA313, BIDI_L }, // YI SYLLABLE SAP
+ { 0xA314, BIDI_L }, // YI SYLLABLE SUOX
+ { 0xA315, BIDI_L }, // YI SYLLABLE SUO
+ { 0xA316, BIDI_L }, // YI SYLLABLE SUOP
+ { 0xA317, BIDI_L }, // YI SYLLABLE SOT
+ { 0xA318, BIDI_L }, // YI SYLLABLE SOX
+ { 0xA319, BIDI_L }, // YI SYLLABLE SO
+ { 0xA31A, BIDI_L }, // YI SYLLABLE SOP
+ { 0xA31B, BIDI_L }, // YI SYLLABLE SEX
+ { 0xA31C, BIDI_L }, // YI SYLLABLE SE
+ { 0xA31D, BIDI_L }, // YI SYLLABLE SEP
+ { 0xA31E, BIDI_L }, // YI SYLLABLE SUT
+ { 0xA31F, BIDI_L }, // YI SYLLABLE SUX
+ { 0xA320, BIDI_L }, // YI SYLLABLE SU
+ { 0xA321, BIDI_L }, // YI SYLLABLE SUP
+ { 0xA322, BIDI_L }, // YI SYLLABLE SURX
+ { 0xA323, BIDI_L }, // YI SYLLABLE SUR
+ { 0xA324, BIDI_L }, // YI SYLLABLE SYT
+ { 0xA325, BIDI_L }, // YI SYLLABLE SYX
+ { 0xA326, BIDI_L }, // YI SYLLABLE SY
+ { 0xA327, BIDI_L }, // YI SYLLABLE SYP
+ { 0xA328, BIDI_L }, // YI SYLLABLE SYRX
+ { 0xA329, BIDI_L }, // YI SYLLABLE SYR
+ { 0xA32A, BIDI_L }, // YI SYLLABLE SSIT
+ { 0xA32B, BIDI_L }, // YI SYLLABLE SSIX
+ { 0xA32C, BIDI_L }, // YI SYLLABLE SSI
+ { 0xA32D, BIDI_L }, // YI SYLLABLE SSIP
+ { 0xA32E, BIDI_L }, // YI SYLLABLE SSIEX
+ { 0xA32F, BIDI_L }, // YI SYLLABLE SSIE
+ { 0xA330, BIDI_L }, // YI SYLLABLE SSIEP
+ { 0xA331, BIDI_L }, // YI SYLLABLE SSAT
+ { 0xA332, BIDI_L }, // YI SYLLABLE SSAX
+ { 0xA333, BIDI_L }, // YI SYLLABLE SSA
+ { 0xA334, BIDI_L }, // YI SYLLABLE SSAP
+ { 0xA335, BIDI_L }, // YI SYLLABLE SSOT
+ { 0xA336, BIDI_L }, // YI SYLLABLE SSOX
+ { 0xA337, BIDI_L }, // YI SYLLABLE SSO
+ { 0xA338, BIDI_L }, // YI SYLLABLE SSOP
+ { 0xA339, BIDI_L }, // YI SYLLABLE SSEX
+ { 0xA33A, BIDI_L }, // YI SYLLABLE SSE
+ { 0xA33B, BIDI_L }, // YI SYLLABLE SSEP
+ { 0xA33C, BIDI_L }, // YI SYLLABLE SSUT
+ { 0xA33D, BIDI_L }, // YI SYLLABLE SSUX
+ { 0xA33E, BIDI_L }, // YI SYLLABLE SSU
+ { 0xA33F, BIDI_L }, // YI SYLLABLE SSUP
+ { 0xA340, BIDI_L }, // YI SYLLABLE SSYT
+ { 0xA341, BIDI_L }, // YI SYLLABLE SSYX
+ { 0xA342, BIDI_L }, // YI SYLLABLE SSY
+ { 0xA343, BIDI_L }, // YI SYLLABLE SSYP
+ { 0xA344, BIDI_L }, // YI SYLLABLE SSYRX
+ { 0xA345, BIDI_L }, // YI SYLLABLE SSYR
+ { 0xA346, BIDI_L }, // YI SYLLABLE ZHAT
+ { 0xA347, BIDI_L }, // YI SYLLABLE ZHAX
+ { 0xA348, BIDI_L }, // YI SYLLABLE ZHA
+ { 0xA349, BIDI_L }, // YI SYLLABLE ZHAP
+ { 0xA34A, BIDI_L }, // YI SYLLABLE ZHUOX
+ { 0xA34B, BIDI_L }, // YI SYLLABLE ZHUO
+ { 0xA34C, BIDI_L }, // YI SYLLABLE ZHUOP
+ { 0xA34D, BIDI_L }, // YI SYLLABLE ZHOT
+ { 0xA34E, BIDI_L }, // YI SYLLABLE ZHOX
+ { 0xA34F, BIDI_L }, // YI SYLLABLE ZHO
+ { 0xA350, BIDI_L }, // YI SYLLABLE ZHOP
+ { 0xA351, BIDI_L }, // YI SYLLABLE ZHET
+ { 0xA352, BIDI_L }, // YI SYLLABLE ZHEX
+ { 0xA353, BIDI_L }, // YI SYLLABLE ZHE
+ { 0xA354, BIDI_L }, // YI SYLLABLE ZHEP
+ { 0xA355, BIDI_L }, // YI SYLLABLE ZHUT
+ { 0xA356, BIDI_L }, // YI SYLLABLE ZHUX
+ { 0xA357, BIDI_L }, // YI SYLLABLE ZHU
+ { 0xA358, BIDI_L }, // YI SYLLABLE ZHUP
+ { 0xA359, BIDI_L }, // YI SYLLABLE ZHURX
+ { 0xA35A, BIDI_L }, // YI SYLLABLE ZHUR
+ { 0xA35B, BIDI_L }, // YI SYLLABLE ZHYT
+ { 0xA35C, BIDI_L }, // YI SYLLABLE ZHYX
+ { 0xA35D, BIDI_L }, // YI SYLLABLE ZHY
+ { 0xA35E, BIDI_L }, // YI SYLLABLE ZHYP
+ { 0xA35F, BIDI_L }, // YI SYLLABLE ZHYRX
+ { 0xA360, BIDI_L }, // YI SYLLABLE ZHYR
+ { 0xA361, BIDI_L }, // YI SYLLABLE CHAT
+ { 0xA362, BIDI_L }, // YI SYLLABLE CHAX
+ { 0xA363, BIDI_L }, // YI SYLLABLE CHA
+ { 0xA364, BIDI_L }, // YI SYLLABLE CHAP
+ { 0xA365, BIDI_L }, // YI SYLLABLE CHUOT
+ { 0xA366, BIDI_L }, // YI SYLLABLE CHUOX
+ { 0xA367, BIDI_L }, // YI SYLLABLE CHUO
+ { 0xA368, BIDI_L }, // YI SYLLABLE CHUOP
+ { 0xA369, BIDI_L }, // YI SYLLABLE CHOT
+ { 0xA36A, BIDI_L }, // YI SYLLABLE CHOX
+ { 0xA36B, BIDI_L }, // YI SYLLABLE CHO
+ { 0xA36C, BIDI_L }, // YI SYLLABLE CHOP
+ { 0xA36D, BIDI_L }, // YI SYLLABLE CHET
+ { 0xA36E, BIDI_L }, // YI SYLLABLE CHEX
+ { 0xA36F, BIDI_L }, // YI SYLLABLE CHE
+ { 0xA370, BIDI_L }, // YI SYLLABLE CHEP
+ { 0xA371, BIDI_L }, // YI SYLLABLE CHUX
+ { 0xA372, BIDI_L }, // YI SYLLABLE CHU
+ { 0xA373, BIDI_L }, // YI SYLLABLE CHUP
+ { 0xA374, BIDI_L }, // YI SYLLABLE CHURX
+ { 0xA375, BIDI_L }, // YI SYLLABLE CHUR
+ { 0xA376, BIDI_L }, // YI SYLLABLE CHYT
+ { 0xA377, BIDI_L }, // YI SYLLABLE CHYX
+ { 0xA378, BIDI_L }, // YI SYLLABLE CHY
+ { 0xA379, BIDI_L }, // YI SYLLABLE CHYP
+ { 0xA37A, BIDI_L }, // YI SYLLABLE CHYRX
+ { 0xA37B, BIDI_L }, // YI SYLLABLE CHYR
+ { 0xA37C, BIDI_L }, // YI SYLLABLE RRAX
+ { 0xA37D, BIDI_L }, // YI SYLLABLE RRA
+ { 0xA37E, BIDI_L }, // YI SYLLABLE RRUOX
+ { 0xA37F, BIDI_L }, // YI SYLLABLE RRUO
+ { 0xA380, BIDI_L }, // YI SYLLABLE RROT
+ { 0xA381, BIDI_L }, // YI SYLLABLE RROX
+ { 0xA382, BIDI_L }, // YI SYLLABLE RRO
+ { 0xA383, BIDI_L }, // YI SYLLABLE RROP
+ { 0xA384, BIDI_L }, // YI SYLLABLE RRET
+ { 0xA385, BIDI_L }, // YI SYLLABLE RREX
+ { 0xA386, BIDI_L }, // YI SYLLABLE RRE
+ { 0xA387, BIDI_L }, // YI SYLLABLE RREP
+ { 0xA388, BIDI_L }, // YI SYLLABLE RRUT
+ { 0xA389, BIDI_L }, // YI SYLLABLE RRUX
+ { 0xA38A, BIDI_L }, // YI SYLLABLE RRU
+ { 0xA38B, BIDI_L }, // YI SYLLABLE RRUP
+ { 0xA38C, BIDI_L }, // YI SYLLABLE RRURX
+ { 0xA38D, BIDI_L }, // YI SYLLABLE RRUR
+ { 0xA38E, BIDI_L }, // YI SYLLABLE RRYT
+ { 0xA38F, BIDI_L }, // YI SYLLABLE RRYX
+ { 0xA390, BIDI_L }, // YI SYLLABLE RRY
+ { 0xA391, BIDI_L }, // YI SYLLABLE RRYP
+ { 0xA392, BIDI_L }, // YI SYLLABLE RRYRX
+ { 0xA393, BIDI_L }, // YI SYLLABLE RRYR
+ { 0xA394, BIDI_L }, // YI SYLLABLE NRAT
+ { 0xA395, BIDI_L }, // YI SYLLABLE NRAX
+ { 0xA396, BIDI_L }, // YI SYLLABLE NRA
+ { 0xA397, BIDI_L }, // YI SYLLABLE NRAP
+ { 0xA398, BIDI_L }, // YI SYLLABLE NROX
+ { 0xA399, BIDI_L }, // YI SYLLABLE NRO
+ { 0xA39A, BIDI_L }, // YI SYLLABLE NROP
+ { 0xA39B, BIDI_L }, // YI SYLLABLE NRET
+ { 0xA39C, BIDI_L }, // YI SYLLABLE NREX
+ { 0xA39D, BIDI_L }, // YI SYLLABLE NRE
+ { 0xA39E, BIDI_L }, // YI SYLLABLE NREP
+ { 0xA39F, BIDI_L }, // YI SYLLABLE NRUT
+ { 0xA3A0, BIDI_L }, // YI SYLLABLE NRUX
+ { 0xA3A1, BIDI_L }, // YI SYLLABLE NRU
+ { 0xA3A2, BIDI_L }, // YI SYLLABLE NRUP
+ { 0xA3A3, BIDI_L }, // YI SYLLABLE NRURX
+ { 0xA3A4, BIDI_L }, // YI SYLLABLE NRUR
+ { 0xA3A5, BIDI_L }, // YI SYLLABLE NRYT
+ { 0xA3A6, BIDI_L }, // YI SYLLABLE NRYX
+ { 0xA3A7, BIDI_L }, // YI SYLLABLE NRY
+ { 0xA3A8, BIDI_L }, // YI SYLLABLE NRYP
+ { 0xA3A9, BIDI_L }, // YI SYLLABLE NRYRX
+ { 0xA3AA, BIDI_L }, // YI SYLLABLE NRYR
+ { 0xA3AB, BIDI_L }, // YI SYLLABLE SHAT
+ { 0xA3AC, BIDI_L }, // YI SYLLABLE SHAX
+ { 0xA3AD, BIDI_L }, // YI SYLLABLE SHA
+ { 0xA3AE, BIDI_L }, // YI SYLLABLE SHAP
+ { 0xA3AF, BIDI_L }, // YI SYLLABLE SHUOX
+ { 0xA3B0, BIDI_L }, // YI SYLLABLE SHUO
+ { 0xA3B1, BIDI_L }, // YI SYLLABLE SHUOP
+ { 0xA3B2, BIDI_L }, // YI SYLLABLE SHOT
+ { 0xA3B3, BIDI_L }, // YI SYLLABLE SHOX
+ { 0xA3B4, BIDI_L }, // YI SYLLABLE SHO
+ { 0xA3B5, BIDI_L }, // YI SYLLABLE SHOP
+ { 0xA3B6, BIDI_L }, // YI SYLLABLE SHET
+ { 0xA3B7, BIDI_L }, // YI SYLLABLE SHEX
+ { 0xA3B8, BIDI_L }, // YI SYLLABLE SHE
+ { 0xA3B9, BIDI_L }, // YI SYLLABLE SHEP
+ { 0xA3BA, BIDI_L }, // YI SYLLABLE SHUT
+ { 0xA3BB, BIDI_L }, // YI SYLLABLE SHUX
+ { 0xA3BC, BIDI_L }, // YI SYLLABLE SHU
+ { 0xA3BD, BIDI_L }, // YI SYLLABLE SHUP
+ { 0xA3BE, BIDI_L }, // YI SYLLABLE SHURX
+ { 0xA3BF, BIDI_L }, // YI SYLLABLE SHUR
+ { 0xA3C0, BIDI_L }, // YI SYLLABLE SHYT
+ { 0xA3C1, BIDI_L }, // YI SYLLABLE SHYX
+ { 0xA3C2, BIDI_L }, // YI SYLLABLE SHY
+ { 0xA3C3, BIDI_L }, // YI SYLLABLE SHYP
+ { 0xA3C4, BIDI_L }, // YI SYLLABLE SHYRX
+ { 0xA3C5, BIDI_L }, // YI SYLLABLE SHYR
+ { 0xA3C6, BIDI_L }, // YI SYLLABLE RAT
+ { 0xA3C7, BIDI_L }, // YI SYLLABLE RAX
+ { 0xA3C8, BIDI_L }, // YI SYLLABLE RA
+ { 0xA3C9, BIDI_L }, // YI SYLLABLE RAP
+ { 0xA3CA, BIDI_L }, // YI SYLLABLE RUOX
+ { 0xA3CB, BIDI_L }, // YI SYLLABLE RUO
+ { 0xA3CC, BIDI_L }, // YI SYLLABLE RUOP
+ { 0xA3CD, BIDI_L }, // YI SYLLABLE ROT
+ { 0xA3CE, BIDI_L }, // YI SYLLABLE ROX
+ { 0xA3CF, BIDI_L }, // YI SYLLABLE RO
+ { 0xA3D0, BIDI_L }, // YI SYLLABLE ROP
+ { 0xA3D1, BIDI_L }, // YI SYLLABLE REX
+ { 0xA3D2, BIDI_L }, // YI SYLLABLE RE
+ { 0xA3D3, BIDI_L }, // YI SYLLABLE REP
+ { 0xA3D4, BIDI_L }, // YI SYLLABLE RUT
+ { 0xA3D5, BIDI_L }, // YI SYLLABLE RUX
+ { 0xA3D6, BIDI_L }, // YI SYLLABLE RU
+ { 0xA3D7, BIDI_L }, // YI SYLLABLE RUP
+ { 0xA3D8, BIDI_L }, // YI SYLLABLE RURX
+ { 0xA3D9, BIDI_L }, // YI SYLLABLE RUR
+ { 0xA3DA, BIDI_L }, // YI SYLLABLE RYT
+ { 0xA3DB, BIDI_L }, // YI SYLLABLE RYX
+ { 0xA3DC, BIDI_L }, // YI SYLLABLE RY
+ { 0xA3DD, BIDI_L }, // YI SYLLABLE RYP
+ { 0xA3DE, BIDI_L }, // YI SYLLABLE RYRX
+ { 0xA3DF, BIDI_L }, // YI SYLLABLE RYR
+ { 0xA3E0, BIDI_L }, // YI SYLLABLE JIT
+ { 0xA3E1, BIDI_L }, // YI SYLLABLE JIX
+ { 0xA3E2, BIDI_L }, // YI SYLLABLE JI
+ { 0xA3E3, BIDI_L }, // YI SYLLABLE JIP
+ { 0xA3E4, BIDI_L }, // YI SYLLABLE JIET
+ { 0xA3E5, BIDI_L }, // YI SYLLABLE JIEX
+ { 0xA3E6, BIDI_L }, // YI SYLLABLE JIE
+ { 0xA3E7, BIDI_L }, // YI SYLLABLE JIEP
+ { 0xA3E8, BIDI_L }, // YI SYLLABLE JUOT
+ { 0xA3E9, BIDI_L }, // YI SYLLABLE JUOX
+ { 0xA3EA, BIDI_L }, // YI SYLLABLE JUO
+ { 0xA3EB, BIDI_L }, // YI SYLLABLE JUOP
+ { 0xA3EC, BIDI_L }, // YI SYLLABLE JOT
+ { 0xA3ED, BIDI_L }, // YI SYLLABLE JOX
+ { 0xA3EE, BIDI_L }, // YI SYLLABLE JO
+ { 0xA3EF, BIDI_L }, // YI SYLLABLE JOP
+ { 0xA3F0, BIDI_L }, // YI SYLLABLE JUT
+ { 0xA3F1, BIDI_L }, // YI SYLLABLE JUX
+ { 0xA3F2, BIDI_L }, // YI SYLLABLE JU
+ { 0xA3F3, BIDI_L }, // YI SYLLABLE JUP
+ { 0xA3F4, BIDI_L }, // YI SYLLABLE JURX
+ { 0xA3F5, BIDI_L }, // YI SYLLABLE JUR
+ { 0xA3F6, BIDI_L }, // YI SYLLABLE JYT
+ { 0xA3F7, BIDI_L }, // YI SYLLABLE JYX
+ { 0xA3F8, BIDI_L }, // YI SYLLABLE JY
+ { 0xA3F9, BIDI_L }, // YI SYLLABLE JYP
+ { 0xA3FA, BIDI_L }, // YI SYLLABLE JYRX
+ { 0xA3FB, BIDI_L }, // YI SYLLABLE JYR
+ { 0xA3FC, BIDI_L }, // YI SYLLABLE QIT
+ { 0xA3FD, BIDI_L }, // YI SYLLABLE QIX
+ { 0xA3FE, BIDI_L }, // YI SYLLABLE QI
+ { 0xA3FF, BIDI_L }, // YI SYLLABLE QIP
+ { 0xA400, BIDI_L }, // YI SYLLABLE QIET
+ { 0xA401, BIDI_L }, // YI SYLLABLE QIEX
+ { 0xA402, BIDI_L }, // YI SYLLABLE QIE
+ { 0xA403, BIDI_L }, // YI SYLLABLE QIEP
+ { 0xA404, BIDI_L }, // YI SYLLABLE QUOT
+ { 0xA405, BIDI_L }, // YI SYLLABLE QUOX
+ { 0xA406, BIDI_L }, // YI SYLLABLE QUO
+ { 0xA407, BIDI_L }, // YI SYLLABLE QUOP
+ { 0xA408, BIDI_L }, // YI SYLLABLE QOT
+ { 0xA409, BIDI_L }, // YI SYLLABLE QOX
+ { 0xA40A, BIDI_L }, // YI SYLLABLE QO
+ { 0xA40B, BIDI_L }, // YI SYLLABLE QOP
+ { 0xA40C, BIDI_L }, // YI SYLLABLE QUT
+ { 0xA40D, BIDI_L }, // YI SYLLABLE QUX
+ { 0xA40E, BIDI_L }, // YI SYLLABLE QU
+ { 0xA40F, BIDI_L }, // YI SYLLABLE QUP
+ { 0xA410, BIDI_L }, // YI SYLLABLE QURX
+ { 0xA411, BIDI_L }, // YI SYLLABLE QUR
+ { 0xA412, BIDI_L }, // YI SYLLABLE QYT
+ { 0xA413, BIDI_L }, // YI SYLLABLE QYX
+ { 0xA414, BIDI_L }, // YI SYLLABLE QY
+ { 0xA415, BIDI_L }, // YI SYLLABLE QYP
+ { 0xA416, BIDI_L }, // YI SYLLABLE QYRX
+ { 0xA417, BIDI_L }, // YI SYLLABLE QYR
+ { 0xA418, BIDI_L }, // YI SYLLABLE JJIT
+ { 0xA419, BIDI_L }, // YI SYLLABLE JJIX
+ { 0xA41A, BIDI_L }, // YI SYLLABLE JJI
+ { 0xA41B, BIDI_L }, // YI SYLLABLE JJIP
+ { 0xA41C, BIDI_L }, // YI SYLLABLE JJIET
+ { 0xA41D, BIDI_L }, // YI SYLLABLE JJIEX
+ { 0xA41E, BIDI_L }, // YI SYLLABLE JJIE
+ { 0xA41F, BIDI_L }, // YI SYLLABLE JJIEP
+ { 0xA420, BIDI_L }, // YI SYLLABLE JJUOX
+ { 0xA421, BIDI_L }, // YI SYLLABLE JJUO
+ { 0xA422, BIDI_L }, // YI SYLLABLE JJUOP
+ { 0xA423, BIDI_L }, // YI SYLLABLE JJOT
+ { 0xA424, BIDI_L }, // YI SYLLABLE JJOX
+ { 0xA425, BIDI_L }, // YI SYLLABLE JJO
+ { 0xA426, BIDI_L }, // YI SYLLABLE JJOP
+ { 0xA427, BIDI_L }, // YI SYLLABLE JJUT
+ { 0xA428, BIDI_L }, // YI SYLLABLE JJUX
+ { 0xA429, BIDI_L }, // YI SYLLABLE JJU
+ { 0xA42A, BIDI_L }, // YI SYLLABLE JJUP
+ { 0xA42B, BIDI_L }, // YI SYLLABLE JJURX
+ { 0xA42C, BIDI_L }, // YI SYLLABLE JJUR
+ { 0xA42D, BIDI_L }, // YI SYLLABLE JJYT
+ { 0xA42E, BIDI_L }, // YI SYLLABLE JJYX
+ { 0xA42F, BIDI_L }, // YI SYLLABLE JJY
+ { 0xA430, BIDI_L }, // YI SYLLABLE JJYP
+ { 0xA431, BIDI_L }, // YI SYLLABLE NJIT
+ { 0xA432, BIDI_L }, // YI SYLLABLE NJIX
+ { 0xA433, BIDI_L }, // YI SYLLABLE NJI
+ { 0xA434, BIDI_L }, // YI SYLLABLE NJIP
+ { 0xA435, BIDI_L }, // YI SYLLABLE NJIET
+ { 0xA436, BIDI_L }, // YI SYLLABLE NJIEX
+ { 0xA437, BIDI_L }, // YI SYLLABLE NJIE
+ { 0xA438, BIDI_L }, // YI SYLLABLE NJIEP
+ { 0xA439, BIDI_L }, // YI SYLLABLE NJUOX
+ { 0xA43A, BIDI_L }, // YI SYLLABLE NJUO
+ { 0xA43B, BIDI_L }, // YI SYLLABLE NJOT
+ { 0xA43C, BIDI_L }, // YI SYLLABLE NJOX
+ { 0xA43D, BIDI_L }, // YI SYLLABLE NJO
+ { 0xA43E, BIDI_L }, // YI SYLLABLE NJOP
+ { 0xA43F, BIDI_L }, // YI SYLLABLE NJUX
+ { 0xA440, BIDI_L }, // YI SYLLABLE NJU
+ { 0xA441, BIDI_L }, // YI SYLLABLE NJUP
+ { 0xA442, BIDI_L }, // YI SYLLABLE NJURX
+ { 0xA443, BIDI_L }, // YI SYLLABLE NJUR
+ { 0xA444, BIDI_L }, // YI SYLLABLE NJYT
+ { 0xA445, BIDI_L }, // YI SYLLABLE NJYX
+ { 0xA446, BIDI_L }, // YI SYLLABLE NJY
+ { 0xA447, BIDI_L }, // YI SYLLABLE NJYP
+ { 0xA448, BIDI_L }, // YI SYLLABLE NJYRX
+ { 0xA449, BIDI_L }, // YI SYLLABLE NJYR
+ { 0xA44A, BIDI_L }, // YI SYLLABLE NYIT
+ { 0xA44B, BIDI_L }, // YI SYLLABLE NYIX
+ { 0xA44C, BIDI_L }, // YI SYLLABLE NYI
+ { 0xA44D, BIDI_L }, // YI SYLLABLE NYIP
+ { 0xA44E, BIDI_L }, // YI SYLLABLE NYIET
+ { 0xA44F, BIDI_L }, // YI SYLLABLE NYIEX
+ { 0xA450, BIDI_L }, // YI SYLLABLE NYIE
+ { 0xA451, BIDI_L }, // YI SYLLABLE NYIEP
+ { 0xA452, BIDI_L }, // YI SYLLABLE NYUOX
+ { 0xA453, BIDI_L }, // YI SYLLABLE NYUO
+ { 0xA454, BIDI_L }, // YI SYLLABLE NYUOP
+ { 0xA455, BIDI_L }, // YI SYLLABLE NYOT
+ { 0xA456, BIDI_L }, // YI SYLLABLE NYOX
+ { 0xA457, BIDI_L }, // YI SYLLABLE NYO
+ { 0xA458, BIDI_L }, // YI SYLLABLE NYOP
+ { 0xA459, BIDI_L }, // YI SYLLABLE NYUT
+ { 0xA45A, BIDI_L }, // YI SYLLABLE NYUX
+ { 0xA45B, BIDI_L }, // YI SYLLABLE NYU
+ { 0xA45C, BIDI_L }, // YI SYLLABLE NYUP
+ { 0xA45D, BIDI_L }, // YI SYLLABLE XIT
+ { 0xA45E, BIDI_L }, // YI SYLLABLE XIX
+ { 0xA45F, BIDI_L }, // YI SYLLABLE XI
+ { 0xA460, BIDI_L }, // YI SYLLABLE XIP
+ { 0xA461, BIDI_L }, // YI SYLLABLE XIET
+ { 0xA462, BIDI_L }, // YI SYLLABLE XIEX
+ { 0xA463, BIDI_L }, // YI SYLLABLE XIE
+ { 0xA464, BIDI_L }, // YI SYLLABLE XIEP
+ { 0xA465, BIDI_L }, // YI SYLLABLE XUOX
+ { 0xA466, BIDI_L }, // YI SYLLABLE XUO
+ { 0xA467, BIDI_L }, // YI SYLLABLE XOT
+ { 0xA468, BIDI_L }, // YI SYLLABLE XOX
+ { 0xA469, BIDI_L }, // YI SYLLABLE XO
+ { 0xA46A, BIDI_L }, // YI SYLLABLE XOP
+ { 0xA46B, BIDI_L }, // YI SYLLABLE XYT
+ { 0xA46C, BIDI_L }, // YI SYLLABLE XYX
+ { 0xA46D, BIDI_L }, // YI SYLLABLE XY
+ { 0xA46E, BIDI_L }, // YI SYLLABLE XYP
+ { 0xA46F, BIDI_L }, // YI SYLLABLE XYRX
+ { 0xA470, BIDI_L }, // YI SYLLABLE XYR
+ { 0xA471, BIDI_L }, // YI SYLLABLE YIT
+ { 0xA472, BIDI_L }, // YI SYLLABLE YIX
+ { 0xA473, BIDI_L }, // YI SYLLABLE YI
+ { 0xA474, BIDI_L }, // YI SYLLABLE YIP
+ { 0xA475, BIDI_L }, // YI SYLLABLE YIET
+ { 0xA476, BIDI_L }, // YI SYLLABLE YIEX
+ { 0xA477, BIDI_L }, // YI SYLLABLE YIE
+ { 0xA478, BIDI_L }, // YI SYLLABLE YIEP
+ { 0xA479, BIDI_L }, // YI SYLLABLE YUOT
+ { 0xA47A, BIDI_L }, // YI SYLLABLE YUOX
+ { 0xA47B, BIDI_L }, // YI SYLLABLE YUO
+ { 0xA47C, BIDI_L }, // YI SYLLABLE YUOP
+ { 0xA47D, BIDI_L }, // YI SYLLABLE YOT
+ { 0xA47E, BIDI_L }, // YI SYLLABLE YOX
+ { 0xA47F, BIDI_L }, // YI SYLLABLE YO
+ { 0xA480, BIDI_L }, // YI SYLLABLE YOP
+ { 0xA481, BIDI_L }, // YI SYLLABLE YUT
+ { 0xA482, BIDI_L }, // YI SYLLABLE YUX
+ { 0xA483, BIDI_L }, // YI SYLLABLE YU
+ { 0xA484, BIDI_L }, // YI SYLLABLE YUP
+ { 0xA485, BIDI_L }, // YI SYLLABLE YURX
+ { 0xA486, BIDI_L }, // YI SYLLABLE YUR
+ { 0xA487, BIDI_L }, // YI SYLLABLE YYT
+ { 0xA488, BIDI_L }, // YI SYLLABLE YYX
+ { 0xA489, BIDI_L }, // YI SYLLABLE YY
+ { 0xA48A, BIDI_L }, // YI SYLLABLE YYP
+ { 0xA48B, BIDI_L }, // YI SYLLABLE YYRX
+ { 0xA48C, BIDI_L }, // YI SYLLABLE YYR
+ { 0xA490, BIDI_ON }, // YI RADICAL QOT
+ { 0xA491, BIDI_ON }, // YI RADICAL LI
+ { 0xA492, BIDI_ON }, // YI RADICAL KIT
+ { 0xA493, BIDI_ON }, // YI RADICAL NYIP
+ { 0xA494, BIDI_ON }, // YI RADICAL CYP
+ { 0xA495, BIDI_ON }, // YI RADICAL SSI
+ { 0xA496, BIDI_ON }, // YI RADICAL GGOP
+ { 0xA497, BIDI_ON }, // YI RADICAL GEP
+ { 0xA498, BIDI_ON }, // YI RADICAL MI
+ { 0xA499, BIDI_ON }, // YI RADICAL HXIT
+ { 0xA49A, BIDI_ON }, // YI RADICAL LYR
+ { 0xA49B, BIDI_ON }, // YI RADICAL BBUT
+ { 0xA49C, BIDI_ON }, // YI RADICAL MOP
+ { 0xA49D, BIDI_ON }, // YI RADICAL YO
+ { 0xA49E, BIDI_ON }, // YI RADICAL PUT
+ { 0xA49F, BIDI_ON }, // YI RADICAL HXUO
+ { 0xA4A0, BIDI_ON }, // YI RADICAL TAT
+ { 0xA4A1, BIDI_ON }, // YI RADICAL GA
+ { 0xA4A2, BIDI_ON }, // YI RADICAL ZUP
+ { 0xA4A3, BIDI_ON }, // YI RADICAL CYT
+ { 0xA4A4, BIDI_ON }, // YI RADICAL DDUR
+ { 0xA4A5, BIDI_ON }, // YI RADICAL BUR
+ { 0xA4A6, BIDI_ON }, // YI RADICAL GGUO
+ { 0xA4A7, BIDI_ON }, // YI RADICAL NYOP
+ { 0xA4A8, BIDI_ON }, // YI RADICAL TU
+ { 0xA4A9, BIDI_ON }, // YI RADICAL OP
+ { 0xA4AA, BIDI_ON }, // YI RADICAL JJUT
+ { 0xA4AB, BIDI_ON }, // YI RADICAL ZOT
+ { 0xA4AC, BIDI_ON }, // YI RADICAL PYT
+ { 0xA4AD, BIDI_ON }, // YI RADICAL HMO
+ { 0xA4AE, BIDI_ON }, // YI RADICAL YIT
+ { 0xA4AF, BIDI_ON }, // YI RADICAL VUR
+ { 0xA4B0, BIDI_ON }, // YI RADICAL SHY
+ { 0xA4B1, BIDI_ON }, // YI RADICAL VEP
+ { 0xA4B2, BIDI_ON }, // YI RADICAL ZA
+ { 0xA4B3, BIDI_ON }, // YI RADICAL JO
+ { 0xA4B4, BIDI_ON }, // YI RADICAL NZUP
+ { 0xA4B5, BIDI_ON }, // YI RADICAL JJY
+ { 0xA4B6, BIDI_ON }, // YI RADICAL GOT
+ { 0xA4B7, BIDI_ON }, // YI RADICAL JJIE
+ { 0xA4B8, BIDI_ON }, // YI RADICAL WO
+ { 0xA4B9, BIDI_ON }, // YI RADICAL DU
+ { 0xA4BA, BIDI_ON }, // YI RADICAL SHUR
+ { 0xA4BB, BIDI_ON }, // YI RADICAL LIE
+ { 0xA4BC, BIDI_ON }, // YI RADICAL CY
+ { 0xA4BD, BIDI_ON }, // YI RADICAL CUOP
+ { 0xA4BE, BIDI_ON }, // YI RADICAL CIP
+ { 0xA4BF, BIDI_ON }, // YI RADICAL HXOP
+ { 0xA4C0, BIDI_ON }, // YI RADICAL SHAT
+ { 0xA4C1, BIDI_ON }, // YI RADICAL ZUR
+ { 0xA4C2, BIDI_ON }, // YI RADICAL SHOP
+ { 0xA4C3, BIDI_ON }, // YI RADICAL CHE
+ { 0xA4C4, BIDI_ON }, // YI RADICAL ZZIET
+ { 0xA4C5, BIDI_ON }, // YI RADICAL NBIE
+ { 0xA4C6, BIDI_ON }, // YI RADICAL KE
+ { 0xA4D0, BIDI_L }, // LISU LETTER BA
+ { 0xA4D1, BIDI_L }, // LISU LETTER PA
+ { 0xA4D2, BIDI_L }, // LISU LETTER PHA
+ { 0xA4D3, BIDI_L }, // LISU LETTER DA
+ { 0xA4D4, BIDI_L }, // LISU LETTER TA
+ { 0xA4D5, BIDI_L }, // LISU LETTER THA
+ { 0xA4D6, BIDI_L }, // LISU LETTER GA
+ { 0xA4D7, BIDI_L }, // LISU LETTER KA
+ { 0xA4D8, BIDI_L }, // LISU LETTER KHA
+ { 0xA4D9, BIDI_L }, // LISU LETTER JA
+ { 0xA4DA, BIDI_L }, // LISU LETTER CA
+ { 0xA4DB, BIDI_L }, // LISU LETTER CHA
+ { 0xA4DC, BIDI_L }, // LISU LETTER DZA
+ { 0xA4DD, BIDI_L }, // LISU LETTER TSA
+ { 0xA4DE, BIDI_L }, // LISU LETTER TSHA
+ { 0xA4DF, BIDI_L }, // LISU LETTER MA
+ { 0xA4E0, BIDI_L }, // LISU LETTER NA
+ { 0xA4E1, BIDI_L }, // LISU LETTER LA
+ { 0xA4E2, BIDI_L }, // LISU LETTER SA
+ { 0xA4E3, BIDI_L }, // LISU LETTER ZHA
+ { 0xA4E4, BIDI_L }, // LISU LETTER ZA
+ { 0xA4E5, BIDI_L }, // LISU LETTER NGA
+ { 0xA4E6, BIDI_L }, // LISU LETTER HA
+ { 0xA4E7, BIDI_L }, // LISU LETTER XA
+ { 0xA4E8, BIDI_L }, // LISU LETTER HHA
+ { 0xA4E9, BIDI_L }, // LISU LETTER FA
+ { 0xA4EA, BIDI_L }, // LISU LETTER WA
+ { 0xA4EB, BIDI_L }, // LISU LETTER SHA
+ { 0xA4EC, BIDI_L }, // LISU LETTER YA
+ { 0xA4ED, BIDI_L }, // LISU LETTER GHA
+ { 0xA4EE, BIDI_L }, // LISU LETTER A
+ { 0xA4EF, BIDI_L }, // LISU LETTER AE
+ { 0xA4F0, BIDI_L }, // LISU LETTER E
+ { 0xA4F1, BIDI_L }, // LISU LETTER EU
+ { 0xA4F2, BIDI_L }, // LISU LETTER I
+ { 0xA4F3, BIDI_L }, // LISU LETTER O
+ { 0xA4F4, BIDI_L }, // LISU LETTER U
+ { 0xA4F5, BIDI_L }, // LISU LETTER UE
+ { 0xA4F6, BIDI_L }, // LISU LETTER UH
+ { 0xA4F7, BIDI_L }, // LISU LETTER OE
+ { 0xA4F8, BIDI_L }, // LISU LETTER TONE MYA TI
+ { 0xA4F9, BIDI_L }, // LISU LETTER TONE NA PO
+ { 0xA4FA, BIDI_L }, // LISU LETTER TONE MYA CYA
+ { 0xA4FB, BIDI_L }, // LISU LETTER TONE MYA BO
+ { 0xA4FC, BIDI_L }, // LISU LETTER TONE MYA NA
+ { 0xA4FD, BIDI_L }, // LISU LETTER TONE MYA JEU
+ { 0xA4FE, BIDI_L }, // LISU PUNCTUATION COMMA
+ { 0xA4FF, BIDI_L }, // LISU PUNCTUATION FULL STOP
+ { 0xA500, BIDI_L }, // VAI SYLLABLE EE
+ { 0xA501, BIDI_L }, // VAI SYLLABLE EEN
+ { 0xA502, BIDI_L }, // VAI SYLLABLE HEE
+ { 0xA503, BIDI_L }, // VAI SYLLABLE WEE
+ { 0xA504, BIDI_L }, // VAI SYLLABLE WEEN
+ { 0xA505, BIDI_L }, // VAI SYLLABLE PEE
+ { 0xA506, BIDI_L }, // VAI SYLLABLE BHEE
+ { 0xA507, BIDI_L }, // VAI SYLLABLE BEE
+ { 0xA508, BIDI_L }, // VAI SYLLABLE MBEE
+ { 0xA509, BIDI_L }, // VAI SYLLABLE KPEE
+ { 0xA50A, BIDI_L }, // VAI SYLLABLE MGBEE
+ { 0xA50B, BIDI_L }, // VAI SYLLABLE GBEE
+ { 0xA50C, BIDI_L }, // VAI SYLLABLE FEE
+ { 0xA50D, BIDI_L }, // VAI SYLLABLE VEE
+ { 0xA50E, BIDI_L }, // VAI SYLLABLE TEE
+ { 0xA50F, BIDI_L }, // VAI SYLLABLE THEE
+ { 0xA510, BIDI_L }, // VAI SYLLABLE DHEE
+ { 0xA511, BIDI_L }, // VAI SYLLABLE DHHEE
+ { 0xA512, BIDI_L }, // VAI SYLLABLE LEE
+ { 0xA513, BIDI_L }, // VAI SYLLABLE REE
+ { 0xA514, BIDI_L }, // VAI SYLLABLE DEE
+ { 0xA515, BIDI_L }, // VAI SYLLABLE NDEE
+ { 0xA516, BIDI_L }, // VAI SYLLABLE SEE
+ { 0xA517, BIDI_L }, // VAI SYLLABLE SHEE
+ { 0xA518, BIDI_L }, // VAI SYLLABLE ZEE
+ { 0xA519, BIDI_L }, // VAI SYLLABLE ZHEE
+ { 0xA51A, BIDI_L }, // VAI SYLLABLE CEE
+ { 0xA51B, BIDI_L }, // VAI SYLLABLE JEE
+ { 0xA51C, BIDI_L }, // VAI SYLLABLE NJEE
+ { 0xA51D, BIDI_L }, // VAI SYLLABLE YEE
+ { 0xA51E, BIDI_L }, // VAI SYLLABLE KEE
+ { 0xA51F, BIDI_L }, // VAI SYLLABLE NGGEE
+ { 0xA520, BIDI_L }, // VAI SYLLABLE GEE
+ { 0xA521, BIDI_L }, // VAI SYLLABLE MEE
+ { 0xA522, BIDI_L }, // VAI SYLLABLE NEE
+ { 0xA523, BIDI_L }, // VAI SYLLABLE NYEE
+ { 0xA524, BIDI_L }, // VAI SYLLABLE I
+ { 0xA525, BIDI_L }, // VAI SYLLABLE IN
+ { 0xA526, BIDI_L }, // VAI SYLLABLE HI
+ { 0xA527, BIDI_L }, // VAI SYLLABLE HIN
+ { 0xA528, BIDI_L }, // VAI SYLLABLE WI
+ { 0xA529, BIDI_L }, // VAI SYLLABLE WIN
+ { 0xA52A, BIDI_L }, // VAI SYLLABLE PI
+ { 0xA52B, BIDI_L }, // VAI SYLLABLE BHI
+ { 0xA52C, BIDI_L }, // VAI SYLLABLE BI
+ { 0xA52D, BIDI_L }, // VAI SYLLABLE MBI
+ { 0xA52E, BIDI_L }, // VAI SYLLABLE KPI
+ { 0xA52F, BIDI_L }, // VAI SYLLABLE MGBI
+ { 0xA530, BIDI_L }, // VAI SYLLABLE GBI
+ { 0xA531, BIDI_L }, // VAI SYLLABLE FI
+ { 0xA532, BIDI_L }, // VAI SYLLABLE VI
+ { 0xA533, BIDI_L }, // VAI SYLLABLE TI
+ { 0xA534, BIDI_L }, // VAI SYLLABLE THI
+ { 0xA535, BIDI_L }, // VAI SYLLABLE DHI
+ { 0xA536, BIDI_L }, // VAI SYLLABLE DHHI
+ { 0xA537, BIDI_L }, // VAI SYLLABLE LI
+ { 0xA538, BIDI_L }, // VAI SYLLABLE RI
+ { 0xA539, BIDI_L }, // VAI SYLLABLE DI
+ { 0xA53A, BIDI_L }, // VAI SYLLABLE NDI
+ { 0xA53B, BIDI_L }, // VAI SYLLABLE SI
+ { 0xA53C, BIDI_L }, // VAI SYLLABLE SHI
+ { 0xA53D, BIDI_L }, // VAI SYLLABLE ZI
+ { 0xA53E, BIDI_L }, // VAI SYLLABLE ZHI
+ { 0xA53F, BIDI_L }, // VAI SYLLABLE CI
+ { 0xA540, BIDI_L }, // VAI SYLLABLE JI
+ { 0xA541, BIDI_L }, // VAI SYLLABLE NJI
+ { 0xA542, BIDI_L }, // VAI SYLLABLE YI
+ { 0xA543, BIDI_L }, // VAI SYLLABLE KI
+ { 0xA544, BIDI_L }, // VAI SYLLABLE NGGI
+ { 0xA545, BIDI_L }, // VAI SYLLABLE GI
+ { 0xA546, BIDI_L }, // VAI SYLLABLE MI
+ { 0xA547, BIDI_L }, // VAI SYLLABLE NI
+ { 0xA548, BIDI_L }, // VAI SYLLABLE NYI
+ { 0xA549, BIDI_L }, // VAI SYLLABLE A
+ { 0xA54A, BIDI_L }, // VAI SYLLABLE AN
+ { 0xA54B, BIDI_L }, // VAI SYLLABLE NGAN
+ { 0xA54C, BIDI_L }, // VAI SYLLABLE HA
+ { 0xA54D, BIDI_L }, // VAI SYLLABLE HAN
+ { 0xA54E, BIDI_L }, // VAI SYLLABLE WA
+ { 0xA54F, BIDI_L }, // VAI SYLLABLE WAN
+ { 0xA550, BIDI_L }, // VAI SYLLABLE PA
+ { 0xA551, BIDI_L }, // VAI SYLLABLE BHA
+ { 0xA552, BIDI_L }, // VAI SYLLABLE BA
+ { 0xA553, BIDI_L }, // VAI SYLLABLE MBA
+ { 0xA554, BIDI_L }, // VAI SYLLABLE KPA
+ { 0xA555, BIDI_L }, // VAI SYLLABLE KPAN
+ { 0xA556, BIDI_L }, // VAI SYLLABLE MGBA
+ { 0xA557, BIDI_L }, // VAI SYLLABLE GBA
+ { 0xA558, BIDI_L }, // VAI SYLLABLE FA
+ { 0xA559, BIDI_L }, // VAI SYLLABLE VA
+ { 0xA55A, BIDI_L }, // VAI SYLLABLE TA
+ { 0xA55B, BIDI_L }, // VAI SYLLABLE THA
+ { 0xA55C, BIDI_L }, // VAI SYLLABLE DHA
+ { 0xA55D, BIDI_L }, // VAI SYLLABLE DHHA
+ { 0xA55E, BIDI_L }, // VAI SYLLABLE LA
+ { 0xA55F, BIDI_L }, // VAI SYLLABLE RA
+ { 0xA560, BIDI_L }, // VAI SYLLABLE DA
+ { 0xA561, BIDI_L }, // VAI SYLLABLE NDA
+ { 0xA562, BIDI_L }, // VAI SYLLABLE SA
+ { 0xA563, BIDI_L }, // VAI SYLLABLE SHA
+ { 0xA564, BIDI_L }, // VAI SYLLABLE ZA
+ { 0xA565, BIDI_L }, // VAI SYLLABLE ZHA
+ { 0xA566, BIDI_L }, // VAI SYLLABLE CA
+ { 0xA567, BIDI_L }, // VAI SYLLABLE JA
+ { 0xA568, BIDI_L }, // VAI SYLLABLE NJA
+ { 0xA569, BIDI_L }, // VAI SYLLABLE YA
+ { 0xA56A, BIDI_L }, // VAI SYLLABLE KA
+ { 0xA56B, BIDI_L }, // VAI SYLLABLE KAN
+ { 0xA56C, BIDI_L }, // VAI SYLLABLE NGGA
+ { 0xA56D, BIDI_L }, // VAI SYLLABLE GA
+ { 0xA56E, BIDI_L }, // VAI SYLLABLE MA
+ { 0xA56F, BIDI_L }, // VAI SYLLABLE NA
+ { 0xA570, BIDI_L }, // VAI SYLLABLE NYA
+ { 0xA571, BIDI_L }, // VAI SYLLABLE OO
+ { 0xA572, BIDI_L }, // VAI SYLLABLE OON
+ { 0xA573, BIDI_L }, // VAI SYLLABLE HOO
+ { 0xA574, BIDI_L }, // VAI SYLLABLE WOO
+ { 0xA575, BIDI_L }, // VAI SYLLABLE WOON
+ { 0xA576, BIDI_L }, // VAI SYLLABLE POO
+ { 0xA577, BIDI_L }, // VAI SYLLABLE BHOO
+ { 0xA578, BIDI_L }, // VAI SYLLABLE BOO
+ { 0xA579, BIDI_L }, // VAI SYLLABLE MBOO
+ { 0xA57A, BIDI_L }, // VAI SYLLABLE KPOO
+ { 0xA57B, BIDI_L }, // VAI SYLLABLE MGBOO
+ { 0xA57C, BIDI_L }, // VAI SYLLABLE GBOO
+ { 0xA57D, BIDI_L }, // VAI SYLLABLE FOO
+ { 0xA57E, BIDI_L }, // VAI SYLLABLE VOO
+ { 0xA57F, BIDI_L }, // VAI SYLLABLE TOO
+ { 0xA580, BIDI_L }, // VAI SYLLABLE THOO
+ { 0xA581, BIDI_L }, // VAI SYLLABLE DHOO
+ { 0xA582, BIDI_L }, // VAI SYLLABLE DHHOO
+ { 0xA583, BIDI_L }, // VAI SYLLABLE LOO
+ { 0xA584, BIDI_L }, // VAI SYLLABLE ROO
+ { 0xA585, BIDI_L }, // VAI SYLLABLE DOO
+ { 0xA586, BIDI_L }, // VAI SYLLABLE NDOO
+ { 0xA587, BIDI_L }, // VAI SYLLABLE SOO
+ { 0xA588, BIDI_L }, // VAI SYLLABLE SHOO
+ { 0xA589, BIDI_L }, // VAI SYLLABLE ZOO
+ { 0xA58A, BIDI_L }, // VAI SYLLABLE ZHOO
+ { 0xA58B, BIDI_L }, // VAI SYLLABLE COO
+ { 0xA58C, BIDI_L }, // VAI SYLLABLE JOO
+ { 0xA58D, BIDI_L }, // VAI SYLLABLE NJOO
+ { 0xA58E, BIDI_L }, // VAI SYLLABLE YOO
+ { 0xA58F, BIDI_L }, // VAI SYLLABLE KOO
+ { 0xA590, BIDI_L }, // VAI SYLLABLE NGGOO
+ { 0xA591, BIDI_L }, // VAI SYLLABLE GOO
+ { 0xA592, BIDI_L }, // VAI SYLLABLE MOO
+ { 0xA593, BIDI_L }, // VAI SYLLABLE NOO
+ { 0xA594, BIDI_L }, // VAI SYLLABLE NYOO
+ { 0xA595, BIDI_L }, // VAI SYLLABLE U
+ { 0xA596, BIDI_L }, // VAI SYLLABLE UN
+ { 0xA597, BIDI_L }, // VAI SYLLABLE HU
+ { 0xA598, BIDI_L }, // VAI SYLLABLE HUN
+ { 0xA599, BIDI_L }, // VAI SYLLABLE WU
+ { 0xA59A, BIDI_L }, // VAI SYLLABLE WUN
+ { 0xA59B, BIDI_L }, // VAI SYLLABLE PU
+ { 0xA59C, BIDI_L }, // VAI SYLLABLE BHU
+ { 0xA59D, BIDI_L }, // VAI SYLLABLE BU
+ { 0xA59E, BIDI_L }, // VAI SYLLABLE MBU
+ { 0xA59F, BIDI_L }, // VAI SYLLABLE KPU
+ { 0xA5A0, BIDI_L }, // VAI SYLLABLE MGBU
+ { 0xA5A1, BIDI_L }, // VAI SYLLABLE GBU
+ { 0xA5A2, BIDI_L }, // VAI SYLLABLE FU
+ { 0xA5A3, BIDI_L }, // VAI SYLLABLE VU
+ { 0xA5A4, BIDI_L }, // VAI SYLLABLE TU
+ { 0xA5A5, BIDI_L }, // VAI SYLLABLE THU
+ { 0xA5A6, BIDI_L }, // VAI SYLLABLE DHU
+ { 0xA5A7, BIDI_L }, // VAI SYLLABLE DHHU
+ { 0xA5A8, BIDI_L }, // VAI SYLLABLE LU
+ { 0xA5A9, BIDI_L }, // VAI SYLLABLE RU
+ { 0xA5AA, BIDI_L }, // VAI SYLLABLE DU
+ { 0xA5AB, BIDI_L }, // VAI SYLLABLE NDU
+ { 0xA5AC, BIDI_L }, // VAI SYLLABLE SU
+ { 0xA5AD, BIDI_L }, // VAI SYLLABLE SHU
+ { 0xA5AE, BIDI_L }, // VAI SYLLABLE ZU
+ { 0xA5AF, BIDI_L }, // VAI SYLLABLE ZHU
+ { 0xA5B0, BIDI_L }, // VAI SYLLABLE CU
+ { 0xA5B1, BIDI_L }, // VAI SYLLABLE JU
+ { 0xA5B2, BIDI_L }, // VAI SYLLABLE NJU
+ { 0xA5B3, BIDI_L }, // VAI SYLLABLE YU
+ { 0xA5B4, BIDI_L }, // VAI SYLLABLE KU
+ { 0xA5B5, BIDI_L }, // VAI SYLLABLE NGGU
+ { 0xA5B6, BIDI_L }, // VAI SYLLABLE GU
+ { 0xA5B7, BIDI_L }, // VAI SYLLABLE MU
+ { 0xA5B8, BIDI_L }, // VAI SYLLABLE NU
+ { 0xA5B9, BIDI_L }, // VAI SYLLABLE NYU
+ { 0xA5BA, BIDI_L }, // VAI SYLLABLE O
+ { 0xA5BB, BIDI_L }, // VAI SYLLABLE ON
+ { 0xA5BC, BIDI_L }, // VAI SYLLABLE NGON
+ { 0xA5BD, BIDI_L }, // VAI SYLLABLE HO
+ { 0xA5BE, BIDI_L }, // VAI SYLLABLE HON
+ { 0xA5BF, BIDI_L }, // VAI SYLLABLE WO
+ { 0xA5C0, BIDI_L }, // VAI SYLLABLE WON
+ { 0xA5C1, BIDI_L }, // VAI SYLLABLE PO
+ { 0xA5C2, BIDI_L }, // VAI SYLLABLE BHO
+ { 0xA5C3, BIDI_L }, // VAI SYLLABLE BO
+ { 0xA5C4, BIDI_L }, // VAI SYLLABLE MBO
+ { 0xA5C5, BIDI_L }, // VAI SYLLABLE KPO
+ { 0xA5C6, BIDI_L }, // VAI SYLLABLE MGBO
+ { 0xA5C7, BIDI_L }, // VAI SYLLABLE GBO
+ { 0xA5C8, BIDI_L }, // VAI SYLLABLE GBON
+ { 0xA5C9, BIDI_L }, // VAI SYLLABLE FO
+ { 0xA5CA, BIDI_L }, // VAI SYLLABLE VO
+ { 0xA5CB, BIDI_L }, // VAI SYLLABLE TO
+ { 0xA5CC, BIDI_L }, // VAI SYLLABLE THO
+ { 0xA5CD, BIDI_L }, // VAI SYLLABLE DHO
+ { 0xA5CE, BIDI_L }, // VAI SYLLABLE DHHO
+ { 0xA5CF, BIDI_L }, // VAI SYLLABLE LO
+ { 0xA5D0, BIDI_L }, // VAI SYLLABLE RO
+ { 0xA5D1, BIDI_L }, // VAI SYLLABLE DO
+ { 0xA5D2, BIDI_L }, // VAI SYLLABLE NDO
+ { 0xA5D3, BIDI_L }, // VAI SYLLABLE SO
+ { 0xA5D4, BIDI_L }, // VAI SYLLABLE SHO
+ { 0xA5D5, BIDI_L }, // VAI SYLLABLE ZO
+ { 0xA5D6, BIDI_L }, // VAI SYLLABLE ZHO
+ { 0xA5D7, BIDI_L }, // VAI SYLLABLE CO
+ { 0xA5D8, BIDI_L }, // VAI SYLLABLE JO
+ { 0xA5D9, BIDI_L }, // VAI SYLLABLE NJO
+ { 0xA5DA, BIDI_L }, // VAI SYLLABLE YO
+ { 0xA5DB, BIDI_L }, // VAI SYLLABLE KO
+ { 0xA5DC, BIDI_L }, // VAI SYLLABLE NGGO
+ { 0xA5DD, BIDI_L }, // VAI SYLLABLE GO
+ { 0xA5DE, BIDI_L }, // VAI SYLLABLE MO
+ { 0xA5DF, BIDI_L }, // VAI SYLLABLE NO
+ { 0xA5E0, BIDI_L }, // VAI SYLLABLE NYO
+ { 0xA5E1, BIDI_L }, // VAI SYLLABLE E
+ { 0xA5E2, BIDI_L }, // VAI SYLLABLE EN
+ { 0xA5E3, BIDI_L }, // VAI SYLLABLE NGEN
+ { 0xA5E4, BIDI_L }, // VAI SYLLABLE HE
+ { 0xA5E5, BIDI_L }, // VAI SYLLABLE HEN
+ { 0xA5E6, BIDI_L }, // VAI SYLLABLE WE
+ { 0xA5E7, BIDI_L }, // VAI SYLLABLE WEN
+ { 0xA5E8, BIDI_L }, // VAI SYLLABLE PE
+ { 0xA5E9, BIDI_L }, // VAI SYLLABLE BHE
+ { 0xA5EA, BIDI_L }, // VAI SYLLABLE BE
+ { 0xA5EB, BIDI_L }, // VAI SYLLABLE MBE
+ { 0xA5EC, BIDI_L }, // VAI SYLLABLE KPE
+ { 0xA5ED, BIDI_L }, // VAI SYLLABLE KPEN
+ { 0xA5EE, BIDI_L }, // VAI SYLLABLE MGBE
+ { 0xA5EF, BIDI_L }, // VAI SYLLABLE GBE
+ { 0xA5F0, BIDI_L }, // VAI SYLLABLE GBEN
+ { 0xA5F1, BIDI_L }, // VAI SYLLABLE FE
+ { 0xA5F2, BIDI_L }, // VAI SYLLABLE VE
+ { 0xA5F3, BIDI_L }, // VAI SYLLABLE TE
+ { 0xA5F4, BIDI_L }, // VAI SYLLABLE THE
+ { 0xA5F5, BIDI_L }, // VAI SYLLABLE DHE
+ { 0xA5F6, BIDI_L }, // VAI SYLLABLE DHHE
+ { 0xA5F7, BIDI_L }, // VAI SYLLABLE LE
+ { 0xA5F8, BIDI_L }, // VAI SYLLABLE RE
+ { 0xA5F9, BIDI_L }, // VAI SYLLABLE DE
+ { 0xA5FA, BIDI_L }, // VAI SYLLABLE NDE
+ { 0xA5FB, BIDI_L }, // VAI SYLLABLE SE
+ { 0xA5FC, BIDI_L }, // VAI SYLLABLE SHE
+ { 0xA5FD, BIDI_L }, // VAI SYLLABLE ZE
+ { 0xA5FE, BIDI_L }, // VAI SYLLABLE ZHE
+ { 0xA5FF, BIDI_L }, // VAI SYLLABLE CE
+ { 0xA600, BIDI_L }, // VAI SYLLABLE JE
+ { 0xA601, BIDI_L }, // VAI SYLLABLE NJE
+ { 0xA602, BIDI_L }, // VAI SYLLABLE YE
+ { 0xA603, BIDI_L }, // VAI SYLLABLE KE
+ { 0xA604, BIDI_L }, // VAI SYLLABLE NGGE
+ { 0xA605, BIDI_L }, // VAI SYLLABLE NGGEN
+ { 0xA606, BIDI_L }, // VAI SYLLABLE GE
+ { 0xA607, BIDI_L }, // VAI SYLLABLE GEN
+ { 0xA608, BIDI_L }, // VAI SYLLABLE ME
+ { 0xA609, BIDI_L }, // VAI SYLLABLE NE
+ { 0xA60A, BIDI_L }, // VAI SYLLABLE NYE
+ { 0xA60B, BIDI_L }, // VAI SYLLABLE NG
+ { 0xA60C, BIDI_L }, // VAI SYLLABLE LENGTHENER
+ { 0xA60D, BIDI_ON }, // VAI COMMA
+ { 0xA60E, BIDI_ON }, // VAI FULL STOP
+ { 0xA60F, BIDI_ON }, // VAI QUESTION MARK
+ { 0xA610, BIDI_L }, // VAI SYLLABLE NDOLE FA
+ { 0xA611, BIDI_L }, // VAI SYLLABLE NDOLE KA
+ { 0xA612, BIDI_L }, // VAI SYLLABLE NDOLE SOO
+ { 0xA613, BIDI_L }, // VAI SYMBOL FEENG
+ { 0xA614, BIDI_L }, // VAI SYMBOL KEENG
+ { 0xA615, BIDI_L }, // VAI SYMBOL TING
+ { 0xA616, BIDI_L }, // VAI SYMBOL NII
+ { 0xA617, BIDI_L }, // VAI SYMBOL BANG
+ { 0xA618, BIDI_L }, // VAI SYMBOL FAA
+ { 0xA619, BIDI_L }, // VAI SYMBOL TAA
+ { 0xA61A, BIDI_L }, // VAI SYMBOL DANG
+ { 0xA61B, BIDI_L }, // VAI SYMBOL DOONG
+ { 0xA61C, BIDI_L }, // VAI SYMBOL KUNG
+ { 0xA61D, BIDI_L }, // VAI SYMBOL TONG
+ { 0xA61E, BIDI_L }, // VAI SYMBOL DO-O
+ { 0xA61F, BIDI_L }, // VAI SYMBOL JONG
+ { 0xA620, BIDI_L }, // VAI DIGIT ZERO
+ { 0xA621, BIDI_L }, // VAI DIGIT ONE
+ { 0xA622, BIDI_L }, // VAI DIGIT TWO
+ { 0xA623, BIDI_L }, // VAI DIGIT THREE
+ { 0xA624, BIDI_L }, // VAI DIGIT FOUR
+ { 0xA625, BIDI_L }, // VAI DIGIT FIVE
+ { 0xA626, BIDI_L }, // VAI DIGIT SIX
+ { 0xA627, BIDI_L }, // VAI DIGIT SEVEN
+ { 0xA628, BIDI_L }, // VAI DIGIT EIGHT
+ { 0xA629, BIDI_L }, // VAI DIGIT NINE
+ { 0xA62A, BIDI_L }, // VAI SYLLABLE NDOLE MA
+ { 0xA62B, BIDI_L }, // VAI SYLLABLE NDOLE DO
+ { 0xA640, BIDI_L }, // CYRILLIC CAPITAL LETTER ZEMLYA
+ { 0xA641, BIDI_L }, // CYRILLIC SMALL LETTER ZEMLYA
+ { 0xA642, BIDI_L }, // CYRILLIC CAPITAL LETTER DZELO
+ { 0xA643, BIDI_L }, // CYRILLIC SMALL LETTER DZELO
+ { 0xA644, BIDI_L }, // CYRILLIC CAPITAL LETTER REVERSED DZE
+ { 0xA645, BIDI_L }, // CYRILLIC SMALL LETTER REVERSED DZE
+ { 0xA646, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTA
+ { 0xA647, BIDI_L }, // CYRILLIC SMALL LETTER IOTA
+ { 0xA648, BIDI_L }, // CYRILLIC CAPITAL LETTER DJERV
+ { 0xA649, BIDI_L }, // CYRILLIC SMALL LETTER DJERV
+ { 0xA64A, BIDI_L }, // CYRILLIC CAPITAL LETTER MONOGRAPH UK
+ { 0xA64B, BIDI_L }, // CYRILLIC SMALL LETTER MONOGRAPH UK
+ { 0xA64C, BIDI_L }, // CYRILLIC CAPITAL LETTER BROAD OMEGA
+ { 0xA64D, BIDI_L }, // CYRILLIC SMALL LETTER BROAD OMEGA
+ { 0xA64E, BIDI_L }, // CYRILLIC CAPITAL LETTER NEUTRAL YER
+ { 0xA64F, BIDI_L }, // CYRILLIC SMALL LETTER NEUTRAL YER
+ { 0xA650, BIDI_L }, // CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+ { 0xA651, BIDI_L }, // CYRILLIC SMALL LETTER YERU WITH BACK YER
+ { 0xA652, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTIFIED YAT
+ { 0xA653, BIDI_L }, // CYRILLIC SMALL LETTER IOTIFIED YAT
+ { 0xA654, BIDI_L }, // CYRILLIC CAPITAL LETTER REVERSED YU
+ { 0xA655, BIDI_L }, // CYRILLIC SMALL LETTER REVERSED YU
+ { 0xA656, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTIFIED A
+ { 0xA657, BIDI_L }, // CYRILLIC SMALL LETTER IOTIFIED A
+ { 0xA658, BIDI_L }, // CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+ { 0xA659, BIDI_L }, // CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+ { 0xA65A, BIDI_L }, // CYRILLIC CAPITAL LETTER BLENDED YUS
+ { 0xA65B, BIDI_L }, // CYRILLIC SMALL LETTER BLENDED YUS
+ { 0xA65C, BIDI_L }, // CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+ { 0xA65D, BIDI_L }, // CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+ { 0xA65E, BIDI_L }, // CYRILLIC CAPITAL LETTER YN
+ { 0xA65F, BIDI_L }, // CYRILLIC SMALL LETTER YN
+ { 0xA660, BIDI_L }, // CYRILLIC CAPITAL LETTER REVERSED TSE
+ { 0xA661, BIDI_L }, // CYRILLIC SMALL LETTER REVERSED TSE
+ { 0xA662, BIDI_L }, // CYRILLIC CAPITAL LETTER SOFT DE
+ { 0xA663, BIDI_L }, // CYRILLIC SMALL LETTER SOFT DE
+ { 0xA664, BIDI_L }, // CYRILLIC CAPITAL LETTER SOFT EL
+ { 0xA665, BIDI_L }, // CYRILLIC SMALL LETTER SOFT EL
+ { 0xA666, BIDI_L }, // CYRILLIC CAPITAL LETTER SOFT EM
+ { 0xA667, BIDI_L }, // CYRILLIC SMALL LETTER SOFT EM
+ { 0xA668, BIDI_L }, // CYRILLIC CAPITAL LETTER MONOCULAR O
+ { 0xA669, BIDI_L }, // CYRILLIC SMALL LETTER MONOCULAR O
+ { 0xA66A, BIDI_L }, // CYRILLIC CAPITAL LETTER BINOCULAR O
+ { 0xA66B, BIDI_L }, // CYRILLIC SMALL LETTER BINOCULAR O
+ { 0xA66C, BIDI_L }, // CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+ { 0xA66D, BIDI_L }, // CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+ { 0xA66E, BIDI_L }, // CYRILLIC LETTER MULTIOCULAR O
+ { 0xA66F, BIDI_NSM }, // COMBINING CYRILLIC VZMET
+ { 0xA670, BIDI_NSM }, // COMBINING CYRILLIC TEN MILLIONS SIGN
+ { 0xA671, BIDI_NSM }, // COMBINING CYRILLIC HUNDRED MILLIONS SIGN
+ { 0xA672, BIDI_NSM }, // COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+ { 0xA673, BIDI_ON }, // SLAVONIC ASTERISK
+ { 0xA674, BIDI_NSM }, // COMBINING CYRILLIC LETTER UKRAINIAN IE
+ { 0xA675, BIDI_NSM }, // COMBINING CYRILLIC LETTER I
+ { 0xA676, BIDI_NSM }, // COMBINING CYRILLIC LETTER YI
+ { 0xA677, BIDI_NSM }, // COMBINING CYRILLIC LETTER U
+ { 0xA678, BIDI_NSM }, // COMBINING CYRILLIC LETTER HARD SIGN
+ { 0xA679, BIDI_NSM }, // COMBINING CYRILLIC LETTER YERU
+ { 0xA67A, BIDI_NSM }, // COMBINING CYRILLIC LETTER SOFT SIGN
+ { 0xA67B, BIDI_NSM }, // COMBINING CYRILLIC LETTER OMEGA
+ { 0xA67C, BIDI_NSM }, // COMBINING CYRILLIC KAVYKA
+ { 0xA67D, BIDI_NSM }, // COMBINING CYRILLIC PAYEROK
+ { 0xA67E, BIDI_ON }, // CYRILLIC KAVYKA
+ { 0xA67F, BIDI_ON }, // CYRILLIC PAYEROK
+ { 0xA680, BIDI_L }, // CYRILLIC CAPITAL LETTER DWE
+ { 0xA681, BIDI_L }, // CYRILLIC SMALL LETTER DWE
+ { 0xA682, BIDI_L }, // CYRILLIC CAPITAL LETTER DZWE
+ { 0xA683, BIDI_L }, // CYRILLIC SMALL LETTER DZWE
+ { 0xA684, BIDI_L }, // CYRILLIC CAPITAL LETTER ZHWE
+ { 0xA685, BIDI_L }, // CYRILLIC SMALL LETTER ZHWE
+ { 0xA686, BIDI_L }, // CYRILLIC CAPITAL LETTER CCHE
+ { 0xA687, BIDI_L }, // CYRILLIC SMALL LETTER CCHE
+ { 0xA688, BIDI_L }, // CYRILLIC CAPITAL LETTER DZZE
+ { 0xA689, BIDI_L }, // CYRILLIC SMALL LETTER DZZE
+ { 0xA68A, BIDI_L }, // CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+ { 0xA68B, BIDI_L }, // CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+ { 0xA68C, BIDI_L }, // CYRILLIC CAPITAL LETTER TWE
+ { 0xA68D, BIDI_L }, // CYRILLIC SMALL LETTER TWE
+ { 0xA68E, BIDI_L }, // CYRILLIC CAPITAL LETTER TSWE
+ { 0xA68F, BIDI_L }, // CYRILLIC SMALL LETTER TSWE
+ { 0xA690, BIDI_L }, // CYRILLIC CAPITAL LETTER TSSE
+ { 0xA691, BIDI_L }, // CYRILLIC SMALL LETTER TSSE
+ { 0xA692, BIDI_L }, // CYRILLIC CAPITAL LETTER TCHE
+ { 0xA693, BIDI_L }, // CYRILLIC SMALL LETTER TCHE
+ { 0xA694, BIDI_L }, // CYRILLIC CAPITAL LETTER HWE
+ { 0xA695, BIDI_L }, // CYRILLIC SMALL LETTER HWE
+ { 0xA696, BIDI_L }, // CYRILLIC CAPITAL LETTER SHWE
+ { 0xA697, BIDI_L }, // CYRILLIC SMALL LETTER SHWE
+ { 0xA698, BIDI_L }, // CYRILLIC CAPITAL LETTER DOUBLE O
+ { 0xA699, BIDI_L }, // CYRILLIC SMALL LETTER DOUBLE O
+ { 0xA69A, BIDI_L }, // CYRILLIC CAPITAL LETTER CROSSED O
+ { 0xA69B, BIDI_L }, // CYRILLIC SMALL LETTER CROSSED O
+ { 0xA69C, BIDI_L }, // MODIFIER LETTER CYRILLIC HARD SIGN
+ { 0xA69D, BIDI_L }, // MODIFIER LETTER CYRILLIC SOFT SIGN
+ { 0xA69E, BIDI_NSM }, // COMBINING CYRILLIC LETTER EF
+ { 0xA69F, BIDI_NSM }, // COMBINING CYRILLIC LETTER IOTIFIED E
+ { 0xA6A0, BIDI_L }, // BAMUM LETTER A
+ { 0xA6A1, BIDI_L }, // BAMUM LETTER KA
+ { 0xA6A2, BIDI_L }, // BAMUM LETTER U
+ { 0xA6A3, BIDI_L }, // BAMUM LETTER KU
+ { 0xA6A4, BIDI_L }, // BAMUM LETTER EE
+ { 0xA6A5, BIDI_L }, // BAMUM LETTER REE
+ { 0xA6A6, BIDI_L }, // BAMUM LETTER TAE
+ { 0xA6A7, BIDI_L }, // BAMUM LETTER O
+ { 0xA6A8, BIDI_L }, // BAMUM LETTER NYI
+ { 0xA6A9, BIDI_L }, // BAMUM LETTER I
+ { 0xA6AA, BIDI_L }, // BAMUM LETTER LA
+ { 0xA6AB, BIDI_L }, // BAMUM LETTER PA
+ { 0xA6AC, BIDI_L }, // BAMUM LETTER RII
+ { 0xA6AD, BIDI_L }, // BAMUM LETTER RIEE
+ { 0xA6AE, BIDI_L }, // BAMUM LETTER LEEEE
+ { 0xA6AF, BIDI_L }, // BAMUM LETTER MEEEE
+ { 0xA6B0, BIDI_L }, // BAMUM LETTER TAA
+ { 0xA6B1, BIDI_L }, // BAMUM LETTER NDAA
+ { 0xA6B2, BIDI_L }, // BAMUM LETTER NJAEM
+ { 0xA6B3, BIDI_L }, // BAMUM LETTER M
+ { 0xA6B4, BIDI_L }, // BAMUM LETTER SUU
+ { 0xA6B5, BIDI_L }, // BAMUM LETTER MU
+ { 0xA6B6, BIDI_L }, // BAMUM LETTER SHII
+ { 0xA6B7, BIDI_L }, // BAMUM LETTER SI
+ { 0xA6B8, BIDI_L }, // BAMUM LETTER SHEUX
+ { 0xA6B9, BIDI_L }, // BAMUM LETTER SEUX
+ { 0xA6BA, BIDI_L }, // BAMUM LETTER KYEE
+ { 0xA6BB, BIDI_L }, // BAMUM LETTER KET
+ { 0xA6BC, BIDI_L }, // BAMUM LETTER NUAE
+ { 0xA6BD, BIDI_L }, // BAMUM LETTER NU
+ { 0xA6BE, BIDI_L }, // BAMUM LETTER NJUAE
+ { 0xA6BF, BIDI_L }, // BAMUM LETTER YOQ
+ { 0xA6C0, BIDI_L }, // BAMUM LETTER SHU
+ { 0xA6C1, BIDI_L }, // BAMUM LETTER YUQ
+ { 0xA6C2, BIDI_L }, // BAMUM LETTER YA
+ { 0xA6C3, BIDI_L }, // BAMUM LETTER NSHA
+ { 0xA6C4, BIDI_L }, // BAMUM LETTER KEUX
+ { 0xA6C5, BIDI_L }, // BAMUM LETTER PEUX
+ { 0xA6C6, BIDI_L }, // BAMUM LETTER NJEE
+ { 0xA6C7, BIDI_L }, // BAMUM LETTER NTEE
+ { 0xA6C8, BIDI_L }, // BAMUM LETTER PUE
+ { 0xA6C9, BIDI_L }, // BAMUM LETTER WUE
+ { 0xA6CA, BIDI_L }, // BAMUM LETTER PEE
+ { 0xA6CB, BIDI_L }, // BAMUM LETTER FEE
+ { 0xA6CC, BIDI_L }, // BAMUM LETTER RU
+ { 0xA6CD, BIDI_L }, // BAMUM LETTER LU
+ { 0xA6CE, BIDI_L }, // BAMUM LETTER MI
+ { 0xA6CF, BIDI_L }, // BAMUM LETTER NI
+ { 0xA6D0, BIDI_L }, // BAMUM LETTER REUX
+ { 0xA6D1, BIDI_L }, // BAMUM LETTER RAE
+ { 0xA6D2, BIDI_L }, // BAMUM LETTER KEN
+ { 0xA6D3, BIDI_L }, // BAMUM LETTER NGKWAEN
+ { 0xA6D4, BIDI_L }, // BAMUM LETTER NGGA
+ { 0xA6D5, BIDI_L }, // BAMUM LETTER NGA
+ { 0xA6D6, BIDI_L }, // BAMUM LETTER SHO
+ { 0xA6D7, BIDI_L }, // BAMUM LETTER PUAE
+ { 0xA6D8, BIDI_L }, // BAMUM LETTER FU
+ { 0xA6D9, BIDI_L }, // BAMUM LETTER FOM
+ { 0xA6DA, BIDI_L }, // BAMUM LETTER WA
+ { 0xA6DB, BIDI_L }, // BAMUM LETTER NA
+ { 0xA6DC, BIDI_L }, // BAMUM LETTER LI
+ { 0xA6DD, BIDI_L }, // BAMUM LETTER PI
+ { 0xA6DE, BIDI_L }, // BAMUM LETTER LOQ
+ { 0xA6DF, BIDI_L }, // BAMUM LETTER KO
+ { 0xA6E0, BIDI_L }, // BAMUM LETTER MBEN
+ { 0xA6E1, BIDI_L }, // BAMUM LETTER REN
+ { 0xA6E2, BIDI_L }, // BAMUM LETTER MEN
+ { 0xA6E3, BIDI_L }, // BAMUM LETTER MA
+ { 0xA6E4, BIDI_L }, // BAMUM LETTER TI
+ { 0xA6E5, BIDI_L }, // BAMUM LETTER KI
+ { 0xA6E6, BIDI_L }, // BAMUM LETTER MO
+ { 0xA6E7, BIDI_L }, // BAMUM LETTER MBAA
+ { 0xA6E8, BIDI_L }, // BAMUM LETTER TET
+ { 0xA6E9, BIDI_L }, // BAMUM LETTER KPA
+ { 0xA6EA, BIDI_L }, // BAMUM LETTER TEN
+ { 0xA6EB, BIDI_L }, // BAMUM LETTER NTUU
+ { 0xA6EC, BIDI_L }, // BAMUM LETTER SAMBA
+ { 0xA6ED, BIDI_L }, // BAMUM LETTER FAAMAE
+ { 0xA6EE, BIDI_L }, // BAMUM LETTER KOVUU
+ { 0xA6EF, BIDI_L }, // BAMUM LETTER KOGHOM
+ { 0xA6F0, BIDI_NSM }, // BAMUM COMBINING MARK KOQNDON
+ { 0xA6F1, BIDI_NSM }, // BAMUM COMBINING MARK TUKWENTIS
+ { 0xA6F2, BIDI_L }, // BAMUM NJAEMLI
+ { 0xA6F3, BIDI_L }, // BAMUM FULL STOP
+ { 0xA6F4, BIDI_L }, // BAMUM COLON
+ { 0xA6F5, BIDI_L }, // BAMUM COMMA
+ { 0xA6F6, BIDI_L }, // BAMUM SEMICOLON
+ { 0xA6F7, BIDI_L }, // BAMUM QUESTION MARK
+ { 0xA700, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YIN PING
+ { 0xA701, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YANG PING
+ { 0xA702, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YIN SHANG
+ { 0xA703, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YANG SHANG
+ { 0xA704, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YIN QU
+ { 0xA705, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YANG QU
+ { 0xA706, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YIN RU
+ { 0xA707, BIDI_ON }, // MODIFIER LETTER CHINESE TONE YANG RU
+ { 0xA708, BIDI_ON }, // MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR
+ { 0xA709, BIDI_ON }, // MODIFIER LETTER HIGH DOTTED TONE BAR
+ { 0xA70A, BIDI_ON }, // MODIFIER LETTER MID DOTTED TONE BAR
+ { 0xA70B, BIDI_ON }, // MODIFIER LETTER LOW DOTTED TONE BAR
+ { 0xA70C, BIDI_ON }, // MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR
+ { 0xA70D, BIDI_ON }, // MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR
+ { 0xA70E, BIDI_ON }, // MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR
+ { 0xA70F, BIDI_ON }, // MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR
+ { 0xA710, BIDI_ON }, // MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR
+ { 0xA711, BIDI_ON }, // MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR
+ { 0xA712, BIDI_ON }, // MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR
+ { 0xA713, BIDI_ON }, // MODIFIER LETTER HIGH LEFT-STEM TONE BAR
+ { 0xA714, BIDI_ON }, // MODIFIER LETTER MID LEFT-STEM TONE BAR
+ { 0xA715, BIDI_ON }, // MODIFIER LETTER LOW LEFT-STEM TONE BAR
+ { 0xA716, BIDI_ON }, // MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+ { 0xA717, BIDI_ON }, // MODIFIER LETTER DOT VERTICAL BAR
+ { 0xA718, BIDI_ON }, // MODIFIER LETTER DOT SLASH
+ { 0xA719, BIDI_ON }, // MODIFIER LETTER DOT HORIZONTAL BAR
+ { 0xA71A, BIDI_ON }, // MODIFIER LETTER LOWER RIGHT CORNER ANGLE
+ { 0xA71B, BIDI_ON }, // MODIFIER LETTER RAISED UP ARROW
+ { 0xA71C, BIDI_ON }, // MODIFIER LETTER RAISED DOWN ARROW
+ { 0xA71D, BIDI_ON }, // MODIFIER LETTER RAISED EXCLAMATION MARK
+ { 0xA71E, BIDI_ON }, // MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK
+ { 0xA71F, BIDI_ON }, // MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+ { 0xA720, BIDI_ON }, // MODIFIER LETTER STRESS AND HIGH TONE
+ { 0xA721, BIDI_ON }, // MODIFIER LETTER STRESS AND LOW TONE
+ { 0xA722, BIDI_L }, // LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+ { 0xA723, BIDI_L }, // LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+ { 0xA724, BIDI_L }, // LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+ { 0xA725, BIDI_L }, // LATIN SMALL LETTER EGYPTOLOGICAL AIN
+ { 0xA726, BIDI_L }, // LATIN CAPITAL LETTER HENG
+ { 0xA727, BIDI_L }, // LATIN SMALL LETTER HENG
+ { 0xA728, BIDI_L }, // LATIN CAPITAL LETTER TZ
+ { 0xA729, BIDI_L }, // LATIN SMALL LETTER TZ
+ { 0xA72A, BIDI_L }, // LATIN CAPITAL LETTER TRESILLO
+ { 0xA72B, BIDI_L }, // LATIN SMALL LETTER TRESILLO
+ { 0xA72C, BIDI_L }, // LATIN CAPITAL LETTER CUATRILLO
+ { 0xA72D, BIDI_L }, // LATIN SMALL LETTER CUATRILLO
+ { 0xA72E, BIDI_L }, // LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+ { 0xA72F, BIDI_L }, // LATIN SMALL LETTER CUATRILLO WITH COMMA
+ { 0xA730, BIDI_L }, // LATIN LETTER SMALL CAPITAL F
+ { 0xA731, BIDI_L }, // LATIN LETTER SMALL CAPITAL S
+ { 0xA732, BIDI_L }, // LATIN CAPITAL LETTER AA
+ { 0xA733, BIDI_L }, // LATIN SMALL LETTER AA
+ { 0xA734, BIDI_L }, // LATIN CAPITAL LETTER AO
+ { 0xA735, BIDI_L }, // LATIN SMALL LETTER AO
+ { 0xA736, BIDI_L }, // LATIN CAPITAL LETTER AU
+ { 0xA737, BIDI_L }, // LATIN SMALL LETTER AU
+ { 0xA738, BIDI_L }, // LATIN CAPITAL LETTER AV
+ { 0xA739, BIDI_L }, // LATIN SMALL LETTER AV
+ { 0xA73A, BIDI_L }, // LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+ { 0xA73B, BIDI_L }, // LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+ { 0xA73C, BIDI_L }, // LATIN CAPITAL LETTER AY
+ { 0xA73D, BIDI_L }, // LATIN SMALL LETTER AY
+ { 0xA73E, BIDI_L }, // LATIN CAPITAL LETTER REVERSED C WITH DOT
+ { 0xA73F, BIDI_L }, // LATIN SMALL LETTER REVERSED C WITH DOT
+ { 0xA740, BIDI_L }, // LATIN CAPITAL LETTER K WITH STROKE
+ { 0xA741, BIDI_L }, // LATIN SMALL LETTER K WITH STROKE
+ { 0xA742, BIDI_L }, // LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+ { 0xA743, BIDI_L }, // LATIN SMALL LETTER K WITH DIAGONAL STROKE
+ { 0xA744, BIDI_L }, // LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+ { 0xA745, BIDI_L }, // LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+ { 0xA746, BIDI_L }, // LATIN CAPITAL LETTER BROKEN L
+ { 0xA747, BIDI_L }, // LATIN SMALL LETTER BROKEN L
+ { 0xA748, BIDI_L }, // LATIN CAPITAL LETTER L WITH HIGH STROKE
+ { 0xA749, BIDI_L }, // LATIN SMALL LETTER L WITH HIGH STROKE
+ { 0xA74A, BIDI_L }, // LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+ { 0xA74B, BIDI_L }, // LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+ { 0xA74C, BIDI_L }, // LATIN CAPITAL LETTER O WITH LOOP
+ { 0xA74D, BIDI_L }, // LATIN SMALL LETTER O WITH LOOP
+ { 0xA74E, BIDI_L }, // LATIN CAPITAL LETTER OO
+ { 0xA74F, BIDI_L }, // LATIN SMALL LETTER OO
+ { 0xA750, BIDI_L }, // LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+ { 0xA751, BIDI_L }, // LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+ { 0xA752, BIDI_L }, // LATIN CAPITAL LETTER P WITH FLOURISH
+ { 0xA753, BIDI_L }, // LATIN SMALL LETTER P WITH FLOURISH
+ { 0xA754, BIDI_L }, // LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+ { 0xA755, BIDI_L }, // LATIN SMALL LETTER P WITH SQUIRREL TAIL
+ { 0xA756, BIDI_L }, // LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+ { 0xA757, BIDI_L }, // LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+ { 0xA758, BIDI_L }, // LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+ { 0xA759, BIDI_L }, // LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+ { 0xA75A, BIDI_L }, // LATIN CAPITAL LETTER R ROTUNDA
+ { 0xA75B, BIDI_L }, // LATIN SMALL LETTER R ROTUNDA
+ { 0xA75C, BIDI_L }, // LATIN CAPITAL LETTER RUM ROTUNDA
+ { 0xA75D, BIDI_L }, // LATIN SMALL LETTER RUM ROTUNDA
+ { 0xA75E, BIDI_L }, // LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+ { 0xA75F, BIDI_L }, // LATIN SMALL LETTER V WITH DIAGONAL STROKE
+ { 0xA760, BIDI_L }, // LATIN CAPITAL LETTER VY
+ { 0xA761, BIDI_L }, // LATIN SMALL LETTER VY
+ { 0xA762, BIDI_L }, // LATIN CAPITAL LETTER VISIGOTHIC Z
+ { 0xA763, BIDI_L }, // LATIN SMALL LETTER VISIGOTHIC Z
+ { 0xA764, BIDI_L }, // LATIN CAPITAL LETTER THORN WITH STROKE
+ { 0xA765, BIDI_L }, // LATIN SMALL LETTER THORN WITH STROKE
+ { 0xA766, BIDI_L }, // LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+ { 0xA767, BIDI_L }, // LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+ { 0xA768, BIDI_L }, // LATIN CAPITAL LETTER VEND
+ { 0xA769, BIDI_L }, // LATIN SMALL LETTER VEND
+ { 0xA76A, BIDI_L }, // LATIN CAPITAL LETTER ET
+ { 0xA76B, BIDI_L }, // LATIN SMALL LETTER ET
+ { 0xA76C, BIDI_L }, // LATIN CAPITAL LETTER IS
+ { 0xA76D, BIDI_L }, // LATIN SMALL LETTER IS
+ { 0xA76E, BIDI_L }, // LATIN CAPITAL LETTER CON
+ { 0xA76F, BIDI_L }, // LATIN SMALL LETTER CON
+ { 0xA770, BIDI_L }, // MODIFIER LETTER US
+ { 0xA771, BIDI_L }, // LATIN SMALL LETTER DUM
+ { 0xA772, BIDI_L }, // LATIN SMALL LETTER LUM
+ { 0xA773, BIDI_L }, // LATIN SMALL LETTER MUM
+ { 0xA774, BIDI_L }, // LATIN SMALL LETTER NUM
+ { 0xA775, BIDI_L }, // LATIN SMALL LETTER RUM
+ { 0xA776, BIDI_L }, // LATIN LETTER SMALL CAPITAL RUM
+ { 0xA777, BIDI_L }, // LATIN SMALL LETTER TUM
+ { 0xA778, BIDI_L }, // LATIN SMALL LETTER UM
+ { 0xA779, BIDI_L }, // LATIN CAPITAL LETTER INSULAR D
+ { 0xA77A, BIDI_L }, // LATIN SMALL LETTER INSULAR D
+ { 0xA77B, BIDI_L }, // LATIN CAPITAL LETTER INSULAR F
+ { 0xA77C, BIDI_L }, // LATIN SMALL LETTER INSULAR F
+ { 0xA77D, BIDI_L }, // LATIN CAPITAL LETTER INSULAR G
+ { 0xA77E, BIDI_L }, // LATIN CAPITAL LETTER TURNED INSULAR G
+ { 0xA77F, BIDI_L }, // LATIN SMALL LETTER TURNED INSULAR G
+ { 0xA780, BIDI_L }, // LATIN CAPITAL LETTER TURNED L
+ { 0xA781, BIDI_L }, // LATIN SMALL LETTER TURNED L
+ { 0xA782, BIDI_L }, // LATIN CAPITAL LETTER INSULAR R
+ { 0xA783, BIDI_L }, // LATIN SMALL LETTER INSULAR R
+ { 0xA784, BIDI_L }, // LATIN CAPITAL LETTER INSULAR S
+ { 0xA785, BIDI_L }, // LATIN SMALL LETTER INSULAR S
+ { 0xA786, BIDI_L }, // LATIN CAPITAL LETTER INSULAR T
+ { 0xA787, BIDI_L }, // LATIN SMALL LETTER INSULAR T
+ { 0xA788, BIDI_ON }, // MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+ { 0xA789, BIDI_L }, // MODIFIER LETTER COLON
+ { 0xA78A, BIDI_L }, // MODIFIER LETTER SHORT EQUALS SIGN
+ { 0xA78B, BIDI_L }, // LATIN CAPITAL LETTER SALTILLO
+ { 0xA78C, BIDI_L }, // LATIN SMALL LETTER SALTILLO
+ { 0xA78D, BIDI_L }, // LATIN CAPITAL LETTER TURNED H
+ { 0xA78E, BIDI_L }, // LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+ { 0xA78F, BIDI_L }, // LATIN LETTER SINOLOGICAL DOT
+ { 0xA790, BIDI_L }, // LATIN CAPITAL LETTER N WITH DESCENDER
+ { 0xA791, BIDI_L }, // LATIN SMALL LETTER N WITH DESCENDER
+ { 0xA792, BIDI_L }, // LATIN CAPITAL LETTER C WITH BAR
+ { 0xA793, BIDI_L }, // LATIN SMALL LETTER C WITH BAR
+ { 0xA794, BIDI_L }, // LATIN SMALL LETTER C WITH PALATAL HOOK
+ { 0xA795, BIDI_L }, // LATIN SMALL LETTER H WITH PALATAL HOOK
+ { 0xA796, BIDI_L }, // LATIN CAPITAL LETTER B WITH FLOURISH
+ { 0xA797, BIDI_L }, // LATIN SMALL LETTER B WITH FLOURISH
+ { 0xA798, BIDI_L }, // LATIN CAPITAL LETTER F WITH STROKE
+ { 0xA799, BIDI_L }, // LATIN SMALL LETTER F WITH STROKE
+ { 0xA79A, BIDI_L }, // LATIN CAPITAL LETTER VOLAPUK AE
+ { 0xA79B, BIDI_L }, // LATIN SMALL LETTER VOLAPUK AE
+ { 0xA79C, BIDI_L }, // LATIN CAPITAL LETTER VOLAPUK OE
+ { 0xA79D, BIDI_L }, // LATIN SMALL LETTER VOLAPUK OE
+ { 0xA79E, BIDI_L }, // LATIN CAPITAL LETTER VOLAPUK UE
+ { 0xA79F, BIDI_L }, // LATIN SMALL LETTER VOLAPUK UE
+ { 0xA7A0, BIDI_L }, // LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+ { 0xA7A1, BIDI_L }, // LATIN SMALL LETTER G WITH OBLIQUE STROKE
+ { 0xA7A2, BIDI_L }, // LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+ { 0xA7A3, BIDI_L }, // LATIN SMALL LETTER K WITH OBLIQUE STROKE
+ { 0xA7A4, BIDI_L }, // LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+ { 0xA7A5, BIDI_L }, // LATIN SMALL LETTER N WITH OBLIQUE STROKE
+ { 0xA7A6, BIDI_L }, // LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+ { 0xA7A7, BIDI_L }, // LATIN SMALL LETTER R WITH OBLIQUE STROKE
+ { 0xA7A8, BIDI_L }, // LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+ { 0xA7A9, BIDI_L }, // LATIN SMALL LETTER S WITH OBLIQUE STROKE
+ { 0xA7AA, BIDI_L }, // LATIN CAPITAL LETTER H WITH HOOK
+ { 0xA7AB, BIDI_L }, // LATIN CAPITAL LETTER REVERSED OPEN E
+ { 0xA7AC, BIDI_L }, // LATIN CAPITAL LETTER SCRIPT G
+ { 0xA7AD, BIDI_L }, // LATIN CAPITAL LETTER L WITH BELT
+ { 0xA7B0, BIDI_L }, // LATIN CAPITAL LETTER TURNED K
+ { 0xA7B1, BIDI_L }, // LATIN CAPITAL LETTER TURNED T
+ { 0xA7B2, BIDI_L }, // LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+ { 0xA7B3, BIDI_L }, // LATIN CAPITAL LETTER CHI
+ { 0xA7B4, BIDI_L }, // LATIN CAPITAL LETTER BETA
+ { 0xA7B5, BIDI_L }, // LATIN SMALL LETTER BETA
+ { 0xA7B6, BIDI_L }, // LATIN CAPITAL LETTER OMEGA
+ { 0xA7B7, BIDI_L }, // LATIN SMALL LETTER OMEGA
+ { 0xA7F7, BIDI_L }, // LATIN EPIGRAPHIC LETTER SIDEWAYS I
+ { 0xA7F8, BIDI_L }, // MODIFIER LETTER CAPITAL H WITH STROKE
+ { 0xA7F9, BIDI_L }, // MODIFIER LETTER SMALL LIGATURE OE
+ { 0xA7FA, BIDI_L }, // LATIN LETTER SMALL CAPITAL TURNED M
+ { 0xA7FB, BIDI_L }, // LATIN EPIGRAPHIC LETTER REVERSED F
+ { 0xA7FC, BIDI_L }, // LATIN EPIGRAPHIC LETTER REVERSED P
+ { 0xA7FD, BIDI_L }, // LATIN EPIGRAPHIC LETTER INVERTED M
+ { 0xA7FE, BIDI_L }, // LATIN EPIGRAPHIC LETTER I LONGA
+ { 0xA7FF, BIDI_L }, // LATIN EPIGRAPHIC LETTER ARCHAIC M
+ { 0xA800, BIDI_L }, // SYLOTI NAGRI LETTER A
+ { 0xA801, BIDI_L }, // SYLOTI NAGRI LETTER I
+ { 0xA802, BIDI_NSM }, // SYLOTI NAGRI SIGN DVISVARA
+ { 0xA803, BIDI_L }, // SYLOTI NAGRI LETTER U
+ { 0xA804, BIDI_L }, // SYLOTI NAGRI LETTER E
+ { 0xA805, BIDI_L }, // SYLOTI NAGRI LETTER O
+ { 0xA806, BIDI_NSM }, // SYLOTI NAGRI SIGN HASANTA
+ { 0xA807, BIDI_L }, // SYLOTI NAGRI LETTER KO
+ { 0xA808, BIDI_L }, // SYLOTI NAGRI LETTER KHO
+ { 0xA809, BIDI_L }, // SYLOTI NAGRI LETTER GO
+ { 0xA80A, BIDI_L }, // SYLOTI NAGRI LETTER GHO
+ { 0xA80B, BIDI_NSM }, // SYLOTI NAGRI SIGN ANUSVARA
+ { 0xA80C, BIDI_L }, // SYLOTI NAGRI LETTER CO
+ { 0xA80D, BIDI_L }, // SYLOTI NAGRI LETTER CHO
+ { 0xA80E, BIDI_L }, // SYLOTI NAGRI LETTER JO
+ { 0xA80F, BIDI_L }, // SYLOTI NAGRI LETTER JHO
+ { 0xA810, BIDI_L }, // SYLOTI NAGRI LETTER TTO
+ { 0xA811, BIDI_L }, // SYLOTI NAGRI LETTER TTHO
+ { 0xA812, BIDI_L }, // SYLOTI NAGRI LETTER DDO
+ { 0xA813, BIDI_L }, // SYLOTI NAGRI LETTER DDHO
+ { 0xA814, BIDI_L }, // SYLOTI NAGRI LETTER TO
+ { 0xA815, BIDI_L }, // SYLOTI NAGRI LETTER THO
+ { 0xA816, BIDI_L }, // SYLOTI NAGRI LETTER DO
+ { 0xA817, BIDI_L }, // SYLOTI NAGRI LETTER DHO
+ { 0xA818, BIDI_L }, // SYLOTI NAGRI LETTER NO
+ { 0xA819, BIDI_L }, // SYLOTI NAGRI LETTER PO
+ { 0xA81A, BIDI_L }, // SYLOTI NAGRI LETTER PHO
+ { 0xA81B, BIDI_L }, // SYLOTI NAGRI LETTER BO
+ { 0xA81C, BIDI_L }, // SYLOTI NAGRI LETTER BHO
+ { 0xA81D, BIDI_L }, // SYLOTI NAGRI LETTER MO
+ { 0xA81E, BIDI_L }, // SYLOTI NAGRI LETTER RO
+ { 0xA81F, BIDI_L }, // SYLOTI NAGRI LETTER LO
+ { 0xA820, BIDI_L }, // SYLOTI NAGRI LETTER RRO
+ { 0xA821, BIDI_L }, // SYLOTI NAGRI LETTER SO
+ { 0xA822, BIDI_L }, // SYLOTI NAGRI LETTER HO
+ { 0xA823, BIDI_L }, // SYLOTI NAGRI VOWEL SIGN A
+ { 0xA824, BIDI_L }, // SYLOTI NAGRI VOWEL SIGN I
+ { 0xA825, BIDI_NSM }, // SYLOTI NAGRI VOWEL SIGN U
+ { 0xA826, BIDI_NSM }, // SYLOTI NAGRI VOWEL SIGN E
+ { 0xA827, BIDI_L }, // SYLOTI NAGRI VOWEL SIGN OO
+ { 0xA828, BIDI_ON }, // SYLOTI NAGRI POETRY MARK-1
+ { 0xA829, BIDI_ON }, // SYLOTI NAGRI POETRY MARK-2
+ { 0xA82A, BIDI_ON }, // SYLOTI NAGRI POETRY MARK-3
+ { 0xA82B, BIDI_ON }, // SYLOTI NAGRI POETRY MARK-4
+ { 0xA830, BIDI_L }, // NORTH INDIC FRACTION ONE QUARTER
+ { 0xA831, BIDI_L }, // NORTH INDIC FRACTION ONE HALF
+ { 0xA832, BIDI_L }, // NORTH INDIC FRACTION THREE QUARTERS
+ { 0xA833, BIDI_L }, // NORTH INDIC FRACTION ONE SIXTEENTH
+ { 0xA834, BIDI_L }, // NORTH INDIC FRACTION ONE EIGHTH
+ { 0xA835, BIDI_L }, // NORTH INDIC FRACTION THREE SIXTEENTHS
+ { 0xA836, BIDI_L }, // NORTH INDIC QUARTER MARK
+ { 0xA837, BIDI_L }, // NORTH INDIC PLACEHOLDER MARK
+ { 0xA838, BIDI_ET }, // NORTH INDIC RUPEE MARK
+ { 0xA839, BIDI_ET }, // NORTH INDIC QUANTITY MARK
+ { 0xA840, BIDI_L }, // PHAGS-PA LETTER KA
+ { 0xA841, BIDI_L }, // PHAGS-PA LETTER KHA
+ { 0xA842, BIDI_L }, // PHAGS-PA LETTER GA
+ { 0xA843, BIDI_L }, // PHAGS-PA LETTER NGA
+ { 0xA844, BIDI_L }, // PHAGS-PA LETTER CA
+ { 0xA845, BIDI_L }, // PHAGS-PA LETTER CHA
+ { 0xA846, BIDI_L }, // PHAGS-PA LETTER JA
+ { 0xA847, BIDI_L }, // PHAGS-PA LETTER NYA
+ { 0xA848, BIDI_L }, // PHAGS-PA LETTER TA
+ { 0xA849, BIDI_L }, // PHAGS-PA LETTER THA
+ { 0xA84A, BIDI_L }, // PHAGS-PA LETTER DA
+ { 0xA84B, BIDI_L }, // PHAGS-PA LETTER NA
+ { 0xA84C, BIDI_L }, // PHAGS-PA LETTER PA
+ { 0xA84D, BIDI_L }, // PHAGS-PA LETTER PHA
+ { 0xA84E, BIDI_L }, // PHAGS-PA LETTER BA
+ { 0xA84F, BIDI_L }, // PHAGS-PA LETTER MA
+ { 0xA850, BIDI_L }, // PHAGS-PA LETTER TSA
+ { 0xA851, BIDI_L }, // PHAGS-PA LETTER TSHA
+ { 0xA852, BIDI_L }, // PHAGS-PA LETTER DZA
+ { 0xA853, BIDI_L }, // PHAGS-PA LETTER WA
+ { 0xA854, BIDI_L }, // PHAGS-PA LETTER ZHA
+ { 0xA855, BIDI_L }, // PHAGS-PA LETTER ZA
+ { 0xA856, BIDI_L }, // PHAGS-PA LETTER SMALL A
+ { 0xA857, BIDI_L }, // PHAGS-PA LETTER YA
+ { 0xA858, BIDI_L }, // PHAGS-PA LETTER RA
+ { 0xA859, BIDI_L }, // PHAGS-PA LETTER LA
+ { 0xA85A, BIDI_L }, // PHAGS-PA LETTER SHA
+ { 0xA85B, BIDI_L }, // PHAGS-PA LETTER SA
+ { 0xA85C, BIDI_L }, // PHAGS-PA LETTER HA
+ { 0xA85D, BIDI_L }, // PHAGS-PA LETTER A
+ { 0xA85E, BIDI_L }, // PHAGS-PA LETTER I
+ { 0xA85F, BIDI_L }, // PHAGS-PA LETTER U
+ { 0xA860, BIDI_L }, // PHAGS-PA LETTER E
+ { 0xA861, BIDI_L }, // PHAGS-PA LETTER O
+ { 0xA862, BIDI_L }, // PHAGS-PA LETTER QA
+ { 0xA863, BIDI_L }, // PHAGS-PA LETTER XA
+ { 0xA864, BIDI_L }, // PHAGS-PA LETTER FA
+ { 0xA865, BIDI_L }, // PHAGS-PA LETTER GGA
+ { 0xA866, BIDI_L }, // PHAGS-PA LETTER EE
+ { 0xA867, BIDI_L }, // PHAGS-PA SUBJOINED LETTER WA
+ { 0xA868, BIDI_L }, // PHAGS-PA SUBJOINED LETTER YA
+ { 0xA869, BIDI_L }, // PHAGS-PA LETTER TTA
+ { 0xA86A, BIDI_L }, // PHAGS-PA LETTER TTHA
+ { 0xA86B, BIDI_L }, // PHAGS-PA LETTER DDA
+ { 0xA86C, BIDI_L }, // PHAGS-PA LETTER NNA
+ { 0xA86D, BIDI_L }, // PHAGS-PA LETTER ALTERNATE YA
+ { 0xA86E, BIDI_L }, // PHAGS-PA LETTER VOICELESS SHA
+ { 0xA86F, BIDI_L }, // PHAGS-PA LETTER VOICED HA
+ { 0xA870, BIDI_L }, // PHAGS-PA LETTER ASPIRATED FA
+ { 0xA871, BIDI_L }, // PHAGS-PA SUBJOINED LETTER RA
+ { 0xA872, BIDI_L }, // PHAGS-PA SUPERFIXED LETTER RA
+ { 0xA873, BIDI_L }, // PHAGS-PA LETTER CANDRABINDU
+ { 0xA874, BIDI_ON }, // PHAGS-PA SINGLE HEAD MARK
+ { 0xA875, BIDI_ON }, // PHAGS-PA DOUBLE HEAD MARK
+ { 0xA876, BIDI_ON }, // PHAGS-PA MARK SHAD
+ { 0xA877, BIDI_ON }, // PHAGS-PA MARK DOUBLE SHAD
+ { 0xA880, BIDI_L }, // SAURASHTRA SIGN ANUSVARA
+ { 0xA881, BIDI_L }, // SAURASHTRA SIGN VISARGA
+ { 0xA882, BIDI_L }, // SAURASHTRA LETTER A
+ { 0xA883, BIDI_L }, // SAURASHTRA LETTER AA
+ { 0xA884, BIDI_L }, // SAURASHTRA LETTER I
+ { 0xA885, BIDI_L }, // SAURASHTRA LETTER II
+ { 0xA886, BIDI_L }, // SAURASHTRA LETTER U
+ { 0xA887, BIDI_L }, // SAURASHTRA LETTER UU
+ { 0xA888, BIDI_L }, // SAURASHTRA LETTER VOCALIC R
+ { 0xA889, BIDI_L }, // SAURASHTRA LETTER VOCALIC RR
+ { 0xA88A, BIDI_L }, // SAURASHTRA LETTER VOCALIC L
+ { 0xA88B, BIDI_L }, // SAURASHTRA LETTER VOCALIC LL
+ { 0xA88C, BIDI_L }, // SAURASHTRA LETTER E
+ { 0xA88D, BIDI_L }, // SAURASHTRA LETTER EE
+ { 0xA88E, BIDI_L }, // SAURASHTRA LETTER AI
+ { 0xA88F, BIDI_L }, // SAURASHTRA LETTER O
+ { 0xA890, BIDI_L }, // SAURASHTRA LETTER OO
+ { 0xA891, BIDI_L }, // SAURASHTRA LETTER AU
+ { 0xA892, BIDI_L }, // SAURASHTRA LETTER KA
+ { 0xA893, BIDI_L }, // SAURASHTRA LETTER KHA
+ { 0xA894, BIDI_L }, // SAURASHTRA LETTER GA
+ { 0xA895, BIDI_L }, // SAURASHTRA LETTER GHA
+ { 0xA896, BIDI_L }, // SAURASHTRA LETTER NGA
+ { 0xA897, BIDI_L }, // SAURASHTRA LETTER CA
+ { 0xA898, BIDI_L }, // SAURASHTRA LETTER CHA
+ { 0xA899, BIDI_L }, // SAURASHTRA LETTER JA
+ { 0xA89A, BIDI_L }, // SAURASHTRA LETTER JHA
+ { 0xA89B, BIDI_L }, // SAURASHTRA LETTER NYA
+ { 0xA89C, BIDI_L }, // SAURASHTRA LETTER TTA
+ { 0xA89D, BIDI_L }, // SAURASHTRA LETTER TTHA
+ { 0xA89E, BIDI_L }, // SAURASHTRA LETTER DDA
+ { 0xA89F, BIDI_L }, // SAURASHTRA LETTER DDHA
+ { 0xA8A0, BIDI_L }, // SAURASHTRA LETTER NNA
+ { 0xA8A1, BIDI_L }, // SAURASHTRA LETTER TA
+ { 0xA8A2, BIDI_L }, // SAURASHTRA LETTER THA
+ { 0xA8A3, BIDI_L }, // SAURASHTRA LETTER DA
+ { 0xA8A4, BIDI_L }, // SAURASHTRA LETTER DHA
+ { 0xA8A5, BIDI_L }, // SAURASHTRA LETTER NA
+ { 0xA8A6, BIDI_L }, // SAURASHTRA LETTER PA
+ { 0xA8A7, BIDI_L }, // SAURASHTRA LETTER PHA
+ { 0xA8A8, BIDI_L }, // SAURASHTRA LETTER BA
+ { 0xA8A9, BIDI_L }, // SAURASHTRA LETTER BHA
+ { 0xA8AA, BIDI_L }, // SAURASHTRA LETTER MA
+ { 0xA8AB, BIDI_L }, // SAURASHTRA LETTER YA
+ { 0xA8AC, BIDI_L }, // SAURASHTRA LETTER RA
+ { 0xA8AD, BIDI_L }, // SAURASHTRA LETTER LA
+ { 0xA8AE, BIDI_L }, // SAURASHTRA LETTER VA
+ { 0xA8AF, BIDI_L }, // SAURASHTRA LETTER SHA
+ { 0xA8B0, BIDI_L }, // SAURASHTRA LETTER SSA
+ { 0xA8B1, BIDI_L }, // SAURASHTRA LETTER SA
+ { 0xA8B2, BIDI_L }, // SAURASHTRA LETTER HA
+ { 0xA8B3, BIDI_L }, // SAURASHTRA LETTER LLA
+ { 0xA8B4, BIDI_L }, // SAURASHTRA CONSONANT SIGN HAARU
+ { 0xA8B5, BIDI_L }, // SAURASHTRA VOWEL SIGN AA
+ { 0xA8B6, BIDI_L }, // SAURASHTRA VOWEL SIGN I
+ { 0xA8B7, BIDI_L }, // SAURASHTRA VOWEL SIGN II
+ { 0xA8B8, BIDI_L }, // SAURASHTRA VOWEL SIGN U
+ { 0xA8B9, BIDI_L }, // SAURASHTRA VOWEL SIGN UU
+ { 0xA8BA, BIDI_L }, // SAURASHTRA VOWEL SIGN VOCALIC R
+ { 0xA8BB, BIDI_L }, // SAURASHTRA VOWEL SIGN VOCALIC RR
+ { 0xA8BC, BIDI_L }, // SAURASHTRA VOWEL SIGN VOCALIC L
+ { 0xA8BD, BIDI_L }, // SAURASHTRA VOWEL SIGN VOCALIC LL
+ { 0xA8BE, BIDI_L }, // SAURASHTRA VOWEL SIGN E
+ { 0xA8BF, BIDI_L }, // SAURASHTRA VOWEL SIGN EE
+ { 0xA8C0, BIDI_L }, // SAURASHTRA VOWEL SIGN AI
+ { 0xA8C1, BIDI_L }, // SAURASHTRA VOWEL SIGN O
+ { 0xA8C2, BIDI_L }, // SAURASHTRA VOWEL SIGN OO
+ { 0xA8C3, BIDI_L }, // SAURASHTRA VOWEL SIGN AU
+ { 0xA8C4, BIDI_NSM }, // SAURASHTRA SIGN VIRAMA
+ { 0xA8CE, BIDI_L }, // SAURASHTRA DANDA
+ { 0xA8CF, BIDI_L }, // SAURASHTRA DOUBLE DANDA
+ { 0xA8D0, BIDI_L }, // SAURASHTRA DIGIT ZERO
+ { 0xA8D1, BIDI_L }, // SAURASHTRA DIGIT ONE
+ { 0xA8D2, BIDI_L }, // SAURASHTRA DIGIT TWO
+ { 0xA8D3, BIDI_L }, // SAURASHTRA DIGIT THREE
+ { 0xA8D4, BIDI_L }, // SAURASHTRA DIGIT FOUR
+ { 0xA8D5, BIDI_L }, // SAURASHTRA DIGIT FIVE
+ { 0xA8D6, BIDI_L }, // SAURASHTRA DIGIT SIX
+ { 0xA8D7, BIDI_L }, // SAURASHTRA DIGIT SEVEN
+ { 0xA8D8, BIDI_L }, // SAURASHTRA DIGIT EIGHT
+ { 0xA8D9, BIDI_L }, // SAURASHTRA DIGIT NINE
+ { 0xA8E0, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT ZERO
+ { 0xA8E1, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT ONE
+ { 0xA8E2, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT TWO
+ { 0xA8E3, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT THREE
+ { 0xA8E4, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT FOUR
+ { 0xA8E5, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT FIVE
+ { 0xA8E6, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT SIX
+ { 0xA8E7, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT SEVEN
+ { 0xA8E8, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT EIGHT
+ { 0xA8E9, BIDI_NSM }, // COMBINING DEVANAGARI DIGIT NINE
+ { 0xA8EA, BIDI_NSM }, // COMBINING DEVANAGARI LETTER A
+ { 0xA8EB, BIDI_NSM }, // COMBINING DEVANAGARI LETTER U
+ { 0xA8EC, BIDI_NSM }, // COMBINING DEVANAGARI LETTER KA
+ { 0xA8ED, BIDI_NSM }, // COMBINING DEVANAGARI LETTER NA
+ { 0xA8EE, BIDI_NSM }, // COMBINING DEVANAGARI LETTER PA
+ { 0xA8EF, BIDI_NSM }, // COMBINING DEVANAGARI LETTER RA
+ { 0xA8F0, BIDI_NSM }, // COMBINING DEVANAGARI LETTER VI
+ { 0xA8F1, BIDI_NSM }, // COMBINING DEVANAGARI SIGN AVAGRAHA
+ { 0xA8F2, BIDI_L }, // DEVANAGARI SIGN SPACING CANDRABINDU
+ { 0xA8F3, BIDI_L }, // DEVANAGARI SIGN CANDRABINDU VIRAMA
+ { 0xA8F4, BIDI_L }, // DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA
+ { 0xA8F5, BIDI_L }, // DEVANAGARI SIGN CANDRABINDU TWO
+ { 0xA8F6, BIDI_L }, // DEVANAGARI SIGN CANDRABINDU THREE
+ { 0xA8F7, BIDI_L }, // DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+ { 0xA8F8, BIDI_L }, // DEVANAGARI SIGN PUSHPIKA
+ { 0xA8F9, BIDI_L }, // DEVANAGARI GAP FILLER
+ { 0xA8FA, BIDI_L }, // DEVANAGARI CARET
+ { 0xA8FB, BIDI_L }, // DEVANAGARI HEADSTROKE
+ { 0xA8FC, BIDI_L }, // DEVANAGARI SIGN SIDDHAM
+ { 0xA8FD, BIDI_L }, // DEVANAGARI JAIN OM
+ { 0xA900, BIDI_L }, // KAYAH LI DIGIT ZERO
+ { 0xA901, BIDI_L }, // KAYAH LI DIGIT ONE
+ { 0xA902, BIDI_L }, // KAYAH LI DIGIT TWO
+ { 0xA903, BIDI_L }, // KAYAH LI DIGIT THREE
+ { 0xA904, BIDI_L }, // KAYAH LI DIGIT FOUR
+ { 0xA905, BIDI_L }, // KAYAH LI DIGIT FIVE
+ { 0xA906, BIDI_L }, // KAYAH LI DIGIT SIX
+ { 0xA907, BIDI_L }, // KAYAH LI DIGIT SEVEN
+ { 0xA908, BIDI_L }, // KAYAH LI DIGIT EIGHT
+ { 0xA909, BIDI_L }, // KAYAH LI DIGIT NINE
+ { 0xA90A, BIDI_L }, // KAYAH LI LETTER KA
+ { 0xA90B, BIDI_L }, // KAYAH LI LETTER KHA
+ { 0xA90C, BIDI_L }, // KAYAH LI LETTER GA
+ { 0xA90D, BIDI_L }, // KAYAH LI LETTER NGA
+ { 0xA90E, BIDI_L }, // KAYAH LI LETTER SA
+ { 0xA90F, BIDI_L }, // KAYAH LI LETTER SHA
+ { 0xA910, BIDI_L }, // KAYAH LI LETTER ZA
+ { 0xA911, BIDI_L }, // KAYAH LI LETTER NYA
+ { 0xA912, BIDI_L }, // KAYAH LI LETTER TA
+ { 0xA913, BIDI_L }, // KAYAH LI LETTER HTA
+ { 0xA914, BIDI_L }, // KAYAH LI LETTER NA
+ { 0xA915, BIDI_L }, // KAYAH LI LETTER PA
+ { 0xA916, BIDI_L }, // KAYAH LI LETTER PHA
+ { 0xA917, BIDI_L }, // KAYAH LI LETTER MA
+ { 0xA918, BIDI_L }, // KAYAH LI LETTER DA
+ { 0xA919, BIDI_L }, // KAYAH LI LETTER BA
+ { 0xA91A, BIDI_L }, // KAYAH LI LETTER RA
+ { 0xA91B, BIDI_L }, // KAYAH LI LETTER YA
+ { 0xA91C, BIDI_L }, // KAYAH LI LETTER LA
+ { 0xA91D, BIDI_L }, // KAYAH LI LETTER WA
+ { 0xA91E, BIDI_L }, // KAYAH LI LETTER THA
+ { 0xA91F, BIDI_L }, // KAYAH LI LETTER HA
+ { 0xA920, BIDI_L }, // KAYAH LI LETTER VA
+ { 0xA921, BIDI_L }, // KAYAH LI LETTER CA
+ { 0xA922, BIDI_L }, // KAYAH LI LETTER A
+ { 0xA923, BIDI_L }, // KAYAH LI LETTER OE
+ { 0xA924, BIDI_L }, // KAYAH LI LETTER I
+ { 0xA925, BIDI_L }, // KAYAH LI LETTER OO
+ { 0xA926, BIDI_NSM }, // KAYAH LI VOWEL UE
+ { 0xA927, BIDI_NSM }, // KAYAH LI VOWEL E
+ { 0xA928, BIDI_NSM }, // KAYAH LI VOWEL U
+ { 0xA929, BIDI_NSM }, // KAYAH LI VOWEL EE
+ { 0xA92A, BIDI_NSM }, // KAYAH LI VOWEL O
+ { 0xA92B, BIDI_NSM }, // KAYAH LI TONE PLOPHU
+ { 0xA92C, BIDI_NSM }, // KAYAH LI TONE CALYA
+ { 0xA92D, BIDI_NSM }, // KAYAH LI TONE CALYA PLOPHU
+ { 0xA92E, BIDI_L }, // KAYAH LI SIGN CWI
+ { 0xA92F, BIDI_L }, // KAYAH LI SIGN SHYA
+ { 0xA930, BIDI_L }, // REJANG LETTER KA
+ { 0xA931, BIDI_L }, // REJANG LETTER GA
+ { 0xA932, BIDI_L }, // REJANG LETTER NGA
+ { 0xA933, BIDI_L }, // REJANG LETTER TA
+ { 0xA934, BIDI_L }, // REJANG LETTER DA
+ { 0xA935, BIDI_L }, // REJANG LETTER NA
+ { 0xA936, BIDI_L }, // REJANG LETTER PA
+ { 0xA937, BIDI_L }, // REJANG LETTER BA
+ { 0xA938, BIDI_L }, // REJANG LETTER MA
+ { 0xA939, BIDI_L }, // REJANG LETTER CA
+ { 0xA93A, BIDI_L }, // REJANG LETTER JA
+ { 0xA93B, BIDI_L }, // REJANG LETTER NYA
+ { 0xA93C, BIDI_L }, // REJANG LETTER SA
+ { 0xA93D, BIDI_L }, // REJANG LETTER RA
+ { 0xA93E, BIDI_L }, // REJANG LETTER LA
+ { 0xA93F, BIDI_L }, // REJANG LETTER YA
+ { 0xA940, BIDI_L }, // REJANG LETTER WA
+ { 0xA941, BIDI_L }, // REJANG LETTER HA
+ { 0xA942, BIDI_L }, // REJANG LETTER MBA
+ { 0xA943, BIDI_L }, // REJANG LETTER NGGA
+ { 0xA944, BIDI_L }, // REJANG LETTER NDA
+ { 0xA945, BIDI_L }, // REJANG LETTER NYJA
+ { 0xA946, BIDI_L }, // REJANG LETTER A
+ { 0xA947, BIDI_NSM }, // REJANG VOWEL SIGN I
+ { 0xA948, BIDI_NSM }, // REJANG VOWEL SIGN U
+ { 0xA949, BIDI_NSM }, // REJANG VOWEL SIGN E
+ { 0xA94A, BIDI_NSM }, // REJANG VOWEL SIGN AI
+ { 0xA94B, BIDI_NSM }, // REJANG VOWEL SIGN O
+ { 0xA94C, BIDI_NSM }, // REJANG VOWEL SIGN AU
+ { 0xA94D, BIDI_NSM }, // REJANG VOWEL SIGN EU
+ { 0xA94E, BIDI_NSM }, // REJANG VOWEL SIGN EA
+ { 0xA94F, BIDI_NSM }, // REJANG CONSONANT SIGN NG
+ { 0xA950, BIDI_NSM }, // REJANG CONSONANT SIGN N
+ { 0xA951, BIDI_NSM }, // REJANG CONSONANT SIGN R
+ { 0xA952, BIDI_L }, // REJANG CONSONANT SIGN H
+ { 0xA953, BIDI_L }, // REJANG VIRAMA
+ { 0xA95F, BIDI_L }, // REJANG SECTION MARK
+ { 0xA960, BIDI_L }, // HANGUL CHOSEONG TIKEUT-MIEUM
+ { 0xA961, BIDI_L }, // HANGUL CHOSEONG TIKEUT-PIEUP
+ { 0xA962, BIDI_L }, // HANGUL CHOSEONG TIKEUT-SIOS
+ { 0xA963, BIDI_L }, // HANGUL CHOSEONG TIKEUT-CIEUC
+ { 0xA964, BIDI_L }, // HANGUL CHOSEONG RIEUL-KIYEOK
+ { 0xA965, BIDI_L }, // HANGUL CHOSEONG RIEUL-SSANGKIYEOK
+ { 0xA966, BIDI_L }, // HANGUL CHOSEONG RIEUL-TIKEUT
+ { 0xA967, BIDI_L }, // HANGUL CHOSEONG RIEUL-SSANGTIKEUT
+ { 0xA968, BIDI_L }, // HANGUL CHOSEONG RIEUL-MIEUM
+ { 0xA969, BIDI_L }, // HANGUL CHOSEONG RIEUL-PIEUP
+ { 0xA96A, BIDI_L }, // HANGUL CHOSEONG RIEUL-SSANGPIEUP
+ { 0xA96B, BIDI_L }, // HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP
+ { 0xA96C, BIDI_L }, // HANGUL CHOSEONG RIEUL-SIOS
+ { 0xA96D, BIDI_L }, // HANGUL CHOSEONG RIEUL-CIEUC
+ { 0xA96E, BIDI_L }, // HANGUL CHOSEONG RIEUL-KHIEUKH
+ { 0xA96F, BIDI_L }, // HANGUL CHOSEONG MIEUM-KIYEOK
+ { 0xA970, BIDI_L }, // HANGUL CHOSEONG MIEUM-TIKEUT
+ { 0xA971, BIDI_L }, // HANGUL CHOSEONG MIEUM-SIOS
+ { 0xA972, BIDI_L }, // HANGUL CHOSEONG PIEUP-SIOS-THIEUTH
+ { 0xA973, BIDI_L }, // HANGUL CHOSEONG PIEUP-KHIEUKH
+ { 0xA974, BIDI_L }, // HANGUL CHOSEONG PIEUP-HIEUH
+ { 0xA975, BIDI_L }, // HANGUL CHOSEONG SSANGSIOS-PIEUP
+ { 0xA976, BIDI_L }, // HANGUL CHOSEONG IEUNG-RIEUL
+ { 0xA977, BIDI_L }, // HANGUL CHOSEONG IEUNG-HIEUH
+ { 0xA978, BIDI_L }, // HANGUL CHOSEONG SSANGCIEUC-HIEUH
+ { 0xA979, BIDI_L }, // HANGUL CHOSEONG SSANGTHIEUTH
+ { 0xA97A, BIDI_L }, // HANGUL CHOSEONG PHIEUPH-HIEUH
+ { 0xA97B, BIDI_L }, // HANGUL CHOSEONG HIEUH-SIOS
+ { 0xA97C, BIDI_L }, // HANGUL CHOSEONG SSANGYEORINHIEUH
+ { 0xA980, BIDI_NSM }, // JAVANESE SIGN PANYANGGA
+ { 0xA981, BIDI_NSM }, // JAVANESE SIGN CECAK
+ { 0xA982, BIDI_NSM }, // JAVANESE SIGN LAYAR
+ { 0xA983, BIDI_L }, // JAVANESE SIGN WIGNYAN
+ { 0xA984, BIDI_L }, // JAVANESE LETTER A
+ { 0xA985, BIDI_L }, // JAVANESE LETTER I KAWI
+ { 0xA986, BIDI_L }, // JAVANESE LETTER I
+ { 0xA987, BIDI_L }, // JAVANESE LETTER II
+ { 0xA988, BIDI_L }, // JAVANESE LETTER U
+ { 0xA989, BIDI_L }, // JAVANESE LETTER PA CEREK
+ { 0xA98A, BIDI_L }, // JAVANESE LETTER NGA LELET
+ { 0xA98B, BIDI_L }, // JAVANESE LETTER NGA LELET RASWADI
+ { 0xA98C, BIDI_L }, // JAVANESE LETTER E
+ { 0xA98D, BIDI_L }, // JAVANESE LETTER AI
+ { 0xA98E, BIDI_L }, // JAVANESE LETTER O
+ { 0xA98F, BIDI_L }, // JAVANESE LETTER KA
+ { 0xA990, BIDI_L }, // JAVANESE LETTER KA SASAK
+ { 0xA991, BIDI_L }, // JAVANESE LETTER KA MURDA
+ { 0xA992, BIDI_L }, // JAVANESE LETTER GA
+ { 0xA993, BIDI_L }, // JAVANESE LETTER GA MURDA
+ { 0xA994, BIDI_L }, // JAVANESE LETTER NGA
+ { 0xA995, BIDI_L }, // JAVANESE LETTER CA
+ { 0xA996, BIDI_L }, // JAVANESE LETTER CA MURDA
+ { 0xA997, BIDI_L }, // JAVANESE LETTER JA
+ { 0xA998, BIDI_L }, // JAVANESE LETTER NYA MURDA
+ { 0xA999, BIDI_L }, // JAVANESE LETTER JA MAHAPRANA
+ { 0xA99A, BIDI_L }, // JAVANESE LETTER NYA
+ { 0xA99B, BIDI_L }, // JAVANESE LETTER TTA
+ { 0xA99C, BIDI_L }, // JAVANESE LETTER TTA MAHAPRANA
+ { 0xA99D, BIDI_L }, // JAVANESE LETTER DDA
+ { 0xA99E, BIDI_L }, // JAVANESE LETTER DDA MAHAPRANA
+ { 0xA99F, BIDI_L }, // JAVANESE LETTER NA MURDA
+ { 0xA9A0, BIDI_L }, // JAVANESE LETTER TA
+ { 0xA9A1, BIDI_L }, // JAVANESE LETTER TA MURDA
+ { 0xA9A2, BIDI_L }, // JAVANESE LETTER DA
+ { 0xA9A3, BIDI_L }, // JAVANESE LETTER DA MAHAPRANA
+ { 0xA9A4, BIDI_L }, // JAVANESE LETTER NA
+ { 0xA9A5, BIDI_L }, // JAVANESE LETTER PA
+ { 0xA9A6, BIDI_L }, // JAVANESE LETTER PA MURDA
+ { 0xA9A7, BIDI_L }, // JAVANESE LETTER BA
+ { 0xA9A8, BIDI_L }, // JAVANESE LETTER BA MURDA
+ { 0xA9A9, BIDI_L }, // JAVANESE LETTER MA
+ { 0xA9AA, BIDI_L }, // JAVANESE LETTER YA
+ { 0xA9AB, BIDI_L }, // JAVANESE LETTER RA
+ { 0xA9AC, BIDI_L }, // JAVANESE LETTER RA AGUNG
+ { 0xA9AD, BIDI_L }, // JAVANESE LETTER LA
+ { 0xA9AE, BIDI_L }, // JAVANESE LETTER WA
+ { 0xA9AF, BIDI_L }, // JAVANESE LETTER SA MURDA
+ { 0xA9B0, BIDI_L }, // JAVANESE LETTER SA MAHAPRANA
+ { 0xA9B1, BIDI_L }, // JAVANESE LETTER SA
+ { 0xA9B2, BIDI_L }, // JAVANESE LETTER HA
+ { 0xA9B3, BIDI_NSM }, // JAVANESE SIGN CECAK TELU
+ { 0xA9B4, BIDI_L }, // JAVANESE VOWEL SIGN TARUNG
+ { 0xA9B5, BIDI_L }, // JAVANESE VOWEL SIGN TOLONG
+ { 0xA9B6, BIDI_NSM }, // JAVANESE VOWEL SIGN WULU
+ { 0xA9B7, BIDI_NSM }, // JAVANESE VOWEL SIGN WULU MELIK
+ { 0xA9B8, BIDI_NSM }, // JAVANESE VOWEL SIGN SUKU
+ { 0xA9B9, BIDI_NSM }, // JAVANESE VOWEL SIGN SUKU MENDUT
+ { 0xA9BA, BIDI_L }, // JAVANESE VOWEL SIGN TALING
+ { 0xA9BB, BIDI_L }, // JAVANESE VOWEL SIGN DIRGA MURE
+ { 0xA9BC, BIDI_NSM }, // JAVANESE VOWEL SIGN PEPET
+ { 0xA9BD, BIDI_L }, // JAVANESE CONSONANT SIGN KERET
+ { 0xA9BE, BIDI_L }, // JAVANESE CONSONANT SIGN PENGKAL
+ { 0xA9BF, BIDI_L }, // JAVANESE CONSONANT SIGN CAKRA
+ { 0xA9C0, BIDI_L }, // JAVANESE PANGKON
+ { 0xA9C1, BIDI_L }, // JAVANESE LEFT RERENGGAN
+ { 0xA9C2, BIDI_L }, // JAVANESE RIGHT RERENGGAN
+ { 0xA9C3, BIDI_L }, // JAVANESE PADA ANDAP
+ { 0xA9C4, BIDI_L }, // JAVANESE PADA MADYA
+ { 0xA9C5, BIDI_L }, // JAVANESE PADA LUHUR
+ { 0xA9C6, BIDI_L }, // JAVANESE PADA WINDU
+ { 0xA9C7, BIDI_L }, // JAVANESE PADA PANGKAT
+ { 0xA9C8, BIDI_L }, // JAVANESE PADA LINGSA
+ { 0xA9C9, BIDI_L }, // JAVANESE PADA LUNGSI
+ { 0xA9CA, BIDI_L }, // JAVANESE PADA ADEG
+ { 0xA9CB, BIDI_L }, // JAVANESE PADA ADEG ADEG
+ { 0xA9CC, BIDI_L }, // JAVANESE PADA PISELEH
+ { 0xA9CD, BIDI_L }, // JAVANESE TURNED PADA PISELEH
+ { 0xA9CF, BIDI_L }, // JAVANESE PANGRANGKEP
+ { 0xA9D0, BIDI_L }, // JAVANESE DIGIT ZERO
+ { 0xA9D1, BIDI_L }, // JAVANESE DIGIT ONE
+ { 0xA9D2, BIDI_L }, // JAVANESE DIGIT TWO
+ { 0xA9D3, BIDI_L }, // JAVANESE DIGIT THREE
+ { 0xA9D4, BIDI_L }, // JAVANESE DIGIT FOUR
+ { 0xA9D5, BIDI_L }, // JAVANESE DIGIT FIVE
+ { 0xA9D6, BIDI_L }, // JAVANESE DIGIT SIX
+ { 0xA9D7, BIDI_L }, // JAVANESE DIGIT SEVEN
+ { 0xA9D8, BIDI_L }, // JAVANESE DIGIT EIGHT
+ { 0xA9D9, BIDI_L }, // JAVANESE DIGIT NINE
+ { 0xA9DE, BIDI_L }, // JAVANESE PADA TIRTA TUMETES
+ { 0xA9DF, BIDI_L }, // JAVANESE PADA ISEN-ISEN
+ { 0xA9E0, BIDI_L }, // MYANMAR LETTER SHAN GHA
+ { 0xA9E1, BIDI_L }, // MYANMAR LETTER SHAN CHA
+ { 0xA9E2, BIDI_L }, // MYANMAR LETTER SHAN JHA
+ { 0xA9E3, BIDI_L }, // MYANMAR LETTER SHAN NNA
+ { 0xA9E4, BIDI_L }, // MYANMAR LETTER SHAN BHA
+ { 0xA9E5, BIDI_NSM }, // MYANMAR SIGN SHAN SAW
+ { 0xA9E6, BIDI_L }, // MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+ { 0xA9E7, BIDI_L }, // MYANMAR LETTER TAI LAING NYA
+ { 0xA9E8, BIDI_L }, // MYANMAR LETTER TAI LAING FA
+ { 0xA9E9, BIDI_L }, // MYANMAR LETTER TAI LAING GA
+ { 0xA9EA, BIDI_L }, // MYANMAR LETTER TAI LAING GHA
+ { 0xA9EB, BIDI_L }, // MYANMAR LETTER TAI LAING JA
+ { 0xA9EC, BIDI_L }, // MYANMAR LETTER TAI LAING JHA
+ { 0xA9ED, BIDI_L }, // MYANMAR LETTER TAI LAING DDA
+ { 0xA9EE, BIDI_L }, // MYANMAR LETTER TAI LAING DDHA
+ { 0xA9EF, BIDI_L }, // MYANMAR LETTER TAI LAING NNA
+ { 0xA9F0, BIDI_L }, // MYANMAR TAI LAING DIGIT ZERO
+ { 0xA9F1, BIDI_L }, // MYANMAR TAI LAING DIGIT ONE
+ { 0xA9F2, BIDI_L }, // MYANMAR TAI LAING DIGIT TWO
+ { 0xA9F3, BIDI_L }, // MYANMAR TAI LAING DIGIT THREE
+ { 0xA9F4, BIDI_L }, // MYANMAR TAI LAING DIGIT FOUR
+ { 0xA9F5, BIDI_L }, // MYANMAR TAI LAING DIGIT FIVE
+ { 0xA9F6, BIDI_L }, // MYANMAR TAI LAING DIGIT SIX
+ { 0xA9F7, BIDI_L }, // MYANMAR TAI LAING DIGIT SEVEN
+ { 0xA9F8, BIDI_L }, // MYANMAR TAI LAING DIGIT EIGHT
+ { 0xA9F9, BIDI_L }, // MYANMAR TAI LAING DIGIT NINE
+ { 0xA9FA, BIDI_L }, // MYANMAR LETTER TAI LAING LLA
+ { 0xA9FB, BIDI_L }, // MYANMAR LETTER TAI LAING DA
+ { 0xA9FC, BIDI_L }, // MYANMAR LETTER TAI LAING DHA
+ { 0xA9FD, BIDI_L }, // MYANMAR LETTER TAI LAING BA
+ { 0xA9FE, BIDI_L }, // MYANMAR LETTER TAI LAING BHA
+ { 0xAA00, BIDI_L }, // CHAM LETTER A
+ { 0xAA01, BIDI_L }, // CHAM LETTER I
+ { 0xAA02, BIDI_L }, // CHAM LETTER U
+ { 0xAA03, BIDI_L }, // CHAM LETTER E
+ { 0xAA04, BIDI_L }, // CHAM LETTER AI
+ { 0xAA05, BIDI_L }, // CHAM LETTER O
+ { 0xAA06, BIDI_L }, // CHAM LETTER KA
+ { 0xAA07, BIDI_L }, // CHAM LETTER KHA
+ { 0xAA08, BIDI_L }, // CHAM LETTER GA
+ { 0xAA09, BIDI_L }, // CHAM LETTER GHA
+ { 0xAA0A, BIDI_L }, // CHAM LETTER NGUE
+ { 0xAA0B, BIDI_L }, // CHAM LETTER NGA
+ { 0xAA0C, BIDI_L }, // CHAM LETTER CHA
+ { 0xAA0D, BIDI_L }, // CHAM LETTER CHHA
+ { 0xAA0E, BIDI_L }, // CHAM LETTER JA
+ { 0xAA0F, BIDI_L }, // CHAM LETTER JHA
+ { 0xAA10, BIDI_L }, // CHAM LETTER NHUE
+ { 0xAA11, BIDI_L }, // CHAM LETTER NHA
+ { 0xAA12, BIDI_L }, // CHAM LETTER NHJA
+ { 0xAA13, BIDI_L }, // CHAM LETTER TA
+ { 0xAA14, BIDI_L }, // CHAM LETTER THA
+ { 0xAA15, BIDI_L }, // CHAM LETTER DA
+ { 0xAA16, BIDI_L }, // CHAM LETTER DHA
+ { 0xAA17, BIDI_L }, // CHAM LETTER NUE
+ { 0xAA18, BIDI_L }, // CHAM LETTER NA
+ { 0xAA19, BIDI_L }, // CHAM LETTER DDA
+ { 0xAA1A, BIDI_L }, // CHAM LETTER PA
+ { 0xAA1B, BIDI_L }, // CHAM LETTER PPA
+ { 0xAA1C, BIDI_L }, // CHAM LETTER PHA
+ { 0xAA1D, BIDI_L }, // CHAM LETTER BA
+ { 0xAA1E, BIDI_L }, // CHAM LETTER BHA
+ { 0xAA1F, BIDI_L }, // CHAM LETTER MUE
+ { 0xAA20, BIDI_L }, // CHAM LETTER MA
+ { 0xAA21, BIDI_L }, // CHAM LETTER BBA
+ { 0xAA22, BIDI_L }, // CHAM LETTER YA
+ { 0xAA23, BIDI_L }, // CHAM LETTER RA
+ { 0xAA24, BIDI_L }, // CHAM LETTER LA
+ { 0xAA25, BIDI_L }, // CHAM LETTER VA
+ { 0xAA26, BIDI_L }, // CHAM LETTER SSA
+ { 0xAA27, BIDI_L }, // CHAM LETTER SA
+ { 0xAA28, BIDI_L }, // CHAM LETTER HA
+ { 0xAA29, BIDI_NSM }, // CHAM VOWEL SIGN AA
+ { 0xAA2A, BIDI_NSM }, // CHAM VOWEL SIGN I
+ { 0xAA2B, BIDI_NSM }, // CHAM VOWEL SIGN II
+ { 0xAA2C, BIDI_NSM }, // CHAM VOWEL SIGN EI
+ { 0xAA2D, BIDI_NSM }, // CHAM VOWEL SIGN U
+ { 0xAA2E, BIDI_NSM }, // CHAM VOWEL SIGN OE
+ { 0xAA2F, BIDI_L }, // CHAM VOWEL SIGN O
+ { 0xAA30, BIDI_L }, // CHAM VOWEL SIGN AI
+ { 0xAA31, BIDI_NSM }, // CHAM VOWEL SIGN AU
+ { 0xAA32, BIDI_NSM }, // CHAM VOWEL SIGN UE
+ { 0xAA33, BIDI_L }, // CHAM CONSONANT SIGN YA
+ { 0xAA34, BIDI_L }, // CHAM CONSONANT SIGN RA
+ { 0xAA35, BIDI_NSM }, // CHAM CONSONANT SIGN LA
+ { 0xAA36, BIDI_NSM }, // CHAM CONSONANT SIGN WA
+ { 0xAA40, BIDI_L }, // CHAM LETTER FINAL K
+ { 0xAA41, BIDI_L }, // CHAM LETTER FINAL G
+ { 0xAA42, BIDI_L }, // CHAM LETTER FINAL NG
+ { 0xAA43, BIDI_NSM }, // CHAM CONSONANT SIGN FINAL NG
+ { 0xAA44, BIDI_L }, // CHAM LETTER FINAL CH
+ { 0xAA45, BIDI_L }, // CHAM LETTER FINAL T
+ { 0xAA46, BIDI_L }, // CHAM LETTER FINAL N
+ { 0xAA47, BIDI_L }, // CHAM LETTER FINAL P
+ { 0xAA48, BIDI_L }, // CHAM LETTER FINAL Y
+ { 0xAA49, BIDI_L }, // CHAM LETTER FINAL R
+ { 0xAA4A, BIDI_L }, // CHAM LETTER FINAL L
+ { 0xAA4B, BIDI_L }, // CHAM LETTER FINAL SS
+ { 0xAA4C, BIDI_NSM }, // CHAM CONSONANT SIGN FINAL M
+ { 0xAA4D, BIDI_L }, // CHAM CONSONANT SIGN FINAL H
+ { 0xAA50, BIDI_L }, // CHAM DIGIT ZERO
+ { 0xAA51, BIDI_L }, // CHAM DIGIT ONE
+ { 0xAA52, BIDI_L }, // CHAM DIGIT TWO
+ { 0xAA53, BIDI_L }, // CHAM DIGIT THREE
+ { 0xAA54, BIDI_L }, // CHAM DIGIT FOUR
+ { 0xAA55, BIDI_L }, // CHAM DIGIT FIVE
+ { 0xAA56, BIDI_L }, // CHAM DIGIT SIX
+ { 0xAA57, BIDI_L }, // CHAM DIGIT SEVEN
+ { 0xAA58, BIDI_L }, // CHAM DIGIT EIGHT
+ { 0xAA59, BIDI_L }, // CHAM DIGIT NINE
+ { 0xAA5C, BIDI_L }, // CHAM PUNCTUATION SPIRAL
+ { 0xAA5D, BIDI_L }, // CHAM PUNCTUATION DANDA
+ { 0xAA5E, BIDI_L }, // CHAM PUNCTUATION DOUBLE DANDA
+ { 0xAA5F, BIDI_L }, // CHAM PUNCTUATION TRIPLE DANDA
+ { 0xAA60, BIDI_L }, // MYANMAR LETTER KHAMTI GA
+ { 0xAA61, BIDI_L }, // MYANMAR LETTER KHAMTI CA
+ { 0xAA62, BIDI_L }, // MYANMAR LETTER KHAMTI CHA
+ { 0xAA63, BIDI_L }, // MYANMAR LETTER KHAMTI JA
+ { 0xAA64, BIDI_L }, // MYANMAR LETTER KHAMTI JHA
+ { 0xAA65, BIDI_L }, // MYANMAR LETTER KHAMTI NYA
+ { 0xAA66, BIDI_L }, // MYANMAR LETTER KHAMTI TTA
+ { 0xAA67, BIDI_L }, // MYANMAR LETTER KHAMTI TTHA
+ { 0xAA68, BIDI_L }, // MYANMAR LETTER KHAMTI DDA
+ { 0xAA69, BIDI_L }, // MYANMAR LETTER KHAMTI DDHA
+ { 0xAA6A, BIDI_L }, // MYANMAR LETTER KHAMTI DHA
+ { 0xAA6B, BIDI_L }, // MYANMAR LETTER KHAMTI NA
+ { 0xAA6C, BIDI_L }, // MYANMAR LETTER KHAMTI SA
+ { 0xAA6D, BIDI_L }, // MYANMAR LETTER KHAMTI HA
+ { 0xAA6E, BIDI_L }, // MYANMAR LETTER KHAMTI HHA
+ { 0xAA6F, BIDI_L }, // MYANMAR LETTER KHAMTI FA
+ { 0xAA70, BIDI_L }, // MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+ { 0xAA71, BIDI_L }, // MYANMAR LETTER KHAMTI XA
+ { 0xAA72, BIDI_L }, // MYANMAR LETTER KHAMTI ZA
+ { 0xAA73, BIDI_L }, // MYANMAR LETTER KHAMTI RA
+ { 0xAA74, BIDI_L }, // MYANMAR LOGOGRAM KHAMTI OAY
+ { 0xAA75, BIDI_L }, // MYANMAR LOGOGRAM KHAMTI QN
+ { 0xAA76, BIDI_L }, // MYANMAR LOGOGRAM KHAMTI HM
+ { 0xAA77, BIDI_L }, // MYANMAR SYMBOL AITON EXCLAMATION
+ { 0xAA78, BIDI_L }, // MYANMAR SYMBOL AITON ONE
+ { 0xAA79, BIDI_L }, // MYANMAR SYMBOL AITON TWO
+ { 0xAA7A, BIDI_L }, // MYANMAR LETTER AITON RA
+ { 0xAA7B, BIDI_L }, // MYANMAR SIGN PAO KAREN TONE
+ { 0xAA7C, BIDI_NSM }, // MYANMAR SIGN TAI LAING TONE-2
+ { 0xAA7D, BIDI_L }, // MYANMAR SIGN TAI LAING TONE-5
+ { 0xAA7E, BIDI_L }, // MYANMAR LETTER SHWE PALAUNG CHA
+ { 0xAA7F, BIDI_L }, // MYANMAR LETTER SHWE PALAUNG SHA
+ { 0xAA80, BIDI_L }, // TAI VIET LETTER LOW KO
+ { 0xAA81, BIDI_L }, // TAI VIET LETTER HIGH KO
+ { 0xAA82, BIDI_L }, // TAI VIET LETTER LOW KHO
+ { 0xAA83, BIDI_L }, // TAI VIET LETTER HIGH KHO
+ { 0xAA84, BIDI_L }, // TAI VIET LETTER LOW KHHO
+ { 0xAA85, BIDI_L }, // TAI VIET LETTER HIGH KHHO
+ { 0xAA86, BIDI_L }, // TAI VIET LETTER LOW GO
+ { 0xAA87, BIDI_L }, // TAI VIET LETTER HIGH GO
+ { 0xAA88, BIDI_L }, // TAI VIET LETTER LOW NGO
+ { 0xAA89, BIDI_L }, // TAI VIET LETTER HIGH NGO
+ { 0xAA8A, BIDI_L }, // TAI VIET LETTER LOW CO
+ { 0xAA8B, BIDI_L }, // TAI VIET LETTER HIGH CO
+ { 0xAA8C, BIDI_L }, // TAI VIET LETTER LOW CHO
+ { 0xAA8D, BIDI_L }, // TAI VIET LETTER HIGH CHO
+ { 0xAA8E, BIDI_L }, // TAI VIET LETTER LOW SO
+ { 0xAA8F, BIDI_L }, // TAI VIET LETTER HIGH SO
+ { 0xAA90, BIDI_L }, // TAI VIET LETTER LOW NYO
+ { 0xAA91, BIDI_L }, // TAI VIET LETTER HIGH NYO
+ { 0xAA92, BIDI_L }, // TAI VIET LETTER LOW DO
+ { 0xAA93, BIDI_L }, // TAI VIET LETTER HIGH DO
+ { 0xAA94, BIDI_L }, // TAI VIET LETTER LOW TO
+ { 0xAA95, BIDI_L }, // TAI VIET LETTER HIGH TO
+ { 0xAA96, BIDI_L }, // TAI VIET LETTER LOW THO
+ { 0xAA97, BIDI_L }, // TAI VIET LETTER HIGH THO
+ { 0xAA98, BIDI_L }, // TAI VIET LETTER LOW NO
+ { 0xAA99, BIDI_L }, // TAI VIET LETTER HIGH NO
+ { 0xAA9A, BIDI_L }, // TAI VIET LETTER LOW BO
+ { 0xAA9B, BIDI_L }, // TAI VIET LETTER HIGH BO
+ { 0xAA9C, BIDI_L }, // TAI VIET LETTER LOW PO
+ { 0xAA9D, BIDI_L }, // TAI VIET LETTER HIGH PO
+ { 0xAA9E, BIDI_L }, // TAI VIET LETTER LOW PHO
+ { 0xAA9F, BIDI_L }, // TAI VIET LETTER HIGH PHO
+ { 0xAAA0, BIDI_L }, // TAI VIET LETTER LOW FO
+ { 0xAAA1, BIDI_L }, // TAI VIET LETTER HIGH FO
+ { 0xAAA2, BIDI_L }, // TAI VIET LETTER LOW MO
+ { 0xAAA3, BIDI_L }, // TAI VIET LETTER HIGH MO
+ { 0xAAA4, BIDI_L }, // TAI VIET LETTER LOW YO
+ { 0xAAA5, BIDI_L }, // TAI VIET LETTER HIGH YO
+ { 0xAAA6, BIDI_L }, // TAI VIET LETTER LOW RO
+ { 0xAAA7, BIDI_L }, // TAI VIET LETTER HIGH RO
+ { 0xAAA8, BIDI_L }, // TAI VIET LETTER LOW LO
+ { 0xAAA9, BIDI_L }, // TAI VIET LETTER HIGH LO
+ { 0xAAAA, BIDI_L }, // TAI VIET LETTER LOW VO
+ { 0xAAAB, BIDI_L }, // TAI VIET LETTER HIGH VO
+ { 0xAAAC, BIDI_L }, // TAI VIET LETTER LOW HO
+ { 0xAAAD, BIDI_L }, // TAI VIET LETTER HIGH HO
+ { 0xAAAE, BIDI_L }, // TAI VIET LETTER LOW O
+ { 0xAAAF, BIDI_L }, // TAI VIET LETTER HIGH O
+ { 0xAAB0, BIDI_NSM }, // TAI VIET MAI KANG
+ { 0xAAB1, BIDI_L }, // TAI VIET VOWEL AA
+ { 0xAAB2, BIDI_NSM }, // TAI VIET VOWEL I
+ { 0xAAB3, BIDI_NSM }, // TAI VIET VOWEL UE
+ { 0xAAB4, BIDI_NSM }, // TAI VIET VOWEL U
+ { 0xAAB5, BIDI_L }, // TAI VIET VOWEL E
+ { 0xAAB6, BIDI_L }, // TAI VIET VOWEL O
+ { 0xAAB7, BIDI_NSM }, // TAI VIET MAI KHIT
+ { 0xAAB8, BIDI_NSM }, // TAI VIET VOWEL IA
+ { 0xAAB9, BIDI_L }, // TAI VIET VOWEL UEA
+ { 0xAABA, BIDI_L }, // TAI VIET VOWEL UA
+ { 0xAABB, BIDI_L }, // TAI VIET VOWEL AUE
+ { 0xAABC, BIDI_L }, // TAI VIET VOWEL AY
+ { 0xAABD, BIDI_L }, // TAI VIET VOWEL AN
+ { 0xAABE, BIDI_NSM }, // TAI VIET VOWEL AM
+ { 0xAABF, BIDI_NSM }, // TAI VIET TONE MAI EK
+ { 0xAAC0, BIDI_L }, // TAI VIET TONE MAI NUENG
+ { 0xAAC1, BIDI_NSM }, // TAI VIET TONE MAI THO
+ { 0xAAC2, BIDI_L }, // TAI VIET TONE MAI SONG
+ { 0xAADB, BIDI_L }, // TAI VIET SYMBOL KON
+ { 0xAADC, BIDI_L }, // TAI VIET SYMBOL NUENG
+ { 0xAADD, BIDI_L }, // TAI VIET SYMBOL SAM
+ { 0xAADE, BIDI_L }, // TAI VIET SYMBOL HO HOI
+ { 0xAADF, BIDI_L }, // TAI VIET SYMBOL KOI KOI
+ { 0xAAE0, BIDI_L }, // MEETEI MAYEK LETTER E
+ { 0xAAE1, BIDI_L }, // MEETEI MAYEK LETTER O
+ { 0xAAE2, BIDI_L }, // MEETEI MAYEK LETTER CHA
+ { 0xAAE3, BIDI_L }, // MEETEI MAYEK LETTER NYA
+ { 0xAAE4, BIDI_L }, // MEETEI MAYEK LETTER TTA
+ { 0xAAE5, BIDI_L }, // MEETEI MAYEK LETTER TTHA
+ { 0xAAE6, BIDI_L }, // MEETEI MAYEK LETTER DDA
+ { 0xAAE7, BIDI_L }, // MEETEI MAYEK LETTER DDHA
+ { 0xAAE8, BIDI_L }, // MEETEI MAYEK LETTER NNA
+ { 0xAAE9, BIDI_L }, // MEETEI MAYEK LETTER SHA
+ { 0xAAEA, BIDI_L }, // MEETEI MAYEK LETTER SSA
+ { 0xAAEB, BIDI_L }, // MEETEI MAYEK VOWEL SIGN II
+ { 0xAAEC, BIDI_NSM }, // MEETEI MAYEK VOWEL SIGN UU
+ { 0xAAED, BIDI_NSM }, // MEETEI MAYEK VOWEL SIGN AAI
+ { 0xAAEE, BIDI_L }, // MEETEI MAYEK VOWEL SIGN AU
+ { 0xAAEF, BIDI_L }, // MEETEI MAYEK VOWEL SIGN AAU
+ { 0xAAF0, BIDI_L }, // MEETEI MAYEK CHEIKHAN
+ { 0xAAF1, BIDI_L }, // MEETEI MAYEK AHANG KHUDAM
+ { 0xAAF2, BIDI_L }, // MEETEI MAYEK ANJI
+ { 0xAAF3, BIDI_L }, // MEETEI MAYEK SYLLABLE REPETITION MARK
+ { 0xAAF4, BIDI_L }, // MEETEI MAYEK WORD REPETITION MARK
+ { 0xAAF5, BIDI_L }, // MEETEI MAYEK VOWEL SIGN VISARGA
+ { 0xAAF6, BIDI_NSM }, // MEETEI MAYEK VIRAMA
+ { 0xAB01, BIDI_L }, // ETHIOPIC SYLLABLE TTHU
+ { 0xAB02, BIDI_L }, // ETHIOPIC SYLLABLE TTHI
+ { 0xAB03, BIDI_L }, // ETHIOPIC SYLLABLE TTHAA
+ { 0xAB04, BIDI_L }, // ETHIOPIC SYLLABLE TTHEE
+ { 0xAB05, BIDI_L }, // ETHIOPIC SYLLABLE TTHE
+ { 0xAB06, BIDI_L }, // ETHIOPIC SYLLABLE TTHO
+ { 0xAB09, BIDI_L }, // ETHIOPIC SYLLABLE DDHU
+ { 0xAB0A, BIDI_L }, // ETHIOPIC SYLLABLE DDHI
+ { 0xAB0B, BIDI_L }, // ETHIOPIC SYLLABLE DDHAA
+ { 0xAB0C, BIDI_L }, // ETHIOPIC SYLLABLE DDHEE
+ { 0xAB0D, BIDI_L }, // ETHIOPIC SYLLABLE DDHE
+ { 0xAB0E, BIDI_L }, // ETHIOPIC SYLLABLE DDHO
+ { 0xAB11, BIDI_L }, // ETHIOPIC SYLLABLE DZU
+ { 0xAB12, BIDI_L }, // ETHIOPIC SYLLABLE DZI
+ { 0xAB13, BIDI_L }, // ETHIOPIC SYLLABLE DZAA
+ { 0xAB14, BIDI_L }, // ETHIOPIC SYLLABLE DZEE
+ { 0xAB15, BIDI_L }, // ETHIOPIC SYLLABLE DZE
+ { 0xAB16, BIDI_L }, // ETHIOPIC SYLLABLE DZO
+ { 0xAB20, BIDI_L }, // ETHIOPIC SYLLABLE CCHHA
+ { 0xAB21, BIDI_L }, // ETHIOPIC SYLLABLE CCHHU
+ { 0xAB22, BIDI_L }, // ETHIOPIC SYLLABLE CCHHI
+ { 0xAB23, BIDI_L }, // ETHIOPIC SYLLABLE CCHHAA
+ { 0xAB24, BIDI_L }, // ETHIOPIC SYLLABLE CCHHEE
+ { 0xAB25, BIDI_L }, // ETHIOPIC SYLLABLE CCHHE
+ { 0xAB26, BIDI_L }, // ETHIOPIC SYLLABLE CCHHO
+ { 0xAB28, BIDI_L }, // ETHIOPIC SYLLABLE BBA
+ { 0xAB29, BIDI_L }, // ETHIOPIC SYLLABLE BBU
+ { 0xAB2A, BIDI_L }, // ETHIOPIC SYLLABLE BBI
+ { 0xAB2B, BIDI_L }, // ETHIOPIC SYLLABLE BBAA
+ { 0xAB2C, BIDI_L }, // ETHIOPIC SYLLABLE BBEE
+ { 0xAB2D, BIDI_L }, // ETHIOPIC SYLLABLE BBE
+ { 0xAB2E, BIDI_L }, // ETHIOPIC SYLLABLE BBO
+ { 0xAB30, BIDI_L }, // LATIN SMALL LETTER BARRED ALPHA
+ { 0xAB31, BIDI_L }, // LATIN SMALL LETTER A REVERSED-SCHWA
+ { 0xAB32, BIDI_L }, // LATIN SMALL LETTER BLACKLETTER E
+ { 0xAB33, BIDI_L }, // LATIN SMALL LETTER BARRED E
+ { 0xAB34, BIDI_L }, // LATIN SMALL LETTER E WITH FLOURISH
+ { 0xAB35, BIDI_L }, // LATIN SMALL LETTER LENIS F
+ { 0xAB36, BIDI_L }, // LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL
+ { 0xAB37, BIDI_L }, // LATIN SMALL LETTER L WITH INVERTED LAZY S
+ { 0xAB38, BIDI_L }, // LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE
+ { 0xAB39, BIDI_L }, // LATIN SMALL LETTER L WITH MIDDLE RING
+ { 0xAB3A, BIDI_L }, // LATIN SMALL LETTER M WITH CROSSED-TAIL
+ { 0xAB3B, BIDI_L }, // LATIN SMALL LETTER N WITH CROSSED-TAIL
+ { 0xAB3C, BIDI_L }, // LATIN SMALL LETTER ENG WITH CROSSED-TAIL
+ { 0xAB3D, BIDI_L }, // LATIN SMALL LETTER BLACKLETTER O
+ { 0xAB3E, BIDI_L }, // LATIN SMALL LETTER BLACKLETTER O WITH STROKE
+ { 0xAB3F, BIDI_L }, // LATIN SMALL LETTER OPEN O WITH STROKE
+ { 0xAB40, BIDI_L }, // LATIN SMALL LETTER INVERTED OE
+ { 0xAB41, BIDI_L }, // LATIN SMALL LETTER TURNED OE WITH STROKE
+ { 0xAB42, BIDI_L }, // LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE
+ { 0xAB43, BIDI_L }, // LATIN SMALL LETTER TURNED O OPEN-O
+ { 0xAB44, BIDI_L }, // LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE
+ { 0xAB45, BIDI_L }, // LATIN SMALL LETTER STIRRUP R
+ { 0xAB46, BIDI_L }, // LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG
+ { 0xAB47, BIDI_L }, // LATIN SMALL LETTER R WITHOUT HANDLE
+ { 0xAB48, BIDI_L }, // LATIN SMALL LETTER DOUBLE R
+ { 0xAB49, BIDI_L }, // LATIN SMALL LETTER R WITH CROSSED-TAIL
+ { 0xAB4A, BIDI_L }, // LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL
+ { 0xAB4B, BIDI_L }, // LATIN SMALL LETTER SCRIPT R
+ { 0xAB4C, BIDI_L }, // LATIN SMALL LETTER SCRIPT R WITH RING
+ { 0xAB4D, BIDI_L }, // LATIN SMALL LETTER BASELINE ESH
+ { 0xAB4E, BIDI_L }, // LATIN SMALL LETTER U WITH SHORT RIGHT LEG
+ { 0xAB4F, BIDI_L }, // LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG
+ { 0xAB50, BIDI_L }, // LATIN SMALL LETTER UI
+ { 0xAB51, BIDI_L }, // LATIN SMALL LETTER TURNED UI
+ { 0xAB52, BIDI_L }, // LATIN SMALL LETTER U WITH LEFT HOOK
+ { 0xAB53, BIDI_L }, // LATIN SMALL LETTER CHI
+ { 0xAB54, BIDI_L }, // LATIN SMALL LETTER CHI WITH LOW RIGHT RING
+ { 0xAB55, BIDI_L }, // LATIN SMALL LETTER CHI WITH LOW LEFT SERIF
+ { 0xAB56, BIDI_L }, // LATIN SMALL LETTER X WITH LOW RIGHT RING
+ { 0xAB57, BIDI_L }, // LATIN SMALL LETTER X WITH LONG LEFT LEG
+ { 0xAB58, BIDI_L }, // LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING
+ { 0xAB59, BIDI_L }, // LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF
+ { 0xAB5A, BIDI_L }, // LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+ { 0xAB5B, BIDI_L }, // MODIFIER BREVE WITH INVERTED BREVE
+ { 0xAB5C, BIDI_L }, // MODIFIER LETTER SMALL HENG
+ { 0xAB5D, BIDI_L }, // MODIFIER LETTER SMALL L WITH INVERTED LAZY S
+ { 0xAB5E, BIDI_L }, // MODIFIER LETTER SMALL L WITH MIDDLE TILDE
+ { 0xAB5F, BIDI_L }, // MODIFIER LETTER SMALL U WITH LEFT HOOK
+ { 0xAB60, BIDI_L }, // LATIN SMALL LETTER SAKHA YAT
+ { 0xAB61, BIDI_L }, // LATIN SMALL LETTER IOTIFIED E
+ { 0xAB62, BIDI_L }, // LATIN SMALL LETTER OPEN OE
+ { 0xAB63, BIDI_L }, // LATIN SMALL LETTER UO
+ { 0xAB64, BIDI_L }, // LATIN SMALL LETTER INVERTED ALPHA
+ { 0xAB65, BIDI_L }, // GREEK LETTER SMALL CAPITAL OMEGA
+ { 0xAB70, BIDI_L }, // CHEROKEE SMALL LETTER A
+ { 0xAB71, BIDI_L }, // CHEROKEE SMALL LETTER E
+ { 0xAB72, BIDI_L }, // CHEROKEE SMALL LETTER I
+ { 0xAB73, BIDI_L }, // CHEROKEE SMALL LETTER O
+ { 0xAB74, BIDI_L }, // CHEROKEE SMALL LETTER U
+ { 0xAB75, BIDI_L }, // CHEROKEE SMALL LETTER V
+ { 0xAB76, BIDI_L }, // CHEROKEE SMALL LETTER GA
+ { 0xAB77, BIDI_L }, // CHEROKEE SMALL LETTER KA
+ { 0xAB78, BIDI_L }, // CHEROKEE SMALL LETTER GE
+ { 0xAB79, BIDI_L }, // CHEROKEE SMALL LETTER GI
+ { 0xAB7A, BIDI_L }, // CHEROKEE SMALL LETTER GO
+ { 0xAB7B, BIDI_L }, // CHEROKEE SMALL LETTER GU
+ { 0xAB7C, BIDI_L }, // CHEROKEE SMALL LETTER GV
+ { 0xAB7D, BIDI_L }, // CHEROKEE SMALL LETTER HA
+ { 0xAB7E, BIDI_L }, // CHEROKEE SMALL LETTER HE
+ { 0xAB7F, BIDI_L }, // CHEROKEE SMALL LETTER HI
+ { 0xAB80, BIDI_L }, // CHEROKEE SMALL LETTER HO
+ { 0xAB81, BIDI_L }, // CHEROKEE SMALL LETTER HU
+ { 0xAB82, BIDI_L }, // CHEROKEE SMALL LETTER HV
+ { 0xAB83, BIDI_L }, // CHEROKEE SMALL LETTER LA
+ { 0xAB84, BIDI_L }, // CHEROKEE SMALL LETTER LE
+ { 0xAB85, BIDI_L }, // CHEROKEE SMALL LETTER LI
+ { 0xAB86, BIDI_L }, // CHEROKEE SMALL LETTER LO
+ { 0xAB87, BIDI_L }, // CHEROKEE SMALL LETTER LU
+ { 0xAB88, BIDI_L }, // CHEROKEE SMALL LETTER LV
+ { 0xAB89, BIDI_L }, // CHEROKEE SMALL LETTER MA
+ { 0xAB8A, BIDI_L }, // CHEROKEE SMALL LETTER ME
+ { 0xAB8B, BIDI_L }, // CHEROKEE SMALL LETTER MI
+ { 0xAB8C, BIDI_L }, // CHEROKEE SMALL LETTER MO
+ { 0xAB8D, BIDI_L }, // CHEROKEE SMALL LETTER MU
+ { 0xAB8E, BIDI_L }, // CHEROKEE SMALL LETTER NA
+ { 0xAB8F, BIDI_L }, // CHEROKEE SMALL LETTER HNA
+ { 0xAB90, BIDI_L }, // CHEROKEE SMALL LETTER NAH
+ { 0xAB91, BIDI_L }, // CHEROKEE SMALL LETTER NE
+ { 0xAB92, BIDI_L }, // CHEROKEE SMALL LETTER NI
+ { 0xAB93, BIDI_L }, // CHEROKEE SMALL LETTER NO
+ { 0xAB94, BIDI_L }, // CHEROKEE SMALL LETTER NU
+ { 0xAB95, BIDI_L }, // CHEROKEE SMALL LETTER NV
+ { 0xAB96, BIDI_L }, // CHEROKEE SMALL LETTER QUA
+ { 0xAB97, BIDI_L }, // CHEROKEE SMALL LETTER QUE
+ { 0xAB98, BIDI_L }, // CHEROKEE SMALL LETTER QUI
+ { 0xAB99, BIDI_L }, // CHEROKEE SMALL LETTER QUO
+ { 0xAB9A, BIDI_L }, // CHEROKEE SMALL LETTER QUU
+ { 0xAB9B, BIDI_L }, // CHEROKEE SMALL LETTER QUV
+ { 0xAB9C, BIDI_L }, // CHEROKEE SMALL LETTER SA
+ { 0xAB9D, BIDI_L }, // CHEROKEE SMALL LETTER S
+ { 0xAB9E, BIDI_L }, // CHEROKEE SMALL LETTER SE
+ { 0xAB9F, BIDI_L }, // CHEROKEE SMALL LETTER SI
+ { 0xABA0, BIDI_L }, // CHEROKEE SMALL LETTER SO
+ { 0xABA1, BIDI_L }, // CHEROKEE SMALL LETTER SU
+ { 0xABA2, BIDI_L }, // CHEROKEE SMALL LETTER SV
+ { 0xABA3, BIDI_L }, // CHEROKEE SMALL LETTER DA
+ { 0xABA4, BIDI_L }, // CHEROKEE SMALL LETTER TA
+ { 0xABA5, BIDI_L }, // CHEROKEE SMALL LETTER DE
+ { 0xABA6, BIDI_L }, // CHEROKEE SMALL LETTER TE
+ { 0xABA7, BIDI_L }, // CHEROKEE SMALL LETTER DI
+ { 0xABA8, BIDI_L }, // CHEROKEE SMALL LETTER TI
+ { 0xABA9, BIDI_L }, // CHEROKEE SMALL LETTER DO
+ { 0xABAA, BIDI_L }, // CHEROKEE SMALL LETTER DU
+ { 0xABAB, BIDI_L }, // CHEROKEE SMALL LETTER DV
+ { 0xABAC, BIDI_L }, // CHEROKEE SMALL LETTER DLA
+ { 0xABAD, BIDI_L }, // CHEROKEE SMALL LETTER TLA
+ { 0xABAE, BIDI_L }, // CHEROKEE SMALL LETTER TLE
+ { 0xABAF, BIDI_L }, // CHEROKEE SMALL LETTER TLI
+ { 0xABB0, BIDI_L }, // CHEROKEE SMALL LETTER TLO
+ { 0xABB1, BIDI_L }, // CHEROKEE SMALL LETTER TLU
+ { 0xABB2, BIDI_L }, // CHEROKEE SMALL LETTER TLV
+ { 0xABB3, BIDI_L }, // CHEROKEE SMALL LETTER TSA
+ { 0xABB4, BIDI_L }, // CHEROKEE SMALL LETTER TSE
+ { 0xABB5, BIDI_L }, // CHEROKEE SMALL LETTER TSI
+ { 0xABB6, BIDI_L }, // CHEROKEE SMALL LETTER TSO
+ { 0xABB7, BIDI_L }, // CHEROKEE SMALL LETTER TSU
+ { 0xABB8, BIDI_L }, // CHEROKEE SMALL LETTER TSV
+ { 0xABB9, BIDI_L }, // CHEROKEE SMALL LETTER WA
+ { 0xABBA, BIDI_L }, // CHEROKEE SMALL LETTER WE
+ { 0xABBB, BIDI_L }, // CHEROKEE SMALL LETTER WI
+ { 0xABBC, BIDI_L }, // CHEROKEE SMALL LETTER WO
+ { 0xABBD, BIDI_L }, // CHEROKEE SMALL LETTER WU
+ { 0xABBE, BIDI_L }, // CHEROKEE SMALL LETTER WV
+ { 0xABBF, BIDI_L }, // CHEROKEE SMALL LETTER YA
+ { 0xABC0, BIDI_L }, // MEETEI MAYEK LETTER KOK
+ { 0xABC1, BIDI_L }, // MEETEI MAYEK LETTER SAM
+ { 0xABC2, BIDI_L }, // MEETEI MAYEK LETTER LAI
+ { 0xABC3, BIDI_L }, // MEETEI MAYEK LETTER MIT
+ { 0xABC4, BIDI_L }, // MEETEI MAYEK LETTER PA
+ { 0xABC5, BIDI_L }, // MEETEI MAYEK LETTER NA
+ { 0xABC6, BIDI_L }, // MEETEI MAYEK LETTER CHIL
+ { 0xABC7, BIDI_L }, // MEETEI MAYEK LETTER TIL
+ { 0xABC8, BIDI_L }, // MEETEI MAYEK LETTER KHOU
+ { 0xABC9, BIDI_L }, // MEETEI MAYEK LETTER NGOU
+ { 0xABCA, BIDI_L }, // MEETEI MAYEK LETTER THOU
+ { 0xABCB, BIDI_L }, // MEETEI MAYEK LETTER WAI
+ { 0xABCC, BIDI_L }, // MEETEI MAYEK LETTER YANG
+ { 0xABCD, BIDI_L }, // MEETEI MAYEK LETTER HUK
+ { 0xABCE, BIDI_L }, // MEETEI MAYEK LETTER UN
+ { 0xABCF, BIDI_L }, // MEETEI MAYEK LETTER I
+ { 0xABD0, BIDI_L }, // MEETEI MAYEK LETTER PHAM
+ { 0xABD1, BIDI_L }, // MEETEI MAYEK LETTER ATIYA
+ { 0xABD2, BIDI_L }, // MEETEI MAYEK LETTER GOK
+ { 0xABD3, BIDI_L }, // MEETEI MAYEK LETTER JHAM
+ { 0xABD4, BIDI_L }, // MEETEI MAYEK LETTER RAI
+ { 0xABD5, BIDI_L }, // MEETEI MAYEK LETTER BA
+ { 0xABD6, BIDI_L }, // MEETEI MAYEK LETTER JIL
+ { 0xABD7, BIDI_L }, // MEETEI MAYEK LETTER DIL
+ { 0xABD8, BIDI_L }, // MEETEI MAYEK LETTER GHOU
+ { 0xABD9, BIDI_L }, // MEETEI MAYEK LETTER DHOU
+ { 0xABDA, BIDI_L }, // MEETEI MAYEK LETTER BHAM
+ { 0xABDB, BIDI_L }, // MEETEI MAYEK LETTER KOK LONSUM
+ { 0xABDC, BIDI_L }, // MEETEI MAYEK LETTER LAI LONSUM
+ { 0xABDD, BIDI_L }, // MEETEI MAYEK LETTER MIT LONSUM
+ { 0xABDE, BIDI_L }, // MEETEI MAYEK LETTER PA LONSUM
+ { 0xABDF, BIDI_L }, // MEETEI MAYEK LETTER NA LONSUM
+ { 0xABE0, BIDI_L }, // MEETEI MAYEK LETTER TIL LONSUM
+ { 0xABE1, BIDI_L }, // MEETEI MAYEK LETTER NGOU LONSUM
+ { 0xABE2, BIDI_L }, // MEETEI MAYEK LETTER I LONSUM
+ { 0xABE3, BIDI_L }, // MEETEI MAYEK VOWEL SIGN ONAP
+ { 0xABE4, BIDI_L }, // MEETEI MAYEK VOWEL SIGN INAP
+ { 0xABE5, BIDI_NSM }, // MEETEI MAYEK VOWEL SIGN ANAP
+ { 0xABE6, BIDI_L }, // MEETEI MAYEK VOWEL SIGN YENAP
+ { 0xABE7, BIDI_L }, // MEETEI MAYEK VOWEL SIGN SOUNAP
+ { 0xABE8, BIDI_NSM }, // MEETEI MAYEK VOWEL SIGN UNAP
+ { 0xABE9, BIDI_L }, // MEETEI MAYEK VOWEL SIGN CHEINAP
+ { 0xABEA, BIDI_L }, // MEETEI MAYEK VOWEL SIGN NUNG
+ { 0xABEB, BIDI_L }, // MEETEI MAYEK CHEIKHEI
+ { 0xABEC, BIDI_L }, // MEETEI MAYEK LUM IYEK
+ { 0xABED, BIDI_NSM }, // MEETEI MAYEK APUN IYEK
+ { 0xABF0, BIDI_L }, // MEETEI MAYEK DIGIT ZERO
+ { 0xABF1, BIDI_L }, // MEETEI MAYEK DIGIT ONE
+ { 0xABF2, BIDI_L }, // MEETEI MAYEK DIGIT TWO
+ { 0xABF3, BIDI_L }, // MEETEI MAYEK DIGIT THREE
+ { 0xABF4, BIDI_L }, // MEETEI MAYEK DIGIT FOUR
+ { 0xABF5, BIDI_L }, // MEETEI MAYEK DIGIT FIVE
+ { 0xABF6, BIDI_L }, // MEETEI MAYEK DIGIT SIX
+ { 0xABF7, BIDI_L }, // MEETEI MAYEK DIGIT SEVEN
+ { 0xABF8, BIDI_L }, // MEETEI MAYEK DIGIT EIGHT
+ { 0xABF9, BIDI_L }, // MEETEI MAYEK DIGIT NINE
+ //{ 0xAC00, BIDI_L }, // <Hangul Syllable, First>
+ //{ 0xD7A3, BIDI_L }, // <Hangul Syllable, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_D == 1)
+
+ { 0xD7B0, BIDI_L }, // HANGUL JUNGSEONG O-YEO
+ { 0xD7B1, BIDI_L }, // HANGUL JUNGSEONG O-O-I
+ { 0xD7B2, BIDI_L }, // HANGUL JUNGSEONG YO-A
+ { 0xD7B3, BIDI_L }, // HANGUL JUNGSEONG YO-AE
+ { 0xD7B4, BIDI_L }, // HANGUL JUNGSEONG YO-EO
+ { 0xD7B5, BIDI_L }, // HANGUL JUNGSEONG U-YEO
+ { 0xD7B6, BIDI_L }, // HANGUL JUNGSEONG U-I-I
+ { 0xD7B7, BIDI_L }, // HANGUL JUNGSEONG YU-AE
+ { 0xD7B8, BIDI_L }, // HANGUL JUNGSEONG YU-O
+ { 0xD7B9, BIDI_L }, // HANGUL JUNGSEONG EU-A
+ { 0xD7BA, BIDI_L }, // HANGUL JUNGSEONG EU-EO
+ { 0xD7BB, BIDI_L }, // HANGUL JUNGSEONG EU-E
+ { 0xD7BC, BIDI_L }, // HANGUL JUNGSEONG EU-O
+ { 0xD7BD, BIDI_L }, // HANGUL JUNGSEONG I-YA-O
+ { 0xD7BE, BIDI_L }, // HANGUL JUNGSEONG I-YAE
+ { 0xD7BF, BIDI_L }, // HANGUL JUNGSEONG I-YEO
+ { 0xD7C0, BIDI_L }, // HANGUL JUNGSEONG I-YE
+ { 0xD7C1, BIDI_L }, // HANGUL JUNGSEONG I-O-I
+ { 0xD7C2, BIDI_L }, // HANGUL JUNGSEONG I-YO
+ { 0xD7C3, BIDI_L }, // HANGUL JUNGSEONG I-YU
+ { 0xD7C4, BIDI_L }, // HANGUL JUNGSEONG I-I
+ { 0xD7C5, BIDI_L }, // HANGUL JUNGSEONG ARAEA-A
+ { 0xD7C6, BIDI_L }, // HANGUL JUNGSEONG ARAEA-E
+ { 0xD7CB, BIDI_L }, // HANGUL JONGSEONG NIEUN-RIEUL
+ { 0xD7CC, BIDI_L }, // HANGUL JONGSEONG NIEUN-CHIEUCH
+ { 0xD7CD, BIDI_L }, // HANGUL JONGSEONG SSANGTIKEUT
+ { 0xD7CE, BIDI_L }, // HANGUL JONGSEONG SSANGTIKEUT-PIEUP
+ { 0xD7CF, BIDI_L }, // HANGUL JONGSEONG TIKEUT-PIEUP
+ { 0xD7D0, BIDI_L }, // HANGUL JONGSEONG TIKEUT-SIOS
+ { 0xD7D1, BIDI_L }, // HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK
+ { 0xD7D2, BIDI_L }, // HANGUL JONGSEONG TIKEUT-CIEUC
+ { 0xD7D3, BIDI_L }, // HANGUL JONGSEONG TIKEUT-CHIEUCH
+ { 0xD7D4, BIDI_L }, // HANGUL JONGSEONG TIKEUT-THIEUTH
+ { 0xD7D5, BIDI_L }, // HANGUL JONGSEONG RIEUL-SSANGKIYEOK
+ { 0xD7D6, BIDI_L }, // HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH
+ { 0xD7D7, BIDI_L }, // HANGUL JONGSEONG SSANGRIEUL-KHIEUKH
+ { 0xD7D8, BIDI_L }, // HANGUL JONGSEONG RIEUL-MIEUM-HIEUH
+ { 0xD7D9, BIDI_L }, // HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT
+ { 0xD7DA, BIDI_L }, // HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH
+ { 0xD7DB, BIDI_L }, // HANGUL JONGSEONG RIEUL-YESIEUNG
+ { 0xD7DC, BIDI_L }, // HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH
+ { 0xD7DD, BIDI_L }, // HANGUL JONGSEONG KAPYEOUNRIEUL
+ { 0xD7DE, BIDI_L }, // HANGUL JONGSEONG MIEUM-NIEUN
+ { 0xD7DF, BIDI_L }, // HANGUL JONGSEONG MIEUM-SSANGNIEUN
+ { 0xD7E0, BIDI_L }, // HANGUL JONGSEONG SSANGMIEUM
+ { 0xD7E1, BIDI_L }, // HANGUL JONGSEONG MIEUM-PIEUP-SIOS
+ { 0xD7E2, BIDI_L }, // HANGUL JONGSEONG MIEUM-CIEUC
+ { 0xD7E3, BIDI_L }, // HANGUL JONGSEONG PIEUP-TIKEUT
+ { 0xD7E4, BIDI_L }, // HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH
+ { 0xD7E5, BIDI_L }, // HANGUL JONGSEONG PIEUP-MIEUM
+ { 0xD7E6, BIDI_L }, // HANGUL JONGSEONG SSANGPIEUP
+ { 0xD7E7, BIDI_L }, // HANGUL JONGSEONG PIEUP-SIOS-TIKEUT
+ { 0xD7E8, BIDI_L }, // HANGUL JONGSEONG PIEUP-CIEUC
+ { 0xD7E9, BIDI_L }, // HANGUL JONGSEONG PIEUP-CHIEUCH
+ { 0xD7EA, BIDI_L }, // HANGUL JONGSEONG SIOS-MIEUM
+ { 0xD7EB, BIDI_L }, // HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP
+ { 0xD7EC, BIDI_L }, // HANGUL JONGSEONG SSANGSIOS-KIYEOK
+ { 0xD7ED, BIDI_L }, // HANGUL JONGSEONG SSANGSIOS-TIKEUT
+ { 0xD7EE, BIDI_L }, // HANGUL JONGSEONG SIOS-PANSIOS
+ { 0xD7EF, BIDI_L }, // HANGUL JONGSEONG SIOS-CIEUC
+ { 0xD7F0, BIDI_L }, // HANGUL JONGSEONG SIOS-CHIEUCH
+ { 0xD7F1, BIDI_L }, // HANGUL JONGSEONG SIOS-THIEUTH
+ { 0xD7F2, BIDI_L }, // HANGUL JONGSEONG SIOS-HIEUH
+ { 0xD7F3, BIDI_L }, // HANGUL JONGSEONG PANSIOS-PIEUP
+ { 0xD7F4, BIDI_L }, // HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP
+ { 0xD7F5, BIDI_L }, // HANGUL JONGSEONG YESIEUNG-MIEUM
+ { 0xD7F6, BIDI_L }, // HANGUL JONGSEONG YESIEUNG-HIEUH
+ { 0xD7F7, BIDI_L }, // HANGUL JONGSEONG CIEUC-PIEUP
+ { 0xD7F8, BIDI_L }, // HANGUL JONGSEONG CIEUC-SSANGPIEUP
+ { 0xD7F9, BIDI_L }, // HANGUL JONGSEONG SSANGCIEUC
+ { 0xD7FA, BIDI_L }, // HANGUL JONGSEONG PHIEUPH-SIOS
+ { 0xD7FB, BIDI_L }, // HANGUL JONGSEONG PHIEUPH-THIEUTH
+ //{ 0xD800, BIDI_L }, // <Non Private Use High Surrogate, First>
+ //{ 0xDB7F, BIDI_L }, // <Non Private Use High Surrogate, Last>
+ //{ 0xDB80, BIDI_L }, // <Private Use High Surrogate, First>
+ //{ 0xDBFF, BIDI_L }, // <Private Use High Surrogate, Last>
+ //{ 0xDC00, BIDI_L }, // <Low Surrogate, First>
+ //{ 0xDFFF, BIDI_L }, // <Low Surrogate, Last>
+ //{ 0xE000, BIDI_L }, // <Private Use, First>
+ //{ 0xF8FF, BIDI_L }, // <Private Use, Last>
+
+#endif
+#if (GUI_BIDI_SUPPORT_RANGE_F == 1)
+
+ { 0xF900, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F900
+ { 0xF901, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F901
+ { 0xF902, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F902
+ { 0xF903, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F903
+ { 0xF904, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F904
+ { 0xF905, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F905
+ { 0xF906, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F906
+ { 0xF907, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F907
+ { 0xF908, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F908
+ { 0xF909, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F909
+ { 0xF90A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F90A
+ { 0xF90B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F90B
+ { 0xF90C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F90C
+ { 0xF90D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F90D
+ { 0xF90E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F90E
+ { 0xF90F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F90F
+ { 0xF910, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F910
+ { 0xF911, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F911
+ { 0xF912, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F912
+ { 0xF913, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F913
+ { 0xF914, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F914
+ { 0xF915, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F915
+ { 0xF916, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F916
+ { 0xF917, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F917
+ { 0xF918, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F918
+ { 0xF919, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F919
+ { 0xF91A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F91A
+ { 0xF91B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F91B
+ { 0xF91C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F91C
+ { 0xF91D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F91D
+ { 0xF91E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F91E
+ { 0xF91F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F91F
+ { 0xF920, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F920
+ { 0xF921, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F921
+ { 0xF922, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F922
+ { 0xF923, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F923
+ { 0xF924, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F924
+ { 0xF925, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F925
+ { 0xF926, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F926
+ { 0xF927, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F927
+ { 0xF928, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F928
+ { 0xF929, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F929
+ { 0xF92A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F92A
+ { 0xF92B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F92B
+ { 0xF92C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F92C
+ { 0xF92D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F92D
+ { 0xF92E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F92E
+ { 0xF92F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F92F
+ { 0xF930, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F930
+ { 0xF931, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F931
+ { 0xF932, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F932
+ { 0xF933, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F933
+ { 0xF934, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F934
+ { 0xF935, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F935
+ { 0xF936, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F936
+ { 0xF937, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F937
+ { 0xF938, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F938
+ { 0xF939, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F939
+ { 0xF93A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F93A
+ { 0xF93B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F93B
+ { 0xF93C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F93C
+ { 0xF93D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F93D
+ { 0xF93E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F93E
+ { 0xF93F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F93F
+ { 0xF940, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F940
+ { 0xF941, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F941
+ { 0xF942, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F942
+ { 0xF943, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F943
+ { 0xF944, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F944
+ { 0xF945, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F945
+ { 0xF946, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F946
+ { 0xF947, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F947
+ { 0xF948, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F948
+ { 0xF949, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F949
+ { 0xF94A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F94A
+ { 0xF94B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F94B
+ { 0xF94C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F94C
+ { 0xF94D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F94D
+ { 0xF94E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F94E
+ { 0xF94F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F94F
+ { 0xF950, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F950
+ { 0xF951, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F951
+ { 0xF952, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F952
+ { 0xF953, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F953
+ { 0xF954, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F954
+ { 0xF955, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F955
+ { 0xF956, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F956
+ { 0xF957, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F957
+ { 0xF958, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F958
+ { 0xF959, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F959
+ { 0xF95A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F95A
+ { 0xF95B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F95B
+ { 0xF95C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F95C
+ { 0xF95D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F95D
+ { 0xF95E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F95E
+ { 0xF95F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F95F
+ { 0xF960, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F960
+ { 0xF961, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F961
+ { 0xF962, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F962
+ { 0xF963, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F963
+ { 0xF964, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F964
+ { 0xF965, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F965
+ { 0xF966, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F966
+ { 0xF967, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F967
+ { 0xF968, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F968
+ { 0xF969, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F969
+ { 0xF96A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F96A
+ { 0xF96B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F96B
+ { 0xF96C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F96C
+ { 0xF96D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F96D
+ { 0xF96E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F96E
+ { 0xF96F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F96F
+ { 0xF970, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F970
+ { 0xF971, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F971
+ { 0xF972, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F972
+ { 0xF973, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F973
+ { 0xF974, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F974
+ { 0xF975, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F975
+ { 0xF976, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F976
+ { 0xF977, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F977
+ { 0xF978, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F978
+ { 0xF979, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F979
+ { 0xF97A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F97A
+ { 0xF97B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F97B
+ { 0xF97C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F97C
+ { 0xF97D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F97D
+ { 0xF97E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F97E
+ { 0xF97F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F97F
+ { 0xF980, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F980
+ { 0xF981, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F981
+ { 0xF982, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F982
+ { 0xF983, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F983
+ { 0xF984, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F984
+ { 0xF985, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F985
+ { 0xF986, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F986
+ { 0xF987, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F987
+ { 0xF988, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F988
+ { 0xF989, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F989
+ { 0xF98A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F98A
+ { 0xF98B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F98B
+ { 0xF98C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F98C
+ { 0xF98D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F98D
+ { 0xF98E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F98E
+ { 0xF98F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F98F
+ { 0xF990, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F990
+ { 0xF991, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F991
+ { 0xF992, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F992
+ { 0xF993, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F993
+ { 0xF994, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F994
+ { 0xF995, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F995
+ { 0xF996, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F996
+ { 0xF997, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F997
+ { 0xF998, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F998
+ { 0xF999, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F999
+ { 0xF99A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F99A
+ { 0xF99B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F99B
+ { 0xF99C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F99C
+ { 0xF99D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F99D
+ { 0xF99E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F99E
+ { 0xF99F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F99F
+ { 0xF9A0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A0
+ { 0xF9A1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A1
+ { 0xF9A2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A2
+ { 0xF9A3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A3
+ { 0xF9A4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A4
+ { 0xF9A5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A5
+ { 0xF9A6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A6
+ { 0xF9A7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A7
+ { 0xF9A8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A8
+ { 0xF9A9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9A9
+ { 0xF9AA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9AA
+ { 0xF9AB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9AB
+ { 0xF9AC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9AC
+ { 0xF9AD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9AD
+ { 0xF9AE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9AE
+ { 0xF9AF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9AF
+ { 0xF9B0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B0
+ { 0xF9B1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B1
+ { 0xF9B2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B2
+ { 0xF9B3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B3
+ { 0xF9B4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B4
+ { 0xF9B5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B5
+ { 0xF9B6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B6
+ { 0xF9B7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B7
+ { 0xF9B8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B8
+ { 0xF9B9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9B9
+ { 0xF9BA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9BA
+ { 0xF9BB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9BB
+ { 0xF9BC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9BC
+ { 0xF9BD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9BD
+ { 0xF9BE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9BE
+ { 0xF9BF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9BF
+ { 0xF9C0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C0
+ { 0xF9C1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C1
+ { 0xF9C2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C2
+ { 0xF9C3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C3
+ { 0xF9C4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C4
+ { 0xF9C5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C5
+ { 0xF9C6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C6
+ { 0xF9C7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C7
+ { 0xF9C8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C8
+ { 0xF9C9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9C9
+ { 0xF9CA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9CA
+ { 0xF9CB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9CB
+ { 0xF9CC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9CC
+ { 0xF9CD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9CD
+ { 0xF9CE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9CE
+ { 0xF9CF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9CF
+ { 0xF9D0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D0
+ { 0xF9D1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D1
+ { 0xF9D2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D2
+ { 0xF9D3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D3
+ { 0xF9D4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D4
+ { 0xF9D5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D5
+ { 0xF9D6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D6
+ { 0xF9D7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D7
+ { 0xF9D8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D8
+ { 0xF9D9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9D9
+ { 0xF9DA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9DA
+ { 0xF9DB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9DB
+ { 0xF9DC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9DC
+ { 0xF9DD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9DD
+ { 0xF9DE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9DE
+ { 0xF9DF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9DF
+ { 0xF9E0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E0
+ { 0xF9E1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E1
+ { 0xF9E2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E2
+ { 0xF9E3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E3
+ { 0xF9E4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E4
+ { 0xF9E5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E5
+ { 0xF9E6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E6
+ { 0xF9E7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E7
+ { 0xF9E8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E8
+ { 0xF9E9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9E9
+ { 0xF9EA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9EA
+ { 0xF9EB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9EB
+ { 0xF9EC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9EC
+ { 0xF9ED, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9ED
+ { 0xF9EE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9EE
+ { 0xF9EF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9EF
+ { 0xF9F0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F0
+ { 0xF9F1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F1
+ { 0xF9F2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F2
+ { 0xF9F3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F3
+ { 0xF9F4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F4
+ { 0xF9F5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F5
+ { 0xF9F6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F6
+ { 0xF9F7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F7
+ { 0xF9F8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F8
+ { 0xF9F9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9F9
+ { 0xF9FA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9FA
+ { 0xF9FB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9FB
+ { 0xF9FC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9FC
+ { 0xF9FD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9FD
+ { 0xF9FE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9FE
+ { 0xF9FF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-F9FF
+ { 0xFA00, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA00
+ { 0xFA01, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA01
+ { 0xFA02, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA02
+ { 0xFA03, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA03
+ { 0xFA04, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA04
+ { 0xFA05, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA05
+ { 0xFA06, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA06
+ { 0xFA07, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA07
+ { 0xFA08, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA08
+ { 0xFA09, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA09
+ { 0xFA0A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA0A
+ { 0xFA0B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA0B
+ { 0xFA0C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA0C
+ { 0xFA0D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA0D
+ { 0xFA0E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA0E
+ { 0xFA0F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA0F
+ { 0xFA10, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA10
+ { 0xFA11, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA11
+ { 0xFA12, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA12
+ { 0xFA13, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA13
+ { 0xFA14, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA14
+ { 0xFA15, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA15
+ { 0xFA16, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA16
+ { 0xFA17, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA17
+ { 0xFA18, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA18
+ { 0xFA19, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA19
+ { 0xFA1A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA1A
+ { 0xFA1B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA1B
+ { 0xFA1C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA1C
+ { 0xFA1D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA1D
+ { 0xFA1E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA1E
+ { 0xFA1F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA1F
+ { 0xFA20, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA20
+ { 0xFA21, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA21
+ { 0xFA22, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA22
+ { 0xFA23, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA23
+ { 0xFA24, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA24
+ { 0xFA25, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA25
+ { 0xFA26, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA26
+ { 0xFA27, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA27
+ { 0xFA28, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA28
+ { 0xFA29, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA29
+ { 0xFA2A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA2A
+ { 0xFA2B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA2B
+ { 0xFA2C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA2C
+ { 0xFA2D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA2D
+ { 0xFA2E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA2E
+ { 0xFA2F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA2F
+ { 0xFA30, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA30
+ { 0xFA31, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA31
+ { 0xFA32, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA32
+ { 0xFA33, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA33
+ { 0xFA34, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA34
+ { 0xFA35, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA35
+ { 0xFA36, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA36
+ { 0xFA37, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA37
+ { 0xFA38, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA38
+ { 0xFA39, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA39
+ { 0xFA3A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA3A
+ { 0xFA3B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA3B
+ { 0xFA3C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA3C
+ { 0xFA3D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA3D
+ { 0xFA3E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA3E
+ { 0xFA3F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA3F
+ { 0xFA40, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA40
+ { 0xFA41, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA41
+ { 0xFA42, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA42
+ { 0xFA43, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA43
+ { 0xFA44, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA44
+ { 0xFA45, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA45
+ { 0xFA46, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA46
+ { 0xFA47, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA47
+ { 0xFA48, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA48
+ { 0xFA49, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA49
+ { 0xFA4A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA4A
+ { 0xFA4B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA4B
+ { 0xFA4C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA4C
+ { 0xFA4D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA4D
+ { 0xFA4E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA4E
+ { 0xFA4F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA4F
+ { 0xFA50, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA50
+ { 0xFA51, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA51
+ { 0xFA52, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA52
+ { 0xFA53, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA53
+ { 0xFA54, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA54
+ { 0xFA55, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA55
+ { 0xFA56, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA56
+ { 0xFA57, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA57
+ { 0xFA58, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA58
+ { 0xFA59, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA59
+ { 0xFA5A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA5A
+ { 0xFA5B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA5B
+ { 0xFA5C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA5C
+ { 0xFA5D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA5D
+ { 0xFA5E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA5E
+ { 0xFA5F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA5F
+ { 0xFA60, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA60
+ { 0xFA61, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA61
+ { 0xFA62, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA62
+ { 0xFA63, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA63
+ { 0xFA64, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA64
+ { 0xFA65, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA65
+ { 0xFA66, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA66
+ { 0xFA67, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA67
+ { 0xFA68, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA68
+ { 0xFA69, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA69
+ { 0xFA6A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA6A
+ { 0xFA6B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA6B
+ { 0xFA6C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA6C
+ { 0xFA6D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA6D
+ { 0xFA70, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA70
+ { 0xFA71, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA71
+ { 0xFA72, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA72
+ { 0xFA73, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA73
+ { 0xFA74, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA74
+ { 0xFA75, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA75
+ { 0xFA76, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA76
+ { 0xFA77, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA77
+ { 0xFA78, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA78
+ { 0xFA79, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA79
+ { 0xFA7A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA7A
+ { 0xFA7B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA7B
+ { 0xFA7C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA7C
+ { 0xFA7D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA7D
+ { 0xFA7E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA7E
+ { 0xFA7F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA7F
+ { 0xFA80, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA80
+ { 0xFA81, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA81
+ { 0xFA82, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA82
+ { 0xFA83, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA83
+ { 0xFA84, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA84
+ { 0xFA85, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA85
+ { 0xFA86, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA86
+ { 0xFA87, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA87
+ { 0xFA88, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA88
+ { 0xFA89, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA89
+ { 0xFA8A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA8A
+ { 0xFA8B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA8B
+ { 0xFA8C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA8C
+ { 0xFA8D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA8D
+ { 0xFA8E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA8E
+ { 0xFA8F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA8F
+ { 0xFA90, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA90
+ { 0xFA91, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA91
+ { 0xFA92, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA92
+ { 0xFA93, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA93
+ { 0xFA94, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA94
+ { 0xFA95, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA95
+ { 0xFA96, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA96
+ { 0xFA97, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA97
+ { 0xFA98, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA98
+ { 0xFA99, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA99
+ { 0xFA9A, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA9A
+ { 0xFA9B, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA9B
+ { 0xFA9C, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA9C
+ { 0xFA9D, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA9D
+ { 0xFA9E, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA9E
+ { 0xFA9F, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FA9F
+ { 0xFAA0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA0
+ { 0xFAA1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA1
+ { 0xFAA2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA2
+ { 0xFAA3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA3
+ { 0xFAA4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA4
+ { 0xFAA5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA5
+ { 0xFAA6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA6
+ { 0xFAA7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA7
+ { 0xFAA8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA8
+ { 0xFAA9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAA9
+ { 0xFAAA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAAA
+ { 0xFAAB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAAB
+ { 0xFAAC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAAC
+ { 0xFAAD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAAD
+ { 0xFAAE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAAE
+ { 0xFAAF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAAF
+ { 0xFAB0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB0
+ { 0xFAB1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB1
+ { 0xFAB2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB2
+ { 0xFAB3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB3
+ { 0xFAB4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB4
+ { 0xFAB5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB5
+ { 0xFAB6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB6
+ { 0xFAB7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB7
+ { 0xFAB8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB8
+ { 0xFAB9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAB9
+ { 0xFABA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FABA
+ { 0xFABB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FABB
+ { 0xFABC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FABC
+ { 0xFABD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FABD
+ { 0xFABE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FABE
+ { 0xFABF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FABF
+ { 0xFAC0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC0
+ { 0xFAC1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC1
+ { 0xFAC2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC2
+ { 0xFAC3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC3
+ { 0xFAC4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC4
+ { 0xFAC5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC5
+ { 0xFAC6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC6
+ { 0xFAC7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC7
+ { 0xFAC8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC8
+ { 0xFAC9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAC9
+ { 0xFACA, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FACA
+ { 0xFACB, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FACB
+ { 0xFACC, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FACC
+ { 0xFACD, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FACD
+ { 0xFACE, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FACE
+ { 0xFACF, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FACF
+ { 0xFAD0, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD0
+ { 0xFAD1, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD1
+ { 0xFAD2, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD2
+ { 0xFAD3, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD3
+ { 0xFAD4, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD4
+ { 0xFAD5, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD5
+ { 0xFAD6, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD6
+ { 0xFAD7, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD7
+ { 0xFAD8, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD8
+ { 0xFAD9, BIDI_L }, // CJK COMPATIBILITY IDEOGRAPH-FAD9
+ { 0xFB00, BIDI_L }, // LATIN SMALL LIGATURE FF
+ { 0xFB01, BIDI_L }, // LATIN SMALL LIGATURE FI
+ { 0xFB02, BIDI_L }, // LATIN SMALL LIGATURE FL
+ { 0xFB03, BIDI_L }, // LATIN SMALL LIGATURE FFI
+ { 0xFB04, BIDI_L }, // LATIN SMALL LIGATURE FFL
+ { 0xFB05, BIDI_L }, // LATIN SMALL LIGATURE LONG S T
+ { 0xFB06, BIDI_L }, // LATIN SMALL LIGATURE ST
+ { 0xFB13, BIDI_L }, // ARMENIAN SMALL LIGATURE MEN NOW
+ { 0xFB14, BIDI_L }, // ARMENIAN SMALL LIGATURE MEN ECH
+ { 0xFB15, BIDI_L }, // ARMENIAN SMALL LIGATURE MEN INI
+ { 0xFB16, BIDI_L }, // ARMENIAN SMALL LIGATURE VEW NOW
+ { 0xFB17, BIDI_L }, // ARMENIAN SMALL LIGATURE MEN XEH
+ { 0xFB1D, BIDI_R }, // HEBREW LETTER YOD WITH HIRIQ
+ { 0xFB1E, BIDI_NSM }, // HEBREW POINT JUDEO-SPANISH VARIKA
+ { 0xFB1F, BIDI_R }, // HEBREW LIGATURE YIDDISH YOD YOD PATAH
+ { 0xFB20, BIDI_R }, // HEBREW LETTER ALTERNATIVE AYIN
+ { 0xFB21, BIDI_R }, // HEBREW LETTER WIDE ALEF
+ { 0xFB22, BIDI_R }, // HEBREW LETTER WIDE DALET
+ { 0xFB23, BIDI_R }, // HEBREW LETTER WIDE HE
+ { 0xFB24, BIDI_R }, // HEBREW LETTER WIDE KAF
+ { 0xFB25, BIDI_R }, // HEBREW LETTER WIDE LAMED
+ { 0xFB26, BIDI_R }, // HEBREW LETTER WIDE FINAL MEM
+ { 0xFB27, BIDI_R }, // HEBREW LETTER WIDE RESH
+ { 0xFB28, BIDI_R }, // HEBREW LETTER WIDE TAV
+ { 0xFB29, BIDI_ES }, // HEBREW LETTER ALTERNATIVE PLUS SIGN
+ { 0xFB2A, BIDI_R }, // HEBREW LETTER SHIN WITH SHIN DOT
+ { 0xFB2B, BIDI_R }, // HEBREW LETTER SHIN WITH SIN DOT
+ { 0xFB2C, BIDI_R }, // HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+ { 0xFB2D, BIDI_R }, // HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+ { 0xFB2E, BIDI_R }, // HEBREW LETTER ALEF WITH PATAH
+ { 0xFB2F, BIDI_R }, // HEBREW LETTER ALEF WITH QAMATS
+ { 0xFB30, BIDI_R }, // HEBREW LETTER ALEF WITH MAPIQ
+ { 0xFB31, BIDI_R }, // HEBREW LETTER BET WITH DAGESH
+ { 0xFB32, BIDI_R }, // HEBREW LETTER GIMEL WITH DAGESH
+ { 0xFB33, BIDI_R }, // HEBREW LETTER DALET WITH DAGESH
+ { 0xFB34, BIDI_R }, // HEBREW LETTER HE WITH MAPIQ
+ { 0xFB35, BIDI_R }, // HEBREW LETTER VAV WITH DAGESH
+ { 0xFB36, BIDI_R }, // HEBREW LETTER ZAYIN WITH DAGESH
+ { 0xFB38, BIDI_R }, // HEBREW LETTER TET WITH DAGESH
+ { 0xFB39, BIDI_R }, // HEBREW LETTER YOD WITH DAGESH
+ { 0xFB3A, BIDI_R }, // HEBREW LETTER FINAL KAF WITH DAGESH
+ { 0xFB3B, BIDI_R }, // HEBREW LETTER KAF WITH DAGESH
+ { 0xFB3C, BIDI_R }, // HEBREW LETTER LAMED WITH DAGESH
+ { 0xFB3E, BIDI_R }, // HEBREW LETTER MEM WITH DAGESH
+ { 0xFB40, BIDI_R }, // HEBREW LETTER NUN WITH DAGESH
+ { 0xFB41, BIDI_R }, // HEBREW LETTER SAMEKH WITH DAGESH
+ { 0xFB43, BIDI_R }, // HEBREW LETTER FINAL PE WITH DAGESH
+ { 0xFB44, BIDI_R }, // HEBREW LETTER PE WITH DAGESH
+ { 0xFB46, BIDI_R }, // HEBREW LETTER TSADI WITH DAGESH
+ { 0xFB47, BIDI_R }, // HEBREW LETTER QOF WITH DAGESH
+ { 0xFB48, BIDI_R }, // HEBREW LETTER RESH WITH DAGESH
+ { 0xFB49, BIDI_R }, // HEBREW LETTER SHIN WITH DAGESH
+ { 0xFB4A, BIDI_R }, // HEBREW LETTER TAV WITH DAGESH
+ { 0xFB4B, BIDI_R }, // HEBREW LETTER VAV WITH HOLAM
+ { 0xFB4C, BIDI_R }, // HEBREW LETTER BET WITH RAFE
+ { 0xFB4D, BIDI_R }, // HEBREW LETTER KAF WITH RAFE
+ { 0xFB4E, BIDI_R }, // HEBREW LETTER PE WITH RAFE
+ { 0xFB4F, BIDI_R }, // HEBREW LIGATURE ALEF LAMED
+ { 0xFB50, BIDI_AL }, // ARABIC LETTER ALEF WASLA ISOLATED FORM
+ { 0xFB51, BIDI_AL }, // ARABIC LETTER ALEF WASLA FINAL FORM
+ { 0xFB52, BIDI_AL }, // ARABIC LETTER BEEH ISOLATED FORM
+ { 0xFB53, BIDI_AL }, // ARABIC LETTER BEEH FINAL FORM
+ { 0xFB54, BIDI_AL }, // ARABIC LETTER BEEH INITIAL FORM
+ { 0xFB55, BIDI_AL }, // ARABIC LETTER BEEH MEDIAL FORM
+ { 0xFB56, BIDI_AL }, // ARABIC LETTER PEH ISOLATED FORM
+ { 0xFB57, BIDI_AL }, // ARABIC LETTER PEH FINAL FORM
+ { 0xFB58, BIDI_AL }, // ARABIC LETTER PEH INITIAL FORM
+ { 0xFB59, BIDI_AL }, // ARABIC LETTER PEH MEDIAL FORM
+ { 0xFB5A, BIDI_AL }, // ARABIC LETTER BEHEH ISOLATED FORM
+ { 0xFB5B, BIDI_AL }, // ARABIC LETTER BEHEH FINAL FORM
+ { 0xFB5C, BIDI_AL }, // ARABIC LETTER BEHEH INITIAL FORM
+ { 0xFB5D, BIDI_AL }, // ARABIC LETTER BEHEH MEDIAL FORM
+ { 0xFB5E, BIDI_AL }, // ARABIC LETTER TTEHEH ISOLATED FORM
+ { 0xFB5F, BIDI_AL }, // ARABIC LETTER TTEHEH FINAL FORM
+ { 0xFB60, BIDI_AL }, // ARABIC LETTER TTEHEH INITIAL FORM
+ { 0xFB61, BIDI_AL }, // ARABIC LETTER TTEHEH MEDIAL FORM
+ { 0xFB62, BIDI_AL }, // ARABIC LETTER TEHEH ISOLATED FORM
+ { 0xFB63, BIDI_AL }, // ARABIC LETTER TEHEH FINAL FORM
+ { 0xFB64, BIDI_AL }, // ARABIC LETTER TEHEH INITIAL FORM
+ { 0xFB65, BIDI_AL }, // ARABIC LETTER TEHEH MEDIAL FORM
+ { 0xFB66, BIDI_AL }, // ARABIC LETTER TTEH ISOLATED FORM
+ { 0xFB67, BIDI_AL }, // ARABIC LETTER TTEH FINAL FORM
+ { 0xFB68, BIDI_AL }, // ARABIC LETTER TTEH INITIAL FORM
+ { 0xFB69, BIDI_AL }, // ARABIC LETTER TTEH MEDIAL FORM
+ { 0xFB6A, BIDI_AL }, // ARABIC LETTER VEH ISOLATED FORM
+ { 0xFB6B, BIDI_AL }, // ARABIC LETTER VEH FINAL FORM
+ { 0xFB6C, BIDI_AL }, // ARABIC LETTER VEH INITIAL FORM
+ { 0xFB6D, BIDI_AL }, // ARABIC LETTER VEH MEDIAL FORM
+ { 0xFB6E, BIDI_AL }, // ARABIC LETTER PEHEH ISOLATED FORM
+ { 0xFB6F, BIDI_AL }, // ARABIC LETTER PEHEH FINAL FORM
+ { 0xFB70, BIDI_AL }, // ARABIC LETTER PEHEH INITIAL FORM
+ { 0xFB71, BIDI_AL }, // ARABIC LETTER PEHEH MEDIAL FORM
+ { 0xFB72, BIDI_AL }, // ARABIC LETTER DYEH ISOLATED FORM
+ { 0xFB73, BIDI_AL }, // ARABIC LETTER DYEH FINAL FORM
+ { 0xFB74, BIDI_AL }, // ARABIC LETTER DYEH INITIAL FORM
+ { 0xFB75, BIDI_AL }, // ARABIC LETTER DYEH MEDIAL FORM
+ { 0xFB76, BIDI_AL }, // ARABIC LETTER NYEH ISOLATED FORM
+ { 0xFB77, BIDI_AL }, // ARABIC LETTER NYEH FINAL FORM
+ { 0xFB78, BIDI_AL }, // ARABIC LETTER NYEH INITIAL FORM
+ { 0xFB79, BIDI_AL }, // ARABIC LETTER NYEH MEDIAL FORM
+ { 0xFB7A, BIDI_AL }, // ARABIC LETTER TCHEH ISOLATED FORM
+ { 0xFB7B, BIDI_AL }, // ARABIC LETTER TCHEH FINAL FORM
+ { 0xFB7C, BIDI_AL }, // ARABIC LETTER TCHEH INITIAL FORM
+ { 0xFB7D, BIDI_AL }, // ARABIC LETTER TCHEH MEDIAL FORM
+ { 0xFB7E, BIDI_AL }, // ARABIC LETTER TCHEHEH ISOLATED FORM
+ { 0xFB7F, BIDI_AL }, // ARABIC LETTER TCHEHEH FINAL FORM
+ { 0xFB80, BIDI_AL }, // ARABIC LETTER TCHEHEH INITIAL FORM
+ { 0xFB81, BIDI_AL }, // ARABIC LETTER TCHEHEH MEDIAL FORM
+ { 0xFB82, BIDI_AL }, // ARABIC LETTER DDAHAL ISOLATED FORM
+ { 0xFB83, BIDI_AL }, // ARABIC LETTER DDAHAL FINAL FORM
+ { 0xFB84, BIDI_AL }, // ARABIC LETTER DAHAL ISOLATED FORM
+ { 0xFB85, BIDI_AL }, // ARABIC LETTER DAHAL FINAL FORM
+ { 0xFB86, BIDI_AL }, // ARABIC LETTER DUL ISOLATED FORM
+ { 0xFB87, BIDI_AL }, // ARABIC LETTER DUL FINAL FORM
+ { 0xFB88, BIDI_AL }, // ARABIC LETTER DDAL ISOLATED FORM
+ { 0xFB89, BIDI_AL }, // ARABIC LETTER DDAL FINAL FORM
+ { 0xFB8A, BIDI_AL }, // ARABIC LETTER JEH ISOLATED FORM
+ { 0xFB8B, BIDI_AL }, // ARABIC LETTER JEH FINAL FORM
+ { 0xFB8C, BIDI_AL }, // ARABIC LETTER RREH ISOLATED FORM
+ { 0xFB8D, BIDI_AL }, // ARABIC LETTER RREH FINAL FORM
+ { 0xFB8E, BIDI_AL }, // ARABIC LETTER KEHEH ISOLATED FORM
+ { 0xFB8F, BIDI_AL }, // ARABIC LETTER KEHEH FINAL FORM
+ { 0xFB90, BIDI_AL }, // ARABIC LETTER KEHEH INITIAL FORM
+ { 0xFB91, BIDI_AL }, // ARABIC LETTER KEHEH MEDIAL FORM
+ { 0xFB92, BIDI_AL }, // ARABIC LETTER GAF ISOLATED FORM
+ { 0xFB93, BIDI_AL }, // ARABIC LETTER GAF FINAL FORM
+ { 0xFB94, BIDI_AL }, // ARABIC LETTER GAF INITIAL FORM
+ { 0xFB95, BIDI_AL }, // ARABIC LETTER GAF MEDIAL FORM
+ { 0xFB96, BIDI_AL }, // ARABIC LETTER GUEH ISOLATED FORM
+ { 0xFB97, BIDI_AL }, // ARABIC LETTER GUEH FINAL FORM
+ { 0xFB98, BIDI_AL }, // ARABIC LETTER GUEH INITIAL FORM
+ { 0xFB99, BIDI_AL }, // ARABIC LETTER GUEH MEDIAL FORM
+ { 0xFB9A, BIDI_AL }, // ARABIC LETTER NGOEH ISOLATED FORM
+ { 0xFB9B, BIDI_AL }, // ARABIC LETTER NGOEH FINAL FORM
+ { 0xFB9C, BIDI_AL }, // ARABIC LETTER NGOEH INITIAL FORM
+ { 0xFB9D, BIDI_AL }, // ARABIC LETTER NGOEH MEDIAL FORM
+ { 0xFB9E, BIDI_AL }, // ARABIC LETTER NOON GHUNNA ISOLATED FORM
+ { 0xFB9F, BIDI_AL }, // ARABIC LETTER NOON GHUNNA FINAL FORM
+ { 0xFBA0, BIDI_AL }, // ARABIC LETTER RNOON ISOLATED FORM
+ { 0xFBA1, BIDI_AL }, // ARABIC LETTER RNOON FINAL FORM
+ { 0xFBA2, BIDI_AL }, // ARABIC LETTER RNOON INITIAL FORM
+ { 0xFBA3, BIDI_AL }, // ARABIC LETTER RNOON MEDIAL FORM
+ { 0xFBA4, BIDI_AL }, // ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM
+ { 0xFBA5, BIDI_AL }, // ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM
+ { 0xFBA6, BIDI_AL }, // ARABIC LETTER HEH GOAL ISOLATED FORM
+ { 0xFBA7, BIDI_AL }, // ARABIC LETTER HEH GOAL FINAL FORM
+ { 0xFBA8, BIDI_AL }, // ARABIC LETTER HEH GOAL INITIAL FORM
+ { 0xFBA9, BIDI_AL }, // ARABIC LETTER HEH GOAL MEDIAL FORM
+ { 0xFBAA, BIDI_AL }, // ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM
+ { 0xFBAB, BIDI_AL }, // ARABIC LETTER HEH DOACHASHMEE FINAL FORM
+ { 0xFBAC, BIDI_AL }, // ARABIC LETTER HEH DOACHASHMEE INITIAL FORM
+ { 0xFBAD, BIDI_AL }, // ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM
+ { 0xFBAE, BIDI_AL }, // ARABIC LETTER YEH BARREE ISOLATED FORM
+ { 0xFBAF, BIDI_AL }, // ARABIC LETTER YEH BARREE FINAL FORM
+ { 0xFBB0, BIDI_AL }, // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+ { 0xFBB1, BIDI_AL }, // ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+ { 0xFBB2, BIDI_AL }, // ARABIC SYMBOL DOT ABOVE
+ { 0xFBB3, BIDI_AL }, // ARABIC SYMBOL DOT BELOW
+ { 0xFBB4, BIDI_AL }, // ARABIC SYMBOL TWO DOTS ABOVE
+ { 0xFBB5, BIDI_AL }, // ARABIC SYMBOL TWO DOTS BELOW
+ { 0xFBB6, BIDI_AL }, // ARABIC SYMBOL THREE DOTS ABOVE
+ { 0xFBB7, BIDI_AL }, // ARABIC SYMBOL THREE DOTS BELOW
+ { 0xFBB8, BIDI_AL }, // ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE
+ { 0xFBB9, BIDI_AL }, // ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW
+ { 0xFBBA, BIDI_AL }, // ARABIC SYMBOL FOUR DOTS ABOVE
+ { 0xFBBB, BIDI_AL }, // ARABIC SYMBOL FOUR DOTS BELOW
+ { 0xFBBC, BIDI_AL }, // ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW
+ { 0xFBBD, BIDI_AL }, // ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE
+ { 0xFBBE, BIDI_AL }, // ARABIC SYMBOL TWO DOTS VERTICALLY BELOW
+ { 0xFBBF, BIDI_AL }, // ARABIC SYMBOL RING
+ { 0xFBC0, BIDI_AL }, // ARABIC SYMBOL SMALL TAH ABOVE
+ { 0xFBC1, BIDI_AL }, // ARABIC SYMBOL SMALL TAH BELOW
+ { 0xFBD3, BIDI_AL }, // ARABIC LETTER NG ISOLATED FORM
+ { 0xFBD4, BIDI_AL }, // ARABIC LETTER NG FINAL FORM
+ { 0xFBD5, BIDI_AL }, // ARABIC LETTER NG INITIAL FORM
+ { 0xFBD6, BIDI_AL }, // ARABIC LETTER NG MEDIAL FORM
+ { 0xFBD7, BIDI_AL }, // ARABIC LETTER U ISOLATED FORM
+ { 0xFBD8, BIDI_AL }, // ARABIC LETTER U FINAL FORM
+ { 0xFBD9, BIDI_AL }, // ARABIC LETTER OE ISOLATED FORM
+ { 0xFBDA, BIDI_AL }, // ARABIC LETTER OE FINAL FORM
+ { 0xFBDB, BIDI_AL }, // ARABIC LETTER YU ISOLATED FORM
+ { 0xFBDC, BIDI_AL }, // ARABIC LETTER YU FINAL FORM
+ { 0xFBDD, BIDI_AL }, // ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM
+ { 0xFBDE, BIDI_AL }, // ARABIC LETTER VE ISOLATED FORM
+ { 0xFBDF, BIDI_AL }, // ARABIC LETTER VE FINAL FORM
+ { 0xFBE0, BIDI_AL }, // ARABIC LETTER KIRGHIZ OE ISOLATED FORM
+ { 0xFBE1, BIDI_AL }, // ARABIC LETTER KIRGHIZ OE FINAL FORM
+ { 0xFBE2, BIDI_AL }, // ARABIC LETTER KIRGHIZ YU ISOLATED FORM
+ { 0xFBE3, BIDI_AL }, // ARABIC LETTER KIRGHIZ YU FINAL FORM
+ { 0xFBE4, BIDI_AL }, // ARABIC LETTER E ISOLATED FORM
+ { 0xFBE5, BIDI_AL }, // ARABIC LETTER E FINAL FORM
+ { 0xFBE6, BIDI_AL }, // ARABIC LETTER E INITIAL FORM
+ { 0xFBE7, BIDI_AL }, // ARABIC LETTER E MEDIAL FORM
+ { 0xFBE8, BIDI_AL }, // ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM
+ { 0xFBE9, BIDI_AL }, // ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM
+ { 0xFBEA, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM
+ { 0xFBEB, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM
+ { 0xFBEC, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM
+ { 0xFBED, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM
+ { 0xFBEE, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM
+ { 0xFBEF, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM
+ { 0xFBF0, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM
+ { 0xFBF1, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM
+ { 0xFBF2, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM
+ { 0xFBF3, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM
+ { 0xFBF4, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM
+ { 0xFBF5, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM
+ { 0xFBF6, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM
+ { 0xFBF7, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM
+ { 0xFBF8, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM
+ { 0xFBF9, BIDI_AL }, // ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFBFA, BIDI_AL }, // ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+ { 0xFBFB, BIDI_AL }, // ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM
+ { 0xFBFC, BIDI_AL }, // ARABIC LETTER FARSI YEH ISOLATED FORM
+ { 0xFBFD, BIDI_AL }, // ARABIC LETTER FARSI YEH FINAL FORM
+ { 0xFBFE, BIDI_AL }, // ARABIC LETTER FARSI YEH INITIAL FORM
+ { 0xFBFF, BIDI_AL }, // ARABIC LETTER FARSI YEH MEDIAL FORM
+ { 0xFC00, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM
+ { 0xFC01, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM
+ { 0xFC02, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM
+ { 0xFC03, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC04, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM
+ { 0xFC05, BIDI_AL }, // ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM
+ { 0xFC06, BIDI_AL }, // ARABIC LIGATURE BEH WITH HAH ISOLATED FORM
+ { 0xFC07, BIDI_AL }, // ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM
+ { 0xFC08, BIDI_AL }, // ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM
+ { 0xFC09, BIDI_AL }, // ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC0A, BIDI_AL }, // ARABIC LIGATURE BEH WITH YEH ISOLATED FORM
+ { 0xFC0B, BIDI_AL }, // ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM
+ { 0xFC0C, BIDI_AL }, // ARABIC LIGATURE TEH WITH HAH ISOLATED FORM
+ { 0xFC0D, BIDI_AL }, // ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM
+ { 0xFC0E, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM
+ { 0xFC0F, BIDI_AL }, // ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC10, BIDI_AL }, // ARABIC LIGATURE TEH WITH YEH ISOLATED FORM
+ { 0xFC11, BIDI_AL }, // ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM
+ { 0xFC12, BIDI_AL }, // ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM
+ { 0xFC13, BIDI_AL }, // ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC14, BIDI_AL }, // ARABIC LIGATURE THEH WITH YEH ISOLATED FORM
+ { 0xFC15, BIDI_AL }, // ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM
+ { 0xFC16, BIDI_AL }, // ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM
+ { 0xFC17, BIDI_AL }, // ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM
+ { 0xFC18, BIDI_AL }, // ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM
+ { 0xFC19, BIDI_AL }, // ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM
+ { 0xFC1A, BIDI_AL }, // ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM
+ { 0xFC1B, BIDI_AL }, // ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM
+ { 0xFC1C, BIDI_AL }, // ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM
+ { 0xFC1D, BIDI_AL }, // ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM
+ { 0xFC1E, BIDI_AL }, // ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM
+ { 0xFC1F, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM
+ { 0xFC20, BIDI_AL }, // ARABIC LIGATURE SAD WITH HAH ISOLATED FORM
+ { 0xFC21, BIDI_AL }, // ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM
+ { 0xFC22, BIDI_AL }, // ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM
+ { 0xFC23, BIDI_AL }, // ARABIC LIGATURE DAD WITH HAH ISOLATED FORM
+ { 0xFC24, BIDI_AL }, // ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM
+ { 0xFC25, BIDI_AL }, // ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM
+ { 0xFC26, BIDI_AL }, // ARABIC LIGATURE TAH WITH HAH ISOLATED FORM
+ { 0xFC27, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM
+ { 0xFC28, BIDI_AL }, // ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM
+ { 0xFC29, BIDI_AL }, // ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM
+ { 0xFC2A, BIDI_AL }, // ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM
+ { 0xFC2B, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM
+ { 0xFC2C, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM
+ { 0xFC2D, BIDI_AL }, // ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM
+ { 0xFC2E, BIDI_AL }, // ARABIC LIGATURE FEH WITH HAH ISOLATED FORM
+ { 0xFC2F, BIDI_AL }, // ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM
+ { 0xFC30, BIDI_AL }, // ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM
+ { 0xFC31, BIDI_AL }, // ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC32, BIDI_AL }, // ARABIC LIGATURE FEH WITH YEH ISOLATED FORM
+ { 0xFC33, BIDI_AL }, // ARABIC LIGATURE QAF WITH HAH ISOLATED FORM
+ { 0xFC34, BIDI_AL }, // ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM
+ { 0xFC35, BIDI_AL }, // ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC36, BIDI_AL }, // ARABIC LIGATURE QAF WITH YEH ISOLATED FORM
+ { 0xFC37, BIDI_AL }, // ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM
+ { 0xFC38, BIDI_AL }, // ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM
+ { 0xFC39, BIDI_AL }, // ARABIC LIGATURE KAF WITH HAH ISOLATED FORM
+ { 0xFC3A, BIDI_AL }, // ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM
+ { 0xFC3B, BIDI_AL }, // ARABIC LIGATURE KAF WITH LAM ISOLATED FORM
+ { 0xFC3C, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM
+ { 0xFC3D, BIDI_AL }, // ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC3E, BIDI_AL }, // ARABIC LIGATURE KAF WITH YEH ISOLATED FORM
+ { 0xFC3F, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM
+ { 0xFC40, BIDI_AL }, // ARABIC LIGATURE LAM WITH HAH ISOLATED FORM
+ { 0xFC41, BIDI_AL }, // ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM
+ { 0xFC42, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM
+ { 0xFC43, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC44, BIDI_AL }, // ARABIC LIGATURE LAM WITH YEH ISOLATED FORM
+ { 0xFC45, BIDI_AL }, // ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM
+ { 0xFC46, BIDI_AL }, // ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM
+ { 0xFC47, BIDI_AL }, // ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM
+ { 0xFC48, BIDI_AL }, // ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM
+ { 0xFC49, BIDI_AL }, // ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC4A, BIDI_AL }, // ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM
+ { 0xFC4B, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM
+ { 0xFC4C, BIDI_AL }, // ARABIC LIGATURE NOON WITH HAH ISOLATED FORM
+ { 0xFC4D, BIDI_AL }, // ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM
+ { 0xFC4E, BIDI_AL }, // ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM
+ { 0xFC4F, BIDI_AL }, // ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC50, BIDI_AL }, // ARABIC LIGATURE NOON WITH YEH ISOLATED FORM
+ { 0xFC51, BIDI_AL }, // ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM
+ { 0xFC52, BIDI_AL }, // ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM
+ { 0xFC53, BIDI_AL }, // ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC54, BIDI_AL }, // ARABIC LIGATURE HEH WITH YEH ISOLATED FORM
+ { 0xFC55, BIDI_AL }, // ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM
+ { 0xFC56, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAH ISOLATED FORM
+ { 0xFC57, BIDI_AL }, // ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM
+ { 0xFC58, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM
+ { 0xFC59, BIDI_AL }, // ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFC5A, BIDI_AL }, // ARABIC LIGATURE YEH WITH YEH ISOLATED FORM
+ { 0xFC5B, BIDI_AL }, // ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM
+ { 0xFC5C, BIDI_AL }, // ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM
+ { 0xFC5D, BIDI_AL }, // ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM
+ { 0xFC5E, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
+ { 0xFC5F, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
+ { 0xFC60, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
+ { 0xFC61, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
+ { 0xFC62, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
+ { 0xFC63, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
+ { 0xFC64, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM
+ { 0xFC65, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM
+ { 0xFC66, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM
+ { 0xFC67, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM
+ { 0xFC68, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM
+ { 0xFC69, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM
+ { 0xFC6A, BIDI_AL }, // ARABIC LIGATURE BEH WITH REH FINAL FORM
+ { 0xFC6B, BIDI_AL }, // ARABIC LIGATURE BEH WITH ZAIN FINAL FORM
+ { 0xFC6C, BIDI_AL }, // ARABIC LIGATURE BEH WITH MEEM FINAL FORM
+ { 0xFC6D, BIDI_AL }, // ARABIC LIGATURE BEH WITH NOON FINAL FORM
+ { 0xFC6E, BIDI_AL }, // ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM
+ { 0xFC6F, BIDI_AL }, // ARABIC LIGATURE BEH WITH YEH FINAL FORM
+ { 0xFC70, BIDI_AL }, // ARABIC LIGATURE TEH WITH REH FINAL FORM
+ { 0xFC71, BIDI_AL }, // ARABIC LIGATURE TEH WITH ZAIN FINAL FORM
+ { 0xFC72, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM FINAL FORM
+ { 0xFC73, BIDI_AL }, // ARABIC LIGATURE TEH WITH NOON FINAL FORM
+ { 0xFC74, BIDI_AL }, // ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM
+ { 0xFC75, BIDI_AL }, // ARABIC LIGATURE TEH WITH YEH FINAL FORM
+ { 0xFC76, BIDI_AL }, // ARABIC LIGATURE THEH WITH REH FINAL FORM
+ { 0xFC77, BIDI_AL }, // ARABIC LIGATURE THEH WITH ZAIN FINAL FORM
+ { 0xFC78, BIDI_AL }, // ARABIC LIGATURE THEH WITH MEEM FINAL FORM
+ { 0xFC79, BIDI_AL }, // ARABIC LIGATURE THEH WITH NOON FINAL FORM
+ { 0xFC7A, BIDI_AL }, // ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM
+ { 0xFC7B, BIDI_AL }, // ARABIC LIGATURE THEH WITH YEH FINAL FORM
+ { 0xFC7C, BIDI_AL }, // ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM
+ { 0xFC7D, BIDI_AL }, // ARABIC LIGATURE FEH WITH YEH FINAL FORM
+ { 0xFC7E, BIDI_AL }, // ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM
+ { 0xFC7F, BIDI_AL }, // ARABIC LIGATURE QAF WITH YEH FINAL FORM
+ { 0xFC80, BIDI_AL }, // ARABIC LIGATURE KAF WITH ALEF FINAL FORM
+ { 0xFC81, BIDI_AL }, // ARABIC LIGATURE KAF WITH LAM FINAL FORM
+ { 0xFC82, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM FINAL FORM
+ { 0xFC83, BIDI_AL }, // ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM
+ { 0xFC84, BIDI_AL }, // ARABIC LIGATURE KAF WITH YEH FINAL FORM
+ { 0xFC85, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM FINAL FORM
+ { 0xFC86, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM
+ { 0xFC87, BIDI_AL }, // ARABIC LIGATURE LAM WITH YEH FINAL FORM
+ { 0xFC88, BIDI_AL }, // ARABIC LIGATURE MEEM WITH ALEF FINAL FORM
+ { 0xFC89, BIDI_AL }, // ARABIC LIGATURE MEEM WITH MEEM FINAL FORM
+ { 0xFC8A, BIDI_AL }, // ARABIC LIGATURE NOON WITH REH FINAL FORM
+ { 0xFC8B, BIDI_AL }, // ARABIC LIGATURE NOON WITH ZAIN FINAL FORM
+ { 0xFC8C, BIDI_AL }, // ARABIC LIGATURE NOON WITH MEEM FINAL FORM
+ { 0xFC8D, BIDI_AL }, // ARABIC LIGATURE NOON WITH NOON FINAL FORM
+ { 0xFC8E, BIDI_AL }, // ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM
+ { 0xFC8F, BIDI_AL }, // ARABIC LIGATURE NOON WITH YEH FINAL FORM
+ { 0xFC90, BIDI_AL }, // ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM
+ { 0xFC91, BIDI_AL }, // ARABIC LIGATURE YEH WITH REH FINAL FORM
+ { 0xFC92, BIDI_AL }, // ARABIC LIGATURE YEH WITH ZAIN FINAL FORM
+ { 0xFC93, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM FINAL FORM
+ { 0xFC94, BIDI_AL }, // ARABIC LIGATURE YEH WITH NOON FINAL FORM
+ { 0xFC95, BIDI_AL }, // ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM
+ { 0xFC96, BIDI_AL }, // ARABIC LIGATURE YEH WITH YEH FINAL FORM
+ { 0xFC97, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM
+ { 0xFC98, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM
+ { 0xFC99, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM
+ { 0xFC9A, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM
+ { 0xFC9B, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM
+ { 0xFC9C, BIDI_AL }, // ARABIC LIGATURE BEH WITH JEEM INITIAL FORM
+ { 0xFC9D, BIDI_AL }, // ARABIC LIGATURE BEH WITH HAH INITIAL FORM
+ { 0xFC9E, BIDI_AL }, // ARABIC LIGATURE BEH WITH KHAH INITIAL FORM
+ { 0xFC9F, BIDI_AL }, // ARABIC LIGATURE BEH WITH MEEM INITIAL FORM
+ { 0xFCA0, BIDI_AL }, // ARABIC LIGATURE BEH WITH HEH INITIAL FORM
+ { 0xFCA1, BIDI_AL }, // ARABIC LIGATURE TEH WITH JEEM INITIAL FORM
+ { 0xFCA2, BIDI_AL }, // ARABIC LIGATURE TEH WITH HAH INITIAL FORM
+ { 0xFCA3, BIDI_AL }, // ARABIC LIGATURE TEH WITH KHAH INITIAL FORM
+ { 0xFCA4, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM INITIAL FORM
+ { 0xFCA5, BIDI_AL }, // ARABIC LIGATURE TEH WITH HEH INITIAL FORM
+ { 0xFCA6, BIDI_AL }, // ARABIC LIGATURE THEH WITH MEEM INITIAL FORM
+ { 0xFCA7, BIDI_AL }, // ARABIC LIGATURE JEEM WITH HAH INITIAL FORM
+ { 0xFCA8, BIDI_AL }, // ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM
+ { 0xFCA9, BIDI_AL }, // ARABIC LIGATURE HAH WITH JEEM INITIAL FORM
+ { 0xFCAA, BIDI_AL }, // ARABIC LIGATURE HAH WITH MEEM INITIAL FORM
+ { 0xFCAB, BIDI_AL }, // ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM
+ { 0xFCAC, BIDI_AL }, // ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM
+ { 0xFCAD, BIDI_AL }, // ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM
+ { 0xFCAE, BIDI_AL }, // ARABIC LIGATURE SEEN WITH HAH INITIAL FORM
+ { 0xFCAF, BIDI_AL }, // ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM
+ { 0xFCB0, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM
+ { 0xFCB1, BIDI_AL }, // ARABIC LIGATURE SAD WITH HAH INITIAL FORM
+ { 0xFCB2, BIDI_AL }, // ARABIC LIGATURE SAD WITH KHAH INITIAL FORM
+ { 0xFCB3, BIDI_AL }, // ARABIC LIGATURE SAD WITH MEEM INITIAL FORM
+ { 0xFCB4, BIDI_AL }, // ARABIC LIGATURE DAD WITH JEEM INITIAL FORM
+ { 0xFCB5, BIDI_AL }, // ARABIC LIGATURE DAD WITH HAH INITIAL FORM
+ { 0xFCB6, BIDI_AL }, // ARABIC LIGATURE DAD WITH KHAH INITIAL FORM
+ { 0xFCB7, BIDI_AL }, // ARABIC LIGATURE DAD WITH MEEM INITIAL FORM
+ { 0xFCB8, BIDI_AL }, // ARABIC LIGATURE TAH WITH HAH INITIAL FORM
+ { 0xFCB9, BIDI_AL }, // ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM
+ { 0xFCBA, BIDI_AL }, // ARABIC LIGATURE AIN WITH JEEM INITIAL FORM
+ { 0xFCBB, BIDI_AL }, // ARABIC LIGATURE AIN WITH MEEM INITIAL FORM
+ { 0xFCBC, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM
+ { 0xFCBD, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM
+ { 0xFCBE, BIDI_AL }, // ARABIC LIGATURE FEH WITH JEEM INITIAL FORM
+ { 0xFCBF, BIDI_AL }, // ARABIC LIGATURE FEH WITH HAH INITIAL FORM
+ { 0xFCC0, BIDI_AL }, // ARABIC LIGATURE FEH WITH KHAH INITIAL FORM
+ { 0xFCC1, BIDI_AL }, // ARABIC LIGATURE FEH WITH MEEM INITIAL FORM
+ { 0xFCC2, BIDI_AL }, // ARABIC LIGATURE QAF WITH HAH INITIAL FORM
+ { 0xFCC3, BIDI_AL }, // ARABIC LIGATURE QAF WITH MEEM INITIAL FORM
+ { 0xFCC4, BIDI_AL }, // ARABIC LIGATURE KAF WITH JEEM INITIAL FORM
+ { 0xFCC5, BIDI_AL }, // ARABIC LIGATURE KAF WITH HAH INITIAL FORM
+ { 0xFCC6, BIDI_AL }, // ARABIC LIGATURE KAF WITH KHAH INITIAL FORM
+ { 0xFCC7, BIDI_AL }, // ARABIC LIGATURE KAF WITH LAM INITIAL FORM
+ { 0xFCC8, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM INITIAL FORM
+ { 0xFCC9, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM INITIAL FORM
+ { 0xFCCA, BIDI_AL }, // ARABIC LIGATURE LAM WITH HAH INITIAL FORM
+ { 0xFCCB, BIDI_AL }, // ARABIC LIGATURE LAM WITH KHAH INITIAL FORM
+ { 0xFCCC, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM INITIAL FORM
+ { 0xFCCD, BIDI_AL }, // ARABIC LIGATURE LAM WITH HEH INITIAL FORM
+ { 0xFCCE, BIDI_AL }, // ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM
+ { 0xFCCF, BIDI_AL }, // ARABIC LIGATURE MEEM WITH HAH INITIAL FORM
+ { 0xFCD0, BIDI_AL }, // ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM
+ { 0xFCD1, BIDI_AL }, // ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM
+ { 0xFCD2, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM INITIAL FORM
+ { 0xFCD3, BIDI_AL }, // ARABIC LIGATURE NOON WITH HAH INITIAL FORM
+ { 0xFCD4, BIDI_AL }, // ARABIC LIGATURE NOON WITH KHAH INITIAL FORM
+ { 0xFCD5, BIDI_AL }, // ARABIC LIGATURE NOON WITH MEEM INITIAL FORM
+ { 0xFCD6, BIDI_AL }, // ARABIC LIGATURE NOON WITH HEH INITIAL FORM
+ { 0xFCD7, BIDI_AL }, // ARABIC LIGATURE HEH WITH JEEM INITIAL FORM
+ { 0xFCD8, BIDI_AL }, // ARABIC LIGATURE HEH WITH MEEM INITIAL FORM
+ { 0xFCD9, BIDI_AL }, // ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM
+ { 0xFCDA, BIDI_AL }, // ARABIC LIGATURE YEH WITH JEEM INITIAL FORM
+ { 0xFCDB, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAH INITIAL FORM
+ { 0xFCDC, BIDI_AL }, // ARABIC LIGATURE YEH WITH KHAH INITIAL FORM
+ { 0xFCDD, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM INITIAL FORM
+ { 0xFCDE, BIDI_AL }, // ARABIC LIGATURE YEH WITH HEH INITIAL FORM
+ { 0xFCDF, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM
+ { 0xFCE0, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM
+ { 0xFCE1, BIDI_AL }, // ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM
+ { 0xFCE2, BIDI_AL }, // ARABIC LIGATURE BEH WITH HEH MEDIAL FORM
+ { 0xFCE3, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM
+ { 0xFCE4, BIDI_AL }, // ARABIC LIGATURE TEH WITH HEH MEDIAL FORM
+ { 0xFCE5, BIDI_AL }, // ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM
+ { 0xFCE6, BIDI_AL }, // ARABIC LIGATURE THEH WITH HEH MEDIAL FORM
+ { 0xFCE7, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM
+ { 0xFCE8, BIDI_AL }, // ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM
+ { 0xFCE9, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM
+ { 0xFCEA, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM
+ { 0xFCEB, BIDI_AL }, // ARABIC LIGATURE KAF WITH LAM MEDIAL FORM
+ { 0xFCEC, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM
+ { 0xFCED, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM
+ { 0xFCEE, BIDI_AL }, // ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM
+ { 0xFCEF, BIDI_AL }, // ARABIC LIGATURE NOON WITH HEH MEDIAL FORM
+ { 0xFCF0, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM
+ { 0xFCF1, BIDI_AL }, // ARABIC LIGATURE YEH WITH HEH MEDIAL FORM
+ { 0xFCF2, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM
+ { 0xFCF3, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM
+ { 0xFCF4, BIDI_AL }, // ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM
+ { 0xFCF5, BIDI_AL }, // ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFCF6, BIDI_AL }, // ARABIC LIGATURE TAH WITH YEH ISOLATED FORM
+ { 0xFCF7, BIDI_AL }, // ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFCF8, BIDI_AL }, // ARABIC LIGATURE AIN WITH YEH ISOLATED FORM
+ { 0xFCF9, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFCFA, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM
+ { 0xFCFB, BIDI_AL }, // ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFCFC, BIDI_AL }, // ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM
+ { 0xFCFD, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFCFE, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM
+ { 0xFCFF, BIDI_AL }, // ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFD00, BIDI_AL }, // ARABIC LIGATURE HAH WITH YEH ISOLATED FORM
+ { 0xFD01, BIDI_AL }, // ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFD02, BIDI_AL }, // ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM
+ { 0xFD03, BIDI_AL }, // ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFD04, BIDI_AL }, // ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM
+ { 0xFD05, BIDI_AL }, // ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFD06, BIDI_AL }, // ARABIC LIGATURE SAD WITH YEH ISOLATED FORM
+ { 0xFD07, BIDI_AL }, // ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM
+ { 0xFD08, BIDI_AL }, // ARABIC LIGATURE DAD WITH YEH ISOLATED FORM
+ { 0xFD09, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM
+ { 0xFD0A, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM
+ { 0xFD0B, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM
+ { 0xFD0C, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM
+ { 0xFD0D, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM
+ { 0xFD0E, BIDI_AL }, // ARABIC LIGATURE SEEN WITH REH ISOLATED FORM
+ { 0xFD0F, BIDI_AL }, // ARABIC LIGATURE SAD WITH REH ISOLATED FORM
+ { 0xFD10, BIDI_AL }, // ARABIC LIGATURE DAD WITH REH ISOLATED FORM
+ { 0xFD11, BIDI_AL }, // ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFD12, BIDI_AL }, // ARABIC LIGATURE TAH WITH YEH FINAL FORM
+ { 0xFD13, BIDI_AL }, // ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM
+ { 0xFD14, BIDI_AL }, // ARABIC LIGATURE AIN WITH YEH FINAL FORM
+ { 0xFD15, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM
+ { 0xFD16, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH YEH FINAL FORM
+ { 0xFD17, BIDI_AL }, // ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM
+ { 0xFD18, BIDI_AL }, // ARABIC LIGATURE SEEN WITH YEH FINAL FORM
+ { 0xFD19, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM
+ { 0xFD1A, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH YEH FINAL FORM
+ { 0xFD1B, BIDI_AL }, // ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFD1C, BIDI_AL }, // ARABIC LIGATURE HAH WITH YEH FINAL FORM
+ { 0xFD1D, BIDI_AL }, // ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD1E, BIDI_AL }, // ARABIC LIGATURE JEEM WITH YEH FINAL FORM
+ { 0xFD1F, BIDI_AL }, // ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFD20, BIDI_AL }, // ARABIC LIGATURE KHAH WITH YEH FINAL FORM
+ { 0xFD21, BIDI_AL }, // ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM
+ { 0xFD22, BIDI_AL }, // ARABIC LIGATURE SAD WITH YEH FINAL FORM
+ { 0xFD23, BIDI_AL }, // ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM
+ { 0xFD24, BIDI_AL }, // ARABIC LIGATURE DAD WITH YEH FINAL FORM
+ { 0xFD25, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM
+ { 0xFD26, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH FINAL FORM
+ { 0xFD27, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM
+ { 0xFD28, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM
+ { 0xFD29, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH REH FINAL FORM
+ { 0xFD2A, BIDI_AL }, // ARABIC LIGATURE SEEN WITH REH FINAL FORM
+ { 0xFD2B, BIDI_AL }, // ARABIC LIGATURE SAD WITH REH FINAL FORM
+ { 0xFD2C, BIDI_AL }, // ARABIC LIGATURE DAD WITH REH FINAL FORM
+ { 0xFD2D, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM
+ { 0xFD2E, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM
+ { 0xFD2F, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM
+ { 0xFD30, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM
+ { 0xFD31, BIDI_AL }, // ARABIC LIGATURE SEEN WITH HEH INITIAL FORM
+ { 0xFD32, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM
+ { 0xFD33, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM INITIAL FORM
+ { 0xFD34, BIDI_AL }, // ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM
+ { 0xFD35, BIDI_AL }, // ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM
+ { 0xFD36, BIDI_AL }, // ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM
+ { 0xFD37, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM
+ { 0xFD38, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM
+ { 0xFD39, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM
+ { 0xFD3A, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM
+ { 0xFD3B, BIDI_AL }, // ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
+ { 0xFD3C, BIDI_AL }, // ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM
+ { 0xFD3D, BIDI_AL }, // ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+ { 0xFD3E, BIDI_ON }, // ORNATE LEFT PARENTHESIS
+ { 0xFD3F, BIDI_ON }, // ORNATE RIGHT PARENTHESIS
+ { 0xFD50, BIDI_AL }, // ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
+ { 0xFD51, BIDI_AL }, // ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM
+ { 0xFD52, BIDI_AL }, // ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
+ { 0xFD53, BIDI_AL }, // ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
+ { 0xFD54, BIDI_AL }, // ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM
+ { 0xFD55, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM
+ { 0xFD56, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM
+ { 0xFD57, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM
+ { 0xFD58, BIDI_AL }, // ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM
+ { 0xFD59, BIDI_AL }, // ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM
+ { 0xFD5A, BIDI_AL }, // ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM
+ { 0xFD5B, BIDI_AL }, // ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD5C, BIDI_AL }, // ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM
+ { 0xFD5D, BIDI_AL }, // ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM
+ { 0xFD5E, BIDI_AL }, // ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD5F, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM
+ { 0xFD60, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM
+ { 0xFD61, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM
+ { 0xFD62, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD63, BIDI_AL }, // ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFD64, BIDI_AL }, // ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM
+ { 0xFD65, BIDI_AL }, // ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM
+ { 0xFD66, BIDI_AL }, // ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD67, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM
+ { 0xFD68, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM
+ { 0xFD69, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM
+ { 0xFD6A, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM
+ { 0xFD6B, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM
+ { 0xFD6C, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD6D, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFD6E, BIDI_AL }, // ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFD6F, BIDI_AL }, // ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM
+ { 0xFD70, BIDI_AL }, // ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM
+ { 0xFD71, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM
+ { 0xFD72, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM
+ { 0xFD73, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFD74, BIDI_AL }, // ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM
+ { 0xFD75, BIDI_AL }, // ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM
+ { 0xFD76, BIDI_AL }, // ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD77, BIDI_AL }, // ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFD78, BIDI_AL }, // ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD79, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD7A, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM
+ { 0xFD7B, BIDI_AL }, // ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD7C, BIDI_AL }, // ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM
+ { 0xFD7D, BIDI_AL }, // ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM
+ { 0xFD7E, BIDI_AL }, // ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM
+ { 0xFD7F, BIDI_AL }, // ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD80, BIDI_AL }, // ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM
+ { 0xFD81, BIDI_AL }, // ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM
+ { 0xFD82, BIDI_AL }, // ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFD83, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM
+ { 0xFD84, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM
+ { 0xFD85, BIDI_AL }, // ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM
+ { 0xFD86, BIDI_AL }, // ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM
+ { 0xFD87, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM
+ { 0xFD88, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM
+ { 0xFD89, BIDI_AL }, // ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM
+ { 0xFD8A, BIDI_AL }, // ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM
+ { 0xFD8B, BIDI_AL }, // ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM
+ { 0xFD8C, BIDI_AL }, // ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM
+ { 0xFD8D, BIDI_AL }, // ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM
+ { 0xFD8E, BIDI_AL }, // ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM
+ { 0xFD8F, BIDI_AL }, // ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+ { 0xFD92, BIDI_AL }, // ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM
+ { 0xFD93, BIDI_AL }, // ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM
+ { 0xFD94, BIDI_AL }, // ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFD95, BIDI_AL }, // ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM
+ { 0xFD96, BIDI_AL }, // ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFD97, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM
+ { 0xFD98, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM
+ { 0xFD99, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD9A, BIDI_AL }, // ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM
+ { 0xFD9B, BIDI_AL }, // ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFD9C, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM
+ { 0xFD9D, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFD9E, BIDI_AL }, // ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM
+ { 0xFD9F, BIDI_AL }, // ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM
+ { 0xFDA0, BIDI_AL }, // ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFDA1, BIDI_AL }, // ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM
+ { 0xFDA2, BIDI_AL }, // ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFDA3, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM
+ { 0xFDA4, BIDI_AL }, // ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFDA5, BIDI_AL }, // ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM
+ { 0xFDA6, BIDI_AL }, // ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFDA7, BIDI_AL }, // ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM
+ { 0xFDA8, BIDI_AL }, // ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM
+ { 0xFDA9, BIDI_AL }, // ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM
+ { 0xFDAA, BIDI_AL }, // ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM
+ { 0xFDAB, BIDI_AL }, // ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM
+ { 0xFDAC, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM
+ { 0xFDAD, BIDI_AL }, // ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM
+ { 0xFDAE, BIDI_AL }, // ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM
+ { 0xFDAF, BIDI_AL }, // ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM
+ { 0xFDB0, BIDI_AL }, // ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM
+ { 0xFDB1, BIDI_AL }, // ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM
+ { 0xFDB2, BIDI_AL }, // ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM
+ { 0xFDB3, BIDI_AL }, // ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM
+ { 0xFDB4, BIDI_AL }, // ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM
+ { 0xFDB5, BIDI_AL }, // ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM
+ { 0xFDB6, BIDI_AL }, // ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM
+ { 0xFDB7, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM
+ { 0xFDB8, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM
+ { 0xFDB9, BIDI_AL }, // ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM
+ { 0xFDBA, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM
+ { 0xFDBB, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM
+ { 0xFDBC, BIDI_AL }, // ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM
+ { 0xFDBD, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM
+ { 0xFDBE, BIDI_AL }, // ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM
+ { 0xFDBF, BIDI_AL }, // ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM
+ { 0xFDC0, BIDI_AL }, // ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM
+ { 0xFDC1, BIDI_AL }, // ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM
+ { 0xFDC2, BIDI_AL }, // ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM
+ { 0xFDC3, BIDI_AL }, // ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFDC4, BIDI_AL }, // ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM
+ { 0xFDC5, BIDI_AL }, // ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
+ { 0xFDC6, BIDI_AL }, // ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
+ { 0xFDC7, BIDI_AL }, // ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+ { 0xFDF0, BIDI_AL }, // ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
+ { 0xFDF1, BIDI_AL }, // ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
+ { 0xFDF2, BIDI_AL }, // ARABIC LIGATURE ALLAH ISOLATED FORM
+ { 0xFDF3, BIDI_AL }, // ARABIC LIGATURE AKBAR ISOLATED FORM
+ { 0xFDF4, BIDI_AL }, // ARABIC LIGATURE MOHAMMAD ISOLATED FORM
+ { 0xFDF5, BIDI_AL }, // ARABIC LIGATURE SALAM ISOLATED FORM
+ { 0xFDF6, BIDI_AL }, // ARABIC LIGATURE RASOUL ISOLATED FORM
+ { 0xFDF7, BIDI_AL }, // ARABIC LIGATURE ALAYHE ISOLATED FORM
+ { 0xFDF8, BIDI_AL }, // ARABIC LIGATURE WASALLAM ISOLATED FORM
+ { 0xFDF9, BIDI_AL }, // ARABIC LIGATURE SALLA ISOLATED FORM
+ { 0xFDFA, BIDI_AL }, // ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
+ { 0xFDFB, BIDI_AL }, // ARABIC LIGATURE JALLAJALALOUHOU
+ { 0xFDFC, BIDI_AL }, // RIAL SIGN
+ { 0xFDFD, BIDI_ON }, // ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+ { 0xFE00, BIDI_NSM }, // VARIATION SELECTOR-1
+ { 0xFE01, BIDI_NSM }, // VARIATION SELECTOR-2
+ { 0xFE02, BIDI_NSM }, // VARIATION SELECTOR-3
+ { 0xFE03, BIDI_NSM }, // VARIATION SELECTOR-4
+ { 0xFE04, BIDI_NSM }, // VARIATION SELECTOR-5
+ { 0xFE05, BIDI_NSM }, // VARIATION SELECTOR-6
+ { 0xFE06, BIDI_NSM }, // VARIATION SELECTOR-7
+ { 0xFE07, BIDI_NSM }, // VARIATION SELECTOR-8
+ { 0xFE08, BIDI_NSM }, // VARIATION SELECTOR-9
+ { 0xFE09, BIDI_NSM }, // VARIATION SELECTOR-10
+ { 0xFE0A, BIDI_NSM }, // VARIATION SELECTOR-11
+ { 0xFE0B, BIDI_NSM }, // VARIATION SELECTOR-12
+ { 0xFE0C, BIDI_NSM }, // VARIATION SELECTOR-13
+ { 0xFE0D, BIDI_NSM }, // VARIATION SELECTOR-14
+ { 0xFE0E, BIDI_NSM }, // VARIATION SELECTOR-15
+ { 0xFE0F, BIDI_NSM }, // VARIATION SELECTOR-16
+ { 0xFE10, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL COMMA
+ { 0xFE11, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
+ { 0xFE12, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP
+ { 0xFE13, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL COLON
+ { 0xFE14, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL SEMICOLON
+ { 0xFE15, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK
+ { 0xFE16, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL QUESTION MARK
+ { 0xFE17, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+ { 0xFE18, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+ { 0xFE19, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+ { 0xFE20, BIDI_NSM }, // COMBINING LIGATURE LEFT HALF
+ { 0xFE21, BIDI_NSM }, // COMBINING LIGATURE RIGHT HALF
+ { 0xFE22, BIDI_NSM }, // COMBINING DOUBLE TILDE LEFT HALF
+ { 0xFE23, BIDI_NSM }, // COMBINING DOUBLE TILDE RIGHT HALF
+ { 0xFE24, BIDI_NSM }, // COMBINING MACRON LEFT HALF
+ { 0xFE25, BIDI_NSM }, // COMBINING MACRON RIGHT HALF
+ { 0xFE26, BIDI_NSM }, // COMBINING CONJOINING MACRON
+ { 0xFE27, BIDI_NSM }, // COMBINING LIGATURE LEFT HALF BELOW
+ { 0xFE28, BIDI_NSM }, // COMBINING LIGATURE RIGHT HALF BELOW
+ { 0xFE29, BIDI_NSM }, // COMBINING TILDE LEFT HALF BELOW
+ { 0xFE2A, BIDI_NSM }, // COMBINING TILDE RIGHT HALF BELOW
+ { 0xFE2B, BIDI_NSM }, // COMBINING MACRON LEFT HALF BELOW
+ { 0xFE2C, BIDI_NSM }, // COMBINING MACRON RIGHT HALF BELOW
+ { 0xFE2D, BIDI_NSM }, // COMBINING CONJOINING MACRON BELOW
+ { 0xFE2E, BIDI_NSM }, // COMBINING CYRILLIC TITLO LEFT HALF
+ { 0xFE2F, BIDI_NSM }, // COMBINING CYRILLIC TITLO RIGHT HALF
+ { 0xFE30, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ { 0xFE31, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL EM DASH
+ { 0xFE32, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL EN DASH
+ { 0xFE33, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LOW LINE
+ { 0xFE34, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+ { 0xFE35, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+ { 0xFE36, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+ { 0xFE37, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+ { 0xFE38, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+ { 0xFE39, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+ { 0xFE3A, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+ { 0xFE3B, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+ { 0xFE3C, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+ { 0xFE3D, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+ { 0xFE3E, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+ { 0xFE3F, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+ { 0xFE40, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+ { 0xFE41, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+ { 0xFE42, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+ { 0xFE43, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+ { 0xFE44, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+ { 0xFE45, BIDI_ON }, // SESAME DOT
+ { 0xFE46, BIDI_ON }, // WHITE SESAME DOT
+ { 0xFE47, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+ { 0xFE48, BIDI_ON }, // PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+ { 0xFE49, BIDI_ON }, // DASHED OVERLINE
+ { 0xFE4A, BIDI_ON }, // CENTRELINE OVERLINE
+ { 0xFE4B, BIDI_ON }, // WAVY OVERLINE
+ { 0xFE4C, BIDI_ON }, // DOUBLE WAVY OVERLINE
+ { 0xFE4D, BIDI_ON }, // DASHED LOW LINE
+ { 0xFE4E, BIDI_ON }, // CENTRELINE LOW LINE
+ { 0xFE4F, BIDI_ON }, // WAVY LOW LINE
+ { 0xFE50, BIDI_CS }, // SMALL COMMA
+ { 0xFE51, BIDI_ON }, // SMALL IDEOGRAPHIC COMMA
+ { 0xFE52, BIDI_CS }, // SMALL FULL STOP
+ { 0xFE54, BIDI_ON }, // SMALL SEMICOLON
+ { 0xFE55, BIDI_CS }, // SMALL COLON
+ { 0xFE56, BIDI_ON }, // SMALL QUESTION MARK
+ { 0xFE57, BIDI_ON }, // SMALL EXCLAMATION MARK
+ { 0xFE58, BIDI_ON }, // SMALL EM DASH
+ { 0xFE59, BIDI_ON }, // SMALL LEFT PARENTHESIS
+ { 0xFE5A, BIDI_ON }, // SMALL RIGHT PARENTHESIS
+ { 0xFE5B, BIDI_ON }, // SMALL LEFT CURLY BRACKET
+ { 0xFE5C, BIDI_ON }, // SMALL RIGHT CURLY BRACKET
+ { 0xFE5D, BIDI_ON }, // SMALL LEFT TORTOISE SHELL BRACKET
+ { 0xFE5E, BIDI_ON }, // SMALL RIGHT TORTOISE SHELL BRACKET
+ { 0xFE5F, BIDI_ET }, // SMALL NUMBER SIGN
+ { 0xFE60, BIDI_ON }, // SMALL AMPERSAND
+ { 0xFE61, BIDI_ON }, // SMALL ASTERISK
+ { 0xFE62, BIDI_ES }, // SMALL PLUS SIGN
+ { 0xFE63, BIDI_ES }, // SMALL HYPHEN-MINUS
+ { 0xFE64, BIDI_ON }, // SMALL LESS-THAN SIGN
+ { 0xFE65, BIDI_ON }, // SMALL GREATER-THAN SIGN
+ { 0xFE66, BIDI_ON }, // SMALL EQUALS SIGN
+ { 0xFE68, BIDI_ON }, // SMALL REVERSE SOLIDUS
+ { 0xFE69, BIDI_ET }, // SMALL DOLLAR SIGN
+ { 0xFE6A, BIDI_ET }, // SMALL PERCENT SIGN
+ { 0xFE6B, BIDI_ON }, // SMALL COMMERCIAL AT
+ { 0xFE70, BIDI_AL }, // ARABIC FATHATAN ISOLATED FORM
+ { 0xFE71, BIDI_AL }, // ARABIC TATWEEL WITH FATHATAN ABOVE
+ { 0xFE72, BIDI_AL }, // ARABIC DAMMATAN ISOLATED FORM
+ { 0xFE73, BIDI_AL }, // ARABIC TAIL FRAGMENT
+ { 0xFE74, BIDI_AL }, // ARABIC KASRATAN ISOLATED FORM
+ { 0xFE76, BIDI_AL }, // ARABIC FATHA ISOLATED FORM
+ { 0xFE77, BIDI_AL }, // ARABIC FATHA MEDIAL FORM
+ { 0xFE78, BIDI_AL }, // ARABIC DAMMA ISOLATED FORM
+ { 0xFE79, BIDI_AL }, // ARABIC DAMMA MEDIAL FORM
+ { 0xFE7A, BIDI_AL }, // ARABIC KASRA ISOLATED FORM
+ { 0xFE7B, BIDI_AL }, // ARABIC KASRA MEDIAL FORM
+ { 0xFE7C, BIDI_AL }, // ARABIC SHADDA ISOLATED FORM
+ { 0xFE7D, BIDI_AL }, // ARABIC SHADDA MEDIAL FORM
+ { 0xFE7E, BIDI_AL }, // ARABIC SUKUN ISOLATED FORM
+ { 0xFE7F, BIDI_AL }, // ARABIC SUKUN MEDIAL FORM
+ { 0xFE80, BIDI_AL }, // ARABIC LETTER HAMZA ISOLATED FORM
+ { 0xFE81, BIDI_AL }, // ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
+ { 0xFE82, BIDI_AL }, // ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
+ { 0xFE83, BIDI_AL }, // ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
+ { 0xFE84, BIDI_AL }, // ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
+ { 0xFE85, BIDI_AL }, // ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
+ { 0xFE86, BIDI_AL }, // ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM
+ { 0xFE87, BIDI_AL }, // ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM
+ { 0xFE88, BIDI_AL }, // ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM
+ { 0xFE89, BIDI_AL }, // ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM
+ { 0xFE8A, BIDI_AL }, // ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM
+ { 0xFE8B, BIDI_AL }, // ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
+ { 0xFE8C, BIDI_AL }, // ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM
+ { 0xFE8D, BIDI_AL }, // ARABIC LETTER ALEF ISOLATED FORM
+ { 0xFE8E, BIDI_AL }, // ARABIC LETTER ALEF FINAL FORM
+ { 0xFE8F, BIDI_AL }, // ARABIC LETTER BEH ISOLATED FORM
+ { 0xFE90, BIDI_AL }, // ARABIC LETTER BEH FINAL FORM
+ { 0xFE91, BIDI_AL }, // ARABIC LETTER BEH INITIAL FORM
+ { 0xFE92, BIDI_AL }, // ARABIC LETTER BEH MEDIAL FORM
+ { 0xFE93, BIDI_AL }, // ARABIC LETTER TEH MARBUTA ISOLATED FORM
+ { 0xFE94, BIDI_AL }, // ARABIC LETTER TEH MARBUTA FINAL FORM
+ { 0xFE95, BIDI_AL }, // ARABIC LETTER TEH ISOLATED FORM
+ { 0xFE96, BIDI_AL }, // ARABIC LETTER TEH FINAL FORM
+ { 0xFE97, BIDI_AL }, // ARABIC LETTER TEH INITIAL FORM
+ { 0xFE98, BIDI_AL }, // ARABIC LETTER TEH MEDIAL FORM
+ { 0xFE99, BIDI_AL }, // ARABIC LETTER THEH ISOLATED FORM
+ { 0xFE9A, BIDI_AL }, // ARABIC LETTER THEH FINAL FORM
+ { 0xFE9B, BIDI_AL }, // ARABIC LETTER THEH INITIAL FORM
+ { 0xFE9C, BIDI_AL }, // ARABIC LETTER THEH MEDIAL FORM
+ { 0xFE9D, BIDI_AL }, // ARABIC LETTER JEEM ISOLATED FORM
+ { 0xFE9E, BIDI_AL }, // ARABIC LETTER JEEM FINAL FORM
+ { 0xFE9F, BIDI_AL }, // ARABIC LETTER JEEM INITIAL FORM
+ { 0xFEA0, BIDI_AL }, // ARABIC LETTER JEEM MEDIAL FORM
+ { 0xFEA1, BIDI_AL }, // ARABIC LETTER HAH ISOLATED FORM
+ { 0xFEA2, BIDI_AL }, // ARABIC LETTER HAH FINAL FORM
+ { 0xFEA3, BIDI_AL }, // ARABIC LETTER HAH INITIAL FORM
+ { 0xFEA4, BIDI_AL }, // ARABIC LETTER HAH MEDIAL FORM
+ { 0xFEA5, BIDI_AL }, // ARABIC LETTER KHAH ISOLATED FORM
+ { 0xFEA6, BIDI_AL }, // ARABIC LETTER KHAH FINAL FORM
+ { 0xFEA7, BIDI_AL }, // ARABIC LETTER KHAH INITIAL FORM
+ { 0xFEA8, BIDI_AL }, // ARABIC LETTER KHAH MEDIAL FORM
+ { 0xFEA9, BIDI_AL }, // ARABIC LETTER DAL ISOLATED FORM
+ { 0xFEAA, BIDI_AL }, // ARABIC LETTER DAL FINAL FORM
+ { 0xFEAB, BIDI_AL }, // ARABIC LETTER THAL ISOLATED FORM
+ { 0xFEAC, BIDI_AL }, // ARABIC LETTER THAL FINAL FORM
+ { 0xFEAD, BIDI_AL }, // ARABIC LETTER REH ISOLATED FORM
+ { 0xFEAE, BIDI_AL }, // ARABIC LETTER REH FINAL FORM
+ { 0xFEAF, BIDI_AL }, // ARABIC LETTER ZAIN ISOLATED FORM
+ { 0xFEB0, BIDI_AL }, // ARABIC LETTER ZAIN FINAL FORM
+ { 0xFEB1, BIDI_AL }, // ARABIC LETTER SEEN ISOLATED FORM
+ { 0xFEB2, BIDI_AL }, // ARABIC LETTER SEEN FINAL FORM
+ { 0xFEB3, BIDI_AL }, // ARABIC LETTER SEEN INITIAL FORM
+ { 0xFEB4, BIDI_AL }, // ARABIC LETTER SEEN MEDIAL FORM
+ { 0xFEB5, BIDI_AL }, // ARABIC LETTER SHEEN ISOLATED FORM
+ { 0xFEB6, BIDI_AL }, // ARABIC LETTER SHEEN FINAL FORM
+ { 0xFEB7, BIDI_AL }, // ARABIC LETTER SHEEN INITIAL FORM
+ { 0xFEB8, BIDI_AL }, // ARABIC LETTER SHEEN MEDIAL FORM
+ { 0xFEB9, BIDI_AL }, // ARABIC LETTER SAD ISOLATED FORM
+ { 0xFEBA, BIDI_AL }, // ARABIC LETTER SAD FINAL FORM
+ { 0xFEBB, BIDI_AL }, // ARABIC LETTER SAD INITIAL FORM
+ { 0xFEBC, BIDI_AL }, // ARABIC LETTER SAD MEDIAL FORM
+ { 0xFEBD, BIDI_AL }, // ARABIC LETTER DAD ISOLATED FORM
+ { 0xFEBE, BIDI_AL }, // ARABIC LETTER DAD FINAL FORM
+ { 0xFEBF, BIDI_AL }, // ARABIC LETTER DAD INITIAL FORM
+ { 0xFEC0, BIDI_AL }, // ARABIC LETTER DAD MEDIAL FORM
+ { 0xFEC1, BIDI_AL }, // ARABIC LETTER TAH ISOLATED FORM
+ { 0xFEC2, BIDI_AL }, // ARABIC LETTER TAH FINAL FORM
+ { 0xFEC3, BIDI_AL }, // ARABIC LETTER TAH INITIAL FORM
+ { 0xFEC4, BIDI_AL }, // ARABIC LETTER TAH MEDIAL FORM
+ { 0xFEC5, BIDI_AL }, // ARABIC LETTER ZAH ISOLATED FORM
+ { 0xFEC6, BIDI_AL }, // ARABIC LETTER ZAH FINAL FORM
+ { 0xFEC7, BIDI_AL }, // ARABIC LETTER ZAH INITIAL FORM
+ { 0xFEC8, BIDI_AL }, // ARABIC LETTER ZAH MEDIAL FORM
+ { 0xFEC9, BIDI_AL }, // ARABIC LETTER AIN ISOLATED FORM
+ { 0xFECA, BIDI_AL }, // ARABIC LETTER AIN FINAL FORM
+ { 0xFECB, BIDI_AL }, // ARABIC LETTER AIN INITIAL FORM
+ { 0xFECC, BIDI_AL }, // ARABIC LETTER AIN MEDIAL FORM
+ { 0xFECD, BIDI_AL }, // ARABIC LETTER GHAIN ISOLATED FORM
+ { 0xFECE, BIDI_AL }, // ARABIC LETTER GHAIN FINAL FORM
+ { 0xFECF, BIDI_AL }, // ARABIC LETTER GHAIN INITIAL FORM
+ { 0xFED0, BIDI_AL }, // ARABIC LETTER GHAIN MEDIAL FORM
+ { 0xFED1, BIDI_AL }, // ARABIC LETTER FEH ISOLATED FORM
+ { 0xFED2, BIDI_AL }, // ARABIC LETTER FEH FINAL FORM
+ { 0xFED3, BIDI_AL }, // ARABIC LETTER FEH INITIAL FORM
+ { 0xFED4, BIDI_AL }, // ARABIC LETTER FEH MEDIAL FORM
+ { 0xFED5, BIDI_AL }, // ARABIC LETTER QAF ISOLATED FORM
+ { 0xFED6, BIDI_AL }, // ARABIC LETTER QAF FINAL FORM
+ { 0xFED7, BIDI_AL }, // ARABIC LETTER QAF INITIAL FORM
+ { 0xFED8, BIDI_AL }, // ARABIC LETTER QAF MEDIAL FORM
+ { 0xFED9, BIDI_AL }, // ARABIC LETTER KAF ISOLATED FORM
+ { 0xFEDA, BIDI_AL }, // ARABIC LETTER KAF FINAL FORM
+ { 0xFEDB, BIDI_AL }, // ARABIC LETTER KAF INITIAL FORM
+ { 0xFEDC, BIDI_AL }, // ARABIC LETTER KAF MEDIAL FORM
+ { 0xFEDD, BIDI_AL }, // ARABIC LETTER LAM ISOLATED FORM
+ { 0xFEDE, BIDI_AL }, // ARABIC LETTER LAM FINAL FORM
+ { 0xFEDF, BIDI_AL }, // ARABIC LETTER LAM INITIAL FORM
+ { 0xFEE0, BIDI_AL }, // ARABIC LETTER LAM MEDIAL FORM
+ { 0xFEE1, BIDI_AL }, // ARABIC LETTER MEEM ISOLATED FORM
+ { 0xFEE2, BIDI_AL }, // ARABIC LETTER MEEM FINAL FORM
+ { 0xFEE3, BIDI_AL }, // ARABIC LETTER MEEM INITIAL FORM
+ { 0xFEE4, BIDI_AL }, // ARABIC LETTER MEEM MEDIAL FORM
+ { 0xFEE5, BIDI_AL }, // ARABIC LETTER NOON ISOLATED FORM
+ { 0xFEE6, BIDI_AL }, // ARABIC LETTER NOON FINAL FORM
+ { 0xFEE7, BIDI_AL }, // ARABIC LETTER NOON INITIAL FORM
+ { 0xFEE8, BIDI_AL }, // ARABIC LETTER NOON MEDIAL FORM
+ { 0xFEE9, BIDI_AL }, // ARABIC LETTER HEH ISOLATED FORM
+ { 0xFEEA, BIDI_AL }, // ARABIC LETTER HEH FINAL FORM
+ { 0xFEEB, BIDI_AL }, // ARABIC LETTER HEH INITIAL FORM
+ { 0xFEEC, BIDI_AL }, // ARABIC LETTER HEH MEDIAL FORM
+ { 0xFEED, BIDI_AL }, // ARABIC LETTER WAW ISOLATED FORM
+ { 0xFEEE, BIDI_AL }, // ARABIC LETTER WAW FINAL FORM
+ { 0xFEEF, BIDI_AL }, // ARABIC LETTER ALEF MAKSURA ISOLATED FORM
+ { 0xFEF0, BIDI_AL }, // ARABIC LETTER ALEF MAKSURA FINAL FORM
+ { 0xFEF1, BIDI_AL }, // ARABIC LETTER YEH ISOLATED FORM
+ { 0xFEF2, BIDI_AL }, // ARABIC LETTER YEH FINAL FORM
+ { 0xFEF3, BIDI_AL }, // ARABIC LETTER YEH INITIAL FORM
+ { 0xFEF4, BIDI_AL }, // ARABIC LETTER YEH MEDIAL FORM
+ { 0xFEF5, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
+ { 0xFEF6, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
+ { 0xFEF7, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
+ { 0xFEF8, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
+ { 0xFEF9, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
+ { 0xFEFA, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM
+ { 0xFEFB, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
+ { 0xFEFC, BIDI_AL }, // ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+ { 0xFEFF, BIDI_BN }, // ZERO WIDTH NO-BREAK SPACE
+ { 0xFF01, BIDI_ON }, // FULLWIDTH EXCLAMATION MARK
+ { 0xFF02, BIDI_ON }, // FULLWIDTH QUOTATION MARK
+ { 0xFF03, BIDI_ET }, // FULLWIDTH NUMBER SIGN
+ { 0xFF04, BIDI_ET }, // FULLWIDTH DOLLAR SIGN
+ { 0xFF05, BIDI_ET }, // FULLWIDTH PERCENT SIGN
+ { 0xFF06, BIDI_ON }, // FULLWIDTH AMPERSAND
+ { 0xFF07, BIDI_ON }, // FULLWIDTH APOSTROPHE
+ { 0xFF08, BIDI_ON }, // FULLWIDTH LEFT PARENTHESIS
+ { 0xFF09, BIDI_ON }, // FULLWIDTH RIGHT PARENTHESIS
+ { 0xFF0A, BIDI_ON }, // FULLWIDTH ASTERISK
+ { 0xFF0B, BIDI_ES }, // FULLWIDTH PLUS SIGN
+ { 0xFF0C, BIDI_CS }, // FULLWIDTH COMMA
+ { 0xFF0D, BIDI_ES }, // FULLWIDTH HYPHEN-MINUS
+ { 0xFF0E, BIDI_CS }, // FULLWIDTH FULL STOP
+ { 0xFF0F, BIDI_CS }, // FULLWIDTH SOLIDUS
+ { 0xFF10, BIDI_EN }, // FULLWIDTH DIGIT ZERO
+ { 0xFF11, BIDI_EN }, // FULLWIDTH DIGIT ONE
+ { 0xFF12, BIDI_EN }, // FULLWIDTH DIGIT TWO
+ { 0xFF13, BIDI_EN }, // FULLWIDTH DIGIT THREE
+ { 0xFF14, BIDI_EN }, // FULLWIDTH DIGIT FOUR
+ { 0xFF15, BIDI_EN }, // FULLWIDTH DIGIT FIVE
+ { 0xFF16, BIDI_EN }, // FULLWIDTH DIGIT SIX
+ { 0xFF17, BIDI_EN }, // FULLWIDTH DIGIT SEVEN
+ { 0xFF18, BIDI_EN }, // FULLWIDTH DIGIT EIGHT
+ { 0xFF19, BIDI_EN }, // FULLWIDTH DIGIT NINE
+ { 0xFF1A, BIDI_CS }, // FULLWIDTH COLON
+ { 0xFF1B, BIDI_ON }, // FULLWIDTH SEMICOLON
+ { 0xFF1C, BIDI_ON }, // FULLWIDTH LESS-THAN SIGN
+ { 0xFF1D, BIDI_ON }, // FULLWIDTH EQUALS SIGN
+ { 0xFF1E, BIDI_ON }, // FULLWIDTH GREATER-THAN SIGN
+ { 0xFF1F, BIDI_ON }, // FULLWIDTH QUESTION MARK
+ { 0xFF20, BIDI_ON }, // FULLWIDTH COMMERCIAL AT
+ { 0xFF21, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER A
+ { 0xFF22, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER B
+ { 0xFF23, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER C
+ { 0xFF24, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER D
+ { 0xFF25, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER E
+ { 0xFF26, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER F
+ { 0xFF27, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER G
+ { 0xFF28, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER H
+ { 0xFF29, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER I
+ { 0xFF2A, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER J
+ { 0xFF2B, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER K
+ { 0xFF2C, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER L
+ { 0xFF2D, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER M
+ { 0xFF2E, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER N
+ { 0xFF2F, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER O
+ { 0xFF30, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER P
+ { 0xFF31, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER Q
+ { 0xFF32, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER R
+ { 0xFF33, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER S
+ { 0xFF34, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER T
+ { 0xFF35, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER U
+ { 0xFF36, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER V
+ { 0xFF37, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER W
+ { 0xFF38, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER X
+ { 0xFF39, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER Y
+ { 0xFF3A, BIDI_L }, // FULLWIDTH LATIN CAPITAL LETTER Z
+ { 0xFF3B, BIDI_ON }, // FULLWIDTH LEFT SQUARE BRACKET
+ { 0xFF3C, BIDI_ON }, // FULLWIDTH REVERSE SOLIDUS
+ { 0xFF3D, BIDI_ON }, // FULLWIDTH RIGHT SQUARE BRACKET
+ { 0xFF3E, BIDI_ON }, // FULLWIDTH CIRCUMFLEX ACCENT
+ { 0xFF3F, BIDI_ON }, // FULLWIDTH LOW LINE
+ { 0xFF40, BIDI_ON }, // FULLWIDTH GRAVE ACCENT
+ { 0xFF41, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER A
+ { 0xFF42, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER B
+ { 0xFF43, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER C
+ { 0xFF44, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER D
+ { 0xFF45, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER E
+ { 0xFF46, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER F
+ { 0xFF47, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER G
+ { 0xFF48, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER H
+ { 0xFF49, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER I
+ { 0xFF4A, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER J
+ { 0xFF4B, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER K
+ { 0xFF4C, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER L
+ { 0xFF4D, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER M
+ { 0xFF4E, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER N
+ { 0xFF4F, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER O
+ { 0xFF50, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER P
+ { 0xFF51, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER Q
+ { 0xFF52, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER R
+ { 0xFF53, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER S
+ { 0xFF54, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER T
+ { 0xFF55, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER U
+ { 0xFF56, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER V
+ { 0xFF57, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER W
+ { 0xFF58, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER X
+ { 0xFF59, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER Y
+ { 0xFF5A, BIDI_L }, // FULLWIDTH LATIN SMALL LETTER Z
+ { 0xFF5B, BIDI_ON }, // FULLWIDTH LEFT CURLY BRACKET
+ { 0xFF5C, BIDI_ON }, // FULLWIDTH VERTICAL LINE
+ { 0xFF5D, BIDI_ON }, // FULLWIDTH RIGHT CURLY BRACKET
+ { 0xFF5E, BIDI_ON }, // FULLWIDTH TILDE
+ { 0xFF5F, BIDI_ON }, // FULLWIDTH LEFT WHITE PARENTHESIS
+ { 0xFF60, BIDI_ON }, // FULLWIDTH RIGHT WHITE PARENTHESIS
+ { 0xFF61, BIDI_ON }, // HALFWIDTH IDEOGRAPHIC FULL STOP
+ { 0xFF62, BIDI_ON }, // HALFWIDTH LEFT CORNER BRACKET
+ { 0xFF63, BIDI_ON }, // HALFWIDTH RIGHT CORNER BRACKET
+ { 0xFF64, BIDI_ON }, // HALFWIDTH IDEOGRAPHIC COMMA
+ { 0xFF65, BIDI_ON }, // HALFWIDTH KATAKANA MIDDLE DOT
+ { 0xFF66, BIDI_L }, // HALFWIDTH KATAKANA LETTER WO
+ { 0xFF67, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL A
+ { 0xFF68, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL I
+ { 0xFF69, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL U
+ { 0xFF6A, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL E
+ { 0xFF6B, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL O
+ { 0xFF6C, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL YA
+ { 0xFF6D, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL YU
+ { 0xFF6E, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL YO
+ { 0xFF6F, BIDI_L }, // HALFWIDTH KATAKANA LETTER SMALL TU
+ { 0xFF70, BIDI_L }, // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ { 0xFF71, BIDI_L }, // HALFWIDTH KATAKANA LETTER A
+ { 0xFF72, BIDI_L }, // HALFWIDTH KATAKANA LETTER I
+ { 0xFF73, BIDI_L }, // HALFWIDTH KATAKANA LETTER U
+ { 0xFF74, BIDI_L }, // HALFWIDTH KATAKANA LETTER E
+ { 0xFF75, BIDI_L }, // HALFWIDTH KATAKANA LETTER O
+ { 0xFF76, BIDI_L }, // HALFWIDTH KATAKANA LETTER KA
+ { 0xFF77, BIDI_L }, // HALFWIDTH KATAKANA LETTER KI
+ { 0xFF78, BIDI_L }, // HALFWIDTH KATAKANA LETTER KU
+ { 0xFF79, BIDI_L }, // HALFWIDTH KATAKANA LETTER KE
+ { 0xFF7A, BIDI_L }, // HALFWIDTH KATAKANA LETTER KO
+ { 0xFF7B, BIDI_L }, // HALFWIDTH KATAKANA LETTER SA
+ { 0xFF7C, BIDI_L }, // HALFWIDTH KATAKANA LETTER SI
+ { 0xFF7D, BIDI_L }, // HALFWIDTH KATAKANA LETTER SU
+ { 0xFF7E, BIDI_L }, // HALFWIDTH KATAKANA LETTER SE
+ { 0xFF7F, BIDI_L }, // HALFWIDTH KATAKANA LETTER SO
+ { 0xFF80, BIDI_L }, // HALFWIDTH KATAKANA LETTER TA
+ { 0xFF81, BIDI_L }, // HALFWIDTH KATAKANA LETTER TI
+ { 0xFF82, BIDI_L }, // HALFWIDTH KATAKANA LETTER TU
+ { 0xFF83, BIDI_L }, // HALFWIDTH KATAKANA LETTER TE
+ { 0xFF84, BIDI_L }, // HALFWIDTH KATAKANA LETTER TO
+ { 0xFF85, BIDI_L }, // HALFWIDTH KATAKANA LETTER NA
+ { 0xFF86, BIDI_L }, // HALFWIDTH KATAKANA LETTER NI
+ { 0xFF87, BIDI_L }, // HALFWIDTH KATAKANA LETTER NU
+ { 0xFF88, BIDI_L }, // HALFWIDTH KATAKANA LETTER NE
+ { 0xFF89, BIDI_L }, // HALFWIDTH KATAKANA LETTER NO
+ { 0xFF8A, BIDI_L }, // HALFWIDTH KATAKANA LETTER HA
+ { 0xFF8B, BIDI_L }, // HALFWIDTH KATAKANA LETTER HI
+ { 0xFF8C, BIDI_L }, // HALFWIDTH KATAKANA LETTER HU
+ { 0xFF8D, BIDI_L }, // HALFWIDTH KATAKANA LETTER HE
+ { 0xFF8E, BIDI_L }, // HALFWIDTH KATAKANA LETTER HO
+ { 0xFF8F, BIDI_L }, // HALFWIDTH KATAKANA LETTER MA
+ { 0xFF90, BIDI_L }, // HALFWIDTH KATAKANA LETTER MI
+ { 0xFF91, BIDI_L }, // HALFWIDTH KATAKANA LETTER MU
+ { 0xFF92, BIDI_L }, // HALFWIDTH KATAKANA LETTER ME
+ { 0xFF93, BIDI_L }, // HALFWIDTH KATAKANA LETTER MO
+ { 0xFF94, BIDI_L }, // HALFWIDTH KATAKANA LETTER YA
+ { 0xFF95, BIDI_L }, // HALFWIDTH KATAKANA LETTER YU
+ { 0xFF96, BIDI_L }, // HALFWIDTH KATAKANA LETTER YO
+ { 0xFF97, BIDI_L }, // HALFWIDTH KATAKANA LETTER RA
+ { 0xFF98, BIDI_L }, // HALFWIDTH KATAKANA LETTER RI
+ { 0xFF99, BIDI_L }, // HALFWIDTH KATAKANA LETTER RU
+ { 0xFF9A, BIDI_L }, // HALFWIDTH KATAKANA LETTER RE
+ { 0xFF9B, BIDI_L }, // HALFWIDTH KATAKANA LETTER RO
+ { 0xFF9C, BIDI_L }, // HALFWIDTH KATAKANA LETTER WA
+ { 0xFF9D, BIDI_L }, // HALFWIDTH KATAKANA LETTER N
+ { 0xFF9E, BIDI_L }, // HALFWIDTH KATAKANA VOICED SOUND MARK
+ { 0xFF9F, BIDI_L }, // HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+ { 0xFFA0, BIDI_L }, // HALFWIDTH HANGUL FILLER
+ { 0xFFA1, BIDI_L }, // HALFWIDTH HANGUL LETTER KIYEOK
+ { 0xFFA2, BIDI_L }, // HALFWIDTH HANGUL LETTER SSANGKIYEOK
+ { 0xFFA3, BIDI_L }, // HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+ { 0xFFA4, BIDI_L }, // HALFWIDTH HANGUL LETTER NIEUN
+ { 0xFFA5, BIDI_L }, // HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+ { 0xFFA6, BIDI_L }, // HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+ { 0xFFA7, BIDI_L }, // HALFWIDTH HANGUL LETTER TIKEUT
+ { 0xFFA8, BIDI_L }, // HALFWIDTH HANGUL LETTER SSANGTIKEUT
+ { 0xFFA9, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL
+ { 0xFFAA, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+ { 0xFFAB, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+ { 0xFFAC, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+ { 0xFFAD, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-SIOS
+ { 0xFFAE, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+ { 0xFFAF, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+ { 0xFFB0, BIDI_L }, // HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+ { 0xFFB1, BIDI_L }, // HALFWIDTH HANGUL LETTER MIEUM
+ { 0xFFB2, BIDI_L }, // HALFWIDTH HANGUL LETTER PIEUP
+ { 0xFFB3, BIDI_L }, // HALFWIDTH HANGUL LETTER SSANGPIEUP
+ { 0xFFB4, BIDI_L }, // HALFWIDTH HANGUL LETTER PIEUP-SIOS
+ { 0xFFB5, BIDI_L }, // HALFWIDTH HANGUL LETTER SIOS
+ { 0xFFB6, BIDI_L }, // HALFWIDTH HANGUL LETTER SSANGSIOS
+ { 0xFFB7, BIDI_L }, // HALFWIDTH HANGUL LETTER IEUNG
+ { 0xFFB8, BIDI_L }, // HALFWIDTH HANGUL LETTER CIEUC
+ { 0xFFB9, BIDI_L }, // HALFWIDTH HANGUL LETTER SSANGCIEUC
+ { 0xFFBA, BIDI_L }, // HALFWIDTH HANGUL LETTER CHIEUCH
+ { 0xFFBB, BIDI_L }, // HALFWIDTH HANGUL LETTER KHIEUKH
+ { 0xFFBC, BIDI_L }, // HALFWIDTH HANGUL LETTER THIEUTH
+ { 0xFFBD, BIDI_L }, // HALFWIDTH HANGUL LETTER PHIEUPH
+ { 0xFFBE, BIDI_L }, // HALFWIDTH HANGUL LETTER HIEUH
+ { 0xFFC2, BIDI_L }, // HALFWIDTH HANGUL LETTER A
+ { 0xFFC3, BIDI_L }, // HALFWIDTH HANGUL LETTER AE
+ { 0xFFC4, BIDI_L }, // HALFWIDTH HANGUL LETTER YA
+ { 0xFFC5, BIDI_L }, // HALFWIDTH HANGUL LETTER YAE
+ { 0xFFC6, BIDI_L }, // HALFWIDTH HANGUL LETTER EO
+ { 0xFFC7, BIDI_L }, // HALFWIDTH HANGUL LETTER E
+ { 0xFFCA, BIDI_L }, // HALFWIDTH HANGUL LETTER YEO
+ { 0xFFCB, BIDI_L }, // HALFWIDTH HANGUL LETTER YE
+ { 0xFFCC, BIDI_L }, // HALFWIDTH HANGUL LETTER O
+ { 0xFFCD, BIDI_L }, // HALFWIDTH HANGUL LETTER WA
+ { 0xFFCE, BIDI_L }, // HALFWIDTH HANGUL LETTER WAE
+ { 0xFFCF, BIDI_L }, // HALFWIDTH HANGUL LETTER OE
+ { 0xFFD2, BIDI_L }, // HALFWIDTH HANGUL LETTER YO
+ { 0xFFD3, BIDI_L }, // HALFWIDTH HANGUL LETTER U
+ { 0xFFD4, BIDI_L }, // HALFWIDTH HANGUL LETTER WEO
+ { 0xFFD5, BIDI_L }, // HALFWIDTH HANGUL LETTER WE
+ { 0xFFD6, BIDI_L }, // HALFWIDTH HANGUL LETTER WI
+ { 0xFFD7, BIDI_L }, // HALFWIDTH HANGUL LETTER YU
+ { 0xFFDA, BIDI_L }, // HALFWIDTH HANGUL LETTER EU
+ { 0xFFDB, BIDI_L }, // HALFWIDTH HANGUL LETTER YI
+ { 0xFFDC, BIDI_L }, // HALFWIDTH HANGUL LETTER I
+ { 0xFFE0, BIDI_ET }, // FULLWIDTH CENT SIGN
+ { 0xFFE1, BIDI_ET }, // FULLWIDTH POUND SIGN
+ { 0xFFE2, BIDI_ON }, // FULLWIDTH NOT SIGN
+ { 0xFFE3, BIDI_ON }, // FULLWIDTH MACRON
+ { 0xFFE4, BIDI_ON }, // FULLWIDTH BROKEN BAR
+ { 0xFFE5, BIDI_ET }, // FULLWIDTH YEN SIGN
+ { 0xFFE6, BIDI_ET }, // FULLWIDTH WON SIGN
+ { 0xFFE8, BIDI_ON }, // HALFWIDTH FORMS LIGHT VERTICAL
+ { 0xFFE9, BIDI_ON }, // HALFWIDTH LEFTWARDS ARROW
+ { 0xFFEA, BIDI_ON }, // HALFWIDTH UPWARDS ARROW
+ { 0xFFEB, BIDI_ON }, // HALFWIDTH RIGHTWARDS ARROW
+ { 0xFFEC, BIDI_ON }, // HALFWIDTH DOWNWARDS ARROW
+ { 0xFFED, BIDI_ON }, // HALFWIDTH BLACK SQUARE
+ { 0xFFEE, BIDI_ON }, // HALFWIDTH WHITE CIRCLE
+ { 0xFFF9, BIDI_ON }, // INTERLINEAR ANNOTATION ANCHOR
+ { 0xFFFA, BIDI_ON }, // INTERLINEAR ANNOTATION SEPARATOR
+ { 0xFFFB, BIDI_ON }, // INTERLINEAR ANNOTATION TERMINATOR
+ { 0xFFFC, BIDI_ON }, // OBJECT REPLACEMENT CHARACTER
+ { 0xFFFD, BIDI_ON }, // REPLACEMENT CHARACTER
+
+#endif // GUI_BIDI_SUPPORT_RANGE_F
+
+#endif // GUI__BIDI2
+
+/*************************** End of file ****************************/
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/Global.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,96 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : Global.h +Purpose : Global types + In case your application already has a Global.h, you should + merge the files. In order to use Segger code, the types + U8, U16, U32, I8, I16, I32 need to be defined in Global.h; + additional definitions do not hurt. +Revision: $Rev: 9374 $ +---------------------------END-OF-HEADER------------------------------ +*/ + +#ifndef GLOBAL_H // Guard against multiple inclusion +#define GLOBAL_H + +#define U8 unsigned char +#define I8 signed char +#define U16 unsigned short +#define I16 signed short +#ifdef __x86_64__ +#define U32 unsigned +#define I32 int +#else +#define U32 unsigned long +#define I32 signed long +#endif + +#if defined(_WIN32) && !defined(__clang__) && !defined(__MINGW32__) + // + // Microsoft VC6 compiler related + // + #define U64 unsigned __int64 + #define U128 unsigned __int128 + #define I64 __int64 + #define I128 __int128 + #if _MSC_VER <= 1200 + #define U64_C(x) x##UI64 + #else + #define U64_C(x) x##ULL + #endif +#else + // + // C99 compliant compiler + // + #define U64 unsigned long long + #define I64 signed long long + #define U64_C(x) x##ULL +#endif + +#ifndef PTR_ADDR + #if (defined(_WIN64) || defined(__LP64__)) // 64-bit symbols used by Visual Studio and GCC, maybe others as well. + #define PTR_ADDR U64 + #else + #define PTR_ADDR U32 + #endif +#endif + +#endif // Avoid multiple inclusion + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/HEADER.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,198 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : HEADER.h
+Purpose : HEADER include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef HEADER_H
+#define HEADER_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+
+typedef WM_HMEM HEADER_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[2];
+ GUI_COLOR aColorUpper[2];
+ GUI_COLOR aColorLower[2];
+ GUI_COLOR ColorArrow;
+} HEADER_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+
+HEADER_Handle HEADER_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
+HEADER_Handle HEADER_CreateAttached(WM_HWIN hParent, int Id, int SpecialFlags);
+HEADER_Handle HEADER_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+HEADER_Handle HEADER_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+HEADER_Handle HEADER_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void HEADER_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+/* Set defaults */
+GUI_COLOR HEADER_SetDefaultArrowColor(GUI_COLOR Color);
+GUI_COLOR HEADER_SetDefaultBkColor (GUI_COLOR Color);
+const GUI_CURSOR * HEADER_SetDefaultCursor (const GUI_CURSOR * pCursor);
+const GUI_FONT * HEADER_SetDefaultFont (const GUI_FONT * pFont);
+int HEADER_SetDefaultBorderH (int Spacing);
+int HEADER_SetDefaultBorderV (int Spacing);
+GUI_COLOR HEADER_SetDefaultTextColor (GUI_COLOR Color);
+
+/* Get defaults */
+GUI_COLOR HEADER_GetDefaultArrowColor(void);
+GUI_COLOR HEADER_GetDefaultBkColor (void);
+const GUI_CURSOR * HEADER_GetDefaultCursor (void);
+const GUI_FONT * HEADER_GetDefaultFont (void);
+int HEADER_GetDefaultBorderH (void);
+int HEADER_GetDefaultBorderV (void);
+GUI_COLOR HEADER_GetDefaultTextColor (void);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void HEADER_AddItem (HEADER_Handle hObj, int Width, const char * s, int Align);
+void HEADER_DeleteItem (HEADER_Handle hObj, unsigned Index);
+GUI_COLOR HEADER_GetArrowColor (HEADER_Handle hObj);
+GUI_COLOR HEADER_GetBkColor (HEADER_Handle hObj);
+const GUI_FONT * HEADER_GetFont (HEADER_Handle hObj);
+int HEADER_GetHeight (HEADER_Handle hObj);
+int HEADER_GetItemText (HEADER_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+int HEADER_GetItemWidth (HEADER_Handle hObj, unsigned Index);
+int HEADER_GetNumItems (HEADER_Handle hObj);
+int HEADER_GetSel (HEADER_Handle hObj);
+GUI_COLOR HEADER_GetTextColor (HEADER_Handle hObj);
+int HEADER_GetUserData (HEADER_Handle hObj, void * pDest, int NumBytes);
+void HEADER_SetArrowColor (HEADER_Handle hObj, GUI_COLOR Color);
+void HEADER_SetBitmap (HEADER_Handle hObj, unsigned Index, const GUI_BITMAP * pBitmap);
+void HEADER_SetBitmapEx (HEADER_Handle hObj, unsigned Index, const GUI_BITMAP * pBitmap, int x, int y);
+void HEADER_SetBkColor (HEADER_Handle hObj, GUI_COLOR Color);
+void HEADER_SetBMP (HEADER_Handle hObj, unsigned Index, const void * pBitmap);
+void HEADER_SetBMPEx (HEADER_Handle hObj, unsigned Index, const void * pBitmap, int x, int y);
+void HEADER_SetDirIndicator (HEADER_Handle hObj, int Column, int Reverse); /* !!!Not to be documented!!! */
+void HEADER_SetDragLimit (HEADER_Handle hObj, unsigned DragLimit);
+unsigned HEADER_SetFixed (HEADER_Handle hObj, unsigned Fixed);
+void HEADER_SetFont (HEADER_Handle hObj, const GUI_FONT * pFont);
+void HEADER_SetHeight (HEADER_Handle hObj, int Height);
+void HEADER_SetTextAlign (HEADER_Handle hObj, unsigned Index, int Align);
+void HEADER_SetItemText (HEADER_Handle hObj, unsigned Index, const char * s);
+void HEADER_SetItemWidth (HEADER_Handle hObj, unsigned Index, int Width);
+void HEADER_SetScrollPos (HEADER_Handle hObj, int ScrollPos);
+void HEADER_SetStreamedBitmap (HEADER_Handle hObj, unsigned Index, const GUI_BITMAP_STREAM * pBitmap);
+void HEADER_SetStreamedBitmapEx(HEADER_Handle hObj, unsigned Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
+void HEADER_SetTextColor (HEADER_Handle hObj, GUI_COLOR Color);
+int HEADER_SetUserData (HEADER_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void HEADER_GetSkinFlexProps (HEADER_SKINFLEX_PROPS * pProps, int Index);
+void HEADER_SetSkinClassic (HEADER_Handle hObj);
+void HEADER_SetSkin (HEADER_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int HEADER_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void HEADER_SetSkinFlexProps (const HEADER_SKINFLEX_PROPS * pProps, int Index);
+void HEADER_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * HEADER_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define HEADER_SKIN_FLEX HEADER_DrawSkinFlex
+
+/*********************************************************************
+*
+* Macros for compatibility with older versions
+*
+**********************************************************************
+*/
+
+#ifdef HEADER_SPACING_H
+ #define HEADER_BORDER_H_DEFAULT HEADER_SPACING_H
+#endif
+#ifdef HEADER_SPACING_V
+ #define HEADER_BORDER_V_DEFAULT HEADER_SPACING_V
+#endif
+#define HEADER_SetDefaultSpacingH(Value) HEADER_SetDefaultBorderH(Value)
+#define HEADER_SetDefaultSpacingV(Value) HEADER_SetDefaultBorderV(Value)
+#define HEADER_GetDefaultSpacingH() HEADER_GetDefaultBorderH()
+#define HEADER_GetDefaultSpacingV() HEADER_GetDefaultBorderV()
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // HEADER_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/HEADER_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,137 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : HEADER_Private.h
+Purpose : Private HEADER include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef HEADER_PRIVATE_H
+#define HEADER_PRIVATE_H
+
+
+#include "HEADER.h"
+#include "WIDGET.h"
+#include "WM.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ int Width;
+ I16 Align;
+ WM_HMEM hDrawObj;
+ char acText[1];
+} HEADER_COLUMN;
+
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} HEADER_SKIN_PRIVATE;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR BkColor;
+ GUI_COLOR TextColor;
+ GUI_COLOR ArrowColor;
+ HEADER_SKIN_PRIVATE SkinPrivate;
+} HEADER_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ HEADER_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ GUI_ARRAY Columns;
+ int CapturePosX;
+ int CaptureItem;
+ int ScrollPos;
+ int Sel;
+ int DirIndicatorColumn;
+ int DirIndicatorReverse;
+ unsigned Fixed;
+ U8 DragLimit;
+} HEADER_Obj;
+
+/*********************************************************************
+*
+* Private (module internal) data
+*
+**********************************************************************
+*/
+
+extern HEADER_PROPS HEADER__DefaultProps;
+extern const GUI_CURSOR * HEADER__pDefaultCursor;
+extern int HEADER__DefaultBorderH;
+extern int HEADER__DefaultBorderV;
+
+extern const WIDGET_SKIN HEADER__SkinClassic;
+extern WIDGET_SKIN HEADER__Skin;
+
+extern WIDGET_SKIN const * HEADER__pSkinDefault;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define HEADER_INIT_ID(p) (p->Widget.DebugId = HEADER_ID)
+#else
+ #define HEADER_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ HEADER_Obj * HEADER_LockH(HEADER_Handle h);
+ #define HEADER_LOCK_H(h) HEADER_LockH(h)
+#else
+ #define HEADER_LOCK_H(h) (HEADER_Obj *)GUI_LOCK_H(h)
+#endif
+
+void HEADER__SetDrawObj(HEADER_Handle hObj, unsigned Index, GUI_DRAW_HANDLE hDrawObj);
+
+
+#endif // GUI_WINSUPPORT
+#endif // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/ICONVIEW.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,162 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : ICONVIEW.h
+Purpose : ICONVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef ICONVIEW_H
+#define ICONVIEW_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+//
+// Status- and create flags
+//
+#define ICONVIEW_CF_AUTOSCROLLBAR_V (1 << 1)
+#define ICONVIEW_SF_AUTOSCROLLBAR_V ICONVIEW_CF_AUTOSCROLLBAR_V
+
+//
+// Color indices
+//
+#define ICONVIEW_CI_BK 0
+#define ICONVIEW_CI_UNSEL 0
+#define ICONVIEW_CI_SEL 1
+#define ICONVIEW_CI_DISABLED 2
+
+//
+// Icon alignment flags, horizontal
+//
+#define ICONVIEW_IA_HCENTER (0 << 0)
+#define ICONVIEW_IA_LEFT (1 << 0)
+#define ICONVIEW_IA_RIGHT (2 << 0)
+
+//
+// Icon alignment flags, vertical
+//
+#define ICONVIEW_IA_VCENTER (0 << 2)
+#define ICONVIEW_IA_BOTTOM (1 << 2)
+#define ICONVIEW_IA_TOP (2 << 2)
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM ICONVIEW_Handle;
+
+/*********************************************************************
+*
+* Public functions
+*
+**********************************************************************
+*/
+ICONVIEW_Handle ICONVIEW_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int xSizeItems, int ySizeItems);
+ICONVIEW_Handle ICONVIEW_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int xSizeItems, int ySizeItems, int NumExtraBytes);
+ICONVIEW_Handle ICONVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+int ICONVIEW_AddBitmapItem (ICONVIEW_Handle hObj, const GUI_BITMAP * pBitmap, const char * pText);
+int ICONVIEW_AddBMPItem (ICONVIEW_Handle hObj, const U8 * pBMP, const char * pText);
+int ICONVIEW_AddBMPItemEx (ICONVIEW_Handle hObj, const void * pBMP, GUI_GET_DATA_FUNC * pfGetData, const char * pText);
+int ICONVIEW_AddStreamedBitmapItem (ICONVIEW_Handle hObj, const void * pStreamedBitmap, const char * pText);
+void ICONVIEW_DeleteItem (ICONVIEW_Handle hObj, unsigned Index);
+//void ICONVIEW_EnableStreamAuto (void);
+GUI_COLOR ICONVIEW_GetBkColor (ICONVIEW_Handle hObj, int Index);
+const GUI_FONT * ICONVIEW_GetFont (ICONVIEW_Handle hObj);
+U32 ICONVIEW_GetItemUserData (ICONVIEW_Handle hObj, int Index);
+int ICONVIEW_GetNumItems (ICONVIEW_Handle hObj);
+int ICONVIEW_GetItemText (ICONVIEW_Handle hObj, int Index, char * pBuffer, int MaxSize);
+int ICONVIEW_GetSel (ICONVIEW_Handle hObj);
+GUI_COLOR ICONVIEW_GetTextColor (ICONVIEW_Handle hObj, int Index);
+int ICONVIEW_GetUserData (ICONVIEW_Handle hObj, void * pDest, int NumBytes);
+GUI_BITMAP * ICONVIEW_GetItemBitmap (ICONVIEW_Handle hObj, int ItemIndex);
+int ICONVIEW_GetReleasedItem (ICONVIEW_Handle hObj);
+int ICONVIEW_InsertBitmapItem (ICONVIEW_Handle hObj, const GUI_BITMAP * pBitmap, const char * pText, int Index);
+int ICONVIEW_InsertBMPItem (ICONVIEW_Handle hObj, const U8 * pBMP, const char * pText, int Index);
+int ICONVIEW_InsertBMPItemEx (ICONVIEW_Handle hObj, const void * pBMP, GUI_GET_DATA_FUNC * pfGetData, const char * pText, int Index);
+int ICONVIEW_InsertStreamedBitmapItem(ICONVIEW_Handle hObj, const void * pStreamedBitmap, const char * pText, int Index);
+int ICONVIEW_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+int ICONVIEW_SetBitmapItem (ICONVIEW_Handle hObj, int Index, const GUI_BITMAP * pBitmap);
+void ICONVIEW_SetBkColor (ICONVIEW_Handle hObj, int Index, GUI_COLOR Color);
+int ICONVIEW_SetBMPItem (ICONVIEW_Handle hObj, const U8 * pBMP, int Index);
+int ICONVIEW_SetBMPItemEx (ICONVIEW_Handle hObj, const void * pBMP, GUI_GET_DATA_FUNC * pfGetData, int Index);
+void ICONVIEW_SetFont (ICONVIEW_Handle hObj, const GUI_FONT * pFont);
+void ICONVIEW_SetFrame (ICONVIEW_Handle hObj, int Coord, int Value);
+void ICONVIEW_SetItemText (ICONVIEW_Handle hObj, int Index, const char * pText);
+void ICONVIEW_SetItemUserData (ICONVIEW_Handle hObj, int Index, U32 UserData);
+void ICONVIEW_SetOwnerDraw (ICONVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void ICONVIEW_SetSel (ICONVIEW_Handle hObj, int Sel);
+void ICONVIEW_SetSpace (ICONVIEW_Handle hObj, int Coord, int Value);
+int ICONVIEW_SetStreamedBitmapItem (ICONVIEW_Handle hObj, int Index, const void * pStreamedBitmap);
+void ICONVIEW_SetIconAlign (ICONVIEW_Handle hObj, int IconAlign);
+void ICONVIEW_SetTextAlign (ICONVIEW_Handle hObj, int TextAlign);
+void ICONVIEW_SetTextColor (ICONVIEW_Handle hObj, int Index, GUI_COLOR Color);
+int ICONVIEW_SetUserData (ICONVIEW_Handle hObj, const void * pSrc, int NumBytes);
+void ICONVIEW_SetWrapMode (ICONVIEW_Handle hObj, GUI_WRAPMODE WrapMode);
+
+void ICONVIEW_Callback (WM_MESSAGE * pMsg);
+
+//
+// Compatibility macro
+//
+#define ICONVIEW_EnableStreamAuto() GUI_DrawStreamedEnableAuto()
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // ICONVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/ICONVIEW_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,138 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : ICONVIEW_Private.h
+Purpose : ICONVIEW private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef ICONVIEW_PRIVATE_H
+#define ICONVIEW_PRIVATE_H
+
+#include "WM.h"
+#include "GUI_ARRAY.h"
+#include "ICONVIEW.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBkColor[3];
+ GUI_COLOR aTextColor[3];
+ int FrameX, FrameY;
+ int SpaceX, SpaceY;
+ int TextAlign;
+ int IconAlign;
+ GUI_WRAPMODE WrapMode;
+} ICONVIEW_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ WM_SCROLL_STATE ScrollStateV;
+ WM_SCROLL_STATE ScrollStateH;
+ ICONVIEW_PROPS Props;
+ GUI_ARRAY ItemArray;
+ int xSizeItems;
+ int ySizeItems;
+ int Sel;
+ U16 Flags;
+ WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+ int ReleasedItem;
+} ICONVIEW_OBJ;
+
+typedef void tDrawImage (const void * pData, GUI_GET_DATA_FUNC * pfGetData, int xPos, int yPos);
+typedef void tDrawText (ICONVIEW_OBJ * pObj, GUI_RECT * pRect, const char * s);
+typedef void tGetImageSizes(const void * pData, GUI_GET_DATA_FUNC * pfGetData, int * xSize, int * ySize);
+
+typedef struct {
+ tDrawImage * pfDrawImage;
+ tDrawText * pfDrawText;
+ tGetImageSizes * pfGetImageSizes;
+ GUI_GET_DATA_FUNC * pfGetData;
+ const void * pData;
+ U32 UserData;
+ int SizeOfData;
+ char acText[1];
+} ICONVIEW_ITEM;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define ICONVIEW_INIT_ID(p) (p->Widget.DebugId = ICONVIEW_ID)
+#else
+ #define ICONVIEW_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ ICONVIEW_OBJ * ICONVIEW_LockH(ICONVIEW_Handle h);
+ #define ICONVIEW_LOCK_H(h) ICONVIEW_LockH(h)
+#else
+ #define ICONVIEW_LOCK_H(h) (ICONVIEW_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void ICONVIEW__DrawText (ICONVIEW_OBJ * pObj, GUI_RECT * pRect, const char * pText);
+void ICONVIEW__ManageAutoScroll(ICONVIEW_Handle hObj);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // ICONVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/IMAGE.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,117 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : IMAGE.h
+Purpose : Image include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef IMAGE_H
+#define IMAGE_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define IMAGE_CF_MEMDEV (1 << 0) // Widget uses an internal memory device which speeds up use of compressed images (GIF, JPEG, PNG)
+#define IMAGE_CF_TILE (1 << 1) // Uses tiling to fill up the whole area of the widget
+#define IMAGE_CF_ALPHA (1 << 2) // Needs to be set if alpha blending is required (PNG)
+#define IMAGE_CF_ATTACHED (1 << 3) // Widget size is fixed to the parent border
+#define IMAGE_CF_AUTOSIZE (1 << 4) // Widget size is taken from the attached image
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM IMAGE_Handle;
+
+/*********************************************************************
+*
+* Public functions
+*
+**********************************************************************
+*/
+IMAGE_Handle IMAGE_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+IMAGE_Handle IMAGE_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+IMAGE_Handle IMAGE_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+void IMAGE_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+int IMAGE_GetUserData(IMAGE_Handle hObj, void * pDest, int NumBytes);
+void IMAGE_SetBitmap (IMAGE_Handle hWin, const GUI_BITMAP * pBitmap);
+void IMAGE_SetBMP (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetBMPEx (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetDTA (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetDTAEx (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetGIF (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetGIFEx (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetJPEG (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetJPEGEx (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+void IMAGE_SetPNG (IMAGE_Handle hObj, const void * pData, U32 FileSize);
+void IMAGE_SetPNGEx (IMAGE_Handle hObj, GUI_GET_DATA_FUNC * pfGetData, void * pVoid);
+int IMAGE_SetUserData(IMAGE_Handle hObj, const void * pSrc, int NumBytes);
+
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // IMAGE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/IMAGE_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,144 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : IMAGE_Private.h
+Purpose : Private IMAGE include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef IMAGE_PRIVATE_H
+#define IMAGE_PRIVATE_H
+
+#include "IMAGE.h"
+#include "GUI_Private.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Private config defaults
+*
+**********************************************************************
+*/
+#ifndef IMAGE_SUPPORT_TRANSPARENCY
+ #define IMAGE_SUPPORT_TRANSPARENCY WM_SUPPORT_TRANSPARENCY
+#endif
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ U32 Flags;
+} IMAGE_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ IMAGE_PROPS Props;
+ const void * pData; // Data pointer of the object to be drawn (Bitmap, BMP, GIF, JPEG, PNG)
+ void (* pfDrawImageAt) (IMAGE_Handle hObj, int xPos, int yPos); // Object specific (Bitmap, BMP, GIF, JPEG, PNG) code
+ void (* pfPaint) (IMAGE_Handle hObj); // Drawing method specific (Default, Tiled, Magnified) code
+ void (* pfGetImageSize)(IMAGE_Handle hObj, int * pxSize, int * pySize); // Returns the image size of the attached item
+ void (* pfOnTimer) (IMAGE_Handle hObj); // Timer function for animated images (currently only animated GIFs are supported)
+ U32 FileSize;
+ //
+ // Data items used by IAMGE_GIF.c
+ //
+ int NumImages; // Number of (sub)images
+ int CurrentImage; // Image index used for animated images
+ GUI_TIMER_HANDLE hTimer; // Timer used for animated images
+ //
+ // Data items used by IAMGE_DTA.c
+ //
+ GUI_BITMAP Bitmap; // Bitmap structure
+ GUI_LOGPALETTE Palette; // Palette structure
+ //
+ // Data items used by Image_...Ex() - functions
+ //
+ void * pVoid; // Void pointer passed to GetData() function
+ GUI_GET_DATA_FUNC * pfGetData; // Pointer to GetData() function
+ //
+ // Data items used if memory devices are available and IMAGE_CF_MEMDEV has been set
+ //
+ #if GUI_SUPPORT_MEMDEV
+ GUI_MEMDEV_Handle hMem;
+ #endif
+} IMAGE_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define IMAGE_INIT_ID(p) (p->Widget.DebugId = IMAGE_ID)
+#else
+ #define IMAGE_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ IMAGE_OBJ * IMAGE__LockH(IMAGE_Handle h);
+ #define IMAGE_LOCK_H(h) IMAGE__LockH(h)
+#else
+ #define IMAGE_LOCK_H(h) (IMAGE_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+extern IMAGE_PROPS IMAGE__DefaultProps;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void IMAGE__SetWindowSize(IMAGE_Handle hObj);
+void IMAGE__FreeAttached (IMAGE_Handle hObj, int LeaveTimer);
+
+#endif // GUI_WINSUPPORT
+#endif // IMAGE_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/IP_FS.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,143 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+-------------------------- END-OF-HEADER -----------------------------
+
+File : IP_FS.h
+Purpose : Header file for file system abstraction layer.
+*/
+
+#ifndef IP_FS_H // Avoid multiple inclusion.
+#define IP_FS_H
+
+#include "SEGGER.h"
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs.
+#endif
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+
+typedef struct {
+ //
+ // Read only file operations. These have to be present on ANY file system, even the simplest one.
+ //
+ void* (*pfOpenFile) (const char* sFilename);
+ int (*pfCloseFile) (void* hFile);
+ int (*pfReadAt) (void* hFile, void* pBuffer, U32 Pos, U32 NumBytes);
+ long (*pfGetLen) (void* hFile);
+ //
+ // Directory query operations.
+ //
+ void (*pfForEachDirEntry) (void* pContext, const char* sDir, void (*pf)(void*, void*));
+ void (*pfGetDirEntryFileName) (void* pFileEntry, char* sFileName, U32 SizeOfBuffer);
+ U32 (*pfGetDirEntryFileSize) (void* pFileEntry, U32* pFileSizeHigh);
+ U32 (*pfGetDirEntryFileTime) (void* pFileEntry);
+ int (*pfGetDirEntryAttributes)(void* pFileEntry);
+ //
+ // Write file operations.
+ //
+ void* (*pfCreate) (const char* sFileName);
+ void* (*pfDeleteFile) (const char* sFilename);
+ int (*pfRenameFile) (const char* sOldFilename, const char* sNewFilename);
+ int (*pfWriteAt) (void* hFile, void* pBuffer, U32 Pos, U32 NumBytes);
+ //
+ // Additional directory operations
+ //
+ int (*pfMKDir) (const char* sDirName);
+ int (*pfRMDir) (const char* sDirName);
+ //
+ // Additional operations
+ //
+ int (*pfIsFolder) (const char* sPath);
+ int (*pfMove) (const char* sOldFilename, const char* sNewFilename);
+} IP_FS_API;
+
+typedef struct {
+ const char* sPath;
+ const unsigned char* pData;
+ unsigned int FileSize;
+} IP_FS_READ_ONLY_FILE_ENTRY;
+
+typedef struct IP_FS_READ_ONLY_FILE_HOOK_STRUCT IP_FS_READ_ONLY_FILE_HOOK;
+struct IP_FS_READ_ONLY_FILE_HOOK_STRUCT {
+ IP_FS_READ_ONLY_FILE_HOOK* pNext;
+ IP_FS_READ_ONLY_FILE_ENTRY FileEntry;
+};
+
+/*********************************************************************
+*
+* API functions
+*
+**********************************************************************
+*/
+
+#define IP_FS_FS IP_FS_emFile
+#define IP_FS_FS_AllowHiddenAccess IP_FS_emFile_AllowHiddenAccess
+#define IP_FS_FS_DenyHiddenAccess IP_FS_emFile_DenyHiddenAccess
+
+extern const IP_FS_API IP_FS_ReadOnly; // Read-only file system, typically located in flash memory.
+extern const IP_FS_API IP_FS_Win32; // File system interface for Win32.
+extern const IP_FS_API IP_FS_Linux; // File system interface for Linux
+extern const IP_FS_API IP_FS_emFile; // Target file system (emFile), shows and allows access to hidden files.
+extern const IP_FS_API IP_FS_emFile_AllowHiddenAccess; // Target file system (emFile), does not show hidden files but allows access to them.
+extern const IP_FS_API IP_FS_emFile_DenyHiddenAccess; // Target file system (emFile), does not show hidden files and does not allow access to them.
+
+//
+// Helper functions for Read Only file system layer.
+//
+void IP_FS_READ_ONLY_ClrFileHooks(void);
+void IP_FS_READ_ONLY_AddFileHook (IP_FS_READ_ONLY_FILE_HOOK* pHook, const char* sPath, const unsigned char* pData, unsigned int FileSize);
+
+//
+// Helper functions for Win32 file system layer.
+//
+void IP_FS_WIN32_ConfigBaseDir(const char* sDir);
+
+
+#if defined(__cplusplus)
+} // Make sure we have C-declarations in C++ programs.
+#endif
+
+#endif // Avoid multiple inclusion.
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/KNOB.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,120 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : KNOB.h
+Purpose : KNOB include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef KNOB_H
+#define KNOB_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Req. for Create indirect data structure
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM KNOB_Handle;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+KNOB_Handle KNOB_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id);
+KNOB_Handle KNOB_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id, int NumExtraBytes);
+KNOB_Handle KNOB_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void KNOB_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void KNOB_AddValue (KNOB_Handle hObj, I32 Value);
+int KNOB_GetUserData(KNOB_Handle hObj, void * pDest, int NumBytes); // Gets user defined data
+I32 KNOB_GetValue (KNOB_Handle hObj); // Returns the position of the knob in tenth of degree
+void KNOB_SetBkColor (KNOB_Handle hObj, GUI_COLOR Color); // Sets the BK color of the widget
+void KNOB_SetBkDevice(KNOB_Handle hObj, GUI_MEMDEV_Handle hMemBk); // Sets the background device
+void KNOB_SetDevice (KNOB_Handle hObj, GUI_MEMDEV_Handle hMemSrc); // Sets the memory device with the drawn knob
+void KNOB_SetKeyValue(KNOB_Handle hObj, I32 KeyValue); // Sets the value the knob will rotate on one key press
+void KNOB_SetOffset (KNOB_Handle hObj, I32 Offset); // Sets the offset angle of the knob
+void KNOB_SetPeriod (KNOB_Handle hObj, I32 Period); // Sets the period in which the knob stops
+void KNOB_SetPos (KNOB_Handle hObj, I32 Pos); // Sets position of the knob in tenth of degree
+void KNOB_SetRange (KNOB_Handle hObj, I32 MinRange, I32 MaxRange); // Sets the usable range of the knob widget
+void KNOB_SetSnap (KNOB_Handle hObj, I32 Snap); // Sets Snap positions where the knob stops
+void KNOB_SetTickSize(KNOB_Handle hObj, I32 TickSize); // Sets the ticksize, in 1/10 of degree
+int KNOB_SetUserData(KNOB_Handle hObj, const void * pSrc, int NumBytes); // Sets user defined data
+
+/*********************************************************************
+*
+* Global functions
+*
+**********************************************************************
+*/
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+#endif // KNOB_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/KNOB_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,110 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : KNOB.h
+Purpose : KNOB include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef KNOB_PRIVATE_H
+#define KNOB_PRIVATE_H
+
+#include "KNOB.h"
+#include "GUI_Private.h"
+
+#if (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ I32 Snap; // Position where the knob snaps
+ I32 Period; // Time it takes to stop the knob in ms
+ GUI_COLOR BkColor; // The Bk color
+ I32 Offset; // the offset
+ I32 MinRange;
+ I32 MaxRange;
+ I32 TickSize; // Minimum movement range in 1/10 of degree
+ I32 KeyValue; // Range of movement for one key push
+} KNOB_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ KNOB_PROPS Props;
+ WM_HMEM hContext;
+ I32 Angle;
+ I32 Value;
+ int xSize;
+ int ySize;
+ GUI_MEMDEV_Handle hMemSrc;
+ GUI_MEMDEV_Handle hMemDst;
+ GUI_MEMDEV_Handle hMemBk;
+} KNOB_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define KNOB_INIT_ID(p) p->Widget.DebugId = KNOB_ID
+#else
+ #define KNOB_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ KNOB_OBJ * KNOB_LockH(KNOB_Handle h);
+ #define KNOB_LOCK_H(h) KNOB_LockH(h)
+#else
+ #define KNOB_LOCK_H(h) (KNOB_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+extern KNOB_PROPS KNOB__DefaultProps;
+
+#endif // (GUI_SUPPORT_MEMDEV && GUI_WINSUPPORT)
+#endif // KNOB_PRIVATE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,769 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LCD.h
+Purpose : Declares LCD interface functions
+----------------------------------------------------------------------
+*/
+
+#ifndef LCD_H
+#define LCD_H
+
+#include "GUI_ConfDefaults.h" /* Used for GUI_CONST_STORAGE */
+#include "Global.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Basic type defines
+*
+* The follwing are defines for types used in the LCD-driver and the
+* GUI layers on top of that. Since "C" does not provide data types of
+* fixed length which are identical on all platforms, this is done here.
+* For most 16/32 controllers, the settings will work fine. However, if
+* you have similar defines in other sections of your program, you might
+* want to change or relocate these defines, e.g. in a TYPE.h file.
+*/
+#define I16P I16 /* signed 16 bits OR MORE ! */
+#define U16P U16 /* unsigned 16 bits OR MORE ! */
+
+/*********************************************************************
+*
+* Settings for windows simulation
+*
+* Some settings in the configuration may conflict with the values required
+* in the Simulation. This is why we ignore the target settings for data
+* types and use the correct settings for the simulation.
+* (U32 could be defined as long, which would yield a 64 bit type on
+* the PC)
+*/
+#ifdef WIN32
+ #pragma warning( disable : 4244 ) // Disable warning messages in simulation
+ #pragma warning( disable : 4761 ) // Disable warning "integral size mismatch in argument; conversion supplied"
+#endif
+
+/*********************************************************************
+*
+* Constants
+*/
+#define LCD_ERR0 (0x10)
+#define LCD_ERR_CONTROLLER_NOT_FOUND (LCD_ERR0+1)
+#define LCD_ERR_MEMORY (LCD_ERR0+2)
+
+/*********************************************************************
+*
+* Drawing modes
+*/
+#define LCD_DRAWMODE_NORMAL (0)
+#define LCD_DRAWMODE_XOR (1<<0)
+#define LCD_DRAWMODE_TRANS (1<<1)
+#define LCD_DRAWMODE_REV (1<<2)
+
+/*********************************************************************
+*
+* Typedefs
+*/
+typedef int LCD_DRAWMODE;
+typedef U32 LCD_COLOR;
+
+/*********************************************************************
+*
+* Data structures
+*/
+typedef struct { I16P x,y; } GUI_POINT;
+typedef struct { I16 x0,y0,x1,y1; } LCD_RECT;
+
+typedef struct {
+ int NumEntries;
+ char HasTrans;
+ const LCD_COLOR * pPalEntries;
+} LCD_LOGPALETTE;
+
+/* This is used for the simulation only ! */
+typedef struct {
+ int x,y;
+ unsigned char KeyStat;
+} LCD_tMouseState;
+
+typedef struct {
+ int NumEntries;
+ const LCD_COLOR * pPalEntries;
+} LCD_PHYSPALETTE;
+
+/*********************************************************************
+*
+* LCD_L0_... color conversion
+*/
+typedef LCD_COLOR tLCDDEV_Index2Color (LCD_PIXELINDEX Index);
+typedef LCD_PIXELINDEX tLCDDEV_Color2Index (LCD_COLOR Color);
+typedef LCD_PIXELINDEX tLCDDEV_GetIndexMask (void);
+
+typedef void tLCDDEV_Index2ColorBulk(void * pIndex, LCD_COLOR * pColor, U32 NumItems, U8 SizeOfIndex);
+typedef void tLCDDEV_Color2IndexBulk(LCD_COLOR * pColor, void * pIndex, U32 NumItems, U8 SizeOfIndex);
+
+/*********************************************************************
+*
+* Color conversion API tables
+*/
+typedef struct {
+ tLCDDEV_Color2Index * pfColor2Index;
+ tLCDDEV_Index2Color * pfIndex2Color;
+ tLCDDEV_GetIndexMask * pfGetIndexMask;
+ int NoAlpha;
+ tLCDDEV_Color2IndexBulk * pfColor2IndexBulk;
+ tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk;
+} LCD_API_COLOR_CONV;
+
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_0;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_2;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_4;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_5;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_8;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1_24;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_2;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_4;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_5;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_6;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_1616I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_111;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_222;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_233;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_323;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_332;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_444_12;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_444_12_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_444_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_555;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_565;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_556;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_655;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_666;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_666_9;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_822216;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_84444;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8666;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8666_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_88666I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_8888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M111;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M1555I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M222;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M233;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M323;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M332;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M4444I;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M444_12;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M444_12_1;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M444_16;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M555;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M565;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M556;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M655;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M666;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M666_9;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M8565;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M8888;
+extern const LCD_API_COLOR_CONV LCD_API_ColorConv_M8888I;
+
+#define GUICC_0 &LCD_API_ColorConv_0
+#define GUICC_1 &LCD_API_ColorConv_1
+#define GUICC_1_2 &LCD_API_ColorConv_1_2
+#define GUICC_1_4 &LCD_API_ColorConv_1_4
+#define GUICC_1_5 &LCD_API_ColorConv_1_5
+#define GUICC_1_8 &LCD_API_ColorConv_1_8
+#define GUICC_1_16 &LCD_API_ColorConv_1_16
+#define GUICC_1_24 &LCD_API_ColorConv_1_24
+#define GUICC_2 &LCD_API_ColorConv_2
+#define GUICC_4 &LCD_API_ColorConv_4
+#define GUICC_5 &LCD_API_ColorConv_5
+#define GUICC_6 &LCD_API_ColorConv_6
+#define GUICC_8 &LCD_API_ColorConv_8
+#define GUICC_16 &LCD_API_ColorConv_16
+#define GUICC_1616I &LCD_API_ColorConv_1616I
+#define GUICC_111 &LCD_API_ColorConv_111
+#define GUICC_222 &LCD_API_ColorConv_222
+#define GUICC_233 &LCD_API_ColorConv_233
+#define GUICC_323 &LCD_API_ColorConv_323
+#define GUICC_332 &LCD_API_ColorConv_332
+#define GUICC_M4444I &LCD_API_ColorConv_M4444I
+#define GUICC_444_12 &LCD_API_ColorConv_444_12
+#define GUICC_444_12_1 &LCD_API_ColorConv_444_12_1
+#define GUICC_444_16 &LCD_API_ColorConv_444_16
+#define GUICC_555 &LCD_API_ColorConv_555
+#define GUICC_565 &LCD_API_ColorConv_565
+#define GUICC_556 &LCD_API_ColorConv_556
+#define GUICC_655 &LCD_API_ColorConv_655
+#define GUICC_666 &LCD_API_ColorConv_666
+#define GUICC_666_9 &LCD_API_ColorConv_666_9
+#define GUICC_822216 &LCD_API_ColorConv_822216
+#define GUICC_84444 &LCD_API_ColorConv_84444
+#define GUICC_8666 &LCD_API_ColorConv_8666
+#define GUICC_8666_1 &LCD_API_ColorConv_8666_1
+#define GUICC_88666I &LCD_API_ColorConv_88666I
+#define GUICC_888 &LCD_API_ColorConv_888
+#define GUICC_8888 &LCD_API_ColorConv_8888
+#define GUICC_M111 &LCD_API_ColorConv_M111
+#define GUICC_M1555I &LCD_API_ColorConv_M1555I
+#define GUICC_M222 &LCD_API_ColorConv_M222
+#define GUICC_M233 &LCD_API_ColorConv_M233
+#define GUICC_M323 &LCD_API_ColorConv_M323
+#define GUICC_M332 &LCD_API_ColorConv_M332
+#define GUICC_M444_12 &LCD_API_ColorConv_M444_12
+#define GUICC_M444_12_1 &LCD_API_ColorConv_M444_12_1
+#define GUICC_M444_16 &LCD_API_ColorConv_M444_16
+#define GUICC_M555 &LCD_API_ColorConv_M555
+#define GUICC_M565 &LCD_API_ColorConv_M565
+#define GUICC_M556 &LCD_API_ColorConv_M556
+#define GUICC_M655 &LCD_API_ColorConv_M655
+#define GUICC_M666 &LCD_API_ColorConv_M666
+#define GUICC_M666_9 &LCD_API_ColorConv_M666_9
+#define GUICC_M8565 &LCD_API_ColorConv_M8565
+#define GUICC_M888 &LCD_API_ColorConv_M888
+#define GUICC_M8888 &LCD_API_ColorConv_M8888
+#define GUICC_M8888I &LCD_API_ColorConv_M8888I
+
+void GUICC_M1555I_SetCustColorConv(tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M565_SetCustColorConv (tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M4444I_SetCustColorConv(tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M888_SetCustColorConv (tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+void GUICC_M8888I_SetCustColorConv(tLCDDEV_Color2IndexBulk * pfColor2IndexBulk, tLCDDEV_Index2ColorBulk * pfIndex2ColorBulk);
+
+/*********************************************************************
+*
+* Compatibility defines for older versions
+*/
+#define GUI_COLOR_CONV_1 GUICC_1
+#define GUI_COLOR_CONV_2 GUICC_2
+#define GUI_COLOR_CONV_4 GUICC_4
+#define GUI_COLOR_CONV_8666 GUICC_8666
+#define GUI_COLOR_CONV_888 GUICC_888
+#define GUI_COLOR_CONV_8888 GUICC_8888
+#define GUI_COLOR_CONV_565 GUICC_565
+#define GUI_COLOR_CONV_M565 GUICC_M565
+
+/*********************************************************************
+*
+* LCDDEV function table
+*
+* Below the routines which need to in an LCDDEV routine table are
+* defined. All of these routines have to be in the low-level driver
+* (LCD_L0) or in the memory device which can be used to replace the
+* driver.
+* The one exception to this is the SetClipRect routine, which would
+* be identical for all drivers and is therefor contained in the
+* level above (LCD).
+*/
+typedef void tLCDDEV_DrawPixel (int x, int y);
+typedef void tLCDDEV_DrawHLine (int x0, int y0, int x1);
+typedef void tLCDDEV_DrawVLine (int x , int y0, int y1);
+typedef void tLCDDEV_FillRect (int x0, int y0, int x1, int y1);
+typedef unsigned int tLCDDEV_GetPixelIndex(int x, int y);
+typedef void tLCDDEV_SetPixelIndex(int x, int y, int ColorIndex);
+typedef void tLCDDEV_XorPixel (int x, int y);
+typedef void tLCDDEV_FillPolygon (const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+typedef void tLCDDEV_FillPolygonAA(const GUI_POINT * pPoints, int NumPoints, int x0, int y0);
+typedef void tLCDDEV_GetRect (LCD_RECT * pRect);
+typedef int tLCDDEV_Init (void);
+typedef void tLCDDEV_On (void);
+typedef void tLCDDEV_Off (void);
+typedef void tLCDDEV_SetLUTEntry (U8 Pos, LCD_COLOR color);
+typedef void * tLCDDEV_GetDevFunc (int Index);
+typedef I32 tLCDDEV_GetDevProp (int Index);
+typedef void tLCDDEV_SetOrg (int x, int y);
+
+/*********************************************************************
+*
+* Memory device API tables
+*/
+typedef struct GUI_DEVICE GUI_DEVICE;
+typedef struct GUI_DEVICE_API GUI_DEVICE_API;
+
+typedef void tLCDDEV_DrawBitmap (int x0, int y0, int xsize, int ysize,
+ int BitsPerPixel, int BytesPerLine,
+ const U8 * pData, int Diff,
+ const void * pTrans); /* Really LCD_PIXELINDEX, but is void to avoid compiler warnings */
+#define GUI_MEMDEV_APILIST_1 &GUI_MEMDEV_DEVICE_1
+#define GUI_MEMDEV_APILIST_8 &GUI_MEMDEV_DEVICE_8
+#define GUI_MEMDEV_APILIST_16 &GUI_MEMDEV_DEVICE_16
+#define GUI_MEMDEV_APILIST_32 &GUI_MEMDEV_DEVICE_32
+
+/*********************************************************************
+*
+* Defines for device capabilities
+*
+* The following is the list of device capabilities which can, but do
+* not have to be implemented in the driver. This way the driver can be
+* enhanced in the future without affecting the driver interface,
+* keeping older drivers compatible.
+* More DevCaps can always be added in the future, as older drivers
+* are guaranteed to return 0 for all unimplemented features or queries.
+*
+* The values below define the legal parameters to the LCD_GetDeviceCaps
+* and the LCD_GetpCapFunc routines.
+*/
+
+#define LCD_DEVCAP_XSIZE 0x01 /* Quest horiz. res. of display */
+#define LCD_DEVCAP_YSIZE 0x02 /* Quest vert. res. of display */
+#define LCD_DEVCAP_VXSIZE 0x03 /* Quest vert. res. of virtual disp.*/
+#define LCD_DEVCAP_VYSIZE 0x04 /* Quest vert. res. of virtual disp.*/
+#define LCD_DEVCAP_XORG 0x05 /* X-origin ... usually 0 */
+#define LCD_DEVCAP_YORG 0x06 /* Y-origin ... usually 0 */
+#define LCD_DEVCAP_CONTROLLER 0x07 /* LCD Controller (Numerical) */
+#define LCD_DEVCAP_BITSPERPIXEL 0x08 /* Bits per pixel ... 1/2/4/8 */
+#define LCD_DEVCAP_NUMCOLORS 0x09 /* Quest number of colors */
+#define LCD_DEVCAP_XMAG 0x0A
+#define LCD_DEVCAP_YMAG 0x0B
+#define LCD_DEVCAP_MIRROR_X 0x0C
+#define LCD_DEVCAP_MIRROR_Y 0x0D
+#define LCD_DEVCAP_SWAP_XY 0x0E
+#define LCD_DEVCAP_SWAP_RB 0x0F
+
+int LCD_GetXSizeMax(void);
+int LCD_GetYSizeMax(void);
+int LCD_GetVXSizeMax(void);
+int LCD_GetVYSizeMax(void);
+int LCD_GetBitsPerPixelMax(void);
+void LCD_SetDisplaySize(int xSizeDisplay, int ySizeDisplay);
+int LCD_GetXSizeDisplay(void);
+int LCD_GetYSizeDisplay(void);
+
+int LCD_GetXSizeEx (int LayerIndex);
+int LCD_GetYSizeEx (int LayerIndex);
+int LCD_GetVXSizeEx (int LayerIndex);
+int LCD_GetVYSizeEx (int LayerIndex);
+int LCD_GetBitsPerPixelEx (int LayerIndex);
+U32 LCD_GetNumColorsEx (int LayerIndex);
+int LCD_GetXMagEx (int LayerIndex);
+int LCD_GetYMagEx (int LayerIndex);
+int LCD_GetMirrorXEx (int LayerIndex);
+int LCD_GetMirrorYEx (int LayerIndex);
+int LCD_GetSwapXYEx (int LayerIndex);
+int LCD_GetReversLUTEx (int LayerIndex);
+int LCD_GetPhysColorsInRAMEx(int LayerIndex);
+
+int LCD_GetXSize (void);
+int LCD_GetYSize (void);
+int LCD_GetVXSize (void);
+int LCD_GetVYSize (void);
+int LCD_GetBitsPerPixel (void);
+U32 LCD_GetNumColors (void);
+int LCD_GetXMag (void);
+int LCD_GetYMag (void);
+int LCD_GetMirrorX (void);
+int LCD_GetMirrorY (void);
+int LCD_GetSwapXY (void);
+int LCD_GetReversLUT (void);
+int LCD_GetPhysColorsInRAM (void);
+
+I32 LCD__GetBPP (U32 IndexMask);
+I32 LCD__GetBPPDevice(U32 IndexMask);
+
+tLCDDEV_Index2Color * LCD_GetpfIndex2ColorEx(int LayerIndex);
+tLCDDEV_Color2Index * LCD_GetpfColor2IndexEx(int LayerIndex);
+
+tLCDDEV_Color2Index * LCD_GetpfColor2Index(void);
+
+int LCD_GetNumLayers(void);
+
+LCD_COLOR * LCD_GetPalette (void);
+LCD_COLOR * LCD_GetPaletteEx (int LayerIndex);
+void * LCD_GetVRAMAddr (void);
+void * LCD_GetVRAMAddrEx(int LayerIndex);
+
+void (* LCD_GetDevFunc(int LayerIndex, int Item))(void);
+
+/*********************************************************************
+*
+* Runtime rotation of drivers
+*/
+int LCD_ROTATE_AddDriver (const GUI_DEVICE_API * pDriver);
+int LCD_ROTATE_AddDriverEx(const GUI_DEVICE_API * pDeviceAPI, int LayerIndex);
+int LCD_ROTATE_DecSel (void);
+int LCD_ROTATE_DecSelEx (int LayerIndex);
+int LCD_ROTATE_IncSel (void);
+int LCD_ROTATE_IncSelEx (int LayerIndex);
+int LCD_ROTATE_SetCallback(void (* pCbOnConfig)(GUI_DEVICE *, int, int), int LayerIndex);
+int LCD_ROTATE_SetSel (int Index);
+int LCD_ROTATE_SetSelEx (int Index, int LayerIndex);
+
+/*********************************************************************
+*
+* Values for requesting and setting function pointers (display driver)
+*/
+ /* Request of a function pointer for... */
+#define LCD_DEVFUNC_READRECT 0x01 /* ...reading a rectangular display area */
+#define LCD_DEVFUNC_SETALPHA 0x02 /* ...setting the alpha blending factor */
+#define LCD_DEVFUNC_SETPOS 0x03 /* ...setting the layer position */
+#define LCD_DEVFUNC_GETPOS 0x04 /* ...getting the layer position */
+#define LCD_DEVFUNC_SETSIZE 0x05 /* ...setting the layer size */
+#define LCD_DEVFUNC_SETVIS 0x06 /* ...setting the visibility of a layer */
+#define LCD_DEVFUNC_24BPP 0x07 /* ...drawing 24bpp bitmaps */
+#define LCD_DEVFUNC_NEXT_PIXEL 0x08 /* ...drawing a bitmap pixel by pixel */
+#define LCD_DEVFUNC_SET_VRAM_ADDR 0x09 /* ...setting the VRAM address */
+#define LCD_DEVFUNC_SET_VSIZE 0x0A /* ...setting the VRAM size */
+#define LCD_DEVFUNC_SET_SIZE 0x0B /* ...setting the display size */
+#define LCD_DEVFUNC_INIT 0x0C /* ...initializing the display controller */
+#define LCD_DEVFUNC_CONTROLCACHE 0x0D /* ...controlling the cache */
+#define LCD_DEVFUNC_ON 0x0E /* ...switching the display on */
+#define LCD_DEVFUNC_OFF 0x0F /* ...switching the display off */
+#define LCD_DEVFUNC_SETLUTENTRY 0x10 /* ...setting a LUT entry */
+#define LCD_DEVFUNC_FILLPOLY 0x11 /* ...filling a polygon */
+#define LCD_DEVFUNC_FILLPOLYAA 0x12 /* ...filling an antialiased polygon */
+#define LCD_DEVFUNC_ALPHAMODE 0x13 /* ...setting the alpha blending mode */
+#define LCD_DEVFUNC_CHROMAMODE 0x14 /* ...setting the chroma blending mode */
+#define LCD_DEVFUNC_CHROMA 0x15 /* ...setting the chroma values */
+#define LCD_DEVFUNC_SETFUNC 0x16 /* ...setting a function pointer */
+#define LCD_DEVFUNC_REFRESH 0x17 /* ...refreshing the display */
+#define LCD_DEVFUNC_SETRECT 0x18 /* ...setting the drawing rectangle */
+ /* Setting a function pointer for... */
+#define LCD_DEVFUNC_FILLRECT 0x19 /* ...filling a rectangular area */
+#define LCD_DEVFUNC_DRAWBMP_1BPP 0x20 /* ...drawing a 1bpp bitmap */
+#define LCD_DEVFUNC_COPYBUFFER 0x21 /* ...copying complete frame buffers */
+#define LCD_DEVFUNC_SHOWBUFFER 0x22 /* ...shows the given buffer */
+#define LCD_DEVFUNC_COPYRECT 0x23 /* ...filling a rectangular area */
+#define LCD_DEVFUNC_DRAWBMP_16BPP 0x24 /* ...drawing a 16bpp bitmap */
+#define LCD_DEVFUNC_DRAWBMP_8BPP 0x25 /* ...drawing a 8bpp bitmap */
+#define LCD_DEVFUNC_READPIXEL 0x26 /* ...reading a pixel index */
+#define LCD_DEVFUNC_READMPIXELS 0x27 /* ...reading multiple pixel indices */
+#define LCD_DEVFUNC_DRAWBMP_32BPP 0x28 /* ...drawing a 32bpp bitmap */
+#define LCD_DEVFUNC_SET_BUFFERPTR 0x29 /* ...setting an array of buffer pointers */
+#define LCD_DEVFUNC_EXIT 0x30 /* ...free memory and shut down controller */
+
+/*********************************************************************
+*
+* Values for requesting function pointers (memory devices)
+*/
+ /* Request of a function pointer for... */
+#define MEMDEV_DEVFUNC_WRITETOACTIVE 0x16 /* ...writing the memory device */
+
+/*********************************************************************
+*
+* Values for requesting data
+*/
+ /* Request pointer to... */
+#define LCD_DEVDATA_MEMDEV 0x01 /* ...default memory device API */
+#define LCD_DEVDATA_PHYSPAL 0x02 /* ...physical palette */
+#define LCD_DEVDATA_VRAMADDR 0x03 /* ...VRAM address */
+
+/*********************************************************************
+*
+* Structures for passing data to LCD_X_DisplayDriver()
+*/
+typedef struct {
+ void * pVRAM;
+} LCD_X_SETVRAMADDR_INFO;
+
+typedef struct {
+ int xPos, yPos;
+} LCD_X_SETORG_INFO;
+
+typedef struct {
+ LCD_COLOR Color;
+ U8 Pos;
+} LCD_X_SETLUTENTRY_INFO;
+
+typedef struct {
+ int xSize, ySize;
+} LCD_X_SETSIZE_INFO;
+
+typedef struct {
+ int xPos, yPos;
+ int xLen, yLen;
+ int BytesPerPixel;
+ U32 Off;
+} LCD_X_SETPOS_INFO;
+
+typedef struct {
+ int Alpha;
+} LCD_X_SETALPHA_INFO;
+
+typedef struct {
+ int OnOff;
+} LCD_X_SETVIS_INFO;
+
+typedef struct {
+ int AlphaMode;
+} LCD_X_SETALPHAMODE_INFO;
+
+typedef struct {
+ int ChromaMode;
+} LCD_X_SETCHROMAMODE_INFO;
+
+typedef struct {
+ LCD_COLOR ChromaMin;
+ LCD_COLOR ChromaMax;
+} LCD_X_SETCHROMA_INFO;
+
+typedef struct {
+ int Index;
+} LCD_X_SHOWBUFFER_INFO;
+
+/*********************************************************************
+*
+* Commands for LCD_X_DisplayDriver()
+*/
+#define LCD_X_INITCONTROLLER 0x01 /* Initializing the display controller */
+#define LCD_X_SETVRAMADDR 0x02 /* Setting the video RAM address */
+#define LCD_X_SETORG 0x03 /* Setting the origin within a layer */
+#define LCD_X_SETLUTENTRY 0x04 /* Setting an entry of the LUT */
+#define LCD_X_ON 0x05 /* Switching the display on */
+#define LCD_X_OFF 0x06 /* Switching the display off */
+#define LCD_X_SETSIZE 0x07 /* Setting the layer size */
+#define LCD_X_SETPOS 0x08 /* Setting the layer position */
+#define LCD_X_SETVIS 0x09 /* Setting the visibility of a layer */
+#define LCD_X_SETALPHA 0x0A /* Setting the alpha value of the layer */
+#define LCD_X_SETALPHAMODE 0x0B /* Setting the alpha blending mode */
+#define LCD_X_SETCHROMAMODE 0x0C /* Setting the chroma blending mode */
+#define LCD_X_SETCHROMA 0x0D /* Setting the chroma values */
+#define LCD_X_SHOWBUFFER 0x0E /* Switching to the given buffer */
+
+int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData);
+void LCD_X_Config(void);
+
+/*********************************************************************
+*
+* Get/Set layer properties
+*/
+int LCD_GetPosEx (int LayerIndex, int * pxPos, int * pyPos);
+int LCD_OffEx (int LayerIndex);
+int LCD_OnEx (int LayerIndex);
+int LCD_RefreshEx (int LayerIndex);
+int LCD_SetAlphaEx (int LayerIndex, int Alpha);
+int LCD_SetAlphaModeEx (int LayerIndex, int AlphaMode);
+int LCD_SetBufferPtrEx (int LayerIndex, void ** pBufferPTR);
+int LCD_SetChromaEx (int LayerIndex, LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+int LCD_SetChromaModeEx(int LayerIndex, int ChromaMode);
+int LCD_SetDevFunc (int LayerIndex, int IdFunc, void (* pDriverFunc)(void));
+int LCD_SetLUTEntryEx (int LayerIndex, U8 Pos, LCD_COLOR Color);
+int LCD_SetPosEx (int LayerIndex, int xPos, int yPos);
+int LCD_SetSizeEx (int LayerIndex, int xSize, int ySize);
+int LCD_SetVisEx (int LayerIndex, int OnOff);
+int LCD_SetVRAMAddrEx (int LayerIndex, void * pVRAM);
+int LCD_SetVSizeEx (int LayerIndex, int xSize, int ySize);
+
+int LCD_GetPos (int * pxPos, int * pyPos);
+int LCD_Off (void);
+int LCD_On (void);
+int LCD_Refresh (void);
+int LCD_SetAlpha (int Alpha);
+int LCD_SetAlphaMode (int AlphaMode);
+int LCD_SetBufferPtr (void ** pBufferPTR);
+int LCD_SetChroma (LCD_COLOR ChromaMin, LCD_COLOR ChromaMax);
+int LCD_SetChromaMode (int ChromaMode);
+int LCD_SetLUTEntry (U8 Pos, LCD_COLOR Color);
+void LCD_SetOrg (int xOrg, int yOrg);
+int LCD_SetPos (int xPos, int yPos);
+int LCD_SetSize (int xSize, int ySize);
+int LCD_SetVis (int OnOff);
+int LCD_SetVRAMAddr (void * pVRAM);
+int LCD_SetVSize (int xSize, int ySize);
+
+/*********************************************************************
+*
+* NEXT_PIXEL API support
+*/
+typedef struct {
+ int (* pfStart) (int x0, int y0, int x1, int y1);
+ void (* pfSetPixel)(LCD_PIXELINDEX PixelIndex);
+ void (* pfNextLine)(void);
+ void (* pfEnd) (void);
+} LCD_API_NEXT_PIXEL;
+
+LCD_API_NEXT_PIXEL * LCD_GetNextPixelAPI(void);
+
+/*********************************************************************
+*
+* LCD_CLIP function table
+*/
+typedef void tLCD_HL_DrawHLine (int x0, int y0, int x1);
+typedef void tLCD_HL_DrawPixel (int x0, int y0);
+
+typedef struct {
+ tLCD_HL_DrawHLine * pfDrawHLine;
+ tLCD_HL_DrawPixel * pfDrawPixel;
+} tLCD_HL_APIList;
+
+void LCD_DrawHLine(int x0, int y0, int x1);
+void LCD_DrawPixel(int x0, int y0);
+void LCD_DrawVLine(int x, int y0, int y1);
+
+
+/*********************************************************************
+*
+* Declarations for LCD_
+*/
+void LCD_SetClipRectEx(const LCD_RECT * pRect);
+void LCD_SetClipRectMax(void);
+
+/* Get device capabilities (0 if not supported) */
+I32 LCD_GetDevCap (int Index);
+I32 LCD_GetDevCapEx(int LayerIndex, int Index);
+
+/* Initialize LCD using config-parameters */
+int LCD_Init(void);
+int LCD_InitColors(void);
+int LCD_InitEx(GUI_DEVICE * pDevice, int ClearScreen);
+int LCD_ExitEx(int LayerIndex);
+
+void LCD_SetBkColor (LCD_COLOR Color); /* Set background color */
+void LCD_SetColor (LCD_COLOR Color); /* Set foreground color */
+void LCD_SetPixelIndex(int x, int y, int ColorIndex);
+
+/* Palette routines (Not available on all drivers) */
+void LCD_InitLUT(void);
+void LCD_SetLUTEx(int LayerIndex, const LCD_PHYSPALETTE * pPalette);
+void LCD_SetLUT (const LCD_PHYSPALETTE * pPalette);
+
+LCD_DRAWMODE LCD_SetDrawMode (LCD_DRAWMODE dm);
+void LCD_SetColorIndex(unsigned PixelIndex);
+void LCD_SetBkColorIndex(unsigned PixelIndex);
+void LCD_FillRect(int x0, int y0, int x1, int y1);
+typedef void tLCD_SetPixelAA(int x, int y, U8 Intens);
+
+void LCD_SetPixelAA4_Trans (int x, int y, U8 Intens);
+void LCD_SetPixelAA4_NoTrans(int x, int y, U8 Intens);
+
+void LCD_SetPixelAA8_Trans (int x, int y, U8 Intens);
+void LCD_SetPixelAA8_NoTrans(int x, int y, U8 Intens);
+
+void LCD_AA_EnableGamma(int OnOff);
+void LCD_AA_SetGamma (U8 * pGamma);
+void LCD_AA_GetGamma (U8 * pGamma);
+
+LCD_COLOR LCD_AA_MixColors16 (LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+LCD_COLOR LCD_AA_MixColors256(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens);
+LCD_COLOR LCD_MixColors256 (LCD_COLOR Color, LCD_COLOR BkColor, unsigned Intens);
+LCD_COLOR LCD_GetPixelColor(int x, int y); /* Get RGB color of pixel */
+unsigned int LCD_GetPixelIndex(int x, int y);
+int LCD_GetBkColorIndex (void);
+int LCD_GetColorIndex (void);
+#if (GUI_USE_ARGB)
+U32 LCD_AA_SetOrMask(U32 OrMask);
+#else
+U32 LCD_AA_SetAndMask(U32 AndMask);
+#endif
+
+/* Configuration */
+int LCD_SetMaxNumColors(unsigned MaxNumColors);
+int LCD_GetMaxNumColors(void);
+void LCD__SetPaletteConversionHook(void (* pfPaletteConversionHook)(const LCD_LOGPALETTE * pLogPal));
+
+/*********************************************************************
+*
+* Optional support for rotation
+*/
+#if GUI_SUPPORT_ROTATION
+
+typedef void tLCD_DrawBitmap(int x0, int y0, int xsize, int ysize,
+ int xMul, int yMul, int BitsPerPixel, int BytesPerLine,
+ const U8 * pPixel, const void * pTrans);
+typedef void tRect2TextRect (LCD_RECT * pRect);
+
+struct tLCD_APIList_struct {
+ tLCD_DrawBitmap * pfDrawBitmap;
+ tRect2TextRect * pfRect2TextRect;
+ tRect2TextRect * pfTransformRect;
+};
+
+typedef struct tLCD_APIList_struct tLCD_APIList;
+
+extern tLCD_APIList LCD_APIListCCW;
+extern tLCD_APIList LCD_APIListCW;
+extern tLCD_APIList LCD_APIList180;
+
+#define GUI_ROTATION tLCD_APIList
+#define GUI_ROTATE_CCW &LCD_APIListCCW
+#define GUI_ROTATE_CW &LCD_APIListCW
+#define GUI_ROTATE_180 &LCD_APIList180
+#define GUI_ROTATE_0 0
+
+tLCD_SetPixelAA * LCD__GetPfSetPixel(int BitsPerPixel);
+
+#endif
+
+/*********************************************************************
+*
+* Physical color access, internally used only
+*/
+void LCD__SetPhysColor(U8 Pos, LCD_COLOR Color);
+
+/*********************************************************************
+*
+* Cache control
+*/
+#define LCD_CC_UNLOCK (0) /* Default mode: Cache is transparent */
+#define LCD_CC_LOCK (1) /* Cache is locked, no write operations */
+#define LCD_CC_FLUSH (2) /* Flush cache, do not change mode */
+
+int LCD_ControlCache (int Cmd);
+int LCD_ControlCacheEx(int LayerIndex, int Cmd);
+
+/*********************************************************************
+*
+* Color conversion
+*/
+LCD_PIXELINDEX LCD_Color2Index (LCD_COLOR Color);
+LCD_COLOR LCD_Index2Color (int Index);
+LCD_COLOR LCD_Index2ColorEx (int i, unsigned LayerIndex);
+
+/*********************************************************************
+*
+* LCD_X_...
+*/
+unsigned char LCD_X_Read00(void);
+unsigned char LCD_X_Read01(void);
+void LCD_X_Write00 (unsigned char c);
+void LCD_X_Write01 (unsigned char c);
+void LCD_X_WriteM01(unsigned char * pData, int NumBytes);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* LCD_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/LCD_ConfDefaults.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,83 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : LCD_ConfDefaults.h +Purpose : Valid LCD configuration and defaults +---------------------------------------------------------------------- +*/ + +#ifndef LCD_CONFIG_DEFAULTS_H +#define LCD_CONFIG_DEFAULTS_H + +#include "LCDConf.h" /* Configuration header file */ + +/********************************************************** +* +* Configuration defaults +*/ +#ifndef LCD_MIRROR_X + #define LCD_MIRROR_X 0 +#endif +#ifndef LCD_MIRROR_Y + #define LCD_MIRROR_Y 0 +#endif +#ifndef LCD_SWAP_XY + #define LCD_SWAP_XY 0 +#endif +#ifndef LCD_FIRSTCOM0 + #define LCD_FIRSTCOM0 0 +#endif +#ifndef LCD_FIRSTSEG0 + #define LCD_FIRSTSEG0 0 +#endif +#ifndef LCD_SWAP_RB + #define LCD_SWAP_RB 0 +#endif +#ifndef LCD_DISPLAY_INDEX + #define LCD_DISPLAY_INDEX 0 +#endif +#ifndef LCD_ENDIAN_BIG + #define LCD_ENDIAN_BIG 0 +#endif +#ifndef LCD_ALLOW_NON_OPTIMIZED_MODE + #define LCD_ALLOW_NON_OPTIMIZED_MODE 1 +#endif + +#endif /* LCD_CONFIG_DEFAULTS_H */ + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/LCD_Private.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,99 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : LCD_Private.h +Purpose : To be used only by the display drivers +---------------------------------------------------------------------- +*/ + +#ifndef LCD_Private_H +#define LCD_Private_H + +#include "LCDConf.h" +#include "LCD_Protected.h" +#include "GUI.h" + +/********************************************************************* +* +* API functions +*/ +extern const struct tLCDDEV_APIList_struct * /* const */ LCD_aAPI[GUI_NUM_LAYERS]; + +/********************************************************************* +* +* Support for Segment/COMLUTs +*/ +#define LCD_TYPE_SEGTRANS U16 +#define LCD_TYPE_COMTRANS U16 + +#ifdef LCD_LUT_COM + extern LCD_TYPE_COMTRANS LCD__aLine2Com0[LCD_YSIZE]; +#endif + +#ifdef LCD_LUT_SEG + extern LCD_TYPE_COMTRANS LCD__aCol2Seg0[LCD_XSIZE]; +#endif + +/********************************************************************* +* +* Support for multiple display controllers +*/ +#define DECLARE_PROTOTYPES(DISTX) \ + void LCD_##DISTX##_SetPixelIndex(int x, int y, int PixelIndex); \ + unsigned LCD_##DISTX##_GetPixelIndex(int x, int y); \ + void LCD_##DISTX##_XorPixel (int x, int y); \ + void LCD_##DISTX##_DrawHLine (int x0, int y, int x1); \ + void LCD_##DISTX##_DrawVLine (int x, int y0, int y1); \ + void LCD_##DISTX##_FillRect (int x0, int y0, int x1, int y1); \ + void LCD_##DISTX##_DrawBitmap (int x0, int y0, int xsize, int ysize, int BitsPerPixel, int BytesPerLine, const U8 * pData, int Diff, const LCD_PIXELINDEX * pTrans); \ + void LCD_##DISTX##_SetOrg (int x, int y); \ + void LCD_##DISTX##_On (void); \ + void LCD_##DISTX##_Off (void); \ + int LCD_##DISTX##_Init (void); \ + void LCD_##DISTX##_SetLUTEntry (U8 Pos, LCD_COLOR Color); \ + void * LCD_##DISTX##_GetDevFunc (int Index); \ + void LCD_##DISTX##_ReInit (void) + +DECLARE_PROTOTYPES(DIST0); +DECLARE_PROTOTYPES(DIST1); +DECLARE_PROTOTYPES(DIST2); +DECLARE_PROTOTYPES(DIST3); + +#endif /* Avoid multiple inclusion */ + +/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LCD_Protected.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,132 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LCD_Protected.h
+Purpose : LCD level - To be used only internally by the GUI
+----------------------------------------------------------------------
+*/
+
+#ifndef LCD_PROTECTED_H
+#define LCD_PROTECTED_H
+
+#include "LCD.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Data types
+*/
+typedef struct {
+ LCD_COLOR * paColor;
+ I16 NumEntries;
+} LCD_LUT_INFO;
+
+typedef struct {
+ tLCDDEV_DrawPixel * pfDrawPixel;
+ tLCDDEV_DrawHLine * pfDrawHLine;
+ tLCDDEV_DrawVLine * pfDrawVLine;
+ tLCDDEV_FillRect * pfFillRect;
+ tLCDDEV_DrawBitmap * pfDrawBitmap;
+} LCD_API_LIST;
+
+/*********************************************************************
+*
+* External data
+*/
+extern GUI_CONST_STORAGE U8 LCD_aMirror[256];
+extern LCD_PIXELINDEX * LCD__aConvTable;
+
+/*********************************************************************
+*
+* Misc functions
+*/
+void LCD_UpdateColorIndices (void);
+int LCD_PassingBitmapsAllowed(void);
+void LCD_EnableCursor (int OnOff);
+void LCD_SelectLCD (void);
+
+void LCD_DrawBitmap(int x0, int y0,
+ int xsize, int ysize,
+ int xMul, int yMul,
+ int BitsPerPixel,
+ int BytesPerLine,
+ const U8 * pPixel,
+ const LCD_PIXELINDEX * pTrans);
+
+void LCD__DrawBitmap_1bpp(int x0, int y0,
+ int xsize, int ysize,
+ int xMul, int yMul,
+ int BitsPerPixel,
+ int BytesPerLine,
+ const U8 * pPixel,
+ const LCD_PIXELINDEX * pTrans,
+ int OffData);
+
+/*********************************************************************
+*
+* Internal used color conversion routines
+*/
+tLCDDEV_Index2Color LCD_Index2Color_444_12;
+tLCDDEV_Index2Color LCD_Index2Color_M444_12;
+tLCDDEV_Index2Color LCD_Index2Color_444_12_1;
+tLCDDEV_Index2Color LCD_Index2Color_M444_12_1;
+tLCDDEV_Index2Color LCD_Index2Color_444_16;
+tLCDDEV_Index2Color LCD_Index2Color_M444_16;
+tLCDDEV_Index2Color LCD_Index2Color_555;
+tLCDDEV_Index2Color LCD_Index2Color_565;
+tLCDDEV_Index2Color LCD_Index2Color_8666;
+tLCDDEV_Index2Color LCD_Index2Color_888;
+tLCDDEV_Index2Color LCD_Index2Color_8888;
+tLCDDEV_Index2Color LCD_Index2Color_M8888I;
+tLCDDEV_Index2Color LCD_Index2Color_M555;
+tLCDDEV_Index2Color LCD_Index2Color_M565;
+tLCDDEV_Index2Color LCD_Index2Color_M888;
+
+tLCDDEV_Color2Index LCD_Color2Index_8666;
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* LCD_PROTECTED_H */
+
+/*************************** End of file ****************************/
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Include/LCD_SIM.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,209 @@ +/********************************************************************* +* SEGGER Software GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2018 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V5.48 - Graphical user interface for embedded applications ** +All Intellectual Property rights in the Software belongs to SEGGER. +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with the following terms: + +The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2019-03-27 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : LCD_SIM.h +Purpose : Declares LCD interface functions +---------------------------------------------------------------------- +*/ + +#ifndef LCDSIM_H +#define LCDSIM_H + +#include "LCD.h" + +/************************************************************ +* +* Defines +* +************************************************************* +*/ +#define LCDSIM_MAX_DISPLAYS GUI_NUM_LAYERS + +#define GUI_TRANSMODE_PIXELALPHA 0 +#define GUI_TRANSMODE_CHROMA 1 +#define GUI_TRANSMODE_ZERO 2 + +/************************************************************ +* +* LCDSIM_ General declarations +* +************************************************************* +*/ +void LCDSIM_PreInit(void); +char* LCDSIM_Init(void); +void LCDSIM_Exit(void); +int LCDSIM_GetMouseState(LCD_tMouseState *pState); +void LCDSIM_SetMouseState(int x, int y, int KeyStat, int LayerIndex); +void LCDSIM_CheckMouseState(int LayerIndex); +int LCDSIM_SaveSBMP (const char * sFileName); +int LCDSIM_SaveSBMPEx(const char * sFileName, int x0, int y0, int xSize, int ySize); +void LCDSIM_SetRGBOrder(unsigned RGBOrder); + +/************************************************************ +* +* LCDSIM_ Functions for each display +* +************************************************************* +*/ +void LCDSIM_FillRect(int x0, int y0, int x1, int y1, int Index, int LayerIndex); +int LCDSIM_GetModifyCnt(int LayerIndex); +int LCDSIM_GetModifyCntInfo(int LayerIndex); +int LCDSIM_GetPixelColor(int x, int y, int LayerIndex); +int LCDSIM_GetPixelIndex(int x, int y, int LayerIndex); +int LCDSIM_Index2Color(int Index, int LayerIndex); +int LCDSIM_RLUT_GetPixelIndex(int x, int y, int LayerIndex); +void LCDSIM_RLUT_SetPixelIndex(int x, int y, int Index, int LayerIndex); +void LCDSIM_SetLUTEntry(U8 Pos, LCD_COLOR color, int LayerIndex); +void LCDSIM_SetPixelIndex(int x, int y, int Index, int LayerIndex); +void LCDSIM_SetPixelColor(int x, int y, LCD_COLOR PixelColor, int LayerIndex); +void LCDSIM_SetSubPixel(int x, int y, U8 Value, int LayerIndex); +void LCDSIM_SetPixelPhys(int x, int y, int Index, int LayerIndex); +int LCDSIM_GetPixelPhys(int xPhys, int yPhys, int LayerIndex); +void LCDSIM_FillRectPhys(int x0Phys, int y0Phys, int x1Phys, int y1Phys, int Index, int LayerIndex); +void LCDSIM_SetOrg(int x, int y, int LayerIndex); +void LCDSIM_SetAlpha(int Alpha, int LayerIndex); +int LCDSIM_GetAlpha(int LayerIndex); +void LCDSIM_SetLayerPos(int xPos, int yPos, int LayerIndex); +void LCDSIM_SetLayerVis(int OnOff, int LayerIndex); +void LCDSIM_SetSize(int LayerIndex, int xSize, int ySize); +void LCDSIM_SetTransMode(int LayerIndex, int TransMode); +void LCDSIM_SetChroma(int LayerIndex, LCD_COLOR ChromaMin, LCD_COLOR ChromaMax); +void LCDSIM_SetCompositeColor(U32 Color); +void LCDSIM_SetCompositeSize(int xSize, int ySize); +void LCDSIM_CopyBuffer(int LayerIndex, int IndexSrc, int IndexDst); +void LCDSIM_Invalidate(int LayerIndex); + +/******************************************************************** +* +* Publics for LCD +* +********************************************************************* +*/ +void SIM_GUI_SetCompositeSize(int xSize, int ySize); +void SIM_GUI_SetCompositeColor(U32 Color); +U32 SIM_GUI_GetCompositeColor(void); +void SIM_GUI_SetLCDPos(int xPos, int yPos); +int SIM_GUI_SaveBMP(const char * sFileName); +int SIM_GUI_SaveBMPEx(const char * sFileName, int x0, int y0, int xSize, int ySize); +int SIM_GUI_SaveCompositeBMP(const char * sFileName); +int SIM_GUI_SetTransColor(int Color); +int SIM_GUI_SetLCDColorBlack (unsigned int Index, int Color); +int SIM_GUI_SetLCDColorWhite (unsigned int Index, int Color); +void SIM_GUI_SetMag(int MagX, int MagY); +int SIM_GUI_GetMagX(void); +int SIM_GUI_GetMagY(void); +int SIM_GUI_GetForwardRButton(void); +void SIM_GUI_SetForwardRButton(int OnOff); +void SIM_GUI_SetTransMode(int LayerIndex, int TransMode); +void SIM_GUI_SetChroma(int LayerIndex, unsigned long ChromaMin, unsigned long ChromaMax); +void SIM_GUI_UseCustomBitmaps(void); +void SIM_GUI_SetAccellerator(int Accellerator); +void SIM_GUI_SetMainScreenOffset(int x, int y); +void SIM_GUI_SetCompositeTouch(int LayerIndex); +int SIM_GUI_GetCompositeTouch(void); + +/******************************************************************** +* +* Routine(s) in user application +* +********************************************************************* +*/ +void SIM_X_Config(void); /* Allow init before application starts ... Use it to set LCD offset etc */ + +/******************************************************************** +* +* Publics used by GUI_X module +* +********************************************************************* +*/ +void SIM_GUI_Delay (int ms); +void SIM_GUI_ExecIdle(void); +int SIM_GUI_GetTime(void); +int SIM_GUI_GetKey(void); +int SIM_GUI_WaitKey(void); +void SIM_GUI_StoreKey(int); + +/******************************************************************** +* +* Publics for logging, warning, errorout +* +********************************************************************* +*/ +void SIM_GUI_Log(const char *s); +void SIM_GUI_Log1(const char *s, int p0); +void SIM_GUI_Log2(const char *s, int p0, int p1); +void SIM_GUI_Log3(const char *s, int p0, int p1, int p2); +void SIM_GUI_Log4(const char *s, int p0, int p1, int p2,int p3); +void SIM_GUI_Warn(const char *s); +void SIM_GUI_Warn1(const char *s, int p0); +void SIM_GUI_Warn2(const char *s, int p0, int p1); +void SIM_GUI_Warn3(const char *s, int p0, int p1, int p2); +void SIM_GUI_Warn4(const char *s, int p0, int p1, int p2, int p3); +void SIM_GUI_ErrorOut(const char *s); +void SIM_GUI_ErrorOut1(const char *s, int p0); +void SIM_GUI_ErrorOut2(const char *s, int p0, int p1); +void SIM_GUI_ErrorOut3(const char *s, int p0, int p1, int p2); +void SIM_GUI_ErrorOut4(const char *s, int p0, int p1, int p2, int p3); +void SIM_GUI_EnableMessageBoxOnError(int Status); + +/******************************************************************** +* +* Commandline support +* +********************************************************************* +*/ +const char *SIM_GUI_GetCmdLine(void); + +/******************************************************************** +* +* Multitasking support +* +********************************************************************* +*/ +void SIM_GUI_CreateTask(char * pName, void * pFunc); +void SIM_GUI_Start(void); +unsigned long SIM_GUI_GetTaskID(void); +void SIM_GUI_Lock(void); +void SIM_GUI_Unlock(void); +void SIM_GUI_InitOS(void); + +#endif /* LCD_H */ + + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTBOX.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,223 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LISTBOX.h
+Purpose : LISTBOX widget include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTBOX_H
+#define LISTBOX_H
+
+#include "WM.h"
+#include "WIDGET.h" /* Req. for WIDGET_DRAW_ITEM_FUNC */
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* defines
+*
+**********************************************************************
+*/
+
+#define LISTBOX_ALL_ITEMS -1
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define LISTBOX_CI_UNSEL 0
+#define LISTBOX_CI_SEL 1
+#define LISTBOX_CI_SELFOCUS 2
+#define LISTBOX_CI_DISABLED 3
+
+/************************************************************
+*
+* States
+*/
+typedef WM_HMEM LISTBOX_Handle;
+
+/*********************************************************************
+*
+* Notification codes
+*
+* The following is the list of notification codes specific to this widget,
+* Send with the WM_NOTIFY_PARENT message
+*/
+#define LISTBOX_NOTIFICATION_LOST_FOCUS (WM_NOTIFICATION_WIDGET + 0)
+
+/************************************************************
+*
+* Create / Status flags
+*/
+#define LISTBOX_CF_AUTOSCROLLBAR_H (1 << 0)
+#define LISTBOX_CF_AUTOSCROLLBAR_V (1 << 1)
+#define LISTBOX_CF_MULTISEL (1 << 2)
+#define LISTBOX_CF_WRAP (1 << 3)
+#define LISTBOX_CF_FIXEDSCROLLMODE (1 << 4)
+#define LISTBOX_SF_AUTOSCROLLBAR_H LISTBOX_CF_AUTOSCROLLBAR_H
+#define LISTBOX_SF_AUTOSCROLLBAR_V LISTBOX_CF_AUTOSCROLLBAR_V
+#define LISTBOX_SF_MULTISEL LISTBOX_CF_MULTISEL
+#define LISTBOX_SF_WRAP LISTBOX_CF_WRAP
+#define LISTBOX_SF_FIXEDSCROLLMODE LISTBOX_CF_FIXEDSCROLLMODE
+
+/************************************************************
+*
+* Fixed scroll mode flags
+*/
+#define LISTBOX_FM_OFF 0 // Turn fixed mode off
+#define LISTBOX_FM_ON 1 // Turn fixed mode on
+#define LISTBOX_FM_CENTER 2 // Set fixed mode to center
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+
+LISTBOX_Handle LISTBOX_Create (const GUI_ConstString * ppText, int x0, int y0, int xSize, int ySize, int Flags);
+LISTBOX_Handle LISTBOX_CreateAsChild (const GUI_ConstString * ppText, WM_HWIN hWinParent, int x0, int y0, int xSize, int ySize, int Flags);
+LISTBOX_Handle LISTBOX_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText);
+LISTBOX_Handle LISTBOX_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText, int NumExtraBytes);
+LISTBOX_Handle LISTBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void LISTBOX_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+
+int LISTBOX_AddKey (LISTBOX_Handle hObj, int Key);
+void LISTBOX_AddString (LISTBOX_Handle hObj, const char * s);
+void LISTBOX_AddStringH (LISTBOX_Handle hObj, WM_HMEM hString); /* Not to be documented!!! */
+void LISTBOX_DecSel (LISTBOX_Handle hObj);
+void LISTBOX_DeleteItem (LISTBOX_Handle hObj, unsigned Index);
+void LISTBOX_EnableWrapMode (LISTBOX_Handle hObj, int OnOff);
+GUI_COLOR LISTBOX_GetBkColor (LISTBOX_Handle hObj, unsigned Index);
+const GUI_FONT * LISTBOX_GetFont (LISTBOX_Handle hObj);
+unsigned LISTBOX_GetItemSpacing (LISTBOX_Handle hObj);
+unsigned LISTBOX_GetNumItems (LISTBOX_Handle hObj);
+int LISTBOX_GetSel (LISTBOX_Handle hObj);
+GUI_COLOR LISTBOX_GetTextColor (LISTBOX_Handle hObj, unsigned Index);
+int LISTBOX_GetItemDisabled (LISTBOX_Handle hObj, unsigned Index);
+int LISTBOX_GetItemSel (LISTBOX_Handle hObj, unsigned Index);
+void LISTBOX_GetItemText (LISTBOX_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+int LISTBOX_GetMulti (LISTBOX_Handle hObj);
+WM_HWIN LISTBOX_GetOwner (LISTBOX_Handle hObj);
+int LISTBOX_GetScrollStepH (LISTBOX_Handle hObj);
+int LISTBOX_GetTextAlign (LISTBOX_Handle hObj);
+int LISTBOX_GetUserData (LISTBOX_Handle hObj, void * pDest, int NumBytes);
+void LISTBOX_IncSel (LISTBOX_Handle hObj);
+void LISTBOX_InsertString (LISTBOX_Handle hObj, const char * s, unsigned Index);
+void LISTBOX_InvalidateItem (LISTBOX_Handle hObj, int Index);
+int LISTBOX_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void LISTBOX_SetAutoScrollH (LISTBOX_Handle hObj, int OnOff);
+void LISTBOX_SetAutoScrollV (LISTBOX_Handle hObj, int OnOff);
+void LISTBOX_SetBkColor (LISTBOX_Handle hObj, unsigned Index, GUI_COLOR color);
+void LISTBOX_SetFixedScrollPos(LISTBOX_Handle hObj, U16 FixedScrollPos, U8 Mode);
+void LISTBOX_SetFont (LISTBOX_Handle hObj, const GUI_FONT * pFont);
+void LISTBOX_SetItemDisabled (LISTBOX_Handle hObj, unsigned Index, int OnOff);
+void LISTBOX_SetItemSel (LISTBOX_Handle hObj, unsigned Index, int OnOff);
+void LISTBOX_SetItemSpacing (LISTBOX_Handle hObj, unsigned Value);
+void LISTBOX_SetMulti (LISTBOX_Handle hObj, int Mode);
+void LISTBOX_SetOwner (LISTBOX_Handle hObj, WM_HWIN hOwner);
+void LISTBOX_SetOwnerDraw (LISTBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void LISTBOX_SetScrollStepH (LISTBOX_Handle hObj, int Value);
+void LISTBOX_SetSel (LISTBOX_Handle hObj, int Sel);
+void LISTBOX_SetScrollbarColor(LISTBOX_Handle hObj, unsigned Index, GUI_COLOR Color);
+void LISTBOX_SetScrollbarWidth(LISTBOX_Handle hObj, unsigned Width);
+void LISTBOX_SetString (LISTBOX_Handle hObj, const char * s, unsigned Index);
+void LISTBOX_SetText (LISTBOX_Handle hObj, const GUI_ConstString * ppText);
+void LISTBOX_SetTextAlign (LISTBOX_Handle hObj, int Align);
+GUI_COLOR LISTBOX_SetTextColor (LISTBOX_Handle hObj, unsigned Index, GUI_COLOR Color);
+int LISTBOX_SetUserData (LISTBOX_Handle hObj, const void * pSrc, int NumBytes);
+int LISTBOX_UpdateScrollers (LISTBOX_Handle hObj);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+
+const GUI_FONT * LISTBOX_GetDefaultFont(void);
+int LISTBOX_GetDefaultScrollStepH (void);
+GUI_COLOR LISTBOX_GetDefaultBkColor (unsigned Index);
+int LISTBOX_GetDefaultTextAlign (void);
+GUI_COLOR LISTBOX_GetDefaultTextColor (unsigned Index);
+void LISTBOX_SetDefaultFont (const GUI_FONT * pFont);
+void LISTBOX_SetDefaultScrollStepH (int Value);
+void LISTBOX_SetDefaultBkColor (unsigned Index, GUI_COLOR Color);
+void LISTBOX_SetDefaultTextAlign (int Align);
+void LISTBOX_SetDefaultTextColor (unsigned Index, GUI_COLOR Color);
+
+/*********************************************************************
+*
+* Compatibility to older versions
+*
+**********************************************************************
+*/
+
+#define LISTBOX_SetBackColor(hObj, Index, Color) LISTBOX_SetBkColor(hObj, Index, Color)
+#define LISTBOX_DeleteString LISTBOX_DeleteItem
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // LISTBOX_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTBOX_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,152 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LISTBOX_Private.h
+Purpose : Private LISTBOX include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTBOX_PRIVATE_H
+#define LISTBOX_PRIVATE_H
+
+#include "LISTBOX.h"
+#include "WM.h"
+#include "GUI_ARRAY.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define LISTBOX_ITEM_SELECTED (1 << 0)
+#define LISTBOX_ITEM_DISABLED (1 << 1)
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+ U16 xSize, ySize;
+ I32 ItemPosY;
+ U8 Status;
+ char acText[1];
+} LISTBOX_ITEM;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ U16 ScrollStepH;
+ GUI_COLOR aBackColor[4];
+ GUI_COLOR aTextColor[4];
+ GUI_COLOR aScrollbarColor[3];
+ I16 Align;
+} LISTBOX_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ GUI_ARRAY ItemArray;
+ WIDGET_DRAW_ITEM_FUNC* pfDrawItem;
+ WM_SCROLL_STATE ScrollStateV;
+ WM_SCROLL_STATE ScrollStateH;
+ LISTBOX_PROPS Props;
+ WM_HWIN hOwner;
+ I16 Sel; /* current selection */
+ U8 Flags;
+ U8 ScrollbarWidth;
+ U16 ItemSpacing;
+ U16 ContentSizeX;
+ U16 FixedScrollPos;
+} LISTBOX_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define LISTBOX_INIT_ID(p) p->Widget.DebugId = LISTBOX_ID
+#else
+ #define LISTBOX_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ LISTBOX_Obj * LISTBOX_LockH(LISTBOX_Handle h);
+ #define LISTBOX_LOCK_H(h) LISTBOX_LockH(h)
+#else
+ #define LISTBOX_LOCK_H(h) (LISTBOX_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private (module internal) data
+*
+**********************************************************************
+*/
+
+extern LISTBOX_PROPS LISTBOX_DefaultProps;
+
+/*********************************************************************
+*
+* Private (module internal) functions
+*
+**********************************************************************
+*/
+unsigned LISTBOX__GetNumItems (const LISTBOX_Obj * pObj);
+const char * LISTBOX__GetpStringLocked (LISTBOX_Handle hObj, int Index, LISTBOX_ITEM ** ppItem);
+void LISTBOX__InvalidateInsideArea (LISTBOX_Handle hObj);
+void LISTBOX__InvalidateItem (LISTBOX_Handle hObj, int Sel);
+void LISTBOX__InvalidateItemAndBelow(LISTBOX_Handle hObj, int Sel);
+void LISTBOX__InvalidateItemSize (const LISTBOX_Obj * pObj, unsigned Index);
+void LISTBOX__SetScrollbarColor (LISTBOX_Handle hObj, const LISTBOX_Obj * pObj);
+void LISTBOX__SetScrollbarWidth (LISTBOX_Handle hObj, const LISTBOX_Obj * pObj);
+void LISTBOX__AddSize (LISTBOX_Obj * pObj, int Index);
+
+#endif /* GUI_WINSUPPORT */
+
+#else /* Avoid problems with empty object modules */
+ void LISTBOX_C(void) {}
+#endif
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTVIEW.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,202 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LISTVIEW.h
+Purpose : LISTVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTVIEW_H
+#define LISTVIEW_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Req. for Create indirect data structure
+#include "ICONVIEW.h"
+#include "HEADER.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*/
+#define LISTVIEW_ALL_ITEMS -1
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define LISTVIEW_CI_UNSEL 0
+#define LISTVIEW_CI_SEL 1
+#define LISTVIEW_CI_SELFOCUS 2
+#define LISTVIEW_CI_DISABLED 3
+
+/************************************************************
+*
+* Create / Status flags
+*/
+#define LISTVIEW_CF_AUTOSCROLLBAR_H (1 << 0)
+#define LISTVIEW_CF_AUTOSCROLLBAR_V (1 << 1)
+#define LISTVIEW_CF_CELL_SELECT (1 << 2) // Create Flag used to enable cell selection
+#define LISTVIEW_SF_AUTOSCROLLBAR_H LISTVIEW_CF_AUTOSCROLLBAR_H
+#define LISTVIEW_SF_AUTOSCROLLBAR_V LISTVIEW_CF_AUTOSCROLLBAR_V
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM LISTVIEW_Handle;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+LISTVIEW_Handle LISTVIEW_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
+LISTVIEW_Handle LISTVIEW_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+LISTVIEW_Handle LISTVIEW_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+LISTVIEW_Handle LISTVIEW_CreateAttached(WM_HWIN hParent, int Id, int SpecialFlags);
+LISTVIEW_Handle LISTVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void LISTVIEW_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+int LISTVIEW_AddColumn (LISTVIEW_Handle hObj, int Width, const char * s, int Align);
+int LISTVIEW_AddRow (LISTVIEW_Handle hObj, const GUI_ConstString * ppText);
+int LISTVIEW_CompareText (const void * p0, const void * p1);
+int LISTVIEW_CompareDec (const void * p0, const void * p1);
+void LISTVIEW_DecSel (LISTVIEW_Handle hObj);
+void LISTVIEW_DeleteAllRows (LISTVIEW_Handle hObj);
+void LISTVIEW_DeleteColumn (LISTVIEW_Handle hObj, unsigned Index);
+void LISTVIEW_DeleteRow (LISTVIEW_Handle hObj, unsigned Index);
+void LISTVIEW_DeleteRowSorted (LISTVIEW_Handle hObj, int Row);
+void LISTVIEW_DisableRow (LISTVIEW_Handle hObj, unsigned Row);
+void LISTVIEW_DisableSort (LISTVIEW_Handle hObj);
+void LISTVIEW_EnableCellSelect (LISTVIEW_Handle hObj, unsigned OnOff); // Enables/disables cell selection
+void LISTVIEW_EnableRow (LISTVIEW_Handle hObj, unsigned Row);
+void LISTVIEW_EnableSort (LISTVIEW_Handle hObj);
+GUI_COLOR LISTVIEW_GetBkColor (LISTVIEW_Handle hObj, unsigned Index);
+const GUI_FONT * LISTVIEW_GetFont (LISTVIEW_Handle hObj);
+HEADER_Handle LISTVIEW_GetHeader (LISTVIEW_Handle hObj);
+void LISTVIEW_GetItemRect (LISTVIEW_Handle hObj, U32 Col, U32 Row, GUI_RECT * pRect);
+void LISTVIEW_GetItemText (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, char * pBuffer, unsigned MaxSize);
+unsigned LISTVIEW_GetItemTextLen (LISTVIEW_Handle hObj, unsigned Column, unsigned Row);
+void LISTVIEW_GetItemTextSorted (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, char * pBuffer, unsigned MaxSize);
+unsigned LISTVIEW_GetLBorder (LISTVIEW_Handle hObj);
+unsigned LISTVIEW_GetNumColumns (LISTVIEW_Handle hObj);
+unsigned LISTVIEW_GetNumRows (LISTVIEW_Handle hObj);
+unsigned LISTVIEW_GetRBorder (LISTVIEW_Handle hObj);
+int LISTVIEW_GetSel (LISTVIEW_Handle hObj);
+int LISTVIEW_GetSelCol (LISTVIEW_Handle hObj);
+int LISTVIEW_GetSelUnsorted (LISTVIEW_Handle hObj);
+int LISTVIEW_GetTextAlign (LISTVIEW_Handle hObj, unsigned ColIndex);
+GUI_COLOR LISTVIEW_GetTextColor (LISTVIEW_Handle hObj, unsigned Index);
+int LISTVIEW_GetUserData (LISTVIEW_Handle hObj, void * pDest, int NumBytes);
+U32 LISTVIEW_GetUserDataRow (LISTVIEW_Handle hObj, unsigned Row);
+GUI_WRAPMODE LISTVIEW_GetWrapMode (LISTVIEW_Handle hObj);
+void LISTVIEW_IncSel (LISTVIEW_Handle hObj);
+int LISTVIEW_InsertRow (LISTVIEW_Handle hObj, unsigned Index, const GUI_ConstString * ppText);
+int LISTVIEW_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+unsigned LISTVIEW_RowIsDisabled (LISTVIEW_Handle hObj, unsigned Row);
+void LISTVIEW_SetAutoScrollH (LISTVIEW_Handle hObj, int OnOff);
+void LISTVIEW_SetAutoScrollV (LISTVIEW_Handle hObj, int OnOff);
+void LISTVIEW_SetItemBitmap (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, int xOff, int yOff, const GUI_BITMAP * pBitmap);
+void LISTVIEW_SetBkColor (LISTVIEW_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void LISTVIEW_SetColumnWidth (LISTVIEW_Handle hObj, unsigned int Index, int Width);
+void LISTVIEW_SetCompareFunc (LISTVIEW_Handle hObj, unsigned Column, int (* fpCompare)(const void * p0, const void * p1));
+unsigned LISTVIEW_SetFixed (LISTVIEW_Handle hObj, unsigned Fixed);
+void LISTVIEW_SetFont (LISTVIEW_Handle hObj, const GUI_FONT * pFont);
+int LISTVIEW_SetGridVis (LISTVIEW_Handle hObj, int Show);
+void LISTVIEW_SetHeaderHeight (LISTVIEW_Handle hObj, unsigned HeaderHeight);
+void LISTVIEW_SetItemBkColor (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index, GUI_COLOR Color);
+void LISTVIEW_SetItemText (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, const char * s);
+void LISTVIEW_SetItemTextColor (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index, GUI_COLOR Color);
+void LISTVIEW_SetItemTextSorted (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, const char * pText);
+void LISTVIEW_SetLBorder (LISTVIEW_Handle hObj, unsigned BorderSize);
+void LISTVIEW_SetOwnerDraw (LISTVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void LISTVIEW_SetRBorder (LISTVIEW_Handle hObj, unsigned BorderSize);
+unsigned LISTVIEW_SetRowHeight (LISTVIEW_Handle hObj, unsigned RowHeight);
+void LISTVIEW_SetSel (LISTVIEW_Handle hObj, int Sel);
+void LISTVIEW_SetSelCol (LISTVIEW_Handle hObj, int NewCol);
+void LISTVIEW_SetSelUnsorted (LISTVIEW_Handle hObj, int Sel);
+unsigned LISTVIEW_SetSort (LISTVIEW_Handle hObj, unsigned Column, unsigned Reverse);
+void LISTVIEW_SetTextAlign (LISTVIEW_Handle hObj, unsigned int Index, int Align);
+void LISTVIEW_SetTextColor (LISTVIEW_Handle hObj, unsigned int Index, GUI_COLOR Color);
+int LISTVIEW_SetUserData (LISTVIEW_Handle hObj, const void * pSrc, int NumBytes);
+void LISTVIEW_SetUserDataRow (LISTVIEW_Handle hObj, unsigned Row, U32 UserData);
+void LISTVIEW_SetWrapMode (LISTVIEW_Handle hObj, GUI_WRAPMODE WrapMode);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+
+GUI_COLOR LISTVIEW_SetDefaultBkColor (unsigned Index, GUI_COLOR Color);
+const GUI_FONT * LISTVIEW_SetDefaultFont (const GUI_FONT * pFont);
+GUI_COLOR LISTVIEW_SetDefaultGridColor(GUI_COLOR Color);
+GUI_COLOR LISTVIEW_SetDefaultTextColor(unsigned Index, GUI_COLOR Color);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // LISTVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTVIEW_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,193 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LISTVIEW_Private.h
+Purpose : Private LISTVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTVIEW_PRIVATE_H
+#define LISTVIEW_PRIVATE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#include <stddef.h>
+
+#include "LISTVIEW.h"
+#include "GUI_ARRAY.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define SORT_TYPE U16
+
+#define LISTVIEW_CELL_INFO_COLORS (1 << 0)
+#define LISTVIEW_CELL_INFO_BITMAP (1 << 1)
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+ GUI_COLOR aBkColor[4];
+ GUI_COLOR aTextColor[4];
+ GUI_COLOR GridColor;
+ const GUI_FONT * pFont;
+ U16 ScrollStepH;
+ GUI_WRAPMODE WrapMode;
+ int DefaultAlign;
+} LISTVIEW_PROPS;
+
+typedef struct {
+ void (* pfDraw)(LISTVIEW_Handle hObj, unsigned Column, unsigned Row, GUI_RECT * pRect);
+ void * pData;
+ GUI_COLOR aBkColor[4];
+ GUI_COLOR aTextColor[4];
+ I16 xOff, yOff;
+ U8 Flags;
+} LISTVIEW_CELL_INFO;
+
+typedef struct {
+ WM_HMEM hCellInfo; // Optional cell info. If 0, there is no cell info. (Defaults used)
+ char acText[1];
+} LISTVIEW_CELL;
+
+typedef struct {
+ GUI_ARRAY hCellArray;
+ char Disabled;
+ U32 UserData;
+} LISTVIEW_ROW;
+
+typedef struct {
+ U8 Align;
+ int (* fpCompare) (const void * p0, const void * p1); // User function to be called to compare the contents of 2 cells
+} LISTVIEW_COLUMN;
+
+typedef struct LISTVIEW_Obj LISTVIEW_Obj;
+
+typedef struct {
+ WM_HMEM hSortArray;
+ SORT_TYPE SortArrayNumItems;
+ int (* fpSort)(LISTVIEW_Handle hObj); // Function to be called to get a sorted array
+ void (* fpFree)(WM_HMEM hObj); // Function to be called to free the sort object
+ U8 Reverse;
+} LISTVIEW_SORT;
+
+struct LISTVIEW_Obj {
+ WIDGET Widget;
+ HEADER_Handle hHeader;
+ WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+ GUI_ARRAY hRowArray; // Each entry is a handle of LISTVIEW_ROW structure.
+ GUI_ARRAY hColumnArray; // Each entry is a handle of LISTVIEW_COLUMN structure.
+ LISTVIEW_PROPS Props;
+ int Sel;
+ int SelCol;
+ int ShowGrid;
+ int SortIndex; // Column for sorting
+ unsigned RowDistY;
+ unsigned LBorder;
+ unsigned RBorder;
+ unsigned Fixed;
+ WM_SCROLL_STATE ScrollStateV;
+ WM_SCROLL_STATE ScrollStateH;
+ WM_HMEM hSort;
+ U8 IsSorted;
+ U8 IsPresorted;
+ U8 ReverseSort; // Set to 1 if reverse sorting is required
+ U8 Flags;
+};
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define LISTVIEW_INIT_ID(p) (p->Widget.DebugId = LISTVIEW_ID)
+#else
+ #define LISTVIEW_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ LISTVIEW_Obj * LISTVIEW_LockH(LISTVIEW_Handle h);
+ #define LISTVIEW_LOCK_H(h) LISTVIEW_LockH(h)
+#else
+ #define LISTVIEW_LOCK_H(h) (LISTVIEW_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private (module internal) data
+*
+**********************************************************************
+*/
+extern LISTVIEW_PROPS LISTVIEW_DefaultProps;
+
+/*********************************************************************
+*
+* Private (module internal) functions
+*
+**********************************************************************
+*/
+LISTVIEW_CELL_INFO * LISTVIEW__CreateCellInfoLocked (LISTVIEW_Handle hObj, unsigned Column, unsigned Row);
+unsigned LISTVIEW__GetNumColumns (LISTVIEW_Obj * pObj);
+unsigned LISTVIEW__GetNumRows (LISTVIEW_Obj * pObj);
+LISTVIEW_CELL_INFO * LISTVIEW__GetpCellInfo (LISTVIEW_Handle hObj, unsigned Column, unsigned Row);
+LISTVIEW_ROW * LISTVIEW__GetpRow (LISTVIEW_Handle hObj, int Row);
+unsigned LISTVIEW__GetRowDistY (LISTVIEW_Obj * pObj);
+unsigned LISTVIEW__GetRowSorted (LISTVIEW_Handle hObj, int Row);
+void LISTVIEW__InvalidateInsideArea (LISTVIEW_Handle hObj);
+void LISTVIEW__InvalidateRow (LISTVIEW_Handle hObj, int Sel);
+void LISTVIEW__InvalidateRowAndBelow(LISTVIEW_Handle hObj, int Sel);
+void LISTVIEW__SetSel (LISTVIEW_Handle hObj, int NewSel);
+void LISTVIEW__SetSelCol (LISTVIEW_Handle hObj, int NewSelCol);
+int LISTVIEW__UpdateScrollParas (LISTVIEW_Handle hObj);
+
+#endif // GUI_WINSUPPORT
+#endif // LISTVIEW_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTWHEEL.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,154 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LISTWHEEL.h
+Purpose : LISTWHEEL widget include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTWHEEL_H
+#define LISTWHEEL_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define LISTWHEEL_CI_UNSEL 0
+#define LISTWHEEL_CI_SEL 1
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM LISTWHEEL_Handle;
+
+/*********************************************************************
+*
+* Standard member functions
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+LISTWHEEL_Handle LISTWHEEL_Create (const GUI_ConstString * ppText, int x0, int y0, int xSize, int ySize, int Flags);
+LISTWHEEL_Handle LISTWHEEL_CreateAsChild (const GUI_ConstString * ppText, WM_HWIN hWinParent, int x0, int y0, int xSize, int ySize, int Flags);
+LISTWHEEL_Handle LISTWHEEL_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+LISTWHEEL_Handle LISTWHEEL_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent,
+ int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText);
+LISTWHEEL_Handle LISTWHEEL_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent,
+ int WinFlags, int ExFlags, int Id, const GUI_ConstString * ppText, int NumExtraBytes);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void LISTWHEEL_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void LISTWHEEL_AddString (LISTWHEEL_Handle hObj, const char * s);
+GUI_COLOR LISTWHEEL_GetBkColor (LISTWHEEL_Handle hObj, unsigned int Index);
+void * LISTWHEEL_GetItemData (LISTWHEEL_Handle hObj, unsigned Index); /* not to be documented */
+void LISTWHEEL_GetItemText (LISTWHEEL_Handle hObj, unsigned Index, char * pBuffer, int MaxSize);
+int LISTWHEEL_GetItemFromPos (LISTWHEEL_Handle hObj, int yPos);
+int LISTWHEEL_GetLBorder (LISTWHEEL_Handle hObj);
+unsigned LISTWHEEL_GetLineHeight (LISTWHEEL_Handle hObj);
+int LISTWHEEL_GetNumItems (LISTWHEEL_Handle hObj);
+int LISTWHEEL_GetPos (LISTWHEEL_Handle hObj);
+int LISTWHEEL_GetRBorder (LISTWHEEL_Handle hObj);
+int LISTWHEEL_GetSel (LISTWHEEL_Handle hObj);
+int LISTWHEEL_GetSnapPosition(LISTWHEEL_Handle hObj);
+int LISTWHEEL_GetTextAlign (LISTWHEEL_Handle hObj);
+GUI_COLOR LISTWHEEL_GetTextColor (LISTWHEEL_Handle hObj, unsigned int Index);
+int LISTWHEEL_GetUserData (LISTWHEEL_Handle hObj, void * pDest, int NumBytes);
+int LISTWHEEL_IsMoving (LISTWHEEL_Handle hObj);
+void LISTWHEEL_MoveToPos (LISTWHEEL_Handle hObj, unsigned int Index);
+int LISTWHEEL_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void LISTWHEEL_SetBkColor (LISTWHEEL_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void LISTWHEEL_SetDeceleration(LISTWHEEL_Handle hObj, unsigned Deceleration);
+void LISTWHEEL_SetFont (LISTWHEEL_Handle hObj, const GUI_FONT * pFont);
+void LISTWHEEL_SetItemData (LISTWHEEL_Handle hObj, unsigned Index, void * pData); /* not to be documented */
+void LISTWHEEL_SetLBorder (LISTWHEEL_Handle hObj, unsigned BorderSize);
+void LISTWHEEL_SetLineHeight (LISTWHEEL_Handle hObj, unsigned LineHeight);
+void LISTWHEEL_SetOwnerDraw (LISTWHEEL_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfOwnerDraw);
+void LISTWHEEL_SetPos (LISTWHEEL_Handle hObj, unsigned int Index);
+void LISTWHEEL_SetRBorder (LISTWHEEL_Handle hObj, unsigned BorderSize);
+void LISTWHEEL_SetSel (LISTWHEEL_Handle hObj, int Sel);
+void LISTWHEEL_SetSnapPosition(LISTWHEEL_Handle hObj, int SnapPosition);
+void LISTWHEEL_SetText (LISTWHEEL_Handle hObj, const GUI_ConstString * ppText);
+void LISTWHEEL_SetTextAlign (LISTWHEEL_Handle hObj, int Align);
+void LISTWHEEL_SetTextColor (LISTWHEEL_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void LISTWHEEL_SetTimerPeriod (LISTWHEEL_Handle hObj, GUI_TIMER_TIME TimerPeriod);
+int LISTWHEEL_SetUserData (LISTWHEEL_Handle hObj, const void * pSrc, int NumBytes);
+void LISTWHEEL_SetVelocity (LISTWHEEL_Handle hObj, int Velocity);
+
+const GUI_FONT * LISTWHEEL_GetFont(LISTWHEEL_Handle hObj);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // LISTWHEEL_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/LISTWHEEL_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,142 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : LISTWHEEL_Private.h
+Purpose : Private LISTWHEEL include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef LISTWHEEL_PRIVATE_H
+#define LISTWHEEL_PRIVATE_H
+
+#include "LISTWHEEL.h"
+#include "WM.h"
+#include "GUI_ARRAY.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define LISTWHEEL_STATE_PRESSED WIDGET_STATE_USER0
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+ void * pData;
+ char acText[1];
+} LISTWHEEL_ITEM;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBackColor[2];
+ GUI_COLOR aTextColor[2];
+ I16 Align;
+ unsigned Deceleration;
+} LISTWHEEL_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ GUI_ARRAY ItemArray;
+ WIDGET_DRAW_ITEM_FUNC * pfOwnerDraw;
+ LISTWHEEL_PROPS Props;
+ WM_HMEM hTimer;
+ unsigned LBorder;
+ unsigned RBorder;
+ unsigned LineHeight;
+ int Sel;
+ GUI_TIMER_TIME TimeTouched; // Time stamp of last touch event
+ GUI_TIMER_TIME TimeTouchedLast; // Time of the last touch
+ int PosTouchedLast; // Last touched position in pixels
+ int Pos; // Current position in pixels
+ int Velocity; // Motion in pixels
+ int SnapPosition; // Snap position in pixels
+ int TouchPos; // Y-position of last touch event
+ int ySizeData; // Data size in pixels
+ int Destination; // Destination position in pixels
+ GUI_TIMER_TIME TimerPeriod; // Period of timer events
+} LISTWHEEL_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define LISTWHEEL_INIT_ID(p) (p->Widget.DebugId = LISTWHEEL_ID)
+#else
+ #define LISTWHEEL_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ LISTWHEEL_OBJ * LISTWHEEL_LockH(LISTWHEEL_Handle h);
+ #define LISTWHEEL_LOCK_H(h) LISTWHEEL_LockH(h)
+#else
+ #define LISTWHEEL_LOCK_H(h) (LISTWHEEL_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private (module internal) data
+*
+**********************************************************************
+*/
+extern LISTWHEEL_PROPS LISTWHEEL_DefaultProps;
+
+/*********************************************************************
+*
+* Private (module internal) functions
+*
+**********************************************************************
+*/
+const char * LISTWHEEL__GetpStringLocked(LISTWHEEL_Handle hObj, int Index, LISTWHEEL_ITEM ** ppItem);
+
+#endif // GUI_WINSUPPORT
+#endif // LISTWHEEL_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MENU.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,272 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : MENU.h
+Purpose : MENU include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MENU_H
+#define MENU_H
+
+#include "WM.h"
+#include "WIDGET.h"
+#include "DIALOG_Intern.h" // Required for Create indirect data structure
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define MENU_SKIN_FLEX MENU_DrawSkinFlex
+
+/*********************************************************************
+*
+* Create flags
+*/
+#define MENU_CF_HORIZONTAL (0<<0)
+#define MENU_CF_VERTICAL (1<<0)
+#define MENU_CF_OPEN_ON_POINTEROVER (1<<1) // Normally a menu opens first when clicked on it
+#define MENU_CF_CLOSE_ON_SECOND_CLICK (1<<2) // Normally a menu closes only when clicked outside it
+#define MENU_CF_HIDE_DISABLED_SEL (1<<3) // Hides the selection when a disabled item is selected
+
+/*********************************************************************
+*
+* Menu item flags
+*/
+#define MENU_IF_DISABLED (1<<0) // Indicates that item is disabled
+#define MENU_IF_SEPARATOR (1<<1) // Indicates that item is a separator
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define MENU_CI_ENABLED 0
+#define MENU_CI_SELECTED 1
+#define MENU_CI_DISABLED 2
+#define MENU_CI_DISABLED_SEL 3
+#define MENU_CI_ACTIVE_SUBMENU 4
+
+/*********************************************************************
+*
+* Border indices
+*/
+#define MENU_BI_LEFT 0
+#define MENU_BI_RIGHT 1
+#define MENU_BI_TOP 2
+#define MENU_BI_BOTTOM 3
+
+/*********************************************************************
+*
+* Message types
+*/
+#define MENU_ON_ITEMSELECT 0 // Send to owner when selecting a menu item
+#define MENU_ON_INITMENU 1 // Send to owner when for the first time selecting a submenu
+#define MENU_ON_INITSUBMENU 2 // Send to owner when selecting a submenu
+#define MENU_ON_OPEN 3 // Internal message of menu widget (only send to submenus)
+#define MENU_ON_CLOSE 4 // Internal message of menu widget (only send to submenus)
+#define MENU_IS_MENU 5 // Internal message of menu widget. Owner must call
+ // WM_DefaultProc() when not handle the message
+#define MENU_ON_ITEMACTIVATE 6 // Send to owner when highlighting a menu item
+#define MENU_ON_ITEMPRESSED 7 // Send to owner when a menu item has been pressed
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define MENU_SKINFLEX_PI_ENABLED 0
+#define MENU_SKINFLEX_PI_SELECTED 1
+#define MENU_SKINFLEX_PI_DISABLED 2
+#define MENU_SKINFLEX_PI_DISABLED_SEL 3
+#define MENU_SKINFLEX_PI_ACTIVE_SUBMENU 4
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+
+typedef WM_HMEM MENU_Handle;
+
+typedef struct {
+ //
+ // Background
+ //
+ GUI_COLOR aBkColorH[2];
+ GUI_COLOR BkColorV;
+ GUI_COLOR FrameColorH;
+ GUI_COLOR FrameColorV;
+ //
+ // Selection
+ //
+ GUI_COLOR aSelColorH[2];
+ GUI_COLOR aSelColorV[2];
+ GUI_COLOR FrameColorSelH;
+ GUI_COLOR FrameColorSelV;
+ //
+ // Separator
+ //
+ GUI_COLOR aSepColorH[2];
+ GUI_COLOR aSepColorV[2];
+ //
+ // Arrow
+ //
+ GUI_COLOR ArrowColor;
+ //
+ // Text
+ //
+ GUI_COLOR TextColor;
+} MENU_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Menu message data
+*/
+typedef struct {
+ U16 MsgType;
+ U16 ItemId;
+} MENU_MSG_DATA;
+
+/*********************************************************************
+*
+* Menu item data
+*/
+typedef struct {
+ const char * pText;
+ U16 Id;
+ U16 Flags;
+ MENU_Handle hSubmenu;
+} MENU_ITEM_DATA;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+MENU_Handle MENU_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+MENU_Handle MENU_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+MENU_Handle MENU_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MENU_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Individual member functions
+*
+**********************************************************************
+*/
+void MENU_AddItem (MENU_Handle hObj, const MENU_ITEM_DATA * pItemData);
+void MENU_Attach (MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags);
+void MENU_DeleteItem (MENU_Handle hObj, U16 ItemId);
+void MENU_DisableItem (MENU_Handle hObj, U16 ItemId);
+void MENU_EnableItem (MENU_Handle hObj, U16 ItemId);
+GUI_COLOR MENU_GetBkColor (MENU_Handle hObj, unsigned ColorIndex);
+const GUI_FONT * MENU_GetFont (MENU_Handle hObj);
+void MENU_GetItem (MENU_Handle hObj, U16 ItemId, MENU_ITEM_DATA * pItemData);
+void MENU_GetItemText (MENU_Handle hObj, U16 ItemId, char * pBuffer, unsigned BufferSize);
+unsigned MENU_GetNumItems (MENU_Handle hObj);
+WM_HWIN MENU_GetOwner (MENU_Handle hObj);
+GUI_COLOR MENU_GetTextColor (MENU_Handle hObj, unsigned ColorIndex);
+int MENU_GetUserData (MENU_Handle hObj, void * pDest, int NumBytes);
+void MENU_InsertItem (MENU_Handle hObj, U16 ItemId, const MENU_ITEM_DATA * pItemData);
+void MENU_Popup (MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags);
+void MENU_SetBkColor (MENU_Handle hObj, unsigned ColorIndex, GUI_COLOR Color);
+void MENU_SetBorderSize (MENU_Handle hObj, unsigned BorderIndex, U8 BorderSize);
+void MENU_SetFont (MENU_Handle hObj, const GUI_FONT * pFont);
+void MENU_SetItem (MENU_Handle hObj, U16 ItemId, const MENU_ITEM_DATA * pItemData);
+void MENU_SetOwner (MENU_Handle hObj, WM_HWIN hOwner);
+int MENU_SetSel (MENU_Handle hObj, int Sel);
+void MENU_SetTextColor (MENU_Handle hObj, unsigned ColorIndex, GUI_COLOR Color);
+int MENU_SetUserData (MENU_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR MENU_GetDefaultTextColor (unsigned ColorIndex);
+GUI_COLOR MENU_GetDefaultBkColor (unsigned ColorIndex);
+U8 MENU_GetDefaultBorderSize (unsigned BorderIndex);
+const WIDGET_EFFECT * MENU_GetDefaultEffect (void);
+const GUI_FONT * MENU_GetDefaultFont (void);
+void MENU_SetDefaultTextColor (unsigned ColorIndex, GUI_COLOR Color);
+void MENU_SetDefaultBkColor (unsigned ColorIndex, GUI_COLOR Color);
+void MENU_SetDefaultBorderSize (unsigned BorderIndex, U8 BorderSize);
+void MENU_SetDefaultEffect (const WIDGET_EFFECT * pEffect);
+void MENU_SetDefaultFont (const GUI_FONT * pFont);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+int MENU_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void MENU_GetSkinFlexProps (MENU_SKINFLEX_PROPS * pProps, int Index);
+WIDGET_DRAW_ITEM_FUNC * MENU_SetDefaultSkin (WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void MENU_SetDefaultSkinClassic(void);
+void MENU_SetSkinClassic (MENU_Handle hObj);
+void MENU_SetSkin (MENU_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void MENU_SetSkinFlexProps (const MENU_SKINFLEX_PROPS * pProps, int Index);
+void MENU_SkinEnableArrow (MENU_Handle hObj, int OnOff);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // MENU_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MENU_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,183 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : MENU_Private.h
+Purpose : Internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef MENU_PRIVATE_H
+#define MENU_PRIVATE_H
+
+#include "WIDGET.h"
+#include "MENU.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Status flags
+*/
+#define MENU_SF_HORIZONTAL MENU_CF_HORIZONTAL
+#define MENU_SF_VERTICAL MENU_CF_VERTICAL
+#define MENU_SF_OPEN_ON_POINTEROVER MENU_CF_OPEN_ON_POINTEROVER
+#define MENU_SF_CLOSE_ON_SECOND_CLICK MENU_CF_CLOSE_ON_SECOND_CLICK
+#define MENU_SF_HIDE_DISABLED_SEL MENU_CF_HIDE_DISABLED_SEL
+
+#define MENU_SF_ACTIVE (1 << 6) // Internal flag only
+#define MENU_SF_POPUP (1 << 7) // Internal flag only
+#define MENU_SF_ARROW (1 << 8) // Internal flag only
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+//
+// MENU_SKIN_PRIVATE
+//
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} MENU_SKIN_PRIVATE;
+
+//
+// MENU_ITEM
+//
+typedef struct {
+ MENU_Handle hSubmenu;
+ U16 Id;
+ U16 Flags;
+ int TextWidth;
+ char acText[1];
+} MENU_ITEM;
+
+//
+// MENU_PROPS
+//
+typedef struct {
+ GUI_COLOR aTextColor[5];
+ GUI_COLOR aBkColor[5];
+ U8 aBorder[4];
+ const GUI_FONT * pFont;
+ MENU_SKIN_PRIVATE SkinPrivate;
+} MENU_PROPS;
+
+//
+// MENU_Obj
+//
+typedef struct {
+ WIDGET Widget;
+ MENU_PROPS Props;
+ GUI_ARRAY ItemArray;
+ WM_HWIN hOwner;
+ U16 Flags;
+ char IsSubmenuActive;
+ int Width;
+ int Height;
+ int Sel;
+ unsigned ArrowAreaWidth;
+ WIDGET_SKIN const * pWidgetSkin;
+} MENU_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define MENU_INIT_ID(pObj) (pObj->Widget.DebugId = MENU_ID)
+#else
+ #define MENU_INIT_ID(pObj)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ MENU_Obj * MENU_LockH(MENU_Handle hObj);
+ #define MENU_LOCK_H(hObj) MENU_LockH(hObj)
+#else
+ #define MENU_LOCK_H(hObj) (MENU_Obj *)GUI_LOCK_H(hObj)
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+
+extern MENU_PROPS MENU__DefaultProps;
+extern const WIDGET_EFFECT * MENU__pDefaultEffect;
+
+extern const WIDGET_SKIN MENU__SkinClassic;
+extern WIDGET_SKIN MENU__Skin;
+
+extern WIDGET_SKIN const * MENU__pSkinDefault;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+int MENU__CalcMenuSizeX (MENU_Handle hObj);
+int MENU__CalcMenuSizeY (MENU_Handle hObj);
+int MENU__FindItem (MENU_Handle hObj, U16 ItemId, MENU_Handle* phMenu);
+int MENU__GetEffectSize (MENU_Handle hObj);
+int MENU__GetItemHeight (MENU_Handle hObj, unsigned Index);
+int MENU__GetItemWidth (MENU_Handle hObj, unsigned Index);
+unsigned MENU__GetNumItems (MENU_Obj * pObj);
+int MENU__HasEffect (MENU_Handle hObj, MENU_Obj * pObj);
+void MENU__InvalidateItem (MENU_Handle hObj, unsigned Index);
+void MENU__RecalcTextWidthOfItems(MENU_Obj * pObj);
+void MENU__ResizeMenu (MENU_Handle hObj);
+int MENU__SendMenuMessage (MENU_Handle hObj, WM_HWIN hDestWin, U16 MsgType, U16 ItemId);
+char MENU__SetItem (MENU_Handle hObj, unsigned Index, const MENU_ITEM_DATA* pItemData);
+void MENU__SetItemFlags (MENU_Obj * pObj, unsigned Index, U16 Mask, U16 Flags);
+
+#endif // GUI_WINSUPPORT
+#endif // MENU_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MESSAGEBOX.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,74 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : MESSAGEBOX.h
+Purpose : Message box interface
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MESSAGEBOX_H
+#define MESSAGEBOX_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+WM_HWIN MESSAGEBOX_Create(const char * sMessage, const char * sCaption, int Flags);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MESSAGEBOX_Callback(WM_MESSAGE * pMsg);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* GUI_WINSUPPORT */
+
+#endif /* MESSAGEBOX */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MULTIEDIT.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,167 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : MULTIEDIT.h
+Purpose : MULTIEDIT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MULTIEDIT_H
+#define MULTIEDIT_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#define MULTIEDIT_CF_READONLY (1 << 0)
+#define MULTIEDIT_CF_INSERT (1 << 2)
+#define MULTIEDIT_CF_AUTOSCROLLBAR_V (1 << 3)
+#define MULTIEDIT_CF_AUTOSCROLLBAR_H (1 << 4)
+#define MULTIEDIT_CF_PASSWORD (1 << 5)
+#define MULTIEDIT_CF_SHOWCURSOR (1 << 6)
+
+#define MULTIEDIT_SF_READONLY MULTIEDIT_CF_READONLY
+#define MULTIEDIT_SF_INSERT MULTIEDIT_CF_INSERT
+#define MULTIEDIT_SF_AUTOSCROLLBAR_V MULTIEDIT_CF_AUTOSCROLLBAR_V
+#define MULTIEDIT_SF_AUTOSCROLLBAR_H MULTIEDIT_CF_AUTOSCROLLBAR_H
+#define MULTIEDIT_SF_PASSWORD MULTIEDIT_CF_PASSWORD
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define MULTIEDIT_CI_EDIT 0
+#define MULTIEDIT_CI_READONLY 1
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+
+typedef WM_HMEM MULTIEDIT_HANDLE;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+MULTIEDIT_HANDLE MULTIEDIT_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int ExFlags, const char * pText, int MaxLen);
+MULTIEDIT_HANDLE MULTIEDIT_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int BufferSize, const char * pText);
+MULTIEDIT_HANDLE MULTIEDIT_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+MULTIEDIT_HANDLE MULTIEDIT_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int BufferSize, const char * pText, int NumExtraBytes);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MULTIEDIT_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+
+int MULTIEDIT_AddKey (MULTIEDIT_HANDLE hObj, U16 Key);
+int MULTIEDIT_AddText (MULTIEDIT_HANDLE hObj, const char * s);
+void MULTIEDIT_EnableBlink (MULTIEDIT_HANDLE hObj, int Period, int OnOff);
+GUI_COLOR MULTIEDIT_GetBkColor (MULTIEDIT_HANDLE hObj, unsigned Index);
+int MULTIEDIT_GetCursorCharPos (MULTIEDIT_HANDLE hObj);
+void MULTIEDIT_GetCursorPixelPos(MULTIEDIT_HANDLE hObj, int * pxPos, int * pyPos);
+const GUI_FONT * MULTIEDIT_GetFont (MULTIEDIT_HANDLE hObj);
+void MULTIEDIT_GetPrompt (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
+void MULTIEDIT_GetText (MULTIEDIT_HANDLE hObj, char* sDest, int MaxNumChars);
+GUI_COLOR MULTIEDIT_GetTextColor (MULTIEDIT_HANDLE hObj, unsigned Index);
+int MULTIEDIT_GetTextSize (MULTIEDIT_HANDLE hObj);
+int MULTIEDIT_GetUserData (MULTIEDIT_HANDLE hObj, void * pDest, int NumBytes);
+void MULTIEDIT_SetTextAlign (MULTIEDIT_HANDLE hObj, int Align);
+void MULTIEDIT_SetAutoScrollH (MULTIEDIT_HANDLE hObj, int OnOff);
+void MULTIEDIT_SetAutoScrollV (MULTIEDIT_HANDLE hObj, int OnOff);
+void MULTIEDIT_SetBkColor (MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color);
+void MULTIEDIT_SetCursorCharPos (MULTIEDIT_HANDLE hObj, int x, int y); /* Not yet implemented */
+void MULTIEDIT_SetCursorPixelPos(MULTIEDIT_HANDLE hObj, int x, int y); /* Not yet implemented */
+void MULTIEDIT_SetCursorOffset (MULTIEDIT_HANDLE hObj, int Offset);
+void MULTIEDIT_SetHBorder (MULTIEDIT_HANDLE hObj, unsigned HBorder);
+void MULTIEDIT_SetFocusable (MULTIEDIT_HANDLE hObj, int State);
+void MULTIEDIT_SetFont (MULTIEDIT_HANDLE hObj, const GUI_FONT * pFont);
+void MULTIEDIT_SetInsertMode (MULTIEDIT_HANDLE hObj, int OnOff);
+void MULTIEDIT_SetBufferSize (MULTIEDIT_HANDLE hObj, int BufferSize);
+void MULTIEDIT_SetMaxNumChars (MULTIEDIT_HANDLE hObj, unsigned MaxNumChars);
+void MULTIEDIT_SetPrompt (MULTIEDIT_HANDLE hObj, const char* sPrompt);
+void MULTIEDIT_SetReadOnly (MULTIEDIT_HANDLE hObj, int OnOff);
+void MULTIEDIT_SetPasswordMode (MULTIEDIT_HANDLE hObj, int OnOff);
+void MULTIEDIT_SetText (MULTIEDIT_HANDLE hObj, const char* s);
+void MULTIEDIT_SetTextColor (MULTIEDIT_HANDLE hObj, unsigned Index, GUI_COLOR color);
+int MULTIEDIT_SetUserData (MULTIEDIT_HANDLE hObj, const void * pSrc, int NumBytes);
+void MULTIEDIT_SetWrapNone (MULTIEDIT_HANDLE hObj);
+void MULTIEDIT_SetWrapChar (MULTIEDIT_HANDLE hObj);
+void MULTIEDIT_SetWrapWord (MULTIEDIT_HANDLE hObj);
+int MULTIEDIT_ShowCursor (MULTIEDIT_HANDLE hObj, unsigned OnOff);
+
+#define MULTIEDIT_SetFocussable MULTIEDIT_SetFocusable
+
+/*********************************************************************
+*
+* Macros for compatibility with older versions
+*
+**********************************************************************
+*/
+
+#define MULTIEDIT_SetMaxLen(hObj, MaxLen) MULTIEDIT_SetBufferSize(hObj, MaxLen)
+#define MULTIEDIT_GetStringSize MULTIEDIT_GetTextSize
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // MULTIEDIT_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MULTIPAGE.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,226 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : MULTIPAGE.h
+Purpose : MULTIPAGE include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MULTIPAGE_H
+#define MULTIPAGE_H
+
+#include "WM.h"
+#include "DIALOG.h" // Required for Create indirect data structure
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Create / Status flags
+*/
+#define MULTIPAGE_ALIGN_LEFT (0 << 0)
+#define MULTIPAGE_ALIGN_RIGHT (1 << 0)
+#define MULTIPAGE_ALIGN_TOP (0 << 2)
+#define MULTIPAGE_ALIGN_BOTTOM (1 << 2)
+
+#define MULTIPAGE_CF_ROTATE_CW WIDGET_CF_VERTICAL
+
+#define MULTIPAGE_CI_DISABLED 0
+#define MULTIPAGE_CI_ENABLED 1
+
+#define MULTIPAGE_SKIN_FRAME_LEFT (1 << 0)
+#define MULTIPAGE_SKIN_FRAME_RIGHT (1 << 1)
+#define MULTIPAGE_SKIN_FRAME_TOP (1 << 2)
+#define MULTIPAGE_SKIN_FRAME_BOTTOM (1 << 3)
+#define MULTIPAGE_SKIN_FRAME_ALL (MULTIPAGE_SKIN_FRAME_LEFT | MULTIPAGE_SKIN_FRAME_RIGHT | MULTIPAGE_SKIN_FRAME_TOP | MULTIPAGE_SKIN_FRAME_BOTTOM)
+
+#define MULTIPAGE_SKINFLEX_PI_ENABLED 0
+#define MULTIPAGE_SKINFLEX_PI_SELECTED 1
+#define MULTIPAGE_SKINFLEX_PI_DISABLED 2
+
+#define SCROLLBAR_SIZE 32 // Defines the space for the scrollbar arrows
+
+#define MULTIPAGE_BI_SELECTED 0
+#define MULTIPAGE_BI_UNSELECTED 1
+#define MULTIPAGE_BI_DISABLED 2
+#define MULTIPAGE_BI_MAX 3 // The defines above are used as array indices.
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM MULTIPAGE_Handle;
+
+typedef struct {
+ GUI_COLOR BkColor;
+ GUI_COLOR aBkUpper[2];
+ GUI_COLOR aBkLower[2];
+ GUI_COLOR FrameColor;
+ GUI_COLOR TextColor;
+} MULTIPAGE_SKINFLEX_PROPS;
+
+typedef struct {
+ U8 SelSideBorderInc; // Number of pixels to add on both sides when drawing the selected item.
+ U8 SelTopBorderInc; // Number of pixels to add on top of selected items.
+} MULTIPAGE_SKIN_PROPS;
+
+typedef struct {
+ #if GUI_SUPPORT_ROTATION
+ GUI_ROTATION * pRotation;
+ #endif
+ unsigned Align;
+ int Sel;
+ U16 State;
+ U8 FrameFlags; // Flags to let the drawing function know which parts of the frame to display.
+ U8 PageStatus;
+ GUI_DRAW_HANDLE * pDrawObj;
+} MULTIPAGE_SKIN_INFO;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+MULTIPAGE_Handle MULTIPAGE_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, int SpecialFlags);
+MULTIPAGE_Handle MULTIPAGE_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+MULTIPAGE_Handle MULTIPAGE_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+MULTIPAGE_Handle MULTIPAGE_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void MULTIPAGE_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void MULTIPAGE_AddEmptyPage (MULTIPAGE_Handle hObj, WM_HWIN hWin ,const char * pText);
+void MULTIPAGE_AddPage (MULTIPAGE_Handle hObj, WM_HWIN hWin ,const char * pText);
+WM_HWIN MULTIPAGE_AttachWindow (MULTIPAGE_Handle hObj, unsigned Index, WM_HWIN hWin);
+void MULTIPAGE_DeletePage (MULTIPAGE_Handle hObj, unsigned Index, int Delete);
+void MULTIPAGE_DisablePage (MULTIPAGE_Handle hObj, unsigned Index);
+void MULTIPAGE_EnablePage (MULTIPAGE_Handle hObj, unsigned Index);
+void MULTIPAGE_EnableScrollbar(MULTIPAGE_Handle hObj, unsigned OnOff);
+GUI_COLOR MULTIPAGE_GetBkColor (MULTIPAGE_Handle hObj, unsigned Index);
+const GUI_FONT * MULTIPAGE_GetFont (MULTIPAGE_Handle hObj);
+int MULTIPAGE_GetSelection (MULTIPAGE_Handle hObj);
+int MULTIPAGE_GetPageText (MULTIPAGE_Handle hObj, unsigned Index, char * pBuffer, int MaxLen);
+GUI_COLOR MULTIPAGE_GetTextColor (MULTIPAGE_Handle hObj, unsigned Index);
+int MULTIPAGE_GetUserData (MULTIPAGE_Handle hObj, void * pDest, int NumBytes);
+WM_HWIN MULTIPAGE_GetWindow (MULTIPAGE_Handle hObj, unsigned Index);
+int MULTIPAGE_IsPageEnabled (MULTIPAGE_Handle hObj, unsigned Index);
+void MULTIPAGE_SelectPage (MULTIPAGE_Handle hObj, unsigned Index);
+void MULTIPAGE_SetAlign (MULTIPAGE_Handle hObj, unsigned Align);
+int MULTIPAGE_SetBitmapEx (MULTIPAGE_Handle hObj, const GUI_BITMAP * pBitmap, int x, int y, int Index, int State);
+int MULTIPAGE_SetBitmap (MULTIPAGE_Handle hObj, const GUI_BITMAP * pBitmap, int Index, int State);
+void MULTIPAGE_SetBkColor (MULTIPAGE_Handle hObj, GUI_COLOR Color, unsigned Index);
+void MULTIPAGE_SetFont (MULTIPAGE_Handle hObj, const GUI_FONT * pFont);
+void MULTIPAGE_SetRotation (MULTIPAGE_Handle hObj, unsigned Rotation);
+void MULTIPAGE_SetTabWidth (MULTIPAGE_Handle hObj, int Width, int Index);
+void MULTIPAGE_SetTabHeight (MULTIPAGE_Handle hObj, int Height);
+void MULTIPAGE_SetTextAlign (MULTIPAGE_Handle hObj, unsigned Align);
+void MULTIPAGE_SetText (MULTIPAGE_Handle hObj, const char * pText, unsigned Index);
+void MULTIPAGE_SetTextColor (MULTIPAGE_Handle hObj, GUI_COLOR Color, unsigned Index);
+int MULTIPAGE_SetUserData (MULTIPAGE_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+unsigned MULTIPAGE_GetDefaultAlign (void);
+GUI_COLOR MULTIPAGE_GetDefaultBkColor (unsigned Index);
+const GUI_FONT * MULTIPAGE_GetDefaultFont (void);
+GUI_COLOR MULTIPAGE_GetDefaultTextColor (unsigned Index);
+
+void MULTIPAGE_SetDefaultAlign (unsigned Align);
+void MULTIPAGE_SetDefaultBkColor (GUI_COLOR Color, unsigned Index);
+void MULTIPAGE_SetDefaultBorderSizeX(unsigned Size);
+void MULTIPAGE_SetDefaultBorderSizeY(unsigned Size);
+void MULTIPAGE_SetDefaultFont (const GUI_FONT * pFont);
+void MULTIPAGE_SetDefaultTextColor (GUI_COLOR Color, unsigned Index);
+
+void MULTIPAGE_SetEffectColor (unsigned Index, GUI_COLOR Color);
+GUI_COLOR MULTIPAGE_GetEffectColor (unsigned Index);
+int MULTIPAGE_GetNumEffectColors (void);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+int MULTIPAGE_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void MULTIPAGE_GetSkinFlexProps (MULTIPAGE_SKINFLEX_PROPS * pProps, int Index);
+WIDGET_DRAW_ITEM_FUNC * MULTIPAGE_SetDefaultSkin (WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void MULTIPAGE_SetDefaultSkinClassic(void);
+void MULTIPAGE_SetSkinClassic (MULTIPAGE_Handle hObj);
+void MULTIPAGE_SetSkin (MULTIPAGE_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+void MULTIPAGE_SetSkinFlexProps (const MULTIPAGE_SKINFLEX_PROPS * pProps, int Index);
+
+#define MULTIPAGE_SKIN_FLEX MULTIPAGE_DrawSkinFlex
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // MULTIPAGE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/MULTIPAGE_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,185 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : MULTIPAGE_Private.h
+Purpose : Private MULTIPAGE include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef MULTIPAGE_PRIVATE_H
+#define MULTIPAGE_PRIVATE_H
+
+#include "GUI_Debug.h"
+#include "GUI_ARRAY.h"
+#include "MULTIPAGE.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define MULTIPAGE_STATE_ENABLED (1 << 0)
+#define MULTIPAGE_STATE_SCROLLMODE WIDGET_STATE_USER0
+
+#define MULTIPAGE_NUMCOLORS 2
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+//
+// MULTIPAGE_PAGE
+//
+typedef struct {
+ WM_HWIN hWin;
+ U8 Status;
+ int ItemWidth;
+ WM_HMEM hDrawObj[3];
+ char acText;
+} MULTIPAGE_PAGE;
+
+//
+// MULTIPAGE_SKIN_PRIVATE
+//
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} MULTIPAGE_SKIN_PRIVATE;
+
+//
+// MULTIPAGE_PROPS
+//
+typedef struct {
+ const GUI_FONT * pFont;
+ unsigned Align;
+ GUI_COLOR aBkColor[MULTIPAGE_NUMCOLORS];
+ GUI_COLOR aTextColor[MULTIPAGE_NUMCOLORS];
+ MULTIPAGE_SKIN_PRIVATE SkinPrivate;
+ int BorderSize0;
+ int BorderSize1;
+ unsigned TextAlign;
+ unsigned Scrollbar;
+ int (* pfGetTouchedPage)(MULTIPAGE_Handle hObj, int x, int y);
+ int (* pfGetTabBarWidth)(MULTIPAGE_Handle hObj);
+} MULTIPAGE_PROPS;
+
+//
+// MULTIPAGE_Obj
+//
+typedef struct MULTIPAGE_Obj MULTIPAGE_Obj;
+
+struct MULTIPAGE_Obj {
+ WIDGET Widget;
+ void (* pfDrawTextItem)(MULTIPAGE_Obj * pObj, const char * pText, unsigned Index, const GUI_RECT * pRect, int x0, int xSize, int ColorIndex);
+ WM_HWIN hClient;
+ GUI_ARRAY hPageArray;
+ unsigned Selection;
+ int ScrollState;
+ MULTIPAGE_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ MULTIPAGE_SKIN_PROPS SkinProps;
+ int ItemHeight;
+ int MaxHeight;
+};
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define MULTIPAGE_INIT_ID(p) (p->Widget.DebugId = MULTIPAGE_ID)
+#else
+ #define MULTIPAGE_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ MULTIPAGE_Obj * MULTIPAGE_LockH(MULTIPAGE_Handle h);
+ #define MULTIPAGE_LOCK_H(h) MULTIPAGE_LockH(h)
+#else
+ #define MULTIPAGE_LOCK_H(h) (MULTIPAGE_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Externals
+*
+**********************************************************************
+*/
+extern GUI_COLOR MULTIPAGE__aEffectColor[2];
+extern MULTIPAGE_PROPS MULTIPAGE__DefaultProps;
+
+extern const WIDGET_SKIN MULTIPAGE__SkinClassic;
+extern WIDGET_SKIN MULTIPAGE__Skin;
+
+extern WIDGET_SKIN const * MULTIPAGE__pSkinDefault;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void MULTIPAGE__CalcBorderRect (MULTIPAGE_Obj * pObj, GUI_RECT * pRect);
+void MULTIPAGE__CalcClientRect (MULTIPAGE_Handle hObj, GUI_RECT * pRect);
+void MULTIPAGE__DeleteScrollbar(MULTIPAGE_Handle hObj);
+void MULTIPAGE__DrawTextItemH (MULTIPAGE_Obj * pObj, const char * pText, unsigned Index, const GUI_RECT * pRect, int x0, int w, int ColorIndex);
+int MULTIPAGE__GetPagePos (MULTIPAGE_Handle hObj, unsigned Index);
+int MULTIPAGE__GetPageWidth (MULTIPAGE_Handle hObj, unsigned Index);
+void MULTIPAGE__GetTabBarRect (MULTIPAGE_Handle hObj, GUI_RECT * pRect);
+void MULTIPAGE__UpdatePositions(MULTIPAGE_Handle hObj);
+
+/*********************************************************************
+*
+* Private Skinning functions
+*
+**********************************************************************
+*/
+int MULTIPAGE_SKIN__GetPagePos (MULTIPAGE_Handle hObj, unsigned Index);
+int MULTIPAGE_SKIN__GetTabBarWidth(MULTIPAGE_Handle hObj);
+int MULTIPAGE_SKIN__GetTouchedPage(MULTIPAGE_Handle hObj, int TouchX, int TouchY);
+
+#endif // GUI_WINSUPPORT
+#endif // MULTIPAGE_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/PROGBAR.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,168 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : PROGBAR.h
+Purpose : Progressbar include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef PROGBAR_H /* Avoid multiple inclusion */
+#define PROGBAR_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Create flags
+*/
+#define PROGBAR_CF_HORIZONTAL (0 << 0)
+#define PROGBAR_CF_VERTICAL (1 << 0)
+#define PROGBAR_CF_USER (1 << 1)
+
+/*********************************************************************
+*
+* Skinning constants
+*/
+#define PROGBAR_SKINFLEX_L 0
+#define PROGBAR_SKINFLEX_R 1
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM PROGBAR_Handle;
+
+typedef struct {
+ GUI_COLOR aColorUpperL[2];
+ GUI_COLOR aColorLowerL[2];
+ GUI_COLOR aColorUpperR[2];
+ GUI_COLOR aColorLowerR[2];
+ GUI_COLOR ColorFrame;
+ GUI_COLOR ColorText;
+} PROGBAR_SKINFLEX_PROPS;
+
+typedef struct {
+ int IsVertical;
+ int Index;
+ const char * pText;
+} PROGBAR_SKINFLEX_INFO;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+
+PROGBAR_Handle PROGBAR_Create (int x0, int y0, int xSize, int ySize, int Flags);
+PROGBAR_Handle PROGBAR_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+PROGBAR_Handle PROGBAR_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+PROGBAR_Handle PROGBAR_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+PROGBAR_Handle PROGBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void PROGBAR_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Individual member functions
+*
+**********************************************************************
+*/
+GUI_COLOR PROGBAR_GetBarColor(PROGBAR_Handle hObj, unsigned int Index);
+const GUI_FONT * PROGBAR_GetFont (PROGBAR_Handle hObj);
+void PROGBAR_GetMinMax (PROGBAR_Handle hObj, int * pMin, int * pMax);
+int PROGBAR_GetUserData (PROGBAR_Handle hObj, void * pDest, int NumBytes);
+GUI_COLOR PROGBAR_GetTextColor(PROGBAR_Handle hObj, unsigned int Index);
+int PROGBAR_GetValue (PROGBAR_Handle hObj);
+void PROGBAR_SetBarColor (PROGBAR_Handle hObj, unsigned int index, GUI_COLOR color);
+void PROGBAR_SetFont (PROGBAR_Handle hObj, const GUI_FONT * pfont);
+void PROGBAR_SetMinMax (PROGBAR_Handle hObj, int Min, int Max);
+void PROGBAR_SetText (PROGBAR_Handle hObj, const char* s);
+void PROGBAR_SetTextAlign(PROGBAR_Handle hObj, int Align);
+void PROGBAR_SetTextColor(PROGBAR_Handle hObj, unsigned int index, GUI_COLOR color);
+void PROGBAR_SetTextPos (PROGBAR_Handle hObj, int XOff, int YOff);
+void PROGBAR_SetValue (PROGBAR_Handle hObj, int v);
+int PROGBAR_SetUserData (PROGBAR_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void PROGBAR_GetSkinFlexProps (PROGBAR_SKINFLEX_PROPS * pProps, int Index);
+void PROGBAR_SetSkinClassic (PROGBAR_Handle hObj);
+void PROGBAR_SetSkin (PROGBAR_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int PROGBAR_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void PROGBAR_SetSkinFlexProps (const PROGBAR_SKINFLEX_PROPS * pProps, int Index);
+void PROGBAR_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * PROGBAR_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define PROGBAR_SKIN_FLEX PROGBAR_DrawSkinFlex
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // PROGBAR_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/PROGBAR_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,136 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : PROGBAR_Private.h
+Purpose : Internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef PROGBAR_PRIVATE_H
+#define PROGBAR_PRIVATE_H
+
+#include "PROGBAR.h"
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define PROGBAR_SF_HORIZONTAL PROGBAR_CF_HORIZONTAL
+#define PROGBAR_SF_VERTICAL PROGBAR_CF_VERTICAL
+#define PROGBAR_SF_USER PROGBAR_CF_USER
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} PROGBAR_SKIN_PRIVATE;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBarColor[2];
+ GUI_COLOR aTextColor[2];
+ PROGBAR_SKIN_PRIVATE SkinPrivate;
+} PROGBAR_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ int v;
+ WM_HMEM hpText;
+ I16 XOff, YOff;
+ I16 TextAlign;
+ int Min, Max;
+ PROGBAR_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ U8 Flags;
+} PROGBAR_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define PROGBAR_INIT_ID(p) p->Widget.DebugId = PROGBAR_ID
+#else
+ #define PROGBAR_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ PROGBAR_Obj * PROGBAR_LockH(PROGBAR_Handle h);
+ #define PROGBAR_LOCK_H(h) PROGBAR_LockH(h)
+#else
+ #define PROGBAR_LOCK_H(h) (PROGBAR_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern PROGBAR_PROPS PROGBAR__DefaultProps;
+
+extern const WIDGET_SKIN PROGBAR__SkinClassic;
+extern WIDGET_SKIN PROGBAR__Skin;
+
+extern WIDGET_SKIN const * PROGBAR__pSkinDefault;
+
+/*********************************************************************
+*
+* Public functions (internal)
+*
+**********************************************************************
+*/
+char * PROGBAR__GetTextLocked(const PROGBAR_Obj * pObj);
+void PROGBAR__GetTextRect (const PROGBAR_Obj * pObj, GUI_RECT * pRect, const char * pText);
+int PROGBAR__Value2Pos (const PROGBAR_Obj * pObj, int v);
+
+#endif /* GUI_WINSUPPORT */
+#endif /* PROGBAR_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/RADIO.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,198 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : RADIO.h
+Purpose : RADIO include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef RADIO_H
+#define RADIO_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Bitmap indices
+*/
+#define RADIO_BI_INACTIV 0
+#define RADIO_BI_ACTIV 1
+#define RADIO_BI_CHECK 2
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define RADIO_SKINFLEX_PI_PRESSED 0
+#define RADIO_SKINFLEX_PI_UNPRESSED 1
+
+/*********************************************************************
+*
+* Defaults for public configuration switches
+*
+**********************************************************************
+
+The following are defaults for config switches which affect the
+interface specified in this module
+*/
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define RADIO_TEXTPOS_RIGHT 0
+#define RADIO_TEXTPOS_LEFT WIDGET_STATE_USER0 /* Not implemented, TBD */
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM RADIO_Handle;
+
+typedef struct {
+ GUI_COLOR aColorButton[4];
+ int ButtonSize;
+} RADIO_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+
+RADIO_Handle RADIO_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, unsigned Para);
+RADIO_Handle RADIO_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumItems, int Spacing);
+RADIO_Handle RADIO_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumItems, int Spacing, int NumExtraBytes);
+RADIO_Handle RADIO_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void RADIO_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+
+void RADIO_SetDefaultFont (const GUI_FONT * pFont);
+GUI_COLOR RADIO_SetDefaultFocusColor(GUI_COLOR Color);
+void RADIO_SetDefaultImage (const GUI_BITMAP * pBitmap, unsigned int Index);
+void RADIO_SetDefaultTextColor (GUI_COLOR TextColor);
+const GUI_FONT * RADIO_GetDefaultFont (void);
+GUI_COLOR RADIO_GetDefaultTextColor (void);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+
+void RADIO_AddValue (RADIO_Handle hObj, int Add);
+void RADIO_Dec (RADIO_Handle hObj);
+GUI_COLOR RADIO_GetBkColor (RADIO_Handle hObj);
+GUI_COLOR RADIO_GetFocusColor(RADIO_Handle hObj);
+const GUI_FONT * RADIO_GetFont (RADIO_Handle hObj);
+const GUI_BITMAP * RADIO_GetImage (RADIO_Handle hObj, unsigned int Index);
+int RADIO_GetNumItems (RADIO_Handle hObj);
+int RADIO_GetText (RADIO_Handle hObj, unsigned Index, char * pBuffer, int MaxLen);
+GUI_COLOR RADIO_GetTextColor (RADIO_Handle hObj);
+int RADIO_GetUserData (RADIO_Handle hObj, void * pDest, int NumBytes);
+void RADIO_Inc (RADIO_Handle hObj);
+void RADIO_SetBkColor (RADIO_Handle hObj, GUI_COLOR Color);
+GUI_COLOR RADIO_SetFocusColor(RADIO_Handle hObj, GUI_COLOR Color);
+void RADIO_SetFont (RADIO_Handle hObj, const GUI_FONT * pFont);
+void RADIO_SetGroupId (RADIO_Handle hObj, U8 GroupId);
+void RADIO_SetImage (RADIO_Handle hObj, const GUI_BITMAP * pBitmap, unsigned int Index);
+void RADIO_SetText (RADIO_Handle hObj, const char* pText, unsigned Index);
+void RADIO_SetTextColor (RADIO_Handle hObj, GUI_COLOR Color);
+void RADIO_SetValue (RADIO_Handle hObj, int v);
+int RADIO_SetUserData (RADIO_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void RADIO_GetSkinFlexProps (RADIO_SKINFLEX_PROPS * pProps, int Index);
+void RADIO_SetSkinClassic (RADIO_Handle hObj);
+void RADIO_SetSkin (RADIO_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int RADIO_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void RADIO_SetSkinFlexProps (const RADIO_SKINFLEX_PROPS * pProps, int Index);
+void RADIO_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * RADIO_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define RADIO_SKIN_FLEX RADIO_DrawSkinFlex
+
+/*********************************************************************
+*
+* Query state
+*
+**********************************************************************
+*/
+int RADIO_GetValue(RADIO_Handle hObj);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // RADIO_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/RADIO_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,201 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : RADIO_Private.h
+Purpose : RADIO private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef RADIO_PRIVATE_H
+#define RADIO_PRIVATE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+#include "RADIO.h"
+#include "WIDGET.h"
+#include "GUI_ARRAY.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/* Define default image inactiv */
+#ifndef RADIO_IMAGE0_DEFAULT
+ #define RADIO_IMAGE0_DEFAULT &RADIO__abmRadio[0]
+#endif
+
+/* Define default image activ */
+#ifndef RADIO_IMAGE1_DEFAULT
+ #define RADIO_IMAGE1_DEFAULT &RADIO__abmRadio[1]
+#endif
+
+/* Define default image check */
+#ifndef RADIO_IMAGE_CHECK_DEFAULT
+ #define RADIO_IMAGE_CHECK_DEFAULT &RADIO__bmCheck
+#endif
+
+/* Define default font */
+#ifndef RADIO_FONT_DEFAULT
+ #if WIDGET_USE_SCHEME_SMALL
+ #define RADIO_SPACING_DEFAULT 20
+ #define RADIO_FONT_DEFAULT &GUI_Font13_1
+ #elif WIDGET_USE_SCHEME_MEDIUM
+ #define RADIO_SPACING_DEFAULT 24
+ #define RADIO_FONT_DEFAULT &GUI_Font16_1
+ #elif WIDGET_USE_SCHEME_LARGE
+ #define RADIO_SPACING_DEFAULT 30
+ #define RADIO_FONT_DEFAULT &GUI_Font24_1
+ #endif
+#endif
+
+/* Define vertical default spacing */
+#ifndef RADIO_SPACING_DEFAULT
+ #define RADIO_SPACING_DEFAULT 20
+#endif
+
+/* Define default text color */
+#ifndef RADIO_DEFAULT_TEXT_COLOR
+ #define RADIO_DEFAULT_TEXT_COLOR GUI_BLACK
+#endif
+
+/* Define default background color */
+#ifndef RADIO_DEFAULT_BKCOLOR
+ #define RADIO_DEFAULT_BKCOLOR GUI_GRAY_C0
+#endif
+
+#ifndef RADIO_FOCUSCOLOR_DEFAULT
+ #define RADIO_FOCUSCOLOR_DEFAULT GUI_BLACK
+#endif
+
+#define RADIO_BORDER 2
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ unsigned (* pfGetButtonSize)(RADIO_Handle hObj);
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} RADIO_SKIN_PRIVATE;
+
+typedef struct {
+ GUI_COLOR BkColor;
+ GUI_COLOR TextColor;
+ GUI_COLOR FocusColor;
+ const GUI_FONT * pFont;
+ const GUI_BITMAP * apBmRadio[2];
+ const GUI_BITMAP * pBmCheck;
+ RADIO_SKIN_PRIVATE SkinPrivate;
+} RADIO_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ RADIO_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ GUI_ARRAY TextArray;
+ I16 Sel; /* current selection */
+ U16 Spacing;
+ U16 NumItems;
+ U8 GroupId;
+} RADIO_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define RADIO_INIT_ID(p) p->Widget.DebugId = RADIO_ID
+#else
+ #define RADIO_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ RADIO_Obj * RADIO_LockH(RADIO_Handle h);
+ #define RADIO_LOCK_H(h) RADIO_LockH(h)
+#else
+ #define RADIO_LOCK_H(h) (RADIO_Obj *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+
+typedef void tRADIO_SetValue(RADIO_Handle hObj, int v);
+
+/*********************************************************************
+*
+* Extern data
+*
+**********************************************************************
+*/
+
+extern RADIO_PROPS RADIO__DefaultProps;
+
+extern const WIDGET_SKIN RADIO__SkinClassic;
+extern WIDGET_SKIN RADIO__Skin;
+
+extern WIDGET_SKIN const * RADIO__pSkinDefault;
+
+extern const GUI_BITMAP RADIO__abmRadio[2];
+extern const GUI_BITMAP RADIO__bmCheck;
+extern tRADIO_SetValue* RADIO__pfHandleSetValue;
+
+/*********************************************************************
+*
+* public functions (internal)
+*
+**********************************************************************
+*/
+void RADIO__SetValue (RADIO_Handle hObj, int v);
+unsigned RADIO__GetButtonSize(RADIO_Handle hObj);
+
+#endif /* GUI_WINSUPPORT */
+#endif /* RADIO_PRIVATE_H */
+
+/************************* end of file ******************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SCROLLBAR.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,216 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SCROLLBAR.h
+Purpose : SCROLLBAR include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SCROLLBAR_H
+#define SCROLLBAR_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define SCROLLBAR_CI_THUMB 0
+#define SCROLLBAR_CI_SHAFT 1
+#define SCROLLBAR_CI_ARROW 2
+
+/*********************************************************************
+*
+* States
+*/
+#define SCROLLBAR_STATE_PRESSED WIDGET_STATE_USER0
+
+/*********************************************************************
+*
+* Create / Status flags
+*/
+#define SCROLLBAR_CF_VERTICAL WIDGET_CF_VERTICAL
+#define SCROLLBAR_CF_FOCUSABLE WIDGET_STATE_FOCUSABLE
+
+#define SCROLLBAR_CF_FOCUSSABLE SCROLLBAR_CF_FOCUSABLE
+
+/************************************************************
+*
+* Skinning property indices
+*/
+#define SCROLLBAR_SKINFLEX_PI_PRESSED 0
+#define SCROLLBAR_SKINFLEX_PI_UNPRESSED 1
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SCROLLBAR_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[3];
+ GUI_COLOR aColorUpper[2];
+ GUI_COLOR aColorLower[2];
+ GUI_COLOR aColorShaft[2];
+ GUI_COLOR ColorArrow;
+ GUI_COLOR ColorGrasp;
+} SCROLLBAR_SKINFLEX_PROPS;
+
+typedef struct {
+ int IsVertical;
+ int State;
+} SCROLLBAR_SKINFLEX_INFO;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+SCROLLBAR_Handle SCROLLBAR_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int WinFlags, int SpecialFlags);
+SCROLLBAR_Handle SCROLLBAR_CreateAttached(WM_HWIN hParent, int SpecialFlags);
+SCROLLBAR_Handle SCROLLBAR_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+SCROLLBAR_Handle SCROLLBAR_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+SCROLLBAR_Handle SCROLLBAR_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void SCROLLBAR_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+
+/* Methods changing properties */
+
+void SCROLLBAR_AddValue (SCROLLBAR_Handle hObj, int Add);
+void SCROLLBAR_Dec (SCROLLBAR_Handle hObj);
+void SCROLLBAR_Inc (SCROLLBAR_Handle hObj);
+int SCROLLBAR_GetUserData(SCROLLBAR_Handle hObj, void * pDest, int NumBytes);
+GUI_COLOR SCROLLBAR_SetColor (SCROLLBAR_Handle hObj, int Index, GUI_COLOR Color);
+void SCROLLBAR_SetNumItems(SCROLLBAR_Handle hObj, int NumItems);
+void SCROLLBAR_SetPageSize(SCROLLBAR_Handle hObj, int PageSize);
+void SCROLLBAR_SetValue (SCROLLBAR_Handle hObj, int v);
+int SCROLLBAR_SetWidth (SCROLLBAR_Handle hObj, int Width);
+void SCROLLBAR_SetState (SCROLLBAR_Handle hObj, const WM_SCROLL_STATE* pState);
+int SCROLLBAR_SetUserData(SCROLLBAR_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void SCROLLBAR_GetSkinFlexProps (SCROLLBAR_SKINFLEX_PROPS * pProps, int Index);
+void SCROLLBAR_SetSkinClassic (SCROLLBAR_Handle hObj);
+void SCROLLBAR_SetSkin (SCROLLBAR_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int SCROLLBAR_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void SCROLLBAR_SetSkinFlexProps (const SCROLLBAR_SKINFLEX_PROPS * pProps, int Index);
+void SCROLLBAR_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * SCROLLBAR_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define SCROLLBAR_SKIN_FLEX SCROLLBAR_DrawSkinFlex
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+int SCROLLBAR_GetDefaultWidth(void);
+GUI_COLOR SCROLLBAR_SetDefaultColor(GUI_COLOR Color, unsigned int Index); /* Not yet documented */
+int SCROLLBAR_SetDefaultWidth(int DefaultWidth);
+
+/*********************************************************************
+*
+* Global functions
+*
+**********************************************************************
+*/
+int SCROLLBAR_GetThumbSizeMin(void);
+int SCROLLBAR_SetThumbSizeMin(int ThumbSizeMin);
+
+/*********************************************************************
+*
+* Query state
+*
+**********************************************************************
+*/
+GUI_COLOR SCROLLBAR_GetColor (SCROLLBAR_Handle hObj, int Index);
+int SCROLLBAR_GetNumItems(SCROLLBAR_Handle hObj);
+int SCROLLBAR_GetPageSize(SCROLLBAR_Handle hObj);
+int SCROLLBAR_GetValue (SCROLLBAR_Handle hObj);
+
+/*********************************************************************
+*
+* Macros for compatibility
+*
+**********************************************************************
+*/
+#define SCROLLBAR_BKCOLOR0_DEFAULT SCROLLBAR_COLOR_ARROW_DEFAULT
+#define SCROLLBAR_BKCOLOR1_DEFAULT SCROLLBAR_COLOR_SHAFT_DEFAULT
+#define SCROLLBAR_COLOR0_DEFAULT SCROLLBAR_COLOR_THUMB_DEFAULT
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // SCROLLBAR_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SCROLLBAR_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,196 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SCROLLBAR_Private.h
+Purpose : SCROLLBAR internal header file
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef SCROLLBAR_PRIVATE_H
+#define SCROLLBAR_PRIVATE_H
+
+#include "SCROLLBAR.h"
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define PRESSED_STATE_NONE 0
+#define PRESSED_STATE_RIGHT 1
+#define PRESSED_STATE_LEFT 2
+#define PRESSED_STATE_THUMB 3
+
+/*********************************************************************
+*
+* Private config defaults
+*
+**********************************************************************
+*/
+
+/* Define colors */
+#ifndef SCROLLBAR_COLOR_SHAFT_DEFAULT
+ #define SCROLLBAR_COLOR_SHAFT_DEFAULT GUI_GRAY
+#endif
+
+#ifndef SCROLLBAR_COLOR_ARROW_DEFAULT
+ #define SCROLLBAR_COLOR_ARROW_DEFAULT GUI_BLACK
+#endif
+
+#ifndef SCROLLBAR_COLOR_THUMB_DEFAULT
+ #define SCROLLBAR_COLOR_THUMB_DEFAULT GUI_GRAY_C0
+#endif
+
+#ifndef SCROLLBAR_THUMB_SIZE_MIN_DEFAULT
+ #define SCROLLBAR_THUMB_SIZE_MIN_DEFAULT 4
+#endif
+
+#ifndef SCROLLBAR_DEFAULT_WIDTH
+ #if WIDGET_USE_SCHEME_SMALL
+ #define SCROLLBAR_DEFAULT_WIDTH 11
+ #elif WIDGET_USE_SCHEME_MEDIUM
+ #define SCROLLBAR_DEFAULT_WIDTH 16
+ #elif WIDGET_USE_SCHEME_LARGE
+ #define SCROLLBAR_DEFAULT_WIDTH 22
+ #endif
+#endif
+
+#define SCROLLBAR_TIMER_ID 1234
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+extern GUI_COLOR SCROLLBAR__aDefaultBkColor[2];
+extern GUI_COLOR SCROLLBAR__aDefaultColor[2];
+extern I16 SCROLLBAR__DefaultWidth;
+extern I16 SCROLLBAR__ThumbSizeMin;
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} SCROLLBAR_SKIN_PRIVATE;
+
+typedef struct {
+ GUI_COLOR aColor[3];
+ SCROLLBAR_SKIN_PRIVATE SkinPrivate;
+} SCROLLBAR_PROPS;
+
+typedef struct {
+ int x0_LeftArrow;
+ int x1_LeftArrow;
+ int x0_Thumb;
+ int x1_Thumb;
+ int x0_RightArrow;
+ int x1_RightArrow;
+ int x1;
+ int xSizeMoveable;
+ int ThumbSize;
+} SCROLLBAR_POSITIONS;
+
+typedef struct SCROLLBAR_OBJ SCROLLBAR_OBJ;
+
+struct SCROLLBAR_OBJ {
+ WIDGET Widget;
+ SCROLLBAR_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ void (* pfCalcPositions)(SCROLLBAR_Handle hObj, SCROLLBAR_POSITIONS * pPos);
+ int NumItems, v, PageSize;
+ int State;
+ int TimerStep;
+ int TouchPos;
+ WM_HMEM hTimer;
+};
+
+/*********************************************************************
+*
+* Private macros
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define SCROLLBAR_INIT_ID(p) (p->Widget.DebugId = SCROLLBAR_ID)
+#else
+ #define SCROLLBAR_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ SCROLLBAR_OBJ * SCROLLBAR_LockH(SCROLLBAR_Handle h);
+ #define SCROLLBAR_LOCK_H(h) SCROLLBAR_LockH(h)
+#else
+ #define SCROLLBAR_LOCK_H(h) (SCROLLBAR_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void SCROLLBAR__InvalidatePartner(SCROLLBAR_Handle hObj);
+void SCROLLBAR__Rect2VRect (const WIDGET * pWidget, GUI_RECT * pRect);
+
+/*********************************************************************
+*
+* Private data
+*
+**********************************************************************
+*/
+extern SCROLLBAR_PROPS SCROLLBAR__DefaultProps;
+
+extern const WIDGET_SKIN SCROLLBAR__SkinClassic;
+extern WIDGET_SKIN SCROLLBAR__Skin;
+
+extern WIDGET_SKIN const * SCROLLBAR__pSkinDefault;
+
+#endif /* GUI_WINSUPPORT */
+#endif /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SEGGER.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,189 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SEGGER.h
+Purpose : Global types etc & general purpose utility functions
+Revision: $Rev: 6176 $
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef SEGGER_H // Guard against multiple inclusion
+#define SEGGER_H
+
+#include <stdarg.h>
+#include "Global.h" // Type definitions: U8, U16, U32, I8, I16, I32
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Keywords/specifiers
+*
+**********************************************************************
+*/
+
+#ifndef INLINE
+ #ifdef _WIN32
+ //
+ // Microsoft VC6 and newer.
+ // Force inlining without cost checking.
+ //
+ #define INLINE __forceinline
+ #else
+ #if (defined(__GNUC__))
+ //
+ // Force inlining with GCC
+ //
+ #define INLINE inline __attribute__((always_inline))
+ #elif (defined(__ICCARM__) || defined(__CC_ARM) || defined(__RX) || defined(__ICCRX__))
+ //
+ // Other known compilers.
+ //
+ #define INLINE inline
+ #else
+ //
+ // Unknown compilers.
+ //
+ #define INLINE
+ #endif
+ #endif
+#endif
+
+/*********************************************************************
+*
+* Function-like macros
+*
+**********************************************************************
+*/
+
+#define SEGGER_COUNTOF(a) (sizeof((a))/sizeof((a)[0]))
+#define SEGGER_MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define SEGGER_MAX(a,b) (((a) > (b)) ? (a) : (b))
+
+#ifndef SEGGER_USE_PARA // Some compiler complain about unused parameters.
+ #define SEGGER_USE_PARA(Para) (void)Para // This works for most compilers.
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+
+#define SEGGER_PRINTF_FLAG_ADJLEFT (1 << 0)
+#define SEGGER_PRINTF_FLAG_SIGNFORCE (1 << 1)
+#define SEGGER_PRINTF_FLAG_SIGNSPACE (1 << 2)
+#define SEGGER_PRINTF_FLAG_PRECEED (1 << 3)
+#define SEGGER_PRINTF_FLAG_ZEROPAD (1 << 4)
+#define SEGGER_PRINTF_FLAG_NEGATIVE (1 << 5)
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+
+typedef struct {
+ char* pBuffer;
+ int BufferSize;
+ int Cnt;
+} SEGGER_BUFFER_DESC;
+
+typedef struct {
+ int CacheLineSize; // 0: No Cache. Most Systems such as ARM9 use a 32 bytes cache line size.
+ void (*pfDMB) (void); // Optional DMB function for Data Memory Barrier to make sure all memory operations are completed.
+ void (*pfClean) (void *p, unsigned NumBytes); // Optional clean function for cached memory.
+ void (*pfInvalidate)(void *p, unsigned NumBytes); // Optional invalidate function for cached memory.
+} SEGGER_CACHE_CONFIG;
+
+typedef struct SEGGER_SNPRINTF_CONTEXT_struct SEGGER_SNPRINTF_CONTEXT;
+
+struct SEGGER_SNPRINTF_CONTEXT_struct {
+ void* pContext; // Application specific context.
+ SEGGER_BUFFER_DESC* pBufferDesc; // Buffer descriptor to use for output.
+ void (*pfFlush)(SEGGER_SNPRINTF_CONTEXT *); // Callback executed once the buffer is full. Callback decides if the buffer gets cleared to store more or not.
+};
+
+typedef struct {
+ void (*pfStoreChar) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, char c);
+ int (*pfPrintUnsigned) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, U32 v, unsigned Base, char Flags, int Width, int Precision);
+ int (*pfPrintInt) (SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, I32 v, unsigned Base, char Flags, int Width, int Precision);
+} SEGGER_PRINTF_API;
+
+typedef void (*SEGGER_pFormatter)(SEGGER_BUFFER_DESC* pBufferDesc, SEGGER_SNPRINTF_CONTEXT* pContext, const SEGGER_PRINTF_API* pApi, va_list* pParamList, char Lead, int Width, int Precision);
+
+typedef struct SEGGER_PRINTF_FORMATTER {
+ struct SEGGER_PRINTF_FORMATTER* pNext; // Pointer to next formatter.
+ SEGGER_pFormatter pfFormatter; // Formatter function.
+ char Specifier; // Format specifier.
+} SEGGER_PRINTF_FORMATTER;
+
+/*********************************************************************
+*
+* Utility functions
+*
+**********************************************************************
+*/
+
+void SEGGER_ARM_memcpy(void* pDest, const void* pSrc, int NumBytes);
+void SEGGER_memcpy (void* pDest, const void* pSrc, int NumBytes);
+void SEGGER_memxor (void* pDest, const void* pSrc, unsigned NumBytes);
+
+void SEGGER_StoreChar (SEGGER_BUFFER_DESC* pBufferDesc, char c);
+void SEGGER_PrintUnsigned(SEGGER_BUFFER_DESC* pBufferDesc, U32 v, unsigned Base, int Precision);
+void SEGGER_PrintInt (SEGGER_BUFFER_DESC* pBufferDesc, I32 v, unsigned Base, int Precision);
+//int SEGGER_snprintf (char* pBuffer, int BufferSize, const char* sFormat, ...);
+int SEGGER_vsnprintf (char* pBuffer, int BufferSize, const char* sFormat, va_list ParamList);
+int SEGGER_vsnprintfEx (SEGGER_SNPRINTF_CONTEXT* pContext, const char* sFormat, va_list ParamList);
+
+int SEGGER_PRINTF_AddFormatter (SEGGER_PRINTF_FORMATTER* pFormatter, SEGGER_pFormatter pfFormatter, char c);
+void SEGGER_PRINTF_AddDoubleFormatter(void);
+void SEGGER_PRINTF_AddIPFormatter (void);
+void SEGGER_PRINTF_AddHTMLFormatter (void);
+
+#if defined(__cplusplus)
+} /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#endif // Avoid multiple inclusion
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SLIDER.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,194 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SLIDER.h
+Purpose : SLIDER include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SLIDER_H
+#define SLIDER_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/************************************************************
+*
+* Defines
+*
+*************************************************************
+*/
+/************************************************************
+*
+* States
+*/
+#define SLIDER_STATE_PRESSED WIDGET_STATE_USER0
+
+/************************************************************
+*
+* Create / Status flags
+*/
+#define SLIDER_CF_HORIZONTAL 0
+#define SLIDER_CF_VERTICAL WIDGET_CF_VERTICAL
+
+/************************************************************
+*
+* Skinning property indices
+*/
+#define SLIDER_SKINFLEX_PI_PRESSED 0
+#define SLIDER_SKINFLEX_PI_UNPRESSED 1
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SLIDER_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[2];
+ GUI_COLOR aColorInner[2];
+ GUI_COLOR aColorShaft[3];
+ GUI_COLOR ColorTick;
+ GUI_COLOR ColorFocus;
+ int TickSize;
+ int ShaftSize;
+} SLIDER_SKINFLEX_PROPS;
+
+typedef struct {
+ int Width;
+ int NumTicks;
+ int Size;
+ int IsPressed;
+ int IsVertical;
+} SLIDER_SKINFLEX_INFO;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+SLIDER_Handle SLIDER_Create (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int WinFlags, int SpecialFlags);
+SLIDER_Handle SLIDER_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+SLIDER_Handle SLIDER_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+SLIDER_Handle SLIDER_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void SLIDER_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+void SLIDER_Dec (SLIDER_Handle hObj);
+void SLIDER_EnableFocusRect(SLIDER_Handle hObj, int OnOff);
+GUI_COLOR SLIDER_GetBarColor (SLIDER_Handle hObj);
+GUI_COLOR SLIDER_GetBkColor (SLIDER_Handle hObj);
+U8 SLIDER_GetFlag (SLIDER_Handle hObj, U8 Flag);
+GUI_COLOR SLIDER_GetFocusColor (SLIDER_Handle hObj);
+void SLIDER_GetRange (SLIDER_Handle hObj, int * pMin, int * pMax);
+GUI_COLOR SLIDER_GetTickColor (SLIDER_Handle hObj);
+int SLIDER_GetUserData (SLIDER_Handle hObj, void * pDest, int NumBytes);
+int SLIDER_GetValue (SLIDER_Handle hObj);
+void SLIDER_Inc (SLIDER_Handle hObj);
+void SLIDER_SetBarColor (SLIDER_Handle hObj, GUI_COLOR Color);
+void SLIDER_SetBkColor (SLIDER_Handle hObj, GUI_COLOR Color);
+GUI_COLOR SLIDER_SetFocusColor (SLIDER_Handle hObj, GUI_COLOR Color);
+void SLIDER_SetNumTicks (SLIDER_Handle hObj, int NumTicks);
+void SLIDER_SetRange (SLIDER_Handle hObj, int Min, int Max);
+void SLIDER_SetTickColor (SLIDER_Handle hObj, GUI_COLOR Color);
+int SLIDER_SetUserData (SLIDER_Handle hObj, const void * pSrc, int NumBytes);
+void SLIDER_SetValue (SLIDER_Handle hObj, int v);
+void SLIDER_SetWidth (SLIDER_Handle hObj, int Width);
+
+/*********************************************************************
+*
+* Member functions: Skinning
+*
+**********************************************************************
+*/
+void SLIDER_GetSkinFlexProps (SLIDER_SKINFLEX_PROPS * pProps, int Index);
+void SLIDER_SetSkinClassic (SLIDER_Handle hObj);
+void SLIDER_SetSkin (SLIDER_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int SLIDER_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void SLIDER_SetSkinFlexProps (const SLIDER_SKINFLEX_PROPS * pProps, int Index);
+void SLIDER_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * SLIDER_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#define SLIDER_SKIN_FLEX SLIDER_DrawSkinFlex
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR SLIDER_GetDefaultBkColor (void);
+GUI_COLOR SLIDER_GetDefaultBarColor (void);
+GUI_COLOR SLIDER_GetDefaultFocusColor(void);
+GUI_COLOR SLIDER_GetDefaultTickColor (void);
+void SLIDER_SetDefaultBkColor (GUI_COLOR Color);
+void SLIDER_SetDefaultBarColor (GUI_COLOR Color);
+GUI_COLOR SLIDER_SetDefaultFocusColor(GUI_COLOR Color);
+void SLIDER_SetDefaultTickColor (GUI_COLOR Color);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // SLIDER_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SLIDER_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,131 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SLIDER_Private.h
+Purpose : SLIDER private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SLIDER_PRIVATE_H
+#define SLIDER_PRIVATE_H
+
+#include "WM.h"
+#include "WIDGET.h"
+#include "SLIDER.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+//
+// Flags
+//
+#define SLIDER_FLAG_DRAW_FOCUS_RECT (1 << 0)
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} SLIDER_SKIN_PRIVATE;
+
+typedef struct {
+ U8 Flags;
+ GUI_COLOR BkColor;
+ GUI_COLOR BarColor;
+ GUI_COLOR FocusColor;
+ GUI_COLOR TickColor;
+ SLIDER_SKIN_PRIVATE SkinPrivate;
+} SLIDER_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ SLIDER_PROPS Props;
+ WIDGET_SKIN const * pWidgetSkin;
+ int NumTicks;
+ int Max;
+ int Min;
+ int v;
+ I16 Width;
+} SLIDER_Obj;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define SLIDER_INIT_ID(p) (p->Widget.DebugId = SLIDER_ID)
+#else
+ #define SLIDER_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ SLIDER_Obj * SLIDER_LockH(SLIDER_Handle h);
+ #define SLIDER_LOCK_H(h) SLIDER_LockH(h)
+#else
+ #define SLIDER_LOCK_H(h) (SLIDER_Obj *)GUI_LOCK_H(h)
+#endif
+
+#ifndef SLIDER_SUPPORT_TRANSPARENCY
+ #define SLIDER_SUPPORT_TRANSPARENCY WM_SUPPORT_TRANSPARENCY
+#endif
+
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern SLIDER_PROPS SLIDER__DefaultProps;
+extern const WIDGET_SKIN SLIDER__SkinClassic;
+extern WIDGET_SKIN SLIDER__Skin;
+extern const WIDGET_SKIN * SLIDER__pSkinDefault;
+
+#endif // GUI_WINSUPPORT
+#endif // SLIDER_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SPINBOX.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,191 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SPINBOX.h
+Purpose : SPINBOX header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SPINBOX_H
+#define SPINBOX_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Required for Create indirect data structure
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+#include "EDIT.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* States
+*/
+#define SPINBOX_STATE_PRESSED(x) (U8)(1 << (U8)x) // These flags are stored in (SPINBOX_OBJ->State) | x must be 0 or 1
+#define SPINBOX_STATE_FOCUS WIDGET_STATE_FOCUS // This is read from (SPINBOX_OBJ->Widget.State)
+
+#define SPINBOX_EDGE_RIGHT 0
+#define SPINBOX_EDGE_LEFT 1
+#define SPINBOX_EDGE_CENTER 2
+
+#define SPINBOX_EM_STEP 0
+#define SPINBOX_EM_EDIT 1
+
+#ifndef SPINBOX_EM_DEFAULT
+ #define SPINBOX_EM_DEFAULT SPINBOX_EM_STEP
+#endif
+
+/*********************************************************************
+*
+* Color indices
+*/
+#define SPINBOX_CI_DISABLED EDIT_CI_DISABLED
+#define SPINBOX_CI_ENABLED EDIT_CI_ENABLED
+#define SPINBOX_CI_PRESSED 2
+
+/*********************************************************************
+*
+* Skinning property indices
+*/
+#define SPINBOX_SKIN_FLEX SPINBOX_DrawSkinFlex
+
+#define SPINBOX_SKINFLEX_PI_PRESSED 0
+#define SPINBOX_SKINFLEX_PI_FOCUSED 1
+#define SPINBOX_SKINFLEX_PI_ENABLED 2
+#define SPINBOX_SKINFLEX_PI_DISABLED 3
+#define SPINBOX_SKIN_FLEX_RADIUS 2
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SPINBOX_Handle;
+
+typedef struct {
+ GUI_COLOR aColorFrame[2]; // [0] Outer color of surrounding frame. [1] Inner color of surrounding frame.
+ GUI_COLOR aColorUpper[2]; // [0] Upper color of gradient for upper button. [1] Lower color of gradient for upper button.
+ GUI_COLOR aColorLower[2]; // [0] Upper color of gradient for lower button. [1] Lower color of gradient for lower button.
+ GUI_COLOR ColorArrow; // Color of the button arrow.
+ GUI_COLOR ColorBk; // Color of the background. // See WIDGET_ITEM_CREATE in SPINBOX_DrawSkinFlex()
+ GUI_COLOR ColorText; // Color of the text. // See WIDGET_ITEM_CREATE in SPINBOX_DrawSkinFlex()
+ GUI_COLOR ColorButtonFrame; // Color of the button frame.
+} SPINBOX_SKINFLEX_PROPS;
+
+/*********************************************************************
+*
+* Prototypes
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Creation
+*/
+SPINBOX_Handle SPINBOX_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id, int Min, int Max);
+SPINBOX_Handle SPINBOX_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int Id, int Min, int Max, int NumExtraBytes);
+SPINBOX_Handle SPINBOX_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* Callback, should be called only from within a custom callback.
+*/
+void SPINBOX_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Get / Set properties
+*/
+void SPINBOX_EnableBlink (SPINBOX_Handle hObj, int Period, int OnOff);
+GUI_COLOR SPINBOX_GetBkColor (SPINBOX_Handle hObj, unsigned int Index);
+GUI_COLOR SPINBOX_GetButtonBkColor(SPINBOX_Handle hObj, unsigned int Index);
+EDIT_Handle SPINBOX_GetEditHandle (SPINBOX_Handle hObj);
+const GUI_FONT * SPINBOX_GetFont (SPINBOX_Handle hObj);
+GUI_COLOR SPINBOX_GetTextColor (SPINBOX_Handle hObj, unsigned int Index);
+int SPINBOX_GetUserData (SPINBOX_Handle hObj, void * pDest, int NumBytes);
+I32 SPINBOX_GetValue (SPINBOX_Handle hObj);
+void SPINBOX_SetBkColor (SPINBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void SPINBOX_SetButtonBkColor(SPINBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
+void SPINBOX_SetButtonSize (SPINBOX_Handle hObj, unsigned ButtonSize);
+void SPINBOX_SetEdge (SPINBOX_Handle hObj, U8 Edge);
+void SPINBOX_SetEditMode (SPINBOX_Handle hObj, U8 EditMode);
+void SPINBOX_SetFont (SPINBOX_Handle hObj, const GUI_FONT * pFont);
+void SPINBOX_SetRange (SPINBOX_Handle hObj, I32 Min, I32 Max);
+U16 SPINBOX_SetStep (SPINBOX_Handle hObj, U16 Step);
+void SPINBOX_SetTextColor (SPINBOX_Handle hObj, unsigned int Index, GUI_COLOR Color);
+int SPINBOX_SetUserData (SPINBOX_Handle hObj, const void * pSrc, int NumBytes);
+void SPINBOX_SetValue (SPINBOX_Handle hObj, I32 Value);
+
+/*********************************************************************
+*
+* Managing default values
+*/
+U16 SPINBOX_GetDefaultButtonSize(void);
+void SPINBOX_SetDefaultButtonSize(U16 ButtonSize);
+
+/*********************************************************************
+*
+* Skinning
+*/
+void SPINBOX_GetSkinFlexProps (SPINBOX_SKINFLEX_PROPS * pProps, int Index);
+void SPINBOX_SetSkinClassic (SPINBOX_Handle hObj);
+void SPINBOX_SetSkin (SPINBOX_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+int SPINBOX_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void SPINBOX_SetSkinFlexProps (const SPINBOX_SKINFLEX_PROPS * pProps, int Index);
+void SPINBOX_SetDefaultSkinClassic(void);
+WIDGET_DRAW_ITEM_FUNC * SPINBOX_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // SPINBOX_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SPINBOX_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,156 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SPINBOX_Private.h
+Purpose : Private SPINBOX include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SPINBOX_PRIVATE_H
+#define SPINBOX_PRIVATE_H
+
+#include "SPINBOX.h"
+#include "EDIT.h"
+#include "GUI_Private.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Private config defaults
+*
+**********************************************************************
+*/
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ WIDGET_DRAW_ITEM_FUNC * pfDrawSkin;
+} SPINBOX_SKIN_PRIVATE;
+
+typedef struct {
+ GUI_COLOR aButtonBkColor[3]; // Button background color for the states (disabled, pressed, unpressed).
+ GUI_COLOR aButtonUpperColor[3]; // Upper color for the button states (disabled, pressed, unpressed).
+ GUI_COLOR aButtonLowerColor[3]; // Lower color for the button states (disabled, pressed, unpressed).
+ GUI_COLOR aButtonOuterColor[3]; // Outer color for the button states (disabled, pressed, unpressed).
+ GUI_COLOR aTriangleColor[3]; // Color of the triangle for the button states (disabled, pressed, unpressed).
+ GUI_COLOR aBkColor[2]; // Background color for the states (enabled, disabled).
+ GUI_COLOR aTextColor[2]; // Text color for the states (enabled, disabled).
+ I32 Min; // Minimum allowed value.
+ I32 Max; // Maximum allowed value.
+ U16 Step; // Value will be increased/decreased by this amount when a button is clicked.
+ U16 ButtonSize; // Size of the button depending on the orientation.
+ U8 Edge; // Buttons reside on the left or right edge of the widget.
+ SPINBOX_SKIN_PRIVATE SkinPrivate; // Structure containing a pointer to the used DrawSkin-function.
+} SPINBOX_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ SPINBOX_PROPS Props;
+ const WIDGET_SKIN * pWidgetSkin;
+ EDIT_Handle hEdit;
+ GUI_TIMER_HANDLE hTimer;
+ I8 TimerButton;
+ I8 LastButton;
+ I8 NoAction;
+ U8 State; // Pressed state
+} SPINBOX_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define SPINBOX_INIT_ID(p) (p->Widget.DebugId = SPINBOX_ID)
+#else
+ #define SPINBOX_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ SPINBOX_OBJ * SPINBOX_LockH(SPINBOX_Handle h);
+ #define SPINBOX_LOCK_H(h) SPINBOX_LockH(h)
+#else
+ #define SPINBOX_LOCK_H(h) (SPINBOX_OBJ *)GUI_LOCK_H(h)
+#endif
+
+#define SPINBOX_BUTTON_NONE -1
+#define SPINBOX_BUTTON_0 0
+#define SPINBOX_BUTTON_1 1
+
+#define SPINBOX_TIMER_ID 1234
+
+/*********************************************************************
+*
+* Private function prototypes
+*
+**********************************************************************
+*/
+void SPINBOX__ApplyProps (SPINBOX_Handle hObj, SPINBOX_SKINFLEX_PROPS * const * ppProps);
+void SPINBOX__DrawBk (SPINBOX_Handle hObj, GUI_COLOR Color);
+void SPINBOX__GetButtonRect (SPINBOX_Handle hObj, GUI_RECT * pButtonRect, U8 ButtonIndex);
+void SPINBOX__GetButtonRectEx(SPINBOX_Handle hObj, WIDGET_ITEM_DRAW_INFO * ItemInfo);
+int SPINBOX__GetDefaultMax (void);
+int SPINBOX__GetDefaultMin (void);
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Public data (internal defaults)
+*
+**********************************************************************
+*/
+extern SPINBOX_PROPS SPINBOX__DefaultProps;
+extern const WIDGET_SKIN SPINBOX__SkinClassic;
+extern WIDGET_SKIN SPINBOX__Skin;
+extern const WIDGET_SKIN * SPINBOX__pSkinDefault;
+
+#endif // GUI_WINSUPPORT
+#endif // SPINBOX_PRIVATE_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SWIPELIST.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,229 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SWIPELIST.h
+Purpose : SWIPELIST include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SWIPELIST_H
+#define SWIPELIST_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" // Req. for Create indirect data structure
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { // Make sure we have C-declarations in C++ programs
+#endif
+
+/*********************************************************************
+*
+* Create flags
+*
+**********************************************************************
+*/
+#define SWIPELIST_CF_HORIZONTAL (0 << 0)
+#define SWIPELIST_CF_VERTICAL (1 << 0)
+
+/*********************************************************************
+*
+* Getting border size
+*/
+#define SWIPELIST_BI_LEFT 0
+#define SWIPELIST_BI_RIGHT 1
+#define SWIPELIST_BI_TOP 2
+#define SWIPELIST_BI_BOTTOM 3
+
+/*********************************************************************
+*
+* Getting font
+*/
+#define SWIPELIST_FI_SEP_ITEM 0
+#define SWIPELIST_FI_ITEM_HEADER 1
+#define SWIPELIST_FI_ITEM_TEXT 2
+
+/*********************************************************************
+*
+* Getting color
+*/
+#define SWIPELIST_CI_ITEM_HEADER_UNSEL 0
+#define SWIPELIST_CI_ITEM_HEADER_SEL 1
+#define SWIPELIST_CI_ITEM_TEXT_UNSEL 2
+#define SWIPELIST_CI_ITEM_TEXT_SEL 3
+#define SWIPELIST_CI_SEP_ITEM_TEXT 4
+
+#define SWIPELIST_CI_BK_ITEM_UNSEL 0
+#define SWIPELIST_CI_BK_ITEM_SEL 1
+#define SWIPELIST_CI_BK_SEP_ITEM 2
+
+/*********************************************************************
+*
+* Bitmap align
+*/
+#define SWIPELIST_BA_LEFT (0<<0)
+#define SWIPELIST_BA_RIGHT (1<<0)
+#define SWIPELIST_BA_HCENTER (2<<0)
+
+#define SWIPELIST_BA_VCENTER (3<<2)
+#define SWIPELIST_BA_TOP (0<<2)
+#define SWIPELIST_BA_BOTTOM (1<<2)
+
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+*/
+typedef WM_HMEM SWIPELIST_Handle;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+SWIPELIST_Handle SWIPELIST_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
+SWIPELIST_Handle SWIPELIST_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+SWIPELIST_Handle SWIPELIST_CreateIndirect (const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+SWIPELIST_Handle SWIPELIST_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void SWIPELIST_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+
+
+int SWIPELIST_AddItem (SWIPELIST_Handle hObj, const char * sText, int ItemSize);
+int SWIPELIST_AddItemText (SWIPELIST_Handle hObj, unsigned ItemIndex, const char * sText);
+int SWIPELIST_AddSepItem (SWIPELIST_Handle hObj, const char * sText, int ItemSize);
+void SWIPELIST_DeleteItem (SWIPELIST_Handle hObj, unsigned ItemIndex);
+
+const GUI_BITMAP * SWIPELIST_GetBitmap (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int SWIPELIST_GetBitmapSpace (SWIPELIST_Handle hObj);
+GUI_COLOR SWIPELIST_GetBkColor (SWIPELIST_Handle hObj, unsigned Index);
+int SWIPELIST_GetBorderSize (SWIPELIST_Handle hObj, unsigned Index);
+const GUI_FONT * SWIPELIST_GetFont (SWIPELIST_Handle hObj, unsigned Index);
+int SWIPELIST_GetItemSize (SWIPELIST_Handle hObj, unsigned ItemIndex);
+U32 SWIPELIST_GetItemUserData (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int SWIPELIST_GetNumItems (SWIPELIST_Handle hObj);
+int SWIPELIST_GetNumText (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int SWIPELIST_GetReleasedItem (SWIPELIST_Handle hObj);
+int SWIPELIST_GetScrollPos (SWIPELIST_Handle hObj);
+int SWIPELIST_GetSelItem (SWIPELIST_Handle hObj);
+GUI_COLOR SWIPELIST_GetSepColor (SWIPELIST_Handle hObj, unsigned ItemIndex);
+int SWIPELIST_GetSepSize (SWIPELIST_Handle hObj, unsigned ItemIndex);
+void SWIPELIST_GetText (SWIPELIST_Handle hObj, unsigned ItemIndex, unsigned TextIndex, char * pBuffer, int MaxSize);
+int SWIPELIST_GetTextAlign (SWIPELIST_Handle hObj, unsigned ItemIndex);
+GUI_COLOR SWIPELIST_GetTextColor (SWIPELIST_Handle hObj, unsigned Index);
+int SWIPELIST_GetThreshold (SWIPELIST_Handle hObj);
+int SWIPELIST_GetUserData (SWIPELIST_Handle hObj, void * pDest, int NumBytes);
+
+int SWIPELIST_ItemAttachWindow (SWIPELIST_Handle hObj, unsigned ItemIndex, WM_HWIN hWin, int x0, int y0);
+void SWIPELIST_ItemDetachWindow (SWIPELIST_Handle hObj, WM_HWIN hWin);
+int SWIPELIST_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+
+void SWIPELIST_SetAttachedWindowPos (SWIPELIST_Handle hObj, WM_HWIN hWin, int x0, int y0);
+void SWIPELIST_SetBitmap (SWIPELIST_Handle hObj, unsigned ItemIndex, int Align, const GUI_BITMAP * pBitmap);
+void SWIPELIST_SetBitmapEx (SWIPELIST_Handle hObj, unsigned ItemIndex, int Align, const GUI_BITMAP * pBitmap, int x, int y);
+void SWIPELIST_SetBitmapSpace (SWIPELIST_Handle hObj, unsigned Size);
+void SWIPELIST_SetBkColor (SWIPELIST_Handle hObj, unsigned Index, GUI_COLOR Color);
+void SWIPELIST_SetBorderSize (SWIPELIST_Handle hObj, unsigned Index, unsigned Size);
+void SWIPELIST_SetFont (SWIPELIST_Handle hObj, unsigned Index, const GUI_FONT * pFont);
+void SWIPELIST_SetItemSize (SWIPELIST_Handle hObj, unsigned ItemIndex, unsigned Size);
+void SWIPELIST_SetItemUserData (SWIPELIST_Handle hObj, unsigned ItemIndex, U32 UserData);
+void SWIPELIST_SetOwnerDraw (SWIPELIST_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void SWIPELIST_SetScrollPos (SWIPELIST_Handle hObj, int Pos);
+void SWIPELIST_SetScrollPosItem (SWIPELIST_Handle hObj, unsigned ItemIndex);
+void SWIPELIST_SetSepColor (SWIPELIST_Handle hObj, unsigned ItemIndex, GUI_COLOR Color);
+void SWIPELIST_SetSepSize (SWIPELIST_Handle hObj, unsigned ItemIndex, int Size);
+void SWIPELIST_SetText (SWIPELIST_Handle hObj, unsigned ItemIndex, unsigned TextIndex, char * sText);
+void SWIPELIST_SetTextAlign (SWIPELIST_Handle hObj, unsigned ItemIndex, int Align);
+void SWIPELIST_SetTextColor (SWIPELIST_Handle hObj, unsigned Index, GUI_COLOR Color);
+int SWIPELIST_SetThreshold (SWIPELIST_Handle hObj, int Threshold);
+int SWIPELIST_SetUserData (SWIPELIST_Handle hObj, const void * pSrc, int NumBytes);
+
+/*********************************************************************
+*
+* Global functions
+*
+**********************************************************************
+*/
+int SWIPELIST_GetDefaultBitmapSpace (void);
+GUI_COLOR SWIPELIST_GetDefaultBkColor (unsigned Index);
+int SWIPELIST_GetDefaultBorderSize (unsigned Index);
+const GUI_FONT * SWIPELIST_GetDefaultFont (unsigned Index);
+GUI_COLOR SWIPELIST_GetDefaultSepColor (void);
+unsigned SWIPELIST_GetDefaultSepSize (void);
+GUI_COLOR SWIPELIST_GetDefaultTextColor (unsigned Index);
+int SWIPELIST_GetDefaultTextAlign (void);
+int SWIPELIST_GetDefaultThreshold (void);
+
+void SWIPELIST_SetDefaultBitmapSpace (unsigned Size);
+void SWIPELIST_SetDefaultBkColor (unsigned Index, GUI_COLOR Color);
+void SWIPELIST_SetDefaultBorderSize (unsigned Index, unsigned Size);
+void SWIPELIST_SetDefaultFont (unsigned Index, const GUI_FONT * pFont);
+void SWIPELIST_SetDefaultSepColor (GUI_COLOR Color);
+void SWIPELIST_SetDefaultSepSize (unsigned Size);
+void SWIPELIST_SetDefaultTextColor (unsigned Index, GUI_COLOR Color);
+void SWIPELIST_SetDefaultTextAlign (int Align);
+void SWIPELIST_SetDefaultThreshold (int Threshold);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // SWIPELIST_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/SWIPELIST_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,146 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : SWIPELIST.h
+Purpose : SWIPELIST include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef SWIPELIST_PRIVATE_H
+#define SWIPELIST_PRIVATE_H
+
+#include "SWIPELIST.h"
+#include "GUI_Private.h"
+#include "GUI_ARRAY.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ WM_HWIN hWin;
+ int xPos;
+ int yPos;
+} SWIPELIST_WIN;
+
+typedef struct {
+ GUI_ARRAY WinArray;
+ GUI_ARRAY TextArray;
+ int TextSize;
+ WM_HMEM hDrawObj;
+ GUI_COLOR SepColor;
+ int SepSize;
+ int Pos;
+ int Size;
+ int BitmapAlign;
+ int TextAlign;
+ U8 Flags;
+ U32 UserData;
+} SWIPELIST_ITEM;
+
+typedef struct {
+ const GUI_FONT * pSepFont;
+ const GUI_FONT * pHeaderFont;
+ const GUI_FONT * pTextFont;
+ GUI_COLOR aTextColor[5];
+ GUI_COLOR aBkColor[3];
+ int BitmapSpace;
+ int aBorderSize[4];
+ U8 Flags;
+ int Threshold;
+} SWIPELIST_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ SWIPELIST_PROPS Props;
+ WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+ GUI_ARRAY ItemArray;
+ int Pos;
+ int Size;
+ int FirstVisible;
+ int LastVisible;
+ int Sel;
+ int ReleasedItem;
+} SWIPELIST_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define SWIPELIST_INIT_ID(p) p->Widget.DebugId = SWIPELIST_ID
+#else
+ #define SWIPELIST_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ SWIPELIST_OBJ * SWIPELIST_LockH(SWIPELIST_Handle h);
+ #define SWIPELIST_LOCK_H(h) SWIPELIST_LockH(h)
+#else
+ #define SWIPELIST_LOCK_H(h) (SWIPELIST_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+extern SWIPELIST_PROPS SWIPELIST__DefaultProps;
+extern GUI_COLOR SWIPELIST__DefaultSepColor;
+extern int SWIPELIST__DefaultSepSize;
+extern int SWIPELIST__DefaultTextAlign;
+
+/*********************************************************************
+*
+* Private functions
+*
+**********************************************************************
+*/
+void SWIPELIST__SetDrawObj (SWIPELIST_Handle hObj, int Index, int Align, GUI_DRAW_HANDLE hDrawObj);
+void SWIPELIST__CalcItemPos (GUI_ARRAY ItemArray, int StartIndex, int EndIndex, int AddSize);
+int SWIPELIST__CalcItemSize (SWIPELIST_Handle hObj, int ItemIndex);
+
+#endif /* if GUI_WINSUPPORT */
+#endif /* SWIPELIST_PRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TEXT.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,155 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : TEXT.h
+Purpose : TEXT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TEXT_H
+#define TEXT_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+#include "GUI_Debug.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/************************************************************
+*
+* #defines
+*
+*************************************************************
+*/
+
+/************************************************************
+*
+* Create / Status flags
+*/
+#define TEXT_CF_LEFT GUI_TA_LEFT
+#define TEXT_CF_RIGHT GUI_TA_RIGHT
+#define TEXT_CF_HCENTER GUI_TA_HCENTER
+
+#define TEXT_CF_VCENTER GUI_TA_VCENTER
+#define TEXT_CF_TOP GUI_TA_TOP
+#define TEXT_CF_BOTTOM GUI_TA_BOTTOM
+
+
+/*********************************************************************
+*
+* Public Types
+*
+**********************************************************************
+
+*/
+typedef WM_HMEM TEXT_Handle;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+TEXT_Handle TEXT_Create (int x0, int y0, int xSize, int ySize, int Id, int Flags, const char * s, int Align);
+TEXT_Handle TEXT_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags, const char * s, int Align);
+TEXT_Handle TEXT_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pText);
+TEXT_Handle TEXT_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char * pText, int NumExtraBytes);
+TEXT_Handle TEXT_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void TEXT_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Member functions
+*
+**********************************************************************
+*/
+
+/* Methods changing properties */
+
+GUI_COLOR TEXT_GetBkColor (TEXT_Handle hObj);
+const GUI_FONT * TEXT_GetFont (TEXT_Handle hObj);
+int TEXT_GetNumLines (TEXT_Handle hObj);
+int TEXT_GetText (TEXT_Handle hObj, char * pDest, U32 BufferSize);
+int TEXT_GetTextAlign(TEXT_Handle hObj);
+GUI_COLOR TEXT_GetTextColor(TEXT_Handle hObj);
+int TEXT_GetUserData (TEXT_Handle hObj, void * pDest, int NumBytes);
+GUI_WRAPMODE TEXT_GetWrapMode (TEXT_Handle hObj);
+void TEXT_SetBkColor (TEXT_Handle hObj, GUI_COLOR Color);
+void TEXT_SetFont (TEXT_Handle hObj, const GUI_FONT * pFont);
+int TEXT_SetDec (TEXT_Handle hObj, I32 v, U8 Len, U8 Shift, U8 Signed, U8 Space);
+int TEXT_SetText (TEXT_Handle hObj, const char * s);
+void TEXT_SetTextAlign(TEXT_Handle hObj, int Align);
+void TEXT_SetTextColor(TEXT_Handle hObj, GUI_COLOR Color);
+int TEXT_SetUserData (TEXT_Handle hObj, const void * pSrc, int NumBytes);
+void TEXT_SetWrapMode (TEXT_Handle hObj, GUI_WRAPMODE WrapMode);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+
+const GUI_FONT * TEXT_GetDefaultFont (void);
+GUI_COLOR TEXT_GetDefaultTextColor(void);
+GUI_WRAPMODE TEXT_GetDefaultWrapMode (void);
+void TEXT_SetDefaultFont (const GUI_FONT * pFont);
+void TEXT_SetDefaultTextColor(GUI_COLOR Color);
+GUI_WRAPMODE TEXT_SetDefaultWrapMode (GUI_WRAPMODE WrapMode);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // TEXT_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TEXT_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,102 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : TEXT.h
+Purpose : TEXT include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TEXT_PRIVATE_H
+#define TEXT_PRIVATE_H
+
+#include "TEXT.h"
+#include "GUI_Private.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR TextColor;
+ GUI_COLOR BkColor;
+ GUI_WRAPMODE WrapMode;
+} TEXT_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ TEXT_PROPS Props;
+ WM_HMEM hpText;
+ I16 Align;
+} TEXT_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define TEXT_INIT_ID(p) p->Widget.DebugId = TEXT_ID
+#else
+ #define TEXT_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ TEXT_OBJ * TEXT_LockH(TEXT_Handle h);
+ #define TEXT_LOCK_H(h) TEXT_LockH(h)
+#else
+ #define TEXT_LOCK_H(h) (TEXT_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+extern TEXT_PROPS TEXT__DefaultProps;
+
+#endif /* if GUI_WINSUPPORT */
+#endif /* TEXT_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TREEVIEW.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,240 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : TREEVIEW.h
+Purpose : TREEVIEW include
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TREEVIEW_H
+#define TREEVIEW_H
+
+#include "WM.h"
+#include "DIALOG_Intern.h" /* Req. for Create indirect data structure */
+#include "WIDGET.h"
+
+#if GUI_WINSUPPORT
+
+#if defined(__cplusplus)
+ extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/* Status- and create flags */
+#define TREEVIEW_CF_HIDELINES (1 << 0)
+#define TREEVIEW_CF_ROWSELECT (1 << 1)
+#define TREEVIEW_CF_AUTOSCROLLBAR_H (1 << 2)
+#define TREEVIEW_CF_AUTOSCROLLBAR_V (1 << 3)
+#define TREEVIEW_SF_HIDELINES TREEVIEW_CF_HIDELINES
+#define TREEVIEW_SF_ROWSELECT TREEVIEW_CF_ROWSELECT
+#define TREEVIEW_SF_AUTOSCROLLBAR_H TREEVIEW_CF_AUTOSCROLLBAR_H
+#define TREEVIEW_SF_AUTOSCROLLBAR_V TREEVIEW_CF_AUTOSCROLLBAR_V
+
+/* Bitmap indices */
+#define TREEVIEW_BI_CLOSED 0
+#define TREEVIEW_BI_OPEN 1
+#define TREEVIEW_BI_LEAF 2
+#define TREEVIEW_BI_PLUS 3
+#define TREEVIEW_BI_MINUS 4
+#define TREEVIEW_BI_PM 5
+
+/* Color indices */
+#define TREEVIEW_CI_UNSEL 0
+#define TREEVIEW_CI_SEL 1
+#define TREEVIEW_CI_DISABLED 2
+
+/* Relative positions (create) */
+#define TREEVIEW_INSERT_ABOVE 0
+#define TREEVIEW_INSERT_BELOW 1
+#define TREEVIEW_INSERT_FIRST_CHILD 2
+
+/* Relative positions (retrieve) */
+#define TREEVIEW_GET_FIRST 0
+#define TREEVIEW_GET_LAST 1
+#define TREEVIEW_GET_NEXT_SIBLING 2
+#define TREEVIEW_GET_PREV_SIBLING 3
+#define TREEVIEW_GET_FIRST_CHILD 4
+#define TREEVIEW_GET_PARENT 5
+
+/* Item flags */
+#define TREEVIEW_ITEM_TYPE_LEAF (0 << 0)
+#define TREEVIEW_ITEM_TYPE_NODE (1 << 0)
+
+/* Selection mode */
+#define TREEVIEW_SELMODE_ROW 1
+#define TREEVIEW_SELMODE_TEXT 0
+
+/************************************************************
+*
+* Types
+*
+*************************************************************
+*/
+typedef WM_HMEM TREEVIEW_Handle;
+typedef WM_HMEM TREEVIEW_ITEM_Handle;
+
+typedef struct {
+ int IsNode;
+ int IsExpanded;
+ int HasLines;
+ int HasRowSelect;
+ int Level;
+} TREEVIEW_ITEM_INFO;
+
+typedef struct {
+ GUI_COLOR ColorBk;
+ GUI_COLOR ColorText;
+ GUI_COLOR ColorTextBk;
+ GUI_COLOR ColorLines;
+ GUI_RECT rText;
+ TREEVIEW_ITEM_Handle hItem;
+ const GUI_FONT * pFont;
+ char * pText;
+ U8 NumLines;
+ I16 ax0[3];
+ I16 ay0[3];
+ I16 ax1[3];
+ I16 ay1[3];
+ U8 NumConnectors;
+ I16 axc[16];
+ const GUI_BITMAP * pBmPM;
+ const GUI_BITMAP * pBmOCL;
+ I16 xPosPM, xPosOCL;
+ U8 IndexPM;
+ U8 IndexOCL;
+} TREEVIEW_ITEM_DRAW_INFO;
+
+/*********************************************************************
+*
+* Create functions
+*
+**********************************************************************
+*/
+TREEVIEW_Handle TREEVIEW_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
+TREEVIEW_Handle TREEVIEW_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
+TREEVIEW_Handle TREEVIEW_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
+
+/*********************************************************************
+*
+* The callback ...
+*
+* Do not call it directly ! It is only to be used from within an
+* overwritten callback.
+*/
+void TREEVIEW_Callback(WM_MESSAGE * pMsg);
+
+/*********************************************************************
+*
+* Common functions
+*
+**********************************************************************
+*/
+int TREEVIEW_AttachItem (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem, TREEVIEW_ITEM_Handle hItemAt, int Position);
+void TREEVIEW_DecSel (TREEVIEW_Handle hObj);
+TREEVIEW_ITEM_Handle TREEVIEW_GetItem (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem, int Flags);
+TREEVIEW_ITEM_Handle TREEVIEW_GetSel (TREEVIEW_Handle hObj);
+int TREEVIEW_GetUserData (TREEVIEW_Handle hObj, void * pDest, int NumBytes);
+void TREEVIEW_IncSel (TREEVIEW_Handle hObj);
+TREEVIEW_ITEM_Handle TREEVIEW_InsertItem (TREEVIEW_Handle hObj, int IsNode, TREEVIEW_ITEM_Handle hItemPrev, int Position, const char * s);
+int TREEVIEW_OwnerDraw (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+void TREEVIEW_ScrollToSel (TREEVIEW_Handle hObj);
+void TREEVIEW_SetAutoScrollH (TREEVIEW_Handle hObj, int State);
+void TREEVIEW_SetAutoScrollV (TREEVIEW_Handle hObj, int State);
+void TREEVIEW_SetBitmapOffset(TREEVIEW_Handle hObj, int Index, int xOff, int yOff);
+void TREEVIEW_SetBkColor (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
+void TREEVIEW_SetFont (TREEVIEW_Handle hObj, const GUI_FONT * pFont);
+void TREEVIEW_SetHasLines (TREEVIEW_Handle hObj, int State);
+void TREEVIEW_SetImage (TREEVIEW_Handle hObj, int Index, const GUI_BITMAP * pBitmap);
+int TREEVIEW_SetIndent (TREEVIEW_Handle hObj, int Indent);
+void TREEVIEW_SetLineColor (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
+void TREEVIEW_SetOwnerDraw (TREEVIEW_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawItem);
+void TREEVIEW_SetSel (TREEVIEW_Handle hObj, TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_SetSelMode (TREEVIEW_Handle hObj, int Mode);
+void TREEVIEW_SetTextColor (TREEVIEW_Handle hObj, int Index, GUI_COLOR Color);
+int TREEVIEW_SetTextIndent (TREEVIEW_Handle hObj, int TextIndent);
+int TREEVIEW_SetUserData (TREEVIEW_Handle hObj, const void * pSrc, int NumBytes);
+
+
+/*********************************************************************
+*
+* Treeview item related functions
+*
+**********************************************************************
+*/
+void TREEVIEW_ITEM_Collapse (TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_ITEM_CollapseAll(TREEVIEW_ITEM_Handle hItem);
+TREEVIEW_ITEM_Handle TREEVIEW_ITEM_Create (int IsNode, const char * s, U32 UserData);
+void TREEVIEW_ITEM_Delete (TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_ITEM_Detach (TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_ITEM_Expand (TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_ITEM_ExpandAll (TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_ITEM_GetInfo (TREEVIEW_ITEM_Handle hItem, TREEVIEW_ITEM_INFO * pInfo);
+void TREEVIEW_ITEM_GetText (TREEVIEW_ITEM_Handle hItem, U8 * pBuffer, int MaxNumBytes);
+U32 TREEVIEW_ITEM_GetUserData(TREEVIEW_ITEM_Handle hItem);
+void TREEVIEW_ITEM_SetImage (TREEVIEW_ITEM_Handle hItem, int Index, const GUI_BITMAP * pBitmap);
+TREEVIEW_ITEM_Handle TREEVIEW_ITEM_SetText (TREEVIEW_ITEM_Handle hItem, const char * s);
+void TREEVIEW_ITEM_SetUserData(TREEVIEW_ITEM_Handle hItem, U32 UserData);
+
+/*********************************************************************
+*
+* Managing default values
+*
+**********************************************************************
+*/
+GUI_COLOR TREEVIEW_GetDefaultBkColor (int Index);
+const GUI_FONT * TREEVIEW_GetDefaultFont (void);
+GUI_COLOR TREEVIEW_GetDefaultLineColor(int Index);
+GUI_COLOR TREEVIEW_GetDefaultTextColor(int Index);
+void TREEVIEW_SetDefaultBkColor (int Index, GUI_COLOR Color);
+void TREEVIEW_SetDefaultFont (const GUI_FONT * pFont);
+void TREEVIEW_SetDefaultLineColor(int Index, GUI_COLOR Color);
+void TREEVIEW_SetDefaultTextColor(int Index, GUI_COLOR Color);
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // GUI_WINSUPPORT
+#endif // TREEVIEW_H
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/TREEVIEW_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,158 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : TREEVIEW_Private.h
+Purpose : TREEVIEW private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef TREEVIEW_PRIVATE_H
+#define TREEVIEW_PRIVATE_H
+
+#include "WM.h"
+#include "TREEVIEW.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+#define TREEVIEW_ITEM_STATE_EXPANDED (1 << 1)
+#define TREEVIEW_ITEM_STATE_ISLAST (1 << 2)
+
+#define TREEVIEW_STATE_HASLINES (1 << 0)
+
+#define TREEVIEW_COLORS_BK 0
+#define TREEVIEW_COLORS_TEXT 1
+#define TREEVIEW_COLORS_LINE 2
+
+/*********************************************************************
+*
+* Types
+*
+**********************************************************************
+*/
+typedef struct {
+ const GUI_BITMAP * apBm[3]; /* Closed, Open, Leaf */
+} TREEVIEW_ITEM_DATA;
+
+typedef struct {
+ WM_HMEM hParent; /* Handle to treeview object */
+ TREEVIEW_ITEM_Handle hNext;
+ TREEVIEW_ITEM_Handle hPrev;
+ U32 UserData;
+ WM_HMEM hData; /* Handle of TREEVIEW_ITEM_DATA structure */
+ U16 xSize;
+ U16 ySize;
+ U16 Flags;
+ U16 Connectors;
+ U8 Level; /* 0...15 */
+ char acText[1];
+} TREEVIEW_ITEM_OBJ;
+
+typedef struct {
+ const GUI_FONT * pFont;
+ GUI_COLOR aBkColor[3];
+ GUI_COLOR aTextColor[3];
+ GUI_COLOR aLineColor[3];
+ GUI_COLOR FocusColor;
+ const GUI_BITMAP * apBm[5]; /* Closed, Open, Leaf, Plus, Minus */
+ int Indent;
+ int TextIndent;
+ int MinItemHeight;
+} TREEVIEW_PROPS;
+
+typedef struct {
+ WIDGET Widget;
+ WIDGET_DRAW_ITEM_FUNC * pfDrawItem;
+ WM_SCROLL_STATE ScrollStateV;
+ WM_SCROLL_STATE ScrollStateH;
+ TREEVIEW_PROPS Props;
+ U16 Flags;
+ TREEVIEW_ITEM_Handle hFirst;
+ TREEVIEW_ITEM_Handle hLast;
+ TREEVIEW_ITEM_Handle hSel;
+ GUI_TIMER_HANDLE hTimer;
+ /* Cache variables */
+ int NumItems;
+ int NumVisItems;
+ int xSizeItems; /* xSize in pixel used for all visible items */
+ int ySizeItems; /* ySize in pixel used for all visible items */
+ I16 xOffPM, yOffPM; /* x/y offset of PM bitmap */
+ U16 xOverlapHLine;
+} TREEVIEW_OBJ;
+
+/*********************************************************************
+*
+* Macros for internal use
+*
+**********************************************************************
+*/
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ #define TREEVIEW_INIT_ID(p) p->Widget.DebugId = TREEVIEW_ID
+#else
+ #define TREEVIEW_INIT_ID(p)
+#endif
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
+ TREEVIEW_OBJ * TREEVIEW_LockH(TREEVIEW_Handle h);
+ #define TREEVIEW_LOCK_H(h) TREEVIEW_LockH(h)
+#else
+ #define TREEVIEW_LOCK_H(h) (TREEVIEW_OBJ *)GUI_LOCK_H(h)
+#endif
+
+/*********************************************************************
+*
+* Module internal data
+*
+**********************************************************************
+*/
+extern TREEVIEW_PROPS TREEVIEW__DefaultProps;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmOpen;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmClosed;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmLeaf;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmPlus;
+extern GUI_CONST_STORAGE GUI_BITMAP TREEVIEW__bmMinus;
+
+#endif /* GUI_WINSUPPORT */
+#endif /* TREEVIEW_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WIDGET.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,404 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : WIDGET.h
+Purpose : Widget interface
+---------------------------END-OF-HEADER------------------------------
+*/
+
+#ifndef WIDGET_H /* Avoid multiple inclusion */
+#define WIDGET_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#include "WM_Intern.h" /* Window manager, including some internals, which speed things up */
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Typedefs
+*
+**********************************************************************
+*/
+typedef struct {
+ WM_HWIN hWin;
+ int Cmd; /* WIDGET_ITEM_GET_XSIZE, WIDGET_ITEM_GET_YSIZE, WIDGET_ITEM_DRAW, */
+ int ItemIndex;
+ int Col;
+ int x0, y0, x1, y1;
+ void * p;
+} WIDGET_ITEM_DRAW_INFO;
+
+typedef int WIDGET_DRAW_ITEM_FUNC(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
+typedef void WIDGET_PAINT (WM_HWIN hObj);
+typedef void WIDGET_CREATE (WM_HWIN hObj);
+
+typedef struct {
+ WIDGET_PAINT * pfPaint;
+ WIDGET_CREATE * pfCreate;
+ void * pSkinPrivate;
+} WIDGET_SKIN;
+
+/*********************************************************************
+*
+* Important: WIDGET_DRAW_ITEM_FUNC needs to be defined
+* in SCROLLBAR.h!
+*
+**********************************************************************
+*/
+#include "SCROLLBAR.h"
+
+/*********************************************************************
+*
+* Defines
+*
+**********************************************************************
+*/
+/*********************************************************************
+*
+* Unique widget id's
+*/
+#define BUTTON_ID 0x42555454UL /* BUTT */
+#define CHECKBOX_ID 0x43484543UL /* CHEC */
+#define DROPDOWN_ID 0x44524f50UL /* DROP */
+#define EDIT_ID 0x45444954UL /* EDIT */
+#define FRAMEWIN_ID 0x4652414dUL /* FRAM */
+#define FRAMECLNT_ID 0x46524143UL /* FRAC */
+#define GRAPH_ID 0x47524150UL /* GRAP */
+#define HEADER_ID 0x48454144UL /* HEAD */
+#define LISTBOX_ID 0x4C495342UL /* LISB */
+#define LISTVIEW_ID 0x4C495356UL /* LISV */
+#define LISTWHEEL_ID 0x4C495357UL /* LISW */
+#define MENU_ID 0x4d454e55UL /* MENU */
+#define MULTIEDIT_ID 0x4d554c45UL /* MULE */
+#define MULTIPAGE_ID 0x4d554c50UL /* MULP */
+#define MPAGECLNT_ID 0x4d50434CUL /* MPCL */
+#define PROGBAR_ID 0x50524f47UL /* PROG */
+#define RADIO_ID 0x52414449UL /* RADI */
+#define SCROLLBAR_ID 0x5343524fUL /* SCRO */
+#define SLIDER_ID 0x534c4944UL /* SLID */
+#define SWIPELIST_ID 0x53574950UL /* SWIP */
+#define TEXT_ID 0x54455854UL /* TEXT */
+#define TREEVIEW_ID 0x54524545UL /* TREE */
+#define ICONVIEW_ID 0x49434f4eUL /* ICON */
+#define IMAGE_ID 0x494d4147UL /* IMAG */
+#define SPINBOX_ID 0x5350494eUL /* SPIN */
+#define KNOB_ID 0x4b4e4f42UL /* KNOB */
+#define WINDOW_ID 0x57494e44UL /* WIND */
+
+#define WIDGET_LOCK(hWin) ((WIDGET*)GUI_LOCK_H(hWin))
+
+/*********************************************************************
+*
+* Config switches
+*/
+
+#ifndef WIDGET_USE_PARENT_EFFECT
+ #define WIDGET_USE_PARENT_EFFECT 0
+#endif
+#ifndef WIDGET_USE_FLEX_SKIN
+ #if WM_SUPPORT_TRANSPARENCY
+ #define WIDGET_USE_FLEX_SKIN 1
+ #else
+ #define WIDGET_USE_FLEX_SKIN 0
+ #endif
+#endif
+#if !defined(WIDGET_USE_SCHEME_SMALL) && !defined(WIDGET_USE_SCHEME_MEDIUM) && !defined(WIDGET_USE_SCHEME_LARGE)
+ #define WIDGET_USE_SCHEME_SMALL 1
+ #define WIDGET_USE_SCHEME_MEDIUM 0
+ #define WIDGET_USE_SCHEME_LARGE 0
+#endif
+#ifndef WIDGET_USE_SCHEME_SMALL
+ #define WIDGET_USE_SCHEME_SMALL 0
+#endif
+#ifndef WIDGET_USE_SCHEME_MEDIUM
+ #define WIDGET_USE_SCHEME_MEDIUM 0
+#endif
+#ifndef WIDGET_USE_SCHEME_LARGE
+ #define WIDGET_USE_SCHEME_LARGE 0
+#endif
+#if (WIDGET_USE_SCHEME_SMALL + WIDGET_USE_SCHEME_MEDIUM + WIDGET_USE_SCHEME_LARGE) > 1
+ #error Only one scheme can be selected!
+#endif
+
+/*********************************************************************
+*
+* States
+*/
+
+#define WIDGET_STATE_FOCUS (1 << 0)
+#define WIDGET_STATE_VERTICAL (1 << 3)
+#define WIDGET_STATE_FOCUSABLE (1 << 4)
+
+#define WIDGET_STATE_USER0 (1 << 8) /* Freely available for derived widget */
+#define WIDGET_STATE_USER1 (1 << 9) /* Freely available for derived widget */
+#define WIDGET_STATE_USER2 (1 << 10) /* Freely available for derived widget */
+
+#define WIDGET_STATE_FOCUSSABLE WIDGET_STATE_FOCUSABLE
+
+/*********************************************************************
+*
+* Skinning message identifiers
+*/
+#define WIDGET_ITEM_CREATE 0
+#define WIDGET_ITEM_DRAW 1
+#define WIDGET_ITEM_DRAW_ARROW 2
+#define WIDGET_ITEM_DRAW_ARROW_L 3
+#define WIDGET_ITEM_DRAW_ARROW_R 4
+#define WIDGET_ITEM_DRAW_BACKGROUND 5
+#define WIDGET_ITEM_DRAW_BITMAP 6
+#define WIDGET_ITEM_DRAW_BUTTON 7
+#define WIDGET_ITEM_DRAW_BUTTON_L 8
+#define WIDGET_ITEM_DRAW_BUTTON_R 9
+#define WIDGET_ITEM_DRAW_FOCUS 10
+#define WIDGET_ITEM_DRAW_FRAME 11
+#define WIDGET_ITEM_DRAW_OVERLAP 12
+#define WIDGET_ITEM_DRAW_OVERLAY 13
+#define WIDGET_ITEM_DRAW_SEP 14
+#define WIDGET_ITEM_DRAW_SHAFT 15
+#define WIDGET_ITEM_DRAW_SHAFT_L 16
+#define WIDGET_ITEM_DRAW_SHAFT_R 17
+#define WIDGET_ITEM_DRAW_TEXT 18
+#define WIDGET_ITEM_DRAW_THUMB 19
+#define WIDGET_ITEM_DRAW_TICKS 20
+#define WIDGET_ITEM_GET_BORDERSIZE_B 21
+#define WIDGET_ITEM_GET_BORDERSIZE_L 22
+#define WIDGET_ITEM_GET_BORDERSIZE_R 23
+#define WIDGET_ITEM_GET_BORDERSIZE_T 24
+#define WIDGET_ITEM_GET_BUTTONSIZE 25
+#define WIDGET_ITEM_GET_XSIZE 26
+#define WIDGET_ITEM_GET_YSIZE 27
+#define WIDGET_ITEM_GET_RADIUS 28
+#define WIDGET_ITEM_APPLY_PROPS 29 // Not to be documented. Use this message identifier to update the
+ // properties of attached widgets from <WIDGET>_DrawSkinFlex().
+#define WIDGET_DRAW_BACKGROUND 30
+
+#define WIDGET_DRAW_OVERLAY WIDGET_ITEM_DRAW_OVERLAY
+
+/*********************************************************************
+*
+* Messages
+*/
+
+#define WM_WIDGET_SET_EFFECT (WM_WIDGET + 0)
+
+/*********************************************************************
+*
+* Create flags
+*/
+
+#define WIDGET_CF_VERTICAL WIDGET_STATE_VERTICAL
+
+/*********************************************************************
+*
+* Widget object
+*
+* The widget object is the base class for most widgets
+*/
+typedef struct {
+ int EffectSize;
+ void (* pfDrawUp) (void);
+ void (* pfDrawUpRect) (const GUI_RECT * pRect);
+ void (* pfDrawDown) (void);
+ void (* pfDrawDownRect)(const GUI_RECT * pRect);
+ void (* pfDrawFlat) (void);
+ void (* pfDrawFlatRect)(const GUI_RECT * pRect);
+} WIDGET_EFFECT;
+
+typedef struct {
+ WM_Obj Win;
+ const WIDGET_EFFECT* pEffect;
+ I16 Id;
+ U16 State;
+ #if GUI_DEBUG_LEVEL > 1
+ U32 DebugId;
+ #endif
+} WIDGET;
+
+
+/*********************************************************************
+*
+* GUI_DRAW
+*
+* The GUI_DRAW object is used as base class for selfdrawing,
+* non-windows objects. They are used as content of different widgets,
+* such as the bitmap or header widgets.
+*/
+/* Declare Object struct */
+typedef struct GUI_DRAW GUI_DRAW;
+typedef void GUI_DRAW_SELF_CB (WM_HWIN hWin);
+typedef WM_HMEM GUI_DRAW_HANDLE;
+
+/* Declare Object constants (member functions etc) */
+typedef struct {
+ void (* pfDraw) (GUI_DRAW_HANDLE hDrawObj, WM_HWIN hObj, int x, int y);
+ int (* pfGetXSize)(GUI_DRAW_HANDLE hDrawObj);
+ int (* pfGetYSize)(GUI_DRAW_HANDLE hDrawObj);
+} GUI_DRAW_CONSTS;
+
+/* Declare Object */
+struct GUI_DRAW {
+ const GUI_DRAW_CONSTS* pConsts;
+ union {
+ const void * pData;
+ GUI_DRAW_SELF_CB* pfDraw;
+ } Data;
+ I16 xOff, yOff;
+};
+
+/* GUI_DRAW_ API */
+void GUI_DRAW__Draw (GUI_DRAW_HANDLE hDrawObj, WM_HWIN hObj, int x, int y);
+int GUI_DRAW__GetXSize(GUI_DRAW_HANDLE hDrawObj);
+int GUI_DRAW__GetYSize(GUI_DRAW_HANDLE hDrawObj);
+
+void GUI_DrawStreamedEnableAuto(void);
+
+/* GUI_DRAW_ Constructurs for different objects */
+WM_HMEM GUI_DRAW_BITMAP_Create (const GUI_BITMAP* pBitmap, int x, int y);
+WM_HMEM GUI_DRAW_BMP_Create (const void* pBMP, int x, int y);
+WM_HMEM GUI_DRAW_STREAMED_Create(const GUI_BITMAP_STREAM * pBitmap, int x, int y);
+WM_HMEM GUI_DRAW_SELF_Create(GUI_DRAW_SELF_CB* pfDraw, int x, int y);
+
+/*********************************************************************
+*
+* Global data
+*
+**********************************************************************
+*/
+
+extern const WIDGET_EFFECT WIDGET_Effect_3D;
+extern const WIDGET_EFFECT WIDGET_Effect_3D1L;
+extern const WIDGET_EFFECT WIDGET_Effect_3D2L;
+extern const WIDGET_EFFECT WIDGET_Effect_None;
+extern const WIDGET_EFFECT WIDGET_Effect_Simple;
+
+/*********************************************************************
+*
+* Internal API routines
+*
+**********************************************************************
+*/
+
+void WIDGET__DrawFocusRect (WIDGET * pWidget, const GUI_RECT * pRect, int Dist);
+void WIDGET__DrawHLine (WIDGET * pWidget, int y, int x0, int x1);
+void WIDGET__DrawTriangle (WIDGET * pWidget, int x, int y, int Size, int Inc);
+void WIDGET__DrawVLine (WIDGET * pWidget, int x, int y0, int y1);
+void WIDGET__EFFECT_DrawDownRect(WIDGET * pWidget, GUI_RECT * pRect);
+void WIDGET__EFFECT_DrawDown (WIDGET * pWidget);
+void WIDGET__EFFECT_DrawUpRect (WIDGET * pWidget, GUI_RECT * pRect);
+void WIDGET__FillRectEx (WIDGET * pWidget, const GUI_RECT * pRect);
+int WIDGET__GetWindowSizeX (WM_HWIN hWin);
+GUI_COLOR WIDGET__GetBkColor (WM_HWIN hObj);
+int WIDGET__GetXSize (const WIDGET * pWidget);
+int WIDGET__GetYSize (const WIDGET * pWidget);
+void WIDGET__GetClientRect (WIDGET * pWidget, GUI_RECT * pRect);
+void WIDGET__GetInsideRect (WIDGET * pWidget, GUI_RECT * pRect);
+void WIDGET__Init (WIDGET * pWidget, int Id, U16 State);
+void WIDGET__RotateRect90 (WIDGET * pWidget, GUI_RECT * pDest, const GUI_RECT * pRect);
+void WIDGET__SetScrollState (WM_HWIN hWin, const WM_SCROLL_STATE * pVState, const WM_SCROLL_STATE * pState);
+void WIDGET__FillStringInRect (const char * pText, const GUI_RECT * pFillRect, const GUI_RECT * pTextRectMax, const GUI_RECT * pTextRectAct);
+
+//
+// Function pointers for drawing streamed bitmaps
+//
+extern void (* GUI__pfDrawStreamedBitmap) (const void * p, int x, int y);
+extern int (* GUI__pfDrawStreamedBitmapEx)(GUI_GET_DATA_FUNC * pfGetData, const void * p, int x, int y);
+
+/*********************************************************************
+*
+* API routines
+*
+**********************************************************************
+*/
+void WIDGET_SetState (WM_HWIN hObj, int State);
+void WIDGET_AndState (WM_HWIN hObj, int State);
+void WIDGET_OrState (WM_HWIN hObj, int State);
+int WIDGET_HandleActive (WM_HWIN hObj, WM_MESSAGE* pMsg);
+int WIDGET_GetState (WM_HWIN hObj);
+int WIDGET_SetWidth (WM_HWIN hObj, int Width);
+void WIDGET_SetFocusable (WM_HWIN hObj, int State);
+
+void WIDGET_EFFECT_3D_DrawUp(void);
+
+const WIDGET_EFFECT* WIDGET_SetDefaultEffect(const WIDGET_EFFECT* pEffect);
+
+void WIDGET_SetEffect (WM_HWIN hObj, const WIDGET_EFFECT* pEffect);
+
+const WIDGET_EFFECT* WIDGET_GetDefaultEffect(void);
+
+void WIDGET_EFFECT_3D_SetColor (unsigned Index, GUI_COLOR Color);
+void WIDGET_EFFECT_3D1L_SetColor (unsigned Index, GUI_COLOR Color);
+void WIDGET_EFFECT_3D2L_SetColor (unsigned Index, GUI_COLOR Color);
+void WIDGET_EFFECT_Simple_SetColor(unsigned Index, GUI_COLOR Color);
+
+GUI_COLOR WIDGET_EFFECT_3D_GetColor (unsigned Index);
+GUI_COLOR WIDGET_EFFECT_3D1L_GetColor (unsigned Index);
+GUI_COLOR WIDGET_EFFECT_3D2L_GetColor (unsigned Index);
+GUI_COLOR WIDGET_EFFECT_Simple_GetColor(unsigned Index);
+
+int WIDGET_EFFECT_3D_GetNumColors(void);
+int WIDGET_EFFECT_3D1L_GetNumColors(void);
+int WIDGET_EFFECT_3D2L_GetNumColors(void);
+int WIDGET_EFFECT_Simple_GetNumColors(void);
+
+/*********************************************************************
+*
+* Compatibility macros
+*
+**********************************************************************
+*/
+#define WIDGET_EnableStreamAuto() GUI_DrawStreamedEnableAuto()
+
+#define WIDGET_SetDefaultEffect_3D() WIDGET_SetDefaultEffect(&WIDGET_Effect_3D)
+#define WIDGET_SetDefaultEffect_3D1L() WIDGET_SetDefaultEffect(&WIDGET_Effect_3D1L)
+#define WIDGET_SetDefaultEffect_3D2L() WIDGET_SetDefaultEffect(&WIDGET_Effect_3D2L)
+#define WIDGET_SetDefaultEffect_None() WIDGET_SetDefaultEffect(&WIDGET_Effect_None)
+#define WIDGET_SetDefaultEffect_Simple() WIDGET_SetDefaultEffect(&WIDGET_Effect_Simple)
+
+#endif /* GUI_WINSUPPORT */
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* SLIDER_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WINDOW_Private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,78 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : WINDOW_Private.h
+Purpose : WINDOW private header file
+--------------------END-OF-HEADER-------------------------------------
+*/
+
+#ifndef WINDOW_PRIVATE_H
+#define WINDOW_PRIVATE_H
+
+#include "WM.h"
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Object definition
+*
+**********************************************************************
+*/
+
+typedef struct {
+ WIDGET Widget;
+ WM_CALLBACK * cb;
+ WM_HWIN hFocusedChild;
+ WM_DIALOG_STATUS * pDialogStatus;
+ GUI_COLOR BkColor;
+} WINDOW_OBJ;
+
+/*********************************************************************
+*
+* Externals
+*
+**********************************************************************
+*/
+
+extern GUI_COLOR WINDOW__DefaultBkColor;
+
+#endif /* GUI_WINSUPPORT */
+#endif /* WINDOW_PRIVATE_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WM.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,793 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : WM.h
+Purpose : Windows manager include
+----------------------------------------------------------------------
+*/
+
+#ifndef WM_H /* Make sure we only include it once */
+#define WM_H
+
+
+#include "GUI_ConfDefaults.h"
+#include "GUI_Type.h" /* Needed because of typedefs only */
+#include "WM_GUI.h" /* Some functions needed by GUI routines */
+#include "GUI.h"
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+/* Static memory devices */
+#ifndef WM_SUPPORT_STATIC_MEMDEV
+ #define WM_SUPPORT_STATIC_MEMDEV GUI_SUPPORT_MEMDEV
+#endif
+
+/* Support for transparency. Switching it off makes Wm smaller and faster */
+#ifndef WM_SUPPORT_TRANSPARENCY
+ #define WM_SUPPORT_TRANSPARENCY 1 /* Should be defined outside of GUI_WINSUPPORT because of '#if GUI_WINSUPPORT && WM_SUPPORT_TRANSPARENCY' in some files */
+#endif
+
+/* This is for tests only. It will fill the invalid area of a window.
+ Can be used for debugging. */
+#ifndef WM_SUPPORT_DIAG
+ #ifdef WIN32 /* In simulation */
+ #define WM_SUPPORT_DIAG GUI_WINSUPPORT
+ #else
+ #define WM_SUPPORT_DIAG 0
+ #endif
+#endif
+
+/* Make sure we actually have configured windows. If we have not,
+ there is no point for a windows manager and it will therefor not
+ generate any code !
+*/
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* Config defaults
+*/
+#ifndef WM_ASSERT
+ #define WM_ASSERT(expr) GUI_DEBUG_ASSERT(expr)
+#endif
+
+#ifndef WM_SUPPORT_TOUCH
+ #define WM_SUPPORT_TOUCH GUI_SUPPORT_TOUCH
+#endif
+
+/* Allow older API calls */
+#ifndef WM_COMPATIBLE_MODE
+ #define WM_COMPATIBLE_MODE 1
+#endif
+
+/* Send a message if visibility of a window has changed */
+#ifndef WM_SUPPORT_NOTIFY_VIS_CHANGED
+ #define WM_SUPPORT_NOTIFY_VIS_CHANGED 0
+#endif
+
+#ifndef WM_SUPPORT_CPP
+ #if defined (_MSC_VER)
+ #define WM_SUPPORT_CPP 1
+ #else
+ #define WM_SUPPORT_CPP 0
+ #endif
+#endif
+
+/*********************************************************************
+*
+* Locking macros
+*/
+#define WM_LOCK() GUI_LOCK()
+#define WM_UNLOCK() GUI_UNLOCK()
+
+#define WM_LOCK_H(hWin) (WM_Obj *)GUI_LOCK_H(hWin)
+
+/*********************************************************************
+*
+* Data types
+*/
+typedef struct WM_WINDOW_INFO WM_WINDOW_INFO;
+
+struct WM_WINDOW_INFO {
+ GUI_HMEM hWin;
+ GUI_HMEM hParent;
+ GUI_HMEM hFirstChild;
+ GUI_HMEM hNext;
+ GUI_RECT Rect;
+ U32 Status;
+ U32 DebugId;
+ WM_WINDOW_INFO * pNext;
+};
+
+typedef struct {
+ int Key, PressedCnt;
+} WM_KEY_INFO;
+
+typedef struct {
+ int NumItems, v, PageSize;
+} WM_SCROLL_STATE;
+
+typedef struct {
+ int Done;
+ int ReturnValue;
+} WM_DIALOG_STATUS;
+
+typedef struct {
+ int x,y;
+ U8 State;
+ U8 StatePrev;
+} WM_PID_STATE_CHANGED_INFO;
+
+typedef struct {
+ U8 Cmd;
+ U8 FinalMove;
+ U8 StopMotion;
+ U8 IsDragging;
+ int dx, dy, da;
+ int xPos, yPos;
+ int Period;
+ int SnapX;
+ int SnapY;
+ U8 IsOutside;
+ unsigned Overlap;
+ U32 Flags;
+ GUI_PID_STATE * pState;
+ GUI_HMEM hContext;
+} WM_MOTION_INFO;
+
+typedef struct {
+ I32 FactorMin; // Minimum factor to be used (<< 16)
+ I32 FactorMax; // Maximum factor to be used (<< 16)
+ U32 xSize; // Native xSize of window to be zoomed in pixels
+ U32 ySize; // Native ySize of window to be zoomed in pixels
+ U32 xSizeParent; // xSize of parent window
+ U32 ySizeParent; // ySize of parent window
+ I32 Factor0; // Primary factor when starting zoom gesture (<< 16)
+ int xPos0; // Primary window position in x when starting the gesture
+ int yPos0; // Primary window position in y when starting the gesture
+ GUI_POINT Center0; // Primary center point when starting the gesture
+} WM_ZOOM_INFO;
+
+typedef struct {
+ int Flags; // Information regarding gesture type
+ GUI_POINT Point; // Relative movement
+ GUI_POINT Center; // Center point for zooming
+ I32 Angle; // Angle between the touch points
+ I32 Factor; // Current zoom factor
+ WM_ZOOM_INFO * pZoomInfo; // Pointer to WM_ZOOM_INFO structure
+} WM_GESTURE_INFO;
+
+typedef struct {
+ int dx, dy;
+} WM_MOVE_INFO;
+
+/*********************************************************************
+*
+* Gesture flags for multi touch support
+*/
+#define WM_GF_BEGIN (1 << 0)
+#define WM_GF_END (1 << 1)
+#define WM_GF_PAN (1 << 2)
+#define WM_GF_ZOOM (1 << 3)
+#define WM_GF_ROTATE (1 << 4)
+#define WM_GF_DTAP (1 << 5)
+
+/*********************************************************************
+*
+* Messages Ids
+*
+* The following is the list of windows messages.
+*/
+#define WM_CREATE 0x0001 /* The first message received, right after client has actually been created */
+#define WM_MOVE 0x0003 /* window has been moved (Same as WIN32) */
+
+#define WM_SIZE 0x0005 /* Is sent to a window after its size has changed (Same as WIN32, do not change !) */
+
+#define WM_DELETE 11 /* Delete (Destroy) command: This tells the client to free its data strutures since the window
+ it is associates with no longer exists.*/
+#define WM_TOUCH 0x0240 /* Touch screen message */
+#define WM_TOUCH_CHILD 13 /* Touch screen message to ancestors */
+#define WM_KEY 14 /* Key has been pressed */
+
+#define WM_PAINT 0x000F /* Repaint window (because content is (partially) invalid */
+
+#if GUI_SUPPORT_MOUSE
+#define WM_MOUSEOVER 16 /* Mouse has moved, no key pressed */
+#define WM_MOUSEOVER_END 18 /* Mouse has moved, no key pressed */
+#endif
+
+#define WM_PID_STATE_CHANGED 17 /* Pointer input device state has changed */
+
+#define WM_GET_INSIDE_RECT 20 /* get inside rectangle: client rectangle minus pixels lost to effect */
+#define WM_GET_ID 21 /* Get id of widget */
+#define WM_SET_ID 22 /* Set id of widget */
+#define WM_GET_CLIENT_WINDOW 23 /* Get window handle of client window. Default is the same as window */
+#define WM_CAPTURE_RELEASED 24 /* Let window know that mouse capture is over */
+
+#define WM_INIT_DIALOG 29 /* Inform dialog that it is ready for init */
+
+#define WM_SET_FOCUS 30 /* Inform window that it has gotten or lost the focus */
+#define WM_GET_ACCEPT_FOCUS 31 /* Find out if window can accept the focus */
+#define WM_NOTIFY_CHILD_HAS_FOCUS 32 /* Sent to parent when child receives / loses focus */
+
+#define WM_NOTIFY_OWNER_KEY 33 /* Some widgets (e.g. listbox) notify owner when receiving key messages */
+
+#define WM_GET_BKCOLOR 34 /* Return back ground color (only frame window and similar) */
+#define WM_GET_SCROLL_STATE 35 /* Query state of scroll bar */
+
+#define WM_SET_SCROLL_STATE 36 /* Set scroll info ... only effective for scrollbars */
+
+#define WM_NOTIFY_CLIENTCHANGE 37 /* Client area may have changed */
+#define WM_NOTIFY_PARENT 38 /* Notify parent. Information is detailed as notification code */
+#define WM_NOTIFY_PARENT_REFLECTION 39 /* Notify parent reflection.
+ Sometimes send back as a result of the WM_NOTIFY_PARENT message
+ to let child react on behalf of its parent.
+ Information is detailed as notification code */
+#define WM_NOTIFY_ENABLE 40 /* Enable or disable widget */
+#define WM_NOTIFY_VIS_CHANGED 41 /* Visibility of a window has or may have changed */
+
+#define WM_HANDLE_DIALOG_STATUS 42 /* Set or get dialog status */
+#define WM_GET_RADIOGROUP 43 /* Send to all siblings and children of a radio control when
+ selection changed */
+#define WM_MENU 44 /* Send to owner window of menu widget */
+#define WM_SCREENSIZE_CHANGED 45 /* Send to all windows when size of screen has changed */
+#define WM_PRE_PAINT 46 /* Send to a window before it receives a WM_PAINT message */
+#define WM_POST_PAINT 47 /* Send to a window after (the last) WM_PAINT message */
+
+#define WM_MOTION 48 /* Automatic motion messages */
+
+#define WM_GET_WINDOW_ID 49 /* Return widget type specific Id (DebugId) */
+
+#define WM_PRE_BANDING 50 /* Send before starting banding process */
+#define WM_POST_BANDING 51 /* Send after finishing banding process */
+
+#define WM_USER_DATA 52 /* Send immediately after setting user data */
+#define WM_SET_CALLBACK 53 /* Send immediately after setting user data */
+
+#define WM_GESTURE 0x0119 /* Gesture message */
+
+#define WM_TIMER 0x0113 /* Timer has expired (Keep the same as WIN32) */
+#define WM_WIDGET 0x0300 /* 256 messages reserved for Widget messages */
+#define WM_USER 0x0400 /* Reserved for user messages ... (Keep the same as WIN32) */
+
+/*********************************************************************
+*
+* Motion messages
+*/
+#define WM_MOTION_INIT 0
+#define WM_MOTION_MOVE 1
+#define WM_MOTION_GETPOS 2
+#define WM_MOTION_GETCONTEXT 3
+
+/*********************************************************************
+*
+* Motion flags
+*/
+#define WM_MOTION_MANAGE_BY_WINDOW (1 << 0) // Window movement is managed by window itself
+
+/*********************************************************************
+*
+* Notification codes
+*
+* The following is the list of notification codes send
+* with the WM_NOTIFY_PARENT message
+*/
+#define WM_NOTIFICATION_CLICKED 1
+#define WM_NOTIFICATION_RELEASED 2
+#define WM_NOTIFICATION_MOVED_OUT 3
+#define WM_NOTIFICATION_SEL_CHANGED 4
+#define WM_NOTIFICATION_VALUE_CHANGED 5
+#define WM_NOTIFICATION_SCROLLBAR_ADDED 6 /* Scroller added */
+#define WM_NOTIFICATION_CHILD_DELETED 7 /* Inform window that child is about to be deleted */
+#define WM_NOTIFICATION_GOT_FOCUS 8
+#define WM_NOTIFICATION_LOST_FOCUS 9
+#define WM_NOTIFICATION_SCROLL_CHANGED 10
+
+#define WM_NOTIFICATION_WIDGET 11 /* Space for widget defined notifications */
+#define WM_NOTIFICATION_USER 16 /* Space for application (user) defined notifications */
+
+/*********************************************************************
+*
+* Memory management
+*/
+#define WM_HWIN GUI_HWIN
+#define WM_HWIN_NULL GUI_HMEM_NULL
+#define WM_HMEM GUI_HMEM
+#define WM_HMEM_NULL GUI_HMEM_NULL
+#define WM_HTIMER GUI_HMEM
+
+/*********************************************************************
+*
+* Window defines
+*/
+#define WM_HBKWIN WM_GetDesktopWindow() /* Handle of background window */
+#define WM_UNATTACHED ((WM_HMEM) - 1) /* Do not attach to a window */
+
+/*********************************************************************
+*
+* Window create flags.
+*
+* These flags can be passed to the create window
+* function as flag-parameter. The flags are combinable using the
+* binary or operator.
+*/
+#define WM_CF_HASTRANS (1UL << 0) /* Has transparency. Needs to be defined for windows which do not fill the entire
+ section of their (client) rectangle. */
+#define WM_CF_HIDE (0UL << 1) /* Hide window after creation (default !) */
+#define WM_CF_SHOW (1UL << 1) /* Show window after creation */
+#define WM_CF_MEMDEV (1UL << 2) /* Use memory device for redraws */
+#define WM_CF_STAYONTOP (1UL << 3) /* Stay on top */
+#define WM_CF_DISABLED (1UL << 4) /* Disabled: Does not receive PID (mouse & touch) input */
+
+/* Create only flags ... Not available as status flags */
+#define WM_CF_ACTIVATE (1UL << 5) /* If automatic activation upon creation of window is desired */
+#define WM_CF_FGND (0UL << 6) /* Put window in foreground after creation (default !) */
+#define WM_CF_BGND (1UL << 6) /* Put window in background after creation */
+
+/* Anchor flags */
+#define WM_CF_ANCHOR_RIGHT (1UL << 7) /* Right anchor ... If parent is resized, distance to right will remain const (left is default) */
+#define WM_CF_ANCHOR_BOTTOM (1UL << 8) /* Bottom anchor ... If parent is resized, distance to bottom will remain const (top is default) */
+#define WM_CF_ANCHOR_LEFT (1UL << 9) /* Left anchor ... If parent is resized, distance to left will remain const (left is default) */
+#define WM_CF_ANCHOR_TOP (1UL << 10) /* Top anchor ... If parent is resized, distance to top will remain const (top is default) */
+
+#define WM_CF_CONST_OUTLINE (1UL << 11) /* Constant outline. This is relevant for transparent windows only. If a window is transparent
+ and does not have a constant outline, its background is invalided instead of the window itself.
+ This causes add. computation time when redrawing. */
+#define WM_CF_LATE_CLIP (1UL << 12)
+#define WM_CF_MEMDEV_ON_REDRAW (1UL << 13)
+
+#define WM_SF_INVALID_DRAW (1UL << 14)
+#define WM_SF_DELETE (1UL << 15) /* Marks the window to be deleted within WM_Exec() when no callback routine is executed */
+
+#define WM_CF_STATIC (1UL << 16) /* Use static memory device for redraws */
+
+#define WM_CF_MOTION_X (1UL << 17) /* Window can be moved automatically in X axis */
+#define WM_CF_MOTION_Y (1UL << 18) /* Window can be moved automatically in Y axis */
+
+#define WM_CF_GESTURE (1UL << 19) /* Marks the window to be a able to receive gesture messages */
+
+#define WM_CF_ZOOM (1UL << 20) /* Window can be scaled automatically by multi touch gesture input */
+
+#define WM_CF_MOTION_R (1UL << 21) // Window can be rotated
+
+/*********************************************************************
+*
+* Window manager types
+*/
+typedef struct WM_Obj WM_Obj;
+typedef struct WM_MESSAGE WM_MESSAGE;
+
+typedef void WM_CALLBACK( WM_MESSAGE * pMsg);
+
+struct WM_MESSAGE {
+ int MsgId; /* type of message */
+ WM_HWIN hWin; /* Destination window */
+ WM_HWIN hWinSrc; /* Source window */
+ union {
+ const void * p; /* Message specific data pointer */
+ int v;
+ PTR_ADDR u;
+ GUI_COLOR Color;
+ void (* pFunc)(void);
+ } Data;
+};
+
+struct WM_Obj {
+ GUI_RECT Rect; /* Outer dimensions of window */
+ GUI_RECT InvalidRect; /* Invalid rectangle */
+ WM_CALLBACK* cb; /* Ptr to notification callback */
+ WM_HWIN hNextLin; /* Next window in linear list */
+ WM_HWIN hParent;
+ WM_HWIN hFirstChild;
+ WM_HWIN hNext;
+ #if WM_SUPPORT_STATIC_MEMDEV
+ GUI_MEMDEV_Handle hMem; /* Static memory device */
+ #endif
+ U32 Status; /* Status flags */
+ #if WM_SUPPORT_CPP
+ void * ObjPtr;
+ #endif
+};
+
+typedef void WM_tfPollPID(void);
+typedef void WM_tfForEach(WM_HWIN hWin, void * pData);
+
+typedef void (* WM_tfInvalidateParent) (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
+typedef void (* WM_tfInvalidateDrawFunc)(WM_HWIN hWin);
+typedef void (* WM_tfPaint1Func) (WM_HWIN hWin);
+
+typedef struct {
+ WM_HMEM hTimer;
+ WM_HWIN hWin;
+ int UserId;
+} WM_TIMER_OBJ;
+
+/*********************************************************************
+*
+* General control routines
+*/
+void WM_Activate (void);
+void WM_Deactivate(void);
+void WM_Init (void);
+int WM_Exec (void); /* Execute all jobs ... Return 0 if nothing was done. */
+int WM_Exec1 (void); // Execute only one job
+U32 WM_SetCreateFlags(U32 Flags);
+WM_tfPollPID * WM_SetpfPollPID(WM_tfPollPID * pf);
+
+/*********************************************************************
+*
+* Window manager interface
+*/
+void WM_AttachWindow (WM_HWIN hWin, WM_HWIN hParent);
+void WM_AttachWindowAt (WM_HWIN hWin, WM_HWIN hParent, int x, int y);
+int WM_CheckScrollPos (WM_SCROLL_STATE * pScrollState, int Pos, int LowerDist, int UpperDist); /* not to be documented (may change in future version) */
+void WM_ClrHasTrans (WM_HWIN hWin);
+WM_HWIN WM_CreateWindow (int x0, int y0, int xSize, int ySize, U32 Style, WM_CALLBACK * cb, int NumExtraBytes);
+WM_HWIN WM_CreateWindowAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hWinParent, U32 Style, WM_CALLBACK* cb, int NumExtraBytes);
+void WM_DeleteWindow (WM_HWIN hWin);
+void WM_DetachWindow (WM_HWIN hWin);
+void WM_EnableGestures (WM_HWIN hWin, int OnOff);
+int WM_GetHasTrans (WM_HWIN hWin);
+WM_HWIN WM_GetFocusedWindow (void);
+int WM_GetInvalidRect (WM_HWIN hWin, GUI_RECT * pRect);
+int WM_GetStayOnTop (WM_HWIN hWin);
+void WM_HideWindow (WM_HWIN hWin);
+void WM_InvalidateArea (const GUI_RECT * pRect);
+void WM_InvalidateRect (WM_HWIN hWin, const GUI_RECT * pRect);
+void WM_InvalidateWindow (WM_HWIN hWin);
+void WM_InvalidateWindowAndDescsEx(WM_HWIN hWin, const GUI_RECT * pInvalidRect, U16 Flags);
+void WM_InvalidateWindowAndDescs (WM_HWIN hWin); /* not to be documented (may change in future version) */
+int WM_IsEnabled (WM_HWIN hObj);
+char WM_IsCompletelyCovered (WM_HWIN hWin); /* Checks if the window is completely covered by other windows */
+char WM_IsCompletelyVisible (WM_HWIN hWin); /* Is the window completely visible ? */
+int WM_IsFocusable (WM_HWIN hWin);
+int WM_IsVisible (WM_HWIN hWin);
+int WM_IsWindow (WM_HWIN hWin); /* Check validity */
+void WM_Rect2Screen (WM_HWIN hWin, GUI_RECT * pRect);
+void WM_Rect2Client (WM_HWIN hWin, GUI_RECT * pRect);
+void WM_SetAnchor (WM_HWIN hWin, U16 AnchorFlags);
+void WM_SetHasTrans (WM_HWIN hWin);
+void WM_SetId (WM_HWIN hObj, int Id);
+void WM_SetStayOnTop (WM_HWIN hWin, int OnOff);
+void WM_SetTransState (WM_HWIN hWin, unsigned State);
+void WM_ShowWindow (WM_HWIN hWin);
+void WM_ValidateRect (WM_HWIN hWin, const GUI_RECT * pRect);
+void WM_ValidateWindow (WM_HWIN hWin);
+void WM_XY2Screen (WM_HWIN hWin, int * px, int * py);
+void WM_XY2Client (WM_HWIN hWin, int * px, int * py);
+
+#define WM_GetFocussedWindow WM_GetFocusedWindow
+#define WM_IsFocussable WM_IsFocusable
+
+/* Gesture support */
+void WM_GESTURE_Enable (int OnOff);
+int WM_GESTURE_EnableEx(int OnOff, int MaxFactor);
+void WM_GESTURE_Exec (void);
+I32 WM_GESTURE_SetThresholdAngle(I32 ThresholdAngle);
+I32 WM_GESTURE_SetThresholdDist (I32 ThresholdDist);
+
+/* Motion support */
+void WM_MOTION_Enable (int OnOff);
+void WM_MOTION_SetMovement (WM_HWIN hWin, int Axis, I32 Speed, I32 Dist);
+void WM_MOTION_SetMotion (WM_HWIN hWin, int Axis, I32 Speed, I32 Deceleration);
+void WM_MOTION_SetMoveable (WM_HWIN hWin, U32 Flags, int OnOff);
+void WM_MOTION_SetDeceleration (WM_HWIN hWin, int Axis, I32 Deceleration);
+unsigned WM_MOTION_SetDefaultPeriod(unsigned Period);
+void WM_MOTION_SetSpeed (WM_HWIN hWin, int Axis, I32 Velocity);
+void WM_MOTION_SetMinMotion (unsigned MinMotion);
+void WM_MOTION_SetThreshold (unsigned Threshold);
+
+/* Motion support, private interface */
+WM_HMEM WM_MOTION__CreateContext(void);
+void WM_MOTION__DeleteContext(WM_HMEM hContext);
+
+/* Motion support, private function(s) */
+void WM__SetMotionCallback (void(* cbMotion) (GUI_PID_STATE * pState, void * p));
+
+/* Static memory devices */
+#if (GUI_SUPPORT_MEMDEV)
+ #define GUI_MEMDEV_EDGE_LEFT 0
+ #define GUI_MEMDEV_EDGE_RIGHT 1
+ #define GUI_MEMDEV_EDGE_TOP 2
+ #define GUI_MEMDEV_EDGE_BOTTOM 3
+
+ int GUI_MEMDEV_BlendWinBk (WM_HWIN hWin, int Period, U32 BlendColor, U8 BlendIntens);
+ int GUI_MEMDEV_BlurAndBlendWinBk(WM_HWIN hWin, int Period, U8 BlurDepth, U32 BlendColor, U8 BlendIntens);
+ int GUI_MEMDEV_BlurWinBk (WM_HWIN hWin, int Period, U8 BlurDepth);
+ void GUI_MEMDEV_CreateStatic (WM_HWIN hWin);
+ GUI_MEMDEV_Handle GUI_MEMDEV_CreateWindowDevice(WM_HWIN hWin);
+ int GUI_MEMDEV_FadeInWindow (WM_HWIN hWin, int Period);
+ int GUI_MEMDEV_FadeOutWindow (WM_HWIN hWin, int Period);
+ GUI_MEMDEV_Handle GUI_MEMDEV_GetStaticDevice (WM_HWIN hWin);
+ GUI_MEMDEV_Handle GUI_MEMDEV_GetWindowDevice (WM_HWIN hWin);
+ int GUI_MEMDEV_MoveInWindow (WM_HWIN hWin, int x, int y, int a180, int Period);
+ int GUI_MEMDEV_MoveOutWindow (WM_HWIN hWin, int x, int y, int a180, int Period);
+ void GUI_MEMDEV_Paint1Static (WM_HWIN hWin); /* not to be documented */
+ int GUI_MEMDEV_ShiftInWindow (WM_HWIN hWin, int Period, int Direction);
+ int GUI_MEMDEV_ShiftOutWindow (WM_HWIN hWin, int Period, int Direction);
+ int GUI_MEMDEV_SwapWindow (WM_HWIN hWin, int Period, int Edge);
+
+ void GUI_MEMDEV__CreateStatic (WM_HWIN hWin);
+#endif
+
+/* Move/resize windows */
+void WM_MoveWindow (WM_HWIN hWin, int dx, int dy);
+void WM_ResizeWindow (WM_HWIN hWin, int dx, int dy);
+void WM_MoveTo (WM_HWIN hWin, int x, int y);
+void WM_MoveChildTo (WM_HWIN hWin, int x, int y);
+void WM_SetSize (WM_HWIN hWin, int XSize, int YSize);
+void WM_SetWindowPos (WM_HWIN hWin, int xPos, int yPos, int xSize, int ySize);
+int WM_SetXSize (WM_HWIN hWin, int xSize);
+int WM_SetYSize (WM_HWIN hWin, int ySize);
+int WM_SetScrollbarH (WM_HWIN hWin, int OnOff); /* not to be documented (may change in future version) */
+int WM_SetScrollbarV (WM_HWIN hWin, int OnOff); /* not to be documented (may change in future version) */
+
+/* ToolTip support */
+#define WM_TOOLTIP_PI_FIRST 0
+#define WM_TOOLTIP_PI_SHOW 1
+#define WM_TOOLTIP_PI_NEXT 2
+
+#define WM_TOOLTIP_CI_BK 0
+#define WM_TOOLTIP_CI_FRAME 1
+#define WM_TOOLTIP_CI_TEXT 2
+
+typedef WM_HMEM WM_TOOLTIP_HANDLE;
+
+typedef struct {
+ int Id;
+ const char * pText;
+} TOOLTIP_INFO;
+
+int WM_TOOLTIP_AddTool (WM_TOOLTIP_HANDLE hToolTip, WM_HWIN hTool, const char * pText);
+WM_TOOLTIP_HANDLE WM_TOOLTIP_Create (WM_HWIN hDlg, const TOOLTIP_INFO * pInfo, unsigned NumItems);
+void WM_TOOLTIP_Delete (WM_TOOLTIP_HANDLE hToolTip);
+GUI_COLOR WM_TOOLTIP_SetDefaultColor (unsigned Index, GUI_COLOR Color);
+const GUI_FONT * WM_TOOLTIP_SetDefaultFont (const GUI_FONT * pFont);
+unsigned WM_TOOLTIP_SetDefaultPeriod(unsigned Index, unsigned Period);
+
+/* ToolTip support, private */
+void WM__SetToolTipCallback(void(* cbToolTip)(GUI_PID_STATE * pState, WM_HWIN));
+
+/* Timer */
+#ifdef GUI_X_CREATE_TIMER
+ int WM_CreateTimer (WM_HWIN hWin, int UserID, int Period, int Mode); /* not to be documented (may change in future version) */
+ void WM_DeleteTimer (WM_HWIN hWin, int UserId); /* not to be documented (may change in future version) */
+#else
+ WM_HMEM WM_CreateTimer (WM_HWIN hWin, int UserID, int Period, int Mode); /* not to be documented (may change in future version) */
+ void WM_DeleteTimer (WM_HMEM hTimer); /* not to be documented (may change in future version) */
+ void WM_RestartTimer(WM_HMEM hTimer, int Period);
+#endif
+int WM_GetTimerId(WM_HTIMER hTimer);
+
+/* Diagnostics */
+int WM_GetNumWindows(void);
+int WM_GetNumInvalidWindows(void);
+
+/* Scroll state related functions */
+void WM_CheckScrollBounds(WM_SCROLL_STATE * pScrollState); /* not to be documented (may change in future version) */
+int WM_GetScrollPosH (WM_HWIN hWin);
+int WM_GetScrollPosV (WM_HWIN hWin);
+void WM_SetScrollPosH (WM_HWIN hWin, unsigned ScrollPos);
+void WM_SetScrollPosV (WM_HWIN hWin, unsigned ScrollPos);
+int WM_SetScrollValue (WM_SCROLL_STATE * pScrollState, int v); /* not to be documented (may change in future version) */
+
+/* Get / Set (new) callback function */
+WM_CALLBACK * WM_SetCallback(WM_HWIN hWin, WM_CALLBACK * cb);
+WM_CALLBACK * WM_GetCallback(WM_HWIN hWin);
+
+/* Get size/origin of a window */
+void WM_GetClientRect (GUI_RECT * pRect);
+void WM_GetClientRectEx (WM_HWIN hWin, GUI_RECT * pRect);
+void WM_GetInsideRect (GUI_RECT * pRect);
+void WM_GetInsideRectEx (WM_HWIN hWin, GUI_RECT * pRect);
+void WM_GetInsideRectExScrollbar(WM_HWIN hWin, GUI_RECT * pRect); /* not to be documented (may change in future version) */
+void WM_GetWindowRect (GUI_RECT * pRect);
+void WM_GetWindowRectEx (WM_HWIN hWin, GUI_RECT * pRect);
+int WM_GetOrgX (void);
+int WM_GetOrgY (void);
+int WM_GetWindowOrgX (WM_HWIN hWin);
+int WM_GetWindowOrgY (WM_HWIN hWin);
+int WM_GetWindowSizeX (WM_HWIN hWin);
+int WM_GetWindowSizeY (WM_HWIN hWin);
+WM_HWIN WM_GetFirstChild (WM_HWIN hWin);
+WM_HWIN WM_GetNextSibling (WM_HWIN hWin);
+WM_HWIN WM_GetParent (WM_HWIN hWin);
+WM_HWIN WM_GetPrevSibling (WM_HWIN hWin);
+int WM_GetId (WM_HWIN hWin);
+WM_HWIN WM_GetScrollbarV (WM_HWIN hWin);
+WM_HWIN WM_GetScrollbarH (WM_HWIN hWin);
+WM_HWIN WM_GetScrollPartner (WM_HWIN hWin);
+WM_HWIN WM_GetClientWindow (WM_HWIN hObj);
+GUI_COLOR WM_GetBkColor (WM_HWIN hObj);
+
+/* Change Z-Order of windows */
+void WM_BringToBottom(WM_HWIN hWin);
+void WM_BringToTop(WM_HWIN hWin);
+
+GUI_COLOR WM_SetDesktopColor (GUI_COLOR Color);
+GUI_COLOR WM_SetDesktopColorEx(GUI_COLOR Color, unsigned int LayerIndex);
+void WM_SetDesktopColors (GUI_COLOR Color);
+
+/* Select window used for drawing operations */
+WM_HWIN WM_SelectWindow (WM_HWIN hWin);
+WM_HWIN WM_GetActiveWindow (void);
+void WM_Paint (WM_HWIN hObj);
+void WM_Update (WM_HWIN hWin);
+void WM_PaintWindowAndDescs (WM_HWIN hWin);
+void WM_UpdateWindowAndDescs (WM_HWIN hWin);
+
+/* Get foreground/background windows */
+WM_HWIN WM_GetDesktopWindow (void);
+WM_HWIN WM_GetDesktopWindowEx(unsigned int LayerIndex);
+
+/* Reduce clipping area of a window */
+const GUI_RECT * WM_SetUserClipRect(const GUI_RECT * pRect);
+void WM_SetDefault (void);
+
+/* Use of memory devices */
+void WM_EnableMemdev (WM_HWIN hWin);
+void WM_DisableMemdev (WM_HWIN hWin);
+
+/* Automatic use of multiple buffers */
+int WM_MULTIBUF_Enable (int OnOff);
+int WM_MULTIBUF_EnableEx(int OnOff, U32 LayerMask);
+
+extern const GUI_MULTIBUF_API * WM_MULTIBUF__pAPI;
+
+typedef void (* T_WM_EXEC_GESTURE)(void);
+
+extern T_WM_EXEC_GESTURE WM__pExecGestures;
+
+/* ... */
+int WM_OnKey(int Key, int Pressed);
+void WM_MakeModal(WM_HWIN hWin);
+int WM_SetModalLayer(int LayerIndex);
+int WM_GetModalLayer(void);
+
+/*********************************************************************
+*
+* Message related functions
+*
+* Please note that some of these functions do not yet show up in the
+* documentation, as they should not be required by application program.
+*/
+void WM_NotifyParent (WM_HWIN hWin, int Notification);
+void WM_SendMessage (WM_HWIN hWin, WM_MESSAGE * p);
+void WM_SendMessageNoPara (WM_HWIN hWin, int MsgId); /* not to be documented (may change in future */
+void WM_DefaultProc (WM_MESSAGE * pMsg);
+int WM_BroadcastMessage (WM_MESSAGE * pMsg);
+void WM_SetScrollState (WM_HWIN hWin, const WM_SCROLL_STATE * pState);
+void WM_SetEnableState (WM_HWIN hItem, int State);
+void WM_SendToParent (WM_HWIN hWin, WM_MESSAGE * pMsg);
+int WM_HasFocus (WM_HWIN hWin);
+int WM_SetFocus (WM_HWIN hWin);
+WM_HWIN WM_SetFocusOnNextChild (WM_HWIN hParent); /* Set the focus to the next child */
+WM_HWIN WM_SetFocusOnPrevChild (WM_HWIN hParent); /* Set the focus to the previous child */
+WM_HWIN WM_GetDialogItem (WM_HWIN hWin, int Id);
+void WM_EnableWindow (WM_HWIN hWin);
+void WM_DisableWindow (WM_HWIN hWin);
+void WM_GetScrollState (WM_HWIN hObj, WM_SCROLL_STATE * pScrollState);
+
+/*********************************************************************
+*
+* Managing user data
+*/
+int WM_GetUserData (WM_HWIN hWin, void * pDest, int SizeOfBuffer);
+int WM_SetUserData (WM_HWIN hWin, const void * pSrc, int SizeOfBuffer);
+int WM__GetUserDataEx(WM_HWIN hWin, void * pDest, int NumBytes, int SizeOfObject);
+int WM__SetUserDataEx(WM_HWIN hWin, const void * pSrc, int NumBytes, int SizeOfObject);
+
+/*********************************************************************
+*
+* Capturing input focus
+*/
+int WM_HasCaptured (WM_HWIN hWin);
+void WM_SetCapture (WM_HWIN hObj, int AutoRelease);
+void WM_SetCaptureMove(WM_HWIN hWin, const GUI_PID_STATE * pState, int MinVisibility, int LimitTop); /* Not yet documented */
+void WM_ReleaseCapture(void);
+
+/*********************************************************************
+*
+* Misc routines
+*/
+int WM_HandlePID (void);
+WM_HWIN WM_Screen2hWin (int x, int y);
+WM_HWIN WM_Screen2hWinEx (WM_HWIN hStop, int x, int y);
+void WM_ForEachDesc (WM_HWIN hWin, WM_tfForEach * pcb, void * pData);
+void WM_SetScreenSize (int xSize, int ySize);
+int WM_PollSimMsg (void);
+int WM_GetWindowInfo (WM_WINDOW_INFO * pInfo, int FirstWindow);
+
+/*********************************************************************
+*
+* Diagnostics routines
+*/
+#if (WM_SUPPORT_DIAG)
+void WM_DIAG_EnableInvalidationColoring(int OnOff);
+#endif
+
+/*********************************************************************
+*
+* Macros for compatibility with older versions
+*/
+#if WM_COMPATIBLE_MODE
+ #define HBWIN WM_HWIN
+ #define HBWIN_NULL WM_HWIN_NULL
+
+ #define WM_HideWin WM_HideWindow
+ #define WM_ShowWin WM_ShowWindow
+ #define WM_GetKey GUI_GetKey
+ #define WM_WaitKey GUI_WaitKey
+
+ #define WM_ExecIdle WM_Exec
+ #define WM_ExecIdle1 WM_Exec1
+
+ #define WM_Invalidate WM_InvalidateWindow
+ #define WM_GetWinRect WM_GetWindowRect
+ #define WM_GetWinOrgX WM_GetWindowOrgX
+ #define WM_GetWinOrgY WM_GetWindowOrgY
+ #define WM_GetWinSizeX WM_GetWindowSizeX
+ #define WM_GetWinSizeY WM_GetWindowSizeY
+ #define WM_GetXSize WM_GetWindowSizeX
+ #define WM_GetYSize WM_GetWindowSizeY
+ #define WM_SelWin WM_SelectWindow
+ #define WM_GetBackgroundWindow WM_GetDesktopWindow
+ #define WM_GetForegroundWindow 0
+ #define WM_SetForegroundWindow WM_BringToTop
+ #define WM_SetUserClipArea WM_SetUserClipRect
+
+
+ #define WM_Start()
+ #define WM_Stop()
+ #define WM_SetBkWindowColor(Color) WM_SetDesktopColor(Color)
+
+#endif
+
+
+#endif /* GUI_WINSUPPORT */
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* WM_H */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WM_GUI.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,82 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : WM_GUI.h
+Purpose : Windows manager include for low level GUI routines
+----------------------------------------------------------------------
+*/
+
+#ifndef WM_GUI_H /* Make sure we only include it once */
+#define WM_GUI_H
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+int WM__InitIVRSearch(const GUI_RECT* pMaxRect);
+int WM__GetNextIVR (void);
+int WM__GetOrgX_AA(void);
+int WM__GetOrgY_AA(void);
+
+#define WM_ITERATE_START(pRect) \
+ { \
+ if (WM__InitIVRSearch(pRect)) \
+ do {
+
+#define WM_ITERATE_END() \
+ } while (WM__GetNextIVR()); \
+ }
+
+#define WM_ADDORGX(x) (x += GUI_pContext->xOff)
+#define WM_ADDORGY(y) (y += GUI_pContext->yOff)
+#define WM_ADDORG(x0,y0) WM_ADDORGX(x0); WM_ADDORGY(y0)
+#define WM_ADDORGX_AA(x) (x += WM__GetOrgX_AA())
+#define WM_ADDORGY_AA(y) (y += WM__GetOrgY_AA())
+#define WM_ADDORG_AA(x0,y0) WM_ADDORGX_AA(x0); WM_ADDORGY_AA(y0)
+#define WM_SUBORGX(x) (x -= GUI_pContext->xOff)
+#define WM_SUBORGY(y) (y -= GUI_pContext->yOff)
+#define WM_SUBORG(x0,y0) WM_SUBORGX(x0); WM_SUBORGY(y0)
+
+#if defined(__cplusplus)
+ }
+#endif
+
+
+#endif /* Avoid multiple inclusion */
+
+/*************************** End of file ****************************/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emWin/Include/WM_Intern.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,265 @@
+/*********************************************************************
+* SEGGER Software GmbH *
+* Solutions for real time microcontroller applications *
+**********************************************************************
+* *
+* (c) 1996 - 2018 SEGGER Microcontroller GmbH *
+* *
+* Internet: www.segger.com Support: support@segger.com *
+* *
+**********************************************************************
+
+** emWin V5.48 - Graphical user interface for embedded applications **
+All Intellectual Property rights in the Software belongs to SEGGER.
+emWin is protected by international copyright laws. Knowledge of the
+source code may not be used to write a similar product. This file may
+only be used in accordance with the following terms:
+
+The software has been licensed by SEGGER Software GmbH to Nuvoton Technology Corporationat the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan
+for the purposes of creating libraries for its
+Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation
+under the terms and conditions of an End User
+License Agreement supplied with the libraries.
+Full source code is available at: www.segger.com
+
+We appreciate your understanding and fairness.
+----------------------------------------------------------------------
+Licensing information
+Licensor: SEGGER Software GmbH
+Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan
+Licensed SEGGER software: emWin
+License number: GUI-00735
+License model: emWin License Agreement, signed February 27, 2018
+Licensed platform: Cortex-M and ARM9 32-bit series microcontroller designed and manufactured by or for Nuvoton Technology Corporation
+----------------------------------------------------------------------
+Support and Update Agreement (SUA)
+SUA period: 2018-03-26 - 2019-03-27
+Contact to extend SUA: sales@segger.com
+----------------------------------------------------------------------
+File : WM_Intern.h
+Purpose : Windows manager internal include
+----------------------------------------------------------------------
+*/
+
+#ifndef WM_INTERN_H /* Make sure we only include it once */
+#define WM_INTERN_H /* Make sure we only include it once */
+
+#include "WM.h"
+#include "GUI_Private.h"
+
+
+#if defined(__cplusplus)
+extern "C" { /* Make sure we have C-declarations in C++ programs */
+#endif
+
+#if GUI_WINSUPPORT
+
+/*********************************************************************
+*
+* defines
+*
+**********************************************************************
+
+ The following could be placed in a file of its own as it is not
+ used outside of the window manager
+
+*/
+/* Basic Windows status flags.
+ For module-internally use only !
+*/
+#define WM_SF_HASTRANS WM_CF_HASTRANS
+#define WM_SF_MEMDEV WM_CF_MEMDEV
+#define WM_SF_MEMDEV_ON_REDRAW WM_CF_MEMDEV_ON_REDRAW
+#define WM_SF_DISABLED WM_CF_DISABLED /* Disabled: Does not receive PID (mouse & touch) input */
+#define WM_SF_ISVIS WM_CF_SHOW /* Is visible flag */
+
+#define WM_SF_STAYONTOP WM_CF_STAYONTOP
+#define WM_SF_LATE_CLIP WM_CF_LATE_CLIP
+#define WM_SF_ANCHOR_RIGHT WM_CF_ANCHOR_RIGHT
+#define WM_SF_ANCHOR_BOTTOM WM_CF_ANCHOR_BOTTOM
+#define WM_SF_ANCHOR_LEFT WM_CF_ANCHOR_LEFT
+#define WM_SF_ANCHOR_TOP WM_CF_ANCHOR_TOP
+
+#define WM_SF_INVALID WM_CF_ACTIVATE /* We reuse this flag, as it is create only and Invalid is status only */
+
+#define WM_SF_CONST_OUTLINE WM_CF_CONST_OUTLINE /* Constant outline.*/
+
+#define WM_H2P(hWin) ((WM_Obj*)GUI_ALLOC_h2p(hWin))
+
+
+#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_LOG_WARNINGS
+ #define WM_ASSERT_NOT_IN_PAINT() { if (WM__PaintCallbackCnt) \
+ GUI_DEBUG_ERROROUT("Function may not be called from within a paint event"); \
+ }
+#else
+ #define WM_ASSERT_NOT_IN_PAINT()
+#endif
+
+/*********************************************************************
+*
+* Data types & structures
+*
+**********************************************************************
+*/
+typedef struct {
+ WM_HWIN hOld;
+ WM_HWIN hNew;
+} WM_NOTIFY_CHILD_HAS_FOCUS_INFO;
+
+typedef struct WM_CRITICAL_HANDLE {
+ struct WM_CRITICAL_HANDLE * pNext;
+ volatile WM_HWIN hWin;
+} WM_CRITICAL_HANDLE;
+
+/*********************************************************************
+*
+* Data (extern)
+*
+**********************************************************************
+*/
+extern U32 WM__CreateFlags;
+extern WM_HWIN WM__ahCapture[GUI_NUM_LAYERS];
+extern WM_HWIN WM__ahWinFocus[GUI_NUM_LAYERS];
+extern char WM__CaptureReleaseAuto;
+extern WM_tfPollPID * WM_pfPollPID;
+extern U8 WM__PaintCallbackCnt; /* Public for assertions only */
+extern WM_HWIN WM__hCreateStatic;
+
+#if WM_SUPPORT_TRANSPARENCY
+ extern int WM__TransWindowCnt;
+ extern WM_HWIN WM__hATransWindow;
+#endif
+
+#if WM_SUPPORT_DIAG
+ extern void (*WM__pfShowInvalid)(WM_HWIN hWin);
+#endif
+
+extern WM_CRITICAL_HANDLE WM__aCHWinModal[GUI_NUM_LAYERS];
+extern WM_CRITICAL_HANDLE WM__aCHWinLast[GUI_NUM_LAYERS];
+extern int WM__ModalLayer;
+
+#if GUI_SUPPORT_MOUSE
+ extern WM_CRITICAL_HANDLE WM__aCHWinMouseOver[GUI_NUM_LAYERS];
+#endif
+
+#ifdef WM_C
+ #define GUI_EXTERN
+#else
+ #define GUI_EXTERN extern
+#endif
+
+#if (GUI_NUM_LAYERS > 1)
+ GUI_EXTERN U32 WM__InvalidLayerMask;
+ GUI_EXTERN unsigned WM__TouchedLayer;
+ #define WM__TOUCHED_LAYER WM__TouchedLayer
+#else
+ #define WM__TOUCHED_LAYER GUI_CURSOR_LAYER
+#endif
+
+GUI_EXTERN U16 WM__NumWindows;
+GUI_EXTERN U16 WM__NumInvalidWindows;
+GUI_EXTERN WM_HWIN WM__FirstWin;
+GUI_EXTERN WM_CRITICAL_HANDLE * WM__pFirstCriticalHandle;
+
+GUI_EXTERN WM_HWIN WM__ahDesktopWin[GUI_NUM_LAYERS];
+GUI_EXTERN GUI_COLOR WM__aBkColor[GUI_NUM_LAYERS];
+
+#undef GUI_EXTERN
+
+/*********************************************************************
+*
+* Prototypes
+*
+**********************************************************************
+*/
+void WM__ActivateClipRect (void);
+int WM__ClipAtParentBorders (GUI_RECT * pRect, WM_HWIN hWin);
+void WM__Client2Screen (const WM_Obj * pWin, GUI_RECT * pRect);
+void WM__DeleteAssocTimer (WM_HWIN hWin);
+void WM__DeleteSecure (WM_HWIN hWin);
+void WM__DetachWindow (WM_HWIN hChild);
+void WM__ForEachDesc (WM_HWIN hWin, WM_tfForEach * pcb, void * pData);
+void WM__GetClientRectWin (const WM_Obj * pWin, GUI_RECT * pRect);
+void WM__GetClientRectEx (WM_HWIN hWin, GUI_RECT * pRect);
+WM_HWIN WM__GetFirstSibling (WM_HWIN hWin);
+WM_HWIN WM__GetFocusedChild (WM_HWIN hWin);
+int WM__GetHasFocus (WM_HWIN hWin);
+WM_HWIN WM__GetLastSibling (WM_HWIN hWin);
+WM_HWIN WM__GetPrevSibling (WM_HWIN hWin);
+int WM__GetTopLevelLayer (WM_HWIN hWin);
+int WM__GetWindowSizeX (const WM_Obj * pWin);
+int WM__GetWindowSizeY (const WM_Obj * pWin);
+void WM__InsertWindowIntoList (WM_HWIN hWin, WM_HWIN hParent);
+void WM__Invalidate1Abs (WM_HWIN hWin, const GUI_RECT * pRect);
+void WM__InvalidateAreaBelow (const GUI_RECT * pRect, WM_HWIN StopWin);
+void WM__InvalidateRectEx (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
+void WM__InvalidateTransAreaAbove(const GUI_RECT * pRect, WM_HWIN StopWin);
+int WM__IntersectRect (GUI_RECT * pDest, const GUI_RECT * pr0, const GUI_RECT * pr1);
+int WM__IsAncestor (WM_HWIN hChild, WM_HWIN hParent);
+int WM__IsAncestorOrSelf (WM_HWIN hChild, WM_HWIN hParent);
+int WM__IsChild (WM_HWIN hWin, WM_HWIN hParent);
+int WM__IsEnabled (WM_HWIN hWin);
+int WM__IsInModalArea (WM_HWIN hWin);
+int WM__IsInWindow (WM_Obj * pWin, int x, int y);
+int WM__IsWindow (WM_HWIN hWin);
+void WM__LeaveIVRSearch (void);
+void WM__MoveTo (WM_HWIN hWin, int x, int y);
+void WM__MoveWindow (WM_HWIN hWin, int dx, int dy);
+void WM__NotifyVisChanged (WM_HWIN hWin, GUI_RECT * pRect);
+int WM__RectIsNZ (const GUI_RECT * pr);
+void WM__RemoveWindowFromList (WM_HWIN hWin);
+void WM__Screen2Client (const WM_Obj * pWin, GUI_RECT * pRect);
+void WM__SelectTopLevelLayer (WM_HWIN hWin);
+void WM__SendMsgNoData (WM_HWIN hWin, U8 MsgId);
+void WM__SendMessage (WM_HWIN hWin, WM_MESSAGE * pm);
+void WM__SendMessageIfEnabled (WM_HWIN hWin, WM_MESSAGE * pm);
+void WM__SendMessageNoPara (WM_HWIN hWin, int MsgId);
+void WM__SendPIDMessage (WM_HWIN hWin, WM_MESSAGE * pMsg);
+int WM__SetScrollbarH (WM_HWIN hWin, int OnOff);
+int WM__SetScrollbarV (WM_HWIN hWin, int OnOff);
+void WM__UpdateChildPositions (WM_Obj * pObj, int dx0, int dy0, int dx1, int dy1);
+void WM_PID__GetPrevState (GUI_PID_STATE * pPrevState, int Layer);
+void WM_PID__SetPrevState (GUI_PID_STATE * pPrevState, int Layer);
+void WM__SendTouchMessage (WM_HWIN hWin, WM_MESSAGE * pMsg);
+
+U16 WM_GetFlags (WM_HWIN hWin);
+int WM__Paint (WM_HWIN hWin);
+void WM__Paint1 (WM_HWIN hWin);
+void WM__AddCriticalHandle (WM_CRITICAL_HANDLE * pCH);
+void WM__RemoveCriticalHandle (WM_CRITICAL_HANDLE * pCH);
+void WM__SetLastTouched (WM_HWIN hWin);
+
+#if WM_SUPPORT_STATIC_MEMDEV
+ void WM__InvalidateDrawAndDescs(WM_HWIN hWin);
+#else
+ #define WM__InvalidateDrawAndDescs(hWin)
+#endif
+
+/* Static memory devices */
+#if (GUI_SUPPORT_MEMDEV)
+ typedef struct {
+ int xSize, ySize; // Size of bk window
+ } EFFECT_CONTEXT;
+
+ int GUI_MEMDEV__CalcParaFadeIn (int Period, int TimeUsed);
+ void GUI_MEMDEV__ClipBK (EFFECT_CONTEXT * pContext);
+ void GUI_MEMDEV__RemoveStaticDevice(WM_HWIN hWin);
+ void GUI_MEMDEV__UndoClipBK (EFFECT_CONTEXT * pContext);
+#endif
+
+void WM__InvalidateParent(const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop);
+void WM__InvalidateRect (const GUI_RECT * pInvalidRect, WM_HWIN hParent, WM_HWIN hStop, U16 Flags);
+
+WM_tfInvalidateParent WM__SetInvalidateParentFunc(WM_tfInvalidateParent pfInvalidateParentFunc);
+WM_tfInvalidateDrawFunc WM__SetInvalidateDrawFunc (WM_tfInvalidateDrawFunc pfInvalidateDrawFunc);
+WM_tfPaint1Func WM__SetPaint1Func (WM_tfPaint1Func pfPaint1Func);
+
+#endif /* GUI_WINSUPPORT */
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* WM_INTERN_H */
+
+/*************************** End of file ****************************/
Binary file emWin/Lib/TOOLCHAIN_ARM/NUemWin_CM4_Keil.ar has changed
Binary file emWin/Lib/TOOLCHAIN_GCC/libNUemWin_CM4_GNU.a has changed
Binary file emWin/Tool/BmpCvtNuvoton.exe has changed
Binary file emWin/Tool/FontArchitect.exe has changed
Binary file emWin/Tool/GUIBuilder.exe has changed
Binary file emWin/Tool/JPEG2Movie.exe has changed
Binary file emWin/Tool/emWinPlayer.exe has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/M48XTouchPanel.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,154 @@
+
+#include "M480.h"
+
+//#include "stdlib.h"
+#include "GUI.h"
+//#include "W55FA93_adc.h"
+#include "M48XTouchPanel.h"
+//#include "lcdconf.h"
+
+
+
+int Init_TouchPanel(void)
+{
+ /* Enable peripheral clock */
+ CLK_EnableModuleClock(EADC_MODULE);
+
+ /* Peripheral clock source */
+ CLK_SetModuleClock(EADC_MODULE, 0, CLK_CLKDIV0_EADC(8));
+
+ /* Init ADC for TP */
+ /* Set input mode as single-end and enable the A/D converter */
+ EADC_Open(EADC, EADC_CTL_DIFFEN_SINGLE_END);
+
+ return 1;
+}
+
+static volatile uint32_t g_u32AdcIntFlag_TP;
+
+/*-----------------------------------------------*/
+// ADC01 ISR
+//
+/*-----------------------------------------------*/
+void ADC01_IRQHandler(void)
+{
+ /* Clear the A/D ADINT1 interrupt flag */
+ EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+
+ g_u32AdcIntFlag_TP = 1;
+
+}
+
+/*-----------------------------------------------*/
+// Get X Position from Touch Panel (ADC input)
+//
+/*-----------------------------------------------*/
+uint16_t Get_TP_X(void)
+{
+ uint16_t x_adc_in;
+
+ /*=== Get X from ADC input ===*/
+ GPIO_SetMode(PB, BIT9, GPIO_MODE_OUTPUT); // XR
+ GPIO_SetMode(PH, BIT5, GPIO_MODE_INPUT); // YD
+ GPIO_SetMode(PH, BIT4, GPIO_MODE_OUTPUT); // XL
+ PB9 = 1;
+ PH4 = 0;
+
+ /* Configure the GPB8 ADC analog input pins. */
+ SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk | SYS_GPB_MFPH_PB9MFP_Msk);
+ SYS->GPB_MFPH |= SYS_GPB_MFPH_PB8MFP_EADC0_CH8;
+
+ /* Disable the GPB8 digital input path to avoid the leakage current. */
+ GPIO_DISABLE_DIGITAL_PATH(PB, BIT8);
+
+ /* Configure the sample module 1 for analog input channel 8 and software trigger source.*/
+ EADC_ConfigSampleModule(EADC, 1, EADC_SOFTWARE_TRIGGER, 8); // YU
+
+ /* Clear the A/D ADINT1 interrupt flag for safe */
+ EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+
+ /* Enable the sample module 1 interrupt. */
+ EADC_ENABLE_INT(EADC, BIT1); //Enable sample module A/D ADINT1 interrupt.
+ EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 1, BIT1); //Enable sample module 1 interrupt.
+ NVIC_EnableIRQ(ADC1_IRQn);
+
+ /* Reset the ADC interrupt indicator and trigger sample module 1 to start A/D conversion */
+ g_u32AdcIntFlag_TP = 0;
+ EADC_START_CONV(EADC, BIT1);
+
+ /* Wait ADC interrupt (g_u32AdcIntFlag_TP will be set at IRQ_Handler function) */
+ //while(g_u32AdcIntFlag_TP == 0);
+ EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+ g_u32AdcIntFlag_TP = 1;
+ x_adc_in = EADC_GET_CONV_DATA(EADC, 1);
+ return x_adc_in;
+
+}
+
+
+/*-----------------------------------------------*/
+// Get Y Position from Touch Panel (ADC input)
+//
+/*-----------------------------------------------*/
+uint16_t Get_TP_Y(void)
+{
+ uint16_t y_adc_in;
+
+ /*=== Get Y from ADC input ===*/
+ GPIO_SetMode(PB, BIT8, GPIO_MODE_OUTPUT); // YU
+ GPIO_SetMode(PH, BIT5, GPIO_MODE_OUTPUT); // YD
+ GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT); // XL
+ PB8 = 1;
+ PH5 = 0;
+
+ /* Configure the GPB9 ADC analog input pins. */
+ SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB8MFP_Msk | SYS_GPB_MFPH_PB9MFP_Msk);
+ SYS->GPB_MFPH |= SYS_GPB_MFPH_PB9MFP_EADC0_CH9;
+
+ /* Disable the GPB9 digital input path to avoid the leakage current. */
+ GPIO_DISABLE_DIGITAL_PATH(PB, BIT9);
+
+ /* Configure the sample module 2 for analog input channel 9 and software trigger source.*/
+ EADC_ConfigSampleModule(EADC, 2, EADC_SOFTWARE_TRIGGER, 9); // XR
+
+ /* Clear the A/D ADINT1 interrupt flag for safe */
+ EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+
+ /* Enable the sample module 2 interrupt. */
+ EADC_ENABLE_INT(EADC, BIT2); //Enable sample module A/D ADINT1 interrupt.
+ EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 1, BIT2); //Enable sample module 2 interrupt.
+ NVIC_EnableIRQ(ADC1_IRQn);
+
+ /* Reset the ADC interrupt indicator and trigger sample module 2 to start A/D conversion */
+ g_u32AdcIntFlag_TP = 0;
+ EADC_START_CONV(EADC, BIT2);
+
+ /* Wait ADC interrupt (g_u32AdcIntFlag_TP will be set at IRQ_Handler function) */
+ //while(g_u32AdcIntFlag_TP == 0);
+ EADC_CLR_INT_FLAG(EADC, EADC_STATUS2_ADIF1_Msk);
+ g_u32AdcIntFlag_TP = 1;
+ y_adc_in = EADC_GET_CONV_DATA(EADC, 2);
+ return y_adc_in;
+
+}
+
+int Read_TouchPanel(int *x, int *y)
+{
+ *x = Get_TP_X();
+ *y = Get_TP_Y();
+ if ( (*x == 0xFFF) || (*y == 0xFFF) )
+ return 0;
+ else
+ return 1;
+}
+
+int Uninit_TouchPanel(void)
+{
+ return 1;
+}
+
+int Check_TouchPanel(void)
+{
+ return 0; //Pen up;
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/M48XTouchPanel.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,22 @@
+#ifndef __M48XTOUCHPANEL_H__
+#define __M48XTOUCHPANEL_H__
+
+#define __DEMO_TSFILE_ADDR__ 0x00040000 /* SPI flash 256KB address */
+
+#define __DEMO_TS_WIDTH__ 320
+#define __DEMO_TS_HEIGHT__ 240
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+int Init_TouchPanel(void);
+int Read_TouchPanel(int *x, int *y);
+int Uninit_TouchPanel(void);
+int Check_TouchPanel(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/fbutils.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,403 @@
+/*
+ * fbutils.c
+ *
+ * Utility routines for framebuffer interaction
+ *
+ * Copyright 2002 Russell King and Doug Lowder
+ *
+ * This file is placed under the GPL. Please see the
+ * file COPYING for details.
+ *
+ */
+
+//#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+//#include <unistd.h>
+//#include <sys/fcntl.h>
+//#include <sys/ioctl.h>
+//#include <sys/mman.h>
+//#include <sys/time.h>
+#include "fbutils.h"
+//#include "wbtypes.h"
+//#include "LCDconf.h"
+#include "M48XTouchPanel.h"
+#include "GUI.h"
+#if 0
+union multiptr
+{
+ unsigned char *p8;
+ unsigned short *p16;
+ unsigned long *p32;
+};
+#endif
+//static int con_fd, fb_fd, last_vt = -1;
+//static unsigned char *line_addr;
+//static int fb_fd=0;
+static int bytes_per_pixel=2;
+static unsigned colormap [13];
+static unsigned colormap2[13];
+unsigned int xres=__DEMO_TS_WIDTH__, yres=__DEMO_TS_HEIGHT__;
+
+int red_length = 5;
+int green_length = 6;
+int blue_length = 5;
+
+int red_offset = 11;
+int green_offset = 5;
+int blue_offset = 0;
+
+//extern void * g_VAFrameBuf;
+
+void line(int x1, int y1, int x2, int y2, unsigned colidx);
+
+void put_cross(int x, int y, unsigned colidx)
+{
+ line (x - 10, y, x - 2, y, colidx);
+ line (x + 2, y, x + 10, y, colidx);
+ line (x, y - 10, x, y - 2, colidx);
+ line (x, y + 2, x, y + 10, colidx);
+
+#if 1
+ line (x - 6, y - 9, x - 9, y - 9, colidx + 1);
+ line (x - 9, y - 8, x - 9, y - 6, colidx + 1);
+ line (x - 9, y + 6, x - 9, y + 9, colidx + 1);
+ line (x - 8, y + 9, x - 6, y + 9, colidx + 1);
+ line (x + 6, y + 9, x + 9, y + 9, colidx + 1);
+ line (x + 9, y + 8, x + 9, y + 6, colidx + 1);
+ line (x + 9, y - 6, x + 9, y - 9, colidx + 1);
+ line (x + 8, y - 9, x + 6, y - 9, colidx + 1);
+#else
+ line (x - 7, y - 7, x - 4, y - 4, colidx + 1);
+ line (x - 7, y + 7, x - 4, y + 4, colidx + 1);
+ line (x + 4, y - 4, x + 7, y - 7, colidx + 1);
+ line (x + 4, y + 4, x + 7, y + 7, colidx + 1);
+#endif
+}
+#if 0
+void put_char(int x, int y, int c, int colidx)
+{
+ int i,j,bits;
+
+ for (i = 0; i < font_vga_8x8.height; i++)
+ {
+ bits = font_vga_8x8.data [font_vga_8x8.height * c + i];
+ for (j = 0; j < font_vga_8x8.width; j++, bits <<= 1)
+ if (bits & 0x80)
+ pixel (x + j, y + i, colidx);
+ }
+}
+
+void put_string(int x, int y, char *s, unsigned colidx)
+{
+ int i;
+ for (i = 0; *s; i++, x += font_vga_8x8.width, s++)
+ put_char (x, y, *s, colidx);
+}
+
+void put_string_center(int x, int y, char *s, unsigned colidx)
+{
+ size_t sl = strlen (s);
+ put_string (x - (sl / 2) * font_vga_8x8.width,
+ y - font_vga_8x8.height / 2, s, colidx);
+}
+#endif
+void setcolor(unsigned colidx, unsigned value)
+{
+ unsigned res;
+ //unsigned short red, green, blue;
+// struct fb_cmap cmap;
+
+#ifdef DEBUG
+ if (colidx > 255)
+ {
+ fprintf (stderr, "WARNING: color index = %u, must be <256\n",
+ colidx);
+ return;
+ }
+#endif
+
+ switch (bytes_per_pixel)
+ {
+ default:
+ case 1:
+#if 0
+ res = colidx;
+ red = (value >> 8) & 0xff00;
+ green = value & 0xff00;
+ blue = (value << 8) & 0xff00;
+ cmap.start = colidx;
+ cmap.len = 1;
+ cmap.red = &red;
+ cmap.green = &green;
+ cmap.blue = &blue;
+ cmap.transp = NULL;
+#endif
+ break;
+ case 2:
+#if 0
+ red = (value >> 16) & 0xff;
+ green = (value >> 8) & 0xff;
+ blue = value & 0xff;
+ res = ((red >> (8 - red_length)) << red_offset) |
+ ((green >> (8 - green_length)) << green_offset) |
+ ((blue >> (8 - blue_length)) << blue_offset);
+#endif
+ case 4:
+ res = value;
+ }
+ colormap [colidx] = value;
+ GUI_SetColor(value);
+ GUI_DrawPixel(0, 0);
+ res = GUI_GetPixelIndex(0, 0);
+ colormap2[colidx] = res;
+ GUI_SetColor(0x00);
+ GUI_DrawPixel(0, 0);
+}
+#if 0
+static void __setpixel (union multiptr loc, unsigned xormode, unsigned color)
+{
+ switch(bytes_per_pixel)
+ {
+ case 1:
+ default:
+ if (xormode)
+ *loc.p8 ^= color;
+ else
+ *loc.p8 = color;
+ break;
+ case 2:
+ if (xormode)
+ *loc.p16 ^= color;
+ else
+ *loc.p16 = color;
+ break;
+ case 4:
+ if (xormode)
+ *loc.p32 ^= color;
+ else
+ *loc.p32 = color;
+ break;
+ }
+}
+#endif
+void pixel (int x, int y, unsigned colidx)
+{
+ unsigned xormode;
+ unsigned color, color2;
+ //union multiptr loc;
+
+ if ((x < 0) || (x >= __DEMO_TS_WIDTH__) ||
+ (y < 0) || (y >= __DEMO_TS_HEIGHT__))
+ return;
+
+ xormode = colidx & XORMODE;
+ colidx &= ~XORMODE;
+
+#ifdef DEBUG
+ if (colidx > 255)
+ {
+ fprintf (stderr, "WARNING: color value = %u, must be <256\n",
+ colidx);
+ return;
+ }
+#endif
+
+// loc.p8 = line_addr [y] + x * bytes_per_pixel;
+// line_addr = (unsigned char *)g_VAFrameBuf+ y*(LCD_XSIZE*bytes_per_pixel);
+ color = GUI_GetPixelIndex(x, y);
+ if ( color == colormap2[0] )
+ color = colormap[0];
+ else if ( color == colormap2[1] )
+ color = colormap[1];
+ else if ( color == colormap2[2] )
+ color = colormap[2];
+ else if ( color == colormap2[3] )
+ color = colormap[3];
+ else if ( color == colormap2[4] )
+ color = colormap[4];
+ else if ( color == colormap2[5] )
+ color = colormap[5];
+ else if ( color == colormap2[6] )
+ color = colormap[6];
+ else if ( color == colormap2[7] )
+ color = colormap[7];
+ else if ( color == colormap2[8] )
+ color = colormap[8];
+ else if ( color == colormap2[9] )
+ color = colormap[9];
+ else if ( color == colormap2[10] )
+ color = colormap[10];
+ else if ( color == colormap2[11] )
+ color = colormap[11];
+ else if ( color == colormap2[12] )
+ color = colormap[12];
+ color2 = colormap [colidx];
+ if (xormode)
+ color ^= color2;
+ else
+ color = color2;
+ GUI_SetColor(color);
+ GUI_DrawPixel(x, y);
+
+
+ //loc.p8 = line_addr + x*bytes_per_pixel;
+ //__setpixel(loc, xormode, colormap [colidx]);
+}
+
+void line(int x1, int y1, int x2, int y2, unsigned colidx)
+{
+ int tmp;
+ int dx = x2 - x1;
+ int dy = y2 - y1;
+
+ if (abs (dx) < abs (dy))
+ {
+ if (y1 > y2)
+ {
+ tmp = x1;
+ x1 = x2;
+ x2 = tmp;
+ tmp = y1;
+ y1 = y2;
+ y2 = tmp;
+ dx = -dx;
+ dy = -dy;
+ }
+ x1 <<= 16;
+ /* dy is apriori >0 */
+ dx = (dx << 16) / dy;
+ while (y1 <= y2)
+ {
+ pixel (x1 >> 16, y1, colidx);
+ x1 += dx;
+ y1++;
+ }
+ }
+ else
+ {
+ if (x1 > x2)
+ {
+ tmp = x1;
+ x1 = x2;
+ x2 = tmp;
+ tmp = y1;
+ y1 = y2;
+ y2 = tmp;
+ dx = -dx;
+ dy = -dy;
+ }
+ y1 <<= 16;
+ dy = dx ? (dy << 16) / dx : 0;
+ while (x1 <= x2)
+ {
+ pixel (x1, y1 >> 16, colidx);
+ y1 += dy;
+ x1++;
+ }
+ }
+}
+#if 1
+void rect (int x1, int y1, int x2, int y2, unsigned colidx)
+{
+ line (x1, y1, x2, y1, colidx);
+ line (x2, y1, x2, y2, colidx);
+ line (x2, y2, x1, y2, colidx);
+ line (x1, y2, x1, y1, colidx);
+}
+
+void fillrect (int x1, int y1, int x2, int y2, unsigned colidx)
+{
+ int tmp;
+ unsigned xormode;
+ unsigned color, color2;
+ //union multiptr loc;
+
+ /* Clipping and sanity checking */
+ if (x1 > x2)
+ {
+ tmp = x1;
+ x1 = x2;
+ x2 = tmp;
+ }
+ if (y1 > y2)
+ {
+ tmp = y1;
+ y1 = y2;
+ y2 = tmp;
+ }
+ if (x1 < 0) x1 = 0;
+ if (x1 >= xres) x1 = xres - 1;
+ if (x2 < 0) x2 = 0;
+ if (x2 >= xres) x2 = xres - 1;
+ if (y1 < 0) y1 = 0;
+ if (y1 >= yres) y1 = yres - 1;
+ if (y2 < 0) y2 = 0;
+ if (y2 >= yres) y2 = yres - 1;
+
+ if ((x1 > x2) || (y1 > y2))
+ return;
+
+ xormode = colidx & XORMODE;
+ colidx &= ~XORMODE;
+
+#ifdef DEBUG
+ if (colidx > 255)
+ {
+ fprintf (stderr, "WARNING: color value = %u, must be <256\n",
+ colidx);
+ return;
+ }
+#endif
+
+ color2 = colormap [colidx];
+
+ for (; y1 <= y2; y1++)
+ {
+// loc.p8 = line_addr [y1] + x1 * bytes_per_pixel;
+ //line_addr = (unsigned char *)g_VAFrameBuf+ y1*(LCD_XSIZE*bytes_per_pixel);
+ //loc.p8 = line_addr + x1* bytes_per_pixel;
+ for (tmp = x1; tmp <= x2; tmp++)
+ {
+ //__setpixel (loc, xormode, colidx);
+ //loc.p8 += bytes_per_pixel;
+ color = GUI_GetPixelIndex(tmp, y1);
+ if ( color == colormap2[0] )
+ color = colormap[0];
+ else if ( color == colormap2[1] )
+ color = colormap[1];
+ else if ( color == colormap2[2] )
+ color = colormap[2];
+ else if ( color == colormap2[3] )
+ color = colormap[3];
+ else if ( color == colormap2[4] )
+ color = colormap[4];
+ else if ( color == colormap2[5] )
+ color = colormap[5];
+ else if ( color == colormap2[6] )
+ color = colormap[6];
+ else if ( color == colormap2[7] )
+ color = colormap[7];
+ else if ( color == colormap2[8] )
+ color = colormap[8];
+ else if ( color == colormap2[9] )
+ color = colormap[9];
+ else if ( color == colormap2[10] )
+ color = colormap[10];
+ else if ( color == colormap2[11] )
+ color = colormap[11];
+ else if ( color == colormap2[12] )
+ color = colormap[12];
+ color2 = colormap [colidx];
+ if (xormode)
+ color ^= color2;
+ else
+ color = color2;
+ GUI_SetColor(color);
+ GUI_DrawPixel(tmp, y1);
+ }
+ }
+}
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tslib/fbutils.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,35 @@ +/* + * fbutils.h + * + * Headers for utility routines for framebuffer interaction + * + * Copyright 2002 Russell King and Doug Lowder + * + * This file is placed under the GPL. Please see the + * file COPYING for details. + * + */ + +#ifndef _FBUTILS_H +#define _FBUTILS_H + +//#include <asm/types.h> + +/* This constant, being ORed with the color index tells the library + * to draw in exclusive-or mode (that is, drawing the same second time + * in the same place will remove the element leaving the background intact). + */ +#define XORMODE 0x80000000 + +extern unsigned int xres, yres; + +void setcolor(unsigned colidx, unsigned value); +void put_cross(int x, int y, unsigned colidx); +void put_string(int x, int y, char *s, unsigned colidx); +void put_string_center(int x, int y, char *s, unsigned colidx); +void pixel (int x, int y, unsigned colidx); +void line (int x1, int y1, int x2, int y2, unsigned colidx); +void rect (int x1, int y1, int x2, int y2, unsigned colidx); +void fillrect (int x1, int y1, int x2, int y2, unsigned colidx); + +#endif /* _FBUTILS_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/testutils.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,309 @@
+/*
+ * tslib/src/ts_getxy.c
+ *
+ * Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the GPL. Please see the file
+ * COPYING for more details.
+ *
+ * $Id: testutils.c,v 1.2 2004/10/19 22:01:27 dlowder Exp $
+ *
+ * Waits for the screen to be touched, averages x and y sample
+ * coordinates until the end of contact
+ */
+
+//#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+//#include <unistd.h>
+//#include <sys/time.h>
+//#include "wbio.h"
+//#include "wbtypes.h"
+//#include "wblib.h"
+#include "tslib.h"
+#include "fbutils.h"
+#include "M48XTouchPanel.h"
+#include "GUI.h"
+
+static int sort_by_x(const void* a, const void *b)
+{
+ return (((struct ts_sample *)a)->x - ((struct ts_sample *)b)->x);
+}
+
+static int sort_by_y(const void* a, const void *b)
+{
+ return (((struct ts_sample *)a)->y - ((struct ts_sample *)b)->y);
+}
+
+void getxy(int *x, int *y)
+{
+#define MAX_SAMPLES 128
+ struct ts_sample samp[MAX_SAMPLES];
+ int index, middle;
+ int sumx, sumy;
+
+ printf("getxy\n");
+again:
+ do
+ {
+ if ( Read_TouchPanel(&sumx, &sumy) > 0 )
+ {
+ if ( (sumx < 0) || ( sumy < 0 ) )
+ continue;
+ break;
+ }
+ }
+ while (1);
+
+ /* Now collect up to MAX_SAMPLES touches into the samp array. */
+ index = 0;
+ do
+ {
+ if (index < MAX_SAMPLES-1)
+ index++;
+ if ( Read_TouchPanel(&sumx, &sumy) > 0)
+ {
+ samp[index].x = sumx;
+ samp[index].y = sumy;
+ samp[index].pressure = 1000;
+ }
+ else
+ {
+ samp[index].x = samp[index-1].x;
+ samp[index].y = samp[index-1].y;
+ samp[index].pressure = 0;
+ }
+
+// printf("%d %d %d\n", samp[index].x, samp[index].y , samp[index].pressure);
+ }
+ while (samp[index].pressure > 0);
+ //printf("Took %d samples...\n",index);
+
+ /*
+ * At this point, we have samples in indices zero to (index-1)
+ * which means that we have (index) number of samples. We want
+ * to calculate the median of the samples so that wild outliers
+ * don't skew the result. First off, let's assume that arrays
+ * are one-based instead of zero-based. If this were the case
+ * and index was odd, we would need sample number ((index+1)/2)
+ * of a sorted array; if index was even, we would need the
+ * average of sample number (index/2) and sample number
+ * ((index/2)+1). To turn this into something useful for the
+ * real world, we just need to subtract one off of the sample
+ * numbers. So for when index is odd, we need sample number
+ * (((index+1)/2)-1). Due to integer division truncation, we
+ * can simplify this to just (index/2). When index is even, we
+ * need the average of sample number ((index/2)-1) and sample
+ * number (index/2). Calculate (index/2) now and we'll handle
+ * the even odd stuff after we sort.
+ */
+ middle = index/2;
+ if (x)
+ {
+ qsort(samp, index, sizeof(struct ts_sample), sort_by_x);
+ if (index & 1)
+ *x = samp[middle].x;
+ else
+ *x = (samp[middle-1].x + samp[middle].x) / 2;
+ }
+ if (y)
+ {
+ qsort(samp, index, sizeof(struct ts_sample), sort_by_y);
+ if (index & 1)
+ *y = samp[middle].y;
+ else
+ *y = (samp[middle-1].y + samp[middle].y) / 2;
+ }
+ if ( (index <= 3) || ( *x < 0) || ( *y < 0 ) )
+ goto again;
+}
+
+extern int ts_phy2log(int *sumx, int *sumy);
+
+static int palette [] =
+{
+ /*0x000000, 0xffe080, 0xffffff, 0xe0c0a0, 0x304050, 0x80b8c0*/
+ GUI_MAKE_COLOR(0x000000), GUI_MAKE_COLOR(0x80e0ff), GUI_MAKE_COLOR(0xffffff), GUI_MAKE_COLOR(0xa0c0e0), GUI_MAKE_COLOR(0x504030), GUI_MAKE_COLOR(0xc0b880),
+ GUI_MAKE_COLOR(0x7F1F00), GUI_MAKE_COLOR(0x20201F), GUI_MAKE_COLOR(0x5F3F1F), GUI_MAKE_COLOR(0xAFBFCF), GUI_MAKE_COLOR(0xF080D0), GUI_MAKE_COLOR(0x3F477F),
+ GUI_MAKE_COLOR(0x207820)
+};
+#define NR_COLORS (sizeof (palette) / sizeof (palette [0]))
+
+#define NR_BUTTONS 3
+struct ts_button
+{
+ int x, y, w, h;
+ char *text;
+ int flags;
+#define BUTTON_ACTIVE 0x00000001
+};
+static struct ts_button buttons [NR_BUTTONS];
+
+/* [inactive] border fill text [active] border fill text */
+static int button_palette [6] =
+{
+ 1, 4, 2,
+ 1, 5, 0
+};
+
+void button_draw (struct ts_button *button)
+{
+ int s = (button->flags & BUTTON_ACTIVE) ? 3 : 0;
+
+ rect(button->x, button->y, button->x + button->w,
+ button->y + button->h, button_palette [s]);
+ fillrect(button->x + 1, button->y + 1,
+ button->x + button->w - 2,
+ button->y + button->h - 2, button_palette [s + 1]);
+// put_string_center(button->x + button->w / 2,
+// button->y + button->h / 2,
+// button->text, button_palette [s + 2]);
+
+ GUI_SetColor(palette[button_palette [s + 2]]);
+ GUI_DispStringHCenterAt(button->text, button->x + button->w / 2, button->y + button->h / 2);
+}
+
+int button_handle (struct ts_button *button, int x, int y, unsigned int p)
+{
+ int inside = (x >= button->x) && (y >= button->y) &&
+ (x < button->x + button->w) &&
+ (y < button->y + button->h);
+
+ if (p > 0)
+ {
+ if (inside)
+ {
+ if (!(button->flags & BUTTON_ACTIVE))
+ {
+ button->flags |= BUTTON_ACTIVE;
+ button_draw (button);
+ }
+ }
+ else if (button->flags & BUTTON_ACTIVE)
+ {
+ button->flags &= ~BUTTON_ACTIVE;
+ button_draw (button);
+ }
+ }
+ else if (button->flags & BUTTON_ACTIVE)
+ {
+ button->flags &= ~BUTTON_ACTIVE;
+ button_draw (button);
+ return 1;
+ }
+
+ return 0;
+}
+
+static void refresh_screen(void)
+{
+ int i;
+
+// fillrect (0, 0, xres - 1, yres - 1, 0);
+ GUI_Clear();
+// put_string_center (xres/2, yres/4, "Touchscreen test program", 1);
+// put_string_center (xres/2, yres/4+20,"Touch screen to move crosshair", 2);
+
+ GUI_SetColor(palette[1]);
+ GUI_DispStringHCenterAt("Touchscreen test program", xres / 2, yres / 4);
+
+ GUI_SetColor(palette[2]);
+ GUI_DispStringHCenterAt("Touch screen to move crosshair", xres / 2, yres / 4 + 20);
+
+ for (i = 0; i < NR_BUTTONS; i++)
+ button_draw (&buttons [i]);
+}
+
+int ts_test(int xsize, int ysize)
+{
+ int sumx, sumy;
+ int x, y;
+ unsigned int i;
+ unsigned int mode = 0;
+ int quit_pressed = 0;
+
+ xres = xsize;
+ yres = ysize;
+
+ x = xres/2;
+ y = yres/2;
+
+ for (i = 0; i < NR_COLORS; i++)
+ setcolor (i, palette [i]);
+
+ /* Initialize buttons */
+ //memset (&buttons, 0, sizeof (buttons));
+ buttons [0].w = buttons [1].w = buttons [2].w = xres / 4;
+ buttons [0].h = buttons [1].h = buttons [2].h = 20;
+ buttons [0].x = 0;
+ buttons [1].x = (3 * xres) / 8;
+ buttons [2].x = (3 * xres) / 4 - 1;
+ buttons [0].y = buttons [1].y = buttons [2].y = 10;
+ buttons [0].text = "Drag";
+ buttons [1].text = "Draw";
+ buttons [2].text = "Quit";
+
+ refresh_screen ();
+
+ while (1)
+ {
+ struct ts_sample samp;
+
+ /* Show the cross */
+ if ((mode & 15) != 1)
+ put_cross(x, y, 2 | XORMODE);
+
+ if ( Read_TouchPanel(&sumx, &sumy) > 0)
+ {
+ ts_phy2log(&sumx, &sumy);
+ samp.x = sumx;
+ samp.y = sumy;
+ samp.pressure = 1000;
+ }
+ else
+ {
+ samp.x = x;
+ samp.y = y;
+ samp.pressure = 0;
+ }
+ GUI_Delay(30);
+
+ /* Hide it */
+ if ((mode & 15) != 1)
+ put_cross(x, y, 2 | XORMODE);
+
+ for (i = 0; i < NR_BUTTONS; i++)
+ if (button_handle(&buttons [i], samp.x, samp.y, samp.pressure))
+ switch (i)
+ {
+ case 0:
+ mode = 0;
+ refresh_screen ();
+ break;
+ case 1:
+ mode = 1;
+ refresh_screen ();
+ break;
+ case 2:
+ quit_pressed = 1;
+ }
+
+ if (samp.pressure > 0)
+ {
+ if (mode == 0x80000001)
+ line (x, y, samp.x, samp.y, 2);
+ //pixel(x, y, 2);
+ x = samp.x;
+ y = samp.y;
+ mode |= 0x80000000;
+ }
+ else
+ mode &= ~0x80000000;
+ if (quit_pressed)
+ break;
+ }
+// fillrect(0, 0, xres - 1, yres - 1, 0);
+ GUI_Clear();
+
+ return 0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tslib/testutils.h Wed Feb 27 14:34:09 2019 +0800 @@ -0,0 +1,17 @@ +#ifndef _TESTUTILS_H +#define _TESTUTILS_H +/* + * tslib/tests/testutils.h + * + * Copyright (C) 2004 Michael Opdenacker <michaelo@handhelds.org> + * + * This file is placed under the LGPL. + * + * $Id: testutils.h + * + * Misc utils for ts test programs + */ + +void getxy(int *x, int *y); + +#endif /* _TESTUTILS_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/ts_calibrate.c Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,434 @@
+/*
+ * tslib/tests/ts_calibrate.c
+ *
+ * Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the GPL. Please see the file
+ * COPYING for more details.
+ *
+ * $Id: ts_calibrate.c,v 1.8 2004/10/19 22:01:27 dlowder Exp $
+ *
+ * Basic test program for touchscreen library.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+//#include <signal.h>
+//#include <string.h>
+//#include <unistd.h>
+//#include <sys/fcntl.h>
+//#include <sys/ioctl.h>
+//#include <sys/mman.h>
+//#include <sys/time.h>
+#include "tslib.h"
+#include "fbutils.h"
+#include "testutils.h"
+//#include "wbio.h"
+//#include "wbtypes.h"
+//#include "wblib.h"
+//#include "LCDconf.h"
+#include "M480.h"
+#include "GUI.h"
+#include "M48XTouchPanel.h"
+//#include "nvtfat.h"
+
+#ifdef __USE_SD__
+#include "diskio.h"
+#include "ff.h"
+#endif
+
+typedef struct
+{
+ int x[5], xfb[5];
+ int y[5], yfb[5];
+ int a[7];
+} calibration;
+
+static int palette [] =
+{
+ /*0x000000, 0xffe080, 0xffffff, 0xe0c0a0*/
+ GUI_MAKE_COLOR(0x000000), GUI_MAKE_COLOR(0x80e0ff), GUI_MAKE_COLOR(0xffffff), GUI_MAKE_COLOR(0xa0c0e0), GUI_MAKE_COLOR(0x7F1F00), GUI_MAKE_COLOR(0x20201F), GUI_MAKE_COLOR(0x5F3F1F)
+};
+#define NR_COLORS (sizeof (palette) / sizeof (palette [0]))
+
+#ifdef __USE_SD__
+extern FIL hFile;
+#endif
+
+int ts_writefile(void);
+int ts_readfile(void);
+
+int ts_calibrate(int xsize, int ysize);
+//int linear_read(int *sumx, int *sumy);
+int ts_phy2log(int *sumx, int *sumy);
+calibration cal, final_cal;
+
+#if 0
+int perform_calibration(calibration *cal)
+{
+ int j;
+ float n, x, y, x2, y2, xy, z, zx, zy;
+ float det, a, b, c, e, f, i;
+ float scaling = 65536.0;
+
+ int nn,nx,ny,nx2,ny2, nxy;
+// Get sums for matrix
+ n = x = y = x2 = y2 = xy = 0;
+ for(j=0; j<5; j++)
+ {
+ n += 1.0;
+ x += (float)cal->x[j];
+ y += (float)cal->y[j];
+ x2 += (float)(cal->x[j]*cal->x[j]);
+ y2 += (float)(cal->y[j]*cal->y[j]);
+ xy += (float)(cal->x[j]*cal->y[j]);
+ }
+ nn = (int)n;
+ nx = (int)x;
+ ny = (int)y;
+ nx2 = (int)x2;
+ ny2 = (int)y2;
+ nxy = (int)xy;
+ printf("n=%d,x=%d,y=%d,x2=%d,y2=%d, xy=%d\n",nn,nx,ny,nx2,ny2,nxy);
+// Get determinant of matrix -- check if determinant is too small
+ det = n*(x2*y2 - xy*xy) + x*(xy*y - x*y2) + y*(x*xy - y*x2);
+ if(det < 0.1 && det > -0.1)
+ {
+ printf("ts_calibrate: determinant is too small -- %f\n",det);
+ return 0;
+ }
+
+// Get elements of inverse matrix
+ a = (x2*y2 - xy*xy)/det;
+ b = (xy*y - x*y2)/det;
+ c = (x*xy - y*x2)/det;
+ e = (n*y2 - y*y)/det;
+ f = (x*y - n*xy)/det;
+ i = (n*x2 - x*x)/det;
+
+// Get sums for x calibration
+ z = zx = zy = 0;
+ for(j=0; j<5; j++)
+ {
+ z += (float)cal->xfb[j];
+ zx += (float)(cal->xfb[j]*cal->x[j]);
+ zy += (float)(cal->xfb[j]*cal->y[j]);
+ }
+
+// Now multiply out to get the calibration for framebuffer x coord
+ cal->a[0] = (int)((a*z + b*zx + c*zy)*(scaling));
+ cal->a[1] = (int)((b*z + e*zx + f*zy)*(scaling));
+ cal->a[2] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 1 //close
+ nn = (int)((a*z + b*zx + c*zy)*(scaling));
+ nx = (int)((b*z + e*zx + f*zy)*(scaling));
+ ny = (int)((c*z + f*zx + i*zy)*(scaling));
+// nn = (int)(a*z + b*zx + c*zy);
+// nx = (int) (b*z + e*zx + f*zy);
+// ny = (int) (c*z + f*zx + i*zy);
+ printf("%d %d %d\n",nn,nx,ny);
+#endif
+// Get sums for y calibration
+ z = zx = zy = 0;
+ for(j=0; j<5; j++)
+ {
+ z += (float)cal->yfb[j];
+ zx += (float)(cal->yfb[j]*cal->x[j]);
+ zy += (float)(cal->yfb[j]*cal->y[j]);
+ }
+
+// Now multiply out to get the calibration for framebuffer y coord
+ cal->a[3] = (int)((a*z + b*zx + c*zy)*(scaling));
+ cal->a[4] = (int)((b*z + e*zx + f*zy)*(scaling));
+ cal->a[5] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 1 // closed
+// nn = (int) (a*z + b*zx + c*zy);
+// nx = (int) (b*z + e*zx + f*zy);
+// ny = (int) (c*z + f*zx + i*zy);
+ nn = (int)((a*z + b*zx + c*zy)*(scaling));
+ nx = (int)((b*z + e*zx + f*zy)*(scaling));
+ ny = (int)((c*z + f*zx + i*zy)*(scaling));
+ printf("%d %d %d\n",nn,nx,ny);
+#endif
+// If we got here, we're OK, so assign scaling to a[6] and return
+ cal->a[6] = (int)scaling;
+ return 1;
+ /*
+ // This code was here originally to just insert default values
+ for(j=0;j<7;j++) {
+ c->a[j]=0;
+ }
+ c->a[1] = c->a[5] = c->a[6] = 1;
+ return 1;
+ */
+}
+#endif
+
+int perform_calibration(calibration *cal)
+{
+ int j;
+ float n, x, y, x2, y2, xy, z, zx, zy;
+ float det, a, b, c, e, f, i;
+ float scaling = 65536.0;
+
+// Get sums for matrix
+ n = x = y = x2 = y2 = xy = 0;
+ for(j=0; j<5; j++)
+ {
+ n += 1.0f;
+ x += (float)cal->x[j];
+ y += (float)cal->y[j];
+ x2 += (float)(cal->x[j]*cal->x[j]);
+ y2 += (float)(cal->y[j]*cal->y[j]);
+ xy += (float)(cal->x[j]*cal->y[j]);
+ }
+// Get determinant of matrix -- check if determinant is too small
+ det = n*(x2*y2 - xy*xy) + x*(xy*y - x*y2) + y*(x*xy - y*x2);
+ if(det < 0.1f && det > -0.1f)
+ {
+ printf("ts_calibrate: determinant is too small -- %f\n",det);
+ return 0;
+ }
+
+// Get elements of inverse matrix
+ a = (x2*y2 - xy*xy)/det;
+ b = (xy*y - x*y2)/det;
+ c = (x*xy - y*x2)/det;
+ e = (n*y2 - y*y)/det;
+ f = (x*y - n*xy)/det;
+ i = (n*x2 - x*x)/det;
+
+// Get sums for x calibration
+ z = zx = zy = 0;
+ for(j=0; j<5; j++)
+ {
+ z += (float)cal->xfb[j];
+ zx += (float)(cal->xfb[j]*cal->x[j]);
+ zy += (float)(cal->xfb[j]*cal->y[j]);
+ }
+
+// Now multiply out to get the calibration for framebuffer x coord
+ cal->a[0] = (int)((a*z + b*zx + c*zy)*(scaling));
+ cal->a[1] = (int)((b*z + e*zx + f*zy)*(scaling));
+ cal->a[2] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 0 //close
+ printf("%f %f %f\n",(a*z + b*zx + c*zy),
+ (b*z + e*zx + f*zy),
+ (c*z + f*zx + i*zy));
+#endif
+// Get sums for y calibration
+ z = zx = zy = 0;
+ for(j=0; j<5; j++)
+ {
+ z += (float)cal->yfb[j];
+ zx += (float)(cal->yfb[j]*cal->x[j]);
+ zy += (float)(cal->yfb[j]*cal->y[j]);
+ }
+
+// Now multiply out to get the calibration for framebuffer y coord
+ cal->a[3] = (int)((a*z + b*zx + c*zy)*(scaling));
+ cal->a[4] = (int)((b*z + e*zx + f*zy)*(scaling));
+ cal->a[5] = (int)((c*z + f*zx + i*zy)*(scaling));
+#if 0 // closed
+ printf("%f %f %f\n",(a*z + b*zx + c*zy),
+ (b*z + e*zx + f*zy),
+ (c*z + f*zx + i*zy));
+#endif
+// If we got here, we're OK, so assign scaling to a[6] and return
+ cal->a[6] = (int)scaling;
+ return 1;
+}
+
+static void get_sample (calibration *cal,int index, int x, int y, char *name)
+{
+ static int last_x = -1, last_y;
+
+ if (last_x != -1)
+ {
+#define NR_STEPS 10
+ int dx = ((x - last_x) << 16) / NR_STEPS;
+ int dy = ((y - last_y) << 16) / NR_STEPS;
+ int i;
+ last_x <<= 16;
+ last_y <<= 16;
+ for (i = 0; i < NR_STEPS; i++)
+ {
+ put_cross (last_x >> 16, last_y >> 16, 2 | XORMODE);
+ //usleep (1000);
+ GUI_Delay(10);
+ put_cross (last_x >> 16, last_y >> 16, 2 | XORMODE);
+ last_x += dx;
+ last_y += dy;
+ }
+ }
+
+
+ put_cross(x, y, 2 | XORMODE);
+ getxy (&cal->x [index], &cal->y [index]);
+ put_cross(x, y, 2 | XORMODE);
+
+ last_x = cal->xfb [index] = x;
+ last_y = cal->yfb [index] = y;
+
+ printf("%s : X = %4d Y = %4d\n", name, cal->x [index], cal->y [index]);
+}
+
+int ts_calibrate(int xsize, int ysize)
+{
+ int i;
+
+ xres = xsize;
+ yres = ysize;
+
+ for (i = 0; i < NR_COLORS; i++)
+ setcolor (i, palette [i]);
+
+// put_string_center (xres / 2, yres / 4,
+// "TSLIB calibration utility", 1);
+// put_string_center (xres / 2, yres / 4 + 20,
+// "Touch crosshair to calibrate", 2);
+
+ GUI_SetColor(palette [1]);
+ GUI_DispStringHCenterAt("TSLIB calibration utility", xres / 2, yres / 4);
+
+ GUI_SetColor(palette [2]);
+ GUI_DispStringHCenterAt("Touch crosshair to calibrate", xres / 2, yres / 4 + 20);
+
+ printf("xres = %d, yres = %d\n", xres, yres);
+
+// Read a touchscreen event to clear the buffer
+ //getxy(ts, 0, 0);
+
+ get_sample (&cal, 0, 50, 50, "Top left");
+// GUI_Delay(200);
+ get_sample (&cal, 1, xres - 50, 50, "Top right");
+ //GUI_Delay(200);
+ get_sample (&cal, 2, xres - 50, yres - 50, "Bot right");
+// GUI_Delay(200);
+ get_sample (&cal, 3, 50, yres - 50, "Bot left");
+// GUI_Delay(200);
+ get_sample (&cal, 4, xres / 2, yres / 2, "Center");
+// GUI_Delay(200);
+ if (perform_calibration (&cal))
+ {
+ printf ("Calibration constants: ");
+ for (i = 0; i < 7; i++) printf("%d ", cal.a [i]);
+ printf("\n");
+ }
+ else
+ {
+ printf("Calibration failed.\n");
+ i = -1;
+ }
+ final_cal.a[0] = cal.a[1];
+ final_cal.a[1] = cal.a[2];
+ final_cal.a[2] = cal.a[0];
+ final_cal.a[3] = cal.a[4];
+ final_cal.a[4] = cal.a[5];
+ final_cal.a[5] = cal.a[3];
+ final_cal.a[6] = cal.a[6];
+ return i;
+}
+#if 0
+int linear_read(int *sumx, int *sumy)
+{
+ int xtemp,ytemp;
+
+// ret = dejitter_read(info->next, samp, nr);
+ if ( Read_TouchPanel(sumx, sumy) > 0)
+ {
+//printf("Before X=%d, Y=%d\n",*sumx, *sumy);
+ xtemp = *sumx;
+ ytemp = *sumy;
+ *sumx = ( final_cal.a[2] +
+ final_cal.a[0]*xtemp +
+ final_cal.a[1]*ytemp ) / final_cal.a[6];
+ *sumy = ( final_cal.a[5] +
+ final_cal.a[3]*xtemp +
+ final_cal.a[4]*ytemp ) / final_cal.a[6];
+//printf("After X=%d, Y=%d\n",*sumx, *sumy);
+ return 1;
+ }
+ else
+ {
+ *sumx = -1;
+ *sumy = -1;
+ return -1;
+ }
+}
+#endif
+int ts_phy2log(int *sumx, int *sumy)
+{
+ int xtemp,ytemp;
+
+ xtemp = *sumx;
+ ytemp = *sumy;
+ *sumx = ( final_cal.a[2] +
+ final_cal.a[0]*xtemp +
+ final_cal.a[1]*ytemp ) / final_cal.a[6];
+ *sumy = ( final_cal.a[5] +
+ final_cal.a[3]*xtemp +
+ final_cal.a[4]*ytemp ) / final_cal.a[6];
+//printf("After X=%d, Y=%d\n",*sumx, *sumy);
+ return 1;
+}
+
+int ts_writefile(void)
+{
+#ifdef __USE_SD__
+ size_t cnt;
+ FRESULT res;
+ res = f_lseek(&hFile, 0);
+ if (res != FR_OK)
+ {
+ printf("CANNOT seek the calibration into file\n");
+ return -1;
+ }
+
+ res = f_write(&hFile, (char *)&final_cal.a[0], 28, &cnt);
+ if (res != FR_OK)
+ {
+ printf("CANNOT write the calibration into file, %d\n", cnt);
+ return -1;
+ }
+#else
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x00, final_cal.a[0]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x04, final_cal.a[1]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x08, final_cal.a[2]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x0C, final_cal.a[3]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x10, final_cal.a[4]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x14, final_cal.a[5]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x18, final_cal.a[6]);
+ FMC_Write(__DEMO_TSFILE_ADDR__ + 0x1C, 0x55AAA55A);
+#endif
+ return 0;
+}
+
+int ts_readfile(void)
+{
+#ifdef __USE_SD__
+ size_t cnt;
+ FRESULT res;
+ res = f_lseek(&hFile, 0);
+ if (res != FR_OK)
+ {
+ printf("CANNOT seek the calibration into file\n");
+ return -1;
+ }
+
+ res = f_read(&hFile, (char *)&final_cal.a[0], 28, &cnt);
+ if (res != FR_OK)
+ {
+ printf("CANNOT read the calibration into file, %d\n", cnt);
+ return -1;
+ }
+#else
+ final_cal.a[0] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x00);
+ final_cal.a[1] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x04);
+ final_cal.a[2] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x08);
+ final_cal.a[3] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x0C);
+ final_cal.a[4] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x10);
+ final_cal.a[5] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x14);
+ final_cal.a[6] = FMC_Read(__DEMO_TSFILE_ADDR__ + 0x18);
+#endif
+ return 0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/tslib-filter.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,53 @@
+#ifndef _TSLIB_FILTER_H_
+#define _TSLIB_FILTER_H_
+/*
+ * tslib/src/tslib-filter.h
+ *
+ * Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: tslib-filter.h,v 1.3 2005/03/01 18:18:05 kergoth Exp $
+ *
+ * Internal touch screen library definitions.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <tslib.h>
+
+struct tslib_module_info;
+struct tsdev;
+
+struct tslib_vars
+{
+ const char *name;
+ void *data;
+ int (*fn)(struct tslib_module_info *inf, char *str, void *data);
+};
+
+struct tslib_ops
+{
+ int (*read)(struct tslib_module_info *inf, struct ts_sample *samp, int nr);
+ int (*fini)(struct tslib_module_info *inf);
+};
+
+struct tslib_module_info
+{
+ struct tsdev *dev;
+ struct tslib_module_info *next; /* next module in chain */
+ const struct tslib_ops *ops;
+ void *handle; /* dl handle */
+};
+
+#if 0
+TSAPI extern int tslib_parse_vars(struct tslib_module_info *,
+ const struct tslib_vars *, int,
+ const char *);
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _TSLIB_FILTER_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/tslib-private.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,39 @@
+#ifndef _TSLIB_PRIVATE_H_
+#define _TSLIB_PRIVATE_H_
+/*
+ * tslib/src/tslib-private.h
+ *
+ * Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: tslib-private.h,v 1.3 2004/07/21 19:12:59 dlowder Exp $
+ *
+ * Internal touch screen library definitions.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "tslib.h"
+#include "tslib-filter.h"
+
+struct tsdev
+{
+ int fd;
+ struct tslib_module_info *list;
+ struct tslib_module_info *list_raw; /* points to position in 'list' where raw reads
+ come from. default is the position of the
+ ts_read_raw module. */
+};
+
+int __ts_attach(struct tsdev *ts, struct tslib_module_info *info);
+int __ts_attach_raw(struct tsdev *ts, struct tslib_module_info *info);
+int ts_load_module(struct tsdev *dev, const char *module, const char *params);
+int ts_load_module_raw(struct tsdev *dev, const char *module, const char *params);
+int ts_error(const char *fmt, ...);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _TSLIB_PRIVATE_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tslib/tslib.h Wed Feb 27 14:34:09 2019 +0800
@@ -0,0 +1,98 @@
+#ifndef _TSLIB_H_
+#define _TSLIB_H_
+/*
+ * tslib/src/tslib.h
+ *
+ * Copyright (C) 2001 Russell King.
+ *
+ * This file is placed under the LGPL.
+ *
+ * $Id: tslib.h,v 1.4 2005/02/26 01:47:23 kergoth Exp $
+ *
+ * Touch screen library interface definitions.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+#include <stdarg.h>
+//#include <sys/time.h>
+
+#ifdef WIN32
+#define TSIMPORT __declspec(dllimport)
+#define TSEXPORT __declspec(dllexport)
+#define TSLOCAL
+#else
+#define TSIMPORT
+#ifdef GCC_HASCLASSVISIBILITY
+#define TSEXPORT __attribute__ ((visibility("default")))
+#define TSLOCAL __attribute__ ((visibility("hidden")))
+#else
+#define TSEXPORT
+#define TSLOCAL
+#endif
+#endif
+
+#ifdef TSLIB_INTERNAL
+#define TSAPI TSEXPORT
+#else
+#define TSAPI TSIMPORT
+#endif // TSLIB_INTERNAL
+
+struct tsdev;
+
+struct ts_sample
+{
+ int x;
+ int y;
+ unsigned int pressure;
+// struct timeval tv;
+};
+
+/*
+ * Close the touchscreen device, free all resources.
+ */
+TSAPI int ts_close(struct tsdev *);
+
+/*
+ * Configure the touchscreen device.
+ */
+TSAPI int ts_config(struct tsdev *);
+
+/*
+ * Change this hook to point to your custom error handling function.
+ */
+extern TSAPI int (*ts_error_fn)(const char *fmt, va_list ap);
+
+/*
+ * Returns the file descriptor in use for the touchscreen device.
+ */
+TSAPI int ts_fd(struct tsdev *);
+
+/*
+ * Load a filter/scaling module
+ */
+TSAPI int ts_load_module(struct tsdev *, const char *mod, const char *params);
+
+/*
+ * Open the touchscreen device.
+ */
+TSAPI struct tsdev *ts_open(const char *dev_name, int nonblock);
+
+/*
+ * Return a scaled touchscreen sample.
+ */
+TSAPI int ts_read(struct tsdev *, struct ts_sample *, int);
+
+/*
+ * Returns a raw, unscaled sample from the touchscreen.
+ */
+TSAPI int ts_read_raw(struct tsdev *, struct ts_sample *, int);
+
+int ts_calibrate(int xsize, int ysize);
+
+int ts_phy2log(int *sumx, int *sumy);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* _TSLIB_H_ */