view dstep/coreservices/carboncore/TextEncodingPlugin.d @ 11:07194b026fa4

Added bindings to a couple of frameworks, new license + some other things
author Jacob Carlborg <doob@me.com>
date Sat, 01 Aug 2009 15:03:28 +0200
parents
children
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Jul 21, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.coreservices.carboncore.TextEncodingPlugin;

//import dstep.AvailabilityMacros;
import dstep.coreservices.carboncore.MacTypes;
import dstep.coreservices.carboncore.TextCommon;
import dstep.coreservices.carboncore.TextEncodingConverter;
import dstep.objc.bridge.TypeEncoding;

alias TECEncodingsListRec* TECEncodingsListPtr;
alias TECEncodingsListPtr* TECEncodingsListHandle;
alias TECSubTextEncodingsRec* TECSubTextEncodingsPtr;
alias TECSubTextEncodingsPtr* TECSubTextEncodingsHandle;
alias TECEncodingPairsRec* TECEncodingPairsPtr;
alias TECEncodingPairsPtr* TECEncodingPairsHandle;
alias TECLocaleListToEncodingListRec* TECLocaleListToEncodingListPtr;
alias TECLocaleToEncodingsListRec* TECLocaleToEncodingsListPtr;
alias TECLocaleToEncodingsListPtr* TECLocaleToEncodingsListHandle;
alias TECInternetNamesRec* TECInternetNamesPtr;
alias TECInternetNamesPtr* TECInternetNamesHandle;

extern (C)
{
	alias int function (TextEncoding*, uint, ItemCount*) TECPluginGetCountAvailableSniffersPtr;
	alias int function (uint, TextEncoding*, uint, ItemCount*) TECPluginGetCountSubTextEncodingsPtr;
	alias int function (uint, TextEncoding*, uint, ItemCount*) TECPluginGetCountDestinationTextEncodingsPtr;
	alias int function (TECObjectRef, TECConverterContextRec*) TECPluginFlushConversionPtr;
	alias int function (TECObjectRef, TECConverterContextRec*) TECPluginClearContextInfoPtr;
	alias int function (TextEncoding*, uint, ItemCount*) TECPluginGetCountWebEncodingsPtr;
	alias int function (TECConversionInfo*, uint, ItemCount*) TECPluginGetCountAvailableTextEncodingPairsPtr;
	alias int function (TECSnifferObjectRef, TECSnifferContextRec*) TECPluginDisposeEncodingSnifferPtr;
	alias int function (TECSnifferObjectRef, TECSnifferContextRec*) TECPluginClearSnifferContextInfoPtr;
	alias int function (TECObjectRef, TECConverterContextRec*) TECPluginConvertTextEncodingPtr;
	alias int function (TECSnifferObjectRef*, TECSnifferContextRec*, uint) TECPluginNewEncodingSnifferPtr;
	alias int function (TextEncoding*, uint, ItemCount*) TECPluginGetCountMailEncodingsPtr;
	alias int function (TextEncoding*, char*) TECPluginGetTextEncodingFromInternetNamePtr;
	alias TECPluginDispatchTable * function () TECPluginGetPluginDispatchTablePtr;
	alias int function (TECSnifferObjectRef, TECSnifferContextRec*) TECPluginSniffTextEncodingPtr;
	alias int function (TECObjectRef, TECConverterContextRec*) TECPluginDisposeEncodingConverterPtr;
	alias int function (uint, Str255) TECPluginGetTextEncodingInternetNamePtr;
	alias int function (TextEncoding*, uint, ItemCount*) TECPluginGetCountAvailableTextEncodingsPtr;
	alias int function (TECObjectRef*, TECConverterContextRec*, uint, uint) TECPluginNewEncodingConverterPtr;
}

// This is needed otherwise the enums will fail compiling with gdc
version (GNU)
{
	private
	{
		const __kTECAvailableEncodingsResType = getOSType!("cven");
		const __kTECAvailableSniffersResType = getOSType!("cvsf");
		const __kTECSubTextEncodingsResType = getOSType!("cvsb");
		const __kTECConversionInfoResType = getOSType!("cvif");
		const __kTECMailEncodingsResType = getOSType!("cvml");
		const __kTECWebEncodingsResType = getOSType!("cvwb");
		const __kTECInternetNamesResType = getOSType!("cvmm");

	}
}

// This is needed otherwise the enums will fail compiling with gdc
version (GNU)
{
	private
	{
		const __kTECPluginType = getOSType!("ecpg");
		const __kTECPluginCreator = getOSType!("encv");
		const __kTECPluginOneToOne = getOSType!("otoo");
		const __kTECPluginOneToMany = getOSType!("otom");
		const __kTECPluginManyToOne = getOSType!("mtoo");
		const __kTECPluginSniffObj = getOSType!("snif");

	}
}

enum
{
	kTECAvailableEncodingsResType = getOSType!("cven"),
	kTECAvailableSniffersResType = getOSType!("cvsf"),
	kTECSubTextEncodingsResType = getOSType!("cvsb"),
	kTECConversionInfoResType = getOSType!("cvif"),
	kTECMailEncodingsResType = getOSType!("cvml"),
	kTECWebEncodingsResType = getOSType!("cvwb"),
	kTECInternetNamesResType = getOSType!("cvmm")
}

enum
{
	kTECPluginType = getOSType!("ecpg"),
	kTECPluginCreator = getOSType!("encv"),
	kTECPluginOneToOne = getOSType!("otoo"),
	kTECPluginOneToMany = getOSType!("otom"),
	kTECPluginManyToOne = getOSType!("mtoo"),
	kTECPluginSniffObj = getOSType!("snif")
}

enum
{
	verUnspecified = 32767,
	kTECResourceID = 128
}

enum
{
	kTECPluginDispatchTableVersion1 = 0x00010000,
	kTECPluginDispatchTableVersion1_1 = 0x00010001,
	kTECPluginDispatchTableVersion1_2 = 0x00010002,
	kTECPluginDispatchTableCurrentVersion = kTECPluginDispatchTableVersion1_2
}

struct TextEncodingRec
{
	uint base;
	uint variant;
	uint format;
}


struct TECEncodingsListRec
{
	uint count;
	TextEncodingRec encodings;
}


struct TECSubTextEncodingRec
{
	uint offset;
	TextEncodingRec searchEncoding;
	uint count;
	TextEncodingRec subEncodings;
}


struct TECSubTextEncodingsRec
{
	uint count;
	TECSubTextEncodingRec subTextEncodingRec;
}


struct TECEncodingPairRec
{
	TextEncodingRec source;
	TextEncodingRec dest;
}


struct TECEncodingPairs
{
	TECEncodingPairRec encodingPair;
	uint flags;
	uint speed;
}


struct TECEncodingPairsRec
{
	uint count;
	TECEncodingPairs encodingPairs;
}


struct TECLocaleListToEncodingListRec
{
	uint offset;
	uint count;
	short locales;
}


struct TECLocaleToEncodingsListRec
{
	uint count;
	TECLocaleListToEncodingListRec localeListToEncodingList;
}


struct TECInternetNameRec
{
	uint offset;
	TextEncodingRec searchEncoding;
	ubyte encodingNameLength;
	char* encodingName;
}


struct TECInternetNamesRec
{
	uint count;
	TECInternetNameRec InternetNames;
}


struct TECBufferContextRec
{
	char* textInputBuffer;
	char* textInputBufferEnd;
	char* textOutputBuffer;
	char* textOutputBufferEnd;
	ConstTextEncodingRunPtr encodingInputBuffer;
	ConstTextEncodingRunPtr encodingInputBufferEnd;
	TextEncodingRunPtr encodingOutputBuffer;
	TextEncodingRunPtr encodingOutputBufferEnd;
}


struct TECPluginStateRec
{
	ubyte state1;
	ubyte state2;
	ubyte state3;
	ubyte state4;
	uint longState1;
	uint longState2;
	uint longState3;
	uint longState4;
}


struct TECConverterContextRec
{
	char* pluginRec;
	uint sourceEncoding;
	uint destEncoding;
	uint reserved1;
	uint reserved2;
	TECBufferContextRec bufferContext;
	uint contextRefCon;
	ProcPtr conversionProc;
	ProcPtr flushProc;
	ProcPtr clearContextInfoProc;
	uint options1;
	uint options2;
	TECPluginStateRec pluginState;
}


struct TECSnifferContextRec
{
	char* pluginRec;
	uint encoding;
	uint maxErrors;
	uint maxFeatures;
	char* textInputBuffer;
	char* textInputBufferEnd;
	uint numFeatures;
	uint numErrors;
	uint contextRefCon;
	ProcPtr sniffProc;
	ProcPtr clearContextInfoProc;
	TECPluginStateRec pluginState;
}


struct TECPluginDispatchTable
{
	uint version_;
	uint compatibleVersion;
	uint PluginID;
	TECPluginNewEncodingConverterPtr PluginNewEncodingConverter;
	TECPluginClearContextInfoPtr PluginClearContextInfo;
	TECPluginConvertTextEncodingPtr PluginConvertTextEncoding;
	TECPluginFlushConversionPtr PluginFlushConversion;
	TECPluginDisposeEncodingConverterPtr PluginDisposeEncodingConverter;
	TECPluginNewEncodingSnifferPtr PluginNewEncodingSniffer;
	TECPluginClearSnifferContextInfoPtr PluginClearSnifferContextInfo;
	TECPluginSniffTextEncodingPtr PluginSniffTextEncoding;
	TECPluginDisposeEncodingSnifferPtr PluginDisposeEncodingSniffer;
	TECPluginGetCountAvailableTextEncodingsPtr PluginGetCountAvailableTextEncodings;
	TECPluginGetCountAvailableTextEncodingPairsPtr PluginGetCountAvailableTextEncodingPairs;
	TECPluginGetCountDestinationTextEncodingsPtr PluginGetCountDestinationTextEncodings;
	TECPluginGetCountSubTextEncodingsPtr PluginGetCountSubTextEncodings;
	TECPluginGetCountAvailableSniffersPtr PluginGetCountAvailableSniffers;
	TECPluginGetCountWebEncodingsPtr PluginGetCountWebTextEncodings;
	TECPluginGetCountMailEncodingsPtr PluginGetCountMailTextEncodings;
	TECPluginGetTextEncodingInternetNamePtr PluginGetTextEncodingInternetName;
	TECPluginGetTextEncodingFromInternetNamePtr PluginGetTextEncodingFromInternetName;
}