gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r9817 - in Extractor: . src/include src/main src/plugins


From: gnunet
Subject: [GNUnet-SVN] r9817 - in Extractor: . src/include src/main src/plugins
Date: Sun, 20 Dec 2009 01:06:45 +0100

Author: grothoff
Date: 2009-12-20 01:06:45 +0100 (Sun, 20 Dec 2009)
New Revision: 9817

Modified:
   Extractor/TODO
   Extractor/src/include/extractor.h
   Extractor/src/main/extractor_metatypes.c
   Extractor/src/plugins/id3v23_extractor.c
   Extractor/src/plugins/id3v24_extractor.c
   Extractor/src/plugins/id3v2_extractor.c
   Extractor/src/plugins/odf_extractor.c
   Extractor/src/plugins/ole2_extractor.c
   Extractor/src/plugins/png_extractor.c
   Extractor/src/plugins/qt_extractor.c
Log:
id3vx

Modified: Extractor/TODO
===================================================================
--- Extractor/TODO      2009-12-20 00:01:02 UTC (rev 9816)
+++ Extractor/TODO      2009-12-20 00:06:45 UTC (rev 9817)
@@ -17,12 +17,12 @@
 
 Incomplete code (missing features):
 * RIFF (idx1 attribute)
-* IDv2{3,4} (some attributes, make testcases in test/id3v2/ work)
 * StarOffice sdw (some attributes, see doc/)
 * man pages (interpret sections for authors, brief description)
 * pdf: full-text extraction!
 * EXIV2
 * ELF: 64-bit support, lists of architectures, OSes, etc. are incomplete
+* ID3v2x: unsynchronization support, (de)compression support, footer support 
(24)
 
 Desirable missing formats:
 * mbox / various e-mail formats

Modified: Extractor/src/include/extractor.h
===================================================================
--- Extractor/src/include/extractor.h   2009-12-20 00:01:02 UTC (rev 9816)
+++ Extractor/src/include/extractor.h   2009-12-20 00:06:45 UTC (rev 9817)
@@ -280,8 +280,8 @@
     EXTRACTOR_METATYPE_PRODUCT_VERSION = 148,
     EXTRACTOR_METATYPE_CONTRIBUTOR_NAME = 149,
     EXTRACTOR_METATYPE_MOVIE_DIRECTOR = 150,
-    EXTRACTOR_METATYPE_TV_NETWORK_NAME = 151,
-    EXTRACTOR_METATYPE_TV_SHOW_NAME = 152,
+    EXTRACTOR_METATYPE_NETWORK_NAME = 151,
+    EXTRACTOR_METATYPE_SHOW_NAME = 152,
     EXTRACTOR_METATYPE_CHAPTER_NAME = 153,
     EXTRACTOR_METATYPE_SONG_COUNT = 154,
     EXTRACTOR_METATYPE_STARTING_SONG = 155,
@@ -295,13 +295,17 @@
     EXTRACTOR_METATYPE_ORIGINAL_ARTIST = 163,
     EXTRACTOR_METATYPE_ORIGINAL_WRITER = 164,
     EXTRACTOR_METATYPE_ORIGINAL_RELEASE_YEAR = 165,
-    EXTRACTOR_METATYPE_LYRICS = 166,
-    EXTRACTOR_METATYPE_POPULARITY_METER = 167,
+    EXTRACTOR_METATYPE_ORIGINAL_PERFORMER = 166,
+    EXTRACTOR_METATYPE_LYRICS = 167,
+    EXTRACTOR_METATYPE_POPULARITY_METER = 168,
+    EXTRACTOR_METATYPE_LICENSEE = 169,
+    EXTRACTOR_METATYPE_MUSICIAN_CREDITS_LIST = 170,
+    EXTRACTOR_METATYPE_MOOD = 171, 
+    EXTRACTOR_METATYPE_SUBTITLE = 172, 
 
     /* fixme: used up to here! */
 
     EXTRACTOR_METATYPE_MUSIC_CD_IDENTIFIER = 117,
-    EXTRACTOR_METATYPE_MUSICIAN_CREDITS_LIST = 123,
 
     
     EXTRACTOR_METATYPE_SCALE = 108,
@@ -342,7 +346,6 @@
     EXTRACTOR_METATYPE_FULL_NAME = 113,
     EXTRACTOR_METATYPE_LINK = 116,
     EXTRACTOR_METATYPE_TIME = 122,
-    EXTRACTOR_METATYPE_MOOD = 124, 
     EXTRACTOR_METATYPE_TELEVISION_SYSTEM = 126,
     EXTRACTOR_METATYPE_HARDWARE_DEPENDENCY = 129,
     EXTRACTOR_METATYPE_RIPPER = 130,

Modified: Extractor/src/main/extractor_metatypes.c
===================================================================
--- Extractor/src/main/extractor_metatypes.c    2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/main/extractor_metatypes.c    2009-12-20 00:06:45 UTC (rev 
9817)
@@ -369,10 +369,10 @@
   /* 150 */
   { gettext_noop ("movie director"),
     gettext_noop ("name of the director") }, 
-  { gettext_noop ("TV network"),
-    gettext_noop ("name of the broadcasting TV network") }, 
-  { gettext_noop ("TV show"),
-    gettext_noop ("name of the TV show") }, 
+  { gettext_noop ("network"),
+    gettext_noop ("name of the broadcasting network or station") }, 
+  { gettext_noop ("show"),
+    gettext_noop ("name of the show") }, 
   { gettext_noop ("chapter name"),
     gettext_noop ("name of the chapter") }, 
   { gettext_noop ("song count"),
@@ -402,12 +402,25 @@
   /* 165 */
   { gettext_noop ("original release year"),
     gettext_noop ("year of the original release") }, 
+  { gettext_noop ("original performer"),
+    gettext_noop ("name of the original performer") }, 
   { gettext_noop ("lyrics"),
     gettext_noop ("lyrics of the song or text description of vocal 
activities") }, 
   { gettext_noop ("popularity"),
     gettext_noop ("information about the file's popularity") }, 
+  { gettext_noop ("licensee"),
+    gettext_noop ("name of the owner or licensee of the file") }, 
+  /* 170 */
+  { gettext_noop ("musician credit list"),
+    gettext_noop ("names of contributing musicians") }, 
+  { gettext_noop ("mood"),
+    gettext_noop ("keywords reflecting the mood of the piece") }, 
+  { gettext_noop ("subtitle"),
+    gettext_noop ("subtitle of this part") }, 
   { gettext_noop (""),
     gettext_noop ("") }, 
+  { gettext_noop (""),
+    gettext_noop ("") }, 
 #if 0
   
   gettext_noop("author"),

Modified: Extractor/src/plugins/id3v23_extractor.c
===================================================================
--- Extractor/src/plugins/id3v23_extractor.c    2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/id3v23_extractor.c    2009-12-20 00:06:45 UTC (rev 
9817)
@@ -1,6 +1,6 @@
 /*
      This file is part of libextractor.
-     (C) 2002, 2003, 2004, 2006, 2007 Vidyut Samanta and Christian Grothoff
+     (C) 2002, 2003, 2004, 2006, 2007, 2009 Vidyut Samanta and Christian 
Grothoff
 
      libextractor is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -35,54 +35,83 @@
 
 #include "convert.h"
 
+enum Id3v23Fmt
+  {
+    T, /* simple, 0-terminated string, prefixed by encoding */
+    U, /* 0-terminated ASCII string, no encoding */
+    UL, /* unsync'ed lyrics */
+    SL, /* sync'ed lyrics */
+    L, /* string with language prefix */
+    I /* image */
+  };
+
 typedef struct
 {
   const char *text;
   enum EXTRACTOR_MetaType type;
+  enum Id3v23Fmt fmt;
 } Matches;
 
 static Matches tmap[] = {
-  {"COMM", EXTRACTOR_METATYPE_COMMENT},
-  {"IPLS", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"LINK", EXTRACTOR_METATYPE_LINK},
-  {"MCDI", EXTRACTOR_METATYPE_MUSIC_CD_IDENTIFIER},
-  {"PCNT", EXTRACTOR_METATYPE_PLAY_COUNTER},
-  {"POPM", EXTRACTOR_METATYPE_POPULARITY_METER},
-  {"TCOP", EXTRACTOR_METATYPE_COPYRIGHT},
-  {"TDAT", EXTRACTOR_METATYPE_DATE},
-  {"TCON", EXTRACTOR_METATYPE_CONTENT_TYPE},
-  {"TIT1", EXTRACTOR_METATYPE_GENRE},
-  {"TENC", EXTRACTOR_METATYPE_ENCODED_BY},
-  {"TEXT", EXTRACTOR_METATYPE_LYRICS},
-  {"TOLY", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"TOPE", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"TOWN", EXTRACTOR_METATYPE_OWNER},
-  {"TPE1", EXTRACTOR_METATYPE_ARTIST},
-  {"TPE2", EXTRACTOR_METATYPE_ARTIST},
-  {"TPE3", EXTRACTOR_METATYPE_CONDUCTOR},
-  {"TPE4", EXTRACTOR_METATYPE_INTERPRET},
-  {"TMED", EXTRACTOR_METATYPE_MEDIA_TYPE},
-  {"TCOM", EXTRACTOR_METATYPE_CREATOR},
-  {"TIME", EXTRACTOR_METATYPE_TIME},
-  {"TOFN", EXTRACTOR_METATYPE_FILENAME},
-  {"TOPE", EXTRACTOR_METATYPE_ARTIST},
-  {"TPUB", EXTRACTOR_METATYPE_PUBLISHER},
-  {"TRCK", EXTRACTOR_METATYPE_TRACK_NUMBER},
-  {"TRSC", EXTRACTOR_METATYPE_ISRC},
-  {"TRSN", EXTRACTOR_METATYPE_SOURCE},
-  {"TRSO", EXTRACTOR_METATYPE_CREATED_FOR},
-  {"TSRC", EXTRACTOR_METATYPE_RESOURCE_IDENTIFIER},
-  {"TOAL", EXTRACTOR_METATYPE_ALBUM},
-  {"TALB", EXTRACTOR_METATYPE_ALBUM},
-  {"TLAN", EXTRACTOR_METATYPE_LANGUAGE},
-  {"TYER", EXTRACTOR_METATYPE_YEAR},
-  {"TLEN", EXTRACTOR_METATYPE_DURATION},
-  {"TIT2", EXTRACTOR_METATYPE_TITLE},
-  {"TIT3", EXTRACTOR_METATYPE_DESCRIPTION},
-  {"WCOM", EXTRACTOR_METATYPE_RELEASE},
-  {"WCOP", EXTRACTOR_METATYPE_DISCLAIMER},
-  {"", EXTRACTOR_METATYPE_KEYWORDS},
-  {NULL, 0}
+  {"TALB", EXTRACTOR_METATYPE_ALBUM, T},
+  {"TBPM", EXTRACTOR_METATYPE_BEATS_PER_MINUTE, T},
+  {"TCOM", EXTRACTOR_METATYPE_COMPOSER, T},
+  {"TCON", EXTRACTOR_METATYPE_SONG_VERSION, T},
+  {"TCOP", EXTRACTOR_METATYPE_COPYRIGHT, T},
+  /* {"TDAT", EXTRACTOR_METATYPE_CREATION_DATE, T}, */
+  /* TDLY */
+  {"TENC", EXTRACTOR_METATYPE_ENCODED_BY, T},
+  {"TEXT", EXTRACTOR_METATYPE_WRITER, T},  
+  {"TFLT", EXTRACTOR_METATYPE_FORMAT_VERSION, T},
+  /* TIME */
+  {"TIT1", EXTRACTOR_METATYPE_SECTION, T},
+  {"TIT2", EXTRACTOR_METATYPE_TITLE, T},
+  {"TIT3", EXTRACTOR_METATYPE_SONG_VERSION, T},
+  /* TKEY */
+  {"TLAN", EXTRACTOR_METATYPE_LANGUAGE, T},
+  {"TLEN", EXTRACTOR_METATYPE_DURATION, T}, /* FIXME: should append 'ms' as 
unit */
+  {"TMED", EXTRACTOR_METATYPE_SOURCE, T}, 
+  {"TOAL", EXTRACTOR_METATYPE_ORIGINAL_TITLE, T},
+  {"TOFN", EXTRACTOR_METATYPE_ORIGINAL_ARTIST, T},
+  {"TOLY", EXTRACTOR_METATYPE_ORIGINAL_WRITER, T},
+  {"TOPE", EXTRACTOR_METATYPE_ORIGINAL_PERFORMER, T},
+  {"TORY", EXTRACTOR_METATYPE_ORIGINAL_RELEASE_YEAR, T},
+  {"TOWN", EXTRACTOR_METATYPE_LICENSEE, T},
+  {"TPE1", EXTRACTOR_METATYPE_ARTIST, T},
+  {"TPE2", EXTRACTOR_METATYPE_PERFORMER, T},
+  {"TPE3", EXTRACTOR_METATYPE_CONDUCTOR, T},
+  {"TPE4", EXTRACTOR_METATYPE_INTERPRETATION, T}, 
+  {"TPOS", EXTRACTOR_METATYPE_DISC_NUMBER, T},
+  {"TPUB", EXTRACTOR_METATYPE_PUBLISHER, T},
+  {"TRCK", EXTRACTOR_METATYPE_TRACK_NUMBER, T},
+  /* TRDA */
+  {"TRSN", EXTRACTOR_METATYPE_NETWORK_NAME, T},
+  /* TRSO */
+  {"TSIZ", EXTRACTOR_METATYPE_EMBEDDED_FILE_SIZE, T},
+  {"TSRC", EXTRACTOR_METATYPE_ISRC, T},
+  /* TSSE */
+  {"TYER", EXTRACTOR_METATYPE_PUBLICATION_YEAR, T},
+  {"WCOM", EXTRACTOR_METATYPE_URL, U},
+  {"WCOP", EXTRACTOR_METATYPE_URL, U},
+  {"WOAF", EXTRACTOR_METATYPE_URL, U},
+  {"WOAS", EXTRACTOR_METATYPE_URL, U},
+  {"WORS", EXTRACTOR_METATYPE_URL, U},
+  {"WPAY", EXTRACTOR_METATYPE_URL, U},
+  {"WPUB", EXTRACTOR_METATYPE_URL, U},
+  {"WXXX", EXTRACTOR_METATYPE_URL, T},
+  {"IPLS", EXTRACTOR_METATYPE_CONTRIBUTOR_NAME, T},
+  /* ... */
+  {"USLT", EXTRACTOR_METATYPE_LYRICS, UL },
+  {"SYLT", EXTRACTOR_METATYPE_LYRICS, SL },
+  {"COMM", EXTRACTOR_METATYPE_COMMENT, L},
+  /* ... */
+  {"APIC", EXTRACTOR_METATYPE_PICTURE, I},
+  /* ... */
+  {"LINK", EXTRACTOR_METATYPE_URL, U},
+  /* ... */
+  {"USER", EXTRACTOR_METATYPE_LICENSE, T},
+  /* ... */
+  {NULL, 0, T}
 };
 
 
@@ -104,6 +133,9 @@
   uint32_t csize;
   int i;
   uint16_t flags;
+  char *mime;
+  enum EXTRACTOR_MetaType type;
+  size_t off;
 
   if ((size < 16) ||
       (data[0] != 0x49) ||
@@ -111,12 +143,16 @@
       (data[2] != 0x33) || (data[3] != 0x03) || (data[4] != 0x00))
     return 0;
   unsync = (data[5] & 0x80) > 0;
+  if (unsync)
+    return 0; /* not supported */
   extendedHdr = (data[5] & 0x40) > 0;
   experimental = (data[5] & 0x20) > 0;
+  if (experimental)
+    return 0;
   tsize = (((data[6] & 0x7F) << 21) |
            ((data[7] & 0x7F) << 14) |
            ((data[8] & 0x7F) << 7) | ((data[9] & 0x7F) << 0));
-  if ((tsize + 10 > size) || (experimental))
+  if (tsize + 10 > size)
     return 0;
   pos = 10;
   padding = 0;
@@ -142,7 +178,8 @@
       csize =
         (data[pos + 4] << 24) + (data[pos + 5] << 16) + (data[pos + 6] << 8) +
         data[pos + 7];
-      if ((pos + 10 + csize > tsize) || (csize > tsize) || (csize == 0))
+      if ((pos + 10 + csize > tsize) || (csize > tsize) || (csize == 0) ||
+         (pos + 10 + csize <= pos + 10) || (pos + 10 <= pos))
         break;
       flags = (data[pos + 8] << 8) + data[pos + 9];
       if (((flags & 0x80) > 0) /* compressed, not yet supported */  ||
@@ -163,32 +200,191 @@
                   pos++;
                   csize--;
                 }
-              csize--;
-              /* this byte describes the encoding
-                 try to convert strings to UTF-8
-                 if it fails, then forget it */
-              switch (data[pos + 10])
-                {
-                case 0x00:
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "ISO-8859-1");
-                  break;
-                case 0x01:
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "UCS-2");
-                  break;
-                default:
-                  /* bad encoding byte,
-                     try to convert from iso-8859-1 */
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "ISO-8859-1");
-                  break;
-                }
-              pos++;
+             switch (tmap[i].fmt)
+               {
+               case T:
+                 /* this byte describes the encoding
+                    try to convert strings to UTF-8
+                    if it fails, then forget it */
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
+                                                              csize - 1, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
+                                                              csize - 1, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
+                                                              csize - 1, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case U:
+                 word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 10],
+                                                          csize, "ISO-8859-1");
+                 break;
+               case UL:
+                 if (csize < 6)
+                   return 0; /* malformed */
+                 /* find end of description */
+                 off = 14;
+                 while ( (off < size) &&
+                         (off - pos < csize) &&
+                         (data[pos + off] == '\0') )
+                   off++;
+                 if ( (off >= csize) ||
+                      (data[pos+off] != '\0') )
+                   return 0; /* malformed */
+                 off++;
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + off],
+                                                              csize - off, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + off],
+                                                              csize - off, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + off],
+                                                              csize - off, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case SL:
+                 if (csize < 7)
+                   return 0; /* malformed */
+                 /* find end of description */
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 16],
+                                                              csize - 6, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 16],
+                                                              csize - 6, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 16],
+                                                              csize - 6, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case L:
+                 if (csize < 5)
+                   return 0; /* malformed */
+                 /* find end of description */
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 14],
+                                                              csize - 4, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 14],
+                                                              csize - 4, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 14],
+                                                              csize - 4, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case I:
+                 if (csize < 2)
+                   return 0; /* malformed */
+                 /* find end of mime type */
+                 off = 11;
+                 while ( (off < size) &&
+                         (off - pos < csize) &&
+                         (data[pos + off] == '\0') )
+                   off++;
+                 if ( (off >= csize) ||
+                      (data[pos+off] != '\0') )
+                   return 0; /* malformed */
+                 off++;
+                 mime = strdup ((const char*) &data[pos + 11]);
+                 
+                 switch (data[pos+off])
+                   {
+                   case 0x03:
+                   case 0x04:
+                     type = EXTRACTOR_METATYPE_COVER_PICTURE;
+                     break;
+                   case 0x07:
+                   case 0x08:
+                   case 0x09:
+                   case 0x0A:
+                   case 0x0B:
+                   case 0x0C:
+                     type = EXTRACTOR_METATYPE_CONTRIBUTOR_PICTURE;
+                     break;
+                   case 0x0D:
+                   case 0x0E:
+                   case 0x0F:
+                     type = EXTRACTOR_METATYPE_EVENT_PICTURE;
+                     break;
+                   case 0x14:
+                     type = EXTRACTOR_METATYPE_LOGO;
+                     type = EXTRACTOR_METATYPE_LOGO;
+                     break;
+                   default:
+                     type = EXTRACTOR_METATYPE_PICTURE;
+                     break;
+                   }
+                 off++;
+
+                 /* find end of description */
+                 while ( (off < size) &&
+                         (off - pos < csize) &&
+                         (data[pos + off] == '\0') )
+                   off++;
+                 if ( (off >= csize) ||
+                      (data[pos+off] != '\0') )
+                   return 0; /* malformed */
+                 off++;
+                 if (0 == strcasecmp ("-->",
+                                      mime))
+                   {
+                     /* not supported */
+                   }
+                 else
+                   {
+                     if (0 != proc (proc_cls,
+                                    "id3v23",
+                                    type,
+                                    EXTRACTOR_METAFORMAT_BINARY,
+                                    mime,
+                                    (const char*) &data[pos + off],
+                                    csize + 6 - off))                  
+                       {
+                         free (mime);
+                         return 1;
+                       }
+                   }
+                 free (mime);
+                 word = NULL;
+                 break;
+               default:
+                 return 0;
+               }             
               if ((word != NULL) && (strlen (word) > 0))
                 {
                  if (0 != proc (proc_cls,
-                                "id3v2",
+                                "id3v23",
                                 tmap[i].type,
                                 EXTRACTOR_METAFORMAT_UTF8,
                                 "text/plain",

Modified: Extractor/src/plugins/id3v24_extractor.c
===================================================================
--- Extractor/src/plugins/id3v24_extractor.c    2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/id3v24_extractor.c    2009-12-20 00:06:45 UTC (rev 
9817)
@@ -1,6 +1,6 @@
 /*
      This file is part of libextractor.
-     (C) 2002, 2003, 2004, 2006, 2009 Vidyut Samanta and Christian Grothoff
+     (C) 2002, 2003, 2004, 2006, 2007, 2009 Vidyut Samanta and Christian 
Grothoff
 
      libextractor is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -18,7 +18,6 @@
      Boston, MA 02111-1307, USA.
 
  */
-
 #define DEBUG_EXTRACT_ID3v24 0
 
 #include "platform.h"
@@ -33,72 +32,98 @@
 #ifndef MINGW
 #include <sys/mman.h>
 #endif
+
 #include "convert.h"
 
+enum Id3v24Fmt
+  {
+    T, /* simple, 0-terminated string, prefixed by encoding */
+    U, /* 0-terminated ASCII string, no encoding */
+    UL, /* unsync'ed lyrics */
+    SL, /* sync'ed lyrics */
+    L, /* string with language prefix */
+    I /* image */
+  };
 
-static struct EXTRACTOR_Keywords *
-addKeyword (EXTRACTOR_KeywordList * oldhead,
-            char *phrase, EXTRACTOR_KeywordType type)
-{
-  EXTRACTOR_KeywordList *keyword;
-
-  keyword = malloc (sizeof (EXTRACTOR_KeywordList));
-  keyword->next = oldhead;
-  keyword->keyword = phrase;
-  keyword->keywordType = type;
-  return keyword;
-}
-
 typedef struct
 {
-  char *text;
+  const char *text;
   enum EXTRACTOR_MetaType type;
+  enum Id3v24Fmt fmt;
 } Matches;
 
 static Matches tmap[] = {
-  {"COMM", EXTRACTOR_METATYPE_COMMENT},
-  {"IPLS", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"TIPL", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"TMOO", EXTRACTOR_METATYPE_MOOD},
-  {"TMCL", EXTRACTOR_METATYPE_MUSICIAN_CREDITS_LIST},
-  {"LINK", EXTRACTOR_METATYPE_LINK},
-  {"MCDI", EXTRACTOR_METATYPE_MUSIC_CD_IDENTIFIER},
-  {"PCNT", EXTRACTOR_METATYPE_PLAY_COUNTER},
-  {"POPM", EXTRACTOR_METATYPE_POPULARITY_METER},
-  {"TCOP", EXTRACTOR_METATYPE_COPYRIGHT},
-  {"TDRC", EXTRACTOR_METATYPE_DATE},
-  {"TCON", EXTRACTOR_METATYPE_GENRE},
-  {"TIT1", EXTRACTOR_METATYPE_GENRE},
-  {"TENC", EXTRACTOR_METATYPE_ENCODED_BY},
-  {"TEXT", EXTRACTOR_METATYPE_LYRICS},
-  {"TOLY", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"TOPE", EXTRACTOR_METATYPE_CONTRIBUTOR},
-  {"TOWN", EXTRACTOR_METATYPE_OWNER},
-  {"TPE1", EXTRACTOR_METATYPE_ARTIST},
-  {"TPE2", EXTRACTOR_METATYPE_ARTIST},
-  {"TPE3", EXTRACTOR_METATYPE_CONDUCTOR},
-  {"TPE4", EXTRACTOR_METATYPE_INTERPRET},
-  {"TIME", EXTRACTOR_METATYPE_TIME},
-  {"TMED", EXTRACTOR_METATYPE_MEDIA_TYPE},
-  {"TCOM", EXTRACTOR_METATYPE_CREATOR},
-  {"TOFN", EXTRACTOR_METATYPE_FILENAME},
-  {"TOPE", EXTRACTOR_METATYPE_ARTIST},
-  {"TPUB", EXTRACTOR_METATYPE_PUBLISHER},
-  {"TRCK", EXTRACTOR_METATYPE_TRACK_NUMBER},
-  {"TRSC", EXTRACTOR_METATYPE_ISRC},
-  {"TRSN", EXTRACTOR_METATYPE_SOURCE},
-  {"TRSO", EXTRACTOR_METATYPE_CREATED_FOR},
-  {"TSRC", EXTRACTOR_METATYPE_RESOURCE_IDENTIFIER},
-  {"TYER", EXTRACTOR_METATYPE_YEAR},
-  {"TOAL", EXTRACTOR_METATYPE_ALBUM},
-  {"TALB", EXTRACTOR_METATYPE_ALBUM},
-  {"TLAN", EXTRACTOR_METATYPE_LANGUAGE},
-  {"TIT2", EXTRACTOR_METATYPE_TITLE},
-  {"TIT3", EXTRACTOR_METATYPE_DESCRIPTION},
-  {"WCOM", EXTRACTOR_METATYPE_RELEASE},
-  {"WCOP", EXTRACTOR_METATYPE_DISCLAIMER},
-  {"", EXTRACTOR_METATYPE_KEYWORDS},
-  {NULL, 0}
+  {"TALB", EXTRACTOR_METATYPE_ALBUM, T},
+  {"TBPM", EXTRACTOR_METATYPE_BEATS_PER_MINUTE, T},
+  {"TCOM", EXTRACTOR_METATYPE_COMPOSER, T},
+  {"TCON", EXTRACTOR_METATYPE_SONG_VERSION, T},
+  {"TCOP", EXTRACTOR_METATYPE_COPYRIGHT, T},
+  /* {"TDAT", EXTRACTOR_METATYPE_CREATION_DATE, T}, deprecated in 24 */
+  /* TDLY */
+  {"TENC", EXTRACTOR_METATYPE_ENCODED_BY, T},
+  {"TEXT", EXTRACTOR_METATYPE_WRITER, T},  
+  {"TFLT", EXTRACTOR_METATYPE_FORMAT_VERSION, T},
+  /* TIME, deprecated in 24 */
+  {"TIT1", EXTRACTOR_METATYPE_SECTION, T},
+  {"TIT2", EXTRACTOR_METATYPE_TITLE, T},
+  {"TIT3", EXTRACTOR_METATYPE_SONG_VERSION, T},
+  /* TKEY */
+  {"TLAN", EXTRACTOR_METATYPE_LANGUAGE, T},
+  {"TLEN", EXTRACTOR_METATYPE_DURATION, T}, /* FIXME: should append 'ms' as 
unit */
+  {"TMED", EXTRACTOR_METATYPE_SOURCE, T}, 
+  {"TOAL", EXTRACTOR_METATYPE_ORIGINAL_TITLE, T},
+  {"TOFN", EXTRACTOR_METATYPE_ORIGINAL_ARTIST, T},
+  {"TOLY", EXTRACTOR_METATYPE_ORIGINAL_WRITER, T},
+  {"TOPE", EXTRACTOR_METATYPE_ORIGINAL_PERFORMER, T},
+  /* {"TORY", EXTRACTOR_METATYPE_ORIGINAL_RELEASE_YEAR, T}, deprecated in 24 */
+  {"TOWN", EXTRACTOR_METATYPE_LICENSEE, T},
+  {"TPE1", EXTRACTOR_METATYPE_ARTIST, T},
+  {"TPE2", EXTRACTOR_METATYPE_PERFORMER, T},
+  {"TPE3", EXTRACTOR_METATYPE_CONDUCTOR, T},
+  {"TPE4", EXTRACTOR_METATYPE_INTERPRETATION, T}, 
+  {"TPOS", EXTRACTOR_METATYPE_DISC_NUMBER, T},
+  {"TPUB", EXTRACTOR_METATYPE_PUBLISHER, T},
+  {"TRCK", EXTRACTOR_METATYPE_TRACK_NUMBER, T},
+  /* TRDA, deprecated in 24 */
+  {"TRSN", EXTRACTOR_METATYPE_NETWORK_NAME, T},
+  /* TRSO */
+  /* {"TSIZ", EXTRACTOR_METATYPE_EMBEDDED_FILE_SIZE, T}, deprecated in 24 */
+  {"TSRC", EXTRACTOR_METATYPE_ISRC, T},
+  /* TSSE */
+  /* {"TYER", EXTRACTOR_METATYPE_PUBLICATION_YEAR, T}, deprecated in 24 */
+  {"WCOM", EXTRACTOR_METATYPE_URL, U},
+  {"WCOP", EXTRACTOR_METATYPE_URL, U},
+  {"WOAF", EXTRACTOR_METATYPE_URL, U},
+  {"WOAS", EXTRACTOR_METATYPE_URL, U},
+  {"WORS", EXTRACTOR_METATYPE_URL, U},
+  {"WPAY", EXTRACTOR_METATYPE_URL, U},
+  {"WPUB", EXTRACTOR_METATYPE_URL, U},
+  {"WXXX", EXTRACTOR_METATYPE_URL, T},
+  /* {"IPLS", EXTRACTOR_METATYPE_CONTRIBUTOR_NAME, T}, deprecated in 24 */
+  /* ... */
+  {"USLT", EXTRACTOR_METATYPE_LYRICS, UL },
+  {"SYLT", EXTRACTOR_METATYPE_LYRICS, SL },
+  {"COMM", EXTRACTOR_METATYPE_COMMENT, L},
+  /* ... */
+  {"APIC", EXTRACTOR_METATYPE_PICTURE, I},
+  /* ... */
+  {"LINK", EXTRACTOR_METATYPE_URL, U},
+  /* ... */
+  {"USER", EXTRACTOR_METATYPE_LICENSE, T},
+  /* ... */
+  /* new frames in 24 */
+  /* ASPI, EQU2, RVA2, SEEK, SIGN, TDEN */
+  {"TDOR", EXTRACTOR_METATYPE_PUBLICATION_DATE, T},
+  /* TDRC, TDRL, TDTG */
+  {"TIPL", EXTRACTOR_METATYPE_CONTRIBUTOR_NAME, T},
+  {"TMCL", EXTRACTOR_METATYPE_MUSICIAN_CREDITS_LIST, T},
+  {"TMOO", EXTRACTOR_METATYPE_MOOD, T},
+  {"TPRO", EXTRACTOR_METATYPE_COPYRIGHT, T},
+  {"TSOA", EXTRACTOR_METATYPE_ALBUM, T},
+  {"TSOP", EXTRACTOR_METATYPE_PERFORMER, T},
+  {"TSOT", EXTRACTOR_METATYPE_TITLE, T},
+  {"TSST", EXTRACTOR_METATYPE_SUBTITLE, T},
+  {NULL, 0, T}
 };
 
 
@@ -114,54 +139,60 @@
   int extendedHdr;
   int experimental;
   int footer;
-  unsigned int tsize;
-  unsigned int pos;
-  unsigned int ehdrSize;
-  unsigned int padding;
+  uint32_t tsize;
+  uint32_t pos;
+  uint32_t ehdrSize;
+  uint32_t padding;
+  uint32_t csize;
+  int i;
+  uint16_t flags;
+  char *mime;
+  enum EXTRACTOR_MetaType type;
+  size_t off;
 
   if ((size < 16) ||
       (data[0] != 0x49) ||
       (data[1] != 0x44) ||
       (data[2] != 0x33) || (data[3] != 0x04) || (data[4] != 0x00))
-    return prev;
+    return 0;
   unsync = (data[5] & 0x80) > 0;
+  if (unsync)
+    return 0; /* not supported */
   extendedHdr = (data[5] & 0x40) > 0;
   experimental = (data[5] & 0x20) > 0;
+  if (experimental)
+    return 0;
   footer = (data[5] & 0x10) > 0;
   tsize = (((data[6] & 0x7F) << 21) |
            ((data[7] & 0x7F) << 14) |
            ((data[8] & 0x7F) << 7) | ((data[9] & 0x7F) << 0));
-  if ((tsize + 10 > size) || (experimental))
-    return prev;
+  if (tsize + 10 > size)
+    return 0;
   pos = 10;
   padding = 0;
   if (extendedHdr)
     {
       ehdrSize = (((data[10] & 0x7F) << 21) |
-                  ((data[11] & 0x7F) << 14) |
-                  ((data[12] & 0x7F) << 7) | ((data[13] & 0x7F) << 0));
-      pos += ehdrSize;
+                 ((data[11] & 0x7F) << 14) |
+                 ((data[12] & 0x7F) << 7) | ((data[13] & 0x7F) << 0));
+      pos += 4 + ehdrSize;
+      if (ehdrSize > tsize)
+       return 0;
     }
-
-
   while (pos < tsize)
     {
-      size_t csize;
-      int i;
-      unsigned short flags;
-
       if (pos + 10 > tsize)
-        return prev;
-
-      csize = (((data[pos + 4] & 0x7F) << 21) |
-               ((data[pos + 5] & 0x7F) << 14) |
-               ((data[pos + 6] & 0x7F) << 7) | ((data[pos + 7] & 0x7F) << 0));
-
-      if ((pos + 10 + csize > tsize) || (csize > tsize) || (csize == 0))
+        return 0;
+      csize =
+        (data[pos + 4] << 24) + (data[pos + 5] << 16) + (data[pos + 6] << 8) +
+        data[pos + 7];
+      if ((pos + 10 + csize > tsize) || (csize > tsize) || (csize == 0) ||
+         (pos + 10 + csize <= pos + 10) || (pos + 10 <= pos))
         break;
       flags = (data[pos + 8] << 8) + data[pos + 9];
-      if (((flags & 0x80) > 0) /* compressed, not yet supported */  ||
-          ((flags & 0x40) > 0) /* encrypted, not supported */ )
+      if (((flags & 0x08) > 0) /* compressed, not yet supported */  ||
+          ((flags & 0x04) > 0) /* encrypted, not supported */ ||
+          ((flags & 0x02) > 0) /* unsynchronized, not supported */ )
         {
           pos += 10 + csize;
           continue;
@@ -172,59 +203,216 @@
           if (0 == strncmp (tmap[i].text, (const char *) &data[pos], 4))
             {
               char *word;
-              if ((flags & 0x20) > 0)
+              if ((flags & 0x40) > 0)
                 {
                   /* "group" identifier, skip a byte */
                   pos++;
                   csize--;
                 }
 
-              /* this byte describes the encoding
-                 try to convert strings to UTF-8
-                 if it fails, then forget it */
-              csize--;
-              switch (data[pos + 10])
-                {
-                case 0x00:
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "ISO-8859-1");
-                  break;
-                case 0x01:
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "UTF-16");
-                  break;
-                case 0x02:
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "UTF-16BE");
-                  break;
-                case 0x03:
-                  word = malloc (csize + 1);
-                  memcpy (word, &data[pos + 11], csize);
-                  word[csize] = '\0';
-                  break;
-                default:
-                  /* bad encoding byte,
-                     try to convert from iso-8859-1 */
-                  word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
-                                        csize, "ISO-8859-1");
-                  break;
-                }
-              pos++;
+             switch (tmap[i].fmt)
+               {
+               case T:
+                 /* this byte describes the encoding
+                    try to convert strings to UTF-8
+                    if it fails, then forget it */
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
+                                                              csize - 1, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
+                                                              csize - 1, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 11],
+                                                              csize - 1, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case U:
+                 word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 10],
+                                                          csize, "ISO-8859-1");
+                 break;
+               case UL:
+                 if (csize < 6)
+                   return 0; /* malformed */
+                 /* find end of description */
+                 off = 14;
+                 while ( (off < size) &&
+                         (off - pos < csize) &&
+                         (data[pos + off] == '\0') )
+                   off++;
+                 if ( (off >= csize) ||
+                      (data[pos+off] != '\0') )
+                   return 0; /* malformed */
+                 off++;
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + off],
+                                                              csize - off, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + off],
+                                                              csize - off, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + off],
+                                                              csize - off, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case SL:
+                 if (csize < 7)
+                   return 0; /* malformed */
+                 /* find end of description */
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 16],
+                                                              csize - 6, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 16],
+                                                              csize - 6, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 16],
+                                                              csize - 6, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case L:
+                 if (csize < 5)
+                   return 0; /* malformed */
+                 /* find end of description */
+                 switch (data[pos + 10])
+                   {
+                   case 0x00:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 14],
+                                                              csize - 4, 
"ISO-8859-1");
+                     break;
+                   case 0x01:
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 14],
+                                                              csize - 4, 
"UCS-2");
+                     break;
+                   default:
+                     /* bad encoding byte,
+                        try to convert from iso-8859-1 */
+                     word = EXTRACTOR_common_convert_to_utf8 ((const char *) 
&data[pos + 14],
+                                                              csize - 4, 
"ISO-8859-1");
+                     break;
+                   }
+                 break;
+               case I:
+                 if (csize < 2)
+                   return 0; /* malformed */
+                 /* find end of mime type */
+                 off = 11;
+                 while ( (off < size) &&
+                         (off - pos < csize) &&
+                         (data[pos + off] == '\0') )
+                   off++;
+                 if ( (off >= csize) ||
+                      (data[pos+off] != '\0') )
+                   return 0; /* malformed */
+                 off++;
+                 mime = strdup ((const char*) &data[pos + 11]);
+                 
+                 switch (data[pos+off])
+                   {
+                   case 0x03:
+                   case 0x04:
+                     type = EXTRACTOR_METATYPE_COVER_PICTURE;
+                     break;
+                   case 0x07:
+                   case 0x08:
+                   case 0x09:
+                   case 0x0A:
+                   case 0x0B:
+                   case 0x0C:
+                     type = EXTRACTOR_METATYPE_CONTRIBUTOR_PICTURE;
+                     break;
+                   case 0x0D:
+                   case 0x0E:
+                   case 0x0F:
+                     type = EXTRACTOR_METATYPE_EVENT_PICTURE;
+                     break;
+                   case 0x14:
+                     type = EXTRACTOR_METATYPE_LOGO;
+                     type = EXTRACTOR_METATYPE_LOGO;
+                     break;
+                   default:
+                     type = EXTRACTOR_METATYPE_PICTURE;
+                     break;
+                   }
+                 off++;
+
+                 /* find end of description */
+                 while ( (off < size) &&
+                         (off - pos < csize) &&
+                         (data[pos + off] == '\0') )
+                   off++;
+                 if ( (off >= csize) ||
+                      (data[pos+off] != '\0') )
+                   return 0; /* malformed */
+                 off++;
+                 if (0 == strcasecmp ("-->",
+                                      mime))
+                   {
+                     /* not supported */
+                   }
+                 else
+                   {
+                     if (0 != proc (proc_cls,
+                                    "id3v24",
+                                    type,
+                                    EXTRACTOR_METAFORMAT_BINARY,
+                                    mime,
+                                    (const char*) &data[pos + off],
+                                    csize + 6 - off))                  
+                       {
+                         free (mime);
+                         return 1;
+                       }
+                   }
+                 free (mime);
+                 word = NULL;
+                 break;
+               default:
+                 return 0;
+               }             
               if ((word != NULL) && (strlen (word) > 0))
                 {
-                  prev = addKeyword (prev, word, tmap[i].type);
+                 if (0 != proc (proc_cls,
+                                "id3v24",
+                                tmap[i].type,
+                                EXTRACTOR_METAFORMAT_UTF8,
+                                "text/plain",
+                                word,
+                                strlen(word)+1))
+                   {
+                     free (word);
+                     return 1;
+                   }
                 }
-              else
-                {
-                  free (word);
-                }
+             free (word);
               break;
             }
           i++;
         }
       pos += 10 + csize;
     }
-  return prev;
+  return 0;
 }
 
 /* end of id3v24_extractor.c */

Modified: Extractor/src/plugins/id3v2_extractor.c
===================================================================
--- Extractor/src/plugins/id3v2_extractor.c     2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/id3v2_extractor.c     2009-12-20 00:06:45 UTC (rev 
9817)
@@ -113,7 +113,7 @@
   /* skipping CRM */
   /* skipping CRA */
   /* {"LNK", EXTRACTOR_METATYPE_URL, XXX}, */
-  {NULL, 0},
+  {NULL, 0, T},
 };
 
 

Modified: Extractor/src/plugins/odf_extractor.c
===================================================================
--- Extractor/src/plugins/odf_extractor.c       2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/odf_extractor.c       2009-12-20 00:06:45 UTC (rev 
9817)
@@ -44,7 +44,7 @@
   { "meta:creation-date", EXTRACTOR_METATYPE_CREATION_DATE },
   { "dc:date",            EXTRACTOR_METATYPE_UNKNOWN_DATE },
   { "dc:creator",         EXTRACTOR_METATYPE_CREATOR },
-  { "dc:language",        EXTRACTOR_METATYPE_DOCUMENT_LANGUAGE },
+  { "dc:language",        EXTRACTOR_METATYPE_LANGUAGE },
   { "dc:title",           EXTRACTOR_METATYPE_TITLE },
   { "dc:description",     EXTRACTOR_METATYPE_DESCRIPTION },
   { "dc:subject",         EXTRACTOR_METATYPE_SUBJECT },

Modified: Extractor/src/plugins/ole2_extractor.c
===================================================================
--- Extractor/src/plugins/ole2_extractor.c      2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/ole2_extractor.c      2009-12-20 00:06:45 UTC (rev 
9817)
@@ -107,7 +107,7 @@
   { "meta:generator", EXTRACTOR_METATYPE_CREATED_BY_SOFTWARE },
   { "meta:template", EXTRACTOR_METATYPE_TEMPLATE },
   { "meta:editing-cycles", EXTRACTOR_METATYPE_EDITING_CYCLES }, 
-  /* { "Dictionary", EXTRACTOR_METATYPE_DOCUMENT_LANGUAGE },  */
+  /* { "Dictionary", EXTRACTOR_METATYPE_LANGUAGE },  */
   /* { "gsf:security", EXTRACTOR_SECURITY }, */
   /* { "gsf:scale", EXTRACTOR_SCALE }, // always "false"? */
   /* { "meta:editing-duration", EXTRACTOR_METATYPE_TOTAL_EDITING_TIME }, // 
encoding? */
@@ -544,7 +544,7 @@
   if ( (lang != NULL) && (ret == 0) )
     ret = addKeyword(proc, proc_cls,
                     lang,
-                    EXTRACTOR_METATYPE_DOCUMENT_LANGUAGE);  
+                    EXTRACTOR_METATYPE_LANGUAGE);  
   if (lcb >= 6) {
     for (i=0;i<gsf_infile_num_children(infile);i++) {
       if (ret != 0)

Modified: Extractor/src/plugins/png_extractor.c
===================================================================
--- Extractor/src/plugins/png_extractor.c       2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/png_extractor.c       2009-12-20 00:06:45 UTC (rev 
9817)
@@ -141,7 +141,7 @@
   language = &data[pos];
   ret = 0;
   if (stnlen (language, length - pos) > 0)
-    ADDF (EXTRACTOR_METATYPE_DOCUMENT_LANGUAGE,
+    ADDF (EXTRACTOR_METATYPE_LANGUAGE,
          stndup (language, length - pos));
   pos += stnlen (language, length - pos) + 1;
   if (pos + 1 >= length)

Modified: Extractor/src/plugins/qt_extractor.c
===================================================================
--- Extractor/src/plugins/qt_extractor.c        2009-12-20 00:01:02 UTC (rev 
9816)
+++ Extractor/src/plugins/qt_extractor.c        2009-12-20 00:06:45 UTC (rev 
9817)
@@ -395,9 +395,9 @@
   {"catg", EXTRACTOR_METATYPE_SECTION},
   {"keyw", EXTRACTOR_METATYPE_KEYWORDS},
   {"desc", EXTRACTOR_METATYPE_DESCRIPTION},
-  {"tvnn", EXTRACTOR_METATYPE_TV_NETWORK_NAME},
-  {"tvsh", EXTRACTOR_METATYPE_TV_SHOW_NAME}, 
-  {"tven", EXTRACTOR_METATYPE_TV_NETWORK_NAME},
+  {"tvnn", EXTRACTOR_METATYPE_NETWORK_NAME},
+  {"tvsh", EXTRACTOR_METATYPE_SHOW_NAME}, 
+  {"tven", EXTRACTOR_METATYPE_NETWORK_NAME},
   {NULL, EXTRACTOR_METATYPE_RESERVED}
 };
 
@@ -850,7 +850,7 @@
   lang = ntohs (txt->language);
   if (lang >= sizeof (languages) / sizeof (char *))
     return 0;                   /* invalid */
-  addKeyword (EXTRACTOR_METATYPE_DOCUMENT_LANGUAGE, languages[lang], ec);
+  addKeyword (EXTRACTOR_METATYPE_LANGUAGE, languages[lang], ec);
 
   meta = malloc (len + 1);
   memcpy (meta, &txt[1], len);





reply via email to

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