more dzsave props tweaks
* don't version xmlns * escape <> in field names and values * set a type on each value
This commit is contained in:
parent
fc14733b2b
commit
5d1fa07a40
|
@ -706,19 +706,49 @@ write_blank( VipsForeignSaveDz *dz )
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_escape( GsfOutput *out, const char *str )
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
for( p = str; *p; p++ )
|
||||||
|
switch( *p ) {
|
||||||
|
case '<':
|
||||||
|
gsf_output_printf( out, "<" );
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
gsf_output_printf( out, ">" );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
gsf_output_printf( out, "%c", *p );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
write_vips_property( VipsImage *image,
|
write_vips_property( VipsImage *image,
|
||||||
const char *field, GValue *value, void *a )
|
const char *field, GValue *value, void *a )
|
||||||
{
|
{
|
||||||
GsfOutput *out = (GsfOutput *) a;
|
GsfOutput *out = (GsfOutput *) a;
|
||||||
char *str_value;
|
GType type = G_VALUE_TYPE( value );
|
||||||
|
|
||||||
str_value = g_strdup_value_contents( value );
|
if( g_value_type_transformable( type, VIPS_TYPE_SAVE_STRING ) ) {
|
||||||
gsf_output_printf( out, " <property>\n" );
|
GValue save_value = { 0 };
|
||||||
gsf_output_printf( out, " <name>%s</name>\n", field );
|
|
||||||
gsf_output_printf( out, " <value>%s</value>\n", str_value );
|
g_value_init( &save_value, VIPS_TYPE_SAVE_STRING );
|
||||||
gsf_output_printf( out, " </property>\n" );
|
g_value_transform( value, &save_value );
|
||||||
g_free( str_value );
|
|
||||||
|
gsf_output_printf( out, " <property>\n" );
|
||||||
|
gsf_output_printf( out, " <name>" );
|
||||||
|
print_escape( out, field );
|
||||||
|
gsf_output_printf( out, "</name>\n" );
|
||||||
|
gsf_output_printf( out, " <value type=\"%s\">",
|
||||||
|
g_type_name( type ) );
|
||||||
|
print_escape( out, vips_value_get_save_string( &save_value ) );
|
||||||
|
gsf_output_printf( out, "</value>\n" );
|
||||||
|
gsf_output_printf( out, " </property>\n" );
|
||||||
|
g_value_unset( &save_value );
|
||||||
|
}
|
||||||
|
|
||||||
return( NULL );
|
return( NULL );
|
||||||
}
|
}
|
||||||
|
@ -742,11 +772,10 @@ write_vips_properties( VipsForeignSaveDz *dz )
|
||||||
gsf_output_printf( out,
|
gsf_output_printf( out,
|
||||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
|
||||||
gsf_output_printf( out, "<image\n" );
|
gsf_output_printf( out, "<image\n" );
|
||||||
|
gsf_output_printf( out, " "
|
||||||
|
"xmlns=\"http://www.vips.ecs.soton.ac.uk/dzsave\"\n" );
|
||||||
gsf_output_printf( out, " version=\"%s\"\n", VIPS_VERSION );
|
gsf_output_printf( out, " version=\"%s\"\n", VIPS_VERSION );
|
||||||
gsf_output_printf( out, " date=\"%s\"\n", time_string );
|
gsf_output_printf( out, " date=\"%s\"\n", time_string );
|
||||||
gsf_output_printf( out, " "
|
|
||||||
"xmlns=\"http://www.vips.ecs.soton.ac.uk/vips/%s\"\n",
|
|
||||||
VIPS_VERSION );
|
|
||||||
gsf_output_printf( out, " >\n" );
|
gsf_output_printf( out, " >\n" );
|
||||||
gsf_output_printf( out, " <properties>\n" );
|
gsf_output_printf( out, " <properties>\n" );
|
||||||
(void) vips_image_map( save->ready, write_vips_property, out );
|
(void) vips_image_map( save->ready, write_vips_property, out );
|
||||||
|
|
Loading…
Reference in New Issue