1 module dmagick.c.option;
2 
3 import core.stdc.stdio;
4 
5 import dmagick.c.exception;
6 import dmagick.c.image;
7 import dmagick.c.magickType;
8 import dmagick.c.magickVersion;
9 
10 alias ptrdiff_t ssize_t;
11 
12 extern(C)
13 {
14 	mixin(
15 	{
16 		static if ( MagickLibVersion >= 0x670 )
17 		{
18 			string options = "enum CommandOption";
19 		}
20 		else
21 		{
22 			string options = "enum MagickOption";
23 		}
24 
25 		options ~= "
26 		{
27 			MagickUndefinedOptions = -1,
28 			MagickAlignOptions = 0,
29 			MagickAlphaOptions,
30 			MagickBooleanOptions,";
31 
32 			static if ( MagickLibVersion >= 0x682 )
33 			{
34 				options ~= "MagickCacheOptions,";
35 			}
36 
37 			options ~= "
38 			MagickChannelOptions,
39 			MagickClassOptions,
40 			MagickClipPathOptions,
41 			MagickCoderOptions,
42 			MagickColorOptions,
43 			MagickColorspaceOptions,
44 			MagickCommandOptions,
45 			MagickComposeOptions,
46 			MagickCompressOptions,
47 			MagickConfigureOptions,
48 			MagickDataTypeOptions,
49 			MagickDebugOptions,
50 			MagickDecorateOptions,
51 			MagickDelegateOptions,";
52 
53 			static if ( MagickLibVersion >= 0x661 )
54 			{
55 				options ~= "MagickDirectionOptions,";
56 			}
57 
58 			options ~= "
59 			MagickDisposeOptions,
60 			MagickDistortOptions,
61 			MagickDitherOptions,
62 			MagickEndianOptions,
63 			MagickEvaluateOptions,
64 			MagickFillRuleOptions,
65 			MagickFilterOptions,
66 			MagickFontOptions,
67 			MagickFontsOptions,
68 			MagickFormatOptions,
69 			MagickFunctionOptions,
70 			MagickGravityOptions,";
71 
72 			static if ( MagickLibVersion < 0x670 )
73 			{
74 				options ~= "MagickImageListOptions,";
75 			}
76 
77 			options ~= "
78 			MagickIntentOptions,
79 			MagickInterlaceOptions,
80 			MagickInterpolateOptions,
81 			MagickKernelOptions,
82 			MagickLayerOptions,
83 			MagickLineCapOptions,
84 			MagickLineJoinOptions,
85 			MagickListOptions,
86 			MagickLocaleOptions,
87 			MagickLogEventOptions,
88 			MagickLogOptions,
89 			MagickMagicOptions,
90 			MagickMethodOptions,
91 			MagickMetricOptions,
92 			MagickMimeOptions,
93 			MagickModeOptions,
94 			MagickModuleOptions,
95 			MagickMorphologyOptions,
96 			MagickNoiseOptions,
97 			MagickOrientationOptions,";
98 
99 			static if ( MagickLibVersion >= 0x684 )
100 			{
101 				options ~= "MagickPixelIntensityOptions,";
102 			}
103 
104 			options ~= "
105 			MagickPolicyOptions,
106 			MagickPolicyDomainOptions,
107 			MagickPolicyRightsOptions,
108 			MagickPreviewOptions,
109 			MagickPrimitiveOptions,
110 			MagickQuantumFormatOptions,
111 			MagickResolutionOptions,
112 			MagickResourceOptions,
113 			MagickSparseColorOptions,";
114 
115 			static if ( MagickLibVersion >= 0x669 )
116 			{
117 				options ~= "MagickStatisticOptions,";
118 			}
119 
120 			options ~= "
121 			MagickStorageOptions,
122 			MagickStretchOptions,
123 			MagickStyleOptions,
124 			MagickThresholdOptions,
125 			MagickTypeOptions,
126 			MagickValidateOptions,
127 			MagickVirtualPixelOptions";
128 
129 			static if ( MagickLibVersion >= 0x688 )
130 			{
131 				options ~= "MagickComplexOptions,
132 				            MagickIntensityOptions,";
133 			}
134 
135 			static if ( MagickLibVersion >= 0x692 )
136 			{
137 				options ~= "MagickGradientOptions,
138 				            MagickWeightOptions,";
139 			}
140 
141 			options ~= "}";
142 
143 		return options;
144 	}());
145 
146 	static if ( MagickLibVersion >= 0x686 )
147 	{
148 		enum ValidateType
149 		{
150 			UndefinedValidate,
151 			NoValidate = 0x00000,
152 			ColorspaceValidate = 0x00001,
153 			CompareValidate = 0x00002,
154 			CompositeValidate = 0x00004,
155 			ConvertValidate = 0x00008,
156 			FormatsDiskValidate = 0x00010,
157 			FormatsMapValidate = 0x00020,
158 			FormatsMemoryValidate = 0x00040,
159 			IdentifyValidate = 0x00080,
160 			ImportExportValidate = 0x00100,
161 			MontageValidate = 0x00200,
162 			StreamValidate = 0x00400,
163 			AllValidate = 0x7fffffff
164 		}
165 	}
166 	else
167 	{
168 		enum ValidateType
169 		{
170 			UndefinedValidate,
171 			NoValidate = 0x00000,
172 			CompareValidate = 0x00001,
173 			CompositeValidate = 0x00002,
174 			ConvertValidate = 0x00004,
175 			FormatsInMemoryValidate = 0x00008,
176 			FormatsOnDiskValidate = 0x00010,
177 			IdentifyValidate = 0x00020,
178 			ImportExportValidate = 0x00040,
179 			MontageValidate = 0x00080,
180 			StreamValidate = 0x00100,
181 			AllValidate = 0x7fffffff
182 		}
183 	}
184 
185 	enum CommandOptionFlags
186 	{
187 		UndefinedOptionFlag       = 0x0000,
188 		FireOptionFlag            = 0x0001,  /* Option sequence firing point */
189 		ImageInfoOptionFlag       = 0x0002,  /* Sets ImageInfo, no image needed */
190 		DrawInfoOptionFlag        = 0x0004,  /* Sets DrawInfo, no image needed */
191 		QuantizeInfoOptionFlag    = 0x0008,  /* Sets QuantizeInfo, no image needed */
192 		GlobalOptionFlag          = 0x0010,  /* Sets Global Option, no image needed */
193 		SimpleOperatorOptionFlag  = 0x0100,  /* Simple Image processing operator */
194 		ListOperatorOptionFlag    = 0x0200,  /* Multi-Image List processing operator */
195 		SpecialOperatorOptionFlag = 0x0400,  /* Specially handled Operator Option */
196 		GenesisOptionFlag         = 0x0400,  /* Genesis Command Wrapper Option  */
197 		NonConvertOptionFlag      = 0x4000,  /* Option not used by Convert */
198 		DeprecateOptionFlag       = 0x8000   /* Deprecate option, give warning */
199 	}
200 
201 	struct OptionInfo
202 	{
203 		const(char)*
204 			mnemonic;
205 
206 		ssize_t
207 			type;
208 
209 		static if ( MagickLibVersion >= 0x670 )
210 		{
211 			ssize_t
212 				flags;
213 		}
214 
215 		MagickBooleanType
216 			stealth;
217 	}
218 
219 	static if ( MagickLibVersion >= 0x670 )
220 	{
221 		char** GetCommandOptions(const CommandOption);
222 
223 		const(char)* CommandOptionToMnemonic(const CommandOption, const ssize_t);
224 
225 		MagickBooleanType IsCommandOption(const(char)*);
226 		MagickBooleanType ListCommandOptions(FILE*, const CommandOption, ExceptionInfo*);
227 
228 		ssize_t GetCommandOptionFlags(const CommandOption, const MagickBooleanType, const(char)*);
229 		ssize_t ParseCommandOption(const CommandOption, const MagickBooleanType, const(char)*);
230 	}
231 	else
232 	{
233 		char** GetMagickOptions(const MagickOption);
234 
235 		const(char)* MagickOptionToMnemonic(const MagickOption, const ssize_t);
236 
237 		MagickBooleanType IsMagickOption(const(char)*);
238 		MagickBooleanType ListMagickOptions(FILE*, const MagickOption, ExceptionInfo*);
239 
240 		ssize_t ParseMagickOption(const MagickOption, const MagickBooleanType,const(char)*);
241 	}
242 
243 	static if ( MagickLibVersion >= 0x690 )
244 	{
245 		MagickBooleanType IsOptionMember(const(char)*, const(char)*);
246 	}
247 
248 	char*  GetNextImageOption(const(ImageInfo)*);
249 	char*  RemoveImageOption(ImageInfo*, const(char)*);
250 
251 	const(char)* GetImageOption(const(ImageInfo)*, const(char)*);
252 
253 	MagickBooleanType CloneImageOptions(ImageInfo*, const(ImageInfo)*);
254 	MagickBooleanType DefineImageOption(ImageInfo*, const(char)*);
255 	MagickBooleanType DeleteImageOption(ImageInfo*, const(char)*);
256 	MagickBooleanType SetImageOption(ImageInfo*, const(char)*, const(char)*);
257 
258 	ssize_t ParseChannelOption(const(char)*);
259 
260 	void DestroyImageOptions(ImageInfo*);
261 	void ResetImageOptions(const(ImageInfo)*);
262 	void ResetImageOptionIterator(const(ImageInfo)*);
263 }