1 /*
2   Copyright 1999-2021 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.  You may
6   obtain a copy of the License at
7 
8     https://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)
22 extern "C" {
23 #endif
24 
25 typedef 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   MagickAutoThresholdOptions,
106   MagickToolOptions,
107   MagickCLIOptions,
108   MagickIlluminantOptions
109 } CommandOption;
110 
111 typedef enum
112 {
113   UndefinedValidate,
114   NoValidate = 0x00000,
115   ColorspaceValidate = 0x00001,
116   CompareValidate = 0x00002,
117   CompositeValidate = 0x00004,
118   ConvertValidate = 0x00008,
119   FormatsDiskValidate = 0x00010,
120   FormatsMapValidate = 0x00020,
121   FormatsMemoryValidate = 0x00040,
122   IdentifyValidate = 0x00080,
123   ImportExportValidate = 0x00100,
124   MontageValidate = 0x00200,
125   StreamValidate = 0x00400,
126   AllValidate = 0x7fffffff
127 } ValidateType;
128 
129 /*
130   Flags to describe classes of image processing options.
131   These are used to determine how a option should be processed, and
132   avoid attempting to process all options in every way posible.
133 */
134 typedef enum
135 {
136   UndefinedOptionFlag       = 0x0000,  /* option flag is not in use */
137 
138   ImageInfoOptionFlag       = 0x0001,  /* Setting stored in ImageInfo */
139   DrawInfoOptionFlag        = 0x0002,  /* Setting stored in DrawInfo */
140   QuantizeInfoOptionFlag    = 0x0004,  /* Setting stored in QuantizeInfo */
141   GlobalOptionFlag          = 0x0008,  /* Global Setting or Control */
142   SettingOptionFlags        = 0x000F,  /* mask any setting option */
143 
144   NoImageOperatorFlag       = 0x0010,  /* Images not required operator */
145   SimpleOperatorFlag        = 0x0020,  /* Simple Image processing operator */
146   ListOperatorFlag          = 0x0040,  /* Multi-Image processing operator */
147   GenesisOptionFlag         = 0x0080,  /* MagickCommandGenesis() Only Option */
148 
149   SpecialOptionFlag         = 0x0100,  /* Operator with Special Requirements */
150                                        /* EG: for specific CLI commands */
151 
152   AlwaysInterpretArgsFlag   = 0x0400,  /* Always Interpret escapes in Args */
153                                        /* CF: "convert" compatibility mode */
154   NeverInterpretArgsFlag    = 0x0800,  /* Never Interpret escapes in Args */
155                                        /* EG: filename, or delayed escapes */
156 
157   NonMagickOptionFlag       = 0x1000,  /* Option not used by Magick Command */
158   FireOptionFlag            = 0x2000,  /* Convert operation seq firing point */
159   DeprecateOptionFlag       = 0x4000,  /* Deprecate option (no code) */
160   ReplacedOptionFlag        = 0x8800   /* Replaced Option (but still works) */
161 
162 } CommandOptionFlags;
163 
164 typedef struct _OptionInfo
165 {
166   const char
167     *mnemonic;
168 
169   ssize_t
170     type,
171     flags;
172 
173   MagickBooleanType
174     stealth;
175 } OptionInfo;
176 
177 
178 extern MagickExport char
179   **GetCommandOptions(const CommandOption),
180   *GetNextImageOption(const ImageInfo *),
181   *RemoveImageOption(ImageInfo *,const char *);
182 
183 extern MagickExport const char
184   *CommandOptionToMnemonic(const CommandOption,const ssize_t),
185   *GetImageOption(const ImageInfo *,const char *);
186 
187 extern MagickExport MagickBooleanType
188   CloneImageOptions(ImageInfo *,const ImageInfo *),
189   DefineImageOption(ImageInfo *,const char *),
190   DeleteImageOption(ImageInfo *,const char *),
191   IsCommandOption(const char *),
192   IsOptionMember(const char *,const char *),
193   ListCommandOptions(FILE *,const CommandOption,ExceptionInfo *),
194   SetImageOption(ImageInfo *,const char *,const char *);
195 
196 extern MagickExport ssize_t
197   GetCommandOptionFlags(const CommandOption,const MagickBooleanType,
198     const char *),
199   ParseChannelOption(const char *),
200   ParsePixelChannelOption(const char *),
201   ParseCommandOption(const CommandOption,const MagickBooleanType,const char *);
202 
203 extern MagickExport void
204   DestroyImageOptions(ImageInfo *),
205   ResetImageOptions(const ImageInfo *),
206   ResetImageOptionIterator(const ImageInfo *);
207 
208 extern MagickExport const OptionInfo
209   *GetCommandOptionInfo(const char *value);
210 
211 #if defined(__cplusplus) || defined(c_plusplus)
212 }
213 #endif
214 
215 #endif
216