Home | History | Annotate | Download | only in libexif
      1 /* exif-format.c
      2  *
      3  * Copyright (c) 2001 Lutz Mueller <lutz (at) users.sourceforge.net>
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Lesser General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General Public
     16  * License along with this library; if not, write to the
     17  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18  * Boston, MA  02110-1301  USA.
     19  */
     20 
     21 #include <config.h>
     22 
     23 #include <libexif/exif-format.h>
     24 #include <libexif/i18n.h>
     25 
     26 #include <stdlib.h>
     27 
     28 /*! Table of data format types, descriptions and sizes.
     29  * This table should be sorted in decreasing order of popularity in order
     30  * to decrease the total average lookup time.
     31  */
     32 static const struct {
     33         ExifFormat format;
     34 	const char *name;
     35         unsigned char size;
     36 } ExifFormatTable[] = {
     37         {EXIF_FORMAT_SHORT,     N_("Short"),     2},
     38         {EXIF_FORMAT_RATIONAL,  N_("Rational"),  8},
     39         {EXIF_FORMAT_SRATIONAL, N_("SRational"), 8},
     40         {EXIF_FORMAT_UNDEFINED, N_("Undefined"), 1},
     41         {EXIF_FORMAT_ASCII,     N_("ASCII"),     1},
     42         {EXIF_FORMAT_LONG,      N_("Long"),      4},
     43         {EXIF_FORMAT_BYTE,      N_("Byte"),      1},
     44 	{EXIF_FORMAT_SBYTE,     N_("SByte"),     1},
     45 	{EXIF_FORMAT_SSHORT,    N_("SShort"),    2},
     46         {EXIF_FORMAT_SLONG,     N_("SLong"),     4},
     47 	{EXIF_FORMAT_FLOAT,     N_("Float"),     4},
     48 	{EXIF_FORMAT_DOUBLE,    N_("Double"),    8},
     49         {0, NULL, 0}
     50 };
     51 
     52 const char *
     53 exif_format_get_name (ExifFormat format)
     54 {
     55 	unsigned int i;
     56 
     57 	/* FIXME: This belongs to somewhere else. */
     58 	/* libexif should use the default system locale.
     59 	 * If an application specifically requires UTF-8, then we
     60 	 * must give the application a way to tell libexif that.
     61 	 *
     62 	 * bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
     63 	 */
     64 	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
     65 
     66 	for (i = 0; ExifFormatTable[i].name; i++)
     67 		if (ExifFormatTable[i].format == format)
     68 			return _(ExifFormatTable[i].name);
     69 	return NULL;
     70 }
     71 
     72 unsigned char
     73 exif_format_get_size (ExifFormat format)
     74 {
     75 	unsigned int i;
     76 
     77 	for (i = 0; ExifFormatTable[i].size; i++)
     78 		if (ExifFormatTable[i].format == format)
     79 			return ExifFormatTable[i].size;
     80 	return 0;
     81 }
     82