/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

/*
 * This file is part of LibreOffice published API.
 */

#ifndef INCLUDED_RTL_TEXTENC_H
#define INCLUDED_RTL_TEXTENC_H

#include "sal/types.h"

/** The various supported text encodings.

    Possible values include a wide range of single- and multi-byte encodings
    (ranging from RTL_TEXTENCODING_MS_1252 to RTL_TEXTENCODING_GB_18030),
    the ISO 10646 (Unicode) specific encodings RTL_TEXTENCODING_UCS4 and
    RTL_TEXTENCODING_UCS2 (aka RTL_TEXTENCODING_UNICODE), and
    RTL_TEXTENCODING_DONTKNOW to indicate an unknown or missing encoding.
 */
typedef sal_uInt16 rtl_TextEncoding;

#define RTL_TEXTENC_CAST( val ) ((rtl_TextEncoding) val)

#define RTL_TEXTENCODING_DONTKNOW               (RTL_TEXTENC_CAST( 0 ))
#define RTL_TEXTENCODING_MS_1252                (RTL_TEXTENC_CAST( 1 ))
#define RTL_TEXTENCODING_APPLE_ROMAN            (RTL_TEXTENC_CAST( 2 ))
#define RTL_TEXTENCODING_IBM_437                (RTL_TEXTENC_CAST( 3 ))
#define RTL_TEXTENCODING_IBM_850                (RTL_TEXTENC_CAST( 4 ))
#define RTL_TEXTENCODING_IBM_860                (RTL_TEXTENC_CAST( 5 ))
#define RTL_TEXTENCODING_IBM_861                (RTL_TEXTENC_CAST( 6 ))
#define RTL_TEXTENCODING_IBM_863                (RTL_TEXTENC_CAST( 7 ))
#define RTL_TEXTENCODING_IBM_865                (RTL_TEXTENC_CAST( 8 ))
/* Reserved: RTL_TEXTENCODING_SYSTEM            (RTL_TEXTENC_CAST( 9 )) */
#define RTL_TEXTENCODING_SYMBOL                 (RTL_TEXTENC_CAST( 10 ))
#define RTL_TEXTENCODING_ASCII_US               (RTL_TEXTENC_CAST( 11 ))
#define RTL_TEXTENCODING_ISO_8859_1             (RTL_TEXTENC_CAST( 12 ))
#define RTL_TEXTENCODING_ISO_8859_2             (RTL_TEXTENC_CAST( 13 ))
#define RTL_TEXTENCODING_ISO_8859_3             (RTL_TEXTENC_CAST( 14 ))
#define RTL_TEXTENCODING_ISO_8859_4             (RTL_TEXTENC_CAST( 15 ))
#define RTL_TEXTENCODING_ISO_8859_5             (RTL_TEXTENC_CAST( 16 ))
#define RTL_TEXTENCODING_ISO_8859_6             (RTL_TEXTENC_CAST( 17 ))
#define RTL_TEXTENCODING_ISO_8859_7             (RTL_TEXTENC_CAST( 18 ))
#define RTL_TEXTENCODING_ISO_8859_8             (RTL_TEXTENC_CAST( 19 ))
#define RTL_TEXTENCODING_ISO_8859_9             (RTL_TEXTENC_CAST( 20 ))
#define RTL_TEXTENCODING_ISO_8859_14            (RTL_TEXTENC_CAST( 21 ))
#define RTL_TEXTENCODING_ISO_8859_15            (RTL_TEXTENC_CAST( 22 ))
#define RTL_TEXTENCODING_IBM_737                (RTL_TEXTENC_CAST( 23 ))
#define RTL_TEXTENCODING_IBM_775                (RTL_TEXTENC_CAST( 24 ))
#define RTL_TEXTENCODING_IBM_852                (RTL_TEXTENC_CAST( 25 ))
#define RTL_TEXTENCODING_IBM_855                (RTL_TEXTENC_CAST( 26 ))
#define RTL_TEXTENCODING_IBM_857                (RTL_TEXTENC_CAST( 27 ))
#define RTL_TEXTENCODING_IBM_862                (RTL_TEXTENC_CAST( 28 ))
#define RTL_TEXTENCODING_IBM_864                (RTL_TEXTENC_CAST( 29 ))
#define RTL_TEXTENCODING_IBM_866                (RTL_TEXTENC_CAST( 30 ))
#define RTL_TEXTENCODING_IBM_869                (RTL_TEXTENC_CAST( 31 ))
#define RTL_TEXTENCODING_MS_874                 (RTL_TEXTENC_CAST( 32 ))
#define RTL_TEXTENCODING_MS_1250                (RTL_TEXTENC_CAST( 33 ))
#define RTL_TEXTENCODING_MS_1251                (RTL_TEXTENC_CAST( 34 ))
#define RTL_TEXTENCODING_MS_1253                (RTL_TEXTENC_CAST( 35 ))
#define RTL_TEXTENCODING_MS_1254                (RTL_TEXTENC_CAST( 36 ))
#define RTL_TEXTENCODING_MS_1255                (RTL_TEXTENC_CAST( 37 ))
#define RTL_TEXTENCODING_MS_1256                (RTL_TEXTENC_CAST( 38 ))
#define RTL_TEXTENCODING_MS_1257                (RTL_TEXTENC_CAST( 39 ))
#define RTL_TEXTENCODING_MS_1258                (RTL_TEXTENC_CAST( 40 ))
#define RTL_TEXTENCODING_APPLE_ARABIC           (RTL_TEXTENC_CAST( 41 ))
#define RTL_TEXTENCODING_APPLE_CENTEURO         (RTL_TEXTENC_CAST( 42 ))
#define RTL_TEXTENCODING_APPLE_CROATIAN         (RTL_TEXTENC_CAST( 43 ))
#define RTL_TEXTENCODING_APPLE_CYRILLIC         (RTL_TEXTENC_CAST( 44 ))
#define RTL_TEXTENCODING_APPLE_DEVANAGARI       (RTL_TEXTENC_CAST( 45 ))
#define RTL_TEXTENCODING_APPLE_FARSI            (RTL_TEXTENC_CAST( 46 ))
#define RTL_TEXTENCODING_APPLE_GREEK            (RTL_TEXTENC_CAST( 47 ))
#define RTL_TEXTENCODING_APPLE_GUJARATI         (RTL_TEXTENC_CAST( 48 ))
#define RTL_TEXTENCODING_APPLE_GURMUKHI         (RTL_TEXTENC_CAST( 49 ))
#define RTL_TEXTENCODING_APPLE_HEBREW           (RTL_TEXTENC_CAST( 50 ))
#define RTL_TEXTENCODING_APPLE_ICELAND          (RTL_TEXTENC_CAST( 51 ))
#define RTL_TEXTENCODING_APPLE_ROMANIAN         (RTL_TEXTENC_CAST( 52 ))
#define RTL_TEXTENCODING_APPLE_THAI             (RTL_TEXTENC_CAST( 53 ))
#define RTL_TEXTENCODING_APPLE_TURKISH          (RTL_TEXTENC_CAST( 54 ))
#define RTL_TEXTENCODING_APPLE_UKRAINIAN        (RTL_TEXTENC_CAST( 55 ))
#define RTL_TEXTENCODING_APPLE_CHINSIMP         (RTL_TEXTENC_CAST( 56 ))
#define RTL_TEXTENCODING_APPLE_CHINTRAD         (RTL_TEXTENC_CAST( 57 ))
#define RTL_TEXTENCODING_APPLE_JAPANESE         (RTL_TEXTENC_CAST( 58 ))
#define RTL_TEXTENCODING_APPLE_KOREAN           (RTL_TEXTENC_CAST( 59 ))
#define RTL_TEXTENCODING_MS_932                 (RTL_TEXTENC_CAST( 60 ))
#define RTL_TEXTENCODING_MS_936                 (RTL_TEXTENC_CAST( 61 ))
#define RTL_TEXTENCODING_MS_949                 (RTL_TEXTENC_CAST( 62 ))
#define RTL_TEXTENCODING_MS_950                 (RTL_TEXTENC_CAST( 63 ))
#define RTL_TEXTENCODING_SHIFT_JIS              (RTL_TEXTENC_CAST( 64 ))
#define RTL_TEXTENCODING_GB_2312                (RTL_TEXTENC_CAST( 65 ))
#define RTL_TEXTENCODING_GBT_12345              (RTL_TEXTENC_CAST( 66 ))
#define RTL_TEXTENCODING_GBK                    (RTL_TEXTENC_CAST( 67 ))
#define RTL_TEXTENCODING_BIG5                   (RTL_TEXTENC_CAST( 68 ))
#define RTL_TEXTENCODING_EUC_JP                 (RTL_TEXTENC_CAST( 69 ))
#define RTL_TEXTENCODING_EUC_CN                 (RTL_TEXTENC_CAST( 70 ))
#define RTL_TEXTENCODING_EUC_TW                 (RTL_TEXTENC_CAST( 71 ))
#define RTL_TEXTENCODING_ISO_2022_JP            (RTL_TEXTENC_CAST( 72 ))
#define RTL_TEXTENCODING_ISO_2022_CN            (RTL_TEXTENC_CAST( 73 ))
#define RTL_TEXTENCODING_KOI8_R                 (RTL_TEXTENC_CAST( 74 ))
#define RTL_TEXTENCODING_UTF7                   (RTL_TEXTENC_CAST( 75 ))
#define RTL_TEXTENCODING_UTF8                   (RTL_TEXTENC_CAST( 76 ))
#define RTL_TEXTENCODING_ISO_8859_10            (RTL_TEXTENC_CAST( 77 ))
#define RTL_TEXTENCODING_ISO_8859_13            (RTL_TEXTENC_CAST( 78 ))
#define RTL_TEXTENCODING_EUC_KR                 (RTL_TEXTENC_CAST( 79 ))
#define RTL_TEXTENCODING_ISO_2022_KR            (RTL_TEXTENC_CAST( 80 ))
#define RTL_TEXTENCODING_JIS_X_0201             (RTL_TEXTENC_CAST( 81 ))
#define RTL_TEXTENCODING_JIS_X_0208             (RTL_TEXTENC_CAST( 82 ))
#define RTL_TEXTENCODING_JIS_X_0212             (RTL_TEXTENC_CAST( 83 ))
#define RTL_TEXTENCODING_MS_1361                (RTL_TEXTENC_CAST( 84 ))
#define RTL_TEXTENCODING_GB_18030               (RTL_TEXTENC_CAST( 85 ))
#define RTL_TEXTENCODING_BIG5_HKSCS             (RTL_TEXTENC_CAST( 86 ))
#define RTL_TEXTENCODING_TIS_620                (RTL_TEXTENC_CAST( 87 ))
#define RTL_TEXTENCODING_KOI8_U                 (RTL_TEXTENC_CAST( 88 ))
#define RTL_TEXTENCODING_ISCII_DEVANAGARI       (RTL_TEXTENC_CAST( 89 ))
#define RTL_TEXTENCODING_JAVA_UTF8              (RTL_TEXTENC_CAST( 90 ))
#define RTL_TEXTENCODING_ADOBE_STANDARD         (RTL_TEXTENC_CAST( 91 ))
#define RTL_TEXTENCODING_ADOBE_SYMBOL           (RTL_TEXTENC_CAST( 92 ))
#define RTL_TEXTENCODING_PT154                  (RTL_TEXTENC_CAST( 93 ))
#define RTL_TEXTENCODING_ADOBE_DINGBATS         (RTL_TEXTENC_CAST( 94 ))
#define RTL_TEXTENCODING_KAMENICKY              (RTL_TEXTENC_CAST( 95 ))
#define RTL_TEXTENCODING_MAZOVIA                (RTL_TEXTENC_CAST( 96 ))
/* ATTENTION!  Whenever some encoding is added here, make sure to update
 * rtl_isOctetTextEncoding in sal/textenc/tencinfo.cxx and sal_getFullTextEncodingData in
 * sal/textenc/tables.cxx.
 */

#define RTL_TEXTENCODING_USER_START             (RTL_TEXTENC_CAST( 0x8000 ))
#define RTL_TEXTENCODING_USER_DETECTED          (RTL_TEXTENCODING_USER_START + 0)
#define RTL_TEXTENCODING_USER_END               (RTL_TEXTENC_CAST( 0xEFFF ))

#define RTL_TEXTENCODING_UCS4                   (RTL_TEXTENC_CAST( 0xFFFE ))
#define RTL_TEXTENCODING_UCS2                   (RTL_TEXTENC_CAST( 0xFFFF ))
#define RTL_TEXTENCODING_UNICODE                RTL_TEXTENCODING_UCS2

/****** Overview over the TextEncodings *****
# Arabic (Apple Macintosh)                        RTL_TEXTENCODING_APPLE_ARABIC
Arabic (DOS/OS2-864)                            RTL_TEXTENCODING_IBM_864
Arabic (ISO-8859-6)                             RTL_TEXTENCODING_ISO_8859_6
Arabic (Windows-1256)                           RTL_TEXTENCODING_MS_1256

Baltic (DOS/OS2-775)                            RTL_TEXTENCODING_IBM_775
Baltic (ISO-8859-4)                             RTL_TEXTENCODING_ISO_8859_4
Baltic (Windows-1257)                           RTL_TEXTENCODING_MS_1257

Central European (Apple Macintosh)              RTL_TEXTENCODING_APPLE_CENTEURO
Central European (Apple Macintosh/Croatian)     RTL_TEXTENCODING_APPLE_CROATIAN
Central European (Apple Macintosh/Romanian)     RTL_TEXTENCODING_APPLE_ROMANIAN
Central European (DOS/OS2-852)                  RTL_TEXTENCODING_IBM_852
Central European (ISO-8859-2)                   RTL_TEXTENCODING_ISO_8859_2
Central European (ISO-8859-10)                  RTL_TEXTENCODING_ISO_8859_10
Central European (ISO-8859-13)                  RTL_TEXTENCODING_ISO_8859_13
Central European (Windows-1250/WinLatin 2)      RTL_TEXTENCODING_MS_1250

Chinese Simplified (Apple Macintosh)            RTL_TEXTENCODING_APPLE_CHINSIMP
Chinese Simplified (EUC-CN)                     RTL_TEXTENCODING_EUC_CN
Chinese Simplified (GB-2312)                    RTL_TEXTENCODING_GB_2312
Chinese Simplified (GBK/GB-2312-80)             RTL_TEXTENCODING_GBK
# Chinese Simplified (ISO-2022-CN)                RTL_TEXTENCODING_ISO_2022_CN
Chinese Simplified (Windows-936)                RTL_TEXTENCODING_MS_936
# Chinese Simplified (GB-18030)                   RTL_TEXTENCODING_GB_18030

Chinese Traditional (Apple Macintosh)           RTL_TEXTENCODING_APPLE_CHINTRAD
Chinese Traditional (BIG5)                      RTL_TEXTENCODING_BIG5
# Chinese Traditional (EUC-TW)                    RTL_TEXTENCODING_EUC_TW
Chinese Traditional (GBT-12345)                 RTL_TEXTENCODING_GBT_12345
Chinese Traditional (Windows-950)               RTL_TEXTENCODING_MS_950
Chinese Traditional (BIG5-HKSCS)                RTL_TEXTENCODING_BIG5_HKSCS

Cyrillic (Apple Macintosh)                      RTL_TEXTENCODING_APPLE_CYRILLIC
Cyrillic (Apple Macintosh/Ukrainian)            RTL_TEXTENCODING_APPLE_UKRAINIAN
Cyrillic (DOS/OS2-855)                          RTL_TEXTENCODING_IBM_855
Cyrillic (DOS/OS2-866/Russian)                  RTL_TEXTENCODING_IBM_866
Cyrillic (ISO-8859-5)                           RTL_TEXTENCODING_ISO_8859_5
Cyrillic (KOI8-R)                               RTL_TEXTENCODING_KOI8_R
Cyrillic (KOI8-U)                               RTL_TEXTENCODING_KOI8_U
Cyrillic (Windows-1251)                         RTL_TEXTENCODING_MS_1251

Greek (Apple Macintosh)                         RTL_TEXTENCODING_APPLE_GREEK
Greek (DOS/OS2-737)                             RTL_TEXTENCODING_IBM_737
Greek (DOS/OS2-869/Modern)                      RTL_TEXTENCODING_IBM_869
Greek (ISO-8859-7)                              RTL_TEXTENCODING_ISO_8859_7
Greek (Windows-1253)                            RTL_TEXTENCODING_MS_1253

# Hebrew (Apple Macintosh)                        RTL_TEXTENCODING_APPLE_HEBREW
Hebrew (DOS/OS2-862)                            RTL_TEXTENCODING_IBM_862
Hebrew (ISO-8859-8)                             RTL_TEXTENCODING_ISO_8859_8
Hebrew (Windows-1255)                           RTL_TEXTENCODING_MS_1255

Korean (Apple Macintosh)                        RTL_TEXTENCODING_APPLE_KOREAN
Korean (EUC-KR)                                 RTL_TEXTENCODING_EUC_KR
# Korean (ISO-2022-KR)                            RTL_TEXTENCODING_ISO_2022_KR
Korean (Windows-Wansung-949)                    RTL_TEXTENCODING_MS_949
Korean (Windows-Johab-1361)                     RTL_TEXTENCODING_MS_1361

Latin 3 (ISO-8859-3)                            RTL_TEXTENCODING_ISO_8859_3

Indian (ISCII Devanagari)                      RTL_TEXTENCODING_ISCII_DEVANAGARI

Japanese (Apple Macintosh)                      RTL_TEXTENCODING_APPLE_JAPANESE
Japanese (EUC-JP)                               RTL_TEXTENCODING_EUC_JP
# Japanese (ISO-2022-JP)                          RTL_TEXTENCODING_ISO_2022_JP
Japanese (Shift-JIS)                            RTL_TEXTENCODING_SHIFT_JIS
Japanese (Windows-932)                          RTL_TEXTENCODING_MS_932

Symbol                                          RTL_TEXTENCODING_SYMBOL

# Thai (Apple Macintosh)                          RTL_TEXTENCODING_APPLE_THAI
Thai (Dos/Windows-874)                          RTL_TEXTENCODING_MS_874
Thai (TIS 620)                                  RTL_TEXTENCODING_TIS_620

Turkish (Apple Macintosh)                       RTL_TEXTENCODING_APPLE_TURKISH
Turkish (DOS/OS2-857)                           RTL_TEXTENCODING_IBM_857
Turkish (ISO-8859-9)                            RTL_TEXTENCODING_ISO_8859_9
Turkish (Windows-1254)                          RTL_TEXTENCODING_MS_1254

Unicode (UTF-7)                                 RTL_TEXTENCODING_UTF7
Unicode (UTF-8)                                 RTL_TEXTENCODING_UTF8
Unicode (Java's modified UTF-8)                 RTL_TEXTENCODING_JAVA_UTF8

Vietnamese (Windows-1258)                       RTL_TEXTENCODING_MS_1258

Western (Apple Macintosh)                       RTL_TEXTENCODING_APPLE_ROMAN
Western (Apple Macintosh/Icelandic)             RTL_TEXTENCODING_APPLE_ICELAND
Western (ASCII/US)                              RTL_TEXTENCODING_ASCII_US
Western (DOS/OS2-437/US)                        RTL_TEXTENCODING_IBM_437
Western (DOS/OS2-850/International)             RTL_TEXTENCODING_IBM_850
Western (DOS/OS2-860/Portuguese)                RTL_TEXTENCODING_IBM_860
Western (DOS/OS2-861/Icelandic)                 RTL_TEXTENCODING_IBM_861
Western (DOS/OS2-863/Canadian-French)           RTL_TEXTENCODING_IBM_863
Western (DOS/OS2-865/Nordic)                    RTL_TEXTENCODING_IBM_865
Western (ISO-8859-1)                            RTL_TEXTENCODING_ISO_8859_1
Western (ISO-8859-14)                           RTL_TEXTENCODING_ISO_8859_14
Western (ISO-8859-15/EURO)                      RTL_TEXTENCODING_ISO_8859_15
Western (Window-1252/WinLatin 1)                RTL_TEXTENCODING_MS_1252

Not known and currently not supported
# RTL_TEXTENCODING_APPLE_DEVANAGARI
# RTL_TEXTENCODING_APPLE_FARSI
# RTL_TEXTENCODING_APPLE_GUJARATI
# RTL_TEXTENCODING_APPLE_GURMUKHI

Only for internal implementations and not useful for user interface.
These encodings are not used for text encodings, only used for
font-/textoutput encodings.
Japanese (JIS 0201)                             RTL_TEXTENCODING_JISX_0201
Japanese (JIS 0208)                             RTL_TEXTENCODING_JISX_0208
Japanese (JIS 0212)                             RTL_TEXTENCODING_JISX_0212

# Currently not implemented
*/

#endif // INCLUDED_RTL_TEXTENC_H

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
