gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r23667 - in Extractor-docs/WWW: . manual


From: gnunet
Subject: [GNUnet-SVN] r23667 - in Extractor-docs/WWW: . manual
Date: Thu, 6 Sep 2012 12:54:46 +0200

Author: grothoff
Date: 2012-09-06 12:54:46 +0200 (Thu, 06 Sep 2012)
New Revision: 23667

Added:
   Extractor-docs/WWW/manual/
   Extractor-docs/WWW/manual/extractor.html
   Extractor-docs/WWW/manual/extractor.pdf
Removed:
   Extractor-docs/WWW/bluewhite.css
   Extractor-docs/WWW/documentation.html
   Extractor-docs/WWW/download.html
   Extractor-docs/WWW/extractor.html
   Extractor-docs/WWW/extractor.pdf
Modified:
   Extractor-docs/WWW/index.html
Log:
updating website

Deleted: Extractor-docs/WWW/bluewhite.css
===================================================================
--- Extractor-docs/WWW/bluewhite.css    2012-09-06 07:53:34 UTC (rev 23666)
+++ Extractor-docs/WWW/bluewhite.css    2012-09-06 10:54:46 UTC (rev 23667)
@@ -1,10 +0,0 @@
-.f0:link,.f0:visited{color:#ffffff}
-.f1:link,.f1:visited{color:#101010}
-a:link,a:visited{color:#336699}
-ul,ol,li,div,td,th,address,blockquote,b,i,dl,dd,dt
-     { font-family:"Arial","sans-serif";color:#000000;}
-b.head{font-size:2.5ex;background-color:#336699;color:#FFFFFF;width=100%;border-style:none;border-width:none;padding:0cm;align:center;text-align:center;}
-h2{font-size:2.5ex;background-color:#efefef;color:#000000;width:100%;border-style:none;border-width:thin;padding:0cm;align:center;text-align:center;}
-body{background-color:#FFFFFF;color:#000000;}
-td.head{background-color:#336699;align:center;text-align:center;}
-th{background-color:#efefef;}
\ No newline at end of file

Deleted: Extractor-docs/WWW/documentation.html
===================================================================
--- Extractor-docs/WWW/documentation.html       2012-09-06 07:53:34 UTC (rev 
23666)
+++ Extractor-docs/WWW/documentation.html       2012-09-06 10:54:46 UTC (rev 
23667)
@@ -1,287 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
-<html><head>
-
-<meta http-equiv="Content-Type" content="text/html; 
charset=UTF-8"><title>libextractor - Documentation</title>
-<meta name="content-language" content="en">
-<meta name="language" content="en">
-<meta name="description" content="Documentation for libextractor, a simple 
library for meta-data extraction.">
-<meta name="author" content="Vids Samanta and Christian Grothoff">
-<meta name="rights" content="(C) 2002-2012 by Vids Samanta and Christian 
Grothoff">
-<meta name="keywords" content="keyword, extraction, mp3, html, images, jpeg, 
gif, ps, mime, doc, xls, sxw, sdw, ogg, dvi, deb, zip, qt, asf, mpeg, elf, 
real, png, ppt, id3, id3v2">
-<meta name="robots" content="index,follow">
-<meta name="revisit-after" content="28 days">
-<meta name="content-language" content="en">
-<meta name="language" content="en">
-<meta http-equiv="expires" content="43200">
-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
-<link rel="SHORTCUT ICON" href="http://gnunet.org/libextractor/favicon.ico";>
-</head>
-<body>
-<table width="99%" border="0" cellpadding="0" cellspacing="0">
-<tbody>
-<tr><td colspan="2" width="99%" bgcolor="#99bbff" align="center">GNU 
libextractor - Documentation</td></tr>
-<tr><td valign="top">
-<table width="15%" border="0" cellpadding="2" cellspacing="3">
-<tbody><tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="index.html">Home</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="download.html">Download</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="documentation.html">Documentation</a></th></tr>
-<tr><td bgcolor="efefef"><a href="#copyright">Copyright</a></td></tr><tr><td 
bgcolor="efefef"><a href="#install">Installation</a></td></tr>
-<tr><td bgcolor="efefef"><a href="#usage">Usage</a></td></tr><tr><td 
bgcolor="efefef"><a href="#plugins">Plugins</a></td></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a href="extractor.html">Reference 
Manual</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="http://freshmeat.net/projects/libextractor/";>Freshmeat Page</a></th></tr>
-</tbody>
-</table>
-</td>
-
-<td valign="top"><h2>Further documentation</h2>
-This documentation covers the major aspects of GNU libextractor in brief.
-More details can be found in the GNU libextractor manual (<a 
href="extractor.html">html</a>, <a href="extractor.pdf">pdf</a>).
-The man pages for <a href="man/extract.html">extract</a> and <a 
href="man/libextractor.html">libextractor</a> are also on-line.
-<br>
-An article describing GNU libextractor was published in the <a 
href="http://www.linuxjournal.com/";>LinuxJournal</a> and is available <a 
href="http://www.linuxjournal.com/article/7552";>here</a>.  That article 
describes the API for versions 0.0.0 to 0.5.23 and not the more recent 0.6.x 
API.
-
-<a name="copyright"></a>
-<h2>Copyright and Contributions</h2>
-GNU libextractor is released under the GNU General Public License.
-All contributions must thus be put under the <a 
href="http://www.gnu.org/copyleft/gpl.html";>GNU Public License (GPL)</a> or a 
compatible license.
-
-<h3>Mailing lists</h3>
-
-<p>GNU libextractor has a mailing list for discussion of anything related to 
the project:
-<a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.</p>
-
-<p>To subscribe to this or any GNU mailing lists, please send an empty
-mail with a Subject: header of just <tt>subscribe</tt> to the relevant
--request list.  For example, to subscribe yourself to the GNU
-libextractor list, you would send mail to <a
-href="mailto:address@hidden";
->&lt;address@hidden&gt;</a>.
-Or you can use the <a
-href="http://lists.gnu.org/mailman/listinfo/libextractor";>mailing list web 
interface</a>.</p>
-
-
-<h3>Getting involved</h3>
-
-<p>
-Development of GNU libextractor, and GNU in general, is a volunteer
-effort, and you can contribute.  For information, please
-read <a href="/help/">How to help GNU</a>.  If you would like to get
-involved, it is a good idea to join the mailing list (see above).
-</p>
-
-<dl>
-<dt>Development</dt>
-
-<dd>
-Development sources can be found in our Subversion repository at
-<a 
href="https://gnunet.org/svn/Extractor";>https://gnunet.org/svn/Extractor/</a>.
-Our bugtracker is at <a 
href="https://gnunet.org/bugs/";>https://gnunet.org/bugs/</a>.
-</dd>
-
-<dt>Translating GNU libextractor</dt>
-
-<dd>To translate GNU libextractor's messages into other languages, please see 
the <a
-href="http://translationproject.org/domain/libextractor.html";>Translation 
Project page for libextractor</a>.
-If you have a new translation of the message strings,
-or updates to the existing strings, please have the changes made in this
-repository.  Only translations from this site will be incorporated into
-libextractor.
-For more information, see the <a 
href="http://translationproject.org/html/welcome.html";>Translation 
Project</a>.</dd>
-
-</dl>
-
-<a name="install"></a>
-<h2>Installation</h2>
-<p>
-The simplest way to install GNU libextractor is to use one of the binary
-packages which are available online for many distributions.  Note that
-under Debian, the extract tool is in a separate
-package <tt>extract</tt> and headers required to compile other
-applications against libextractor are in <tt>libextractor-dev</tt>.
-Thus, under Debian, you should use:
-<pre>
-# apt-get install libextractor-dev extract
-</pre>
-Compiling by hand follows the usual sequence:
-<pre>
-$ tar xzvf libextractor.x.y.z.tar.gz
-$ cd libextractor.x.y.z
-$ ./configure
-$ make
-# make install
-</pre>
-Note that you need various dependencies (read <tt>README</tt>
-for an up-to-date list) in order to compile all of the plugins.
-</p>
-
-
-<a name="usage"></a>
-<h2>Using the extract tool</h2>
-
-<p>
-After installing GNU libextractor, the extract tool can be used to obtain
-meta data from documents.  By default, the extract tool uses the
-canonical set of plugins, which consists of all format-specific
-plugins supported by the current version of libextractor together with
-the mime-type detection plugin.  If you are a user
-of <a 
href="http://www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html";>BibTeX</a>
-the option <tt>-b</tt> is likely to come in handy to automatically
-create bibtex entries from documents that have been properly equipped
-with meta-data (if available).
-</p>
-<p>
-Further options are described in the extract manpage 
(<tt>man&nbsp;1&nbsp;extract</tt>).
-</p>
-<p>
-</p>
-
-<h3>Examples:</h3>
-<pre>
-$ extract libextractor-0.1.3-1.src.rpm
-Keywords for file libextractor-0.1.3-1.src.rpm:
-os - linux
-resource-identifier - http://ovmj.org/libextractor/
-group -System Environment/Libraries
-license - LGPL
-copyright - LGPL
-size - 251545
-build-host - wedge.cs.purdue.edu
-creation date - Wed Dec 25 07:50:07 2002
-description - libextractor is a simple library...
-summary - keyword extraction library
-release - 1
-version - 0.1.3
-title - libextractor
-unknown - SOURCE RPM 3.0
-mimetype - application/x-rpm
-</pre>
-<pre>
-$ extract extractor_logo.png
-Keywords for file extractor_logo.png:
-image dimensions - 272x188
-thumbnail - (binary, 5932 bytes)
-image dimensions - 272x188
-thumbnail - (binary, 6427 bytes)
-image dimensions - 272x188
-thumbnail - (binary, 6427 bytes)
-mimetype - image/png
-mimetype - image/png
-image dimensions - 272x188
-keywords - The libextractor logo
-</pre>
-
-<h2>Using the GNU libextractor library</h2>
-<p>
-The following listing shows the code of a minimalistic program that
-uses GNU libextractor.  Compiling the fragment requires passing the
-option <tt>-lextractor</tt> to gcc.  For details and additional
-functions for loading plugins and manipulating the keyword list, see
-the libextractor manpage (<tt>man&nbsp;3&nbsp;libextractor</tt>).
-Java programmers should note that a Java class that uses JNI to
-communicate with libextractor is also available.  Python programmers
-will find that libextractor (since 0.5.0) can also be used from
-Python, just <tt>import Extractor</tt>.
-<br>
-<pre>
-#include <extractor.h>
-
-int main (int argc, char * argv[]) 
-{
-  struct EXTRACTOR_PluginList *plugins
-    = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
-  EXTRACTOR_extract (plugins, argv[1],
-                     NULL, 0, 
-                     &amp;EXTRACTOR_meta_data_print, stdout);
-  EXTRACTOR_plugin_remove_all (plugins);
-  return 0;
-}
-</pre>
-</p>
-
-<a name="newplugins"></a>
-<h2>Writing new Plugins</h2>
-<p>
-The most complicated thing when writing a new plugin for GNU libextractor is 
the writing of the actual parser for a specific format.
-Nevertheless, the basic pattern is always the same.
-The plugin library must be called <tt>libextractor_XXX.so</tt> where XXX 
denotes the file format supported by the plugin and
-must be placed in the plugin directory (typically 
<tt>$PREFIX/lib/libextractor/</tt>).
-The library must export a method <tt>EXTRACTOR_XXX_extract_method</tt> with 
the following signature:
-<pre>
-void
-EXTRACTOR_XXX_extract_method (struct EXTRACTOR_ExtractContext *ec);
-</pre>
-</p>
-<p>
-<tt>ec</tt> provides a callback to invoke with meta data as well as
-functions for reading data from the file that is being processed.
-Most plugins start by reading the first bytes of the file and checking that
-that the header of data matches the specific format.
-The <tt>extract</tt> function is expected to call <tt>ec-&gt;proc</tt> with 
each
-meta data item found.  <tt>ec-&gt;cls</tt> must be passed as the first
-argument to <tt>proc</tt> and other function invoked from within <tt>ec</tt>.
-Finally, <tt>ec-&gt;config</tt> is an arbitrary string of options that the 
plugin is
-free to interpret. Most plugins ignore <tt>config</tt>.
-</p>
-<p>
-If the meta data extracted is a string, it is supposed to be converted
-into the UTF-8 character set by the plugin.  However, in cases where
-the character encoding used in the document is unknown, no conversion
-should be done.  Binary meta data can also be extracted.  Plugins
-indicate the format of the meta data using the <tt>format</tt>
-argument to <tt>proc</tt>.  Supported formats are UTF-8 strings, C
-strings (for strings of unknown encoding) and binary data.  In
-addition to this rough categorization, the plugin is also supposed to
-indicate the mime type of the meta data.  For strings, that mime type
-is most often <tt>text/plain</tt>.  Finally, the plugin must specify
-the meta data type.  Common meta data types are &quot;author&quot;,
-&quot;title&quot; and &quot;mime-type&quot;.  The full signature of
-the &quot;proc&quot; callback is:
-</p>
-<pre>
-typedef int (*EXTRACTOR_MetaDataProcessor)(void *cls,
-                                           const char *plugin_name,
-                                           enum EXTRACTOR_MetaType type,
-                                           enum EXTRACTOR_MetaFormat format,
-                                           const char *data_mime_type,
-                                           const char *data,
-                                           size_t data_len);
-</pre>
-<p>
-If &quot;proc&quot; returns non-zero, the plugin should abort 
-processing the current file and return.  
-</p>
-</td>
-</tr>
-</tbody>
-</table>
-<hr><a href="mailto:address@hidden";>address@hidden</a>
-<p>
-
-
-
-<div id="translations">
-<h4>Translations of this page</h4>
-
-<!-- Please keep this list alphabetical by language code.
-     Comment what the language is for each type, i.e. de is German.
-     Write the language name in its own language (Deutsch) in the text.
-     If you add a new language here, please
-     advise address@hidden and add it to
-      - /home/www/html/server/standards/README.translations.html
-      - one of the lists under the section "Translations Underway"
-      - if there is a translation team, you also have to add an alias
-      to mail.gnu.org:/com/mailer/aliases
-     Please also check you have the language code right; see:
-     http://www.loc.gov/standards/iso639-2/php/code_list.php
-     If the 2-letter ISO 639-1 code is not available,
-     use the 3-letter ISO 639-2.
-     Please use W3C normative character entities. -->
-
-<ul class="translations-list">
-<!-- English -->
-<li><a 
href="/software/libextractor/documentation.html">English</a>&nbsp;[en]</li>
-</ul>
-</div>
-
-</body>
-</html>

Deleted: Extractor-docs/WWW/download.html
===================================================================
--- Extractor-docs/WWW/download.html    2012-09-06 07:53:34 UTC (rev 23666)
+++ Extractor-docs/WWW/download.html    2012-09-06 10:54:46 UTC (rev 23667)
@@ -1,127 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
-<html><head>
-
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>GNU 
libextractor - download page</title>
-<meta name="content-language" content="en">
-<meta name="language" content="en">
-<meta name="author" content="Vids Samanta and Christian Grothoff">
-<meta name="rights" content="(C) 2002,2003,2004,2005,2006,2007,2009 by Vids 
Samanta and Christian Grothoff">
-<meta name="keywords" content="keyword, extraction, mp3, html, pdf, sid, ogg, 
nsf, images, jpeg, gif, ps, mime, tiff, libextractor, GNU">
-<meta name="robots" content="index,follow">
-<meta name="revisit-after" content="28 days">
-<meta name="content-language" content="en">
-<meta name="language" content="en">
-<meta http-equiv="expires" content="43200">
-<meta http-equiv="content-type" content="text/html; charset=UTF-8">
-<link rel="SHORTCUT ICON" href="favicon.ico">
-</head>
-<body>
-
-<table width="99%" border="0" cellpadding="0" cellspacing="0">
-<tbody>
-<tr><td colspan="2" width="99%" bgcolor="#99bbff" align="center">GNU 
libextractor - download page
-</td></tr>
-<tr><td valign="top">
-  <table width="15%" border="0" cellpadding="2" cellspacing="3"><tbody>
-  <tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="index.html">Home</a></th></tr>
-  <tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="download.html">Download</a></th></tr>
-  <tr><td bgcolor="efefef"><a href="#tar">Tar</a></td></tr>
-  <tr><td bgcolor="efefef"><a href="#rpm">RPM</a></td></tr>
-  <tr><td bgcolor="efefef"><a href="#srpm">SRC RPM</a></td></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="documentation.html">Documentation</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a href="extractor.html">Reference 
Manual</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="http://freshmeat.net/projects/libextractor/";>Freshmeat Page</a></th></tr>
-</tbody>
-</table>
-</td>
-
-<td valign="top">
-<h2>Subversion access</h2>
-<p>
-You can access the current development version of libextractor using
-<pre>$ svn checkout https://gnunet.org/svn/Extractor</pre><br>
-A Java binding for libextractor is in
-<pre>$ svn checkout https://gnunet.org/svn/Extractor-java</pre><br>
-A Mono binding for libextractor is in
-<pre>$ svn checkout https://gnunet.org/svn/Extractor-mono</pre><br>
-A Python binding can be found under
-<pre>$ svn checkout https://gnunet.org/svn/Extractor-python</pre>
-A source package is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-python-0.5.tar.gz";>here</a>.
-This binding has been packaged as a python egg, available <a 
href="http://cheeseshop.python.org/pypi/Extractor";>here</a>
-A second Python binding that includes a binding for doodle can be found <a 
href="http://grothoff.org/christian/doodle/download/nokos_extractor_doodle_python.zip";>here</a>.
-<br>
-A Perl binding is in <a 
href="http://search.cpan.org/~flora/File-Extractor/";>CPAN</a>
-The latest version of the Perl binding is available using <tt>git clone 
git://git.perldition.org/File-Extractor.git/</tt>
-<br>
-A Ruby binding has been published <a 
href="http://raa.ruby-lang.org/project/extractor/";>here</a> (<a 
href="http://gnunet.org/libextractor/download/libextractor-ruby-0.9.tar.gz";>mirror</a>).
-Another Ruby binding has been published <a 
href="http://extractor.rubyforge.org/";>here</a> (<a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-ruby-0.1.gem";>mirror</a>).
-<br>
-An initial draft of a PHP binding can be found under
-<pre>$ svn checkout https://gnunet.org/svn/Extractor-php</pre>
-</p>
-
-<h2>Debian .deb package</h2>
-<p>
-The debian package can be downloaded from the <a 
href="http://packages.debian.org/";>official debian archive</a>.
-The extract package can be found under Utilities and the library under 
Libraries.
-The respective packages for libextractor are <a 
href="http://packages.debian.org/extract";>extract</a>, <a 
href="http://packages.debian.org/libextractor";>libextractor</a> and for 
development <a 
href="http://packages.debian.org/libextractor-dev";>libextractor-dev</a>.
-<a href="http://www.backports.org/";>Backports</a> for Debian Stable are also 
available.
-</p>
-<a name="tar"></a>
-<h2>Tar Package</h2>
-<p>
-The latest version can be found on <a 
href="http://ftpmirror.gnu.org/libextractor/";>GNU mirrors</a>.  
-If the mirror does not work, you should be able to find them on the main FTP 
server at 
-<a 
href="ftp://ftp.gnu.org/gnu/libextractor/";>ftp://ftp.gnu.org/gnu/libextractor/</a>.
  
-<br>
-Latest release is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-0.6.2.tar.gz";>libextractor-0.6.2.tar.gz</a>.
-<br>
-Latest Java-binding is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-java-0.6.0.tar.gz";>libextractor-java-0.6.0.tar.gz</a>.
-<br>
-Latest Mono-binding is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-mono-0.5.23.tar.gz";>libextractor-mono-0.5.23.tar.gz</a>.
-<br>
-Latest Python-binding is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-python-0.5.tar.gz";>libextractor-python-0.5.tar.gz</a>.
-<a name="rpm"></a>
-</p>
-
-<h2>RPM Package</h2>
-RPMs for SuSE 9.3 can be found here (<a 
href="ftp://ftp.suse.com/pub/people/ke/9.3-i386/";>i386</a>, 
-<a href="ftp://ftp.suse.com/pub/people/ke/9.3-x86_64/";>x86_64</a>, 
-<a href="ftp://ftp.suse.com/pub/people/ke/SRPM/";>SRPM</a>)
-<a name="win"></a>
-
-<h2>Windows</h2>
-Latest Windows binary is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-0.5.23-w32.zip";>libextractor-0.5.23-w32.zip</a>.
-</td></tr>
-</tbody>
-</table>
-<hr><a href="mailto:address@hidden";>address@hidden</a>
-
-
-
-<div id="translations">
-<h4>Translations of this page</h4>
-
-<!-- Please keep this list alphabetical by language code.
-     Comment what the language is for each type, i.e. de is German.
-     Write the language name in its own language (Deutsch) in the text.
-     If you add a new language here, please
-     advise address@hidden and add it to
-      - /home/www/html/server/standards/README.translations.html
-      - one of the lists under the section "Translations Underway"
-      - if there is a translation team, you also have to add an alias
-      to mail.gnu.org:/com/mailer/aliases
-     Please also check you have the language code right; see:
-     http://www.loc.gov/standards/iso639-2/php/code_list.php
-     If the 2-letter ISO 639-1 code is not available,
-     use the 3-letter ISO 639-2.
-     Please use W3C normative character entities. -->
-
-<ul class="translations-list">
-<!-- English -->
-<li><a href="/software/libextractor/download.html">English</a>&nbsp;[en]</li>
-</ul>
-</div>
-
-</body>
-</html>

Deleted: Extractor-docs/WWW/extractor.html
===================================================================
--- Extractor-docs/WWW/extractor.html   2012-09-06 07:53:34 UTC (rev 23666)
+++ Extractor-docs/WWW/extractor.html   2012-09-06 10:54:46 UTC (rev 23667)
@@ -1,2724 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html401/loose.dtd";>
-<html>
-<!-- This manual is for GNU libextractor
-(version 0.6.0, 13 January 2010).
-
-GNU libextractor is a GNU package.
-
-
-Copyright C 2007, 2010 Christian Grothoff
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3
-or any later version published by the Free Software Foundation;
-with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-Texts.  A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
- -->
-<!-- Created on January 13, 2010 by texi2html 1.82
-texi2html was written by: 
-            Lionel Cons <address@hidden> (original author)
-            Karl Berry  <address@hidden>
-            Olaf Bachmann <address@hidden>
-            and many others.
-Maintained by: Many creative people.
-Send bugs and suggestions to <address@hidden>
--->
-<head>
-<title>The GNU libextractor Reference Manual</title>
-
-<meta name="description" content="The GNU libextractor Reference Manual">
-<meta name="keywords" content="The GNU libextractor Reference Manual">
-<meta name="resource-type" content="document">
-<meta name="distribution" content="global">
-<meta name="Generator" content="texi2html 1.82">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<style type="text/css">
-<!--
-a.summary-letter {text-decoration: none}
-blockquote.smallquotation {font-size: smaller}
-pre.display {font-family: serif}
-pre.format {font-family: serif}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-pre.smalldisplay {font-family: serif; font-size: smaller}
-pre.smallexample {font-size: smaller}
-pre.smallformat {font-family: serif; font-size: smaller}
-pre.smalllisp {font-size: smaller}
-span.roman {font-family:serif; font-weight:normal;}
-span.sansserif {font-family:sans-serif; font-weight:normal;}
-ul.toc {list-style: none}
--->
-</style>
-
-
-</head>
-
-<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" 
vlink="#800080" alink="#FF0000">
-
-<a name="Top"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="The-GNU-libextractor-Reference-Manual"></a>
-<h1 class="settitle">The GNU libextractor Reference Manual</h1>
-<p>This manual is for GNU libextractor
-(version 0.6.0, 13 January 2010).
-</p>
-<p>GNU libextractor is a GNU package.
-</p>
-
-<p>Copyright &copy; 2007, 2010 Christian Grothoff
-</p>
-<blockquote><p>Permission is granted to copy, distribute and/or modify this 
document
-under the terms of the GNU Free Documentation License, Version 1.3
-or any later version published by the Free Software Foundation;
-with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-Texts.  A copy of the license is included in the section entitled &quot;GNU
-Free Documentation License&quot;.
-</p></blockquote>
-
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top"><a href="#Introduction">1. 
Introduction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">        
         What is <acronym>GNU libextractor</acronym>.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Preparation">2. 
Preparation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">         
         What you should do before using the library.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Generalities">3. 
Generalities</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">        
         General library functions and data types.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Extracting-meta-data">4. 
Extracting meta data</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">         How to use <acronym>GNU libextractor</acronym> to obtain 
meta data.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Language-bindings">5. Language 
bindings</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">            
How to use <acronym>GNU libextractor</acronym> from languages other than C.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Utility-functions">6. Utility 
functions</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">           
 Utility functions of <acronym>GNU libextractor</acronym>.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Existing-Plugins">7. Existing 
Plugins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">             
What plugins are available.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Writing-new-Plugins">8. Writing 
new Plugins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">         
 How to write new plugins for <acronym>GNU libextractor</acronym>.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Internal-utility-functions">9. 
Internal utility functions</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">   Utility functions of <acronym>GNU libextractor</acronym> for 
writing plugins.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Reporting-bugs">10. Reporting 
bugs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">               
How to report bugs or request new features.
-</td></tr>
-<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
-Appendices
-
-</pre></th></tr><tr><td align="left" valign="top"><a href="#Copying">A. GNU 
GENERAL PUBLIC LICENSE</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">                     The GNU General Public License says how you
-                                can copy and share some parts of <acronym>GNU 
libextractor</acronym>.
-</td></tr>
-<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
-Indices
-
-</pre></th></tr><tr><td align="left" valign="top"><a 
href="#Concept-Index">Concept Index</a></td><td>&nbsp;&nbsp;</td><td 
align="left" valign="top">               Index of concepts and programs.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Function-and-Data-Index">Function 
and Data Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">     
Index of functions, variables and data types.
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Type-Index">Type 
Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">               
   Index of data types.
-</td></tr>
-<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
-</pre></th></tr></table>
-
-
-
-<hr size="1">
-<a name="Introduction"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Top" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Next section 
in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Next chapter"> 
&gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Introduction-1"></a>
-<h1 class="chapter">1. Introduction</h1>
-
-<a name="index-error-handling"></a>
-<p><acronym>GNU libextractor</acronym> is GNU&rsquo;s library for extracting 
meta data from
-files.  Meta data includes format information (such as mime type,
-image dimensions, color depth, recording frequency), content
-descriptions (such as document title or document description) and
-copyright information (such as license, author and contributors).
-Meta data extraction is an inherently uncertain business &mdash; a parse
-error can be a corrupt file, an incompatibility in the file format
-version, an entirely different file format or a bug in the parser.  As
-a result of this uncertainty, <acronym>GNU libextractor</acronym> deliberately
-avoids to ever report any errors.  Unexpected file contents simply
-result in less or possibly no meta data being extracted.  
-</p>
-<a name="index-plugin"></a>
-<p><acronym>GNU libextractor</acronym> uses plugins to handle various file 
formats.
-Technically a plugin can support multiple file formats; however, most
-plugins only support one particular format.  By default,
-<acronym>GNU libextractor</acronym> will use all plugins that are available 
and found
-in the plugin installation directory.  Applications can
-request the use of only specific plugins or the exclusion of
-certain plugins.
-</p>
-<p><acronym>GNU libextractor</acronym> is distributed with the 
<code>extract</code> 
-command<a name="DOCF1" href="#FOOT1">(1)</a> which is a command-line tool for 
extracting
-meta data.  <code>extract</code> is given a list of filenames and 
-prints the resulting meta data to the console.  The <code>extract</code>
-source code also serves as an advanced example for how to use
-<acronym>GNU libextractor</acronym>.  
-</p>
-<p>This manual focuses on providing documentation for writing software
-with <acronym>GNU libextractor</acronym>.  The only relevant parts for 
end-users
-are the chapter on compiling and installing <acronym>GNU libextractor</acronym>
-(See section <a href="#Preparation">Preparation</a>.).  Also, the chapter on 
existing plugins maybe of
-interest (See section <a href="#Existing-Plugins">Existing Plugins</a>.).  
Additional documentation for
-end-users can be find in the man page on <code>extract</code> (using
-<tt>man extract</tt>).
-</p>
-<a name="index-license"></a>
-<p><acronym>GNU libextractor</acronym> is licensed under the GNU General 
Public License.  The
-developers have frequently received requests to license GNU
-libextractor under alternative terms.  However, <acronym>GNU 
libextractor</acronym>
-borrows plenty of GPL-licensed code from various other projects.
-Hence we cannot change the license (even if we wanted to).<a name="DOCF2" 
href="#FOOT2">(2)</a>
-</p>
-<hr size="6">
-<a name="Preparation"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Introduction" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-GNU_002fLinux" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Introduction" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Preparation-1"></a>
-<h1 class="chapter">2. Preparation</h1>
-
-<p>This chapter first describes the general build instructions that
-should apply to all systems.  Specific instructions for known problems
-for particular platforms are then described in individual sections
-afterwards.
-</p>
-<p>Compiling <acronym>GNU libextractor</acronym> follows the standard GNU 
autotools build process
-using <code>configure</code> and <code>make</code>.  For details on the GNU
-autotools build process, read the &lsquo;<tt>INSTALL</tt>&rsquo; file and query
-<tt>./configure --help</tt> for additional options.  
-</p>
-<p><acronym>GNU libextractor</acronym> has various dependencies, some of which 
are optional. 
-Instead of specifying the names of the software packages, we
-will give the list in terms of the names of the respective
-Debian (unstable) packages that should be installed.
-</p>
-<p>You absolutely need:
-</p>
-<ul>
-<li>
-libtool
-</li><li>
-gcc
-</li><li>
-make
-</li><li>
-g++ 
-</li><li>
-libltdl7-dev
-</li><li>
-zlib1g-dev
-</li><li>
-libbz2-dev
-</li></ul>
-
-<p>Recommended dependencies are:
-</p><ul>
-<li>
-libgtk2.0-dev
-</li><li>
-libvorbis-dev
-</li><li>
-libflac-dev
-</li><li>
-libgsf-1-dev
-</li><li>
-libmpeg2-4-dev
-</li><li>
-libqt4-dev
-</li><li>
-librpm-dev
-</li><li>
-libpoppler-dev
-</li><li>
-libexiv2-dev
-</li></ul>
-
-<p>Optional dependencies (you would need to additionally specify 
-the configure option <code>--enable-ffmpeg</code>) to make use of these
-are:
-</p><ul>
-<li>
-libavformat-dev
-</li><li>
-libswscale-dev
-</li></ul>
-
-<p>For Subversion access and compilation one also needs:
-</p><ul>
-<li>
-subversion
-</li><li>
-autoconf
-</li><li>
-automake
-</li></ul>
-
-<p>Please notify us if we missed some dependencies (note that the list is
-supposed to only list direct dependencies, not transitive
-dependencies).
-</p>
-<p>Once you have compiled and installed <acronym>GNU libextractor</acronym>, 
you should have a file
-&lsquo;<tt>extractor.h</tt>&rsquo; installed in your 
&lsquo;<tt>include/</tt>&rsquo; directory.  This
-file should be the starting point for your C and C++ development with
-<acronym>GNU libextractor</acronym>.  The build process also installs the 
&lsquo;<tt>extract</tt>&rsquo; binary and
-man pages for &lsquo;<tt>extract</tt>&rsquo; and <acronym>GNU 
libextractor</acronym>.  The &lsquo;<tt>extract</tt>&rsquo; man page
-documents the &lsquo;<tt>extract</tt>&rsquo; tool.  The <acronym>GNU 
libextractor</acronym> man page gives a brief
-summary of the C API for <acronym>GNU libextractor</acronym>.
-</p>
-<a name="index-packageing"></a>
-<a name="index-directory-structure"></a>
-<a name="index-plugin-1"></a>
-<a name="index-environment-variables"></a>
-<a name="index-LIBEXTRACTOR_005fPREFIX"></a>
-<p>When you install <acronym>GNU libextractor</acronym>, various plugins will 
be
-installed in the &lsquo;<tt>lib/libextractor/</tt>&rsquo; directory.  The main 
library
-will be installed as &lsquo;<tt>lib/libextractor.so</tt>&rsquo;.  Note that
-<acronym>GNU libextractor</acronym> will attempt to find the plugins relative 
to the
-path of the main library.  Consequently, a package manager can move
-the library and its plugins to a different location later &mdash; as long
-as the relative path between the main library and the plugins is
-preserved.  As a method of last resort, the user can specify an
-environment variable <tt>LIBEXTRACTOR_PREFIX</tt>.  If
-<acronym>GNU libextractor</acronym> cannot locate a plugin, it will look in
-<tt>LIBEXTRACTOR_PREFIX/lib/libextractor/</tt>.
-</p>
-
-<hr size="6">
-<a name="Installation-on-GNU_002fLinux"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Preparation" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-FreeBSD" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.1 Installation on GNU/Linux</h2>
-
-<p>Should work using the standard instructions without problems.
-</p>
-
-<hr size="6">
-<a name="Installation-on-FreeBSD"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Installation-on-GNU_002fLinux" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-OpenBSD" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.2 Installation on FreeBSD</h2>
-
-<p>Should work using the standard instructions without problems.
-</p>
-
-<hr size="6">
-<a name="Installation-on-OpenBSD"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Installation-on-FreeBSD" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-NetBSD" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.3 Installation on OpenBSD</h2>
-
-<p>OpenBSD 3.8 also doesn&rsquo;t have CODESET in 
&lsquo;<tt>langinfo.h</tt>&rsquo;.  CODESET
-is used in <acronym>GNU libextractor</acronym> in about three places.  This 
causes problems
-during compilation.
-</p>
-
-<hr size="6">
-<a name="Installation-on-NetBSD"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Installation-on-OpenBSD" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-using-MinGW" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.4 Installation on NetBSD</h2>
-
-<p>No reports so far.
-</p>
-
-<hr size="6">
-<a name="Installation-using-MinGW"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Installation-on-NetBSD" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.5 Installation using MinGW</h2>
-
-<p>Linking -lstdc++ with the provided libtool fails on Cygwin, this
-is a problem with libtool, there is unfortunately no flag to tell
-libtool how to do its job on Cygwin and it seems that it cannot be the
-default to set the library check to &rsquo;pass_all&rsquo;.  Patching libtool 
may
-help.
-</p>
-<p>Note: this is a rather dated report and may no longer apply.
-</p>
-
-<hr size="6">
-<a name="Installation-on-OS-X"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Installation-using-MinGW" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#Installing-and-uninstalling-the-framework" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.6 Installation on OS X</h2>
-
-<p>libextractor has two installation methods on Mac OS X: it can be
-installed as a Mac OS X framework or with the standard
-<code>./configure; make; make install</code> shell commands. The
-framework package is self-contained, but currently omits some of the
-extractor plugins that can be compiled in if libextractor is installed
-with <code>./configure; make; make install</code> (provided that the
-required dependencies exist.)
-</p>
-<hr size="6">
-<a name="Installing-and-uninstalling-the-framework"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Installation-on-OS-X" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Using-the-framework" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h3 class="subsection">2.6.1 Installing and uninstalling the framework</h3>
-
-<p>The binary framework is distributed as a disk image 
(&lsquo;<tt>Extractor-x.x.xx.dmg</tt>&rsquo;).
-Installation is done by opening the disk image and clicking 
&lsquo;<tt>Extractor.pkg</tt>&rsquo;
-inside it. The Mac OS X installer application will then run. The framework
-is installed to the root volume&rsquo;s 
&lsquo;<tt>/Library/Frameworks</tt>&rsquo; folder and installing
-will require admin privileges.
-</p>
-<p>The framework can be uninstalled by dragging
-&lsquo;<tt>/Library/Frameworks/Extractor.framework</tt>&rsquo; cto the 
&lsquo;<tt>Trash</tt>&rsquo;.
-</p>
-
-<hr size="6">
-<a name="Using-the-framework"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Installing-and-uninstalling-the-framework" title="Previous section in 
reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Example-for-using-the-framework" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h3 class="subsection">2.6.2 Using the framework</h3>
-
-<p>In the framework, the <code>extract</code> command line tool can be found 
at 
-&lsquo;<tt>/Library/Frameworks/Extractor.framework/Versions/Current/bin/extract</tt>&rsquo;
-</p>
-<p>The framework can be used in software projects as a framework or as a 
dynamic
-library. 
-</p>
-<p>When using the framework as a dynamic library in projects using autotools,
-one would most likely want to add 
-&quot;-I/Library/Frameworks/Extractor.framework/Versions/Current/include&quot;
-to CPPFLAGS and 
-&quot;-L/Library/Frameworks/Extractor.framework/Versions/Current/lib&quot;
-to LDFLAGS.
-</p>
-
-<hr size="6">
-<a name="Example-for-using-the-framework"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Using-the-framework" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#Example-for-using-the-dynamic-library" title="Next section in reading 
order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h3 class="subsection">2.6.3 Example for using the framework</h3>
-
-<table><tr><td>&nbsp;</td><td><pre class="verbatim">// hello.c
-#include &lt;Extractor/extractor.h&gt;
-
-int main()
-{
-  struct EXTRACTOR_PluginList *el;
-  el = EXTRACTOR_plugin_load_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
-  // ...
-  EXTRACTOR_plugin_remove_all (el);
-  return 0;
-}
-</pre></td></tr></table>
-
-<p>You can then compile the example using
-</p>
-<pre class="verbatim">$ gcc -o hello hello.c -framework Extractor
-</pre>
-<hr size="6">
-<a name="Example-for-using-the-dynamic-library"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Example-for-using-the-framework" title="Previous section in reading 
order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Note-to-package-maintainers" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h3 class="subsection">2.6.4 Example for using the dynamic library</h3>
-
-<table><tr><td>&nbsp;</td><td><pre class="verbatim">// hello.c
-#include &lt;extractor.h&gt;
-int main()
-{
-  struct EXTRACTOR_PluginList *el;
-  el = EXTRACTOR_plugin_load_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
-  // ...
-  EXTRACTOR_plugin_remove_all (el);
-  return 0;
-}
-</pre></td></tr></table>
-
-<p>You can then compile the example using
-</p>
-<pre class="verbatim">$ gcc 
-I/Library/Frameworks/Extractor.framework/Versions/Current/include \
-  -o hello hello.c \
-  -L/Library/Frameworks/Extractor.framework/Versions/Current/lib \
-  -lextractor
-</pre>
-<p>Notice the difference in the <code>#include</code> line.
-</p>
-
-
-
-
-
-<hr size="6">
-<a name="Note-to-package-maintainers"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Example-for-using-the-dynamic-library" title="Previous section in 
reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next section 
in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">2.7 Note to package maintainers</h2>
-
-<p>The suggested way to package GNU libextractor is to split it into
-roughly the following binary packages:<a name="DOCF3" href="#FOOT3">(3)</a>
-</p>
-<ul>
-<li>
-libextractor (main library only, only hard dependency for other packages 
depending on GNU libextractor)
-</li><li>
-extract (command-line tool and man page)
-</li><li>
-libextractor-dev (extractor.h header and man page)
-</li><li>
-libextractor-doc (this manual)
-</li><li>
-libextractor-plugins (plugins without external dependencies; recommended but 
not required by extract and libextractor package)
-</li><li>
-libextractor-plugin-XXX (plugin with dependency on libXXX, for example for 
XXX=mpeg this would be &lsquo;<tt>libextractor_mpeg.so</tt>&rsquo;)
-</li><li>
-libextractor-plugins-all (meta package that requires all plugins)
-</li></ul>
-
-<p>This would enable minimal installations (i.e. for embedded systems) to
-not include any plugins, as well as moderate-size installations (that
-do not trigger GTK, QT and X11) for systems that have limited
-resources.
-</p>
-
-<hr size="6">
-<a name="Generalities"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Note-to-package-maintainers" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#Introduction-to-the-_0060_0060extract_0027_0027-command" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Generalities-1"></a>
-<h1 class="chapter">3. Generalities</h1>
-
-<hr size="6">
-<a name="Introduction-to-the-_0060_0060extract_0027_0027-command"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Generalities" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#Common-usage-examples-for-_0060_0060extract_0027_0027" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">3.1 Introduction to the &ldquo;extract&rdquo; command</h2>
-
-<p>The <code>extract</code> command takes a list of file names as arguments,
-extracts meta data from each of those files and prints the result to
-the console.  By default, <code>extract</code> will use all available
-plugins and print all (non-binary) meta data that is found.
-</p>
-<p>The set of plugins used by <code>extract</code> can be controlled using
-the &ldquo;-l&rdquo; and &ldquo;-n&rdquo; options.  Use &ldquo;-n&rdquo; to 
not load all of the
-default plugins.  Use &ldquo;-l NAME&rdquo; to specifically load a certain
-plugin.  For example, specify &ldquo;-n -l mime&rdquo; to only use the MIME
-plugin.
-</p>
-<p>Using the &ldquo;-p&rdquo; option the output of <code>extract</code> can be 
limited
-to only certain keyword types.  Similarly, using the &ldquo;-x&rdquo; option,
-certain keyword types can be excluded.  A list of all known keyword
-types can be obtained using the &ldquo;-L&rdquo; option.
-</p>
-<p>The output format of <code>extract</code> can be influenced with the
-&ldquo;-V&rdquo; (more verbose, lists filenames), &ldquo;-g&rdquo; 
(grep-friendly, all
-meta data on a single line per file) and &ldquo;-b&rdquo; (bibTeX style)
-options.
-</p>
-<hr size="6">
-<a name="Common-usage-examples-for-_0060_0060extract_0027_0027"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Introduction-to-the-_0060_0060extract_0027_0027-command" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#Introduction-to-the-libextractor-library" title="Next section in reading 
order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">3.2 Common usage examples for &ldquo;extract&rdquo;</h2>
-
-<table><tr><td>&nbsp;</td><td><pre class="example">$ extract test/test.jpg
-comment - (C) 2001 by Christian Grothoff, using gimp 1.2 1
-mimetype - image/jpeg
-
-$ extract -V -x comment test/test.jpg
-Keywords for file test/test.jpg:
-mimetype - image/jpeg
-
-$ extract -p comment test/test.jpg
-comment - (C) 2001 by Christian Grothoff, using gimp 1.2 1
-
-$ extract -nV -l png.so -p comment test/test.jpg test/test.png
-Keywords for file test/test.jpg:
-Keywords for file test/test.png:
-comment - Testing keyword extraction
-</pre></td></tr></table>
-
-
-<hr size="6">
-<a name="Introduction-to-the-libextractor-library"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Common-usage-examples-for-_0060_0060extract_0027_0027" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Up section"> 
Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">3.3 Introduction to the libextractor library</h2>
-
-<p>Each public symbol exported by <acronym>GNU libextractor</acronym> has the 
prefix
-<tt>EXTRACTOR_</tt>.  All-caps names are used for constants.  For the
-impatient, the minimal C code for using <acronym>GNU libextractor</acronym> 
(on the
-executing binary itself) looks like this:
-</p>
-<pre class="verbatim">#include &lt;extractor.h&gt;
-int main(int argc, char ** argv) {
-  struct EXTRACTOR_PluginList *plugins
-    = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
-  EXTRACTOR_extract (plugins, argv[1],
-                     NULL, 0, 
-                     &amp;EXTRACTOR_meta_data_print, stdout);
-  EXTRACTOR_plugin_remove_all (plugins);
-  return 0;
-}
-</pre>
-<p>The minimal API illustrated by this example is actually sufficient for
-many applications.  The full external C API of <acronym>GNU 
libextractor</acronym> is described
-in chapter See section <a href="#Extracting-meta-data">Extracting meta 
data</a>.  Bindings for other languages
-are described in chapter See section <a href="#Language-bindings">Language 
bindings</a>.  The API for
-writing new plugins is described in chapter See section <a 
href="#Writing-new-Plugins">Writing new Plugins</a>.
-</p>
-<hr size="6">
-<a name="Extracting-meta-data"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Introduction-to-the-libextractor-library" title="Previous section in 
reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Plugin-management" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Extracting-meta-data-1"></a>
-<h1 class="chapter">4. Extracting meta data</h1>
-
-<p>In order to extract meta data with <acronym>GNU libextractor</acronym> you 
first need to
-load the respective plugins and then call the extraction API
-with the plugins and the data to process.  This section
-documents how to load and unload plugins, the various types
-and formats in which meta data is returned to the application
-and finally the extraction API itself.
-</p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top"><a href="#Plugin-management">4.1 Plugin 
management</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">   How to 
load and unload plugins
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Meta-types">4.2 Meta 
types</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">          
About meta types
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Meta-formats">4.3 Meta 
formats</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">        
About meta formats
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Extracting">4.4 
Extracting</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">          
How to use the extraction API
-</td></tr>
-</table>
-
-
-<hr size="6">
-<a name="Plugin-management"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Meta-types" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Plugin-management-1"></a>
-<h2 class="section">4.1 Plugin management</h2>
-
-<a name="index-reentrant"></a>
-<a name="index-concurrency"></a>
-<a name="index-threads"></a>
-<a name="index-thread_002dsafety"></a>
-<a name="index-enum-EXTRACTOR_005fOptions"></a>
-
-<p>All of the functions for loading and unloading plugins, including
-<tt>EXTRACTOR_plugin_add_defaults</tt> and 
<tt>EXTRACTOR_plugin_remove_all</tt>,
-are thread-safe and reentrant.  However, using the same plugin list
-from multiple threads at the same time is not safe.  Creating multiple
-plugin lists and using them concurrently is supported as long as
-the <code>EXTRACTOR_OPTION_IN_PROCESS</code> option is not used. 
-</p>
-<p>Generally, <acronym>GNU libextractor</acronym> is fully thread-safe and 
mostly reentrant.
-All plugin code is expected required to be reentrant and state-less,
-but due to the extensive use of 3rd party libraries this cannot
-be guaranteed.  Hence plugins are executed (by default) out of
-process.  This also ensures that plugins that crash do not cause
-the main application to fail as well.  
-</p>
-<p>Plugins can be executed in-process by giving the option
-<code>EXTRACTOR_OPTION_IN_PROCESS</code> when loading the plugin.  This
-option is only recommended when debugging plugins and not for
-production use.  Due to the use of shared-memory IPC the
-out-of-process execution of plugins should not be a concern for
-performance.
-</p>
-
-<dl>
-<dt><a name="index-EXTRACTOR_005fPluginList"></a><u>C Struct:</u> 
<b>EXTRACTOR_PluginList</b></dt>
-<dd><a name="index-struct-EXTRACTOR_005fPluginList"></a>
-
-<p>A plugin list represents a set of GNU libextractor plugins.  Most of
-the GNU libextractor API is concerned with either constructing a
-plugin list or using it to extract meta data.  The internal representation
-of the plugin list is of no concern to users or plugin developers.
-</p></dd></dl>
-
-
-<dl>
-<dt><a 
name="index-EXTRACTOR_005fplugin_005fremove_005fall"></a><u>Function:</u> void 
<b>EXTRACTOR_plugin_remove_all</b><i> (struct EXTRACTOR_PluginList 
*plugins)</i></dt>
-<dd><a name="index-EXTRACTOR_005fplugin_005fremove_005fall-1"></a>
-
-<p>Unload all of the plugins in the given list.
-</p></dd></dl>
-
-<dl>
-<dt><a name="index-EXTRACTOR_005fplugin_005fremove"></a><u>Function:</u> 
struct EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_remove</b><i> (struct 
EXTRACTOR_PluginList *plugins, const char*name)</i></dt>
-<dd><a name="index-EXTRACTOR_005fplugin_005fremove-1"></a>
-
-<p>Unloads a particular plugin.  The given name should be the short name of 
the plugin, for example &ldquo;mime&rdquo; for the mime-type extractor or 
&ldquo;mpeg&rdquo; for the MPEG extractor.
-</p></dd></dl>
-
-<dl>
-<dt><a name="index-EXTRACTOR_005fplugin_005fadd"></a><u>Function:</u> struct 
EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_add</b><i> (struct 
EXTRACTOR_PluginList *plugins, const char* name,const char* options, enum 
EXTRACTOR_Options flags)</i></dt>
-<dd><a name="index-EXTRACTOR_005fplugin_005fadd-1"></a>
-
-<p>Loads a particular plugin.  The plugin is added to the existing list, which 
can be NULL.  The second argument specifies the name of the plugin (i.e. 
&ldquo;ogg&rdquo;).  The third argument can be NULL and specifies 
plugin-specific options.  Finally, the last argument specifies if the plugin 
should be executed out-of-process 
(<code>EXTRACTOR_OPTION_DEFAULT_POLICY</code>) or not.
-</p></dd></dl>
-
-<dl>
-<dt><a 
name="index-EXTRACTOR_005fplugin_005fadd_005fconfig"></a><u>Function:</u> 
struct EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_add_config</b><i> (struct 
EXTRACTOR_PluginList *plugins, const char* config, enum EXTRACTOR_Options 
flags)</i></dt>
-<dd><a name="index-EXTRACTOR_005fplugin_005fadd_005fconfig-1"></a>
-
-<p>Loads and unloads plugins based on a configuration string, modifying the 
existing list, which can be NULL.  The string has the format 
&ldquo;[-]NAME(OPTIONS){:[-]NAME(OPTIONS)}*&rdquo;.  Prefixing the plugin name 
with a &ldquo;-&rdquo; means that the plugin should be unloaded.
-</p></dd></dl>
-
-<dl>
-<dt><a 
name="index-EXTRACTOR_005fplugin_005fadd_005fdefaults"></a><u>Function:</u> 
struct EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_add_defaults</b><i> (enum 
EXTRACTOR_Options flags)</i></dt>
-<dd><a name="index-EXTRACTOR_005fplugin_005fadd_005fdefaults-1"></a>
-
-<p>Loads all of the plugins in the plugin directory.  This function is what 
most <acronym>GNU libextractor</acronym> applications should use to setup the 
plugins.
-</p></dd></dl>
-
-
-
-<hr size="6">
-<a name="Meta-types"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Plugin-management" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Meta-formats" title="Next section 
in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Meta-types-1"></a>
-<h2 class="section">4.2 Meta types</h2>
-
-
-<a name="index-enum-EXTRACTOR_005fMetaType"></a>
-<a name="index-EXTRACTOR_005fmetatype_005fget_005fmax"></a>
-
-<p><tt>enum EXTRACTOR_MetaType</tt> is a C enum which defines a list of over 
100 different types of meta data.  The total number can differ between 
different <acronym>GNU libextractor</acronym> releases; the maximum value for 
the current release can be obtained using the 
<tt>EXTRACTOR_metatype_get_max</tt> function.  All values in this enumeration 
are of the form <tt>EXTRACTOR_METATYPE_XXX</tt>.
-</p>
-<dl>
-<dt><a 
name="index-EXTRACTOR_005fmetatype_005fto_005fstring"></a><u>Function:</u> 
const char * <b>EXTRACTOR_metatype_to_string</b><i> (enum EXTRACTOR_MetaType 
type)</i></dt>
-<dd><a name="index-EXTRACTOR_005fmetatype_005fto_005fstring-1"></a>
-<a name="index-gettext"></a>
-<a name="index-internationalization"></a>
-
-<p>The function <tt>EXTRACTOR_metatype_to_string</tt> can be used to obtain a 
short English string &lsquo;<samp>s</samp>&rsquo; describing the meta data 
type.  The string can be translated into other languages using GNU gettext with 
the domain set to <acronym>GNU libextractor</acronym> 
(<tt>dgettext(&quot;libextractor&quot;, s)</tt>).  
-</p></dd></dl>
-
-<dl>
-<dt><a 
name="index-EXTRACTOR_005fmetatype_005fto_005fdescription"></a><u>Function:</u> 
const char * <b>EXTRACTOR_metatype_to_description</b><i> (enum 
EXTRACTOR_MetaType type)</i></dt>
-<dd><a name="index-EXTRACTOR_005fmetatype_005fto_005fdescription-1"></a>
-<a name="index-gettext-1"></a>
-<a name="index-internationalization-1"></a>
-
-<p>The function <tt>EXTRACTOR_metatype_to_description</tt> can be used to 
obtain a longer English string &lsquo;<samp>s</samp>&rsquo; describing the meta 
data type.  The description may be empty if the short description returned by 
<code>EXTRACTOR_metatype_to_string</code> is already comprehensive.  The string 
can be translated into other languages using GNU gettext with the domain set to 
<acronym>GNU libextractor</acronym> (<tt>dgettext(&quot;libextractor&quot;, 
s)</tt>).  
-</p></dd></dl>
-
-
-
-<hr size="6">
-<a name="Meta-formats"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Meta-types" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Meta-formats-1"></a>
-<h2 class="section">4.3 Meta formats</h2>
-
-<a name="index-enum-EXTRACTOR_005fMetaFormat"></a>
-
-<p><tt>enum EXTRACTOR_MetaFormat</tt> is a C enum which defines on a high 
level how the extracted meta data is represented.  Currently, the library uses 
three formats: UTF-8 strings, C strings and binary data.  A fourth value, 
<code>EXTRACTOR_METAFORMAT_UNKNOWN</code> is defined but not used.  UTF-8 
strings are 0-terminated strings that have been converted to UTF-8.  The format 
code is <code>EXTRACTOR_METAFORMAT_UTF8</code>. Ideally, most text meta data 
will be of this format.  Some file formats fail to specify the encoding used 
for the text.  In this case, the text cannot be converted to UTF-8.  However, 
the meta data is still known to be 0-terminated and presumably human-readable.  
In this case, the format code used is 
<code>EXTRACTOR_METAFORMAT_C_STRING</code>; however, this should not be 
understood to mean that the encoding is the same as that used by the C 
compiler.  Finally, for binary data (mostly images), the format 
<code>EXTRACTOR_METAFORMAT_BINARY</code> is used.
-</p>
-<p>Naturally this is not a precise description of the meta format. Plugins can 
provide a more precise description (if known) by providing the respective mime 
type of the meta data.  For example, binary image meta data could be also 
tagged as &ldquo;image/png&rdquo; and normal text would typically be tagged as 
&ldquo;text/plain&rdquo;.  
-</p>
-
-
-<hr size="6">
-<a name="Extracting"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Meta-formats" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Extracting-1"></a>
-<h2 class="section">4.4 Extracting</h2>
-
-<dl>
-<dt><a name="index-_0028"></a><u>Function Pointer:</u> int 
<b>(</b><i>*EXTRACTOR_MetaDataProcessor)(void *cls, const char *plugin_name, 
enum EXTRACTOR_MetaType type, enum EXTRACTOR_MetaFormat format, const char 
*data_mime_type, const char *data, size_t data_len)</i></dt>
-<dd><a name="index-EXTRACTOR_005fMetaDataProcessor"></a>
-
-<p>Type of a function that libextractor calls for each meta data item found.
-</p>
-<dl compact="compact">
-<dt> <var>cls</var> </dt>
-<dd><p>closure (user-defined)
-</p>
-</dd>
-<dt> <var>plugin_name</var> </dt>
-<dd><p>name of the plugin that produced this value; special values can be used 
(i.e. &rsquo;&lt;zlib&gt;&rsquo; for zlib being used in the main libextractor 
library and yielding meta data);
-</p>
-</dd>
-<dt> <var>type</var> </dt>
-<dd><p>libextractor-type describing the meta data;
-</p>
-</dd>
-<dt> <var>format basic</var> </dt>
-<dd><p>format information about data
-</p>
-</dd>
-<dt> <var>data_mime_type</var> </dt>
-<dd><p>mime-type of data (not of the original file); can be NULL (if mime-type 
is not known);
-</p>
-</dd>
-<dt> <var>data</var> </dt>
-<dd><p>actual meta-data found
-</p>
-</dd>
-<dt> <var>data_len</var> </dt>
-<dd><p>number of bytes in data
-</p>
-</dd>
-</dl>
-
-<p>Return 0 to continue extracting, 1 to abort.
-</p></dd></dl>
-
-
-
-<dl>
-<dt><a name="index-EXTRACTOR_005fextract"></a><u>Function:</u> void 
<b>EXTRACTOR_extract</b><i> (struct EXTRACTOR_PluginList *plugins, const char 
*filename, const void *data, size_t size, EXTRACTOR_MetaDataProcessor proc, 
void *proc_cls)</i></dt>
-<dd><a name="index-EXTRACTOR_005fextract-1"></a>
-<a name="index-reentrant-1"></a>
-<a name="index-concurrency-1"></a>
-<a name="index-threads-1"></a>
-<a name="index-thread_002dsafety-1"></a>
-
-<p>This is the main function for extracting keywords with <acronym>GNU 
libextractor</acronym>.  The first argument is a plugin list which specifies 
the set of plugins that should be used for extracting meta data.  The 
&lsquo;<samp>filename</samp>&rsquo; argument is optional and can be used to 
specify the name of a file to process.  If &lsquo;<samp>filename</samp>&rsquo; 
is NULL, then the &lsquo;<samp>data</samp>&rsquo; argument must point to the 
in-memory data to extract meta data from.  If 
&lsquo;<samp>filename</samp>&rsquo; is non-NULL, 
&lsquo;<samp>data</samp>&rsquo; can be NULL.  If 
&lsquo;<samp>data</samp>&rsquo; is non-null, then 
&lsquo;<samp>size</samp>&rsquo; is the size of &lsquo;<samp>data</samp>&rsquo; 
in bytes.  Otherwise &lsquo;<samp>size</samp>&rsquo; should be zero.  For each 
meta data item found, GNU libextractor will call the 
&lsquo;<samp>proc</samp>&rsquo; function, passing 
&lsquo;<samp>proc_cls</samp>&rsquo; as the first argument to 
&lsquo;<samp>proc</samp
 >&rsquo;
 .  The other arguments to &lsquo;<samp>proc</samp>&rsquo; depend on the 
specific meta data found.  
-</p>
-<a name="index-SIGBUS"></a>
-<a name="index-bus-error"></a>
-<p>Meta data extraction should never really fail &mdash; at worst, 
<acronym>GNU libextractor</acronym> should not call 
&lsquo;<samp>proc</samp>&rsquo; with any meta data. By design, <acronym>GNU 
libextractor</acronym> should never crash or leak memory, even given corrupt 
files as input.  Note however, that running <acronym>GNU libextractor</acronym> 
on a corrupt file system (or incorrectly <tt>mmap</tt>ed files) can result in 
the operating system sending a SIGBUS (bus error) to the process.  While 
<acronym>GNU libextractor</acronym> runs plugins out-of-process, it first maps 
the file into memory and then attempts to decompress it.  During decompression 
it is possible to encounter a SIGBUS.   <acronym>GNU libextractor</acronym> 
will <em>not</em> attempt to catch this signal and your application is likely 
to crash.  Note again that this should only happen if the file <em>system</em> 
is corrupt (not if individual files are corrupt).  If this is not acceptable, 
you might want to
  conside
 r running <acronym>GNU libextractor</acronym> itself also out-of-process (as 
done, for example, by <a 
href="http://grothoff.org/christian/doodle/";>doodle</a>).
-</p>
-</dd></dl>
-
-
-<hr size="6">
-<a name="Language-bindings"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Extracting" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Java" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Language-bindings-1"></a>
-<h1 class="chapter">5. Language bindings</h1>
-<a name="index-Java"></a>
-<a name="index-Mono"></a>
-<a name="index-Perl"></a>
-<a name="index-Python"></a>
-<a name="index-PHP"></a>
-<a name="index-Ruby"></a>
-
-<p><acronym>GNU libextractor</acronym> works immediately with C and C++ code. 
Bindings for Java, Mono, Ruby, Perl, PHP and Python are available for download 
from the main <acronym>GNU libextractor</acronym> website.  Documentation for 
these bindings (if available) is part of the downloads for the respective 
binding.  In all cases, a full installation of the C library is required before 
the binding can be installed.
-</p>
-<hr size="6">
-<a name="Java"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Language-bindings" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Mono" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">5.1 Java</h2>
-
-<p>Compiling the GNU libextractor Java binding follows the usual process of
-running <code>configure</code> and <code>make</code>.  The result will be a
-shared C library &lsquo;<tt>libextractor_java.so</tt>&rsquo; with the native 
code and
-a JAR file (installed to 
&lsquo;<tt>$PREFIX/share/java/libextractor.java</tt>&rsquo;).
-</p>
-<p>A minimal example for using GNU libextractor&rsquo;s Java binding would look
-like this:
-</p><pre class="verbatim">import org.gnu.libextractor.*;
-import java.util.ArrayList;
-
-public static void main(String[] args) {
-  Extractor ex = Extractor.getDefault();
-  for (int i=0;i&lt;args.length;i++) {
-    ArrayList keywords = ex.extract(args[i]);
-    System.out.println(&quot;Keywords for &quot; + args[i] + &quot;:&quot;);
-    for (int j=0;j&lt;keywords.size();j++)
-      System.out.println(keywords.get(j));
-  }
-}
-</pre>
-<p>The GNU libextractor library and the 
&lsquo;<tt>libextractor_java.so</tt>&rsquo; JNI binding
-have to be in the library search path for this to work.  Furthermore, the
-&lsquo;<tt>libextractor.jar</tt>&rsquo; file should be on the classpath.  
-</p>
-<p>Note that the API does not use Java 5 style generics in order to work
-with older versions of Java.
-</p>
-<hr size="6">
-<a name="Mono"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Java" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Perl" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">5.2 Mono</h2>
-
-<p>This binding is undocumented at this point.
-</p>
-<hr size="6">
-<a name="Perl"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Mono" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Python" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">5.3 Perl</h2>
-
-<p>This binding is undocumented at this point.
-</p>
-<hr size="6">
-<a name="Python"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Perl" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#PHP" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">5.4 Python</h2>
-
-<p>This binding is undocumented at this point.
-</p>
-<hr size="6">
-<a name="PHP"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Python" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Ruby" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">5.5 PHP</h2>
-
-<p>This binding is undocumented at this point.
-</p>
-<hr size="6">
-<a name="Ruby"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#PHP" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">5.6 Ruby</h2>
-
-<p>This binding is undocumented at this point.
-</p>
-
-
-<hr size="6">
-<a name="Utility-functions"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Ruby" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-Constants" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Utility-functions-1"></a>
-<h1 class="chapter">6. Utility functions</h1>
-
-<a name="index-reentrant-2"></a>
-<a name="index-concurrency-2"></a>
-<a name="index-threads-2"></a>
-<a name="index-thread_002dsafety-2"></a>
-<p>This chapter describes various utility functions for <acronym>GNU 
libextractor</acronym> usage. All of the functions are reentrant.
-</p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top"><a href="#Utility-Constants">6.1 Utility 
Constants</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
-</td></tr>
-<tr><td align="left" valign="top"><a href="#Meta-data-printing">6.2 Meta data 
printing</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
-</td></tr>
-</table>
-
-<hr size="6">
-<a name="Utility-Constants"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Utility-functions" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Meta-data-printing" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Utility-Constants-1"></a>
-<h2 class="section">6.1 Utility Constants</h2>
-
-<a name="index-EXTRACTOR_005fVERSION"></a>
-<p>The constant <tt>EXTRACTOR_VERSION</tt> is a hexadecimal
-representation of the version number of the installed libextractor
-header.  The hexadecimal format is 0xAABBCCDD where AA is the major
-version (so far always 0), BB is the minor version, CC is the revision
-and DD the patch number.  For example, for version 0.5.18, we would
-have AA=0, BB=5, CC=18 and DD=0.  Minor releases such as 0.5.18a or
-significant changes in unreleased versions would be marked with DD=1
-or higher.
-</p>
-
-<hr size="6">
-<a name="Meta-data-printing"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Utility-Constants" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Utility-functions" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Meta-data-printing-1"></a>
-<h2 class="section">6.2 Meta data printing</h2>
-
-
-<a name="index-EXTRACTOR_005fmeta_005fdata_005fprint"></a>
-<p>The <tt>EXTRACTOR_meta_data_print</tt> is a simple function which prints 
the meta data found with libextractor to a file.  The function is mostly useful 
for debugging and as an example for how to manipulate the keyword list and can 
be passed as the &lsquo;<samp>proc</samp>&rsquo; argument to 
<code>EXTRACTOR_extract</code>.  The file to print to should be passed as 
&lsquo;<samp>proc_cls</samp>&rsquo; (which must be of type <code>FILE 
*</code>), for example <code>stdout</code>.
-</p>
-
-
-<hr size="6">
-<a name="Existing-Plugins"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Meta-data-printing" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Existing-Plugins-1"></a>
-<h1 class="chapter">7. Existing Plugins</h1>
-
-<ul>
-<li>
-APPLEFILE
-</li><li>
-ASF
-</li><li>
-DEB
-</li><li>
-DVI
-</li><li>
-ELF
-</li><li>
-EXIV2
-</li><li>
-FLAC
-</li><li>
-FLV
-</li><li>
-GIF
-</li><li>
-HTML
-</li><li>
-ID3 (v2.0, v2.3, v2.4)
-</li><li>
-IT
-</li><li>
-JPEG
-</li><li>
-OLE2
-</li><li>
-thumbnail (GTK, QT or FFMPEG-based)
-</li><li>
-MAN
-</li><li>
-MIME
-</li><li>
-MP3 (ID3v1)
-</li><li>
-MPEG
-</li><li>
-NSF and NSFE
-</li><li>
-ODF
-</li><li>
-PNG
-</li><li>
-PS (PostScript)
-</li><li>
-QT (QuickTime)
-</li><li>
-REAL
-</li><li>
-RIFF
-</li><li>
-RPM
-</li><li> 
-S3M
-</li><li>
-SID
-</li><li>
-TAR
-</li><li>
-TIFF
-</li><li>
-WAV
-</li><li>
-XM
-</li><li>
-ZIP
-</li></ul>
-
-<p>&lsquo;<tt>gzip</tt>&rsquo; and &lsquo;<tt>bzip2</tt>&rsquo; compressed 
versions of these formats are 
-also supported (as well as meta data embedded by &lsquo;<tt>gzip</tt>&rsquo; 
itself).
-</p>
-<hr size="6">
-<a name="Writing-new-Plugins"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Existing-Plugins" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#Example-for-a-minimal-extract-method" title="Next section in reading 
order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Beginning 
of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Writing-new-Plugins-1"></a>
-<h1 class="chapter">8. Writing new Plugins</h1>
-
-<p>Writing a new plugin for libextractor usually requires writing of or
-interfacing with an actual parser for a specific format.  How this is
-can be accomplished depends on the format and cannot be specified in
-general.  However, care should be taken for the code to be reentrant
-and highly fault-tolerant, especially with respect to malformed
-inputs.
-</p>
-<p>Plugins should start by verifying that the header of the data matches
-the specific format and immediately return if that is not the case.
-Even if the header matches the expected file format, plugins must not
-assume that the remainder of the file is well formed.
-</p>
-<p>The plugin library must be called libextractor_XXX.so, where XXX 
-denotes the file format of the plugin. The library must export a 
-method <tt>libextractor_XXX_extract</tt>, with the following 
-signature:
-</p><pre class="verbatim">int
-EXTRACTOR_XXX_extract
-   (const char *data,
-    size_t data_size,
-    EXTRACTOR_MetaDataProcessor proc,
-    void *proc_cls,
-    const char * options);
-</pre>
-<p>&lsquo;<samp>data</samp>&rsquo; is a pointer to the typically memory mapped 
contents of
-the file.  Note that plugins cannot ignore the <tt>const</tt>
-annotation since the memory mapping may have been done read-only (and
-thus writes to this page will result in an error).  The 
&lsquo;<samp>data_size</samp>&rsquo;
-argument specifies the size of the &lsquo;<samp>data</samp>&rsquo; buffer in 
bytes.
-</p>
-<p>&lsquo;<samp>proc</samp>&rsquo; should be called on each meta data item 
found.  If &lsquo;<samp>proc</samp>&rsquo; 
-returns non-zero, processing should be aborted and the <code>extract</code>
-function must return 1.  Otherwise <code>extract</code> should always return 
zero.
-</p>
-
-<p>In order to test new plugins, the &lsquo;<tt>extract</tt>&rsquo; command 
can be run
-with the options &ldquo;-ni&rdquo; and &ldquo;-l XXX&rdquo; .  This will run 
the plugin
-in-process (making it easier to debug) and without any of the other
-plugins.
-</p>
-
-<hr size="6">
-<a name="Example-for-a-minimal-extract-method"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Plugin-execution-options" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">8.1 Example for a minimal extract method</h2>
-
-<p>The following example shows how a plugin can return the mime type of
-a file.
-</p><table><tr><td>&nbsp;</td><td><pre class="verbatim">int
-EXTRACTOR_mymime_extract
-   (const char *data,
-    size_t data_size,
-    EXTRACTOR_MetaDataProcessor proc,
-    void *proc_cls,
-    const char * options)
-{
-  if (data_size &lt; 4)
-    return 0;
-  if (0 != memcmp (data, &quot;\177ELF&quot;, 4))
-    return 0;
-  if (0 != proc (proc_cls, 
-                 &quot;mymime&quot;,
-                 EXTRACTOR_METATYPE_MIMETYPE,
-                 EXTRACTOR_METAFORMAT_UTF8,
-                 &quot;text/plain&quot;,
-                 &quot;application/x-executable&quot;,
-                 1 + strlen(&quot;application/x-executable&quot;)))
-    return 1;
-  /* more calls to 'proc' here as needed */
-  return 0;
-}
-</pre></td></tr></table>
-
-<hr size="6">
-<a name="Plugin-execution-options"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#Example-for-a-minimal-extract-method" title="Previous section in reading 
order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Example-for-an-options-method" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">8.2 Plugin execution options</h2>
-
-<p>Plugins can request that their execution be done in a particular way.
-For this, the plugin defines a function with the following signature:
-</p>
-<pre class="verbatim">const char *
-EXTRACTOR_XXX_options (void);
-</pre>
-<p>The function should return a string with the execution options.
-Individual options in this string should be separated by semicolons.
-Options that are included in the string but not known to the library
-are ignored.  The following options are supported:
-</p>
-<ul>
-<li>
-<code>oop-only</code> ensures that the plugin is only run out-of-process; if
-this is not possible, the plugin will not be executed at all if this
-option is set.
-
-</li><li>
-<code>close-stderr</code> ensures that <code>stderr</code> is closed during the
-execution of the plugin.  This is useful if the plugin uses libraries
-that write (error) messages to <code>stderr</code> and where this behavior 
cannot be 
-turned off.  This option only works if the plugin is executed out-of-process.
-
-</li><li>
-<code>close-stdout</code> ensures that <code>stdout</code> is closed during the
-execution of the plugin.  This is useful if the plugin uses libraries
-that write messages to <code>stdout</code> and where this behavior cannot be 
-turned off.  This option only works if the plugin is executed out-of-process.
-
-</li><li>
-<code>force-kill</code> kills and restarts the plugin process for each
-file that is being analyzed.  This is useful if the plugin uses
-libraries that keep global state between runs that is problematic or
-if the plugin uses libraries that are known to have serious resource
-leaks (such as memory leaks).
-
-</li><li>
-<code>want-tail</code> 
-In order to limit memory consumption, limit the amount if reading from
-disk and to keep the API simple, the &lsquo;<samp>data</samp>&rsquo; argument 
passed to
-the <code>EXTRACTOR_XXX_extract</code> method bounded (to 32 MB of normal
-data; for compressed data, a limit of 16 MB is imposed).<a name="DOCF4" 
href="#FOOT4">(4)</a>  Since
-some file formats contain meta data at the end of the file, this option
-provides a way for plugins to access not the first 16&ndash;32 MB of a file
-but instead the last (roughly) 32 MB. 
-
-<p>Note that even for files larger than 32 MB, &lsquo;<samp>size</samp>&rsquo; 
is not
-guaranteed to be 32 MB since &lsquo;<samp>data</samp>&rsquo; will be aligned 
to the page
-size of the operating system.  However, the last byte of 
&lsquo;<samp>data</samp>&rsquo;
-is guaranteed to be the last byte of the file.  Furthermore, if the
-file was large and compressed, unlike in the case of meta data
-extraction from the header, the end of the file will not be
-automatically decompressed by <acronym>GNU libextractor</acronym>.  
-</p>
-</li></ul>
-
-<p>Note that using options other than <code>want-tail</code> is pretty much
-always a kludge and should thus be avoided.
-</p>
-<hr size="6">
-<a name="Example-for-an-options-method"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Plugin-execution-options" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Up 
section"> Up </a>]</td>
-<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="section">8.3 Example for an options method</h2>
-
-<p>The following example shows how a plugin can set some of the options listed 
above:
-</p><table><tr><td>&nbsp;</td><td><pre class="verbatim">const char *
-EXTRACTOR_id3_options ()
-{
-  return &quot;close-stderr;want-tail&quot;;
-}
-</pre></td></tr></table>
-
-<hr size="6">
-<a name="Internal-utility-functions"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Example-for-an-options-method" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Reporting-bugs" title="Next 
section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Reporting-bugs" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Internal-utility-functions-1"></a>
-<h1 class="chapter">9. Internal utility functions</h1>
-
-<p>Some plugins link against the <code>libextractor_common</code> library which
-provides common abstractions needed by many plugins.  This section
-documents this internal API for plugin developers.  Note that the headers
-for this library are (intentionally) not installed: we do not consider
-this API stable and it should hence only be used by plugins that are 
-build and shipped with GNU libextractor.  Third-party plugins should
-not use it.
-</p>
-<p>&lsquo;<tt>convert_numeric.h</tt>&rsquo; defines various conversion 
functions for
-numbers (in particular, byte-order conversion for floating point
-numbers).  
-</p>
-<p>&lsquo;<tt>unzip.h</tt>&rsquo; defines an API for accessing compressed 
files.
-</p>
-<p>&lsquo;<tt>pack.h</tt>&rsquo; provides an interpreter for unpacking structs 
of integer
-numbers from streams and converting from big or little endian to host
-byte order at the same time.
-</p>
-<p>&lsquo;<tt>convert.h</tt>&rsquo; provides a function for character set 
conversion described
-below.
-</p>
-<dl>
-<dt><a 
name="index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8"></a><u>Function:</u>
 char * <b>EXTRACTOR_common_convert_to_utf8</b><i>(const char *input, size_t 
len, const char * charset)</i></dt>
-<dd><a name="index-UTF_002d8"></a>
-<a name="index-character-set"></a>
-<a name="index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8-1"></a>
-<p>Various <acronym>GNU libextractor</acronym> plugins make use of the internal
-&lsquo;<tt>convert.h</tt>&rsquo; header which defines a function
-</p>
-<p><tt>EXTRACTOR_common_convert_to_utf8</tt> which can be used to easily 
convert text from
-any character set to UTF-8.  This conversion is important since the
-linked list of keywords that is returned by <acronym>GNU 
libextractor</acronym> is
-expected to contain only UTF-8 strings.  Naturally, proper conversion
-may not always be possible since some file formats fail to specify the
-character set.  In that case, it is often better to not convert at
-all.
-</p>
-<p>The arguments to <tt>EXTRACTOR_common_convert_to_utf8</tt> are the input 
string (which
-does <em>not</em> have to be zero-terminated), the length of the input
-string, and the character set (which <em>must</em> be zero-terminated).
-Which character sets are supported depends on the platform, a list can
-generally be obtained using the <code>iconv -l</code> command.  The
-return value from <tt>EXTRACTOR_common_convert_to_utf8</tt> is a 
zero-terminated string
-in UTF-8 format.  The responsibility to free the string is with the
-caller, so storing the string in the keyword list is acceptable.
-</p></dd></dl>
-
-
-
-
-
-<hr size="6">
-<a name="Reporting-bugs"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Copying" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Copying" title="Next chapter"> 
&gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Reporting-bugs-1"></a>
-<h1 class="chapter">10. Reporting bugs</h1>
-
-<a name="index-bug"></a>
-<p><acronym>GNU libextractor</acronym> uses the <a 
href="http://gnunet.org/bugs/";>Mantis bugtracking system</a>.  If possible, 
please report bugs there.  You can also e-mail
-the <acronym>GNU libextractor</acronym> mailinglist at <a 
href="address@hidden">address@hidden</a>.
-</p>
-
-
-
-<hr size="6">
-<a name="Copying"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Reporting-bugs" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Preamble" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Reporting-bugs" title="Beginning 
of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="GNU-GENERAL-PUBLIC-LICENSE"></a>
-<h1 class="appendix">A. GNU GENERAL PUBLIC LICENSE</h1>
-
-<a name="index-GPL_002c-GNU-General-Public-License"></a>
-<p align="center"> Version 2, June 1991
-</p>
-<table><tr><td>&nbsp;</td><td><pre class="display">Copyright &copy; 1989, 1991 
Free Software Foundation, Inc.
-59 Temple Place &ndash; Suite 330, Boston, MA 02111-1307, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-</pre></td></tr></table>
-
-<hr size="6">
-<a name="Preamble"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Copying" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a 
href="#How-to-Apply-These-Terms-to-Your-New-Programs" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Copying" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Copying" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h3 class="appendixsubsec">A.0.1 Preamble</h3>
-
-<p>  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software&mdash;to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation&rsquo;s software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-</p>
-<p>  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-</p>
-<p>  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-</p>
-<p>  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-</p>
-<p>  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-</p>
-<p>  Also, for each author&rsquo;s protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors&rsquo; reputations.
-</p>
-<p>  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone&rsquo;s free use or not licensed at all.
-</p>
-<p>  The precise terms and conditions for copying, distribution and
-modification follow.
-</p>
-
-<ol>
-<li>
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The &ldquo;Program&rdquo;, 
below,
-refers to any such program or work, and a &ldquo;work based on the 
Program&rdquo;
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term &ldquo;modification&rdquo;.)  Each licensee is addressed as 
&ldquo;you&rdquo;.
-
-<p>Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-</p>
-</li><li>
-You may copy and distribute verbatim copies of the Program&rsquo;s
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-<p>You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-</p>
-</li><li>
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-<ol>
-<li>
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-</li><li>
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
-</li><li>
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License.  (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
-</li></ol>
-
-<p>These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-</p>
-<p>Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-</p>
-<p>In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-</p>
-</li><li>
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-<ol>
-<li>
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
-</li><li>
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-</li><li>
-Accompany it with the information you received as to the offer
-to distribute corresponding source code.  (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
-</li></ol>
-
-<p>The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-</p>
-<p>If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-</p>
-</li><li>
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-</li><li>
-You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-</li><li>
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients&rsquo; exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-</li><li>
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-<p>If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-</p>
-<p>It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-</p>
-<p>This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-</p>
-</li><li>
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-</li><li>
-The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-<p>Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and &ldquo;any
-later version&rdquo;, you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-</p>
-</li><li>
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-
-</li><li>
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER 
EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-</li><li>
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-</li></ol>
-
-
-
-<hr size="6">
-<a name="How-to-Apply-These-Terms-to-Your-New-Programs"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Preamble" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" title="Next section 
in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Copying" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Copying" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" title="Next 
chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h2 class="unnumberedsec">How to Apply These Terms to Your New Programs</h2>
-
-<p>  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-</p>
-<p>  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the &ldquo;copyright&rdquo; line and a pointer to where the full notice is 
found.
-</p>
-<table><tr><td>&nbsp;</td><td><pre class="smallexample"><var>one line to give 
the program's name and an idea of what it does.</var>
-Copyright (C) 19<var>yy</var>  <var>name of author</var>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-</pre></td></tr></table>
-
-<p>Also add information on how to contact you by electronic and paper mail.
-</p>
-<p>If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-</p>
-<table><tr><td>&nbsp;</td><td><pre class="smallexample">Gnomovision version 
69, Copyright (C) 19<var>yy</var> <var>name of author</var>
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c' 
-for details.
-</pre></td></tr></table>
-
-<p>The hypothetical commands &lsquo;<samp>show w</samp>&rsquo; and 
&lsquo;<samp>show c</samp>&rsquo; should show
-the appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than &lsquo;<samp>show 
w</samp>&rsquo; and
-&lsquo;<samp>show c</samp>&rsquo;; they could even be mouse-clicks or menu 
items&mdash;whatever
-suits your program.
-</p>
-<p>You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, 
if
-necessary.  Here is a sample; alter the names:
-</p>
-<table><tr><td>&nbsp;</td><td><pre class="smallexample">Yoyodyne, Inc., hereby 
disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written 
-by James Hacker.
-
-<var>signature of Ty Coon</var>, 1 April 1989
-Ty Coon, President of Vice
-</pre></td></tr></table>
-
-<p>This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-</p>
-<hr size="6">
-<a name="Concept-Index"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a 
href="#How-to-Apply-These-Terms-to-Your-New-Programs" title="Previous section 
in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Next section in reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Copying" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Next chapter"> &gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Concept-Index-1"></a>
-<h1 class="unnumbered">Concept Index</h1>
-
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Concept-Index-1_cp_letter-B" class="summary-letter"><b>B</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-C" class="summary-letter"><b>C</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-D" class="summary-letter"><b>D</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-E" class="summary-letter"><b>E</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-G" class="summary-letter"><b>G</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-I" class="summary-letter"><b>I</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-J" class="summary-letter"><b>J</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-L" class="summary-letter"><b>L</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-M" class="summary-letter"><b>M</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-P" class="summary-letter"><b>P</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-R" class="summary-letter"><b>R</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-S" class="summary-letter"><b>S</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-T" class="summary-letter"><b>T</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-U" class="summary-letter"><b>U</b></a>
- &nbsp; 
-</td></tr></table>
-<table border="0" class="index-cp">
-<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-B">B</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-bug">bug</a></td><td 
valign="top"><a href="#Reporting-bugs">10. Reporting bugs</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-bus-error">bus error</a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-C">C</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-character-set">character 
set</a></td><td valign="top"><a href="#Internal-utility-functions">9. Internal 
utility functions</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-concurrency">concurrency</a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-concurrency-1">concurrency</a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-concurrency-2">concurrency</a></td><td valign="top"><a 
href="#Utility-functions">6. Utility functions</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-D">D</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-directory-structure">directory 
structure</a></td><td valign="top"><a href="#Preparation">2. 
Preparation</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-E">E</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-environment-variables">environment variables</a></td><td 
valign="top"><a href="#Preparation">2. Preparation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-error-handling">error 
handling</a></td><td valign="top"><a href="#Introduction">1. 
Introduction</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-G">G</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-gettext">gettext</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-gettext-1">gettext</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-GPL_002c-GNU-General-Public-License">GPL, GNU General Public 
License</a></td><td valign="top"><a href="#Copying">A. GNU GENERAL PUBLIC 
LICENSE</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-I">I</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-internationalization">internationalization</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-internationalization-1">internationalization</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-J">J</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Java">Java</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-L">L</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-license">license</a></td><td 
valign="top"><a href="#Introduction">1. Introduction</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-M">M</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Mono">Mono</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-P">P</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-packageing">packageing</a></td><td valign="top"><a 
href="#Preparation">2. Preparation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Perl">Perl</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-PHP">PHP</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-plugin">plugin</a></td><td 
valign="top"><a href="#Introduction">1. Introduction</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-plugin-1">plugin</a></td><td 
valign="top"><a href="#Preparation">2. Preparation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Python">Python</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-R">R</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-reentrant">reentrant</a></td><td 
valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-reentrant-1">reentrant</a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-reentrant-2">reentrant</a></td><td valign="top"><a 
href="#Utility-functions">6. Utility functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Ruby">Ruby</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-S">S</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-SIGBUS">SIGBUS</a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-T">T</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-thread_002dsafety">thread-safety</a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-thread_002dsafety-1">thread-safety</a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-thread_002dsafety-2">thread-safety</a></td><td valign="top"><a 
href="#Utility-functions">6. Utility functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-threads">threads</a></td><td 
valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-threads-1">threads</a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-threads-2">threads</a></td><td 
valign="top"><a href="#Utility-functions">6. Utility functions</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Concept-Index-1_cp_letter-U">U</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-UTF_002d8">UTF-8</a></td><td 
valign="top"><a href="#Internal-utility-functions">9. Internal utility 
functions</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-</table>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Concept-Index-1_cp_letter-B" class="summary-letter"><b>B</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-C" class="summary-letter"><b>C</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-D" class="summary-letter"><b>D</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-E" class="summary-letter"><b>E</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-G" class="summary-letter"><b>G</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-I" class="summary-letter"><b>I</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-J" class="summary-letter"><b>J</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-L" class="summary-letter"><b>L</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-M" class="summary-letter"><b>M</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-P" class="summary-letter"><b>P</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-R" class="summary-letter"><b>R</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-S" class="summary-letter"><b>S</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-T" class="summary-letter"><b>T</b></a>
- &nbsp; 
-<a href="#Concept-Index-1_cp_letter-U" class="summary-letter"><b>U</b></a>
- &nbsp; 
-</td></tr></table>
-
-<hr size="6">
-<a name="Function-and-Data-Index"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Concept-Index" title="Previous 
section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Type-Index" title="Next section in 
reading order"> &gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Concept-Index" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[<a href="#Type-Index" title="Next chapter"> 
&gt;&gt; </a>]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Function-and-Data-Index-1"></a>
-<h1 class="unnumbered">Function and Data Index</h1>
-
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Function-and-Data-Index-1_fn_symbol-1" 
class="summary-letter"><b>(</b></a>
- &nbsp; 
-<br>
-<a href="#Function-and-Data-Index-1_fn_letter-E" 
class="summary-letter"><b>E</b></a>
- &nbsp; 
-</td></tr></table>
-<table border="0" class="index-fn">
-<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a 
name="Function-and-Data-Index-1_fn_symbol-1">(</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-_0028"><code>(</code></a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a 
name="Function-and-Data-Index-1_fn_letter-E">E</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8"><code>EXTRACTOR_common_convert_to_utf8</code></a></td><td
 valign="top"><a href="#Internal-utility-functions">9. Internal utility 
functions</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8-1"><code>EXTRACTOR_common_convert_to_utf8</code></a></td><td
 valign="top"><a href="#Internal-utility-functions">9. Internal utility 
functions</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fextract"><code>EXTRACTOR_extract</code></a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fextract-1"><code>EXTRACTOR_extract</code></a></td><td
 valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fget_005fmax"><code>EXTRACTOR_metatype_get_max</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fdescription"><code>EXTRACTOR_metatype_to_description</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fdescription-1"><code>EXTRACTOR_metatype_to_description</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fstring"><code>EXTRACTOR_metatype_to_string</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fstring-1"><code>EXTRACTOR_metatype_to_string</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmeta_005fdata_005fprint"><code>EXTRACTOR_meta_data_print</code></a></td><td
 valign="top"><a href="#Meta-data-printing">6.2 Meta data printing</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd"><code>EXTRACTOR_plugin_add</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd-1"><code>EXTRACTOR_plugin_add</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fconfig"><code>EXTRACTOR_plugin_add_config</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fconfig-1"><code>EXTRACTOR_plugin_add_config</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fdefaults"><code>EXTRACTOR_plugin_add_defaults</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fdefaults-1"><code>EXTRACTOR_plugin_add_defaults</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove"><code>EXTRACTOR_plugin_remove</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove-1"><code>EXTRACTOR_plugin_remove</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove_005fall"><code>EXTRACTOR_plugin_remove_all</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove_005fall-1"><code>EXTRACTOR_plugin_remove_all</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fVERSION"><code>EXTRACTOR_VERSION</code></a></td><td 
valign="top"><a href="#Utility-Constants">6.1 Utility Constants</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-</table>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Function-and-Data-Index-1_fn_symbol-1" 
class="summary-letter"><b>(</b></a>
- &nbsp; 
-<br>
-<a href="#Function-and-Data-Index-1_fn_letter-E" 
class="summary-letter"><b>E</b></a>
- &nbsp; 
-</td></tr></table>
-
-<hr size="6">
-<a name="Type-Index"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Previous section in reading order"> &lt; </a>]</td>
-<td valign="middle" align="left">[ &gt; ]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
-<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
-<td valign="middle" align="left">[ &gt;&gt; ]</td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left"> &nbsp; </td>
-<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<a name="Type-Index-1"></a>
-<h1 class="unnumbered">Type Index</h1>
-
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Type-Index-1_tp_letter-E" class="summary-letter"><b>E</b></a>
- &nbsp; 
-<a href="#Type-Index-1_tp_letter-S" class="summary-letter"><b>S</b></a>
- &nbsp; 
-</td></tr></table>
-<table border="0" class="index-tp">
-<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Type-Index-1_tp_letter-E">E</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-enum-EXTRACTOR_005fMetaFormat"><code>enum 
EXTRACTOR_MetaFormat</code></a></td><td valign="top"><a 
href="#Meta-formats">4.3 Meta formats</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-enum-EXTRACTOR_005fMetaType"><code>enum 
EXTRACTOR_MetaType</code></a></td><td valign="top"><a href="#Meta-types">4.2 
Meta types</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-enum-EXTRACTOR_005fOptions"><code>enum 
EXTRACTOR_Options</code></a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fMetaDataProcessor"><code>EXTRACTOR_MetaDataProcessor</code></a></td><td
 valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fPluginList"><code>EXTRACTOR_PluginList</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-<tr><th><a name="Type-Index-1_tp_letter-S">S</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-struct-EXTRACTOR_005fPluginList"><code>struct 
EXTRACTOR_PluginList</code></a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
-<tr><td colspan="3"> <hr></td></tr>
-</table>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Type-Index-1_tp_letter-E" class="summary-letter"><b>E</b></a>
- &nbsp; 
-<a href="#Type-Index-1_tp_letter-S" class="summary-letter"><b>S</b></a>
- &nbsp; 
-</td></tr></table>
-
-<hr size="6">
-<a name="SEC_Foot"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h1>Footnotes</h1>
-<h3><a name="FOOT1" href="#DOCF1">(1)</a></h3>
-<p>Some distributions ship <code>extract</code> in a
-seperate package.
-</p><h3><a name="FOOT2" href="#DOCF2">(2)</a></h3>
-<p>It
-maybe possible to switch to GPLv3 in the future.  For this, an audit
-of the license status of our dependencies would be required.  The new
-code that was developed specifically for <acronym>GNU libextractor</acronym> 
has
-always been licensed under GPLv2 <em>or any later version</em>.
-</p><h3><a name="FOOT3" href="#DOCF3">(3)</a></h3>
-<p>Debian policy
-furthermore requires a &lsquo;<tt>-dev</tt>&rsquo; (meta) package that would 
depend on
-all of the above packages.
-</p><h3><a name="FOOT4" href="#DOCF4">(4)</a></h3>
-<p>If
-<acronym>GNU libextractor</acronym> was given a pointer to an existing, 
uncompressed block of
-data in memory, no bound is imposed for plugins executing in-process;
-for out-of-process plugins, a 32 MB limit is still imposed.
-</p><hr size="1">
-<a name="SEC_Contents"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h1>Table of Contents</h1>
-<div class="contents">
-
-<ul class="toc">
-  <li><a name="toc-Introduction-1" href="#Introduction">1. 
Introduction</a></li>
-  <li><a name="toc-Preparation-1" href="#Preparation">2. Preparation</a>
-  <ul class="toc">
-    <li><a name="toc-Installation-on-GNU_002fLinux" 
href="#Installation-on-GNU_002fLinux">2.1 Installation on GNU/Linux</a></li>
-    <li><a name="toc-Installation-on-FreeBSD" 
href="#Installation-on-FreeBSD">2.2 Installation on FreeBSD</a></li>
-    <li><a name="toc-Installation-on-OpenBSD" 
href="#Installation-on-OpenBSD">2.3 Installation on OpenBSD</a></li>
-    <li><a name="toc-Installation-on-NetBSD" 
href="#Installation-on-NetBSD">2.4 Installation on NetBSD</a></li>
-    <li><a name="toc-Installation-using-MinGW" 
href="#Installation-using-MinGW">2.5 Installation using MinGW</a></li>
-    <li><a name="toc-Installation-on-OS-X" href="#Installation-on-OS-X">2.6 
Installation on OS X</a>
-    <ul class="toc">
-      <li><a name="toc-Installing-and-uninstalling-the-framework" 
href="#Installing-and-uninstalling-the-framework">2.6.1 Installing and 
uninstalling the framework</a></li>
-      <li><a name="toc-Using-the-framework" href="#Using-the-framework">2.6.2 
Using the framework</a></li>
-      <li><a name="toc-Example-for-using-the-framework" 
href="#Example-for-using-the-framework">2.6.3 Example for using the 
framework</a></li>
-      <li><a name="toc-Example-for-using-the-dynamic-library" 
href="#Example-for-using-the-dynamic-library">2.6.4 Example for using the 
dynamic library</a></li>
-    </ul></li>
-    <li><a name="toc-Note-to-package-maintainers" 
href="#Note-to-package-maintainers">2.7 Note to package maintainers</a></li>
-  </ul></li>
-  <li><a name="toc-Generalities-1" href="#Generalities">3. Generalities</a>
-  <ul class="toc">
-    <li><a name="toc-Introduction-to-the-_0060_0060extract_0027_0027-command" 
href="#Introduction-to-the-_0060_0060extract_0027_0027-command">3.1 
Introduction to the &ldquo;extract&rdquo; command</a></li>
-    <li><a name="toc-Common-usage-examples-for-_0060_0060extract_0027_0027" 
href="#Common-usage-examples-for-_0060_0060extract_0027_0027">3.2 Common usage 
examples for &ldquo;extract&rdquo;</a></li>
-    <li><a name="toc-Introduction-to-the-libextractor-library" 
href="#Introduction-to-the-libextractor-library">3.3 Introduction to the 
libextractor library</a></li>
-  </ul></li>
-  <li><a name="toc-Extracting-meta-data-1" href="#Extracting-meta-data">4. 
Extracting meta data</a>
-  <ul class="toc">
-    <li><a name="toc-Plugin-management-1" href="#Plugin-management">4.1 Plugin 
management</a></li>
-    <li><a name="toc-Meta-types-1" href="#Meta-types">4.2 Meta types</a></li>
-    <li><a name="toc-Meta-formats-1" href="#Meta-formats">4.3 Meta 
formats</a></li>
-    <li><a name="toc-Extracting-1" href="#Extracting">4.4 Extracting</a></li>
-  </ul></li>
-  <li><a name="toc-Language-bindings-1" href="#Language-bindings">5. Language 
bindings</a>
-  <ul class="toc">
-    <li><a name="toc-Java" href="#Java">5.1 Java</a></li>
-    <li><a name="toc-Mono" href="#Mono">5.2 Mono</a></li>
-    <li><a name="toc-Perl" href="#Perl">5.3 Perl</a></li>
-    <li><a name="toc-Python" href="#Python">5.4 Python</a></li>
-    <li><a name="toc-PHP" href="#PHP">5.5 PHP</a></li>
-    <li><a name="toc-Ruby" href="#Ruby">5.6 Ruby</a></li>
-  </ul></li>
-  <li><a name="toc-Utility-functions-1" href="#Utility-functions">6. Utility 
functions</a>
-  <ul class="toc">
-    <li><a name="toc-Utility-Constants-1" href="#Utility-Constants">6.1 
Utility Constants</a></li>
-    <li><a name="toc-Meta-data-printing-1" href="#Meta-data-printing">6.2 Meta 
data printing</a></li>
-  </ul></li>
-  <li><a name="toc-Existing-Plugins-1" href="#Existing-Plugins">7. Existing 
Plugins</a></li>
-  <li><a name="toc-Writing-new-Plugins-1" href="#Writing-new-Plugins">8. 
Writing new Plugins</a>
-  <ul class="toc">
-    <li><a name="toc-Example-for-a-minimal-extract-method" 
href="#Example-for-a-minimal-extract-method">8.1 Example for a minimal extract 
method</a></li>
-    <li><a name="toc-Plugin-execution-options" 
href="#Plugin-execution-options">8.2 Plugin execution options</a></li>
-    <li><a name="toc-Example-for-an-options-method" 
href="#Example-for-an-options-method">8.3 Example for an options method</a></li>
-  </ul></li>
-  <li><a name="toc-Internal-utility-functions-1" 
href="#Internal-utility-functions">9. Internal utility functions</a></li>
-  <li><a name="toc-Reporting-bugs-1" href="#Reporting-bugs">10. Reporting 
bugs</a></li>
-  <li><a name="toc-GNU-GENERAL-PUBLIC-LICENSE" href="#Copying">A. GNU GENERAL 
PUBLIC LICENSE</a>
-  <ul class="toc">
-
-    <ul class="toc">
-      <li><a name="toc-Preamble" href="#Preamble">A.0.1 Preamble</a></li>
-    </ul></li>
-    <li><a name="toc-How-to-Apply-These-Terms-to-Your-New-Programs" 
href="#How-to-Apply-These-Terms-to-Your-New-Programs">How to Apply These Terms 
to Your New Programs</a></li>
-  </ul></li>
-  <li><a name="toc-Concept-Index-1" href="#Concept-Index">Concept 
Index</a></li>
-  <li><a name="toc-Function-and-Data-Index-1" 
href="#Function-and-Data-Index">Function and Data Index</a></li>
-  <li><a name="toc-Type-Index-1" href="#Type-Index">Type Index</a></li>
-</ul>
-</div>
-<hr size="1">
-<a name="SEC_Overview"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h1>Short Table of Contents</h1>
-<div class="shortcontents">
-<ul class="toc">
-<li><a name="stoc-Introduction-1" href="#Introduction">1. Introduction</a></li>
-<li><a name="stoc-Preparation-1" href="#Preparation">2. Preparation</a></li>
-<li><a name="stoc-Generalities-1" href="#Generalities">3. Generalities</a></li>
-<li><a name="stoc-Extracting-meta-data-1" href="#Extracting-meta-data">4. 
Extracting meta data</a></li>
-<li><a name="stoc-Language-bindings-1" href="#Language-bindings">5. Language 
bindings</a></li>
-<li><a name="stoc-Utility-functions-1" href="#Utility-functions">6. Utility 
functions</a></li>
-<li><a name="stoc-Existing-Plugins-1" href="#Existing-Plugins">7. Existing 
Plugins</a></li>
-<li><a name="stoc-Writing-new-Plugins-1" href="#Writing-new-Plugins">8. 
Writing new Plugins</a></li>
-<li><a name="stoc-Internal-utility-functions-1" 
href="#Internal-utility-functions">9. Internal utility functions</a></li>
-<li><a name="stoc-Reporting-bugs-1" href="#Reporting-bugs">10. Reporting 
bugs</a></li>
-<li><a name="stoc-GNU-GENERAL-PUBLIC-LICENSE" href="#Copying">A. GNU GENERAL 
PUBLIC LICENSE</a></li>
-<li><a name="stoc-Concept-Index-1" href="#Concept-Index">Concept Index</a></li>
-<li><a name="stoc-Function-and-Data-Index-1" 
href="#Function-and-Data-Index">Function and Data Index</a></li>
-<li><a name="stoc-Type-Index-1" href="#Type-Index">Type Index</a></li>
-</ul>
-</div>
-<hr size="1">
-<a name="SEC_About"></a>
-<table cellpadding="1" cellspacing="1" border="0">
-<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
-<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
-<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
-</tr></table>
-<h1>About This Document</h1>
-<p>
-  This document was generated by <em>Christian Grothoff</em> on <em>January 
13, 2010</em> using <a href="http://www.nongnu.org/texi2html/";><em>texi2html 
1.82</em></a>.
-</p>
-<p>
-  The buttons in the navigation panels have the following meaning:
-</p>
-<table border="1">
-  <tr>
-    <th> Button </th>
-    <th> Name </th>
-    <th> Go to </th>
-    <th> From 1.2.3 go to</th>
-  </tr>
-  <tr>
-    <td align="center"> [ &lt; ] </td>
-    <td align="center">Back</td>
-    <td>Previous section in reading order</td>
-    <td>1.2.2</td>
-  </tr>
-  <tr>
-    <td align="center"> [ &gt; ] </td>
-    <td align="center">Forward</td>
-    <td>Next section in reading order</td>
-    <td>1.2.4</td>
-  </tr>
-  <tr>
-    <td align="center"> [ &lt;&lt; ] </td>
-    <td align="center">FastBack</td>
-    <td>Beginning of this chapter or previous chapter</td>
-    <td>1</td>
-  </tr>
-  <tr>
-    <td align="center"> [ Up ] </td>
-    <td align="center">Up</td>
-    <td>Up section</td>
-    <td>1.2</td>
-  </tr>
-  <tr>
-    <td align="center"> [ &gt;&gt; ] </td>
-    <td align="center">FastForward</td>
-    <td>Next chapter</td>
-    <td>2</td>
-  </tr>
-  <tr>
-    <td align="center"> [Top] </td>
-    <td align="center">Top</td>
-    <td>Cover (top) of document</td>
-    <td> &nbsp; </td>
-  </tr>
-  <tr>
-    <td align="center"> [Contents] </td>
-    <td align="center">Contents</td>
-    <td>Table of contents</td>
-    <td> &nbsp; </td>
-  </tr>
-  <tr>
-    <td align="center"> [Index] </td>
-    <td align="center">Index</td>
-    <td>Index</td>
-    <td> &nbsp; </td>
-  </tr>
-  <tr>
-    <td align="center"> [ ? ] </td>
-    <td align="center">About</td>
-    <td>About (help)</td>
-    <td> &nbsp; </td>
-  </tr>
-</table>
-
-<p>
-  where the <strong> Example </strong> assumes that the current position is at 
<strong> Subsubsection One-Two-Three </strong> of a document of the following 
structure:
-</p>
-
-<ul>
-  <li> 1. Section One
-    <ul>
-      <li>1.1 Subsection One-One
-        <ul>
-          <li>...</li>
-        </ul>
-      </li>
-      <li>1.2 Subsection One-Two
-        <ul>
-          <li>1.2.1 Subsubsection One-Two-One</li>
-          <li>1.2.2 Subsubsection One-Two-Two</li>
-          <li>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp;
-            <strong>&lt;== Current Position </strong></li>
-          <li>1.2.4 Subsubsection One-Two-Four</li>
-        </ul>
-      </li>
-      <li>1.3 Subsection One-Three
-        <ul>
-          <li>...</li>
-        </ul>
-      </li>
-      <li>1.4 Subsection One-Four</li>
-    </ul>
-  </li>
-</ul>
-
-<hr size="1">
-<p>
- <font size="-1">
-  This document was generated by <em>Christian Grothoff</em> on <em>January 
13, 2010</em> using <a href="http://www.nongnu.org/texi2html/";><em>texi2html 
1.82</em></a>.
- </font>
- <br>
-
-</p>
-</body>
-</html>

Deleted: Extractor-docs/WWW/extractor.pdf
===================================================================
(Binary files differ)

Modified: Extractor-docs/WWW/index.html
===================================================================
--- Extractor-docs/WWW/index.html       2012-09-06 07:53:34 UTC (rev 23666)
+++ Extractor-docs/WWW/index.html       2012-09-06 10:54:46 UTC (rev 23667)
@@ -1,7 +1,35 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
-<html><head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GNU libextractor - GNU Project - Free Software Foundation</title>
+<!--#include virtual="/server/header.html" -->
+<!-- Parent-Version: 1.69 -->
+
+<!-- Instructions for adapting this boilerplate to a new project: -->
+
+<!-- 1. In the line above starting "Parent-Version:", remove the
+        "$Revision...$" from around the revision number,
+        leaving just Parent-Version: and the number. -->
+
+<!-- 2. Replace "baz" with the name of your project.
+        You should be able to do this with search and replace;
+        making sure that the search is case insensitive and
+        that the case of the replacement matches the case
+        of the string found. In Emacs, query-replace will do this
+        when case-fold-search and case-replace are both non-nil
+        and both search and replacement string are given in lower case. -->
+
+<!-- 3. Of course update the actual information according to your project,
+        such as mailing lists, project locations, and maintainer name.  -->
+
+<!-- 4. You can use the patch-from-parent script to semi-automate
+        merging future changes to the boilerplate with your file:
+        
http://web.cvs.savannah.gnu.org/viewvc/*checkout*/www/server/standards/patch-from-parent?root=www&content-type=text%2Fplain
+        -->
+
+<!-- If you would like to make sure your page validates with HTML5, that
+     would be a good thing.  To do that, change the first line from
+     to /server/html5-header.html before trying the validation.  Maybe
+     someday we will be able to make /server/header be HTML5.  -->
+
+<title>Libextractor
+- GNU Project - Free Software Foundation</title>
 <meta name="content-language" content="en">
 <meta name="language" content="en">
 <meta name="description" content="a simple library for keyword extraction">
@@ -15,40 +43,19 @@
 <meta http-equiv="expires" content="43200">
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <link rel="SHORTCUT ICON" href="favicon.ico">
-</head>
-<body>
-<table width="99%" border="0" cellpadding="0" cellspacing="0">
-<tbody>
-<tr><td colspan="2" width="99%" bgcolor="#99bbff" align="center">GNU 
libextractor - a simple library for keyword extraction</td></tr>
-<tr><td valign="top">
-<table width="15%" border="0" cellpadding="2" cellspacing="3">
-<tbody>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="http://www.gnu.org/software/libextractor/";>Home</a></th></tr>
-<tr><td bgcolor="efefef"><a href="#about">About</a></td></tr>
-<tr><td bgcolor="efefef"><a href="#news">Recent News</a></td></tr>
-<tr><td bgcolor="efefef"><a href="#contact">Contact</a></td></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="download.html">Download</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="documentation.html">Documentation</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a href="extractor.html">Reference 
Manual</a></th></tr>
-<tr><th nowrap="nowrap" bgcolor="99BBFF"><a 
href="http://freshmeat.net/projects/libextractor/";>Freshmeat Page</a></th></tr>
-</tbody>
-</table>
-</td>
-<td valign="top"><a name="about"></a>
-<h2>GNU libextractor</h2>
+<!--#include virtual="/server/banner.html" -->
+<!--#set var="article_name" value="/server/standards/boilerplate" -->
+<!--#include virtual="/server/gnun/initial-translations-list.html" -->
+<h2>GNU Libextractor</h2>
 <img src="extractor_logo.png" alt="libextractor" vspace="0" width="136" 
border="0" height="94" hspace="0" align="right">
-<p>
-GNU libextractor is a library used to extract meta data from files of
-arbitrary type.  It is designed to use helper-libraries to perform the
-actual extraction, and to be trivially extendable by linking against
-external extractors for additional file types.  libextractor is
-a <a href="http://www.gnu.org/";>GNU</a> package.  Our official GNU
-website can be found
+
+<p>GNU Libextractor is is a library used to extract meta data from
+files of arbitrary type.  It is designed to use helper-libraries to
+perform the actual extraction, and to be trivially extendable by
+linking against external extractors for additional file types.
+libextractor is a <a href="http://www.gnu.org/";>GNU</a> package.
+Our official GNU website can be found
 at <a 
href="http://www.gnu.org/software/libextractor/";>http://www.gnu.org/software/libextractor/</a>.
-libextractor can be downloaded from this site or
-the <a href="http://www.gnu.org/prep/ftp.html";>GNU mirrors</a>.  Our
-mailinglist is at
-<a 
href="https://lists.gnu.org/mailman/listinfo/libextractor";>https://lists.gnu.org/mailman/listinfo/libextractor</a>.
 </p>
 <p>
 The goal is to provide developers of file-sharing networks, browsers
@@ -70,53 +77,343 @@
 DEB, RPM, 
 TAR(.GZ), LZH, LHA, RAR, ZIP, CAB, 7-ZIP, AR, MTREE, PAX, CPIO, ISO9660, SHAR, 
RAW, XAR
 FLV, REAL, RIFF (AVI), MPEG, QT and ASF.
-<br>
 Also, various additional MIME types are detected.
 </p>
+
+<h3 id="download">Downloading
+  Libextractor</h3>
+
+<dl>
+<dt>Source Code</dt>
+<dd>Libextractor
+can be found on the main GNU ftp server:
+<a 
href="http://ftp.gnu.org/gnu/libextractor/";>http://ftp.gnu.org/gnu/libextractor/</a>
+(via HTTP) and
+<a 
href="ftp://ftp.gnu.org/gnu/libextractor/";>ftp://ftp.gnu.org/gnu/libextractor/</a>
+(via FTP).  It can also be found
+on the <a href="/prep/ftp.html">GNU mirrors</a>;
+please
+<a href="http://ftpmirror.gnu.org/libextractor/";>use
+a mirror</a> if possible.</dd>
+
+<dt>Debian .deb package</dt>
+<dd>
+The debian package can be downloaded from the <a 
href="http://packages.debian.org/";>official debian archive</a>.
+The extract package can be found under Utilities and the library under 
Libraries.
+The respective packages for libextractor are <a 
href="http://packages.debian.org/extract";>extract</a>, <a 
href="http://packages.debian.org/libextractor";>libextractor</a> and for 
development <a 
href="http://packages.debian.org/libextractor-dev";>libextractor-dev</a>.
+<a href="http://www.backports.org/";>Backports</a> for Debian Stable are also 
available.
+</dd>
+
+<dt>Tar Package</dt>
+<dd>
+The latest version can be found on <a 
href="http://ftpmirror.gnu.org/libextractor/";>GNU mirrors</a>.  
+If the mirror does not work, you should be able to find them on the main FTP 
server at 
+<a 
href="ftp://ftp.gnu.org/gnu/libextractor/";>ftp://ftp.gnu.org/gnu/libextractor/</a>.
  
+<br>
+Latest release is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-1.0.0.tar.gz";>libextractor-1.0.0.tar.gz</a>.
+<br>
+Latest Java-binding is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-java-0.6.0.tar.gz";>libextractor-java-0.6.0.tar.gz</a>.
+<br>
+Latest Mono-binding is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-mono-0.5.23.tar.gz";>libextractor-mono-0.5.23.tar.gz</a>.
+<br>
+Latest Python-binding is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-python-0.5.tar.gz";>libextractor-python-0.5.tar.gz</a>.
+</dd>
+
+<dt>RPM Package</dt>
+<dd>
+RPMs for SuSE 9.3 can be found here (<a 
href="ftp://ftp.suse.com/pub/people/ke/9.3-i386/";>i386</a>, 
+<a href="ftp://ftp.suse.com/pub/people/ke/9.3-x86_64/";>x86_64</a>, 
+<a href="ftp://ftp.suse.com/pub/people/ke/SRPM/";>SRPM</a>)
+</dd>
+
+<dt>Windows</dt>
+<dd>
+Latest Windows binary is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-0.5.23-w32.zip";>libextractor-0.5.23-w32.zip</a>.
+</dd>
+</dl>
+
+
+
+<h3 id="documentation">Documentation</h3>
+
+<p><a href="manual/">Documentation for
+Libextractor</a>
+is available online, as
+is <a href="/manual/">documentation for most GNU software</a>.  You may
+also find more information about
+Libextractor
+by running
+<em><a href="manual/extractor.html">info&nbsp;libextractor</a></em>
+or
+<em><a href="man/libextractor.html">man&nbsp;libextractor</a></em>,
+or
+<em><a href="man/extract.html">man&nbsp;extract</a></em>,
+or by looking at
+<em>/usr/share/doc/libextractor/</em>,
+<em>/usr/local/doc/libextractor/</em>,
+or similar directories on your system.  A brief summary is available by
+running <em>extract&nbsp;--help</em>.
+</p>
 <p>
-libextractor is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or (at
-your option) any later version.
+Articles related to libextractor:
+<ul>
+<li><a href="http://www.linuxjournal.com/article/7552";>Reading File Metadata 
with extract and libextractor</a></li>
+<li><a href="http://servers.linux.com/servers/06/08/21/1558230.shtml";>How to 
recover lost files after you accidentally wipe your hard drive</a></li>
+<li><a 
href="http://www.gnucitizen.org/blog/all-your-metadata-are-belong-to-us";>All 
your Metadata are belong to Us</a></li>
+</ul>
 </p>
-<a name="news"></a><h2>Recent News</h2>
+
+
+<h3 id="mail">Mailing lists</h3>
+
+<p>Libextractor
+has the following mailing lists:</p>
+
+<ul>
+<li><a 
href="https://lists.gnu.org/mailman/listinfo/bug-libextractor";>bug-libextractor</a>
+is used to discuss most aspects of
+Libextractor,
+including development and enhancement requests, as well as bug reports.</li>
+<li><a
+href="https://lists.gnu.org/mailman/listinfo/help-libextractor";>help-libextractor</a>
 is
+for general user help and discussion.</li>
+</ul>
+
+<p>Announcements about
+Libextractor
+and most other GNU software are made on
+<a href="http://lists.gnu.org/mailman/listinfo/info-gnu";>info-gnu</a>
+(<a href="http://lists.gnu.org/archive/html/info-gnu/";>archive</a>).</p>
+
+<p>
+Security reports that should not be made immediately public can be
+sent directly to the maintainer.  If there is no response to an urgent
+issue, you can escalate to the general
+<a href="http://lists.gnu.org/mailman/listinfo/security";>security</a>
+mailing list for advice.</p>
+
+<h3 id="contribute">Getting involved</h3>
+
+<p>Development of
+Libextractor,
+and GNU in general, is a volunteer effort, and you can contribute.  For
+information, please read <a href="/help/">How to help GNU</a>.  If you'd
+like to get involved, it's a good idea to join the discussion mailing
+list (see above).</p>
+
 <dl>
- <dt>Sun Sep  5 23:42:31 CEST 2010 | Non-writeable <tt>/dev/shm/</tt> breaks 
stuff</dt>
-  <dd>If you are using GNU libextractor, be aware NOT to
-      set <tt>/dev/shm/</tt> access to read-only.  If you do, some
-      plugins will simply not work and others will be less tolerant
-      to bugs (since the out-of-process execution using shared memory
-      won't work unless you run as root).  Note that GNU libextractor
-      automatically tries to compensate for these kinds of errors and
-      will not give you any reasonable error messages in this case.
-      More details on read-only access to <tt>/dev/shm/</tt> can be found 
-      <a href="https://help.ubuntu.com/community/StricterDefaults";>here</a>.
-      Again, if you want things to work properly, do keep <tt>/dev/shm/</tt>
-      writeable!
-  </dd>
- <dt>Sun Jun 13 13:20:37 CEST 2010 | libextractor v0.6.2 released.</dt>
-  <dd>This release fixes various minor bugs and in particular adds handling for
-      failures of <tt>malloc</tt> and the like.</dd>
- <dt>Wed Jan 13 16:22:09 CET 2010 | libextractor v0.6.0 released.</dt>
-  <dd>This release breaks backwards compatibility in terms of the APIs.
-    It adds support for out-of-process execution of plugins, improves
-    binary meta data extraction, reduces the footprint (in terms of
-    linking) of the main libextractor library, improves the quality
-    and quantity of the meta data extracted by most of the plugins,
-    drops some of the less-useful plugins (printable, hashing) and
-    finally includes a complete and extensive user and developer
-    manual.  The Java binding was also updated to work with the
-    new API, bindings for other languages are still pending.</dd>
- <dt>Sat Oct 24 21:09:18 CEST 2009 | libextractor binding for Mono 
updated.</dt>
-  <dd>You can find the updated binding for Mono in the download section.</dd>
- <dt>Sat Jul  4 11:45:08 CET 2009 | libextractor v0.5.23 released.</dt>
-  <dd>This release makes the RPM extractor work with the latest librpm
-   library and links against an external version of libexiv2 (instead of
-   using an internal, outdated version of the code).</dd>
+
+<dt>Development</dt>
+
+<dd>Known bugs and open feature requests are tracked in 
+    <a href="https://gnunet.org/bugs/";>our bugtracker</a>.</dd>
+
+<dt>Subversion access</dt>
+<dd>
+You can access the current development version of libextractor using
+<pre>$ svn checkout https://gnunet.org/svn/Extractor</pre><br>
+A Java binding for libextractor is in
+<pre>$ svn checkout https://gnunet.org/svn/Extractor-java</pre><br>
+A Mono binding for libextractor is in
+<pre>$ svn checkout https://gnunet.org/svn/Extractor-mono</pre><br>
+A Python binding can be found under
+<pre>$ svn checkout https://gnunet.org/svn/Extractor-python</pre>
+A source package is <a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-python-0.5.tar.gz";>here</a>.
+This binding has been packaged as a python egg, available <a 
href="http://cheeseshop.python.org/pypi/Extractor";>here</a>
+A second Python binding that includes a binding for doodle can be found <a 
href="http://grothoff.org/christian/doodle/download/nokos_extractor_doodle_python.zip";>here</a>.
+<br>
+A Perl binding is in <a 
href="http://search.cpan.org/~flora/File-Extractor/";>CPAN</a>
+The latest version of the Perl binding is available using <tt>git clone 
git://git.perldition.org/File-Extractor.git/</tt>
+<br>
+A Ruby binding has been published <a 
href="http://raa.ruby-lang.org/project/extractor/";>here</a> (<a 
href="http://gnunet.org/libextractor/download/libextractor-ruby-0.9.tar.gz";>mirror</a>).
+Another Ruby binding has been published <a 
href="http://extractor.rubyforge.org/";>here</a> (<a 
href="http://ftpmirror.gnu.org/libextractor/libextractor-ruby-0.1.gem";>mirror</a>).
+<br>
+An initial draft of a PHP binding can be found under
+<pre>$ svn checkout https://gnunet.org/svn/Extractor-php</pre>
+</dd>
+
+
+<dt>Translating
+  Libextractor</dt>
+
+<dd>To translate
+Libextractor's
+messages into other languages, please see the <a
+href="http://translationproject.org/domain/libextractor.html";>Translation 
Project
+page for
+Libextractor</a>.
+If you have a new translation of the message strings,
+or updates to the existing strings, please have the changes made in this
+repository.  Only translations from this site will be incorporated into
+Libextractor.
+For more information, see the <a
+href="http://translationproject.org/html/welcome.html";>Translation
+Project</a>.</dd>
+
+
+<dt>Maintainer</dt>
+
+<dd>Libextractor
+is currently being maintained by <a 
href="http://grothoff.org/christian/";>Christian Grothoff</a>.</dd>
+
 </dl>
-<a name="links"></a><h2>Links</h2>
-<p>
-Related work:
+
+
+<h3 id="documentation">Quick Introduction</h3>
+
+<dl>
+<dt>Installation</dt>
+<dd>
+The simplest way to install GNU libextractor is to use one of the binary
+packages which are available online for many distributions.  Note that
+under Debian, the extract tool is in a separate
+package <tt>extract</tt> and headers required to compile other
+applications against libextractor are in <tt>libextractor-dev</tt>.
+Thus, under Debian, you should use:
+<pre>
+# apt-get install libextractor-dev extract
+</pre>
+Compiling by hand follows the usual sequence:
+<pre>
+$ tar xzvf libextractor.x.y.z.tar.gz
+$ cd libextractor.x.y.z
+$ ./configure
+$ make
+# make install
+</pre>
+Note that you need various dependencies (read <tt>README</tt>
+for an up-to-date list) in order to compile all of the plugins.
+</dd>
+<dt>Using the extract tool</dt>
+<dd>
+After installing GNU libextractor, the extract tool can be used to obtain
+meta data from documents.  By default, the extract tool uses the
+canonical set of plugins, which consists of all format-specific
+plugins supported by the current version of libextractor together with
+the mime-type detection plugin.  If you are a user
+of <a 
href="http://www.ecst.csuchico.edu/~jacobsd/bib/formats/bibtex.html";>BibTeX</a>
+the option <tt>-b</tt> is likely to come in handy to automatically
+create bibtex entries from documents that have been properly equipped
+with meta-data (if available).
+<br>
+Further options are described in the extract manpage 
(<tt>man&nbsp;1&nbsp;extract</tt>).
+</dd>
+<dt>Example Output</dt>
+<dd>
+<pre>
+$ extract libextractor-0.1.3-1.src.rpm
+Keywords for file libextractor-0.1.3-1.src.rpm:
+os - linux
+resource-identifier - http://ovmj.org/libextractor/
+group -System Environment/Libraries
+license - LGPL
+copyright - LGPL
+size - 251545
+build-host - wedge.cs.purdue.edu
+creation date - Wed Dec 25 07:50:07 2002
+description - libextractor is a simple library...
+summary - keyword extraction library
+release - 1
+version - 0.1.3
+title - libextractor
+unknown - SOURCE RPM 3.0
+mimetype - application/x-rpm
+</pre>
+<pre>
+$ extract extractor_logo.png
+Keywords for file extractor_logo.png:
+image dimensions - 272x188
+thumbnail - (binary, 5932 bytes)
+image dimensions - 272x188
+thumbnail - (binary, 6427 bytes)
+image dimensions - 272x188
+thumbnail - (binary, 6427 bytes)
+mimetype - image/png
+mimetype - image/png
+image dimensions - 272x188
+keywords - The libextractor logo
+</pre>
+</dd>
+<dt>Using the GNU libextractor library in your programs</dt>
+<dd>
+The following listing shows the code of a minimalistic program that
+uses GNU libextractor.  Compiling the fragment requires passing the
+option <tt>-lextractor</tt> to gcc.  For details and additional
+functions for loading plugins and manipulating the keyword list, see
+the libextractor manpage (<tt>man&nbsp;3&nbsp;libextractor</tt>).
+Java programmers should note that a Java class that uses JNI to
+communicate with libextractor is also available.  Python programmers
+will find that libextractor (since 0.5.0) can also be used from
+Python, just <tt>import Extractor</tt>.
+<br>
+<pre>
+#include &lt;extractor.h&gt;
+
+int 
+main (int argc, char * argv[]) 
+{
+  struct EXTRACTOR_PluginList *plugins
+    = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
+  EXTRACTOR_extract (plugins, argv[1],
+                     NULL, 0, 
+                     &amp;EXTRACTOR_meta_data_print, stdout);
+  EXTRACTOR_plugin_remove_all (plugins);
+  return 0;
+}
+</pre>
+</dd>
+<dt>Writing new Plugins for GNU libextractor</dt>
+<dd>
+The most complicated thing when writing a new plugin for GNU
+libextractor is the writing of the actual parser for a specific
+format.  Nevertheless, the basic pattern is always the same.  The
+plugin library must be called <tt>libextractor_XXX.so</tt> where XXX
+denotes the file format supported by the plugin and must be placed in
+the plugin directory (typically <tt>$PREFIX/lib/libextractor/</tt>).
+The library must export a method <tt>EXTRACTOR_XXX_extract_method</tt>
+with the following signature:
+<pre>
+void
+EXTRACTOR_XXX_extract_method (struct EXTRACTOR_ExtractContext *ec);
+</pre>
+<br>
+<tt>ec</tt> provides a callback to invoke with meta data as well as
+functions for reading data from the file that is being processed.
+Most plugins start by reading the first bytes of the file and checking that
+that the header of data matches the specific format.
+The <tt>extract</tt> function is expected to call <tt>ec-&gt;proc</tt> with 
each
+meta data item found.  <tt>ec-&gt;cls</tt> must be passed as the first
+argument to <tt>proc</tt> and other function invoked from within <tt>ec</tt>.
+Finally, <tt>ec-&gt;config</tt> is an arbitrary string of options that the 
plugin is
+free to interpret. Most plugins ignore <tt>config</tt>.
+<br>
+If the meta data extracted is a string, it is supposed to be converted
+into the UTF-8 character set by the plugin.  However, in cases where
+the character encoding used in the document is unknown, no conversion
+should be done.  Binary meta data can also be extracted.  Plugins
+indicate the format of the meta data using the <tt>format</tt>
+argument to <tt>proc</tt>.  Supported formats are UTF-8 strings, C
+strings (for strings of unknown encoding) and binary data.  In
+addition to this rough categorization, the plugin is also supposed to
+indicate the mime type of the meta data.  For strings, that mime type
+is most often <tt>text/plain</tt>.  Finally, the plugin must specify
+the meta data type.  Common meta data types are &quot;author&quot;,
+&quot;title&quot; and &quot;mime-type&quot;.  The full signature of
+the &quot;proc&quot; callback is:
+<pre>
+typedef int (*EXTRACTOR_MetaDataProcessor)(void *cls,
+                                           const char *plugin_name,
+                                           enum EXTRACTOR_MetaType type,
+                                           enum EXTRACTOR_MetaFormat format,
+                                           const char *data_mime_type,
+                                           const char *data,
+                                           size_t data_len);
+</pre>
+If &quot;proc&quot; returns non-zero, the plugin should abort 
+processing the current file and return.  
+</dd>
+<dt>Related projects and useful resources</dt>
+<dd>
 <ul>
 <li><a href="http://www.wotsit.org/";>File format database</a></li>
 <li><a href="http://getid3.sf.net/";>getid3, similar project for PHP</a></li>
@@ -126,14 +423,10 @@
 <li><a href="http://hachoir.org/";>Hachoir binary file parser</a></li>
 <li><a href="http://meta-extractor.sourceforge.net/";>Metadata Extraction Tool 
developed by the National Libary of New Zealand</a></li>
 </ul>
-Articles related to libextractor:
+</dd>
+<dt>Projects that use libextractor</dt>
+<dd>
 <ul>
-<li><a href="http://www.linuxjournal.com/article/7552";>Reading File Metadata 
with extract and libextractor</a></li>
-<li><a href="http://servers.linux.com/servers/06/08/21/1558230.shtml";>How to 
recover lost files after you accidentally wipe your hard drive</a></li>
-<li><a 
href="http://www.gnucitizen.org/blog/all-your-metadata-are-belong-to-us";>All 
your Metadata are belong to Us</a></li>
-</ul>
-Projects that use libextractor:
-<ul>
 <li><a href="http://launchpad.net/basenji";>Basenji, Portable volume 
indexer</a></li>
 <li><a href="http://grothoff.org/christian/doodle/";>doodle, index your 
disk</a></li>
 <li><a href="http://evidence.sf.net/";>Evidence, enlightened file 
manager</a></li>
@@ -144,64 +437,81 @@
 <li><a href="http://mediatomb.cc/";>MediaTomb, UPnP AV Mediaserver</a></li>
 <li><a href="http://www.edge-security.com/metagoofil.php";>Metagoofil, Metadata 
analyzer for information gathering</a></li>
 </ul>
-</p>
+</dd>
+</dl>
 
 
-<a name="contact"></a><h2>Contact</h2>
-<p>
-GNU libextractor is developed by <a 
href="http://grothoff.org/christian/";>Christian Grothoff</a> and <a 
href="http://compilers.cs.ucla.edu/~vids/";>Vids Samanta</a>.
-For questions about libextractor send email to <a 
href="mailto:address@hidden";>address@hidden</a>.
-</p>
+<h3 id="license">Licensing</h3>
 
-<p>
+<p>Libextractor
+is free software; you can redistribute it and/or modify it under the
+terms of the <a href="http://www.gnu.org/licenses/gpl.html";
+rel="license">GNU General Public License</a> as published by the Free
+Software Foundation; either version&nbsp;3 of the License, or (at your
+option) any later version.</p>
+
+
+<!-- If needed, change the copyright block at the bottom. In general,
+     pages on the GNU web server should be under CC BY-ND 3.0 US.
+     Please do NOT change or remove this without talking
+     with the webmasters or licensing team first.
+     Please make sure the copyright date is consistent with the document.
+     For web pages, it is ok to list just the latest year the document
+     was modified, or published.
+     
+     If you wish to list earlier years, that is ok too.
+     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
+     years, as long as each year in the range is in fact a copyrightable
+     year, i.e., a year in which the document was published (including
+     being publicly visible on the web or in a revision control system).
+     
+     There is more detail about copyright years in the GNU Maintainers
+     Information document, www.gnu.org/prep/maintain. -->
+
+
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+
+<p><!-- WEBMASTERS: Replace address@hidden with address@hidden and
+        remove this comment after completion. -->
+
 Please send general FSF &amp; GNU inquiries to
 <a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.
 There are also <a href="/contact/">other ways to contact</a>
-the FSF.<br />
-Please send broken links and other corrections or suggestions to
-<a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.</p>
+the FSF.  Broken links and other corrections or suggestions can be sent
+to <a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.</p>
 
-<p>Please see the <a 
href="/server/standards/README.translations.html">Translations
+<p><!-- TRANSLATORS: Ignore the original text in this paragraph,
+        replace it with the translation of these two:
+
+        We work hard and do our best to provide accurate, good quality
+        translations.  However, we are not exempt from imperfection.
+        Please send your comments and general suggestions in this regard
+        to <a href="mailto:address@hidden";>
+        &lt;address@hidden&gt;</a>.</p>
+
+        <p>For information on coordinating and submitting translations of
+        our web pages, see <a
+        href="/server/standards/README.translations.html">Translations
+        README</a>. -->
+Please see the <a
+href="/server/standards/README.translations.html">Translations
 README</a> for information on coordinating and submitting translations
 of this article.</p>
 
-<p>Copyright &copy; 2009, 2010, 2011, 2012 Free Software Foundation, Inc.</p>
+<p>Copyright &copy; 2012 Free Software Foundation, Inc.</p>
 
-<p>Verbatim copying and distribution of this entire article are
-permitted worldwide, without royalty, in any medium, provided this
-notice, and the copyright notice, are preserved.</p>
+<p>This page is licensed under a <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/3.0/us/";>Creative
+Commons Attribution-NoDerivs 3.0 United States License</a>.</p>
 
-</td>
-</tr>
-</tbody>
-</table>
-<hr>
-<a href="mailto:address@hidden";>address@hidden</a>
-
-
-<div id="translations">
-<h4>Translations of this page</h4>
-
-<!-- Please keep this list alphabetical by language code.
-     Comment what the language is for each type, i.e. de is German.
-     Write the language name in its own language (Deutsch) in the text.
-     If you add a new language here, please
-     advise address@hidden and add it to
-      - /home/www/html/server/standards/README.translations.html
-      - one of the lists under the section "Translations Underway"
-      - if there is a translation team, you also have to add an alias
-      to mail.gnu.org:/com/mailer/aliases
-     Please also check you have the language code right; see:
-     http://www.loc.gov/standards/iso639-2/php/code_list.php
-     If the 2-letter ISO 639-1 code is not available,
-     use the 3-letter ISO 639-2.
-     Please use W3C normative character entities. -->
-
-<ul class="translations-list">
-<!-- English -->
-<li><a href="/software/libextractor/index.html">English</a>&nbsp;[en]</li>
-</ul>
+<p>Updated:
+<!-- timestamp start -->
+$Date: 2012/06/10 09:00:55 $
+<!-- timestamp end -->
+</p>
 </div>
-
+</div>
 </body>
 </html>

Copied: Extractor-docs/WWW/manual/extractor.html (from rev 23661, 
Extractor-docs/WWW/extractor.html)
===================================================================
--- Extractor-docs/WWW/manual/extractor.html                            (rev 0)
+++ Extractor-docs/WWW/manual/extractor.html    2012-09-06 10:54:46 UTC (rev 
23667)
@@ -0,0 +1,2724 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html401/loose.dtd";>
+<html>
+<!-- This manual is for GNU libextractor
+(version 0.6.0, 13 January 2010).
+
+GNU libextractor is a GNU package.
+
+
+Copyright C 2007, 2010 Christian Grothoff
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+ -->
+<!-- Created on January 13, 2010 by texi2html 1.82
+texi2html was written by: 
+            Lionel Cons <address@hidden> (original author)
+            Karl Berry  <address@hidden>
+            Olaf Bachmann <address@hidden>
+            and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <address@hidden>
+-->
+<head>
+<title>The GNU libextractor Reference Manual</title>
+
+<meta name="description" content="The GNU libextractor Reference Manual">
+<meta name="keywords" content="The GNU libextractor Reference Manual">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.smallquotation {font-size: smaller}
+pre.display {font-family: serif}
+pre.format {font-family: serif}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: serif; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: serif; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.roman {font-family:serif; font-weight:normal;}
+span.sansserif {font-family:sans-serif; font-weight:normal;}
+ul.toc {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" 
vlink="#800080" alink="#FF0000">
+
+<a name="Top"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="The-GNU-libextractor-Reference-Manual"></a>
+<h1 class="settitle">The GNU libextractor Reference Manual</h1>
+<p>This manual is for GNU libextractor
+(version 0.6.0, 13 January 2010).
+</p>
+<p>GNU libextractor is a GNU package.
+</p>
+
+<p>Copyright &copy; 2007, 2010 Christian Grothoff
+</p>
+<blockquote><p>Permission is granted to copy, distribute and/or modify this 
document
+under the terms of the GNU Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+Texts.  A copy of the license is included in the section entitled &quot;GNU
+Free Documentation License&quot;.
+</p></blockquote>
+
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top"><a href="#Introduction">1. 
Introduction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">        
         What is <acronym>GNU libextractor</acronym>.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Preparation">2. 
Preparation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">         
         What you should do before using the library.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Generalities">3. 
Generalities</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">        
         General library functions and data types.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Extracting-meta-data">4. 
Extracting meta data</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">         How to use <acronym>GNU libextractor</acronym> to obtain 
meta data.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Language-bindings">5. Language 
bindings</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">            
How to use <acronym>GNU libextractor</acronym> from languages other than C.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Utility-functions">6. Utility 
functions</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">           
 Utility functions of <acronym>GNU libextractor</acronym>.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Existing-Plugins">7. Existing 
Plugins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">             
What plugins are available.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Writing-new-Plugins">8. Writing 
new Plugins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">         
 How to write new plugins for <acronym>GNU libextractor</acronym>.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Internal-utility-functions">9. 
Internal utility functions</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">   Utility functions of <acronym>GNU libextractor</acronym> for 
writing plugins.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Reporting-bugs">10. Reporting 
bugs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">               
How to report bugs or request new features.
+</td></tr>
+<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
+Appendices
+
+</pre></th></tr><tr><td align="left" valign="top"><a href="#Copying">A. GNU 
GENERAL PUBLIC LICENSE</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">                     The GNU General Public License says how you
+                                can copy and share some parts of <acronym>GNU 
libextractor</acronym>.
+</td></tr>
+<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
+Indices
+
+</pre></th></tr><tr><td align="left" valign="top"><a 
href="#Concept-Index">Concept Index</a></td><td>&nbsp;&nbsp;</td><td 
align="left" valign="top">               Index of concepts and programs.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Function-and-Data-Index">Function 
and Data Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">     
Index of functions, variables and data types.
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Type-Index">Type 
Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">               
   Index of data types.
+</td></tr>
+<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
+</pre></th></tr></table>
+
+
+
+<hr size="1">
+<a name="Introduction"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Top" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Next section 
in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Next chapter"> 
&gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Introduction-1"></a>
+<h1 class="chapter">1. Introduction</h1>
+
+<a name="index-error-handling"></a>
+<p><acronym>GNU libextractor</acronym> is GNU&rsquo;s library for extracting 
meta data from
+files.  Meta data includes format information (such as mime type,
+image dimensions, color depth, recording frequency), content
+descriptions (such as document title or document description) and
+copyright information (such as license, author and contributors).
+Meta data extraction is an inherently uncertain business &mdash; a parse
+error can be a corrupt file, an incompatibility in the file format
+version, an entirely different file format or a bug in the parser.  As
+a result of this uncertainty, <acronym>GNU libextractor</acronym> deliberately
+avoids to ever report any errors.  Unexpected file contents simply
+result in less or possibly no meta data being extracted.  
+</p>
+<a name="index-plugin"></a>
+<p><acronym>GNU libextractor</acronym> uses plugins to handle various file 
formats.
+Technically a plugin can support multiple file formats; however, most
+plugins only support one particular format.  By default,
+<acronym>GNU libextractor</acronym> will use all plugins that are available 
and found
+in the plugin installation directory.  Applications can
+request the use of only specific plugins or the exclusion of
+certain plugins.
+</p>
+<p><acronym>GNU libextractor</acronym> is distributed with the 
<code>extract</code> 
+command<a name="DOCF1" href="#FOOT1">(1)</a> which is a command-line tool for 
extracting
+meta data.  <code>extract</code> is given a list of filenames and 
+prints the resulting meta data to the console.  The <code>extract</code>
+source code also serves as an advanced example for how to use
+<acronym>GNU libextractor</acronym>.  
+</p>
+<p>This manual focuses on providing documentation for writing software
+with <acronym>GNU libextractor</acronym>.  The only relevant parts for 
end-users
+are the chapter on compiling and installing <acronym>GNU libextractor</acronym>
+(See section <a href="#Preparation">Preparation</a>.).  Also, the chapter on 
existing plugins maybe of
+interest (See section <a href="#Existing-Plugins">Existing Plugins</a>.).  
Additional documentation for
+end-users can be find in the man page on <code>extract</code> (using
+<tt>man extract</tt>).
+</p>
+<a name="index-license"></a>
+<p><acronym>GNU libextractor</acronym> is licensed under the GNU General 
Public License.  The
+developers have frequently received requests to license GNU
+libextractor under alternative terms.  However, <acronym>GNU 
libextractor</acronym>
+borrows plenty of GPL-licensed code from various other projects.
+Hence we cannot change the license (even if we wanted to).<a name="DOCF2" 
href="#FOOT2">(2)</a>
+</p>
+<hr size="6">
+<a name="Preparation"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Introduction" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-GNU_002fLinux" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Introduction" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Preparation-1"></a>
+<h1 class="chapter">2. Preparation</h1>
+
+<p>This chapter first describes the general build instructions that
+should apply to all systems.  Specific instructions for known problems
+for particular platforms are then described in individual sections
+afterwards.
+</p>
+<p>Compiling <acronym>GNU libextractor</acronym> follows the standard GNU 
autotools build process
+using <code>configure</code> and <code>make</code>.  For details on the GNU
+autotools build process, read the &lsquo;<tt>INSTALL</tt>&rsquo; file and query
+<tt>./configure --help</tt> for additional options.  
+</p>
+<p><acronym>GNU libextractor</acronym> has various dependencies, some of which 
are optional. 
+Instead of specifying the names of the software packages, we
+will give the list in terms of the names of the respective
+Debian (unstable) packages that should be installed.
+</p>
+<p>You absolutely need:
+</p>
+<ul>
+<li>
+libtool
+</li><li>
+gcc
+</li><li>
+make
+</li><li>
+g++ 
+</li><li>
+libltdl7-dev
+</li><li>
+zlib1g-dev
+</li><li>
+libbz2-dev
+</li></ul>
+
+<p>Recommended dependencies are:
+</p><ul>
+<li>
+libgtk2.0-dev
+</li><li>
+libvorbis-dev
+</li><li>
+libflac-dev
+</li><li>
+libgsf-1-dev
+</li><li>
+libmpeg2-4-dev
+</li><li>
+libqt4-dev
+</li><li>
+librpm-dev
+</li><li>
+libpoppler-dev
+</li><li>
+libexiv2-dev
+</li></ul>
+
+<p>Optional dependencies (you would need to additionally specify 
+the configure option <code>--enable-ffmpeg</code>) to make use of these
+are:
+</p><ul>
+<li>
+libavformat-dev
+</li><li>
+libswscale-dev
+</li></ul>
+
+<p>For Subversion access and compilation one also needs:
+</p><ul>
+<li>
+subversion
+</li><li>
+autoconf
+</li><li>
+automake
+</li></ul>
+
+<p>Please notify us if we missed some dependencies (note that the list is
+supposed to only list direct dependencies, not transitive
+dependencies).
+</p>
+<p>Once you have compiled and installed <acronym>GNU libextractor</acronym>, 
you should have a file
+&lsquo;<tt>extractor.h</tt>&rsquo; installed in your 
&lsquo;<tt>include/</tt>&rsquo; directory.  This
+file should be the starting point for your C and C++ development with
+<acronym>GNU libextractor</acronym>.  The build process also installs the 
&lsquo;<tt>extract</tt>&rsquo; binary and
+man pages for &lsquo;<tt>extract</tt>&rsquo; and <acronym>GNU 
libextractor</acronym>.  The &lsquo;<tt>extract</tt>&rsquo; man page
+documents the &lsquo;<tt>extract</tt>&rsquo; tool.  The <acronym>GNU 
libextractor</acronym> man page gives a brief
+summary of the C API for <acronym>GNU libextractor</acronym>.
+</p>
+<a name="index-packageing"></a>
+<a name="index-directory-structure"></a>
+<a name="index-plugin-1"></a>
+<a name="index-environment-variables"></a>
+<a name="index-LIBEXTRACTOR_005fPREFIX"></a>
+<p>When you install <acronym>GNU libextractor</acronym>, various plugins will 
be
+installed in the &lsquo;<tt>lib/libextractor/</tt>&rsquo; directory.  The main 
library
+will be installed as &lsquo;<tt>lib/libextractor.so</tt>&rsquo;.  Note that
+<acronym>GNU libextractor</acronym> will attempt to find the plugins relative 
to the
+path of the main library.  Consequently, a package manager can move
+the library and its plugins to a different location later &mdash; as long
+as the relative path between the main library and the plugins is
+preserved.  As a method of last resort, the user can specify an
+environment variable <tt>LIBEXTRACTOR_PREFIX</tt>.  If
+<acronym>GNU libextractor</acronym> cannot locate a plugin, it will look in
+<tt>LIBEXTRACTOR_PREFIX/lib/libextractor/</tt>.
+</p>
+
+<hr size="6">
+<a name="Installation-on-GNU_002fLinux"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Preparation" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-FreeBSD" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.1 Installation on GNU/Linux</h2>
+
+<p>Should work using the standard instructions without problems.
+</p>
+
+<hr size="6">
+<a name="Installation-on-FreeBSD"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Installation-on-GNU_002fLinux" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-OpenBSD" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.2 Installation on FreeBSD</h2>
+
+<p>Should work using the standard instructions without problems.
+</p>
+
+<hr size="6">
+<a name="Installation-on-OpenBSD"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Installation-on-FreeBSD" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-NetBSD" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.3 Installation on OpenBSD</h2>
+
+<p>OpenBSD 3.8 also doesn&rsquo;t have CODESET in 
&lsquo;<tt>langinfo.h</tt>&rsquo;.  CODESET
+is used in <acronym>GNU libextractor</acronym> in about three places.  This 
causes problems
+during compilation.
+</p>
+
+<hr size="6">
+<a name="Installation-on-NetBSD"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Installation-on-OpenBSD" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-using-MinGW" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.4 Installation on NetBSD</h2>
+
+<p>No reports so far.
+</p>
+
+<hr size="6">
+<a name="Installation-using-MinGW"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Installation-on-NetBSD" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.5 Installation using MinGW</h2>
+
+<p>Linking -lstdc++ with the provided libtool fails on Cygwin, this
+is a problem with libtool, there is unfortunately no flag to tell
+libtool how to do its job on Cygwin and it seems that it cannot be the
+default to set the library check to &rsquo;pass_all&rsquo;.  Patching libtool 
may
+help.
+</p>
+<p>Note: this is a rather dated report and may no longer apply.
+</p>
+
+<hr size="6">
+<a name="Installation-on-OS-X"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Installation-using-MinGW" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#Installing-and-uninstalling-the-framework" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.6 Installation on OS X</h2>
+
+<p>libextractor has two installation methods on Mac OS X: it can be
+installed as a Mac OS X framework or with the standard
+<code>./configure; make; make install</code> shell commands. The
+framework package is self-contained, but currently omits some of the
+extractor plugins that can be compiled in if libextractor is installed
+with <code>./configure; make; make install</code> (provided that the
+required dependencies exist.)
+</p>
+<hr size="6">
+<a name="Installing-and-uninstalling-the-framework"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Installation-on-OS-X" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Using-the-framework" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h3 class="subsection">2.6.1 Installing and uninstalling the framework</h3>
+
+<p>The binary framework is distributed as a disk image 
(&lsquo;<tt>Extractor-x.x.xx.dmg</tt>&rsquo;).
+Installation is done by opening the disk image and clicking 
&lsquo;<tt>Extractor.pkg</tt>&rsquo;
+inside it. The Mac OS X installer application will then run. The framework
+is installed to the root volume&rsquo;s 
&lsquo;<tt>/Library/Frameworks</tt>&rsquo; folder and installing
+will require admin privileges.
+</p>
+<p>The framework can be uninstalled by dragging
+&lsquo;<tt>/Library/Frameworks/Extractor.framework</tt>&rsquo; cto the 
&lsquo;<tt>Trash</tt>&rsquo;.
+</p>
+
+<hr size="6">
+<a name="Using-the-framework"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Installing-and-uninstalling-the-framework" title="Previous section in 
reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Example-for-using-the-framework" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h3 class="subsection">2.6.2 Using the framework</h3>
+
+<p>In the framework, the <code>extract</code> command line tool can be found 
at 
+&lsquo;<tt>/Library/Frameworks/Extractor.framework/Versions/Current/bin/extract</tt>&rsquo;
+</p>
+<p>The framework can be used in software projects as a framework or as a 
dynamic
+library. 
+</p>
+<p>When using the framework as a dynamic library in projects using autotools,
+one would most likely want to add 
+&quot;-I/Library/Frameworks/Extractor.framework/Versions/Current/include&quot;
+to CPPFLAGS and 
+&quot;-L/Library/Frameworks/Extractor.framework/Versions/Current/lib&quot;
+to LDFLAGS.
+</p>
+
+<hr size="6">
+<a name="Example-for-using-the-framework"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Using-the-framework" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#Example-for-using-the-dynamic-library" title="Next section in reading 
order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h3 class="subsection">2.6.3 Example for using the framework</h3>
+
+<table><tr><td>&nbsp;</td><td><pre class="verbatim">// hello.c
+#include &lt;Extractor/extractor.h&gt;
+
+int main()
+{
+  struct EXTRACTOR_PluginList *el;
+  el = EXTRACTOR_plugin_load_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
+  // ...
+  EXTRACTOR_plugin_remove_all (el);
+  return 0;
+}
+</pre></td></tr></table>
+
+<p>You can then compile the example using
+</p>
+<pre class="verbatim">$ gcc -o hello hello.c -framework Extractor
+</pre>
+<hr size="6">
+<a name="Example-for-using-the-dynamic-library"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Example-for-using-the-framework" title="Previous section in reading 
order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Note-to-package-maintainers" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Installation-on-OS-X" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h3 class="subsection">2.6.4 Example for using the dynamic library</h3>
+
+<table><tr><td>&nbsp;</td><td><pre class="verbatim">// hello.c
+#include &lt;extractor.h&gt;
+int main()
+{
+  struct EXTRACTOR_PluginList *el;
+  el = EXTRACTOR_plugin_load_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
+  // ...
+  EXTRACTOR_plugin_remove_all (el);
+  return 0;
+}
+</pre></td></tr></table>
+
+<p>You can then compile the example using
+</p>
+<pre class="verbatim">$ gcc 
-I/Library/Frameworks/Extractor.framework/Versions/Current/include \
+  -o hello hello.c \
+  -L/Library/Frameworks/Extractor.framework/Versions/Current/lib \
+  -lextractor
+</pre>
+<p>Notice the difference in the <code>#include</code> line.
+</p>
+
+
+
+
+
+<hr size="6">
+<a name="Note-to-package-maintainers"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Example-for-using-the-dynamic-library" title="Previous section in 
reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next section 
in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">2.7 Note to package maintainers</h2>
+
+<p>The suggested way to package GNU libextractor is to split it into
+roughly the following binary packages:<a name="DOCF3" href="#FOOT3">(3)</a>
+</p>
+<ul>
+<li>
+libextractor (main library only, only hard dependency for other packages 
depending on GNU libextractor)
+</li><li>
+extract (command-line tool and man page)
+</li><li>
+libextractor-dev (extractor.h header and man page)
+</li><li>
+libextractor-doc (this manual)
+</li><li>
+libextractor-plugins (plugins without external dependencies; recommended but 
not required by extract and libextractor package)
+</li><li>
+libextractor-plugin-XXX (plugin with dependency on libXXX, for example for 
XXX=mpeg this would be &lsquo;<tt>libextractor_mpeg.so</tt>&rsquo;)
+</li><li>
+libextractor-plugins-all (meta package that requires all plugins)
+</li></ul>
+
+<p>This would enable minimal installations (i.e. for embedded systems) to
+not include any plugins, as well as moderate-size installations (that
+do not trigger GTK, QT and X11) for systems that have limited
+resources.
+</p>
+
+<hr size="6">
+<a name="Generalities"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Note-to-package-maintainers" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#Introduction-to-the-_0060_0060extract_0027_0027-command" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Preparation" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Generalities-1"></a>
+<h1 class="chapter">3. Generalities</h1>
+
+<hr size="6">
+<a name="Introduction-to-the-_0060_0060extract_0027_0027-command"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Generalities" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#Common-usage-examples-for-_0060_0060extract_0027_0027" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">3.1 Introduction to the &ldquo;extract&rdquo; command</h2>
+
+<p>The <code>extract</code> command takes a list of file names as arguments,
+extracts meta data from each of those files and prints the result to
+the console.  By default, <code>extract</code> will use all available
+plugins and print all (non-binary) meta data that is found.
+</p>
+<p>The set of plugins used by <code>extract</code> can be controlled using
+the &ldquo;-l&rdquo; and &ldquo;-n&rdquo; options.  Use &ldquo;-n&rdquo; to 
not load all of the
+default plugins.  Use &ldquo;-l NAME&rdquo; to specifically load a certain
+plugin.  For example, specify &ldquo;-n -l mime&rdquo; to only use the MIME
+plugin.
+</p>
+<p>Using the &ldquo;-p&rdquo; option the output of <code>extract</code> can be 
limited
+to only certain keyword types.  Similarly, using the &ldquo;-x&rdquo; option,
+certain keyword types can be excluded.  A list of all known keyword
+types can be obtained using the &ldquo;-L&rdquo; option.
+</p>
+<p>The output format of <code>extract</code> can be influenced with the
+&ldquo;-V&rdquo; (more verbose, lists filenames), &ldquo;-g&rdquo; 
(grep-friendly, all
+meta data on a single line per file) and &ldquo;-b&rdquo; (bibTeX style)
+options.
+</p>
+<hr size="6">
+<a name="Common-usage-examples-for-_0060_0060extract_0027_0027"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Introduction-to-the-_0060_0060extract_0027_0027-command" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#Introduction-to-the-libextractor-library" title="Next section in reading 
order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">3.2 Common usage examples for &ldquo;extract&rdquo;</h2>
+
+<table><tr><td>&nbsp;</td><td><pre class="example">$ extract test/test.jpg
+comment - (C) 2001 by Christian Grothoff, using gimp 1.2 1
+mimetype - image/jpeg
+
+$ extract -V -x comment test/test.jpg
+Keywords for file test/test.jpg:
+mimetype - image/jpeg
+
+$ extract -p comment test/test.jpg
+comment - (C) 2001 by Christian Grothoff, using gimp 1.2 1
+
+$ extract -nV -l png.so -p comment test/test.jpg test/test.png
+Keywords for file test/test.jpg:
+Keywords for file test/test.png:
+comment - Testing keyword extraction
+</pre></td></tr></table>
+
+
+<hr size="6">
+<a name="Introduction-to-the-libextractor-library"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Common-usage-examples-for-_0060_0060extract_0027_0027" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Up section"> 
Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">3.3 Introduction to the libextractor library</h2>
+
+<p>Each public symbol exported by <acronym>GNU libextractor</acronym> has the 
prefix
+<tt>EXTRACTOR_</tt>.  All-caps names are used for constants.  For the
+impatient, the minimal C code for using <acronym>GNU libextractor</acronym> 
(on the
+executing binary itself) looks like this:
+</p>
+<pre class="verbatim">#include &lt;extractor.h&gt;
+int main(int argc, char ** argv) {
+  struct EXTRACTOR_PluginList *plugins
+    = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY);
+  EXTRACTOR_extract (plugins, argv[1],
+                     NULL, 0, 
+                     &amp;EXTRACTOR_meta_data_print, stdout);
+  EXTRACTOR_plugin_remove_all (plugins);
+  return 0;
+}
+</pre>
+<p>The minimal API illustrated by this example is actually sufficient for
+many applications.  The full external C API of <acronym>GNU 
libextractor</acronym> is described
+in chapter See section <a href="#Extracting-meta-data">Extracting meta 
data</a>.  Bindings for other languages
+are described in chapter See section <a href="#Language-bindings">Language 
bindings</a>.  The API for
+writing new plugins is described in chapter See section <a 
href="#Writing-new-Plugins">Writing new Plugins</a>.
+</p>
+<hr size="6">
+<a name="Extracting-meta-data"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Introduction-to-the-libextractor-library" title="Previous section in 
reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Plugin-management" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Generalities" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Extracting-meta-data-1"></a>
+<h1 class="chapter">4. Extracting meta data</h1>
+
+<p>In order to extract meta data with <acronym>GNU libextractor</acronym> you 
first need to
+load the respective plugins and then call the extraction API
+with the plugins and the data to process.  This section
+documents how to load and unload plugins, the various types
+and formats in which meta data is returned to the application
+and finally the extraction API itself.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top"><a href="#Plugin-management">4.1 Plugin 
management</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">   How to 
load and unload plugins
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Meta-types">4.2 Meta 
types</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">          
About meta types
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Meta-formats">4.3 Meta 
formats</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">        
About meta formats
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Extracting">4.4 
Extracting</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">          
How to use the extraction API
+</td></tr>
+</table>
+
+
+<hr size="6">
+<a name="Plugin-management"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Meta-types" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Plugin-management-1"></a>
+<h2 class="section">4.1 Plugin management</h2>
+
+<a name="index-reentrant"></a>
+<a name="index-concurrency"></a>
+<a name="index-threads"></a>
+<a name="index-thread_002dsafety"></a>
+<a name="index-enum-EXTRACTOR_005fOptions"></a>
+
+<p>All of the functions for loading and unloading plugins, including
+<tt>EXTRACTOR_plugin_add_defaults</tt> and 
<tt>EXTRACTOR_plugin_remove_all</tt>,
+are thread-safe and reentrant.  However, using the same plugin list
+from multiple threads at the same time is not safe.  Creating multiple
+plugin lists and using them concurrently is supported as long as
+the <code>EXTRACTOR_OPTION_IN_PROCESS</code> option is not used. 
+</p>
+<p>Generally, <acronym>GNU libextractor</acronym> is fully thread-safe and 
mostly reentrant.
+All plugin code is expected required to be reentrant and state-less,
+but due to the extensive use of 3rd party libraries this cannot
+be guaranteed.  Hence plugins are executed (by default) out of
+process.  This also ensures that plugins that crash do not cause
+the main application to fail as well.  
+</p>
+<p>Plugins can be executed in-process by giving the option
+<code>EXTRACTOR_OPTION_IN_PROCESS</code> when loading the plugin.  This
+option is only recommended when debugging plugins and not for
+production use.  Due to the use of shared-memory IPC the
+out-of-process execution of plugins should not be a concern for
+performance.
+</p>
+
+<dl>
+<dt><a name="index-EXTRACTOR_005fPluginList"></a><u>C Struct:</u> 
<b>EXTRACTOR_PluginList</b></dt>
+<dd><a name="index-struct-EXTRACTOR_005fPluginList"></a>
+
+<p>A plugin list represents a set of GNU libextractor plugins.  Most of
+the GNU libextractor API is concerned with either constructing a
+plugin list or using it to extract meta data.  The internal representation
+of the plugin list is of no concern to users or plugin developers.
+</p></dd></dl>
+
+
+<dl>
+<dt><a 
name="index-EXTRACTOR_005fplugin_005fremove_005fall"></a><u>Function:</u> void 
<b>EXTRACTOR_plugin_remove_all</b><i> (struct EXTRACTOR_PluginList 
*plugins)</i></dt>
+<dd><a name="index-EXTRACTOR_005fplugin_005fremove_005fall-1"></a>
+
+<p>Unload all of the plugins in the given list.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-EXTRACTOR_005fplugin_005fremove"></a><u>Function:</u> 
struct EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_remove</b><i> (struct 
EXTRACTOR_PluginList *plugins, const char*name)</i></dt>
+<dd><a name="index-EXTRACTOR_005fplugin_005fremove-1"></a>
+
+<p>Unloads a particular plugin.  The given name should be the short name of 
the plugin, for example &ldquo;mime&rdquo; for the mime-type extractor or 
&ldquo;mpeg&rdquo; for the MPEG extractor.
+</p></dd></dl>
+
+<dl>
+<dt><a name="index-EXTRACTOR_005fplugin_005fadd"></a><u>Function:</u> struct 
EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_add</b><i> (struct 
EXTRACTOR_PluginList *plugins, const char* name,const char* options, enum 
EXTRACTOR_Options flags)</i></dt>
+<dd><a name="index-EXTRACTOR_005fplugin_005fadd-1"></a>
+
+<p>Loads a particular plugin.  The plugin is added to the existing list, which 
can be NULL.  The second argument specifies the name of the plugin (i.e. 
&ldquo;ogg&rdquo;).  The third argument can be NULL and specifies 
plugin-specific options.  Finally, the last argument specifies if the plugin 
should be executed out-of-process 
(<code>EXTRACTOR_OPTION_DEFAULT_POLICY</code>) or not.
+</p></dd></dl>
+
+<dl>
+<dt><a 
name="index-EXTRACTOR_005fplugin_005fadd_005fconfig"></a><u>Function:</u> 
struct EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_add_config</b><i> (struct 
EXTRACTOR_PluginList *plugins, const char* config, enum EXTRACTOR_Options 
flags)</i></dt>
+<dd><a name="index-EXTRACTOR_005fplugin_005fadd_005fconfig-1"></a>
+
+<p>Loads and unloads plugins based on a configuration string, modifying the 
existing list, which can be NULL.  The string has the format 
&ldquo;[-]NAME(OPTIONS){:[-]NAME(OPTIONS)}*&rdquo;.  Prefixing the plugin name 
with a &ldquo;-&rdquo; means that the plugin should be unloaded.
+</p></dd></dl>
+
+<dl>
+<dt><a 
name="index-EXTRACTOR_005fplugin_005fadd_005fdefaults"></a><u>Function:</u> 
struct EXTRACTOR_PluginList * <b>EXTRACTOR_plugin_add_defaults</b><i> (enum 
EXTRACTOR_Options flags)</i></dt>
+<dd><a name="index-EXTRACTOR_005fplugin_005fadd_005fdefaults-1"></a>
+
+<p>Loads all of the plugins in the plugin directory.  This function is what 
most <acronym>GNU libextractor</acronym> applications should use to setup the 
plugins.
+</p></dd></dl>
+
+
+
+<hr size="6">
+<a name="Meta-types"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Plugin-management" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Meta-formats" title="Next section 
in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Meta-types-1"></a>
+<h2 class="section">4.2 Meta types</h2>
+
+
+<a name="index-enum-EXTRACTOR_005fMetaType"></a>
+<a name="index-EXTRACTOR_005fmetatype_005fget_005fmax"></a>
+
+<p><tt>enum EXTRACTOR_MetaType</tt> is a C enum which defines a list of over 
100 different types of meta data.  The total number can differ between 
different <acronym>GNU libextractor</acronym> releases; the maximum value for 
the current release can be obtained using the 
<tt>EXTRACTOR_metatype_get_max</tt> function.  All values in this enumeration 
are of the form <tt>EXTRACTOR_METATYPE_XXX</tt>.
+</p>
+<dl>
+<dt><a 
name="index-EXTRACTOR_005fmetatype_005fto_005fstring"></a><u>Function:</u> 
const char * <b>EXTRACTOR_metatype_to_string</b><i> (enum EXTRACTOR_MetaType 
type)</i></dt>
+<dd><a name="index-EXTRACTOR_005fmetatype_005fto_005fstring-1"></a>
+<a name="index-gettext"></a>
+<a name="index-internationalization"></a>
+
+<p>The function <tt>EXTRACTOR_metatype_to_string</tt> can be used to obtain a 
short English string &lsquo;<samp>s</samp>&rsquo; describing the meta data 
type.  The string can be translated into other languages using GNU gettext with 
the domain set to <acronym>GNU libextractor</acronym> 
(<tt>dgettext(&quot;libextractor&quot;, s)</tt>).  
+</p></dd></dl>
+
+<dl>
+<dt><a 
name="index-EXTRACTOR_005fmetatype_005fto_005fdescription"></a><u>Function:</u> 
const char * <b>EXTRACTOR_metatype_to_description</b><i> (enum 
EXTRACTOR_MetaType type)</i></dt>
+<dd><a name="index-EXTRACTOR_005fmetatype_005fto_005fdescription-1"></a>
+<a name="index-gettext-1"></a>
+<a name="index-internationalization-1"></a>
+
+<p>The function <tt>EXTRACTOR_metatype_to_description</tt> can be used to 
obtain a longer English string &lsquo;<samp>s</samp>&rsquo; describing the meta 
data type.  The description may be empty if the short description returned by 
<code>EXTRACTOR_metatype_to_string</code> is already comprehensive.  The string 
can be translated into other languages using GNU gettext with the domain set to 
<acronym>GNU libextractor</acronym> (<tt>dgettext(&quot;libextractor&quot;, 
s)</tt>).  
+</p></dd></dl>
+
+
+
+<hr size="6">
+<a name="Meta-formats"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Meta-types" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Meta-formats-1"></a>
+<h2 class="section">4.3 Meta formats</h2>
+
+<a name="index-enum-EXTRACTOR_005fMetaFormat"></a>
+
+<p><tt>enum EXTRACTOR_MetaFormat</tt> is a C enum which defines on a high 
level how the extracted meta data is represented.  Currently, the library uses 
three formats: UTF-8 strings, C strings and binary data.  A fourth value, 
<code>EXTRACTOR_METAFORMAT_UNKNOWN</code> is defined but not used.  UTF-8 
strings are 0-terminated strings that have been converted to UTF-8.  The format 
code is <code>EXTRACTOR_METAFORMAT_UTF8</code>. Ideally, most text meta data 
will be of this format.  Some file formats fail to specify the encoding used 
for the text.  In this case, the text cannot be converted to UTF-8.  However, 
the meta data is still known to be 0-terminated and presumably human-readable.  
In this case, the format code used is 
<code>EXTRACTOR_METAFORMAT_C_STRING</code>; however, this should not be 
understood to mean that the encoding is the same as that used by the C 
compiler.  Finally, for binary data (mostly images), the format 
<code>EXTRACTOR_METAFORMAT_BINARY</code> is used.
+</p>
+<p>Naturally this is not a precise description of the meta format. Plugins can 
provide a more precise description (if known) by providing the respective mime 
type of the meta data.  For example, binary image meta data could be also 
tagged as &ldquo;image/png&rdquo; and normal text would typically be tagged as 
&ldquo;text/plain&rdquo;.  
+</p>
+
+
+<hr size="6">
+<a name="Extracting"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Meta-formats" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Extracting-1"></a>
+<h2 class="section">4.4 Extracting</h2>
+
+<dl>
+<dt><a name="index-_0028"></a><u>Function Pointer:</u> int 
<b>(</b><i>*EXTRACTOR_MetaDataProcessor)(void *cls, const char *plugin_name, 
enum EXTRACTOR_MetaType type, enum EXTRACTOR_MetaFormat format, const char 
*data_mime_type, const char *data, size_t data_len)</i></dt>
+<dd><a name="index-EXTRACTOR_005fMetaDataProcessor"></a>
+
+<p>Type of a function that libextractor calls for each meta data item found.
+</p>
+<dl compact="compact">
+<dt> <var>cls</var> </dt>
+<dd><p>closure (user-defined)
+</p>
+</dd>
+<dt> <var>plugin_name</var> </dt>
+<dd><p>name of the plugin that produced this value; special values can be used 
(i.e. &rsquo;&lt;zlib&gt;&rsquo; for zlib being used in the main libextractor 
library and yielding meta data);
+</p>
+</dd>
+<dt> <var>type</var> </dt>
+<dd><p>libextractor-type describing the meta data;
+</p>
+</dd>
+<dt> <var>format basic</var> </dt>
+<dd><p>format information about data
+</p>
+</dd>
+<dt> <var>data_mime_type</var> </dt>
+<dd><p>mime-type of data (not of the original file); can be NULL (if mime-type 
is not known);
+</p>
+</dd>
+<dt> <var>data</var> </dt>
+<dd><p>actual meta-data found
+</p>
+</dd>
+<dt> <var>data_len</var> </dt>
+<dd><p>number of bytes in data
+</p>
+</dd>
+</dl>
+
+<p>Return 0 to continue extracting, 1 to abort.
+</p></dd></dl>
+
+
+
+<dl>
+<dt><a name="index-EXTRACTOR_005fextract"></a><u>Function:</u> void 
<b>EXTRACTOR_extract</b><i> (struct EXTRACTOR_PluginList *plugins, const char 
*filename, const void *data, size_t size, EXTRACTOR_MetaDataProcessor proc, 
void *proc_cls)</i></dt>
+<dd><a name="index-EXTRACTOR_005fextract-1"></a>
+<a name="index-reentrant-1"></a>
+<a name="index-concurrency-1"></a>
+<a name="index-threads-1"></a>
+<a name="index-thread_002dsafety-1"></a>
+
+<p>This is the main function for extracting keywords with <acronym>GNU 
libextractor</acronym>.  The first argument is a plugin list which specifies 
the set of plugins that should be used for extracting meta data.  The 
&lsquo;<samp>filename</samp>&rsquo; argument is optional and can be used to 
specify the name of a file to process.  If &lsquo;<samp>filename</samp>&rsquo; 
is NULL, then the &lsquo;<samp>data</samp>&rsquo; argument must point to the 
in-memory data to extract meta data from.  If 
&lsquo;<samp>filename</samp>&rsquo; is non-NULL, 
&lsquo;<samp>data</samp>&rsquo; can be NULL.  If 
&lsquo;<samp>data</samp>&rsquo; is non-null, then 
&lsquo;<samp>size</samp>&rsquo; is the size of &lsquo;<samp>data</samp>&rsquo; 
in bytes.  Otherwise &lsquo;<samp>size</samp>&rsquo; should be zero.  For each 
meta data item found, GNU libextractor will call the 
&lsquo;<samp>proc</samp>&rsquo; function, passing 
&lsquo;<samp>proc_cls</samp>&rsquo; as the first argument to 
&lsquo;<samp>proc</samp
 >&rsquo;
 .  The other arguments to &lsquo;<samp>proc</samp>&rsquo; depend on the 
specific meta data found.  
+</p>
+<a name="index-SIGBUS"></a>
+<a name="index-bus-error"></a>
+<p>Meta data extraction should never really fail &mdash; at worst, 
<acronym>GNU libextractor</acronym> should not call 
&lsquo;<samp>proc</samp>&rsquo; with any meta data. By design, <acronym>GNU 
libextractor</acronym> should never crash or leak memory, even given corrupt 
files as input.  Note however, that running <acronym>GNU libextractor</acronym> 
on a corrupt file system (or incorrectly <tt>mmap</tt>ed files) can result in 
the operating system sending a SIGBUS (bus error) to the process.  While 
<acronym>GNU libextractor</acronym> runs plugins out-of-process, it first maps 
the file into memory and then attempts to decompress it.  During decompression 
it is possible to encounter a SIGBUS.   <acronym>GNU libextractor</acronym> 
will <em>not</em> attempt to catch this signal and your application is likely 
to crash.  Note again that this should only happen if the file <em>system</em> 
is corrupt (not if individual files are corrupt).  If this is not acceptable, 
you might want to
  conside
 r running <acronym>GNU libextractor</acronym> itself also out-of-process (as 
done, for example, by <a 
href="http://grothoff.org/christian/doodle/";>doodle</a>).
+</p>
+</dd></dl>
+
+
+<hr size="6">
+<a name="Language-bindings"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Extracting" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Java" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Extracting-meta-data" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Language-bindings-1"></a>
+<h1 class="chapter">5. Language bindings</h1>
+<a name="index-Java"></a>
+<a name="index-Mono"></a>
+<a name="index-Perl"></a>
+<a name="index-Python"></a>
+<a name="index-PHP"></a>
+<a name="index-Ruby"></a>
+
+<p><acronym>GNU libextractor</acronym> works immediately with C and C++ code. 
Bindings for Java, Mono, Ruby, Perl, PHP and Python are available for download 
from the main <acronym>GNU libextractor</acronym> website.  Documentation for 
these bindings (if available) is part of the downloads for the respective 
binding.  In all cases, a full installation of the C library is required before 
the binding can be installed.
+</p>
+<hr size="6">
+<a name="Java"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Language-bindings" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Mono" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">5.1 Java</h2>
+
+<p>Compiling the GNU libextractor Java binding follows the usual process of
+running <code>configure</code> and <code>make</code>.  The result will be a
+shared C library &lsquo;<tt>libextractor_java.so</tt>&rsquo; with the native 
code and
+a JAR file (installed to 
&lsquo;<tt>$PREFIX/share/java/libextractor.java</tt>&rsquo;).
+</p>
+<p>A minimal example for using GNU libextractor&rsquo;s Java binding would look
+like this:
+</p><pre class="verbatim">import org.gnu.libextractor.*;
+import java.util.ArrayList;
+
+public static void main(String[] args) {
+  Extractor ex = Extractor.getDefault();
+  for (int i=0;i&lt;args.length;i++) {
+    ArrayList keywords = ex.extract(args[i]);
+    System.out.println(&quot;Keywords for &quot; + args[i] + &quot;:&quot;);
+    for (int j=0;j&lt;keywords.size();j++)
+      System.out.println(keywords.get(j));
+  }
+}
+</pre>
+<p>The GNU libextractor library and the 
&lsquo;<tt>libextractor_java.so</tt>&rsquo; JNI binding
+have to be in the library search path for this to work.  Furthermore, the
+&lsquo;<tt>libextractor.jar</tt>&rsquo; file should be on the classpath.  
+</p>
+<p>Note that the API does not use Java 5 style generics in order to work
+with older versions of Java.
+</p>
+<hr size="6">
+<a name="Mono"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Java" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Perl" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">5.2 Mono</h2>
+
+<p>This binding is undocumented at this point.
+</p>
+<hr size="6">
+<a name="Perl"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Mono" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Python" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">5.3 Perl</h2>
+
+<p>This binding is undocumented at this point.
+</p>
+<hr size="6">
+<a name="Python"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Perl" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#PHP" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">5.4 Python</h2>
+
+<p>This binding is undocumented at this point.
+</p>
+<hr size="6">
+<a name="PHP"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Python" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Ruby" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">5.5 PHP</h2>
+
+<p>This binding is undocumented at this point.
+</p>
+<hr size="6">
+<a name="Ruby"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#PHP" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Language-bindings" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">5.6 Ruby</h2>
+
+<p>This binding is undocumented at this point.
+</p>
+
+
+<hr size="6">
+<a name="Utility-functions"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Ruby" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-Constants" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Language-bindings" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Utility-functions-1"></a>
+<h1 class="chapter">6. Utility functions</h1>
+
+<a name="index-reentrant-2"></a>
+<a name="index-concurrency-2"></a>
+<a name="index-threads-2"></a>
+<a name="index-thread_002dsafety-2"></a>
+<p>This chapter describes various utility functions for <acronym>GNU 
libextractor</acronym> usage. All of the functions are reentrant.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top"><a href="#Utility-Constants">6.1 Utility 
Constants</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#Meta-data-printing">6.2 Meta data 
printing</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr size="6">
+<a name="Utility-Constants"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Utility-functions" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Meta-data-printing" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Utility-Constants-1"></a>
+<h2 class="section">6.1 Utility Constants</h2>
+
+<a name="index-EXTRACTOR_005fVERSION"></a>
+<p>The constant <tt>EXTRACTOR_VERSION</tt> is a hexadecimal
+representation of the version number of the installed libextractor
+header.  The hexadecimal format is 0xAABBCCDD where AA is the major
+version (so far always 0), BB is the minor version, CC is the revision
+and DD the patch number.  For example, for version 0.5.18, we would
+have AA=0, BB=5, CC=18 and DD=0.  Minor releases such as 0.5.18a or
+significant changes in unreleased versions would be marked with DD=1
+or higher.
+</p>
+
+<hr size="6">
+<a name="Meta-data-printing"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Utility-Constants" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Utility-functions" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Meta-data-printing-1"></a>
+<h2 class="section">6.2 Meta data printing</h2>
+
+
+<a name="index-EXTRACTOR_005fmeta_005fdata_005fprint"></a>
+<p>The <tt>EXTRACTOR_meta_data_print</tt> is a simple function which prints 
the meta data found with libextractor to a file.  The function is mostly useful 
for debugging and as an example for how to manipulate the keyword list and can 
be passed as the &lsquo;<samp>proc</samp>&rsquo; argument to 
<code>EXTRACTOR_extract</code>.  The file to print to should be passed as 
&lsquo;<samp>proc_cls</samp>&rsquo; (which must be of type <code>FILE 
*</code>), for example <code>stdout</code>.
+</p>
+
+
+<hr size="6">
+<a name="Existing-Plugins"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Meta-data-printing" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Existing-Plugins-1"></a>
+<h1 class="chapter">7. Existing Plugins</h1>
+
+<ul>
+<li>
+APPLEFILE
+</li><li>
+ASF
+</li><li>
+DEB
+</li><li>
+DVI
+</li><li>
+ELF
+</li><li>
+EXIV2
+</li><li>
+FLAC
+</li><li>
+FLV
+</li><li>
+GIF
+</li><li>
+HTML
+</li><li>
+ID3 (v2.0, v2.3, v2.4)
+</li><li>
+IT
+</li><li>
+JPEG
+</li><li>
+OLE2
+</li><li>
+thumbnail (GTK, QT or FFMPEG-based)
+</li><li>
+MAN
+</li><li>
+MIME
+</li><li>
+MP3 (ID3v1)
+</li><li>
+MPEG
+</li><li>
+NSF and NSFE
+</li><li>
+ODF
+</li><li>
+PNG
+</li><li>
+PS (PostScript)
+</li><li>
+QT (QuickTime)
+</li><li>
+REAL
+</li><li>
+RIFF
+</li><li>
+RPM
+</li><li> 
+S3M
+</li><li>
+SID
+</li><li>
+TAR
+</li><li>
+TIFF
+</li><li>
+WAV
+</li><li>
+XM
+</li><li>
+ZIP
+</li></ul>
+
+<p>&lsquo;<tt>gzip</tt>&rsquo; and &lsquo;<tt>bzip2</tt>&rsquo; compressed 
versions of these formats are 
+also supported (as well as meta data embedded by &lsquo;<tt>gzip</tt>&rsquo; 
itself).
+</p>
+<hr size="6">
+<a name="Writing-new-Plugins"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Existing-Plugins" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#Example-for-a-minimal-extract-method" title="Next section in reading 
order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Existing-Plugins" title="Beginning 
of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Writing-new-Plugins-1"></a>
+<h1 class="chapter">8. Writing new Plugins</h1>
+
+<p>Writing a new plugin for libextractor usually requires writing of or
+interfacing with an actual parser for a specific format.  How this is
+can be accomplished depends on the format and cannot be specified in
+general.  However, care should be taken for the code to be reentrant
+and highly fault-tolerant, especially with respect to malformed
+inputs.
+</p>
+<p>Plugins should start by verifying that the header of the data matches
+the specific format and immediately return if that is not the case.
+Even if the header matches the expected file format, plugins must not
+assume that the remainder of the file is well formed.
+</p>
+<p>The plugin library must be called libextractor_XXX.so, where XXX 
+denotes the file format of the plugin. The library must export a 
+method <tt>libextractor_XXX_extract</tt>, with the following 
+signature:
+</p><pre class="verbatim">int
+EXTRACTOR_XXX_extract
+   (const char *data,
+    size_t data_size,
+    EXTRACTOR_MetaDataProcessor proc,
+    void *proc_cls,
+    const char * options);
+</pre>
+<p>&lsquo;<samp>data</samp>&rsquo; is a pointer to the typically memory mapped 
contents of
+the file.  Note that plugins cannot ignore the <tt>const</tt>
+annotation since the memory mapping may have been done read-only (and
+thus writes to this page will result in an error).  The 
&lsquo;<samp>data_size</samp>&rsquo;
+argument specifies the size of the &lsquo;<samp>data</samp>&rsquo; buffer in 
bytes.
+</p>
+<p>&lsquo;<samp>proc</samp>&rsquo; should be called on each meta data item 
found.  If &lsquo;<samp>proc</samp>&rsquo; 
+returns non-zero, processing should be aborted and the <code>extract</code>
+function must return 1.  Otherwise <code>extract</code> should always return 
zero.
+</p>
+
+<p>In order to test new plugins, the &lsquo;<tt>extract</tt>&rsquo; command 
can be run
+with the options &ldquo;-ni&rdquo; and &ldquo;-l XXX&rdquo; .  This will run 
the plugin
+in-process (making it easier to debug) and without any of the other
+plugins.
+</p>
+
+<hr size="6">
+<a name="Example-for-a-minimal-extract-method"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Plugin-execution-options" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">8.1 Example for a minimal extract method</h2>
+
+<p>The following example shows how a plugin can return the mime type of
+a file.
+</p><table><tr><td>&nbsp;</td><td><pre class="verbatim">int
+EXTRACTOR_mymime_extract
+   (const char *data,
+    size_t data_size,
+    EXTRACTOR_MetaDataProcessor proc,
+    void *proc_cls,
+    const char * options)
+{
+  if (data_size &lt; 4)
+    return 0;
+  if (0 != memcmp (data, &quot;\177ELF&quot;, 4))
+    return 0;
+  if (0 != proc (proc_cls, 
+                 &quot;mymime&quot;,
+                 EXTRACTOR_METATYPE_MIMETYPE,
+                 EXTRACTOR_METAFORMAT_UTF8,
+                 &quot;text/plain&quot;,
+                 &quot;application/x-executable&quot;,
+                 1 + strlen(&quot;application/x-executable&quot;)))
+    return 1;
+  /* more calls to 'proc' here as needed */
+  return 0;
+}
+</pre></td></tr></table>
+
+<hr size="6">
+<a name="Plugin-execution-options"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#Example-for-a-minimal-extract-method" title="Previous section in reading 
order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Example-for-an-options-method" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">8.2 Plugin execution options</h2>
+
+<p>Plugins can request that their execution be done in a particular way.
+For this, the plugin defines a function with the following signature:
+</p>
+<pre class="verbatim">const char *
+EXTRACTOR_XXX_options (void);
+</pre>
+<p>The function should return a string with the execution options.
+Individual options in this string should be separated by semicolons.
+Options that are included in the string but not known to the library
+are ignored.  The following options are supported:
+</p>
+<ul>
+<li>
+<code>oop-only</code> ensures that the plugin is only run out-of-process; if
+this is not possible, the plugin will not be executed at all if this
+option is set.
+
+</li><li>
+<code>close-stderr</code> ensures that <code>stderr</code> is closed during the
+execution of the plugin.  This is useful if the plugin uses libraries
+that write (error) messages to <code>stderr</code> and where this behavior 
cannot be 
+turned off.  This option only works if the plugin is executed out-of-process.
+
+</li><li>
+<code>close-stdout</code> ensures that <code>stdout</code> is closed during the
+execution of the plugin.  This is useful if the plugin uses libraries
+that write messages to <code>stdout</code> and where this behavior cannot be 
+turned off.  This option only works if the plugin is executed out-of-process.
+
+</li><li>
+<code>force-kill</code> kills and restarts the plugin process for each
+file that is being analyzed.  This is useful if the plugin uses
+libraries that keep global state between runs that is problematic or
+if the plugin uses libraries that are known to have serious resource
+leaks (such as memory leaks).
+
+</li><li>
+<code>want-tail</code> 
+In order to limit memory consumption, limit the amount if reading from
+disk and to keep the API simple, the &lsquo;<samp>data</samp>&rsquo; argument 
passed to
+the <code>EXTRACTOR_XXX_extract</code> method bounded (to 32 MB of normal
+data; for compressed data, a limit of 16 MB is imposed).<a name="DOCF4" 
href="#FOOT4">(4)</a>  Since
+some file formats contain meta data at the end of the file, this option
+provides a way for plugins to access not the first 16&ndash;32 MB of a file
+but instead the last (roughly) 32 MB. 
+
+<p>Note that even for files larger than 32 MB, &lsquo;<samp>size</samp>&rsquo; 
is not
+guaranteed to be 32 MB since &lsquo;<samp>data</samp>&rsquo; will be aligned 
to the page
+size of the operating system.  However, the last byte of 
&lsquo;<samp>data</samp>&rsquo;
+is guaranteed to be the last byte of the file.  Furthermore, if the
+file was large and compressed, unlike in the case of meta data
+extraction from the header, the end of the file will not be
+automatically decompressed by <acronym>GNU libextractor</acronym>.  
+</p>
+</li></ul>
+
+<p>Note that using options other than <code>want-tail</code> is pretty much
+always a kludge and should thus be avoided.
+</p>
+<hr size="6">
+<a name="Example-for-an-options-method"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Plugin-execution-options" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" title="Up 
section"> Up </a>]</td>
+<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Next chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="section">8.3 Example for an options method</h2>
+
+<p>The following example shows how a plugin can set some of the options listed 
above:
+</p><table><tr><td>&nbsp;</td><td><pre class="verbatim">const char *
+EXTRACTOR_id3_options ()
+{
+  return &quot;close-stderr;want-tail&quot;;
+}
+</pre></td></tr></table>
+
+<hr size="6">
+<a name="Internal-utility-functions"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Example-for-an-options-method" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Reporting-bugs" title="Next 
section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Writing-new-Plugins" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Reporting-bugs" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Internal-utility-functions-1"></a>
+<h1 class="chapter">9. Internal utility functions</h1>
+
+<p>Some plugins link against the <code>libextractor_common</code> library which
+provides common abstractions needed by many plugins.  This section
+documents this internal API for plugin developers.  Note that the headers
+for this library are (intentionally) not installed: we do not consider
+this API stable and it should hence only be used by plugins that are 
+build and shipped with GNU libextractor.  Third-party plugins should
+not use it.
+</p>
+<p>&lsquo;<tt>convert_numeric.h</tt>&rsquo; defines various conversion 
functions for
+numbers (in particular, byte-order conversion for floating point
+numbers).  
+</p>
+<p>&lsquo;<tt>unzip.h</tt>&rsquo; defines an API for accessing compressed 
files.
+</p>
+<p>&lsquo;<tt>pack.h</tt>&rsquo; provides an interpreter for unpacking structs 
of integer
+numbers from streams and converting from big or little endian to host
+byte order at the same time.
+</p>
+<p>&lsquo;<tt>convert.h</tt>&rsquo; provides a function for character set 
conversion described
+below.
+</p>
+<dl>
+<dt><a 
name="index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8"></a><u>Function:</u>
 char * <b>EXTRACTOR_common_convert_to_utf8</b><i>(const char *input, size_t 
len, const char * charset)</i></dt>
+<dd><a name="index-UTF_002d8"></a>
+<a name="index-character-set"></a>
+<a name="index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8-1"></a>
+<p>Various <acronym>GNU libextractor</acronym> plugins make use of the internal
+&lsquo;<tt>convert.h</tt>&rsquo; header which defines a function
+</p>
+<p><tt>EXTRACTOR_common_convert_to_utf8</tt> which can be used to easily 
convert text from
+any character set to UTF-8.  This conversion is important since the
+linked list of keywords that is returned by <acronym>GNU 
libextractor</acronym> is
+expected to contain only UTF-8 strings.  Naturally, proper conversion
+may not always be possible since some file formats fail to specify the
+character set.  In that case, it is often better to not convert at
+all.
+</p>
+<p>The arguments to <tt>EXTRACTOR_common_convert_to_utf8</tt> are the input 
string (which
+does <em>not</em> have to be zero-terminated), the length of the input
+string, and the character set (which <em>must</em> be zero-terminated).
+Which character sets are supported depends on the platform, a list can
+generally be obtained using the <code>iconv -l</code> command.  The
+return value from <tt>EXTRACTOR_common_convert_to_utf8</tt> is a 
zero-terminated string
+in UTF-8 format.  The responsibility to free the string is with the
+caller, so storing the string in the keyword list is acceptable.
+</p></dd></dl>
+
+
+
+
+
+<hr size="6">
+<a name="Reporting-bugs"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Copying" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Internal-utility-functions" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Copying" title="Next chapter"> 
&gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Reporting-bugs-1"></a>
+<h1 class="chapter">10. Reporting bugs</h1>
+
+<a name="index-bug"></a>
+<p><acronym>GNU libextractor</acronym> uses the <a 
href="http://gnunet.org/bugs/";>Mantis bugtracking system</a>.  If possible, 
please report bugs there.  You can also e-mail
+the <acronym>GNU libextractor</acronym> mailinglist at <a 
href="address@hidden">address@hidden</a>.
+</p>
+
+
+
+<hr size="6">
+<a name="Copying"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Reporting-bugs" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Preamble" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Reporting-bugs" title="Beginning 
of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="GNU-GENERAL-PUBLIC-LICENSE"></a>
+<h1 class="appendix">A. GNU GENERAL PUBLIC LICENSE</h1>
+
+<a name="index-GPL_002c-GNU-General-Public-License"></a>
+<p align="center"> Version 2, June 1991
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="display">Copyright &copy; 1989, 1991 
Free Software Foundation, Inc.
+59 Temple Place &ndash; Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+</pre></td></tr></table>
+
+<hr size="6">
+<a name="Preamble"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Copying" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a 
href="#How-to-Apply-These-Terms-to-Your-New-Programs" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Copying" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Copying" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h3 class="appendixsubsec">A.0.1 Preamble</h3>
+
+<p>  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software&mdash;to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation&rsquo;s software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+</p>
+<p>  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+</p>
+<p>  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+</p>
+<p>  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+</p>
+<p>  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+</p>
+<p>  Also, for each author&rsquo;s protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors&rsquo; reputations.
+</p>
+<p>  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone&rsquo;s free use or not licensed at all.
+</p>
+<p>  The precise terms and conditions for copying, distribution and
+modification follow.
+</p>
+
+<ol>
+<li>
+This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The &ldquo;Program&rdquo;, 
below,
+refers to any such program or work, and a &ldquo;work based on the 
Program&rdquo;
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term &ldquo;modification&rdquo;.)  Each licensee is addressed as 
&ldquo;you&rdquo;.
+
+<p>Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+</p>
+</li><li>
+You may copy and distribute verbatim copies of the Program&rsquo;s
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+<p>You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+</p>
+</li><li>
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+<ol>
+<li>
+You must cause the modified files to carry prominent notices
+stating that you changed the files and the date of any change.
+
+</li><li>
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+</li><li>
+If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License.  (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+</li></ol>
+
+<p>These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+</p>
+<p>Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+</p>
+<p>In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+</p>
+</li><li>
+You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+<ol>
+<li>
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+</li><li>
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+</li><li>
+Accompany it with the information you received as to the offer
+to distribute corresponding source code.  (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+</li></ol>
+
+<p>The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+</p>
+<p>If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+</p>
+</li><li>
+You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+</li><li>
+You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+</li><li>
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients&rsquo; exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+</li><li>
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+<p>If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+</p>
+<p>It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+</p>
+<p>This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+</p>
+</li><li>
+If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+</li><li>
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+<p>Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and &ldquo;any
+later version&rdquo;, you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+</p>
+</li><li>
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+</li><li>
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER 
EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+</li><li>
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+</li></ol>
+
+
+
+<hr size="6">
+<a name="How-to-Apply-These-Terms-to-Your-New-Programs"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Preamble" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" title="Next section 
in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Copying" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Copying" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" title="Next 
chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h2 class="unnumberedsec">How to Apply These Terms to Your New Programs</h2>
+
+<p>  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+</p>
+<p>  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the &ldquo;copyright&rdquo; line and a pointer to where the full notice is 
found.
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="smallexample"><var>one line to give 
the program's name and an idea of what it does.</var>
+Copyright (C) 19<var>yy</var>  <var>name of author</var>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+</pre></td></tr></table>
+
+<p>Also add information on how to contact you by electronic and paper mail.
+</p>
+<p>If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="smallexample">Gnomovision version 
69, Copyright (C) 19<var>yy</var> <var>name of author</var>
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c' 
+for details.
+</pre></td></tr></table>
+
+<p>The hypothetical commands &lsquo;<samp>show w</samp>&rsquo; and 
&lsquo;<samp>show c</samp>&rsquo; should show
+the appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than &lsquo;<samp>show 
w</samp>&rsquo; and
+&lsquo;<samp>show c</samp>&rsquo;; they could even be mouse-clicks or menu 
items&mdash;whatever
+suits your program.
+</p>
+<p>You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, 
if
+necessary.  Here is a sample; alter the names:
+</p>
+<table><tr><td>&nbsp;</td><td><pre class="smallexample">Yoyodyne, Inc., hereby 
disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written 
+by James Hacker.
+
+<var>signature of Ty Coon</var>, 1 April 1989
+Ty Coon, President of Vice
+</pre></td></tr></table>
+
+<p>This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+</p>
+<hr size="6">
+<a name="Concept-Index"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a 
href="#How-to-Apply-These-Terms-to-Your-New-Programs" title="Previous section 
in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Copying" title="Beginning of this 
chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Next chapter"> &gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Concept-Index-1"></a>
+<h1 class="unnumbered">Concept Index</h1>
+
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Concept-Index-1_cp_letter-B" class="summary-letter"><b>B</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-C" class="summary-letter"><b>C</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-D" class="summary-letter"><b>D</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-E" class="summary-letter"><b>E</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-G" class="summary-letter"><b>G</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-I" class="summary-letter"><b>I</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-J" class="summary-letter"><b>J</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-L" class="summary-letter"><b>L</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-M" class="summary-letter"><b>M</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-P" class="summary-letter"><b>P</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-R" class="summary-letter"><b>R</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-S" class="summary-letter"><b>S</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-T" class="summary-letter"><b>T</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-U" class="summary-letter"><b>U</b></a>
+ &nbsp; 
+</td></tr></table>
+<table border="0" class="index-cp">
+<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-B">B</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bug">bug</a></td><td 
valign="top"><a href="#Reporting-bugs">10. Reporting bugs</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-bus-error">bus error</a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-C">C</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-character-set">character 
set</a></td><td valign="top"><a href="#Internal-utility-functions">9. Internal 
utility functions</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-concurrency">concurrency</a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-concurrency-1">concurrency</a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-concurrency-2">concurrency</a></td><td valign="top"><a 
href="#Utility-functions">6. Utility functions</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-D">D</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-directory-structure">directory 
structure</a></td><td valign="top"><a href="#Preparation">2. 
Preparation</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-environment-variables">environment variables</a></td><td 
valign="top"><a href="#Preparation">2. Preparation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-error-handling">error 
handling</a></td><td valign="top"><a href="#Introduction">1. 
Introduction</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-G">G</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-gettext">gettext</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-gettext-1">gettext</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-GPL_002c-GNU-General-Public-License">GPL, GNU General Public 
License</a></td><td valign="top"><a href="#Copying">A. GNU GENERAL PUBLIC 
LICENSE</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-I">I</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-internationalization">internationalization</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-internationalization-1">internationalization</a></td><td 
valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-J">J</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Java">Java</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-L">L</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-license">license</a></td><td 
valign="top"><a href="#Introduction">1. Introduction</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-M">M</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Mono">Mono</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-P">P</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-packageing">packageing</a></td><td valign="top"><a 
href="#Preparation">2. Preparation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Perl">Perl</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-PHP">PHP</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-plugin">plugin</a></td><td 
valign="top"><a href="#Introduction">1. Introduction</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-plugin-1">plugin</a></td><td 
valign="top"><a href="#Preparation">2. Preparation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Python">Python</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-reentrant">reentrant</a></td><td 
valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-reentrant-1">reentrant</a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-reentrant-2">reentrant</a></td><td valign="top"><a 
href="#Utility-functions">6. Utility functions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Ruby">Ruby</a></td><td 
valign="top"><a href="#Language-bindings">5. Language bindings</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-SIGBUS">SIGBUS</a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-T">T</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-thread_002dsafety">thread-safety</a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-thread_002dsafety-1">thread-safety</a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-thread_002dsafety-2">thread-safety</a></td><td valign="top"><a 
href="#Utility-functions">6. Utility functions</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-threads">threads</a></td><td 
valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-threads-1">threads</a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-threads-2">threads</a></td><td 
valign="top"><a href="#Utility-functions">6. Utility functions</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Concept-Index-1_cp_letter-U">U</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-UTF_002d8">UTF-8</a></td><td 
valign="top"><a href="#Internal-utility-functions">9. Internal utility 
functions</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Concept-Index-1_cp_letter-B" class="summary-letter"><b>B</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-C" class="summary-letter"><b>C</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-D" class="summary-letter"><b>D</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-E" class="summary-letter"><b>E</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-G" class="summary-letter"><b>G</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-I" class="summary-letter"><b>I</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-J" class="summary-letter"><b>J</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-L" class="summary-letter"><b>L</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-M" class="summary-letter"><b>M</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-P" class="summary-letter"><b>P</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-R" class="summary-letter"><b>R</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-S" class="summary-letter"><b>S</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-T" class="summary-letter"><b>T</b></a>
+ &nbsp; 
+<a href="#Concept-Index-1_cp_letter-U" class="summary-letter"><b>U</b></a>
+ &nbsp; 
+</td></tr></table>
+
+<hr size="6">
+<a name="Function-and-Data-Index"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Concept-Index" title="Previous 
section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Type-Index" title="Next section in 
reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Concept-Index" title="Beginning of 
this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[<a href="#Type-Index" title="Next chapter"> 
&gt;&gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Function-and-Data-Index-1"></a>
+<h1 class="unnumbered">Function and Data Index</h1>
+
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Function-and-Data-Index-1_fn_symbol-1" 
class="summary-letter"><b>(</b></a>
+ &nbsp; 
+<br>
+<a href="#Function-and-Data-Index-1_fn_letter-E" 
class="summary-letter"><b>E</b></a>
+ &nbsp; 
+</td></tr></table>
+<table border="0" class="index-fn">
+<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a 
name="Function-and-Data-Index-1_fn_symbol-1">(</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-_0028"><code>(</code></a></td><td valign="top"><a 
href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a 
name="Function-and-Data-Index-1_fn_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8"><code>EXTRACTOR_common_convert_to_utf8</code></a></td><td
 valign="top"><a href="#Internal-utility-functions">9. Internal utility 
functions</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fcommon_005fconvert_005fto_005futf8-1"><code>EXTRACTOR_common_convert_to_utf8</code></a></td><td
 valign="top"><a href="#Internal-utility-functions">9. Internal utility 
functions</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fextract"><code>EXTRACTOR_extract</code></a></td><td 
valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fextract-1"><code>EXTRACTOR_extract</code></a></td><td
 valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fget_005fmax"><code>EXTRACTOR_metatype_get_max</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fdescription"><code>EXTRACTOR_metatype_to_description</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fdescription-1"><code>EXTRACTOR_metatype_to_description</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fstring"><code>EXTRACTOR_metatype_to_string</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmetatype_005fto_005fstring-1"><code>EXTRACTOR_metatype_to_string</code></a></td><td
 valign="top"><a href="#Meta-types">4.2 Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fmeta_005fdata_005fprint"><code>EXTRACTOR_meta_data_print</code></a></td><td
 valign="top"><a href="#Meta-data-printing">6.2 Meta data printing</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd"><code>EXTRACTOR_plugin_add</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd-1"><code>EXTRACTOR_plugin_add</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fconfig"><code>EXTRACTOR_plugin_add_config</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fconfig-1"><code>EXTRACTOR_plugin_add_config</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fdefaults"><code>EXTRACTOR_plugin_add_defaults</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fadd_005fdefaults-1"><code>EXTRACTOR_plugin_add_defaults</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove"><code>EXTRACTOR_plugin_remove</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove-1"><code>EXTRACTOR_plugin_remove</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove_005fall"><code>EXTRACTOR_plugin_remove_all</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fplugin_005fremove_005fall-1"><code>EXTRACTOR_plugin_remove_all</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fVERSION"><code>EXTRACTOR_VERSION</code></a></td><td 
valign="top"><a href="#Utility-Constants">6.1 Utility Constants</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Function-and-Data-Index-1_fn_symbol-1" 
class="summary-letter"><b>(</b></a>
+ &nbsp; 
+<br>
+<a href="#Function-and-Data-Index-1_fn_letter-E" 
class="summary-letter"><b>E</b></a>
+ &nbsp; 
+</td></tr></table>
+
+<hr size="6">
+<a name="Type-Index"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[ &gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Function-and-Data-Index" 
title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
+<td valign="middle" align="left">[<a href="#Top" title="Up section"> Up 
</a>]</td>
+<td valign="middle" align="left">[ &gt;&gt; ]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<a name="Type-Index-1"></a>
+<h1 class="unnumbered">Type Index</h1>
+
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Type-Index-1_tp_letter-E" class="summary-letter"><b>E</b></a>
+ &nbsp; 
+<a href="#Type-Index-1_tp_letter-S" class="summary-letter"><b>S</b></a>
+ &nbsp; 
+</td></tr></table>
+<table border="0" class="index-tp">
+<tr><td></td><th align="left">Index Entry</th><th align="left"> 
Section</th></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Type-Index-1_tp_letter-E">E</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-enum-EXTRACTOR_005fMetaFormat"><code>enum 
EXTRACTOR_MetaFormat</code></a></td><td valign="top"><a 
href="#Meta-formats">4.3 Meta formats</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-enum-EXTRACTOR_005fMetaType"><code>enum 
EXTRACTOR_MetaType</code></a></td><td valign="top"><a href="#Meta-types">4.2 
Meta types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-enum-EXTRACTOR_005fOptions"><code>enum 
EXTRACTOR_Options</code></a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fMetaDataProcessor"><code>EXTRACTOR_MetaDataProcessor</code></a></td><td
 valign="top"><a href="#Extracting">4.4 Extracting</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-EXTRACTOR_005fPluginList"><code>EXTRACTOR_PluginList</code></a></td><td
 valign="top"><a href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+<tr><th><a name="Type-Index-1_tp_letter-S">S</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-struct-EXTRACTOR_005fPluginList"><code>struct 
EXTRACTOR_PluginList</code></a></td><td valign="top"><a 
href="#Plugin-management">4.1 Plugin management</a></td></tr>
+<tr><td colspan="3"> <hr></td></tr>
+</table>
+<table><tr><th valign="top">Jump to: &nbsp; </th><td><a 
href="#Type-Index-1_tp_letter-E" class="summary-letter"><b>E</b></a>
+ &nbsp; 
+<a href="#Type-Index-1_tp_letter-S" class="summary-letter"><b>S</b></a>
+ &nbsp; 
+</td></tr></table>
+
+<hr size="6">
+<a name="SEC_Foot"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h1>Footnotes</h1>
+<h3><a name="FOOT1" href="#DOCF1">(1)</a></h3>
+<p>Some distributions ship <code>extract</code> in a
+seperate package.
+</p><h3><a name="FOOT2" href="#DOCF2">(2)</a></h3>
+<p>It
+maybe possible to switch to GPLv3 in the future.  For this, an audit
+of the license status of our dependencies would be required.  The new
+code that was developed specifically for <acronym>GNU libextractor</acronym> 
has
+always been licensed under GPLv2 <em>or any later version</em>.
+</p><h3><a name="FOOT3" href="#DOCF3">(3)</a></h3>
+<p>Debian policy
+furthermore requires a &lsquo;<tt>-dev</tt>&rsquo; (meta) package that would 
depend on
+all of the above packages.
+</p><h3><a name="FOOT4" href="#DOCF4">(4)</a></h3>
+<p>If
+<acronym>GNU libextractor</acronym> was given a pointer to an existing, 
uncompressed block of
+data in memory, no bound is imposed for plugins executing in-process;
+for out-of-process plugins, a 32 MB limit is still imposed.
+</p><hr size="1">
+<a name="SEC_Contents"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h1>Table of Contents</h1>
+<div class="contents">
+
+<ul class="toc">
+  <li><a name="toc-Introduction-1" href="#Introduction">1. 
Introduction</a></li>
+  <li><a name="toc-Preparation-1" href="#Preparation">2. Preparation</a>
+  <ul class="toc">
+    <li><a name="toc-Installation-on-GNU_002fLinux" 
href="#Installation-on-GNU_002fLinux">2.1 Installation on GNU/Linux</a></li>
+    <li><a name="toc-Installation-on-FreeBSD" 
href="#Installation-on-FreeBSD">2.2 Installation on FreeBSD</a></li>
+    <li><a name="toc-Installation-on-OpenBSD" 
href="#Installation-on-OpenBSD">2.3 Installation on OpenBSD</a></li>
+    <li><a name="toc-Installation-on-NetBSD" 
href="#Installation-on-NetBSD">2.4 Installation on NetBSD</a></li>
+    <li><a name="toc-Installation-using-MinGW" 
href="#Installation-using-MinGW">2.5 Installation using MinGW</a></li>
+    <li><a name="toc-Installation-on-OS-X" href="#Installation-on-OS-X">2.6 
Installation on OS X</a>
+    <ul class="toc">
+      <li><a name="toc-Installing-and-uninstalling-the-framework" 
href="#Installing-and-uninstalling-the-framework">2.6.1 Installing and 
uninstalling the framework</a></li>
+      <li><a name="toc-Using-the-framework" href="#Using-the-framework">2.6.2 
Using the framework</a></li>
+      <li><a name="toc-Example-for-using-the-framework" 
href="#Example-for-using-the-framework">2.6.3 Example for using the 
framework</a></li>
+      <li><a name="toc-Example-for-using-the-dynamic-library" 
href="#Example-for-using-the-dynamic-library">2.6.4 Example for using the 
dynamic library</a></li>
+    </ul></li>
+    <li><a name="toc-Note-to-package-maintainers" 
href="#Note-to-package-maintainers">2.7 Note to package maintainers</a></li>
+  </ul></li>
+  <li><a name="toc-Generalities-1" href="#Generalities">3. Generalities</a>
+  <ul class="toc">
+    <li><a name="toc-Introduction-to-the-_0060_0060extract_0027_0027-command" 
href="#Introduction-to-the-_0060_0060extract_0027_0027-command">3.1 
Introduction to the &ldquo;extract&rdquo; command</a></li>
+    <li><a name="toc-Common-usage-examples-for-_0060_0060extract_0027_0027" 
href="#Common-usage-examples-for-_0060_0060extract_0027_0027">3.2 Common usage 
examples for &ldquo;extract&rdquo;</a></li>
+    <li><a name="toc-Introduction-to-the-libextractor-library" 
href="#Introduction-to-the-libextractor-library">3.3 Introduction to the 
libextractor library</a></li>
+  </ul></li>
+  <li><a name="toc-Extracting-meta-data-1" href="#Extracting-meta-data">4. 
Extracting meta data</a>
+  <ul class="toc">
+    <li><a name="toc-Plugin-management-1" href="#Plugin-management">4.1 Plugin 
management</a></li>
+    <li><a name="toc-Meta-types-1" href="#Meta-types">4.2 Meta types</a></li>
+    <li><a name="toc-Meta-formats-1" href="#Meta-formats">4.3 Meta 
formats</a></li>
+    <li><a name="toc-Extracting-1" href="#Extracting">4.4 Extracting</a></li>
+  </ul></li>
+  <li><a name="toc-Language-bindings-1" href="#Language-bindings">5. Language 
bindings</a>
+  <ul class="toc">
+    <li><a name="toc-Java" href="#Java">5.1 Java</a></li>
+    <li><a name="toc-Mono" href="#Mono">5.2 Mono</a></li>
+    <li><a name="toc-Perl" href="#Perl">5.3 Perl</a></li>
+    <li><a name="toc-Python" href="#Python">5.4 Python</a></li>
+    <li><a name="toc-PHP" href="#PHP">5.5 PHP</a></li>
+    <li><a name="toc-Ruby" href="#Ruby">5.6 Ruby</a></li>
+  </ul></li>
+  <li><a name="toc-Utility-functions-1" href="#Utility-functions">6. Utility 
functions</a>
+  <ul class="toc">
+    <li><a name="toc-Utility-Constants-1" href="#Utility-Constants">6.1 
Utility Constants</a></li>
+    <li><a name="toc-Meta-data-printing-1" href="#Meta-data-printing">6.2 Meta 
data printing</a></li>
+  </ul></li>
+  <li><a name="toc-Existing-Plugins-1" href="#Existing-Plugins">7. Existing 
Plugins</a></li>
+  <li><a name="toc-Writing-new-Plugins-1" href="#Writing-new-Plugins">8. 
Writing new Plugins</a>
+  <ul class="toc">
+    <li><a name="toc-Example-for-a-minimal-extract-method" 
href="#Example-for-a-minimal-extract-method">8.1 Example for a minimal extract 
method</a></li>
+    <li><a name="toc-Plugin-execution-options" 
href="#Plugin-execution-options">8.2 Plugin execution options</a></li>
+    <li><a name="toc-Example-for-an-options-method" 
href="#Example-for-an-options-method">8.3 Example for an options method</a></li>
+  </ul></li>
+  <li><a name="toc-Internal-utility-functions-1" 
href="#Internal-utility-functions">9. Internal utility functions</a></li>
+  <li><a name="toc-Reporting-bugs-1" href="#Reporting-bugs">10. Reporting 
bugs</a></li>
+  <li><a name="toc-GNU-GENERAL-PUBLIC-LICENSE" href="#Copying">A. GNU GENERAL 
PUBLIC LICENSE</a>
+  <ul class="toc">
+
+    <ul class="toc">
+      <li><a name="toc-Preamble" href="#Preamble">A.0.1 Preamble</a></li>
+    </ul></li>
+    <li><a name="toc-How-to-Apply-These-Terms-to-Your-New-Programs" 
href="#How-to-Apply-These-Terms-to-Your-New-Programs">How to Apply These Terms 
to Your New Programs</a></li>
+  </ul></li>
+  <li><a name="toc-Concept-Index-1" href="#Concept-Index">Concept 
Index</a></li>
+  <li><a name="toc-Function-and-Data-Index-1" 
href="#Function-and-Data-Index">Function and Data Index</a></li>
+  <li><a name="toc-Type-Index-1" href="#Type-Index">Type Index</a></li>
+</ul>
+</div>
+<hr size="1">
+<a name="SEC_Overview"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h1>Short Table of Contents</h1>
+<div class="shortcontents">
+<ul class="toc">
+<li><a name="stoc-Introduction-1" href="#Introduction">1. Introduction</a></li>
+<li><a name="stoc-Preparation-1" href="#Preparation">2. Preparation</a></li>
+<li><a name="stoc-Generalities-1" href="#Generalities">3. Generalities</a></li>
+<li><a name="stoc-Extracting-meta-data-1" href="#Extracting-meta-data">4. 
Extracting meta data</a></li>
+<li><a name="stoc-Language-bindings-1" href="#Language-bindings">5. Language 
bindings</a></li>
+<li><a name="stoc-Utility-functions-1" href="#Utility-functions">6. Utility 
functions</a></li>
+<li><a name="stoc-Existing-Plugins-1" href="#Existing-Plugins">7. Existing 
Plugins</a></li>
+<li><a name="stoc-Writing-new-Plugins-1" href="#Writing-new-Plugins">8. 
Writing new Plugins</a></li>
+<li><a name="stoc-Internal-utility-functions-1" 
href="#Internal-utility-functions">9. Internal utility functions</a></li>
+<li><a name="stoc-Reporting-bugs-1" href="#Reporting-bugs">10. Reporting 
bugs</a></li>
+<li><a name="stoc-GNU-GENERAL-PUBLIC-LICENSE" href="#Copying">A. GNU GENERAL 
PUBLIC LICENSE</a></li>
+<li><a name="stoc-Concept-Index-1" href="#Concept-Index">Concept Index</a></li>
+<li><a name="stoc-Function-and-Data-Index-1" 
href="#Function-and-Data-Index">Function and Data Index</a></li>
+<li><a name="stoc-Type-Index-1" href="#Type-Index">Type Index</a></li>
+</ul>
+</div>
+<hr size="1">
+<a name="SEC_About"></a>
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="#Top" title="Cover (top) of 
document">Top</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of 
contents">Contents</a>]</td>
+<td valign="middle" align="left">[<a href="#Concept-Index" 
title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? 
</a>]</td>
+</tr></table>
+<h1>About This Document</h1>
+<p>
+  This document was generated by <em>Christian Grothoff</em> on <em>January 
13, 2010</em> using <a href="http://www.nongnu.org/texi2html/";><em>texi2html 
1.82</em></a>.
+</p>
+<p>
+  The buttons in the navigation panels have the following meaning:
+</p>
+<table border="1">
+  <tr>
+    <th> Button </th>
+    <th> Name </th>
+    <th> Go to </th>
+    <th> From 1.2.3 go to</th>
+  </tr>
+  <tr>
+    <td align="center"> [ &lt; ] </td>
+    <td align="center">Back</td>
+    <td>Previous section in reading order</td>
+    <td>1.2.2</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &gt; ] </td>
+    <td align="center">Forward</td>
+    <td>Next section in reading order</td>
+    <td>1.2.4</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &lt;&lt; ] </td>
+    <td align="center">FastBack</td>
+    <td>Beginning of this chapter or previous chapter</td>
+    <td>1</td>
+  </tr>
+  <tr>
+    <td align="center"> [ Up ] </td>
+    <td align="center">Up</td>
+    <td>Up section</td>
+    <td>1.2</td>
+  </tr>
+  <tr>
+    <td align="center"> [ &gt;&gt; ] </td>
+    <td align="center">FastForward</td>
+    <td>Next chapter</td>
+    <td>2</td>
+  </tr>
+  <tr>
+    <td align="center"> [Top] </td>
+    <td align="center">Top</td>
+    <td>Cover (top) of document</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [Contents] </td>
+    <td align="center">Contents</td>
+    <td>Table of contents</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [Index] </td>
+    <td align="center">Index</td>
+    <td>Index</td>
+    <td> &nbsp; </td>
+  </tr>
+  <tr>
+    <td align="center"> [ ? ] </td>
+    <td align="center">About</td>
+    <td>About (help)</td>
+    <td> &nbsp; </td>
+  </tr>
+</table>
+
+<p>
+  where the <strong> Example </strong> assumes that the current position is at 
<strong> Subsubsection One-Two-Three </strong> of a document of the following 
structure:
+</p>
+
+<ul>
+  <li> 1. Section One
+    <ul>
+      <li>1.1 Subsection One-One
+        <ul>
+          <li>...</li>
+        </ul>
+      </li>
+      <li>1.2 Subsection One-Two
+        <ul>
+          <li>1.2.1 Subsubsection One-Two-One</li>
+          <li>1.2.2 Subsubsection One-Two-Two</li>
+          <li>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp;
+            <strong>&lt;== Current Position </strong></li>
+          <li>1.2.4 Subsubsection One-Two-Four</li>
+        </ul>
+      </li>
+      <li>1.3 Subsection One-Three
+        <ul>
+          <li>...</li>
+        </ul>
+      </li>
+      <li>1.4 Subsection One-Four</li>
+    </ul>
+  </li>
+</ul>
+
+<hr size="1">
+<p>
+ <font size="-1">
+  This document was generated by <em>Christian Grothoff</em> on <em>January 
13, 2010</em> using <a href="http://www.nongnu.org/texi2html/";><em>texi2html 
1.82</em></a>.
+ </font>
+ <br>
+
+</p>
+</body>
+</html>

Copied: Extractor-docs/WWW/manual/extractor.pdf (from rev 23661, 
Extractor-docs/WWW/extractor.pdf)
===================================================================
(Binary files differ)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]