1
/* simple program to test the XMP parser on files given on the command line */
5
#include <glib/gprintf.h>
9
start_schema (XMPParseContext *context,
11
const gchar *ns_prefix,
15
g_print ("Schema %s = \"%s\"\n", ns_prefix, ns_uri);
16
return (gpointer) ns_prefix;
20
end_schema (XMPParseContext *context,
21
gpointer user_ns_data,
25
/* g_print ("End of %s\n", user_ns_prefix); */
29
set_property (XMPParseContext *context,
33
gpointer user_ns_data,
37
const gchar *ns_prefix = user_ns_data;
43
g_print ("\t%s:%s = \"%s\"\n", ns_prefix, name,
47
case XMP_PTYPE_RESOURCE:
48
g_print ("\t%s:%s @ = \"%s\"\n", ns_prefix, name,
52
case XMP_PTYPE_ORDERED_LIST:
53
case XMP_PTYPE_UNORDERED_LIST:
54
g_print ("\t%s:%s [] =", ns_prefix, name);
55
for (i = 0; value[i] != NULL; i++)
57
g_print (" \"%s\"", value[i]);
59
g_print (", \"%s\"", value[i]);
63
case XMP_PTYPE_ALT_THUMBS:
64
for (i = 0; value[i] != NULL; i += 2)
65
g_print ("\t%s:%s [size = %d] = \"...\"\n", ns_prefix, name,
66
*(int*)(value[i])); /* FIXME: show part of image */
69
case XMP_PTYPE_ALT_LANG:
70
for (i = 0; value[i] != NULL; i += 2)
71
g_print ("\t%s:%s [lang:%s] = \"%s\"\n", ns_prefix, name,
72
value[i], value[i + 1]);
75
case XMP_PTYPE_STRUCTURE:
76
g_print ("\tLocal schema %s = \"%s\"\n", value[0], value[1]);
77
for (i = 2; value[i] != NULL; i += 2)
78
g_print ("\t%s:%s [%s] = \"%s\"\n", ns_prefix, name,
79
value[i], value[i + 1]);
83
g_print ("\t%s:%s = ?\n", ns_prefix, name);
89
print_error (XMPParseContext *context,
93
gchar *filename = user_data;
95
g_printerr ("While parsing XMP metadata in %s:\n%s\n",
96
filename, error->message);
99
static XMPParser xmp_parser = {
107
scan_file (const gchar *filename)
112
XMPParseContext *context;
114
g_print ("\nFile: %s\n", filename);
116
if (!g_file_get_contents (filename,
121
print_error (NULL, error, (gpointer) filename);
122
g_error_free (error);
126
context = xmp_parse_context_new (&xmp_parser,
127
XMP_FLAG_FIND_XPACKET,
131
if (! xmp_parse_context_parse (context, contents, length, NULL))
133
xmp_parse_context_free (context);
137
if (! xmp_parse_context_end_parse (context, NULL))
139
xmp_parse_context_free (context);
143
xmp_parse_context_free (context);
151
g_set_prgname ("xmpdump");
154
for (argv++, argc--; argc; argv++, argc--)
155
if (scan_file (*argv) != 0)
162
"\txmpdump file [file [...]]\n\n"
163
"The file(s) given on the command line will be scanned "
164
"for XMP metadata\n");