949 lines
29 KiB
C++
949 lines
29 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Filename : PropArray.h
|
|
// Purpose : properties definitions
|
|
//
|
|
// Project : WordBreakers
|
|
// Component: English word breaker
|
|
//
|
|
// Author : yairh
|
|
//
|
|
// Log:
|
|
//
|
|
// Jan 06 2000 yairh creation
|
|
// May 07 2000 dovh - const array generation:
|
|
// split PropArray.h => PropArray.h + PropFlags.h
|
|
// May 11 2000 dovh - Simplify GET_PROP to do double indexing always.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _PROP_ARRAY_H_
|
|
#define _PROP_ARRAY_H_
|
|
|
|
#include "PropFlags.h"
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Class CPropFlag
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CPropFlag
|
|
{
|
|
public:
|
|
|
|
//
|
|
// methods
|
|
//
|
|
|
|
CPropFlag();
|
|
CPropFlag(ULONGLONG ul);
|
|
|
|
void Clear();
|
|
void Set(ULONGLONG ul);
|
|
CPropFlag& operator= (const CPropFlag& f);
|
|
CPropFlag& operator|= (const CPropFlag& f);
|
|
|
|
public:
|
|
|
|
//
|
|
// members
|
|
//
|
|
|
|
ULONGLONG m_ulFlag;
|
|
};
|
|
|
|
inline CPropFlag::CPropFlag(): m_ulFlag(0)
|
|
{
|
|
}
|
|
|
|
inline CPropFlag::CPropFlag(ULONGLONG ul): m_ulFlag(ul)
|
|
{
|
|
}
|
|
|
|
inline void CPropFlag::Clear()
|
|
{
|
|
m_ulFlag = 0;
|
|
}
|
|
|
|
inline void CPropFlag::Set(ULONGLONG ul)
|
|
{
|
|
m_ulFlag |= ul;
|
|
|
|
#ifdef DECLARE_BYTE_ARRAY
|
|
if (ul & PROP_DEFAULT_BREAKER)
|
|
{
|
|
m_ulFlag |= PROP_RESERVED_BREAKER;
|
|
}
|
|
#endif // DECLARE_BYTE_ARRAY
|
|
|
|
}
|
|
|
|
inline CPropFlag& CPropFlag::operator= (const CPropFlag& f)
|
|
{
|
|
m_ulFlag = f.m_ulFlag;
|
|
return *this;
|
|
}
|
|
|
|
inline CPropFlag& CPropFlag::operator|= (const CPropFlag& f)
|
|
{
|
|
m_ulFlag |= f.m_ulFlag;
|
|
return *this;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Class CTokenState
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
class CPropArray
|
|
{
|
|
public:
|
|
|
|
//
|
|
// methods
|
|
//
|
|
|
|
CPropArray();
|
|
~CPropArray();
|
|
|
|
CPropFlag& GetPropForUpdate(WCHAR wch);
|
|
|
|
public:
|
|
|
|
//
|
|
// members
|
|
//
|
|
|
|
CPropFlag* m_apCodePage[1<<8];
|
|
|
|
CPropFlag m_aDefaultCodePage[1<<8];
|
|
};
|
|
|
|
inline CPropArray::CPropArray()
|
|
{
|
|
for (WCHAR wch = 0; wch < (1<<8); wch++)
|
|
{
|
|
m_apCodePage[wch] = NULL;
|
|
}
|
|
|
|
//
|
|
// White space characters
|
|
//
|
|
|
|
for(wch=0x0; wch <= 0x1F; wch++) // control 0x0 - 0x1F
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
for(wch=0x80; wch <= 0x9F; wch++) // control 0x80 - 0x9F
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
GetPropForUpdate(0x7F).Set(PROP_WS); // control
|
|
|
|
GetPropForUpdate(0x0020).Set(PROP_WS); // space
|
|
GetPropForUpdate(0x0022).Set(PROP_WS); // quotation mark
|
|
GetPropForUpdate(0x00AB).Set(PROP_WS); // left angle double pointing quotation mark
|
|
GetPropForUpdate(0x00BB).Set(PROP_WS); // right angle double pointing quotation mark
|
|
GetPropForUpdate(0x201A).Set(PROP_WS); // Single low-9 quotation mark
|
|
GetPropForUpdate(0x201B).Set(PROP_WS); // Single low-9 quotation mark
|
|
GetPropForUpdate(0x201C).Set(PROP_WS); // Left double quotation mark
|
|
GetPropForUpdate(0x201D).Set(PROP_WS); // Right double quotation mark
|
|
GetPropForUpdate(0x201E).Set(PROP_WS); // Double low-9 quotation mark
|
|
GetPropForUpdate(0x201F).Set(PROP_WS); // Double high-reversed-9 quotation mark
|
|
|
|
GetPropForUpdate(0x2039).Set(PROP_WS); // single left pointing quotation mark
|
|
GetPropForUpdate(0x203A).Set(PROP_WS); // single right pointing quotation mark
|
|
|
|
GetPropForUpdate(0x301D).Set(PROP_WS); // Reverse double prime quotation mark
|
|
GetPropForUpdate(0x301E).Set(PROP_WS); // Double prime quotation mark
|
|
GetPropForUpdate(0x301F).Set(PROP_WS); // Low double prime quotation mark
|
|
|
|
for(wch=0x2000; wch <= 0x200B; wch++) // space 0x2000 - 0x200B
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
GetPropForUpdate(0x3000).Set(PROP_WS); // space
|
|
GetPropForUpdate(0xFF02).Set(PROP_WS); // Full width quotation mark
|
|
|
|
// Geometrical shapes, arrows and other characters that can be ignored
|
|
|
|
for(wch=0x2190; wch <= 0x21F3; wch++) // Arrows
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
for(wch=0x2500; wch <= 0x257F; wch++) // Box Drawing
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
for(wch=0x2580; wch <= 0x2595; wch++) // Block Elements
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
for(wch=0x25A0; wch <= 0x25F7; wch++) // Geometric Shapes
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_WS);
|
|
}
|
|
|
|
//
|
|
// Exclmation mark
|
|
//
|
|
|
|
GetPropForUpdate(0x0021).Set(PROP_EXCLAMATION_MARK);
|
|
GetPropForUpdate(0x00A1).Set(PROP_EXCLAMATION_MARK);
|
|
GetPropForUpdate(0x01C3).Set(PROP_EXCLAMATION_MARK);
|
|
GetPropForUpdate(0x203C).Set(PROP_EXCLAMATION_MARK);
|
|
GetPropForUpdate(0x203D).Set(PROP_EXCLAMATION_MARK);
|
|
GetPropForUpdate(0x2762).Set(PROP_EXCLAMATION_MARK);
|
|
GetPropForUpdate(0xFF01).Set(PROP_EXCLAMATION_MARK); // Full width
|
|
|
|
//
|
|
// Number sign
|
|
//
|
|
|
|
GetPropForUpdate(0x0023).Set(PROP_POUND); // #
|
|
GetPropForUpdate(0xFF03).Set(PROP_POUND); // Full width
|
|
|
|
//
|
|
// Dollar sign
|
|
//
|
|
|
|
GetPropForUpdate(0x0024).Set(PROP_DOLLAR); // $
|
|
GetPropForUpdate(0xFF04).Set(PROP_DOLLAR); // Full width
|
|
|
|
//
|
|
// Percentage sign
|
|
//
|
|
|
|
GetPropForUpdate(0x0025).Set(PROP_PERCENTAGE);
|
|
GetPropForUpdate(0x2030).Set(PROP_PERCENTAGE);
|
|
GetPropForUpdate(0x2031).Set(PROP_PERCENTAGE);
|
|
GetPropForUpdate(0xFF05).Set(PROP_PERCENTAGE); // Full width
|
|
|
|
//
|
|
// Ampersand
|
|
//
|
|
|
|
GetPropForUpdate(0x0026).Set(PROP_AND); // &
|
|
|
|
//
|
|
// Apostrophe
|
|
//
|
|
|
|
GetPropForUpdate(0x0027).Set(PROP_APOSTROPHE);
|
|
GetPropForUpdate(0x2018).Set(PROP_APOSTROPHE);
|
|
GetPropForUpdate(0x2019).Set(PROP_APOSTROPHE);
|
|
GetPropForUpdate(0x2032).Set(PROP_APOSTROPHE);
|
|
GetPropForUpdate(0xFF07).Set(PROP_APOSTROPHE); // Full width
|
|
|
|
//
|
|
// Parenthesis
|
|
//
|
|
|
|
GetPropForUpdate(0x0028).Set(PROP_LEFT_PAREN); // (
|
|
GetPropForUpdate(0xFF08).Set(PROP_LEFT_PAREN); // Full width
|
|
GetPropForUpdate(0x0029).Set(PROP_RIGHT_PAREN); // )
|
|
GetPropForUpdate(0xFF09).Set(PROP_RIGHT_PAREN); // Full width
|
|
|
|
//
|
|
// Asterisk
|
|
//
|
|
|
|
GetPropForUpdate(0x002A).Set(PROP_ASTERISK); // *
|
|
GetPropForUpdate(0x2217).Set(PROP_ASTERISK);
|
|
GetPropForUpdate(0x2731).Set(PROP_ASTERISK);
|
|
GetPropForUpdate(0xFF0A).Set(PROP_ASTERISK); // Full width
|
|
|
|
//
|
|
// Plus sign
|
|
//
|
|
|
|
GetPropForUpdate(0x002B).Set(PROP_PLUS); // +
|
|
GetPropForUpdate(0xFF0B).Set(PROP_PLUS); // Full width
|
|
|
|
//
|
|
// Comma
|
|
//
|
|
|
|
GetPropForUpdate(0x002C).Set(PROP_COMMA);
|
|
GetPropForUpdate(0x3001).Set(PROP_COMMA);
|
|
GetPropForUpdate(0xFF0C).Set(PROP_COMMA); // Full width
|
|
GetPropForUpdate(0xFF64).Set(PROP_COMMA); // Half width
|
|
|
|
//
|
|
// HYPEHN
|
|
//
|
|
|
|
GetPropForUpdate(0x002D).Set(PROP_DASH); // -
|
|
GetPropForUpdate(0x00AD).Set(PROP_DASH); // soft hyphen
|
|
GetPropForUpdate(0x2010).Set(PROP_DASH);
|
|
GetPropForUpdate(0x2011).Set(PROP_DASH);
|
|
GetPropForUpdate(0x2012).Set(PROP_DASH);
|
|
GetPropForUpdate(0x2013).Set(PROP_DASH);
|
|
GetPropForUpdate(0xFF0D).Set(PROP_DASH); // Full width
|
|
|
|
//
|
|
// MINUS
|
|
//
|
|
|
|
GetPropForUpdate(0x002D).Set(PROP_MINUS);
|
|
GetPropForUpdate(0x2212).Set(PROP_MINUS);
|
|
GetPropForUpdate(0xFF0D).Set(PROP_MINUS); // Full width
|
|
|
|
//
|
|
// Full stop period
|
|
//
|
|
|
|
GetPropForUpdate(0x002E).Set(PROP_PERIOD); // .
|
|
GetPropForUpdate(0x3002).Set(PROP_PERIOD);
|
|
GetPropForUpdate(0xFF0E).Set(PROP_PERIOD); // Full width
|
|
|
|
//
|
|
// SLASH
|
|
//
|
|
|
|
GetPropForUpdate(0x002F).Set(PROP_SLASH); // /
|
|
GetPropForUpdate(0xFF0F).Set(PROP_SLASH); // Full width
|
|
|
|
//
|
|
// NUMBERS
|
|
//
|
|
|
|
for (wch = 0x0030; wch <= 0x0039 ; wch++) // 0 - 9
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_NUMBER);
|
|
}
|
|
|
|
for (wch = 0xFF10; wch <= 0xFF19 ; wch++) // 0 - 9 Full width
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_NUMBER);
|
|
}
|
|
|
|
//
|
|
// HEX NUMBERS
|
|
//
|
|
|
|
for (wch = 0x0041; wch <= 0x0046 ; wch++) // A - F
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_ALPHA_XDIGIT);
|
|
}
|
|
|
|
for (wch = 0x0061; wch <= 0x0066 ; wch++) // a - f
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_ALPHA_XDIGIT);
|
|
}
|
|
|
|
for (wch = 0xFF21; wch <= 0xFF26 ; wch++) // A - F Full width
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_ALPHA_XDIGIT);
|
|
}
|
|
|
|
for (wch = 0xFF41; wch <= 0xFF46 ; wch++) // a - f Full width
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_ALPHA_XDIGIT);
|
|
}
|
|
|
|
//
|
|
// Colon
|
|
//
|
|
|
|
GetPropForUpdate(0x003A).Set(PROP_COLON); // :
|
|
GetPropForUpdate(0x2236).Set(PROP_COLON);
|
|
GetPropForUpdate(0xFF1A).Set(PROP_COLON); // Full width :
|
|
|
|
//
|
|
// Semicolon
|
|
//
|
|
|
|
GetPropForUpdate(0x003B).Set(PROP_SEMI_COLON); // ;
|
|
GetPropForUpdate(0xFF1B).Set(PROP_SEMI_COLON); // Full width ;
|
|
|
|
//
|
|
// Less then
|
|
//
|
|
|
|
GetPropForUpdate(0x003C).Set(PROP_LT); // <
|
|
GetPropForUpdate(0xFF1C).Set(PROP_LT); // Full width <
|
|
|
|
//
|
|
// Equal sign
|
|
//
|
|
|
|
GetPropForUpdate(0x003D).Set(PROP_EQUAL); // =
|
|
GetPropForUpdate(0x2260).Set(PROP_EQUAL); // not equal sign
|
|
GetPropForUpdate(0x2261).Set(PROP_EQUAL); // identical to
|
|
GetPropForUpdate(0xFF1D).Set(PROP_EQUAL); // Full width =
|
|
|
|
//
|
|
// Greater then
|
|
//
|
|
|
|
GetPropForUpdate(0x003E).Set(PROP_GT); // >
|
|
GetPropForUpdate(0xFF1E).Set(PROP_GT); // Full width >
|
|
|
|
//
|
|
// Question mark
|
|
//
|
|
|
|
GetPropForUpdate(0x003F).Set(PROP_QUESTION_MARK); // ?
|
|
GetPropForUpdate(0x00BF).Set(PROP_QUESTION_MARK); // inverted question mark
|
|
GetPropForUpdate(0x037E).Set(PROP_QUESTION_MARK); // greek question mark
|
|
GetPropForUpdate(0x203D).Set(PROP_QUESTION_MARK); // interrobang
|
|
GetPropForUpdate(0x2048).Set(PROP_QUESTION_MARK); // question exclemation mark
|
|
GetPropForUpdate(0x2049).Set(PROP_QUESTION_MARK); // exclamation question mark
|
|
GetPropForUpdate(0xFF1F).Set(PROP_QUESTION_MARK); // Full width ?
|
|
|
|
//
|
|
// Commercial AT
|
|
//
|
|
|
|
GetPropForUpdate(0x0040).Set(PROP_AT); // @
|
|
GetPropForUpdate(0xFF20).Set(PROP_AT); // Full width @
|
|
|
|
//
|
|
// Commersial signs
|
|
//
|
|
GetPropForUpdate(0x00A9).Set(PROP_COMMERSIAL_SIGN); // copy right sign
|
|
GetPropForUpdate(0x00AE).Set(PROP_COMMERSIAL_SIGN); // registered sign
|
|
GetPropForUpdate(0x2120).Set(PROP_COMMERSIAL_SIGN); // service mark
|
|
GetPropForUpdate(0x2121).Set(PROP_COMMERSIAL_SIGN); // telephone sign
|
|
GetPropForUpdate(0x2122).Set(PROP_COMMERSIAL_SIGN); // trade mark sign
|
|
|
|
//
|
|
// Letters
|
|
//
|
|
|
|
// upper case
|
|
|
|
for (wch = 0x0041; wch <= 0x005A; wch++) // A - Z
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
for (wch = 0x00C0; wch <= 0x00D6; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
for (wch = 0x00D8; wch <= 0x00DE; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
for (wch = 0xFF21; wch <= 0xFF3A; wch++) // Full width A - Z
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
// Latin extended
|
|
|
|
for (wch = 0x0100; wch <= 0x017D; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
GetPropForUpdate(0x0181).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0182).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0184).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0186).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0187).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0189).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x018A).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x018B).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x018E).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x018F).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0190).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0191).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0193).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0194).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0196).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0197).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x0198).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x019C).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x019D).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x019F).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01A0).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01A2).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01A4).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01A6).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01A7).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01A9).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01AA).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01AC).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01AE).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01AF).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01B1).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01B2).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01B3).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01B5).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01B7).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01B8).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01BC).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01C4).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01C5).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01C7).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01C8).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01CA).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01CB).Set(PROP_UPPER_CASE);
|
|
|
|
for (wch = 0x01CD; wch <= 0x01DB; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
for (wch = 0x01DE; wch <= 0x01EE; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
GetPropForUpdate(0x01F1).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01F2).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01F4).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01F6).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01F7).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01F8).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01FA).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01FC).Set(PROP_UPPER_CASE);
|
|
GetPropForUpdate(0x01FE).Set(PROP_UPPER_CASE);
|
|
|
|
for (wch = 0x0200; wch <= 0x0232; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
// Latin extended additional
|
|
|
|
for (wch = 0x1E00; wch <= 0x1E94; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
for (wch = 0x1EA0; wch <= 0x1EF8; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_UPPER_CASE);
|
|
}
|
|
|
|
// lower case
|
|
|
|
for (wch = 0x0061; wch <= 0x007A; wch++) // a - z
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0x00DF; wch <= 0x00F6; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0x00F8; wch <= 0x00FF; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0xFF41; wch <= 0xFF5A; wch++) // Full width a - z
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
// Latin extended
|
|
|
|
for (wch = 0x0101; wch <= 0x017E; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
GetPropForUpdate(0x017F).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0180).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0183).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0185).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0188).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x018C).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x018D).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0192).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0195).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x0199).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x019A).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x019B).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x019E).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01A1).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01A3).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01A5).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01A8).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01AB).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01AD).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01B0).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01B4).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01B6).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01B9).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01BA).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01BB).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01BD).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01BE).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01BF).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01C6).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01C9).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01CC).Set(PROP_LOWER_CASE);
|
|
|
|
for (wch = 0x01CE; wch <= 0x01DC; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0x01DD; wch <= 0x01EF; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
GetPropForUpdate(0x01F0).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01F3).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01F5).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01F9).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01FB).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01FD).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01FF).Set(PROP_LOWER_CASE);
|
|
GetPropForUpdate(0x01).Set(PROP_LOWER_CASE);
|
|
|
|
for (wch = 0x0201; wch <= 0x0233; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0x0250; wch <= 0x02AD; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
// Latin extended additional
|
|
|
|
for (wch = 0x1E01; wch <= 0x1E95; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0x1E96; wch <= 0x1E9B; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
for (wch = 0x1EA1; wch <= 0x1EF9; wch+=2)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_LOWER_CASE);
|
|
}
|
|
|
|
// special letters
|
|
|
|
GetPropForUpdate(L'w').Set(PROP_W);
|
|
GetPropForUpdate(L'W').Set(PROP_W);
|
|
|
|
//
|
|
// Bracket
|
|
//
|
|
|
|
GetPropForUpdate(0x005B).Set(PROP_LEFT_BRAKCET); // [
|
|
GetPropForUpdate(0xFF3B).Set(PROP_LEFT_BRAKCET); // Full width [
|
|
GetPropForUpdate(0x2329).Set(PROP_LEFT_BRAKCET); // left pointing angle bracket
|
|
GetPropForUpdate(0x3008).Set(PROP_LEFT_BRAKCET); // left angle bracket
|
|
|
|
GetPropForUpdate(0x005D).Set(PROP_RIGHT_BRAKCET); // ]
|
|
GetPropForUpdate(0xFF3D).Set(PROP_RIGHT_BRAKCET); // Full width ]
|
|
GetPropForUpdate(0x232A).Set(PROP_RIGHT_BRAKCET); // right pointing angle bracket
|
|
GetPropForUpdate(0x3009).Set(PROP_RIGHT_BRAKCET); // right angle bracket
|
|
GetPropForUpdate(0x300A).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x300B).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x300C).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0xFF62).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x300D).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0xFF63).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x300E).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x300F).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x3010).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x3011).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x3014).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x3015).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x3016).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x3017).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x3018).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x3019).Set(PROP_RIGHT_BRAKCET);
|
|
GetPropForUpdate(0x301A).Set(PROP_LEFT_BRAKCET);
|
|
GetPropForUpdate(0x301B).Set(PROP_RIGHT_BRAKCET);
|
|
|
|
|
|
GetPropForUpdate(0x007B).Set(PROP_LEFT_CURLY_BRACKET); // {
|
|
GetPropForUpdate(0xFF5B).Set(PROP_LEFT_CURLY_BRACKET); // Full width {
|
|
GetPropForUpdate(0x007D).Set(PROP_RIGHT_CURLY_BRACKET); // }
|
|
GetPropForUpdate(0xFF5D).Set(PROP_RIGHT_CURLY_BRACKET); // Full width }
|
|
|
|
//
|
|
// Backslash
|
|
//
|
|
|
|
GetPropForUpdate(0x005C).Set(PROP_BACKSLASH); // \
|
|
GetPropForUpdate(0xFF3C).Set(PROP_BACKSLASH); // Full width \
|
|
|
|
//
|
|
// Underscore
|
|
//
|
|
|
|
GetPropForUpdate(0x005F).Set(PROP_UNDERSCORE); // _
|
|
GetPropForUpdate(0xFF3F).Set(PROP_UNDERSCORE); // Full width _
|
|
|
|
//
|
|
// Or
|
|
//
|
|
|
|
GetPropForUpdate(0x007C).Set(PROP_OR); // |
|
|
GetPropForUpdate(0xFF5C).Set(PROP_OR); // Full width |
|
|
|
|
//
|
|
// Tilde
|
|
//
|
|
|
|
GetPropForUpdate(0x007E).Set(PROP_TILDE); // ~
|
|
GetPropForUpdate(0xFF5E).Set(PROP_TILDE); // Full width ~
|
|
GetPropForUpdate(0x223C).Set(PROP_TILDE);
|
|
GetPropForUpdate(0xFF5E).Set(PROP_TILDE);
|
|
|
|
//
|
|
// NBS
|
|
//
|
|
|
|
GetPropForUpdate(0x00A0).Set(PROP_NBS); // NBS
|
|
GetPropForUpdate(0x202F).Set(PROP_NBS); // narrow no break space
|
|
GetPropForUpdate(0xFEFF).Set(PROP_NBS); // zero width no break space
|
|
|
|
//
|
|
// End of sentence
|
|
//
|
|
|
|
GetPropForUpdate(0x002E).Set(PROP_EOS); // .
|
|
GetPropForUpdate(0xFF0E).Set(PROP_EOS); // Full width .
|
|
GetPropForUpdate(0x3002).Set(PROP_EOS); // Ideographic full stop
|
|
GetPropForUpdate(0xFF61).Set(PROP_EOS); // Half width ideographic full stop
|
|
|
|
GetPropForUpdate(0x2024).Set(PROP_EOS); // One dot leader
|
|
GetPropForUpdate(0x2025).Set(PROP_EOS); // Two dot leader
|
|
GetPropForUpdate(0x2026).Set(PROP_EOS); // Three dot leader
|
|
|
|
GetPropForUpdate(0x003F).Set(PROP_EOS); // ?
|
|
GetPropForUpdate(0xFF1F).Set(PROP_EOS); // Full width ?
|
|
GetPropForUpdate(0x00BF).Set(PROP_EOS); // inverted question mark
|
|
GetPropForUpdate(0x037E).Set(PROP_EOS); // greek question mark
|
|
GetPropForUpdate(0x203D).Set(PROP_EOS); // interrobang
|
|
GetPropForUpdate(0x2048).Set(PROP_EOS); // question exclemation mark
|
|
GetPropForUpdate(0x2049).Set(PROP_EOS); // exclamation question mark
|
|
|
|
|
|
GetPropForUpdate(0x0021).Set(PROP_EOS);
|
|
GetPropForUpdate(0xFF01).Set(PROP_EOS); // Full width
|
|
GetPropForUpdate(0x00A1).Set(PROP_EOS);
|
|
GetPropForUpdate(0x01C3).Set(PROP_EOS);
|
|
GetPropForUpdate(0x203C).Set(PROP_EOS);
|
|
GetPropForUpdate(0x203D).Set(PROP_EOS);
|
|
GetPropForUpdate(0x2762).Set(PROP_EOS);
|
|
|
|
GetPropForUpdate(0x003B).Set(PROP_EOS); // ;
|
|
GetPropForUpdate(0xFF1B).Set(PROP_EOS); // Full width ;
|
|
|
|
//
|
|
// Currency
|
|
//
|
|
|
|
GetPropForUpdate(0x0024).Set(PROP_CURRENCY); // dollar
|
|
GetPropForUpdate(0xFF04).Set(PROP_CURRENCY); // Full width dollar
|
|
GetPropForUpdate(0x00A2).Set(PROP_CURRENCY); // cent
|
|
GetPropForUpdate(0xFFE0).Set(PROP_CURRENCY); // Full width cent
|
|
GetPropForUpdate(0x00A3).Set(PROP_CURRENCY); // pound
|
|
GetPropForUpdate(0xFFE1).Set(PROP_CURRENCY); // Full width pound
|
|
GetPropForUpdate(0x00A4).Set(PROP_CURRENCY); // General currency sign
|
|
GetPropForUpdate(0x00A5).Set(PROP_CURRENCY); // yen
|
|
GetPropForUpdate(0xFFE5).Set(PROP_CURRENCY); // Full width yen
|
|
GetPropForUpdate(0x09F2).Set(PROP_CURRENCY); // Bengali Rupee Mark
|
|
GetPropForUpdate(0x09F3).Set(PROP_CURRENCY); // Bengali Rupee Sign
|
|
GetPropForUpdate(0x0E3F).Set(PROP_CURRENCY); // Baht (Thailand)
|
|
GetPropForUpdate(0x20A0).Set(PROP_CURRENCY); // Euro
|
|
GetPropForUpdate(0x20A1).Set(PROP_CURRENCY); // Colon (Costa Rica, El Salv.)
|
|
GetPropForUpdate(0x20A2).Set(PROP_CURRENCY); // Cruzeiro (Brazil)
|
|
GetPropForUpdate(0x20A3).Set(PROP_CURRENCY); // French Franc
|
|
GetPropForUpdate(0x20A4).Set(PROP_CURRENCY); // Lira (Italy, Turkey)
|
|
GetPropForUpdate(0x20A5).Set(PROP_CURRENCY); // Mill Sign (USA, 1/10 cent)
|
|
GetPropForUpdate(0x20A6).Set(PROP_CURRENCY); // Naira Sign (Nigeria)
|
|
GetPropForUpdate(0x20A7).Set(PROP_CURRENCY); // Peseta (Spain)
|
|
GetPropForUpdate(0x20A8).Set(PROP_CURRENCY); // Rupee
|
|
GetPropForUpdate(0x20A9).Set(PROP_CURRENCY); // Won (Korea)
|
|
GetPropForUpdate(0xFFE6).Set(PROP_CURRENCY); // Full width Won (Korea)
|
|
GetPropForUpdate(0x20AA).Set(PROP_CURRENCY); // New Sheqel (Israel)
|
|
GetPropForUpdate(0x20AB).Set(PROP_CURRENCY); // Dong (Vietnam)
|
|
GetPropForUpdate(0x20AC).Set(PROP_CURRENCY); // Euro sign
|
|
GetPropForUpdate(0x20AD).Set(PROP_CURRENCY); // Kip sign
|
|
GetPropForUpdate(0x20AE).Set(PROP_CURRENCY); // Tugrik sign
|
|
GetPropForUpdate(0x20AF).Set(PROP_CURRENCY); // Drachma sign
|
|
|
|
//
|
|
// Breaker
|
|
//
|
|
|
|
GetPropForUpdate(0x005E).Set(PROP_BREAKER); // ^
|
|
GetPropForUpdate(0xFF3E).Set(PROP_BREAKER); // Full width ^
|
|
GetPropForUpdate(0x00A6).Set(PROP_BREAKER); // Broken vertical bar
|
|
GetPropForUpdate(0xFFE4).Set(PROP_BREAKER); // Full width Broken vertical bar
|
|
GetPropForUpdate(0x00A7).Set(PROP_BREAKER); // section sign
|
|
GetPropForUpdate(0x00AB).Set(PROP_BREAKER); // Not sign
|
|
GetPropForUpdate(0x00B1).Set(PROP_BREAKER); // Plus minus sign
|
|
GetPropForUpdate(0x00B6).Set(PROP_BREAKER); // Pargraph sign
|
|
GetPropForUpdate(0x00B7).Set(PROP_BREAKER); // Middle dot
|
|
GetPropForUpdate(0x00D7).Set(PROP_BREAKER); // Multiplication sign
|
|
GetPropForUpdate(0x00F7).Set(PROP_BREAKER); // Devision sign
|
|
GetPropForUpdate(0x01C0).Set(PROP_BREAKER);
|
|
GetPropForUpdate(0x01C1).Set(PROP_BREAKER);
|
|
GetPropForUpdate(0x01C2).Set(PROP_BREAKER);
|
|
GetPropForUpdate(0x200C).Set(PROP_BREAKER); // Formating character
|
|
GetPropForUpdate(0x200D).Set(PROP_BREAKER); // Formating character
|
|
GetPropForUpdate(0x200E).Set(PROP_BREAKER); // Formating character
|
|
GetPropForUpdate(0x200F).Set(PROP_BREAKER); // Formating character
|
|
GetPropForUpdate(0x2014).Set(PROP_BREAKER); // Em dash
|
|
GetPropForUpdate(0x2015).Set(PROP_BREAKER); // Horizontal bar
|
|
GetPropForUpdate(0x2016).Set(PROP_BREAKER); // Double vertical line
|
|
|
|
for (wch = 0x2020; wch <= 0x2027; wch++)
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
for (wch = 0x2028; wch <= 0x202E; wch++) // Formating characters
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
for (wch = 0x2030; wch <= 0x2038; wch++) // General punctuation
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
GetPropForUpdate(0x203B).Set(PROP_BREAKER);
|
|
|
|
for (wch = 0x203F; wch <= 0x2046; wch++) // General punctuation
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
for (wch = 0x204A; wch <= 0x206F; wch++) // General punctuation
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
for (wch = 0x2190; wch <= 0x21F3; wch++) // Arrows
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
for (wch = 0x2200; wch <= 0x22EF; wch++) // Mathematical operators
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
for (wch = 0x2300; wch <= 0x239A; wch++) // Miscellaneous technical
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_BREAKER);
|
|
}
|
|
|
|
GetPropForUpdate(0x3003).Set(PROP_BREAKER); // Ditto mark
|
|
GetPropForUpdate(0x3012).Set(PROP_BREAKER); // Postal mark
|
|
GetPropForUpdate(0x3013).Set(PROP_BREAKER); // Geta mark
|
|
GetPropForUpdate(0x301C).Set(PROP_BREAKER); // Wave dash
|
|
GetPropForUpdate(0x3020).Set(PROP_BREAKER); // Postal mark face
|
|
|
|
GetPropForUpdate(0xFFE2).Set(PROP_BREAKER); // Full width not sign
|
|
|
|
//
|
|
// Transperent (all charaters that can treated as non existing for breaking)
|
|
//
|
|
|
|
GetPropForUpdate(0x0060).Set(PROP_TRANSPERENT); // grave accent
|
|
GetPropForUpdate(0xFF40).Set(PROP_TRANSPERENT); // Full width grave accent
|
|
GetPropForUpdate(0x00A0).Set(PROP_TRANSPERENT); // NBS
|
|
GetPropForUpdate(0x00AF).Set(PROP_TRANSPERENT); // Macron
|
|
GetPropForUpdate(0xFFE3).Set(PROP_TRANSPERENT); // Full width Macron
|
|
GetPropForUpdate(0x00B4).Set(PROP_TRANSPERENT); // Acute Accent
|
|
GetPropForUpdate(0x00B8).Set(PROP_TRANSPERENT); // Cedilla Accent
|
|
|
|
GetPropForUpdate(0x202F).Set(PROP_TRANSPERENT); // narrow no break space
|
|
GetPropForUpdate(0xFEFF).Set(PROP_TRANSPERENT); // zero width no break space
|
|
|
|
GetPropForUpdate(0x00A8).Set(PROP_TRANSPERENT); // Diaeresis
|
|
|
|
for (wch = 0x02B0; wch <= 0x02EE; wch++) // Modifiers
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_TRANSPERENT);
|
|
}
|
|
|
|
for (wch = 0x0300; wch <= 0x0362; wch++) // Combining Diacritical Marks
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_TRANSPERENT);
|
|
}
|
|
|
|
GetPropForUpdate(0x2017).Set(PROP_TRANSPERENT); // Double low line
|
|
GetPropForUpdate(0x203E).Set(PROP_TRANSPERENT); // Over line
|
|
|
|
for (wch = 0x20D0; wch <= 0x20E3; wch++) // Combining Diacritical Marks for symbols
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_TRANSPERENT);
|
|
}
|
|
|
|
for (wch = 0x302A; wch <= 0x302F; wch++) // Diacritics
|
|
{
|
|
GetPropForUpdate(wch).Set(PROP_TRANSPERENT);
|
|
}
|
|
//
|
|
// Complement m_apCodePage:
|
|
//
|
|
// Replace all NULL entries
|
|
// m_apCodePage[i] == NULL by
|
|
// the same code page: m_aDefaultCodePage ==
|
|
// A row of default values (== zero)
|
|
//
|
|
|
|
for (USHORT usCodePage = 0; usCodePage < (1<<8); usCodePage++)
|
|
{
|
|
if ( !m_apCodePage[usCodePage] )
|
|
{
|
|
m_apCodePage[usCodePage] = m_aDefaultCodePage;
|
|
}
|
|
|
|
} // for
|
|
|
|
}
|
|
|
|
inline CPropArray::~CPropArray()
|
|
{
|
|
for (int i=0; i< (1<<8); i++)
|
|
{
|
|
if (m_apCodePage[i] != m_aDefaultCodePage)
|
|
{
|
|
delete m_apCodePage[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
inline CPropFlag& CPropArray::GetPropForUpdate(WCHAR wch)
|
|
{
|
|
|
|
unsigned short usCodePage = wch >> 8;
|
|
if (!m_apCodePage[usCodePage])
|
|
{
|
|
m_apCodePage[usCodePage] = new CPropFlag[1<<8];
|
|
}
|
|
|
|
return (m_apCodePage[usCodePage])[wch & 0xFF];
|
|
}
|
|
|
|
|
|
extern CAutoClassPointer<CPropArray> g_pPropArray;
|
|
|
|
#ifdef DECLARE_ULONGLONG_ARRAY
|
|
extern CPropFlag * g_PropFlagArray;
|
|
#endif // DECLARE_ULONGLONG_ARRAY
|
|
|
|
|
|
#endif // _PROP_ARRAY_H_
|