Files
mars-flaim/flaim/src/ftext.cpp
2006-08-21 20:54:23 +00:00

2319 lines
67 KiB
C++

//-------------------------------------------------------------------------
// Desc: FLAIM text routines and conversion tables
// Tabs: 3
//
// Copyright (c) 1991-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id$
//-------------------------------------------------------------------------
#include "flaimsys.h"
#define WP60toUni_MAX 15
#define WPCH_HIMASK 0x00FF
#define WPCH_LOMASK 0xFF00
#define WPCH_MAX_COMPLEX 5
/****************************************************************************
Desc: WP60 to Unicode - Multinational 1
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI1[ 256] =
{
0x0300, 0x00B7, 0x0303, 0x0302, 0x0335,
0x0338, 0x0301, 0x0308, 0x0304, 0x0313,
0x0315, 0x02BC, 0x0326, 0x0315, 0x030A,
0x0307, 0x030B, 0x0327, 0x0328, 0x030C,
0x0337, 0x0305, 0x0306, 0x00DF, 0x0138,
0xF801, 0x00C1, 0x00E1, 0x00C2, 0x00E2,
0x00C4, 0x00E4, 0x00C0, 0x00E0, 0x00C5,
0x00E5, 0x00C6, 0x00E6, 0x00C7, 0x00E7,
0x00C9, 0x00E9, 0x00CA, 0x00EA, 0x00CB,
0x00EB, 0x00C8, 0x00E8, 0x00CD, 0x00ED,
0x00CE, 0x00EE, 0x00CF, 0x00EF, 0x00CC,
0x00EC, 0x00D1, 0x00F1, 0x00D3, 0x00F3,
0x00D4, 0x00F4, 0x00D6, 0x00F6, 0x00D2,
0x00F2, 0x00DA, 0x00FA, 0x00DB, 0x00FB,
0x00DC, 0x00FC, 0x00D9, 0x00F9, 0x0178,
0x00FF, 0x00C3, 0x00E3, 0x0110, 0x0111,
0x00D8, 0x00F8, 0x00D5, 0x00F5, 0x00DD,
0x00FD, 0x00D0, 0x00F0, 0x00DE, 0x00FE,
0x0102, 0x0103, 0x0100, 0x0101, 0x0104,
0x0105, 0x0106, 0x0107, 0x010C, 0x010D,
0x0108, 0x0109, 0x010A, 0x010B, 0x010E,
0x010F, 0x011A, 0x011B, 0x0116, 0x0117,
0x0112, 0x0113, 0x0118, 0x0119, 0x0047,
0x0067, 0x011E, 0x011F, 0x0047, 0x0067,
0x0122, 0x0123, 0x011C, 0x011D, 0x0120,
0x0121, 0x0124, 0x0125, 0x0126, 0x0127,
0x0130, 0x0069, 0x012A, 0x012B, 0x012E,
0x012F, 0x0128, 0x0129, 0x0132, 0x0133,
0x0134, 0x0135, 0x0136, 0x0137, 0x0139,
0x013A, 0x013D, 0x013E, 0x013B, 0x013C,
0x013F, 0x0140, 0x0141, 0x0142, 0x0143,
0x0144, 0xF802, 0x0149, 0x0147, 0x0148,
0x0145, 0x0146, 0x0150, 0x0151, 0x014C,
0x014D, 0x0152, 0x0153, 0x0154, 0x0155,
0x0158, 0x0159, 0x0156, 0x0157, 0x015A,
0x015B, 0x0160, 0x0161, 0x015E, 0x015F,
0x015C, 0x015D, 0x0164, 0x0165, 0x0162,
0x0163, 0x0166, 0x0167, 0x016C, 0x016D,
0x0170, 0x0171, 0x016A, 0x016B, 0x0172,
0x0173, 0x016E, 0x016F, 0x0168, 0x0169,
0x0174, 0x0175, 0x0176, 0x0177, 0x0179,
0x017A, 0x017D, 0x017E, 0x017B, 0x017C,
0x014A, 0x014B, 0xF000, 0xF001, 0xF002,
0xF003, 0xF004, 0xF005, 0xF006, 0xF007,
0xF008, 0xF009, 0xF00A, 0xF00B, 0xF00C,
0xF00D, 0xF00E, 0xF00F, 0x010E, 0x010F,
0x01A0, 0x01A1, 0x01AF, 0x01B0, 0x0114,
0x0115, 0x012C, 0x012D, 0x0049, 0x0131,
0x014E, 0x014F, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Standard Phonetic
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI2[ 256] =
{
0x02B9, 0x02BA, 0x02BB, 0xF813, 0x02BD,
0x02BC, 0xF814, 0x02BE, 0x02BF, 0x0310,
0x02D0, 0x02D1, 0x0306, 0x032E, 0x0329,
0x02C8, 0x02CC, 0x02C9, 0x02CA, 0x02CB,
0x02CD, 0x02CE, 0x02CF, 0x02C6, 0x02C7,
0x02DC, 0x0325, 0x02DA, 0x032D, 0x032C,
0x0323, 0x0308, 0x0324, 0x031C, 0x031D,
0x031E, 0x031F, 0x0320, 0x0321, 0x0322,
0x032A, 0x032B, 0x02D2, 0x02D3, 0xF815,
0xF816, 0x005F, 0x2017, 0x033E, 0x02DB,
0x0327, 0x02DE, 0x02C8, 0x02B0, 0x02B6,
0x0250, 0x0251, 0x0252, 0x0253, 0x0299,
0x0254, 0x0255, 0x0297, 0x0256, 0x0257,
0x0258, 0x0259, 0x025A, 0x025B, 0x025C,
0x025D, 0x029A, 0x025E, 0x025F, 0x0278,
0x0261, 0x0260, 0x0262, 0x029B, 0x0263,
0x0264, 0x0265, 0x0266, 0x0267, 0x029C,
0x0268, 0x026A, 0x0269, 0x029D, 0x029E,
0x026B, 0x026C, 0x026D, 0x029F, 0x026E,
0x028E, 0x026F, 0x0270, 0x0271, 0x0272,
0x0273, 0x0274, 0x0276, 0x0277, 0x02A0,
0x0279, 0x027A, 0x027B, 0x027C, 0x027D,
0x027E, 0x027F, 0x0280, 0x0281, 0x0282,
0x0283, 0x0284, 0x0285, 0x0286, 0x0287,
0x0288, 0x0275, 0x0289, 0x028A, 0x028C,
0x028B, 0x028D, 0x0058, 0x028F, 0x0290,
0x0291, 0x0292, 0x0293, 0x0294, 0x0295,
0x0296, 0x02A1, 0x02A2, 0x0298, 0x02A3,
0x02A4, 0x02A5, 0x02A6, 0x02A7, 0x02A8,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP51/WP60 to Unicode - Box Drawing
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WPUNI3[ 256] =
{
0x2591, 0x2592, 0x2593, 0x2588, 0x258C,
0x2580, 0x2590, 0x2584, 0x2500, 0x2502,
0x250C, 0x2510, 0x2518, 0x2514, 0x251C,
0x252C, 0x2524, 0x2534, 0x253C, 0x2550,
0x2551, 0x2554, 0x2557, 0x255D, 0x255A,
0x2560, 0x2566, 0x2563, 0x2569, 0x256C,
0x2552, 0x2555, 0x255B, 0x2558, 0x2553,
0x2556, 0x255C, 0x2559, 0x255E, 0x2565,
0x2561, 0x2568, 0x255F, 0x2564, 0x2562,
0x2567, 0x256B, 0x256A, 0x2574, 0x2575,
0x2576, 0x2577, 0x2578, 0x2579, 0x257A,
0x257B, 0x257C, 0x257E, 0x257D, 0x257F,
0x251F, 0x2522, 0x251E, 0x2521, 0x252E,
0x2532, 0x252D, 0x2531, 0x2527, 0x2526,
0x252A, 0x2529, 0x2536, 0x253A, 0x2535,
0x2539, 0x2541, 0x2546, 0x253E, 0x2540,
0x2544, 0x254A, 0x253D, 0x2545, 0x2548,
0x2543, 0x2549, 0x2547, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP51/WP60 to Unicode - Typographic Symbols
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WPUNI4[ 256] =
{
0x25CF, 0x25CB, 0x25A0, 0x2022, 0xF817,
0x00B6, 0x00A7, 0x00A1, 0x00BF, 0x00AB,
0x00BB, 0x00A3, 0x00A5, 0x20A7, 0x0192,
0x00AA, 0x00BA, 0x00BD, 0x00BC, 0x00A2,
0x00B2, 0x207F, 0x00AE, 0x00A9, 0x00A4,
0x00BE, 0x00B3, 0x201B, 0x2019, 0x2018,
0x201F, 0x201D, 0x201C, 0x2013, 0x2014,
0x2039, 0x203A, 0x25CB, 0x25A1, 0x2020,
0x2021, 0x2122, 0x2120, 0x211E, 0x25CF,
0x25E6, 0x25A0, 0x25AA, 0x25A1, 0x25AB,
0x2012, 0xFB00, 0xFB03, 0xFB04, 0xFB01,
0xFB02, 0x2026, 0x0024, 0x20A3, 0x20A2,
0x20A0, 0x20A4, 0x201A, 0x201E, 0x2153,
0x2154, 0x215B, 0x215C, 0x215D, 0x215E,
0x24C2, 0x24C5, 0x24CA, 0x2105, 0x2106,
0x2030, 0x2116, 0xF818, 0x00B9, 0x2409,
0x240C, 0x240D, 0x240A, 0x2424, 0x240B,
0xF819, 0x20A9, 0x20A6, 0x20A8, 0xF81A,
0xF81B, 0xF81C, 0xF81D, 0xF81E, 0xF81F,
0xF820, 0xF821, 0xF822, 0xF823, 0xF824,
0xF825, 0xF826, 0x20AC, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Iconic Symbols
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI5[ 256] =
{
0x2661, 0x2662, 0x2667, 0x2664, 0x2642,
0x2640, 0x263C, 0x263A, 0x263B, 0x266A,
0x266C, 0x25AC, 0x2302, 0x203C, 0x221A,
0x21A8, 0x2310, 0x2319, 0x25D8, 0x25D9,
0x21B5, 0x2104, 0x261C, 0x2007, 0x2610,
0x2612, 0x2639, 0x266F, 0x266D, 0x266E,
0x260E, 0x231A, 0x231B, 0x2701, 0x2702,
0x2703, 0x2704, 0x260E, 0x2706, 0x2707,
0x2708, 0x2709, 0x261B, 0x261E, 0x270C,
0x270D, 0x270E, 0x270F, 0x2710, 0x2711,
0x2712, 0x2713, 0x2714, 0x2715, 0x2716,
0x2717, 0x2718, 0x2719, 0x271A, 0x271B,
0x271C, 0x271D, 0x271E, 0x271F, 0x2720,
0x2721, 0x2722, 0x2723, 0x2724, 0x2725,
0x2726, 0x2727, 0x2605, 0x2729, 0x272A,
0x272B, 0x272C, 0x272D, 0x272E, 0x272F,
0x2730, 0x2731, 0x2732, 0x2733, 0x2734,
0x2735, 0x2736, 0x2737, 0x2738, 0x2739,
0x273A, 0x273B, 0x273C, 0x273D, 0x273E,
0x273F, 0x2740, 0x2741, 0x2742, 0x2743,
0x2744, 0x2745, 0x2746, 0x2747, 0x2748,
0x2749, 0x274A, 0x274B, 0x25CF, 0x274D,
0x25A0, 0x274F, 0x2750, 0x2751, 0x2752,
0x25B2, 0x25BC, 0x25C6, 0x2756, 0x25D7,
0x2758, 0x2759, 0x275A, 0x275B, 0x275C,
0x275D, 0x275E, 0x2036, 0x2033, 0xF827,
0xF828, 0xF829, 0xF82A, 0x2329, 0x232A,
0x005B, 0x005D, 0xF82B, 0xF82C, 0xF82D,
0xF82E, 0xF82F, 0xF830, 0xF831, 0x2190,
0xF832, 0xF833, 0xF834, 0xF835, 0xF836,
0x21E8, 0x21E6, 0x2794, 0xF838, 0xF839,
0xF83A, 0xF83B, 0xF83C, 0x25D6, 0xF83D,
0xF83E, 0x2761, 0x2762, 0x2763, 0x2764,
0x2765, 0x2766, 0x2767, 0x2663, 0x2666,
0x2665, 0x2660, 0x2780, 0x2781, 0x2782,
0x2783, 0x2784, 0x2785, 0x2786, 0x2787,
0x2788, 0x2789, 0x2776, 0x2777, 0x2778,
0x2779, 0x277A, 0x277B, 0x277C, 0x277D,
0x277E, 0x277F, 0x2780, 0x2781, 0x2782,
0x2783, 0x2784, 0x2785, 0x2786, 0x2787,
0x2788, 0x2789, 0x278A, 0x278B, 0x278C,
0x278D, 0x278E, 0x278F, 0x2790, 0x2791,
0x2792, 0x2793, 0x2794, 0x2192, 0x2194,
0x2195, 0x2798, 0x2799, 0x279A, 0x279B,
0x279C, 0x279D, 0x279E, 0x279F, 0x27A0,
0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5,
0x27A6, 0x27A7, 0x27A8, 0x27A9, 0x27AA,
0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF,
0xF83F, 0x27B1, 0x27B2, 0x27B3, 0x27B4,
0x27B5, 0x27B6, 0x27B7, 0x27B8, 0x27B9,
0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE,
0x0000
};
/****************************************************************************
Desc: WP51/WP60 to Unicode - Math/Scientific
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WPUNI6[ 256] =
{
0x2212, 0x00B1, 0x2264, 0x2265, 0x221D,
0x01C0, 0x2215, 0x2216, 0x00F7, 0x2223,
0x2329, 0x232A, 0x223C, 0x2248, 0x2261,
0x2208, 0x2229, 0x2225, 0x2211, 0x221E,
0x00AC, 0x2192, 0x2190, 0x2191, 0x2193,
0x2194, 0x2195, 0x25B8, 0x25C2, 0x25B4,
0x25BE, 0x22C5, 0xF850, 0x2218, 0x2219,
0x212B, 0x00B0, 0x00B5, 0x203E, 0x00D7,
0x222B, 0x220F, 0x2213, 0x2207, 0x2202,
0x02B9, 0x02BA, 0x2192, 0x212F, 0x2113,
0x210F, 0x2111, 0x211C, 0x2118, 0x21C4,
0x21C6, 0x21D2, 0x21D0, 0x21D1, 0x21D3,
0x21D4, 0x21D5, 0x2197, 0x2198, 0x2196,
0x2199, 0x222A, 0x2282, 0x2283, 0x2286,
0x2287, 0x220D, 0x2205, 0x2308, 0x2309,
0x230A, 0x230B, 0x226A, 0x226B, 0x2220,
0x2297, 0x2295, 0x2296, 0xF851, 0x2299,
0x2227, 0x2228, 0x22BB, 0x22A4, 0x22A5,
0x2312, 0x22A2, 0x22A3, 0x25A1, 0x25A0,
0x25CA, 0xF852, 0xF853, 0xF854, 0x2260,
0x2262, 0x2235, 0x2234, 0x2237, 0x222E,
0x2112, 0x212D, 0x2128, 0x2118, 0x20DD,
0xF855, 0x25C7, 0x22C6, 0x2034, 0x2210,
0x2243, 0x2245, 0x227A, 0x227C, 0x227B,
0x227D, 0x2203, 0x2200, 0x22D8, 0x22D9,
0x228E, 0x228A, 0x228B, 0x2293, 0x2294,
0x228F, 0x2291, 0x22E4, 0x2290, 0x2292,
0x22E5, 0x25B3, 0x25BD, 0x25C3, 0x25B9,
0x22C8, 0x2323, 0x2322, 0xF856, 0x219D,
0x21A9, 0x21AA, 0x21A3, 0x21BC, 0x21BD,
0x21C0, 0x21C1, 0x21CC, 0x21CB, 0x21BF,
0x21BE, 0x21C3, 0x21C2, 0x21C9, 0x21C7,
0x22D3, 0x22D2, 0x22D0, 0x22D1, 0x229A,
0x229B, 0x229D, 0x2127, 0x2221, 0x2222,
0x25C3, 0x25B9, 0x25B5, 0x25BF, 0x2214,
0x2250, 0x2252, 0x2253, 0x224E, 0x224D,
0x22A8, 0xF857, 0x226C, 0x0285, 0x2605,
0x226E, 0x2270, 0x226F, 0x2271, 0x2241,
0x2244, 0x2247, 0x2249, 0x2280, 0x22E0,
0x2281, 0x22E1, 0x2284, 0x2285, 0x2288,
0x2289, 0xF858, 0xF859, 0x22E2, 0x22E3,
0x2226, 0x2224, 0x226D, 0x2204, 0x2209,
0xF85A, 0x2130, 0x2131, 0x2102, 0xF85B,
0x2115, 0x211D, 0x225F, 0x221F, 0x220B,
0x22EF, 0xF85C, 0x22EE, 0x22F1, 0xF85D,
0x20E1, 0x002B, 0x002D, 0x003D, 0x002A,
0xF85E, 0xF85F, 0xF860, 0x210C, 0x2118,
0x2272, 0x2273, 0xF861, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP51/WP60 to Unicode - Math/Science Extension
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WPUNI7[ 256] =
{
0x2320, 0x2321, 0xF702, 0xF703, 0x221A,
0xF705, 0xF706, 0xF707, 0xF708, 0xF709,
0xF70A, 0xF70B, 0xF70C, 0xF70D, 0xF70E,
0xF70F, 0xF710, 0xF711, 0xF712, 0xF713,
0xF714, 0xF715, 0xF716, 0xF717, 0xF718,
0xF719, 0xF71A, 0xF71B, 0xF71C, 0xF71D,
0xF71E, 0xF71F, 0xF720, 0xF721, 0xF722,
0xF723, 0xF724, 0xF725, 0xF726, 0xF727,
0xF728, 0xF729, 0xF72A, 0xF72B, 0xF72C,
0xF72D, 0xF72E, 0xF72F, 0xF730, 0xF731,
0xF732, 0xF733, 0xF734, 0xF735, 0xF736,
0xF737, 0xF738, 0xF739, 0xF73A, 0xF73B,
0xF73C, 0xF73D, 0xF73E, 0xF73F, 0xF740,
0xF741, 0xF742, 0xF743, 0xF744, 0xF745,
0xF746, 0xF747, 0xF748, 0xF749, 0xF74A,
0xF74B, 0xF74C, 0xF74D, 0xF74E, 0xF74F,
0xF750, 0xF751, 0xF752, 0xF753, 0xF754,
0xF755, 0xF756, 0xF757, 0xF758, 0xF759,
0xF75A, 0xF75B, 0xF75C, 0xF75D, 0xF75E,
0xF75F, 0xF760, 0xF761, 0xF762, 0xF763,
0xF764, 0xF765, 0xF766, 0xF767, 0xF768,
0xF769, 0xF76A, 0xF76B, 0xF76C, 0xF76D,
0xF76E, 0xF76F, 0xF770, 0xF771, 0xF772,
0xF773, 0xF774, 0xF775, 0xF776, 0xF777,
0xF778, 0xF779, 0xF77A, 0xF77B, 0xF77C,
0xF77D, 0xF77E, 0xF77F, 0xF780, 0xF781,
0xF782, 0xF783, 0xF784, 0xF785, 0xF786,
0xF787, 0xF788, 0xF789, 0xF78A, 0xF78B,
0xF78C, 0xF78D, 0xF78E, 0xF78F, 0xF790,
0xF791, 0xF792, 0xF793, 0xF794, 0xF795,
0xF796, 0xF797, 0xF798, 0xF799, 0xF79A,
0xF79B, 0xF79C, 0xF79D, 0xF79E, 0xF79F,
0xF7A0, 0xF7A1, 0xF7A2, 0xF7A3, 0xF7A4,
0xF7A5, 0xF7A6, 0xF7A7, 0xF7A8, 0xF7A9,
0xF7AA, 0xF7AB, 0xF7AC, 0xF7AD, 0xF7AE,
0xF7AF, 0xF7B0, 0xF7B1, 0xF7B2, 0xF7B3,
0xF7B4, 0xF7B5, 0xF7B6, 0xF7B7, 0xF7B8,
0xF7B9, 0xF7BA, 0xF7BB, 0xF7BC, 0xF7BD,
0xF7BE, 0xF7BF, 0xF7C0, 0xF7C1, 0xF7C2,
0xF7C3, 0xF7C4, 0xF7C5, 0xF7C6, 0xF7C7,
0xF7C8, 0xF7C9, 0xF7CA, 0xF7CB, 0xF7CC,
0xF7CD, 0xF7CE, 0xF7CF, 0xF7D0, 0xF7D1,
0xF7D2, 0xF7D3, 0xF7D4, 0xF7D5, 0xF7D6,
0xF7D7, 0xF7D8, 0xF7D9, 0xF7DA, 0xF7DB,
0xF7DC, 0xF7DD, 0xF7DE, 0xF7DF, 0xF7E0,
0xF7E1, 0xF7E2, 0xF7E3, 0xF7E4, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Greek
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI8[ 256] =
{
0x0391, 0x03B1, 0x0392, 0x03B2, 0x0392,
0x03D0, 0x0393, 0x03B3, 0x0394, 0x03B4,
0x0395, 0x03B5, 0x0396, 0x03B6, 0x0397,
0x03B7, 0x0398, 0x03B8, 0x0399, 0x03B9,
0x039A, 0x03BA, 0x039B, 0x03BB, 0x039C,
0x03BC, 0x039D, 0x03BD, 0x039E, 0x03BE,
0x039F, 0x03BF, 0x03A0, 0x03C0, 0x03A1,
0x03C1, 0x03A3, 0x03C3, 0x03A3, 0x03C2,
0x03A4, 0x03C4, 0x03A5, 0x03C5, 0x03A6,
0x03C6, 0x03A7, 0x03C7, 0x03A8, 0x03C8,
0x03A9, 0x03C9, 0xF106, 0x03AC, 0xF107,
0x03AD, 0xF108, 0x03AE, 0xF109, 0x03AF,
0x03AA, 0x03CA, 0xF10A, 0x03CC, 0xF10B,
0x03CD, 0x03AB, 0x03CB, 0xF10C, 0x03CE,
0x03B5, 0x03D1, 0x03F0, 0x03D6, 0x03F1,
0x03DB, 0x03D2, 0x03D5, 0x03D6, 0x03D7,
0x00B7, 0x0374, 0x0375, 0x0301, 0x0308,
0xF216, 0xF217, 0x0300, 0x0311, 0x0313,
0x0314, 0x0345, 0x1FCE, 0x1FDE, 0x1FCD,
0x1FDD, 0xF200, 0xF201, 0xF022, 0xF021,
0xF202, 0xF203, 0xF204, 0xF300, 0xF301,
0xF302, 0xF303, 0xF304, 0xF305, 0x1F70,
0xF100, 0x1FB3, 0x1FB4, 0x1FB2, 0xF205,
0x1F00, 0x1F04, 0x1F02, 0xF206, 0x1F80,
0x1F84, 0x1F82, 0xF306, 0x1F01, 0x1F05,
0x1F03, 0xF207, 0x1F81, 0x1F85, 0x1F83,
0xF307, 0x1F72, 0x1F10, 0x1F14, 0x1F12,
0x1F11, 0x1F15, 0x1F13, 0x1F74, 0xF101,
0x1FC3, 0x1FC4, 0x1FC2, 0xF208, 0x1F20,
0x1F24, 0x1F22, 0xF209, 0x1F90, 0x1F94,
0x1F92, 0xF308, 0x1F21, 0x1F25, 0x1F23,
0xF20A, 0x1F91, 0x1F95, 0x1F93, 0xF309,
0x1F76, 0xF102, 0xF20B, 0xF20C, 0x1F30,
0x1F34, 0x1F32, 0xF20D, 0x1F31, 0x1F35,
0x1F33, 0xF20E, 0x1F78, 0x1F40, 0x1F44,
0x1F42, 0x1F41, 0x1F45, 0x1F43, 0x1FE5,
0x1FE4, 0x1F7A, 0xF103, 0xF20F, 0xF210,
0x1F50, 0x1F54, 0x1F52, 0xF211, 0x1F51,
0x1F55, 0x1F53, 0xF212, 0x1F7C, 0xF104,
0x1FF3, 0x1FF4, 0x1FF2, 0xF213, 0x1F60,
0x1F64, 0x1F62, 0xF214, 0x1FA0, 0x1FA4,
0x1FA2, 0xF30A, 0x1F61, 0x1F65, 0x1F63,
0xF215, 0x1FA1, 0x1FA5, 0x1FA3, 0xF30B,
0x03DA, 0x03DC, 0x03DE, 0x03E0, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Hebrew
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI9[ 256] =
{
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4,
0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9,
0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE,
0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3,
0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8,
0x05E9, 0x05EA, 0xF862, 0x05C0, 0x05C3,
0x05F3, 0x05F4, 0x05B0, 0x05B1, 0x05B2,
0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7,
0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x05BC,
0x05BD, 0x05BF, 0x05B7, 0xFB1E, 0x05F0,
0x05F1, 0x05F2, 0xF114, 0xF8B0, 0xF863,
0xF864, 0xF865, 0xF866, 0xF867, 0xF868,
0xF869, 0xF86A, 0xF86B, 0xF86C, 0xF86D,
0xF86E, 0xF86F, 0xF870, 0xF871, 0xF872,
0xF873, 0xF874, 0x05F3, 0x05F3, 0x05F4,
0xF876, 0xF877, 0xF878, 0xF879, 0xF87A,
0xF87B, 0xF87C, 0xF87D, 0xF87E, 0xF115,
0xF116, 0xF87F, 0xF117, 0xF118, 0xF119,
0xF11A, 0xF11B, 0xF11C, 0xF11D, 0xF11E,
0xF11F, 0xF120, 0xF121, 0xF122, 0xF123,
0xF124, 0xF125, 0xF126, 0xF127, 0xF218,
0xF128, 0xF129, 0xF12A, 0xF12B, 0xF12C,
0xF12D, 0xF880, 0xF12E, 0xF12F, 0xF130,
0xF219, 0x05E9, 0xF131, 0xF132, 0xF140,
0xF141, 0xF142, 0x20AA, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Cyrillic/Georgian
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI10[ 256] =
{
0x0410, 0x0430, 0x0411, 0x0431, 0x0412,
0x0432, 0x0413, 0x0433, 0x0414, 0x0434,
0x0415, 0x0435, 0x0401, 0x0451, 0x0416,
0x0436, 0x0417, 0x0437, 0x0418, 0x0438,
0x0419, 0x0439, 0x041A, 0x043A, 0x041B,
0x043B, 0x041C, 0x043C, 0x041D, 0x043D,
0x041E, 0x043E, 0x041F, 0x043F, 0x0420,
0x0440, 0x0421, 0x0441, 0x0422, 0x0442,
0x0423, 0x0443, 0x0424, 0x0444, 0x0425,
0x0445, 0x0426, 0x0446, 0x0427, 0x0447,
0x0428, 0x0448, 0x0429, 0x0449, 0x042A,
0x044A, 0x042B, 0x044B, 0x042C, 0x044C,
0x042D, 0x044D, 0x042E, 0x044E, 0x042F,
0x044F, 0x04D8, 0x04D9, 0x0403, 0x0453,
0x0490, 0x0491, 0x0492, 0x0493, 0x0402,
0x0452, 0x0404, 0x0454, 0x0404, 0x0454,
0x0496, 0x0497, 0x0405, 0x0455, 0xF159,
0xF889, 0xF15E, 0xF15F, 0x0406, 0x0456,
0x0407, 0x0457, 0xF88C, 0xF88D, 0x0408,
0x0458, 0x040C, 0x045C, 0x049A, 0x049B,
0xF160, 0xF161, 0x049C, 0x049D, 0x0409,
0x0459, 0x04A2, 0x04A3, 0x040A, 0x045A,
0x047A, 0x047B, 0x0460, 0x0461, 0x040B,
0x045B, 0x040E, 0x045E, 0x04EE, 0x04EF,
0x04AE, 0x04AF, 0x04B0, 0x04B1, 0x0194,
0x0263, 0x04B2, 0x04B3, 0xF162, 0xF163,
0x04BA, 0x04BB, 0x047E, 0x047F, 0x040F,
0x045F, 0x04B6, 0x04B7, 0x04B8, 0x04B9,
0xF164, 0xF165, 0x0462, 0x0463, 0x0466,
0x0467, 0x046A, 0x046B, 0x046E, 0x046F,
0x0470, 0x0471, 0x0472, 0x0473, 0x0474,
0x0475, 0xF400, 0xF401, 0xF402, 0xF403,
0xF404, 0xF405, 0xF406, 0xF407, 0xF408,
0xF409, 0xF40A, 0xF40B, 0xF40C, 0xF40D,
0xF40E, 0xF40F, 0xF410, 0xF411, 0xF412,
0xF413, 0xF414, 0xF415, 0xF416, 0xF417,
0xF418, 0xF419, 0xF41A, 0xF41B, 0xF41C,
0xF41D, 0xF41E, 0xF41F, 0xF420, 0xF421,
0xF422, 0xF423, 0xF424, 0xF425, 0xF426,
0xF427, 0xF428, 0xF429, 0xF42A, 0xF42B,
0x0301, 0x0300, 0x0308, 0x0306, 0x0326,
0x0328, 0x0304, 0xF893, 0x201E, 0x201F,
0x10D0, 0x10D1, 0x10D2, 0x10D3, 0x10D4,
0x10D5, 0x10D6, 0x10F1, 0x10D7, 0x10D8,
0x10D9, 0x10DA, 0x10DB, 0x10DC, 0x10F2,
0x10DD, 0x10DE, 0x10DF, 0x10E0, 0x10E1,
0x10E2, 0x10E3, 0x10F3, 0x10E4, 0x10E5,
0x10E6, 0x10E7, 0x10E8, 0x10E9, 0x10EA,
0x10EB, 0x10EC, 0x10ED, 0x10EE, 0x10F4,
0x10EF, 0x10F0, 0x10F5, 0x10F6, 0xF42C,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Japanese
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WP60UNI11[ 256] =
{
0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65,
0xFF66, 0xFF67, 0xFF68, 0xFF69, 0xFF6A,
0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F,
0xFF70, 0xFF71, 0xFF72, 0xFF73, 0xFF74,
0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79,
0xFF7A, 0xFF7B, 0xFF7C, 0xFF7D, 0xFF7E,
0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83,
0xFF84, 0xFF85, 0xFF86, 0xFF87, 0xFF88,
0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92,
0xFF93, 0xFF94, 0xFF95, 0xFF96, 0xFF97,
0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C,
0xFF9D, 0xFF9E, 0xFF9F, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Arabic
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WPUNI13[ 256] =
{
0xF895, 0xF896, 0xF897, 0xF898, 0xF899,
0xF89A, 0xF89B, 0xF89C, 0xF89D, 0xF89E,
0x064E, 0x064E, 0x064F, 0x064F, 0x0650,
0x0650, 0x064B, 0x064C, 0x064C, 0x0650,
0x0652, 0x0652, 0x0651, 0xF503, 0xF502,
0xF504, 0xF508, 0xF505, 0xF509, 0xF506,
0xF50A, 0xF50B, 0xF507, 0xF50C, 0x06E4,
0x06E4, 0x0674, 0x06D6, 0x060C, 0x061B,
0x061F, 0x002A, 0x066A, 0x226B, 0x226A,
0x0029, 0x0028, 0x0661, 0x0662, 0x0663,
0x0664, 0x0665, 0x0666, 0x0667, 0x0668,
0x0669, 0x0660, 0x0662, 0x0627, 0x0628,
0x0628, 0x0628, 0x0628, 0x0628, 0x062A,
0x062A, 0x062A, 0x062A, 0x062B, 0x062B,
0x062B, 0x062B, 0x062C, 0x062C, 0x062C,
0x062C, 0x062D, 0x062D, 0x062D, 0x062D,
0x062E, 0x062E, 0x062E, 0x062E, 0x062F,
0x062F, 0x0630, 0x0630, 0x0631, 0x0631,
0x0632, 0x0632, 0x0633, 0x0633, 0x0633,
0x0633, 0x0634, 0x0634, 0x0634, 0x0634,
0x0635, 0x0635, 0x0635, 0x0635, 0x0636,
0x0636, 0x0636, 0x0636, 0x0637, 0x0637,
0x0637, 0x0637, 0x0638, 0x0638, 0x0638,
0x0638, 0x0639, 0x0639, 0x0639, 0x0639,
0x063A, 0x063A, 0x063A, 0x063A, 0x0641,
0x0641, 0x0641, 0x0641, 0x0642, 0x0642,
0x0642, 0x0642, 0x0643, 0x0643, 0x0643,
0x0643, 0x0644, 0x0644, 0x0644, 0x0644,
0x0645, 0x0645, 0x0645, 0x0645, 0x0646,
0x0646, 0x0646, 0x0646, 0x0647, 0x0647,
0x0647, 0x0647, 0x0629, 0x0629, 0x0648,
0x0648, 0x064A, 0x064A, 0x064A, 0x064A,
0x0649, 0x0649, 0x0649, 0x0649, 0x0621,
0x0623, 0x0623, 0x0625, 0x0625, 0x0624,
0x0624, 0x0626, 0x0626, 0x0626, 0x0626,
0xF50D, 0xF50D, 0x0622, 0x0622, 0x0671,
0x0671, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0640,
0x0640, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc: WP60 to Unicode - Arabic Script
****************************************************************************/
FSTATIC FLMUINT16 WPCH_WPUNI14[ 256] =
{
0xF8B6, 0xF8B7, 0xF8B8, 0xF8B9, 0xF8BA,
0xF8BB, 0xF8BC, 0xF8BD, 0xF8BE, 0xF8BF,
0xF8C0, 0xF8C1, 0xF8C2, 0xF8C3, 0xF8C4,
0xF8C5, 0xF8C6, 0xF8C7, 0xF8C8, 0xF8C9,
0xF8CA, 0xF8CB, 0xF8CC, 0xF8CD, 0xF8CE,
0xF8CF, 0xF8D0, 0x064E, 0x0652, 0xF8D3,
0xF8D4, 0xF8D5, 0xF8D6, 0xF8D7, 0xF8D8,
0xF8D9, 0x0674, 0x064C, 0xF8B2, 0xF8DB,
0xF8DC, 0x06F4, 0x06F4, 0x06F5, 0x06F6,
0x06F6, 0x06F7, 0x06F8, 0x067B, 0x067B,
0x067B, 0x067B, 0x0680, 0x0680, 0x0680,
0x0680, 0x067E, 0x067E, 0x067E, 0x067E,
0x0679, 0x0679, 0x0679, 0x0679, 0x067C,
0x067C, 0x067C, 0x067C, 0x067F, 0x067F,
0x067F, 0x067F, 0x067D, 0x067D, 0x067D,
0x067D, 0x067A, 0x067A, 0x067A, 0x067A,
0x0684, 0x0684, 0x0684, 0x0684, 0x0683,
0x0683, 0x0683, 0x0683, 0x0686, 0x0686,
0x0686, 0x0686, 0x0687, 0x0687, 0x0687,
0x0687, 0x0685, 0x0685, 0x0685, 0x0685,
0x0681, 0x0681, 0x0681, 0x0681, 0x0688,
0x0688, 0x0689, 0x0689, 0x068C, 0x068C,
0x068E, 0x068E, 0x068A, 0x068A, 0x068D,
0x068D, 0x0693, 0x0693, 0x0691, 0x0691,
0x0699, 0x0699, 0x0695, 0x0695, 0x0692,
0x0692, 0x0698, 0x0698, 0x0696, 0x0696,
0x0696, 0x0696, 0x069A, 0x069A, 0x069A,
0x069A, 0x06A0, 0x06A0, 0x06A0, 0x06A0,
0x06A4, 0x06A4, 0x06A4, 0x06A4, 0x06A6,
0x06A6, 0x06A6, 0x06A6, 0x06A9, 0x06A9,
0x06A9, 0x06A9, 0x06A9, 0x06A9, 0x06A9,
0x06A9, 0x06AA, 0x06AA, 0x06AA, 0x06AA,
0x06AF, 0x06AF, 0x06AF, 0x06AF, 0x06AF,
0x06AF, 0x06AF, 0x06AF, 0x06AB, 0x06AB,
0x06AB, 0x06AB, 0x06B1, 0x06B1, 0x06B1,
0x06B1, 0x06B3, 0x06B3, 0x06B3, 0x06B3,
0x06B5, 0x06B5, 0x06B5, 0x06B5, 0x0000,
0x0000, 0x06BA, 0x06BA, 0x06BA, 0x06BA,
0x06BC, 0x06BC, 0x06BC, 0x06BC, 0x06BB,
0x06BB, 0x06BB, 0x06BB, 0x06C6, 0x06C6,
0x06CA, 0x06CA, 0x06CA, 0x06CA, 0x0647,
0x0647, 0x0647, 0x0647, 0x06CE, 0x06CE,
0x06CE, 0x06CE, 0x06D2, 0x06D2, 0x06D1,
0x06D1, 0x06D1, 0x06D1, 0x06C0, 0x06C0,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000
};
/****************************************************************************
Desc:
****************************************************************************/
FSTATIC FLMUINT16 * WP60toUni[] =
{
0,
WPCH_WP60UNI1,
WPCH_WP60UNI2,
WPCH_WPUNI3,
WPCH_WPUNI4,
WPCH_WP60UNI5,
WPCH_WPUNI6,
WPCH_WPUNI7,
WPCH_WP60UNI8,
WPCH_WP60UNI9,
WPCH_WP60UNI10,
WPCH_WP60UNI11,
0,
WPCH_WPUNI13,
WPCH_WPUNI14
};
/****************************************************************************
Desc: WP60 to Unicode - Complex Character Unit Table (Multinational 1)
****************************************************************************/
FLMUINT16 WPCH_CPXTAB1[][5] =
{
{ 0x0044, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0063, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x004C, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x006C, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x004E, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x006E, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0052, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0072, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0053, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0073, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0054, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0074, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0059, 0x0306, 0x0000, 0x0000, 0x0000 },
{ 0x0079, 0x0306, 0x0000, 0x0000, 0x0000 },
{ 0x0059, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0079, 0x0300, 0x0000, 0x0000, 0x0000 }
};
/****************************************************************************
Desc: WP60 to Unicode - Complex Character Unit Table (Greek)
****************************************************************************/
FLMUINT16 WPCH_CPXGREEK[][5] =
{
{ 0x0020, 0x0313, 0x0301, 0x0000, 0x0000 },
{ 0x0020, 0x0314, 0x0301, 0x0000, 0x0000 },
{ 0x0020, 0x0313, 0x0300, 0x0000, 0x0000 },
{ 0x0020, 0x0314, 0x0300, 0x0000, 0x0000 },
{ 0x0020, 0x0313, 0x0302, 0x0000, 0x0000 },
{ 0x0020, 0x0314, 0x0302, 0x0000, 0x0000 },
{ 0x0020, 0x0345, 0x0301, 0x0000, 0x0000 },
{ 0x0020, 0x0345, 0x0300, 0x0000, 0x0000 },
{ 0x0020, 0x0345, 0x0302, 0x0000, 0x0000 },
{ 0x0020, 0x0313, 0x0345, 0x0000, 0x0000 },
{ 0x0020, 0x0314, 0x0345, 0x0000, 0x0000 },
{ 0x0020, 0x0313, 0x0301, 0x0345, 0x0000 },
{ 0x0020, 0x0314, 0x0301, 0x0345, 0x0000 },
{ 0x0020, 0x0313, 0x0300, 0x0345, 0x0000 },
{ 0x0020, 0x0314, 0x0300, 0x0345, 0x0000 },
{ 0x0020, 0x0313, 0x0302, 0x0345, 0x0000 },
{ 0x0020, 0x0302, 0x0345, 0x0314, 0x0000 },
{ 0x03B1, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03B1, 0x0302, 0x0000, 0x0000, 0x0000 },
{ 0x03B1, 0x0345, 0x0000, 0x0000, 0x0000 },
{ 0x03B1, 0x0301, 0x0345, 0x0000, 0x0000 },
{ 0x03B1, 0x0302, 0x0345, 0x0000, 0x0000 },
{ 0x03B1, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03B1, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03B1, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03B1, 0x0302, 0x0313, 0x0000, 0x0000 },
{ 0x03B1, 0x0345, 0x0313, 0x0000, 0x0000 },
{ 0x03B1, 0x0301, 0x0345, 0x0313, 0x0000 },
{ 0x03B1, 0x0302, 0x0345, 0x0313, 0x0000 },
{ 0x03B1, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03B1, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03B1, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03B1, 0x0302, 0x0314, 0x0000, 0x0000 },
{ 0x03B1, 0x0345, 0x0314, 0x0000, 0x0000 },
{ 0x03B1, 0x0301, 0x0345, 0x0314, 0x0000 },
{ 0x03B1, 0x0302, 0x0345, 0x0314, 0x0000 },
{ 0x03B5, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03B5, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03B5, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03B5, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03B5, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03B5, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03B5, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03B7, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03B7, 0x0310, 0x0000, 0x0000, 0x0000 },
{ 0x03B7, 0x0345, 0x0000, 0x0000, 0x0000 },
{ 0x03B7, 0x0301, 0x0345, 0x0000, 0x0000 },
{ 0x03B7, 0x0300, 0x0345, 0x0000, 0x0000 },
{ 0x03B7, 0x0302, 0x0345, 0x0000, 0x0000 },
{ 0x03B7, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03B7, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03B7, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03B7, 0x0302, 0x0313, 0x0000, 0x0000 },
{ 0x03B7, 0x0345, 0x0313, 0x0000, 0x0000 },
{ 0x03B7, 0x0301, 0x0345, 0x0313, 0x0000 },
{ 0x03B7, 0x0302, 0x0345, 0x0313, 0x0000 },
{ 0x03B7, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03B7, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03B7, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03B7, 0x0302, 0x0314, 0x0000, 0x0000 },
{ 0x03B7, 0x0345, 0x0314, 0x0000, 0x0000 },
{ 0x03B7, 0x0301, 0x0345, 0x0314, 0x0000 },
{ 0x03B7, 0x0302, 0x0345, 0x0314, 0x0000 },
{ 0x03B9, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03B9, 0x0302, 0x0000, 0x0000, 0x0000 },
{ 0x03B9, 0x0308, 0x0301, 0x0000, 0x0000 },
{ 0x03B9, 0x0308, 0x0300, 0x0000, 0x0000 },
{ 0x03B9, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03B9, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03B9, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03B9, 0x0302, 0x0313, 0x0000, 0x0000 },
{ 0x03B9, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03B9, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03B9, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03B9, 0x0302, 0x0314, 0x0000, 0x0000 },
{ 0x03BF, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03BF, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03BF, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03BF, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03BF, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03BF, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03BF, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03C5, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03C5, 0x0302, 0x0000, 0x0000, 0x0000 },
{ 0x03C5, 0x0308, 0x0301, 0x0000, 0x0000 },
{ 0x03C5, 0x0308, 0x0300, 0x0000, 0x0000 },
{ 0x03C5, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03C5, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03C5, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03C5, 0x0302, 0x0313, 0x0000, 0x0000 },
{ 0x03C5, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03C5, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03C5, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03C5, 0x0302, 0x0314, 0x0000, 0x0000 },
{ 0x03C9, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x03C9, 0x0302, 0x0000, 0x0000, 0x0000 },
{ 0x03C9, 0x0345, 0x0000, 0x0000, 0x0000 },
{ 0x03C9, 0x0301, 0x0345, 0x0000, 0x0000 },
{ 0x03C9, 0x0300, 0x0345, 0x0000, 0x0000 },
{ 0x03C9, 0x0302, 0x0345, 0x0000, 0x0000 },
{ 0x03C9, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03C9, 0x0301, 0x0313, 0x0000, 0x0000 },
{ 0x03C9, 0x0300, 0x0313, 0x0000, 0x0000 },
{ 0x03C9, 0x0302, 0x0313, 0x0000, 0x0000 },
{ 0x03C9, 0x0345, 0x0313, 0x0000, 0x0000 },
{ 0x03C9, 0x0301, 0x0345, 0x0313, 0x0000 },
{ 0x03C9, 0x0302, 0x0345, 0x0313, 0x0000 },
{ 0x03C9, 0x0314, 0x0000, 0x0000, 0x0000 },
{ 0x03C9, 0x0301, 0x0314, 0x0000, 0x0000 },
{ 0x03C9, 0x0300, 0x0314, 0x0000, 0x0000 },
{ 0x03C9, 0x0302, 0x0314, 0x0000, 0x0000 },
{ 0x03C9, 0x0345, 0x0314, 0x0000, 0x0000 },
{ 0x03C9, 0x0301, 0x0345, 0x0314, 0x0000 },
{ 0x03C9, 0x0302, 0x0345, 0x0314, 0x0000 },
{ 0x0391, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0395, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0397, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0399, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x039F, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x03A5, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x03A9, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x03C1, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03B1, 0x0300, 0x0345, 0x0000, 0x0000 },
{ 0x03B1, 0x0300, 0x0313, 0x0345, 0x0000 },
{ 0x03B1, 0x0300, 0x0314, 0x0345, 0x0000 },
{ 0x03B7, 0x0300, 0x0313, 0x0345, 0x0000 },
{ 0x03B7, 0x0300, 0x0314, 0x0345, 0x0000 },
{ 0x03C1, 0x0313, 0x0000, 0x0000, 0x0000 },
{ 0x03C9, 0x0300, 0x0313, 0x0345, 0x0000 },
{ 0x03C9, 0x0300, 0x0314, 0x0345, 0x0000 },
{ 0x0020, 0x0301, 0x0308, 0x0000, 0x0000 },
{ 0x0020, 0x0300, 0x0308, 0x0000, 0x0000 }
};
/****************************************************************************
Desc: WP60 to Unicode - Complex Character Unit Table (Hebrew)
****************************************************************************/
FLMUINT16 WPCH_CPXHEBREW[][5] =
{
{ 0x05F2, 0x05B7, 0x0000, 0x0000, 0x0000 },
{ 0x05D0, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D1, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D2, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D3, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D4, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D5, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D5, 0x05B9, 0x0000, 0x0000, 0x0000 },
{ 0x05D6, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D7, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D8, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D9, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05D9, 0x05B4, 0x0000, 0x0000, 0x0000 },
{ 0x05DB, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05B0, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05B5, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05B1, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05B7, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05B8, 0x0000, 0x0000, 0x0000 },
{ 0x05DA, 0x05BC, 0x05B8, 0x0000, 0x0000 },
{ 0x05DC, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05DE, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05E0, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05DF, 0x05B8, 0x0000, 0x0000, 0x0000 },
{ 0x05E1, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05E4, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05E6, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05E7, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05E9, 0x05B9, 0x0000, 0x0000, 0x0000 },
{ 0x05E9, 0x05B9, 0x05BC, 0x0000, 0x0000 },
{ 0x05E9, 0x05BC, 0x0000, 0x0000, 0x0000 },
{ 0x05EA, 0x05BC, 0x0000, 0x0000, 0x0000 }
};
/****************************************************************************
Desc: WP60 to Unicode - Complex Character Unit Table (Arabic)
****************************************************************************/
FLMUINT16 WPCH_CPXARABIC[][5] =
{
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }
};
/****************************************************************************
Desc: WP60 to Unicode - Complex Character Unit Table (Arabic Script)
****************************************************************************/
FLMUINT16 WPCH_CPXARABIC2[][5] =
{
{ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }
};
/****************************************************************************
Desc: WP60 to Unicode - Complex Character Unit Table (Cyrillic / Georgian)
****************************************************************************/
FLMUINT16 WPCH_CPXCYRILLIC[][5] =
{
{ 0x0410, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0430, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0415, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0435, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0404, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0454, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0418, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0438, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0406, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0456, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0407, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0457, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x041E, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x043E, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0423, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0443, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x042B, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x044B, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x042D, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x044D, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x042E, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x044E, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x042F, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x044F, 0x0301, 0x0000, 0x0000, 0x0000 },
{ 0x0410, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0430, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0415, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0435, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0401, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0451, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0418, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0438, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x041E, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x043E, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0423, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x0443, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x042B, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x044B, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x042D, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x044D, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x042E, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x044E, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x042F, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x044F, 0x0300, 0x0000, 0x0000, 0x0000 },
{ 0x10E3, 0x0302, 0x0000, 0x0000, 0x0000 },
{ 0x0037, 0x0339, 0x0000, 0x0000, 0x0000 },
{ 0x0428, 0x0329, 0x0000, 0x0000, 0x0000 },
{ 0x0448, 0x0329, 0x0000, 0x0000, 0x0000 },
{ 0x0406, 0x031C, 0x0000, 0x0000, 0x0000 },
{ 0x0446, 0x031C, 0x0000, 0x0000, 0x0000 },
{ 0x0418, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x0438, 0x0304, 0x0000, 0x0000, 0x0000 },
{ 0x041A, 0x0328, 0x0000, 0x0000, 0x0000 },
{ 0x043A, 0x0328, 0x0000, 0x0000, 0x0000 },
{ 0x0425, 0x0328, 0x0000, 0x0000, 0x0000 },
{ 0x0445, 0x0328, 0x0000, 0x0000, 0x0000 },
{ 0x0428, 0x0329, 0x0000, 0x0000, 0x0000 },
{ 0x0448, 0x0329, 0x0000, 0x0000, 0x0000 }
};
/****************************************************************************
Desc:
****************************************************************************/
FLMUINT16 * WP60toCpxUni[] =
{
0,
(FLMUINT16 *)WPCH_CPXTAB1,
0,
0,
0,
0,
0,
0,
(FLMUINT16 *)WPCH_CPXGREEK,
(FLMUINT16 *)WPCH_CPXHEBREW,
(FLMUINT16 *)WPCH_CPXCYRILLIC,
(FLMUINT16 *)WPCH_CPXARABIC,
(FLMUINT16 *)WPCH_CPXARABIC2
};
/****************************************************************************
Desc:
****************************************************************************/
FINLINE FLMUINT flmCharTypeAnsi7(
FLMUINT16 ui16Char)
{
if ((ui16Char >= ASCII_LOWER_A && ui16Char <= ASCII_LOWER_Z) ||
(ui16Char >= ASCII_UPPER_A && ui16Char <= ASCII_UPPER_Z) ||
(ui16Char >= ASCII_ZERO && ui16Char <= ASCII_NINE))
{
return (SDWD_CHR);
}
if (ui16Char == 0x27)
{
return (WDJN_CHR);
}
if (ui16Char <= 0x2B)
{
return (DELI_CHR);
}
if (ui16Char == ASCII_COMMA ||
ui16Char == ASCII_DASH ||
ui16Char == ASCII_DOT ||
ui16Char == ASCII_SLASH ||
ui16Char == ASCII_COLON ||
ui16Char == ASCII_AT ||
ui16Char == ASCII_BACKSLASH ||
ui16Char == ASCII_UNDERSCORE)
{
return (WDJN_CHR);
}
return (DELI_CHR);
}
/****************************************************************************
Desc: Return the next WP or unicode character value and parsing type.
****************************************************************************/
FLMUINT flmTextGetCharType(
const FLMBYTE * pText,
FLMUINT uiLen,
FLMUINT16 * pui16WPValue,
FLMUNICODE * puzUniValue,
FLMUINT * pType)
{
FLMUINT uiReturnLen;
FLMUINT16 wpValue;
FLMUNICODE uniValue;
FLMUINT uiCharSet;
uiReturnLen = flmTextGetValue( pText, uiLen, NULL, FLM_COMP_COMPRESS_WHITESPACE,
pui16WPValue, puzUniValue);
wpValue = *pui16WPValue;
uniValue = *puzUniValue;
if (wpValue)
{
if (wpValue < 0x080)
{
*pType = flmCharTypeAnsi7( wpValue);
goto Exit;
}
uiCharSet = (FLMUINT) (wpValue >> 8);
if (uiCharSet == 1 ||
uiCharSet == 2 ||
(uiCharSet >= 8 && uiCharSet <= 11))
{
*pType = SDWD_CHR;
goto Exit;
}
*pType = DELI_CHR;
}
else
{
// For now all unicode is a delimeter
*pType = DELI_CHR;
}
Exit:
return (uiReturnLen);
}
/****************************************************************************
Desc: Return the next WP or unicode character value
Return: Number of bytes formatted to return the character value
****************************************************************************/
FLMUINT flmTextGetValue(
const FLMBYTE * pText, // [in] Points to current value.
FLMUINT uiLen, // [in] Bytes remaining in text.
FLMUINT * puiWpChar2, // Was there a double character?
FLMUINT uiFlags, // [in]
FLMUINT16 * pui16WPValue, // [out] WP Character value or 0 if unicode.
FLMUNICODE * puzUniValue) // [out] Unicode or OEM value if *pui16WPChar is zero.
{
FLMUINT uiReturnLength = 0;
FLMUINT uiObjectLength;
FLMUINT16 ui16CurValue;
FLMUNICODE uzUniValue;
uiReturnLength = 0;
ui16CurValue = 0;
uzUniValue = 0;
if (puiWpChar2 && *puiWpChar2)
{
ui16CurValue = (FLMUINT16) (*puiWpChar2);
*puiWpChar2 = 0;
uiObjectLength = 0;
goto Check_White_Space;
}
while (uiLen && !ui16CurValue && !uzUniValue)
{
ui16CurValue = (FLMUINT16) * pText;
switch (flmTextObjType( ui16CurValue))
{
case ASCII_CHAR_CODE: // 0nnnnnnn
{
uiObjectLength = 1;
Check_White_Space:
// Do all of the bIgnore* stuff here. WHITE SPACE CODE doesn't
// apply.
if (ui16CurValue == (FLMUINT16) ASCII_UNDERSCORE &&
(uiFlags & FLM_COMP_NO_UNDERSCORES))
{
ui16CurValue = (FLMUINT16) ASCII_SPACE;
}
if (ui16CurValue == (FLMUINT16) ASCII_SPACE)
{
if (uiFlags & FLM_COMP_NO_WHITESPACE)
{
ui16CurValue = 0;
}
else if (uiFlags & FLM_COMP_COMPRESS_WHITESPACE)
{
// Eat up the remaining spaces and underscores (if
// FLM_COMP_NO_UNDERSCORES).
while ((pText[uiObjectLength] == ASCII_SPACE ||
(pText[uiObjectLength] == ASCII_UNDERSCORE &&
(uiFlags & FLM_COMP_NO_UNDERSCORES))) &&
uiObjectLength < uiLen)
{
uiObjectLength++;
}
}
}
else if (ui16CurValue == ASCII_DASH && (uiFlags & FLM_COMP_NO_DASHES))
{
ui16CurValue = 0;
}
break;
}
case CHAR_SET_CODE: // 10nnnnnn - Character Set | Char
{
uiObjectLength = 2;
ui16CurValue = (FLMUINT16) (((FLMUINT16) (ui16CurValue &
(~CHAR_SET_MASK)) << 8) +
(FLMUINT16) *(pText + 1));
break;
}
case WHITE_SPACE_CODE: // 110nnnnn
{
FLMBYTE ucTmpByte;
uiObjectLength = 1;
ucTmpByte = *pText & (~WHITE_SPACE_MASK);
ui16CurValue = ((ucTmpByte == HARD_HYPHEN) ||
(ucTmpByte == HARD_HYPHEN_EOL) ||
(ucTmpByte == HARD_HYPHEN_EOP))
? (FLMUINT16) 0x2D
: (FLMUINT16) 0x20;
break;
}
case EXT_CHAR_CODE: // Full extended character
{
uiObjectLength = 3;
ui16CurValue = (FLMUINT16) (((FLMUINT16) *(pText + 1) << 8) +
(FLMUINT16) *(pText + 2));
break;
}
case UNICODE_CODE: // Unconvertable UNICODE code
{
uiObjectLength = 3;
ui16CurValue = 0;
uzUniValue = (FLMUINT16) (((FLMUINT16) *(pText + 1) << 8) +
(FLMUINT16) *(pText + 2));
break;
}
case OEM_CODE:
{
uiObjectLength = 2; // OEM characters are always >= 128
// Make this a unicode character
ui16CurValue = 0;
uzUniValue = (FLMUINT16) * (pText + 1);
break;
}
// Skip all of the unknown stuff
case UNK_GT_255_CODE:
{
uiObjectLength = (FLMUINT16) (1 + sizeof(FLMUINT16) +
FB2UW( pText + 1));
break;
}
case UNK_LE_255_CODE:
{
uiObjectLength = 2 + (FLMUINT16) * (pText + 1);
break;
}
case UNK_EQ_1_CODE:
{
uiObjectLength = 2;
break;
}
default:
{
// Coded to skip remaining data
ui16CurValue = 0;
uiObjectLength = uiLen;
break;
}
}
uiReturnLength += uiObjectLength;
pText += uiObjectLength;
uiLen -= uiObjectLength;
}
*pui16WPValue = ui16CurValue;
*puzUniValue = uzUniValue;
return (uiReturnLength);
}
/****************************************************************************
Desc: Returns the size of buffer needed to hold the unicode string in
FLAIM's storage format.
****************************************************************************/
FLMEXP FLMUINT FLMAPI FlmGetUnicodeStorageLength(
const FLMUNICODE * puzStr)
{
FLMBYTE chrSet;
FLMUINT uiStorageLength = 0;
FLMUINT16 wp60Buf[12];
flmAssert( puzStr != NULL);
// Two passes are needed to store a UNICODE string: 1st pass
// determines the storage length (via FlmGetUnicodeStorageLength) 2nd
// pass stores the string into FLAIMs internal text format (via
// FlmUnicode2Storage).
do
{
if (*puzStr < 0x20)
{
uiStorageLength += 3;
}
else
{
if (*puzStr < 0x7F)
{
uiStorageLength++;
puzStr++;
continue;
}
if( !f_depricatedUnicodeToWP( *puzStr, wp60Buf))
{
uiStorageLength += 3;
}
else
{
if ((chrSet = (FLMBYTE) (wp60Buf[0] >> 8)) == 0)
{
uiStorageLength++;
}
else
{
uiStorageLength += (chrSet <= 63) ? 2 : 3;
}
}
}
puzStr++;
} while (*puzStr != 0);
return (uiStorageLength);
}
/****************************************************************************
Desc: Copies and formats a Unicode string into FLAIM's storage format.
The Unicode string must be in little endian format.
Unicode values that are not represented as WordPerfect 6.x
characters are preserved as non-WP characters.
****************************************************************************/
FLMEXP RCODE FLMAPI FlmUnicode2Storage(
const FLMUNICODE * puzStr,
FLMUINT * puiBufLength,
FLMBYTE * pBuf)
{
FLMBYTE chrSet;
FLMUINT16 wp60Buf[12];
FLMUINT uiStorageLength = 0;
flmAssert( puzStr != NULL);
flmAssert( pBuf != NULL);
do
{
if (*puzStr < 0x20)
{
// Output the character as an unconvertable unicode character.
*pBuf++ = UNICODE_CODE;
*pBuf++ = *puzStr >> 8;
*pBuf++ = (FLMBYTE) *puzStr;
uiStorageLength += 3;
}
else
{
if (*puzStr < 0x7F)
{
uiStorageLength++;
*pBuf++ = (FLMBYTE) *puzStr++;
continue;
}
if( !f_depricatedUnicodeToWP( *puzStr, wp60Buf))
{
*pBuf++ = UNICODE_CODE;
*pBuf++ = *puzStr >> 8;
*pBuf++ = (FLMBYTE) *puzStr;
uiStorageLength += 3;
}
else
{
chrSet = wp60Buf[0] >> 8;
if (chrSet == 0)
{
*pBuf++ = (FLMBYTE) wp60Buf[0];
uiStorageLength++;
}
else if (chrSet <= 63)
{
*pBuf++ = CHAR_SET_CODE | chrSet;
*pBuf++ = (FLMBYTE) wp60Buf[0];
uiStorageLength += 2;
}
else
{
*pBuf++ = EXT_CHAR_CODE;
*pBuf++ = chrSet;
*pBuf++ = (FLMBYTE) wp60Buf[0];
uiStorageLength += 3;
}
}
}
puzStr++;
// Make sure input buffer was large enough
if (*puiBufLength < uiStorageLength)
{
return (RC_SET( FERR_CONV_DEST_OVERFLOW));
}
} while (*puzStr != 0);
*puiBufLength = uiStorageLength;
return (FERR_OK);
}
/****************************************************************************
Desc: Converts storage formats to UNICODE.
****************************************************************************/
FLMEXP RCODE FLMAPI FlmStorage2Unicode(
FLMUINT uiValueType,
FLMUINT uiValueLength,
const FLMBYTE * pucValue,
FLMUINT * puiStrBufLen,
FLMUNICODE * puzStrBuf)
{
RCODE rc = FERR_OK;
FLMUNICODE * tablePtr;
FLMBYTE c;
FLMUINT bytesProcessed = 0;
FLMUINT bytesOutput = 0;
FLMUINT outputData;
FLMUINT maxOutLen;
FLMBYTE objType;
FLMUINT objLength = 0;
FLMBYTE tempBuf[80];
FLMBYTE chrSet;
FLMBYTE chrVal;
FLMUNICODE newChrVal;
// If the value is a number, convert to text first
if (uiValueType != FLM_TEXT_TYPE)
{
if (pucValue == NULL)
{
uiValueLength = 0;
}
else
{
if (uiValueType == FLM_NUMBER_TYPE)
{
uiValueLength = sizeof(tempBuf);
rc = GedNumToText( pucValue, tempBuf, &uiValueLength);
}
else
{
rc = RC_SET( FERR_CONV_ILLEGAL);
goto Exit;
}
if (RC_BAD( rc))
{
goto Exit;
}
pucValue = &tempBuf[0];
}
}
maxOutLen = *puiStrBufLen;
outputData = ((puzStrBuf != NULL) && (maxOutLen > 1));
if (outputData)
{
maxOutLen -= 2;
}
// Parse through the string outputting data to the buffer as we go
while (bytesProcessed < uiValueLength)
{
// Determine what we are pointing at
c = *pucValue;
objType = flmTextObjType( c);
switch (objType)
{
case ASCII_CHAR_CODE:
{
objLength = 1;
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
*puzStrBuf++ = c;
}
bytesOutput += 2;
break;
}
case CHAR_SET_CODE:
{
objLength = 2;
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
// Convert WP to UNICODE
chrSet = c & 0x3F;
chrVal = *(pucValue + 1);
goto ConvertWPToUni;
}
bytesOutput += 2;
break;
}
case WHITE_SPACE_CODE:
{
objLength = 1;
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
if (c == (WHITE_SPACE_CODE | NATIVE_TAB))
{
*puzStrBuf = (FLMUNICODE) 9;
}
else if (c == (WHITE_SPACE_CODE | NATIVE_LINEFEED))
{
*puzStrBuf = (FLMUNICODE) 10;
}
else if (c == (WHITE_SPACE_CODE | HARD_RETURN))
{
*puzStrBuf = (FLMUNICODE) 13;
}
else
{
*puzStrBuf = (FLMUNICODE) 0x20;
}
puzStrBuf++;
}
bytesOutput += 2;
break;
}
case EXT_CHAR_CODE:
{
objLength = 3;
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
// Convert back from WP to UNICODE
chrSet = *(pucValue + 1);
chrVal = *(pucValue + 2);
ConvertWPToUni:
if ((chrSet < WP60toUni_MAX) &&
((tablePtr = WP60toUni[chrSet]) != 0))
{
FLMUNICODE * pCpxUniStr;
newChrVal = tablePtr[chrVal];
if ((newChrVal & WPCH_LOMASK) == 0xF000)
{
// Does character convert to many Unicode chars?
pCpxUniStr = WP60toCpxUni[chrSet];
pCpxUniStr += (newChrVal & WPCH_HIMASK) * WPCH_MAX_COMPLEX;
while (*pCpxUniStr)
{
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
*puzStrBuf++ = *pCpxUniStr++;
}
bytesOutput += 2;
}
}
else
{
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
*puzStrBuf++ = newChrVal;
}
bytesOutput += 2;
}
}
else
{
// Big extended WP char
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
*puzStrBuf++ = 0x03;
}
bytesOutput += 2;
}
}
break;
}
case OEM_CODE:
{
// We always just skip OEM codes
objLength = 2;
break;
}
case UNICODE_CODE:
{
objLength = 3;
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
*puzStrBuf++ = (*(pucValue + 1) << 8) + *(pucValue + 2);
}
bytesOutput += 2;
break;
}
case UNK_EQ_1_CODE:
{
objLength = 2;
if (outputData)
{
if ((maxOutLen < 2) || (bytesOutput > maxOutLen - 2))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto GedGetUNICODE_Output;
}
*puzStrBuf++ = *(pucValue + 1);
}
bytesOutput += 2;
break;
}
default:
{
flmAssert( 0);
bytesProcessed = uiValueLength;
break;
}
}
pucValue += objLength;
bytesProcessed += objLength;
}
// Add TWO terminating NULL characters, but DO NOT increment the
// bytesOutput counter.
GedGetUNICODE_Output:
if (outputData)
{
*puzStrBuf = 0;
}
*puiStrBufLen = bytesOutput;
Exit:
return (rc);
}
/****************************************************************************
Desc: Returns the size of buffer needed to hold the native string in
FLAIM's storage format.
****************************************************************************/
FLMEXP FLMUINT FLMAPI FlmGetNativeStorageLength(
const char * pszStr)
{
RCODE rc;
FLMUINT uiStorageLength;
rc = FlmNative2Storage( pszStr, 0, &uiStorageLength, NULL);
flmAssert( rc == FERR_OK);
return (uiStorageLength);
}
/****************************************************************************
Desc: Copies and formats a native 8-bit null terminated string into a
caller supplied buffer, It converts the string into an internal FLAIM
TEXT string.
****************************************************************************/
FLMEXP RCODE FLMAPI FlmNative2Storage(
const char * pszNativeString,
FLMUINT uiStringLength,
FLMUINT * puiStorageLen,
FLMBYTE * pStorageBuffer)
{
FLMBOOL bGetLengthPass;
const char * pCurChar;
const char * pEnd = NULL;
FLMBYTE ucAsciiChar;
FLMUINT uiStorageLen = 0;
// Are we determining the needed length or converting the data
bGetLengthPass = pStorageBuffer ? FALSE : TRUE;
if (uiStringLength)
{
pEnd = &pszNativeString[uiStringLength];
}
// Parse through the string
pCurChar = pszNativeString;
for (;;)
{
if (*pCurChar == 0 || (pEnd && pCurChar >= pEnd))
{
// We have reached end of the string, return the storage length
*puiStorageLen = uiStorageLen;
return (FERR_OK);
}
// Put the character in a local variable for speed
ucAsciiChar = f_toascii( *pCurChar);
if (ucAsciiChar < ASCII_SPACE)
{
// If it is a tab, carriage return, or linefeed, output a
// whitespace code for indexing and each word purposes
if (ucAsciiChar == ASCII_TAB)
{
if (bGetLengthPass)
{
uiStorageLen++;
}
else
{
*pStorageBuffer++ = WHITE_SPACE_CODE | NATIVE_TAB;
}
}
else if (ucAsciiChar == ASCII_NEWLINE)
{
if (bGetLengthPass)
{
uiStorageLen++;
}
else
{
*pStorageBuffer++ = WHITE_SPACE_CODE | NATIVE_LINEFEED;
}
}
else if (ucAsciiChar == ASCII_CR)
{
if (bGetLengthPass)
{
uiStorageLen++;
}
else
{
*pStorageBuffer++ = WHITE_SPACE_CODE | HARD_RETURN;
}
}
else
{
if (bGetLengthPass)
{
uiStorageLen += 2;
}
else
{
// Output the character as an unknown byte if no WP char
// found
*pStorageBuffer++ = UNK_EQ_1_CODE | NATIVE_TYPE;
*pStorageBuffer++ = ucAsciiChar;
}
}
}
else if (ucAsciiChar < 127)
{
// For now assume < 127 means character set zero. Value 127 is
// very sacred in WP land and is really an extended character
if (bGetLengthPass)
{
uiStorageLen++;
}
else
{
*pStorageBuffer++ = ucAsciiChar;
}
}
else
{
if (bGetLengthPass)
{
uiStorageLen += 2;
}
else
{
*pStorageBuffer++ = OEM_CODE;
*pStorageBuffer++ = ucAsciiChar;
}
}
pCurChar++;
}
}
/****************************************************************************
Desc: Convert a storage text string into a native string
****************************************************************************/
FLMEXP RCODE FLMAPI FlmStorage2Native(
FLMUINT uiValueType,
FLMUINT uiValueLength,
const FLMBYTE * pucValue,
FLMUINT * puiOutBufLenRV,
char * pOutBuffer)
{
RCODE rc = FERR_OK;
const FLMBYTE * ptr = pucValue;
char * outPtr;
FLMBYTE c;
FLMUINT bytesProcessed;
FLMUINT bytesOutput;
FLMUINT valLength = uiValueLength;
FLMUINT outputData;
FLMUINT maxOutLen = 0;
FLMBYTE objType;
FLMUINT objLength = 0;
FLMBYTE TempBuf[80];
FLMUINT length;
// If the input is not a TEXT or a NUMBER node, return an error for now
if ((uiValueType == FLM_BINARY_TYPE) || (uiValueType == FLM_CONTEXT_TYPE))
{
rc = RC_SET( FERR_CONV_ILLEGAL);
goto Exit;
}
// If the node is a number, convert to text first
if (uiValueType != FLM_TEXT_TYPE)
{
if (ptr == NULL)
{
valLength = 0;
}
else
{
valLength = sizeof(TempBuf);
flmAssert( uiValueType == FLM_NUMBER_TYPE);
if (RC_BAD( rc = GedNumToText( ptr, TempBuf, &valLength)))
{
goto Exit;
}
ptr = &TempBuf[0];
}
}
outputData = ((pOutBuffer != NULL) && (*puiOutBufLenRV));
if (outputData)
{
maxOutLen = *puiOutBufLenRV - 1;
}
bytesProcessed = 0;
bytesOutput = 0;
outPtr = pOutBuffer;
while (bytesProcessed < valLength)
{
c = *ptr;
objType = (FLMBYTE) flmTextObjType( c);
switch (objType)
{
case ASCII_CHAR_CODE:
{
objLength = 1;
if (outputData)
{
if (bytesOutput < maxOutLen)
{
*outPtr++ = f_tonative( c);
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
break;
}
case CHAR_SET_CODE:
{
objLength = 2;
if (outputData)
{
if (bytesOutput < maxOutLen)
{
if ((c & (~objType)) == 0)
{
*outPtr++ = f_tonative( *(ptr + 1));
}
else
{
*outPtr++ = 0xFF;
}
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
break;
}
case WHITE_SPACE_CODE:
{
objLength = 1;
// ALWAYS OUTPUT A SPACE WHEN WE SEE A WHITE_SPACE_CODE ;
// UNLESS IT IS A HYPHEN
if (outputData)
{
if (bytesOutput < maxOutLen)
{
c &= (~WHITE_SPACE_MASK);
if ((c == HARD_HYPHEN) ||
(c == HARD_HYPHEN_EOL) ||
(c == HARD_HYPHEN_EOP))
{
c = ASCII_DASH;
}
else if (c == NATIVE_TAB)
{
c = ASCII_TAB;
}
else if (c == NATIVE_LINEFEED)
{
c = ASCII_NEWLINE;
}
else if (c == HARD_RETURN)
{
c = ASCII_CR;
}
else
{
c = ASCII_SPACE;
}
*outPtr++ = f_tonative( c);
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
break;
}
case UNK_GT_255_CODE:
case UNK_LE_255_CODE:
{
if (objType == UNK_GT_255_CODE)
{
length = FB2UW( ptr + 1);
objLength = (FLMUINT16) (1 + sizeof(FLMUINT16) + length);
}
else
{
length = (FLMUINT16) * (ptr + 1);
objLength = (FLMUINT16) (2 + length);
}
// Skip it if it is not a NATIVE code
if ((c & (~objType)) == NATIVE_TYPE)
{
if (outputData)
{
if ((maxOutLen < length) || (bytesOutput > maxOutLen - length))
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
if (objType == UNK_LE_255_CODE)
{
f_memcpy( outPtr, ptr + 2, length);
}
else
{
f_memcpy( outPtr, ptr + 1 + sizeof(FLMUINT16), length);
}
outPtr += length;
}
bytesOutput += length;
}
break;
}
case UNK_EQ_1_CODE:
{
objLength = 2;
// Skip it if it is not a NATIVE code
if ((c & (~objType)) == NATIVE_TYPE)
{
if (outputData)
{
if (bytesOutput < maxOutLen)
{
*outPtr++ = f_tonative( *(ptr + 1));
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
}
break;
}
case EXT_CHAR_CODE:
{
objLength = 3;
if (outputData)
{
if (bytesOutput < maxOutLen)
{
*outPtr += 0xFF;
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
break;
}
case OEM_CODE:
{
objLength = 2;
if (outputData)
{
if (bytesOutput < maxOutLen)
{
*outPtr++ = f_tonative( *(ptr + 1));
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
break;
}
case UNICODE_CODE:
{
objLength = 3;
if (outputData)
{
if (bytesOutput < maxOutLen)
{
*outPtr++ = UNICODE_UNCONVERTABLE_CHAR;
}
else
{
rc = RC_SET( FERR_CONV_DEST_OVERFLOW);
goto Native_Output;
}
}
bytesOutput++;
break;
}
default:
{
break;
}
}
ptr += objLength;
bytesProcessed += objLength;
}
// Add a terminating NULL character, but DO NOT increment the
// bytesOutput counter!
Native_Output:
if (outputData)
{
*outPtr = 0;
}
*puiOutBufLenRV = bytesOutput;
Exit:
return (rc);
}