/*
     File:       TextEncodingConverter.h
 
     Contains:   Text Encoding Conversion Interfaces.
 
     Version:    Technology: Mac OS 9.0
                 Release:    QuickTime 6.0.2
 
     Copyright:  (c) 1994-2001 by Apple Computer, Inc., all rights reserved.
 
     Bugs?:      For bug reports, consult the following page on
                 the World Wide Web:
 
                     http://developer.apple.com/bugreporter/
 
*/
#ifndef __TEXTENCODINGCONVERTER__
#define __TEXTENCODINGCONVERTER__

#ifndef __MACTYPES__
#include "MacTypes.h"
#endif

#ifndef __TEXTCOMMON__
#include "TextCommon.h"
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
    #pragma pack(2)
#endif

typedef OSType                          TECPluginSignature;
typedef UInt32                          TECPluginVersion;
/* plugin signatures */
enum {
    kTECSignature               = FOUR_CHAR_CODE('encv'),
    kTECUnicodePluginSignature  = FOUR_CHAR_CODE('puni'),
    kTECJapanesePluginSignature = FOUR_CHAR_CODE('pjpn'),
    kTECChinesePluginSignature  = FOUR_CHAR_CODE('pzho'),
    kTECKoreanPluginSignature   = FOUR_CHAR_CODE('pkor')
};


/* converter object reference */
typedef struct OpaqueTECObjectRef*      TECObjectRef;
typedef struct OpaqueTECSnifferObjectRef*  TECSnifferObjectRef;
typedef OSType                          TECPluginSig;

struct TECConversionInfo {
    TextEncoding                    sourceEncoding;
    TextEncoding                    destinationEncoding;
    UInt16                          reserved1;
    UInt16                          reserved2;
};
typedef struct TECConversionInfo        TECConversionInfo;
/* return number of encodings types supported by user's configuraton of the encoding converter */
EXTERN_API( OSStatus )
TECCountAvailableTextEncodings  (ItemCount *            numberEncodings);

/* fill in an array of type TextEncoding passed in by the user with types of encodings the current configuration of the encoder can handle. */
EXTERN_API( OSStatus )
TECGetAvailableTextEncodings    (TextEncoding           availableEncodings[],
                                 ItemCount              maxAvailableEncodings,
                                 ItemCount *            actualAvailableEncodings);

/* return number of from-to encoding conversion pairs supported  */
EXTERN_API( OSStatus )
TECCountDirectTextEncodingConversions (ItemCount *      numberOfEncodings);

/* fill in an array of type TextEncodingPair passed in by the user with types of encoding pairs the current configuration of the encoder can handle. */
EXTERN_API( OSStatus )
TECGetDirectTextEncodingConversions (TECConversionInfo  availableConversions[],
                                 ItemCount              maxAvailableConversions,
                                 ItemCount *            actualAvailableConversions);

/* return number of encodings a given encoding can be converter into */
EXTERN_API( OSStatus )
TECCountDestinationTextEncodings (TextEncoding          inputEncoding,
                                 ItemCount *            numberOfEncodings);

/* fill in an array of type TextEncodingPair passed in by the user with types of encodings pairs the current configuration of the encoder can handle. */
EXTERN_API( OSStatus )
TECGetDestinationTextEncodings  (TextEncoding           inputEncoding,
                                 TextEncoding           destinationEncodings[],
                                 ItemCount              maxDestinationEncodings,
                                 ItemCount *            actualDestinationEncodings);

/* get info about a text encoding */
EXTERN_API( OSStatus )
TECGetTextEncodingInternetName  (TextEncoding           textEncoding,
                                 Str255                 encodingName);

EXTERN_API( OSStatus )
TECGetTextEncodingFromInternetName (TextEncoding *      textEncoding,
                                 ConstStr255Param       encodingName);

/* create/dispose converters */
EXTERN_API( OSStatus )
TECCreateConverter              (TECObjectRef *         newEncodingConverter,
                                 TextEncoding           inputEncoding,
                                 TextEncoding           outputEncoding);

EXTERN_API( OSStatus )
TECCreateConverterFromPath      (TECObjectRef *         newEncodingConverter,
                                 const TextEncoding     inPath[],
                                 ItemCount              inEncodings);

EXTERN_API( OSStatus )
TECDisposeConverter             (TECObjectRef           newEncodingConverter);

/* convert text encodings */
EXTERN_API( OSStatus )
TECClearConverterContextInfo    (TECObjectRef           encodingConverter);

EXTERN_API( OSStatus )
TECConvertText                  (TECObjectRef           encodingConverter,
                                 ConstTextPtr           inputBuffer,
                                 ByteCount              inputBufferLength,
                                 ByteCount *            actualInputLength,
                                 TextPtr                outputBuffer,
                                 ByteCount              outputBufferLength,
                                 ByteCount *            actualOutputLength);

EXTERN_API( OSStatus )
TECFlushText                    (TECObjectRef           encodingConverter,
                                 TextPtr                outputBuffer,
                                 ByteCount              outputBufferLength,
                                 ByteCount *            actualOutputLength);

/* one-to-many routines */
EXTERN_API( OSStatus )
TECCountSubTextEncodings        (TextEncoding           inputEncoding,
                                 ItemCount *            numberOfEncodings);

EXTERN_API( OSStatus )
TECGetSubTextEncodings          (TextEncoding           inputEncoding,
                                 TextEncoding           subEncodings[],
                                 ItemCount              maxSubEncodings,
                                 ItemCount *            actualSubEncodings);

EXTERN_API( OSStatus )
TECGetEncodingList              (TECObjectRef           encodingConverter,
                                 ItemCount *            numEncodings,
                                 Handle *               encodingList);

EXTERN_API( OSStatus )
TECCreateOneToManyConverter     (TECObjectRef *         newEncodingConverter,
                                 TextEncoding           inputEncoding,
                                 ItemCount              numOutputEncodings,
                                 const TextEncoding     outputEncodings[]);

EXTERN_API( OSStatus )
TECConvertTextToMultipleEncodings (TECObjectRef         encodingConverter,
                                 ConstTextPtr           inputBuffer,
                                 ByteCount              inputBufferLength,
                                 ByteCount *            actualInputLength,
                                 TextPtr                outputBuffer,
                                 ByteCount              outputBufferLength,
                                 ByteCount *            actualOutputLength,
                                 TextEncodingRun        outEncodingsBuffer[],
                                 ItemCount              maxOutEncodingRuns,
                                 ItemCount *            actualOutEncodingRuns);

EXTERN_API( OSStatus )
TECFlushMultipleEncodings       (TECObjectRef           encodingConverter,
                                 TextPtr                outputBuffer,
                                 ByteCount              outputBufferLength,
                                 ByteCount *            actualOutputLength,
                                 TextEncodingRun        outEncodingsBuffer[],
                                 ItemCount              maxOutEncodingRuns,
                                 ItemCount *            actualOutEncodingRuns);

/* international internet info */
EXTERN_API( OSStatus )
TECCountWebTextEncodings        (RegionCode             locale,
                                 ItemCount *            numberEncodings);

EXTERN_API( OSStatus )
TECGetWebTextEncodings          (RegionCode             locale,
                                 TextEncoding           availableEncodings[],
                                 ItemCount              maxAvailableEncodings,
                                 ItemCount *            actualAvailableEncodings);

EXTERN_API( OSStatus )
TECCountMailTextEncodings       (RegionCode             locale,
                                 ItemCount *            numberEncodings);

EXTERN_API( OSStatus )
TECGetMailTextEncodings         (RegionCode             locale,
                                 TextEncoding           availableEncodings[],
                                 ItemCount              maxAvailableEncodings,
                                 ItemCount *            actualAvailableEncodings);

/* examine text encodings */
EXTERN_API( OSStatus )
TECCountAvailableSniffers       (ItemCount *            numberOfEncodings);

EXTERN_API( OSStatus )
TECGetAvailableSniffers         (TextEncoding           availableSniffers[],
                                 ItemCount              maxAvailableSniffers,
                                 ItemCount *            actualAvailableSniffers);

EXTERN_API( OSStatus )
TECCreateSniffer                (TECSnifferObjectRef *  encodingSniffer,
                                 TextEncoding           testEncodings[],
                                 ItemCount              numTextEncodings);

EXTERN_API( OSStatus )
TECSniffTextEncoding            (TECSnifferObjectRef    encodingSniffer,
                                 TextPtr                inputBuffer,
                                 ByteCount              inputBufferLength,
                                 TextEncoding           testEncodings[],
                                 ItemCount              numTextEncodings,
                                 ItemCount              numErrsArray[],
                                 ItemCount              maxErrs,
                                 ItemCount              numFeaturesArray[],
                                 ItemCount              maxFeatures);

EXTERN_API( OSStatus )
TECDisposeSniffer               (TECSnifferObjectRef    encodingSniffer);

EXTERN_API( OSStatus )
TECClearSnifferContextInfo      (TECSnifferObjectRef    encodingSniffer);

#if CALL_NOT_IN_CARBON
EXTERN_API( OSStatus )
TECSetBasicOptions              (TECObjectRef           encodingConverter,
                                 OptionBits             controlFlags);

#endif  /* CALL_NOT_IN_CARBON */



#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
    #pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __TEXTENCODINGCONVERTER__ */

