fx_ucd.h revision ee451cb395940862dad63c85adfe8f2fd55e864c
126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// Copyright 2014 PDFium Authors. All rights reserved.
226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// Use of this source code is governed by a BSD-style license that can be
326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// found in the LICENSE file.
426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar
526266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar
726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#ifndef _FX_UNICODE_
826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar#define _FX_UNICODE_
926266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbarenum FX_CHARBREAKPROP {
1026266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_OP = 0,
1126266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_CL = 1,
1226266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_QU = 2,
13c86804bc9c3f1953520b59084c9ad75104aba123Daniel Dunbar    FX_CBP_GL = 3,
14d99ef536b241071b6f4c01db6525dc03242ac30bDmitri Gribenko    FX_CBP_NS = 4,
15fbe2fafe317a757031e4f24026a77dd305607d32Daniel Dunbar    FX_CBP_EX = 5,
1626266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_SY = 6,
1726266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_IS = 7,
1826266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_PR = 8,
198616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CBP_PO = 9,
208616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CBP_NU = 10,
218616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CBP_AL = 11,
228616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CBP_ID = 12,
2326266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_IN = 13,
2426266885d6eba8ee197577dd42a8e68a0e4dd2e8Daniel Dunbar    FX_CBP_HY = 14,
259a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_BA = 15,
269a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_BB = 16,
27171af64ef10ae816ed2a4f15f5d17aca1d71769fAlexander Kornienko    FX_CBP_B2 = 17,
289a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_ZW = 18,
299a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_CM = 19,
309a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_WJ = 20,
319a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_H2 = 21,
329a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_H3 = 22,
339a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_JL = 23,
349a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_JV = 24,
359a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_JT = 25,
369a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar
3732148cef25570a4fbe3ad0ec497ce3ae2cf1b774Daniel Dunbar    FX_CBP_BK = 26,
3832148cef25570a4fbe3ad0ec497ce3ae2cf1b774Daniel Dunbar    FX_CBP_CR = 27,
39da1573f95902a42aa4d11e8f45ab98ec7e27bc28Daniel Dunbar    FX_CBP_LF = 28,
409a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_NL = 29,
41467dc88512b4ba4bb16e274ea3771dc1415d31daDouglas Gregor    FX_CBP_SA = 30,
429a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_SG = 31,
439a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_CB = 32,
442758595023c5c7c0495f19260089f975022c50dcDaniel Dunbar    FX_CBP_XX = 33,
45c544ba09695e300f31355af342258bd57619e737Douglas Gregor    FX_CBP_AI = 34,
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    FX_CBP_SP = 35,
479a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_CBP_TB = 37,
48d10c5b88334d860d19284032a7126dc2219f57edDaniel Dunbar    FX_CBP_NONE = 36,
499a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar};
50f033f1da4a34f8df6e95e9929dc04ff54bb8fb01Douglas Gregor#define FX_BIDICLASSBITS		6
519a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar#define FX_BIDICLASSBITSMASK	(31 << FX_BIDICLASSBITS)
52809d1be9820039b4cf6efa48246a0d70ffa13394James Dennettenum FX_BIDICLASS {
539a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_ON		= 0,
549a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_L		= 1,
559a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_R		= 2,
5630660a898545416f0fea2d717f16f75640001e38Ted Kremenek    FX_BIDICLASS_AN		= 3,
579a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_EN		= 4,
589a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_AL		= 5,
599a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_NSM	= 6,
609a8a83b8fe5be9a4ca20ec6eeaafaf201ce594f9Daniel Dunbar    FX_BIDICLASS_CS		= 7,
611f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_ES		= 8,
621f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_ET		= 9,
631f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_BN		= 10,
641f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_S		= 11,
651f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_WS		= 12,
661f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_B		= 13,
671f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_RLO	= 14,
681f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_RLE	= 15,
691f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_LRO	= 16,
701f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_LRE	= 17,
711f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_PDF	= 18,
721f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_BIDICLASS_N		= FX_BIDICLASS_ON,
731f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor};
741f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor#define FX_CHARTYPEBITS		11
751f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor#define FX_CHARTYPEBITSMASK	(15 << FX_CHARTYPEBITS)
761f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregorenum FX_CHARTYPE {
771f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_Unknown				= 0,
781f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_Tab					= (1 << FX_CHARTYPEBITS),
791f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_Space				= (2 << FX_CHARTYPEBITS),
808616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CHARTYPE_Control				= (3 << FX_CHARTYPEBITS),
811f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_Combination			= (4 << FX_CHARTYPEBITS),
821f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_Numeric				= (5 << FX_CHARTYPEBITS),
831f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_Normal				= (6 << FX_CHARTYPEBITS),
848616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CHARTYPE_ArabicAlef			= (7 << FX_CHARTYPEBITS),
858616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    FX_CHARTYPE_ArabicSpecial		= (8 << FX_CHARTYPEBITS),
861f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_ArabicDistortion	= (9 << FX_CHARTYPEBITS),
871f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_ArabicNormal		= (10 << FX_CHARTYPEBITS),
881f6b2b5c82b2d2d3935b0db76352a04e9877b73fDouglas Gregor    FX_CHARTYPE_ArabicForm			= (11 << FX_CHARTYPEBITS),
89a1f1fad8b60e1cb9d21a40a37f2e03150bcbeb6fDouglas Gregor    FX_CHARTYPE_Arabic				= (12 << FX_CHARTYPEBITS),
90a1f1fad8b60e1cb9d21a40a37f2e03150bcbeb6fDouglas Gregor};
918616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidistypedef struct _FX_CHARPROPERTIES {
928616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis    union {
936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines        struct {
94a1f1fad8b60e1cb9d21a40a37f2e03150bcbeb6fDouglas Gregor            FX_DWORD	dwBreakType		: 6;
956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines            FX_DWORD	dwBidiClass		: 5;
968616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis            FX_DWORD	dwCharType		: 4;
978616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis            FX_DWORD	dwRotation		: 1;
988616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis            FX_DWORD	dwCJKSpecial	: 1;
998616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis            FX_DWORD	dwVertIndex		: 6;
1008616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis            FX_DWORD	dwBidiIndex		: 9;
1018616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis        };
1028616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis        FX_DWORD	dwCharProps;
1036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    };
1048616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis} FX_CHARPROPERTIES;
1056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesFX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch);
1068616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios KyrtzidisFX_BOOL	FX_IsCtrlCode(FX_WCHAR ch);
1078616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios KyrtzidisFX_BOOL	FX_IsRotationCode(FX_WCHAR ch);
1088616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios KyrtzidisFX_BOOL FX_IsCombinationChar(FX_WCHAR wch);
1098616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios KyrtzidisFX_BOOL	FX_IsBidiChar(FX_WCHAR wch);
1108616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios KyrtzidisFX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical);
1118616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios KyrtzidisFX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_DWORD dwProps, FX_BOOL bRTL, FX_BOOL bVertical);
1128616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis#endif
1138616f9af65b9a3662f2c9dfed38eeabc509f8446Argyrios Kyrtzidis