19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __DRM_I18N_H__
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __DRM_I18N_H__
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" {
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <drm_common_types.h>
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @name Charset value defines
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @ingroup i18n
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Charset value defines
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_81rn.asp
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef enum {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_GBK        = 936,      /** Simplified Chinese GBK (CP936) */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_GB2312     = 20936,    /** Simplified Chinese GB2312 (CP936) */
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_BIG5       = 950,      /** BIG5 (CP950) */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN1     = 28591,    /** ISO 8859-1, Latin 1 */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN2     = 28592,    /** ISO 8859-2, Latin 2 */
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN3     = 28593,    /** ISO 8859-3, Latin 3 */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN4     = 28594,    /** ISO 8859-4, Latin 4 */
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_CYRILLIC   = 28595,    /** ISO 8859-5, Cyrillic */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_ARABIC     = 28596,    /** ISO 8859-6, Arabic */
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_GREEK      = 28597,    /** ISO 8859-7, Greek */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_HEBREW     = 28598,    /** ISO 8859-8, Hebrew */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN5     = 28599,    /** ISO 8859-9, Latin 5 */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN6     = 865,      /** ISO 8859-10, Latin 6 (not sure here) */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_THAI       = 874,      /** ISO 8859-11, Thai */
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN7     = 1257,     /** ISO 8859-13, Latin 7 (not sure here) */
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN8     = 38598,    /** ISO 8859-14, Latin 8 (not sure here) */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN9     = 28605,    /** ISO 8859-15, Latin 9 */
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_LATIN10    = 28606,    /** ISO 8859-16, Latin 10 */
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_UTF8       = 65001,    /** UTF-8 */
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_UTF16LE    = 1200,     /** UTF-16 LE */
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_UTF16BE    = 1201,     /** UTF-16 BE */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_HINDI      = 57002,    /** Hindi/Mac Devanagari */
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DRM_CHARSET_UNSUPPORTED = -1
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} DRM_Charset_t;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convert multibyte string of specified charset to unicode string.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note NO terminating '\0' will be appended to the output unicode string.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param charset Charset of the multibyte string.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mbs Multibyte string to be converted.
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mbsLen Number of the bytes (in mbs) to be converted.
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param wcsBuf Buffer for the converted unicode characters.
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *               If wcsBuf is NULL, the function returns the number of unicode
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *               characters required for the buffer.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bufSizeInWideChar The size (in wide char) of wcsBuf
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bytesConsumed The number of bytes in mbs that have been successfully
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *                      converted. The value of *bytesConsumed is undefined
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *                      if wcsBuf is NULL.
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Number of the successfully converted unicode characters if wcsBuf
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         is not NULL. If wcsBuf is NULL, returns required unicode buffer
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *         size. -1 for unrecoverable errors.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t DRM_i18n_mbsToWcs(DRM_Charset_t charset,
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const uint8_t *mbs, int32_t mbsLen,
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        uint16_t *wcsBuf, int32_t bufSizeInWideChar,
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int32_t *bytesConsumed);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convert unicode string to multibyte string with specified charset.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note NO terminating '\0' will be appended to the output multibyte string.
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param charset Charset of the multibyte string to be converted to.
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param wcs     Unicode string to be converted.
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param wcsLen  Number of the unicode characters (in wcs) to be converted.
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mbsBuf  Buffer for converted multibyte characters.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *                If mbsBuf is NULL, the function returns the number of bytes
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *                required for the buffer.
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bufSizeInByte The size (in byte) of mbsBuf.
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Number of the successfully converted bytes.
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t DRM_i18n_wcsToMbs(DRM_Charset_t charset,
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const uint16_t *wcs, int32_t wcsLen,
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        uint8_t *mbsBuf, int32_t bufSizeInByte);
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
108