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 			static if ( MagickLibVersion >= 0x693 )
142 			{
143 				options ~= "MagickComplianceOptions,";
144 			}
145 
146 			static if ( MagickLibVersion >= 0x699 )
147 			{
148 				options ~= "MagickAutoThresholdOptions";
149 			}
150 
151 			options ~= "}";
152 
153 		return options;
154 	}());
155 
156 	static if ( MagickLibVersion >= 0x686 )
157 	{
158 		enum ValidateType
159 		{
160 			UndefinedValidate,
161 			NoValidate = 0x00000,
162 			ColorspaceValidate = 0x00001,
163 			CompareValidate = 0x00002,
164 			CompositeValidate = 0x00004,
165 			ConvertValidate = 0x00008,
166 			FormatsDiskValidate = 0x00010,
167 			FormatsMapValidate = 0x00020,
168 			FormatsMemoryValidate = 0x00040,
169 			IdentifyValidate = 0x00080,
170 			ImportExportValidate = 0x00100,
171 			MontageValidate = 0x00200,
172 			StreamValidate = 0x00400,
173 			AllValidate = 0x7fffffff
174 		}
175 	}
176 	else
177 	{
178 		enum ValidateType
179 		{
180 			UndefinedValidate,
181 			NoValidate = 0x00000,
182 			CompareValidate = 0x00001,
183 			CompositeValidate = 0x00002,
184 			ConvertValidate = 0x00004,
185 			FormatsInMemoryValidate = 0x00008,
186 			FormatsOnDiskValidate = 0x00010,
187 			IdentifyValidate = 0x00020,
188 			ImportExportValidate = 0x00040,
189 			MontageValidate = 0x00080,
190 			StreamValidate = 0x00100,
191 			AllValidate = 0x7fffffff
192 		}
193 	}
194 
195 	enum CommandOptionFlags
196 	{
197 		UndefinedOptionFlag       = 0x0000,
198 		FireOptionFlag            = 0x0001,  /* Option sequence firing point */
199 		ImageInfoOptionFlag       = 0x0002,  /* Sets ImageInfo, no image needed */
200 		DrawInfoOptionFlag        = 0x0004,  /* Sets DrawInfo, no image needed */
201 		QuantizeInfoOptionFlag    = 0x0008,  /* Sets QuantizeInfo, no image needed */
202 		GlobalOptionFlag          = 0x0010,  /* Sets Global Option, no image needed */
203 		SimpleOperatorOptionFlag  = 0x0100,  /* Simple Image processing operator */
204 		ListOperatorOptionFlag    = 0x0200,  /* Multi-Image List processing operator */
205 		SpecialOperatorOptionFlag = 0x0400,  /* Specially handled Operator Option */
206 		GenesisOptionFlag         = 0x0400,  /* Genesis Command Wrapper Option  */
207 		NonConvertOptionFlag      = 0x4000,  /* Option not used by Convert */
208 		DeprecateOptionFlag       = 0x8000   /* Deprecate option, give warning */
209 	}
210 
211 	struct OptionInfo
212 	{
213 		const(char)*
214 			mnemonic;
215 
216 		ssize_t
217 			type;
218 
219 		static if ( MagickLibVersion >= 0x670 )
220 		{
221 			ssize_t
222 				flags;
223 		}
224 
225 		MagickBooleanType
226 			stealth;
227 	}
228 
229 	static if ( MagickLibVersion >= 0x670 )
230 	{
231 		char** GetCommandOptions(const CommandOption);
232 
233 		const(char)* CommandOptionToMnemonic(const CommandOption, const ssize_t);
234 
235 		MagickBooleanType IsCommandOption(const(char)*);
236 		MagickBooleanType ListCommandOptions(FILE*, const CommandOption, ExceptionInfo*);
237 
238 		ssize_t GetCommandOptionFlags(const CommandOption, const MagickBooleanType, const(char)*);
239 		ssize_t ParseCommandOption(const CommandOption, const MagickBooleanType, const(char)*);
240 	}
241 	else
242 	{
243 		char** GetMagickOptions(const MagickOption);
244 
245 		const(char)* MagickOptionToMnemonic(const MagickOption, const ssize_t);
246 
247 		MagickBooleanType IsMagickOption(const(char)*);
248 		MagickBooleanType ListMagickOptions(FILE*, const MagickOption, ExceptionInfo*);
249 
250 		ssize_t ParseMagickOption(const MagickOption, const MagickBooleanType,const(char)*);
251 	}
252 
253 	static if ( MagickLibVersion >= 0x690 )
254 	{
255 		MagickBooleanType IsOptionMember(const(char)*, const(char)*);
256 	}
257 
258 	char*  GetNextImageOption(const(ImageInfo)*);
259 	char*  RemoveImageOption(ImageInfo*, const(char)*);
260 
261 	const(char)* GetImageOption(const(ImageInfo)*, const(char)*);
262 
263 	MagickBooleanType CloneImageOptions(ImageInfo*, const(ImageInfo)*);
264 	MagickBooleanType DefineImageOption(ImageInfo*, const(char)*);
265 	MagickBooleanType DeleteImageOption(ImageInfo*, const(char)*);
266 	MagickBooleanType SetImageOption(ImageInfo*, const(char)*, const(char)*);
267 
268 	ssize_t ParseChannelOption(const(char)*);
269 
270 	void DestroyImageOptions(ImageInfo*);
271 	void ResetImageOptions(const(ImageInfo)*);
272 	void ResetImageOptionIterator(const(ImageInfo)*);
273 }