1/*
2  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization
3  dedicated to making software imaging solutions freely available.
4
5  You may not use this file except in compliance with the License.
6  obtain a copy of the License at
7
8    http://www.imagemagick.org/script/license.php
9
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15
16  MagickCore option methods.
17*/
18#ifndef MAGICKCORE_OPTION_H
19#define MAGICKCORE_OPTION_H
20
21#if defined(__cplusplus) || defined(c_plusplus)
22extern "C" {
23#endif
24
25typedef enum
26{
27  MagickUndefinedOptions = -1,
28  MagickAlignOptions = 0,
29  MagickAlphaChannelOptions,
30  MagickBooleanOptions,
31  MagickCacheOptions,
32  MagickChannelOptions,
33  MagickClassOptions,
34  MagickClipPathOptions,
35  MagickCoderOptions,
36  MagickColorOptions,
37  MagickColorspaceOptions,
38  MagickCommandOptions,
39  MagickComplexOptions,
40  MagickComplianceOptions,
41  MagickComposeOptions,
42  MagickCompressOptions,
43  MagickConfigureOptions,
44  MagickDataTypeOptions,
45  MagickDebugOptions,
46  MagickDecorateOptions,
47  MagickDelegateOptions,
48  MagickDirectionOptions,
49  MagickDisposeOptions,
50  MagickDistortOptions,
51  MagickDitherOptions,
52  MagickEndianOptions,
53  MagickEvaluateOptions,
54  MagickFillRuleOptions,
55  MagickFilterOptions,
56  MagickFontOptions,
57  MagickFontsOptions,
58  MagickFormatOptions,
59  MagickFunctionOptions,
60  MagickGradientOptions,
61  MagickGravityOptions,
62  MagickIntensityOptions,
63  MagickIntentOptions,
64  MagickInterlaceOptions,
65  MagickInterpolateOptions,
66  MagickKernelOptions,
67  MagickLayerOptions,
68  MagickLineCapOptions,
69  MagickLineJoinOptions,
70  MagickListOptions,
71  MagickLocaleOptions,
72  MagickLogEventOptions,
73  MagickLogOptions,
74  MagickMagicOptions,
75  MagickMethodOptions,
76  MagickMetricOptions,
77  MagickMimeOptions,
78  MagickModeOptions,
79  MagickModuleOptions,
80  MagickMorphologyOptions,
81  MagickNoiseOptions,
82  MagickOrientationOptions,
83  MagickPixelChannelOptions,
84  MagickPixelIntensityOptions,
85  MagickPixelMaskOptions,
86  MagickPixelTraitOptions,
87  MagickPolicyOptions,
88  MagickPolicyDomainOptions,
89  MagickPolicyRightsOptions,
90  MagickPreviewOptions,
91  MagickPrimitiveOptions,
92  MagickQuantumFormatOptions,
93  MagickResolutionOptions,
94  MagickResourceOptions,
95  MagickSparseColorOptions,
96  MagickStatisticOptions,
97  MagickStorageOptions,
98  MagickStretchOptions,
99  MagickStyleOptions,
100  MagickThresholdOptions,
101  MagickTypeOptions,
102  MagickValidateOptions,
103  MagickVirtualPixelOptions,
104  MagickWeightOptions
105} CommandOption;
106
107typedef enum
108{
109  UndefinedValidate,
110  NoValidate = 0x00000,
111  ColorspaceValidate = 0x00001,
112  CompareValidate = 0x00002,
113  CompositeValidate = 0x00004,
114  ConvertValidate = 0x00008,
115  FormatsDiskValidate = 0x00010,
116  FormatsMapValidate = 0x00020,
117  FormatsMemoryValidate = 0x00040,
118  IdentifyValidate = 0x00080,
119  ImportExportValidate = 0x00100,
120  MontageValidate = 0x00200,
121  StreamValidate = 0x00400,
122  AllValidate = 0x7fffffff
123} ValidateType;
124
125/*
126  Flags to describe classes of image processing options.
127  These are used to determine how a option should be processed, and
128  avoid attempting to process all options in every way posible.
129*/
130typedef enum
131{
132  UndefinedOptionFlag       = 0x0000,  /* option flag is not in use */
133
134  ImageInfoOptionFlag       = 0x0001,  /* Setting stored in ImageInfo */
135  DrawInfoOptionFlag        = 0x0002,  /* Setting stored in DrawInfo */
136  QuantizeInfoOptionFlag    = 0x0004,  /* Setting stored in QuantizeInfo */
137  GlobalOptionFlag          = 0x0008,  /* Global Setting or Control */
138  SettingOptionFlags        = 0x000F,  /* mask any setting option */
139
140  NoImageOperatorFlag       = 0x0010,  /* Images not required operator */
141  SimpleOperatorFlag        = 0x0020,  /* Simple Image processing operator */
142  ListOperatorFlag          = 0x0040,  /* Multi-Image processing operator */
143  GenesisOptionFlag         = 0x0080,  /* MagickCommandGenesis() Only Option */
144
145  SpecialOptionFlag         = 0x0100,  /* Operator with Special Requirements */
146                                       /* EG: for specific CLI commands */
147
148  AlwaysInterpretArgsFlag   = 0x0400,  /* Always Interpret escapes in Args */
149                                       /* CF: "convert" compatibility mode */
150  NeverInterpretArgsFlag    = 0x0800,  /* Never Interpret escapes in Args */
151                                       /* EG: filename, or delayed escapes */
152
153  NonMagickOptionFlag       = 0x1000,  /* Option not used by Magick Command */
154  FireOptionFlag            = 0x2000,  /* Convert operation seq firing point */
155  DeprecateOptionFlag       = 0x4000,  /* Deprecate option (no code) */
156  ReplacedOptionFlag        = 0x8800   /* Replaced Option (but still works) */
157
158} CommandOptionFlags;
159
160typedef struct _OptionInfo
161{
162  const char
163    *mnemonic;
164
165  ssize_t
166    type,
167    flags;
168
169  MagickBooleanType
170    stealth;
171} OptionInfo;
172
173
174extern MagickExport char
175  **GetCommandOptions(const CommandOption),
176  *GetNextImageOption(const ImageInfo *),
177  *RemoveImageOption(ImageInfo *,const char *);
178
179extern MagickExport const char
180  *CommandOptionToMnemonic(const CommandOption,const ssize_t),
181  *GetImageOption(const ImageInfo *,const char *);
182
183extern MagickExport MagickBooleanType
184  CloneImageOptions(ImageInfo *,const ImageInfo *),
185  DefineImageOption(ImageInfo *,const char *),
186  DeleteImageOption(ImageInfo *,const char *),
187  IsCommandOption(const char *),
188  IsOptionMember(const char *,const char *),
189  ListCommandOptions(FILE *,const CommandOption,ExceptionInfo *),
190  SetImageOption(ImageInfo *,const char *,const char *);
191
192extern MagickExport ssize_t
193  GetCommandOptionFlags(const CommandOption,const MagickBooleanType,
194    const char *),
195  ParseChannelOption(const char *),
196  ParsePixelChannelOption(const char *),
197  ParseCommandOption(const CommandOption,const MagickBooleanType,const char *);
198
199extern MagickExport void
200  DestroyImageOptions(ImageInfo *),
201  ResetImageOptions(const ImageInfo *),
202  ResetImageOptionIterator(const ImageInfo *);
203
204extern MagickExport const OptionInfo
205  *GetCommandOptionInfo(const char *value);
206
207#if defined(__cplusplus) || defined(c_plusplus)
208}
209#endif
210
211#endif
212