"Fossies" - the Fresh Open Source Software Archive 
Member "libextractor-1.11/src/include/extractor.h" (30 Jan 2021, 22464 Bytes) of package /linux/privat/libextractor-1.11.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "extractor.h" see the
Fossies "Dox" file reference documentation and the latest
Fossies "Diffs" side-by-side code changes report:
1.10_vs_1.11.
1 /*
2 This file is part of libextractor.
3 Copyright (C) 2002-2017 Vidyut Samanta and Christian Grothoff
4
5 libextractor is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
9
10 libextractor is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with libextractor; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef EXTRACTOR_H
22 #define EXTRACTOR_H
23
24 #ifdef __cplusplus
25 extern "C" {
26 #if 0 /* keep Emacsens' auto-indent happy */
27 }
28 #endif
29 #endif
30
31
32 #include <stdint.h>
33
34 /**
35 * 0.2.6-1 => 0x00020601
36 * 4.5.2-0 => 0x04050200
37 */
38 #define EXTRACTOR_VERSION 0x010B0000
39
40 #include <stdio.h>
41
42 #ifndef _EXTRACTOR_EXTERN
43 #if defined(_WIN32) && defined(MHD_W32LIB)
44 #define _EXTRACTOR_EXTERN extern
45 #elif defined (_WIN32) && defined(MHD_W32DLL)
46 /* Define MHD_W32DLL when using MHD as W32 .DLL to speed up linker a little */
47 #define _EXTRACTOR_EXTERN __declspec(dllimport)
48 #else
49 #define _EXTRACTOR_EXTERN extern
50 #endif
51 #endif
52
53 /**
54 * Options for how plugin execution should be done.
55 */
56 enum EXTRACTOR_Options
57 {
58
59 /**
60 * Run plugin out-of-process, starting the process once the plugin
61 * is to be run. If a plugin crashes, automatically restart the
62 * respective process for the same file and try once more
63 * (since the crash may be caused by the previous file). If
64 * the process crashes immediately again, it is not restarted
65 * until the next file.
66 */
67 EXTRACTOR_OPTION_DEFAULT_POLICY = 0,
68
69 /**
70 * Deprecated option. Ignored.
71 */
72 EXTRACTOR_OPTION_OUT_OF_PROCESS_NO_RESTART = 1,
73
74 /**
75 * Run plugins in-process. Unsafe, not recommended,
76 * can be nice for debugging.
77 */
78 EXTRACTOR_OPTION_IN_PROCESS = 2,
79
80 /**
81 * Internal value for plugins that have been disabled.
82 */
83 EXTRACTOR_OPTION_DISABLED = 3
84
85 };
86
87
88 /**
89 * Format in which the extracted meta data is presented.
90 */
91 enum EXTRACTOR_MetaFormat
92 {
93 /**
94 * Format is unknown.
95 */
96 EXTRACTOR_METAFORMAT_UNKNOWN = 0,
97
98 /**
99 * 0-terminated, UTF-8 encoded string. "data_len"
100 * is strlen(data)+1.
101 */
102 EXTRACTOR_METAFORMAT_UTF8 = 1,
103
104 /**
105 * Some kind of binary format, see given Mime type.
106 */
107 EXTRACTOR_METAFORMAT_BINARY = 2,
108
109 /**
110 * 0-terminated string. The specific encoding is unknown.
111 * "data_len" is strlen (data)+1.
112 */
113 EXTRACTOR_METAFORMAT_C_STRING = 3
114
115 };
116
117
118 /**
119 * Enumeration defining various sources of keywords. See also
120 * http://dublincore.org/documents/1998/09/dces/
121 *
122 * @defgroup types meta data types
123 * @{
124 */
125 enum EXTRACTOR_MetaType
126 {
127 /* fundamental types */
128 EXTRACTOR_METATYPE_RESERVED = 0,
129 EXTRACTOR_METATYPE_MIMETYPE = 1,
130 EXTRACTOR_METATYPE_FILENAME = 2,
131 EXTRACTOR_METATYPE_COMMENT = 3,
132
133 /* Standard types from bibtex */
134 EXTRACTOR_METATYPE_TITLE = 4,
135 EXTRACTOR_METATYPE_BOOK_TITLE = 5,
136 EXTRACTOR_METATYPE_BOOK_EDITION = 6,
137 EXTRACTOR_METATYPE_BOOK_CHAPTER_NUMBER = 7,
138 EXTRACTOR_METATYPE_JOURNAL_NAME = 8,
139 EXTRACTOR_METATYPE_JOURNAL_VOLUME = 9,
140 EXTRACTOR_METATYPE_JOURNAL_NUMBER = 10,
141 EXTRACTOR_METATYPE_PAGE_COUNT = 11,
142 EXTRACTOR_METATYPE_PAGE_RANGE = 12,
143 EXTRACTOR_METATYPE_AUTHOR_NAME = 13,
144 EXTRACTOR_METATYPE_AUTHOR_EMAIL = 14,
145 EXTRACTOR_METATYPE_AUTHOR_INSTITUTION = 15,
146 EXTRACTOR_METATYPE_PUBLISHER = 16,
147 EXTRACTOR_METATYPE_PUBLISHER_ADDRESS = 17,
148 EXTRACTOR_METATYPE_PUBLISHER_INSTITUTION = 18,
149 EXTRACTOR_METATYPE_PUBLISHER_SERIES = 19,
150 EXTRACTOR_METATYPE_PUBLICATION_TYPE = 20,
151 EXTRACTOR_METATYPE_PUBLICATION_YEAR = 21,
152 EXTRACTOR_METATYPE_PUBLICATION_MONTH = 22,
153 EXTRACTOR_METATYPE_PUBLICATION_DAY = 23,
154 EXTRACTOR_METATYPE_PUBLICATION_DATE = 24,
155 EXTRACTOR_METATYPE_BIBTEX_EPRINT = 25,
156 EXTRACTOR_METATYPE_BIBTEX_ENTRY_TYPE = 26,
157 EXTRACTOR_METATYPE_LANGUAGE = 27,
158 EXTRACTOR_METATYPE_CREATION_TIME = 28,
159 EXTRACTOR_METATYPE_URL = 29,
160
161 /* "unique" document identifiers */
162 EXTRACTOR_METATYPE_URI = 30,
163 EXTRACTOR_METATYPE_ISRC = 31,
164 EXTRACTOR_METATYPE_HASH_MD4 = 32,
165 EXTRACTOR_METATYPE_HASH_MD5 = 33,
166 EXTRACTOR_METATYPE_HASH_SHA0 = 34,
167 EXTRACTOR_METATYPE_HASH_SHA1 = 35,
168 EXTRACTOR_METATYPE_HASH_RMD160 = 36,
169
170 /* identifiers of a location */
171 EXTRACTOR_METATYPE_GPS_LATITUDE_REF = 37,
172 EXTRACTOR_METATYPE_GPS_LATITUDE = 38,
173 EXTRACTOR_METATYPE_GPS_LONGITUDE_REF = 39,
174 EXTRACTOR_METATYPE_GPS_LONGITUDE = 40,
175 EXTRACTOR_METATYPE_LOCATION_CITY = 41,
176 EXTRACTOR_METATYPE_LOCATION_SUBLOCATION = 42,
177 EXTRACTOR_METATYPE_LOCATION_COUNTRY = 43,
178 EXTRACTOR_METATYPE_LOCATION_COUNTRY_CODE = 44,
179
180 /* generic attributes */
181 EXTRACTOR_METATYPE_UNKNOWN = 45,
182 EXTRACTOR_METATYPE_DESCRIPTION = 46,
183 EXTRACTOR_METATYPE_COPYRIGHT = 47,
184 EXTRACTOR_METATYPE_RIGHTS = 48,
185 EXTRACTOR_METATYPE_KEYWORDS = 49,
186 EXTRACTOR_METATYPE_ABSTRACT = 50,
187 EXTRACTOR_METATYPE_SUMMARY = 51,
188 EXTRACTOR_METATYPE_SUBJECT = 52,
189 EXTRACTOR_METATYPE_CREATOR = 53,
190 EXTRACTOR_METATYPE_FORMAT = 54,
191 EXTRACTOR_METATYPE_FORMAT_VERSION = 55,
192
193 /* processing history */
194 EXTRACTOR_METATYPE_CREATED_BY_SOFTWARE = 56,
195 EXTRACTOR_METATYPE_UNKNOWN_DATE = 57,
196 EXTRACTOR_METATYPE_CREATION_DATE = 58,
197 EXTRACTOR_METATYPE_MODIFICATION_DATE = 59,
198 EXTRACTOR_METATYPE_LAST_PRINTED = 60,
199 EXTRACTOR_METATYPE_LAST_SAVED_BY = 61,
200 EXTRACTOR_METATYPE_TOTAL_EDITING_TIME = 62,
201 EXTRACTOR_METATYPE_EDITING_CYCLES = 63,
202 EXTRACTOR_METATYPE_MODIFIED_BY_SOFTWARE = 64,
203 EXTRACTOR_METATYPE_REVISION_HISTORY = 65,
204
205 EXTRACTOR_METATYPE_EMBEDDED_FILE_SIZE = 66,
206 EXTRACTOR_METATYPE_FINDER_FILE_TYPE = 67,
207 EXTRACTOR_METATYPE_FINDER_FILE_CREATOR = 68,
208
209 /* software package specifics (deb, rpm, tgz, elf) */
210 EXTRACTOR_METATYPE_PACKAGE_NAME = 69,
211 EXTRACTOR_METATYPE_PACKAGE_VERSION = 70,
212 EXTRACTOR_METATYPE_SECTION = 71,
213 EXTRACTOR_METATYPE_UPLOAD_PRIORITY = 72,
214 EXTRACTOR_METATYPE_PACKAGE_DEPENDENCY = 73,
215 EXTRACTOR_METATYPE_PACKAGE_CONFLICTS = 74,
216 EXTRACTOR_METATYPE_PACKAGE_REPLACES = 75,
217 EXTRACTOR_METATYPE_PACKAGE_PROVIDES = 76,
218 EXTRACTOR_METATYPE_PACKAGE_RECOMMENDS = 77,
219 EXTRACTOR_METATYPE_PACKAGE_SUGGESTS = 78,
220 EXTRACTOR_METATYPE_PACKAGE_MAINTAINER = 79,
221 EXTRACTOR_METATYPE_PACKAGE_INSTALLED_SIZE = 80,
222 EXTRACTOR_METATYPE_PACKAGE_SOURCE = 81,
223 EXTRACTOR_METATYPE_PACKAGE_ESSENTIAL = 82,
224 EXTRACTOR_METATYPE_TARGET_ARCHITECTURE = 83,
225 EXTRACTOR_METATYPE_PACKAGE_PRE_DEPENDENCY = 84,
226 EXTRACTOR_METATYPE_LICENSE = 85,
227 EXTRACTOR_METATYPE_PACKAGE_DISTRIBUTION = 86,
228 EXTRACTOR_METATYPE_BUILDHOST = 87,
229 EXTRACTOR_METATYPE_VENDOR = 88,
230 EXTRACTOR_METATYPE_TARGET_OS = 89,
231 EXTRACTOR_METATYPE_SOFTWARE_VERSION = 90,
232 EXTRACTOR_METATYPE_TARGET_PLATFORM = 91,
233 EXTRACTOR_METATYPE_RESOURCE_TYPE = 92,
234 EXTRACTOR_METATYPE_LIBRARY_SEARCH_PATH = 93,
235 EXTRACTOR_METATYPE_LIBRARY_DEPENDENCY = 94,
236
237 /* photography specifics */
238 EXTRACTOR_METATYPE_CAMERA_MAKE = 95,
239 EXTRACTOR_METATYPE_CAMERA_MODEL = 96,
240 EXTRACTOR_METATYPE_EXPOSURE = 97,
241 EXTRACTOR_METATYPE_APERTURE = 98,
242 EXTRACTOR_METATYPE_EXPOSURE_BIAS = 99,
243 EXTRACTOR_METATYPE_FLASH = 100,
244 EXTRACTOR_METATYPE_FLASH_BIAS = 101,
245 EXTRACTOR_METATYPE_FOCAL_LENGTH = 102,
246 EXTRACTOR_METATYPE_FOCAL_LENGTH_35MM = 103,
247 EXTRACTOR_METATYPE_ISO_SPEED = 104,
248 EXTRACTOR_METATYPE_EXPOSURE_MODE = 105,
249 EXTRACTOR_METATYPE_METERING_MODE = 106,
250 EXTRACTOR_METATYPE_MACRO_MODE = 107,
251 EXTRACTOR_METATYPE_IMAGE_QUALITY = 108,
252 EXTRACTOR_METATYPE_WHITE_BALANCE = 109,
253 EXTRACTOR_METATYPE_ORIENTATION = 110,
254 EXTRACTOR_METATYPE_MAGNIFICATION = 111,
255
256 /* image specifics */
257 EXTRACTOR_METATYPE_IMAGE_DIMENSIONS = 112,
258 EXTRACTOR_METATYPE_PRODUCED_BY_SOFTWARE = 113,
259 EXTRACTOR_METATYPE_THUMBNAIL = 114,
260 EXTRACTOR_METATYPE_IMAGE_RESOLUTION = 115,
261 EXTRACTOR_METATYPE_SOURCE = 116,
262
263 /* (text) document processing specifics */
264 EXTRACTOR_METATYPE_CHARACTER_SET = 117,
265 EXTRACTOR_METATYPE_LINE_COUNT = 118,
266 EXTRACTOR_METATYPE_PARAGRAPH_COUNT = 119,
267 EXTRACTOR_METATYPE_WORD_COUNT = 120,
268 EXTRACTOR_METATYPE_CHARACTER_COUNT = 121,
269 EXTRACTOR_METATYPE_PAGE_ORIENTATION = 122,
270 EXTRACTOR_METATYPE_PAPER_SIZE = 123,
271 EXTRACTOR_METATYPE_TEMPLATE = 124,
272 EXTRACTOR_METATYPE_COMPANY = 125,
273 EXTRACTOR_METATYPE_MANAGER = 126,
274 EXTRACTOR_METATYPE_REVISION_NUMBER = 127,
275
276 /* music / video specifics */
277 EXTRACTOR_METATYPE_DURATION = 128,
278 EXTRACTOR_METATYPE_ALBUM = 129,
279 EXTRACTOR_METATYPE_ARTIST = 130,
280 EXTRACTOR_METATYPE_GENRE = 131,
281 EXTRACTOR_METATYPE_TRACK_NUMBER = 132,
282 EXTRACTOR_METATYPE_DISC_NUMBER = 133,
283 EXTRACTOR_METATYPE_PERFORMER = 134,
284 EXTRACTOR_METATYPE_CONTACT_INFORMATION = 135,
285 EXTRACTOR_METATYPE_SONG_VERSION = 136,
286 EXTRACTOR_METATYPE_PICTURE = 137,
287 EXTRACTOR_METATYPE_COVER_PICTURE = 138,
288 EXTRACTOR_METATYPE_CONTRIBUTOR_PICTURE = 139,
289 EXTRACTOR_METATYPE_EVENT_PICTURE = 140,
290 EXTRACTOR_METATYPE_LOGO = 141,
291 EXTRACTOR_METATYPE_BROADCAST_TELEVISION_SYSTEM = 142,
292 EXTRACTOR_METATYPE_SOURCE_DEVICE = 143,
293 EXTRACTOR_METATYPE_DISCLAIMER = 144,
294 EXTRACTOR_METATYPE_WARNING = 145,
295 EXTRACTOR_METATYPE_PAGE_ORDER = 146,
296 EXTRACTOR_METATYPE_WRITER = 147,
297 EXTRACTOR_METATYPE_PRODUCT_VERSION = 148,
298 EXTRACTOR_METATYPE_CONTRIBUTOR_NAME = 149,
299 EXTRACTOR_METATYPE_MOVIE_DIRECTOR = 150,
300 EXTRACTOR_METATYPE_NETWORK_NAME = 151,
301 EXTRACTOR_METATYPE_SHOW_NAME = 152,
302 EXTRACTOR_METATYPE_CHAPTER_NAME = 153,
303 EXTRACTOR_METATYPE_SONG_COUNT = 154,
304 EXTRACTOR_METATYPE_STARTING_SONG = 155,
305 EXTRACTOR_METATYPE_PLAY_COUNTER = 156,
306 EXTRACTOR_METATYPE_CONDUCTOR = 157,
307 EXTRACTOR_METATYPE_INTERPRETATION = 158,
308 EXTRACTOR_METATYPE_COMPOSER = 159,
309 EXTRACTOR_METATYPE_BEATS_PER_MINUTE = 160,
310 EXTRACTOR_METATYPE_ENCODED_BY = 161,
311 EXTRACTOR_METATYPE_ORIGINAL_TITLE = 162,
312 EXTRACTOR_METATYPE_ORIGINAL_ARTIST = 163,
313 EXTRACTOR_METATYPE_ORIGINAL_WRITER = 164,
314 EXTRACTOR_METATYPE_ORIGINAL_RELEASE_YEAR = 165,
315 EXTRACTOR_METATYPE_ORIGINAL_PERFORMER = 166,
316 EXTRACTOR_METATYPE_LYRICS = 167,
317 EXTRACTOR_METATYPE_POPULARITY_METER = 168,
318 EXTRACTOR_METATYPE_LICENSEE = 169,
319 EXTRACTOR_METATYPE_MUSICIAN_CREDITS_LIST = 170,
320 EXTRACTOR_METATYPE_MOOD = 171,
321 EXTRACTOR_METATYPE_SUBTITLE = 172,
322
323 /* GNUnet specific values (never extracted) */
324 EXTRACTOR_METATYPE_GNUNET_DISPLAY_TYPE = 173,
325 EXTRACTOR_METATYPE_GNUNET_FULL_DATA = 174,
326 EXTRACTOR_METATYPE_RATING = 175,
327 EXTRACTOR_METATYPE_ORGANIZATION = 176,
328 EXTRACTOR_METATYPE_RIPPER = 177,
329 EXTRACTOR_METATYPE_PRODUCER = 178,
330 EXTRACTOR_METATYPE_GROUP = 179,
331 EXTRACTOR_METATYPE_GNUNET_ORIGINAL_FILENAME = 180,
332
333 EXTRACTOR_METATYPE_DISC_COUNT = 181,
334
335 EXTRACTOR_METATYPE_CODEC = 182,
336 EXTRACTOR_METATYPE_VIDEO_CODEC = 183,
337 EXTRACTOR_METATYPE_AUDIO_CODEC = 184,
338 EXTRACTOR_METATYPE_SUBTITLE_CODEC = 185,
339
340 EXTRACTOR_METATYPE_CONTAINER_FORMAT = 186,
341
342 EXTRACTOR_METATYPE_BITRATE = 187,
343 EXTRACTOR_METATYPE_NOMINAL_BITRATE = 188,
344 EXTRACTOR_METATYPE_MINIMUM_BITRATE = 189,
345 EXTRACTOR_METATYPE_MAXIMUM_BITRATE = 190,
346
347 EXTRACTOR_METATYPE_SERIAL = 191,
348
349 EXTRACTOR_METATYPE_ENCODER = 192,
350 EXTRACTOR_METATYPE_ENCODER_VERSION = 193,
351
352 EXTRACTOR_METATYPE_TRACK_GAIN = 194,
353 EXTRACTOR_METATYPE_TRACK_PEAK = 195,
354 EXTRACTOR_METATYPE_ALBUM_GAIN = 196,
355 EXTRACTOR_METATYPE_ALBUM_PEAK = 197,
356 EXTRACTOR_METATYPE_REFERENCE_LEVEL = 198,
357
358 EXTRACTOR_METATYPE_LOCATION_NAME = 199,
359 EXTRACTOR_METATYPE_LOCATION_ELEVATION = 200,
360 EXTRACTOR_METATYPE_LOCATION_HORIZONTAL_ERROR = 201,
361 EXTRACTOR_METATYPE_LOCATION_MOVEMENT_SPEED = 202,
362 EXTRACTOR_METATYPE_LOCATION_MOVEMENT_DIRECTION = 203,
363 EXTRACTOR_METATYPE_LOCATION_CAPTURE_DIRECTION = 204,
364
365 EXTRACTOR_METATYPE_SHOW_EPISODE_NUMBER = 205,
366 EXTRACTOR_METATYPE_SHOW_SEASON_NUMBER = 206,
367
368 EXTRACTOR_METATYPE_GROUPING = 207,
369
370 EXTRACTOR_METATYPE_DEVICE_MANUFACTURER = 208,
371 EXTRACTOR_METATYPE_DEVICE_MODEL = 209,
372
373 EXTRACTOR_METATYPE_AUDIO_LANGUAGE = 210,
374 EXTRACTOR_METATYPE_CHANNELS = 211,
375 EXTRACTOR_METATYPE_SAMPLE_RATE = 212,
376 EXTRACTOR_METATYPE_AUDIO_DEPTH = 213,
377 EXTRACTOR_METATYPE_AUDIO_BITRATE = 214,
378 EXTRACTOR_METATYPE_MAXIMUM_AUDIO_BITRATE = 215,
379
380 EXTRACTOR_METATYPE_VIDEO_DIMENSIONS = 216,
381 EXTRACTOR_METATYPE_VIDEO_DEPTH = 217,
382 EXTRACTOR_METATYPE_FRAME_RATE = 218,
383 EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO = 219,
384 EXTRACTOR_METATYPE_VIDEO_BITRATE = 220,
385 EXTRACTOR_METATYPE_MAXIMUM_VIDEO_BITRATE = 221,
386
387 EXTRACTOR_METATYPE_SUBTITLE_LANGUAGE = 222,
388 EXTRACTOR_METATYPE_VIDEO_LANGUAGE = 223,
389
390 EXTRACTOR_METATYPE_TOC = 224,
391
392 EXTRACTOR_METATYPE_VIDEO_DURATION = 225,
393 EXTRACTOR_METATYPE_AUDIO_DURATION = 226,
394 EXTRACTOR_METATYPE_SUBTITLE_DURATION = 227,
395
396 EXTRACTOR_METATYPE_AUDIO_PREVIEW = 228,
397
398 EXTRACTOR_METATYPE_NARINFO = 229,
399 EXTRACTOR_METATYPE_NAR = 230,
400
401 EXTRACTOR_METATYPE_LAST = 231
402 };
403
404 /** @} */ /* end of meta data types */
405
406 /**
407 * Get the textual name of the keyword.
408 *
409 * @param type meta type to get a UTF-8 string for
410 * @return NULL if the type is not known, otherwise
411 * an English (locale: C) string describing the type;
412 * translate using `dgettext ("libextractor", rval)`
413 * @ingroup types
414 */
415 _EXTRACTOR_EXTERN const char *
416 EXTRACTOR_metatype_to_string (enum EXTRACTOR_MetaType type);
417
418
419 /**
420 * Get a long description for the meta type.
421 *
422 * @param type meta type to get a UTF-8 description for
423 * @return NULL if the type is not known, otherwise
424 * an English (locale: C) string describing the type;
425 * translate using `dgettext ("libextractor", rval)`
426 * @ingroup types
427 */
428 _EXTRACTOR_EXTERN const char *
429 EXTRACTOR_metatype_to_description (enum EXTRACTOR_MetaType type);
430
431
432 /**
433 * Return the highest type number, exclusive as in [0,max).
434 *
435 * @return highest legal metatype number for this version of libextractor
436 * @ingroup types
437 */
438 _EXTRACTOR_EXTERN enum EXTRACTOR_MetaType
439 EXTRACTOR_metatype_get_max (void);
440
441
442 /**
443 * Type of a function that libextractor calls for each
444 * meta data item found.
445 *
446 * @param cls closure (user-defined)
447 * @param plugin_name name of the plugin that produced this value;
448 * special values can be used (i.e. '<zlib>' for zlib being
449 * used in the main libextractor library and yielding
450 * meta data).
451 * @param type libextractor-type describing the meta data
452 * @param format basic format information about @a data
453 * @param data_mime_type mime-type of @a data (not of the original file);
454 * can be NULL (if mime-type is not known)
455 * @param data actual meta-data found
456 * @param data_len number of bytes in @a data
457 * @return 0 to continue extracting, 1 to abort
458 */
459 typedef int
460 (*EXTRACTOR_MetaDataProcessor) (void *cls,
461 const char *plugin_name,
462 enum EXTRACTOR_MetaType type,
463 enum EXTRACTOR_MetaFormat format,
464 const char *data_mime_type,
465 const char *data,
466 size_t data_len);
467
468
469 /**
470 * Context provided for plugins that perform meta data extraction.
471 */
472 struct EXTRACTOR_ExtractContext
473 {
474
475 /**
476 * Closure argument to pass to all callbacks.
477 */
478 void *cls;
479
480 /**
481 * Configuration string for the plugin.
482 */
483 const char *config;
484
485 /**
486 * Obtain a pointer to up to @a size bytes of data from the file to process.
487 *
488 * @param cls the @e cls member of this struct
489 * @param data pointer to set to the file data, set to NULL on error
490 * @param size maximum number of bytes requested
491 * @return number of bytes now available in @a data (can be smaller than @a size),
492 * -1 on error
493 */
494 ssize_t (*read) (void *cls,
495 void **data,
496 size_t size);
497
498
499 /**
500 * Seek in the file. Use `SEEK_CUR` for @a whence and @a pos of 0 to
501 * obtain the current position in the file.
502 *
503 * @param cls the @e cls member of this struct
504 * @param pos position to seek (see 'man lseek')
505 * @param whence how to see (absolute to start, relative, absolute to end)
506 * @return new absolute position, -1 on error (i.e. desired position
507 * does not exist)
508 */
509 int64_t (*seek) (void *cls,
510 int64_t pos,
511 int whence);
512
513
514 /**
515 * Determine the overall size of the file.
516 *
517 * @param cls the @a cls member of this struct
518 * @return overall file size, `UINT64_MAX` on error (i.e. IPC failure)
519 */
520 uint64_t (*get_size) (void *cls);
521
522 /**
523 * Function to call on extracted data.
524 */
525 EXTRACTOR_MetaDataProcessor proc;
526
527 };
528
529
530 /**
531 * Signature of the extract method that each plugin
532 * must provide.
533 *
534 * @param ec extraction context provided to the plugin
535 */
536 typedef void
537 (*EXTRACTOR_extract_method) (struct EXTRACTOR_ExtractContext *ec);
538
539
540 /**
541 * Linked list of extractor plugins. An application builds this list
542 * by telling libextractor to load various keyword-extraction
543 * plugins. Libraries can also be unloaded (removed from this list,
544 * see #EXTRACTOR_plugin_remove).
545 */
546 struct EXTRACTOR_PluginList;
547
548
549 /**
550 * Load the default set of plugins. The default can be changed
551 * by setting the LIBEXTRACTOR_LIBRARIES environment variable;
552 * If it is set to "env", then this function will return
553 * #EXTRACTOR_plugin_add_config (NULL, env, flags).
554 *
555 * If LIBEXTRACTOR_LIBRARIES is not set, the function will attempt
556 * to locate the installed plugins and load all of them.
557 * The directory where the code will search for plugins is typically
558 * automatically determined; it can be specified explicitly using the
559 * "LIBEXTRACTOR_PREFIX" environment variable.
560 *
561 * This environment variable must be set to the precise directory with
562 * the plugins (i.e. "/usr/lib/libextractor", not "/usr"). Note that
563 * setting the environment variable will disable all of the methods
564 * that are typically used to determine the location of plugins.
565 * Multiple paths can be specified using ':' to separate them.
566 *
567 * @param flags options for all of the plugins loaded
568 * @return the default set of plugins, NULL if no plugins were found
569 */
570 _EXTRACTOR_EXTERN struct EXTRACTOR_PluginList *
571 EXTRACTOR_plugin_add_defaults (enum EXTRACTOR_Options flags);
572
573
574 /**
575 * Add a library for keyword extraction.
576 *
577 * @param prev the previous list of libraries, may be NULL
578 * @param library the name of the library (short handle, i.e. "mime")
579 * @param options options to give to the library
580 * @param flags options to use
581 * @return the new list of libraries, equal to prev iff an error occured
582 */
583 _EXTRACTOR_EXTERN struct EXTRACTOR_PluginList *
584 EXTRACTOR_plugin_add (struct EXTRACTOR_PluginList *prev,
585 const char *library,
586 const char *options,
587 enum EXTRACTOR_Options flags);
588
589
590 /**
591 * Load multiple libraries as specified by the user.
592 *
593 * @param config a string given by the user that defines which
594 * libraries should be loaded. Has the format
595 * "[[-]LIBRARYNAME[(options)][:[-]LIBRARYNAME[(options)]]]*".
596 * For example, 'mp3:ogg' loads the
597 * mp3 and the ogg plugins. The '-' before the LIBRARYNAME
598 * indicates that the library should be removed from
599 * the library list.
600 * @param prev the previous list of libraries, may be NULL
601 * @param flags options to use
602 * @return the new list of libraries, equal to prev iff an error occured
603 * or if config was empty (or NULL).
604 */
605 _EXTRACTOR_EXTERN struct EXTRACTOR_PluginList *
606 EXTRACTOR_plugin_add_config (struct EXTRACTOR_PluginList *prev,
607 const char *config,
608 enum EXTRACTOR_Options flags);
609
610
611 /**
612 * Remove a plugin from a list.
613 *
614 * @param prev the current list of plugins
615 * @param library the name of the plugin to remove (short handle)
616 * @return the reduced list, unchanged if the plugin was not loaded
617 */
618 _EXTRACTOR_EXTERN struct EXTRACTOR_PluginList *
619 EXTRACTOR_plugin_remove (struct EXTRACTOR_PluginList *prev,
620 const char *library);
621
622
623 /**
624 * Remove all plugins from the given list (destroys the list).
625 *
626 * @param plugin the list of plugins
627 */
628 _EXTRACTOR_EXTERN void
629 EXTRACTOR_plugin_remove_all (struct EXTRACTOR_PluginList *plugins);
630
631
632 /**
633 * Extract keywords from a file using the given set of plugins.
634 *
635 * @param plugins the list of plugins to use
636 * @param filename the name of the file, can be NULL if @a data is not NULL
637 * @param data data of the file in memory, can be NULL (in which
638 * case libextractor will open file) if filename is not NULL
639 * @param size number of bytes in @a data, ignored if @a data is NULL
640 * @param proc function to call for each meta data item found
641 * @param proc_cls cls argument to @a proc
642 */
643 _EXTRACTOR_EXTERN void
644 EXTRACTOR_extract (struct EXTRACTOR_PluginList *plugins,
645 const char *filename,
646 const void *data,
647 size_t size,
648 EXTRACTOR_MetaDataProcessor proc,
649 void *proc_cls);
650
651
652 /**
653 * Simple #EXTRACTOR_MetaDataProcessor implementation that simply
654 * prints the extracted meta data to the given file. Only prints
655 * those keywords that are in UTF-8 format.
656 *
657 * @param handle the file to write to (`stdout`, `stderr`), must NOT be NULL,
658 * must be of type `FILE *`.
659 * @param plugin_name name of the plugin that produced this value
660 * @param type libextractor-type describing the meta data
661 * @param format basic format information about data
662 * @param data_mime_type mime-type of @a data (not of the original file);
663 * can be NULL (if mime-type is not known)
664 * @param data actual meta-data found
665 * @param data_len number of bytes in @a data
666 * @return non-zero if printing failed, otherwise 0.
667 */
668 _EXTRACTOR_EXTERN int
669 EXTRACTOR_meta_data_print (void *handle,
670 const char *plugin_name,
671 enum EXTRACTOR_MetaType type,
672 enum EXTRACTOR_MetaFormat format,
673 const char *data_mime_type,
674 const char *data,
675 size_t data_len);
676
677
678 #if 0 /* keep Emacsens' auto-indent happy */
679 {
680 #endif
681 #ifdef __cplusplus
682 }
683 #endif
684
685 #endif