/* $NoKeywords: $ */ /* // // Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved. // OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert // McNeel & Associates. // // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. // ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF // MERCHANTABILITY ARE HEREBY DISCLAIMED. // // For complete openNURBS copyright information see . // //////////////////////////////////////////////////////////////// */ #if !defined(OPENNURBS_INTERNAL_UNICODE_CP_INC_) #define OPENNURBS_INTERNAL_UNICODE_CP_INC_ #if !defined(ON_COMPILING_OPENNURBS) // This check is included in all opennurbs source .c and .cpp files to insure // ON_COMPILING_OPENNURBS is defined when opennurbs source is compiled. // When opennurbs source is being compiled, ON_COMPILING_OPENNURBS is defined // and the opennurbs .h files alter what is declared and how it is declared. #error ON_COMPILING_OPENNURBS must be defined when compiling opennurbs #endif #if !defined(ON_RUNTIME_WIN) #error Do not use for Windows builds. #endif #if !defined(ON_RUNTIME_WIN) // When we do not have access to Windows code page tools, // we have to add in code to get convert Windows and Apple // multibyte encodings to UNICODE encodings. // // In practice, the primary use of the double byte code page support // is in parsing rich text (RTF) in ON_TextContent classes created // on computers with Eastern European and Asian locales as the default // locale. // // Many Western European and Americas locales are handled by the // single byte code pages 1252 and 10000. Code pages for other // locales will be added as needed because embedding the large // double byte tables makes the resulting libraries large. // // At this time opennurbs does not ship the // code page N to UNICODE translation tables as separate files // that can be loaded on demand because of the added installation // and runtime lookup complexities. // // When possible, Rhino and opennurbs replace code page // encodings with UNICODE in RTF. All runtimes strings // use UNICODE UTF-8, UTF-16, or UTF-32 encodings. // Whenever posssible, the UNICODE encoding is used // to retrieve glyph information from fonts. #define ON_DOUBLE_BYTE_CODE_PAGE_SUPPORT #endif #if defined(ON_DOUBLE_BYTE_CODE_PAGE_SUPPORT) ///////////////////////////////////////////////////////// // // Code page 932 // bool ON_IsPotentialWindowsCodePage932SingleByteEncoding( ON__UINT32 x ); bool ON_IsPotentialWindowsCodePage932DoubleByteEncoding( ON__UINT32 lead_byte, ON__UINT32 trailing_byte ); /* Description: Convert a Windows code page 932 encoded value to a UNICODE code point. This code page is often used for Japanese glpyhs. Parameters: code_page_932_character_value - [in] Valid values are 0 to 0xFDFE with some exceptions in that range. unicode_code_point - [out] ON_UnicodeCodePoint::ON_ReplacementCharacter is returned when code_page_932_character_value is not valid. Returns: 1: if code_page_932_character_value and the corresponding UNICODE code point is returned in *unicode_code_point. 0: otherwise and *unicode_code_point = ON_UnicodeCodePoint::ON_ReplacementCharacter. Remarks: Windows code page 932: https://msdn.microsoft.com/en-us/library/cc194887.aspx Conversions to Unicode are based on the Unicode.org mapping of Shift JIS ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT */ #if defined(ON_COMPILER_MSC) && defined(NDEBUG) // Work around Release build optimization bug in Visual Studio 2017. __declspec(noinline) #endif int ON_MapWindowsCodePage932ToUnicode( ON__UINT32 code_page_932_character_value, ON__UINT32* unicode_code_point ); ///////////////////////////////////////////////////////// // // Code page 949 // bool ON_IsPotentialWindowsCodePage949SingleByteEncoding( ON__UINT32 x ); bool ON_IsPotentialWindowsCodePage949DoubleByteEncoding( ON__UINT32 lead_byte, ON__UINT32 trailing_byte ); /* Description: Convert a Windows code page 949 encoded value to a UNICODE code point. This code page is often used for Korean glpyhs. Parameters: code_page_949_character_value - [in] Valid values are 0 to 0xFDFE with some exceptions in that range. unicode_code_point - [out] ON_UnicodeCodePoint::ON_ReplacementCharacter is returned when code_page_949_character_value is not valid. Returns: 1: if code_page_949_character_value and the corresponding UNICODE code point is returned in *unicode_code_point. 0: otherwise and *unicode_code_point = ON_UnicodeCodePoint::ON_ReplacementCharacter. Remarks: Windows code page 949: https://msdn.microsoft.com/en-us/library/cc194941.aspx Conversions to Unicode are based on the Unicode.org mapping of Windows-949 ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT */ #if defined(ON_COMPILER_MSC) && defined(NDEBUG) // Work around Release build optimization bug in Visual Studio 2017. __declspec(noinline) #endif int ON_MapWindowsCodePage949ToUnicode( ON__UINT32 code_page_949_character_value, ON__UINT32* unicode_code_point ); #endif #endif