526 lines
15 KiB
Diff
526 lines
15 KiB
Diff
--- misc/librsvg-2.32.1/librsvg-features.h 2010-11-13 11:52:49.000000000 +0100
|
|
+++ misc/build/librsvg-2.32.1/librsvg-features.h 2011-03-28 16:29:01.357827800 +0200
|
|
@@ -11,7 +11,7 @@
|
|
(LIBRSVG_MAJOR_VERSION == (major) && LIBRSVG_MINOR_VERSION > (minor)) || \
|
|
(LIBRSVG_MAJOR_VERSION == (major) && LIBRSVG_MINOR_VERSION == (minor) && LIBRSVG_MICRO_VERSION >= (micro)))
|
|
|
|
-#define LIBRSVG_HAVE_SVGZ (1)
|
|
+#define LIBRSVG_HAVE_SVGZ (0)
|
|
#define LIBRSVG_HAVE_CSS (1)
|
|
|
|
#define LIBRSVG_CHECK_FEATURE(FEATURE) (defined(LIBRSVG_HAVE_##FEATURE) && LIBRSVG_HAVE_##FEATURE)
|
|
--- misc/librsvg-2.32.1/rsvg-image.c 2010-09-27 19:18:35.000000000 +0200
|
|
+++ misc/build/librsvg-2.32.1/rsvg-image.c 2011-03-28 20:14:53.630005800 +0200
|
|
@@ -22,8 +22,8 @@
|
|
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
|
|
- Authors: Raph Levien <raph@artofcode.com>,
|
|
- Dom Lachowicz <cinamod@hotmail.com>,
|
|
+ Authors: Raph Levien <raph@artofcode.com>,
|
|
+ Dom Lachowicz <cinamod@hotmail.com>,
|
|
Caleb Moore <c.moore@student.unsw.edu.au>
|
|
*/
|
|
|
|
@@ -34,15 +34,167 @@
|
|
#include <math.h>
|
|
#include <errno.h>
|
|
#include "rsvg-css.h"
|
|
+#ifdef HAVE_GIO
|
|
#include <gio/gio.h>
|
|
+#endif
|
|
+
|
|
+static const char s_UTF8_B64Alphabet[64] = {
|
|
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
|
|
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, /* A-Z */
|
|
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
|
|
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, /* a-z */
|
|
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, /* 0-9 */
|
|
+ 0x2b, /* + */
|
|
+ 0x2f /* / */
|
|
+};
|
|
+static const char utf8_b64_pad = 0x3d;
|
|
+
|
|
+static gboolean
|
|
+b64_decode_char (char c, int *b64)
|
|
+{
|
|
+ if ((c >= 0x41) && (c <= 0x5a)) {
|
|
+ *b64 = c - 0x41;
|
|
+ return TRUE;
|
|
+ }
|
|
+ if ((c >= 0x61) && (c <= 0x7a)) {
|
|
+ *b64 = c - (0x61 - 26);
|
|
+ return TRUE;
|
|
+ }
|
|
+ if ((c >= 0x30) && (c <= 0x39)) {
|
|
+ *b64 = c + (52 - 0x30);
|
|
+ return TRUE;
|
|
+ }
|
|
+ if (c == 0x2b) {
|
|
+ *b64 = 62;
|
|
+ return TRUE;
|
|
+ }
|
|
+ if (c == 0x2f) {
|
|
+ *b64 = 63;
|
|
+ return TRUE;
|
|
+ }
|
|
+ return FALSE;
|
|
+}
|
|
+
|
|
+static gboolean
|
|
+utf8_base64_decode (guchar ** binptr, size_t * binlen, const char *b64ptr, size_t b64len)
|
|
+{
|
|
+ gboolean decoded = TRUE;
|
|
+ gboolean padding = FALSE;
|
|
+
|
|
+ int i = 0;
|
|
+ glong ucs4_len, j;
|
|
+
|
|
+ unsigned char byte1 = 0;
|
|
+ unsigned char byte2;
|
|
+
|
|
+ gunichar ucs4, *ucs4_str;
|
|
+
|
|
+ if (b64len == 0)
|
|
+ return TRUE;
|
|
+
|
|
+ if ((binptr == 0) || (b64ptr == 0))
|
|
+ return FALSE;
|
|
+
|
|
+ ucs4_str = g_utf8_to_ucs4_fast (b64ptr, b64len, &ucs4_len);
|
|
+
|
|
+ for (j = 0; j < ucs4_len; j++) {
|
|
+ ucs4 = ucs4_str[j];
|
|
+ if ((ucs4 & 0x7f) == ucs4) {
|
|
+ int b64;
|
|
+ char c = (char) (ucs4);
|
|
+
|
|
+ if (b64_decode_char (c, &b64)) {
|
|
+ if (padding || (*binlen == 0)) {
|
|
+ decoded = FALSE;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ switch (i) {
|
|
+ case 0:
|
|
+ byte1 = (unsigned char) (b64) << 2;
|
|
+ i++;
|
|
+ break;
|
|
+ case 1:
|
|
+ byte2 = (unsigned char) (b64);
|
|
+ byte1 |= byte2 >> 4;
|
|
+ *(*binptr)++ = (char) (byte1);
|
|
+ (*binlen)--;
|
|
+ byte1 = (byte2 & 0x0f) << 4;
|
|
+ i++;
|
|
+ break;
|
|
+ case 2:
|
|
+ byte2 = (unsigned char) (b64);
|
|
+ byte1 |= byte2 >> 2;
|
|
+ *(*binptr)++ = (char) (byte1);
|
|
+ (*binlen)--;
|
|
+ byte1 = (byte2 & 0x03) << 6;
|
|
+ i++;
|
|
+ break;
|
|
+ default:
|
|
+ byte1 |= (unsigned char) (b64);
|
|
+ *(*binptr)++ = (char) (byte1);
|
|
+ (*binlen)--;
|
|
+ i = 0;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ if (!decoded)
|
|
+ break;
|
|
+
|
|
+ continue;
|
|
+ } else if (c == utf8_b64_pad) {
|
|
+ switch (i) {
|
|
+ case 0:
|
|
+ case 1:
|
|
+ decoded = FALSE;
|
|
+ break;
|
|
+ case 2:
|
|
+ if (*binlen == 0)
|
|
+ decoded = FALSE;
|
|
+ else {
|
|
+ *(*binptr)++ = (char) (byte1);
|
|
+ (*binlen)--;
|
|
+ padding = TRUE;
|
|
+ }
|
|
+ i++;
|
|
+ break;
|
|
+ default:
|
|
+ if (!padding) {
|
|
+ if (*binlen == 0)
|
|
+ decoded = FALSE;
|
|
+ else {
|
|
+ *(*binptr)++ = (char) (byte1);
|
|
+ (*binlen)--;
|
|
+ padding = TRUE;
|
|
+ }
|
|
+ }
|
|
+ i = 0;
|
|
+ break;
|
|
+ }
|
|
+ if (!decoded)
|
|
+ break;
|
|
+
|
|
+ continue;
|
|
+ }
|
|
+ }
|
|
+ if (g_unichar_isspace (ucs4))
|
|
+ continue;
|
|
+
|
|
+ decoded = FALSE;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ g_free (ucs4_str);
|
|
+ return decoded;
|
|
+}
|
|
|
|
static GByteArray *
|
|
rsvg_acquire_base64_resource (const char *data, GError ** error)
|
|
{
|
|
- GByteArray *array = NULL;
|
|
- gsize data_len, written_len;
|
|
- int state = 0;
|
|
- guint save = 0;
|
|
+ GByteArray *array;
|
|
+
|
|
+ guchar *bufptr;
|
|
+ size_t buffer_len, buffer_max_len, data_len;
|
|
|
|
rsvg_return_val_if_fail (data != NULL, NULL, error);
|
|
|
|
@@ -51,10 +203,19 @@
|
|
break;
|
|
|
|
data_len = strlen (data);
|
|
- array = g_byte_array_sized_new (data_len / 4 * 3);
|
|
- written_len = g_base64_decode_step (data, data_len, array->data,
|
|
- &state, &save);
|
|
- g_byte_array_set_size (array, written_len);
|
|
+
|
|
+ buffer_max_len = ((data_len >> 2) + 1) * 3;
|
|
+ buffer_len = buffer_max_len;
|
|
+
|
|
+ array = g_byte_array_sized_new (buffer_max_len);
|
|
+ bufptr = array->data;
|
|
+
|
|
+ if (!utf8_base64_decode (&bufptr, &buffer_len, data, data_len)) {
|
|
+ g_byte_array_free (array, TRUE);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ array->len = buffer_max_len - buffer_len;
|
|
|
|
return array;
|
|
}
|
|
@@ -75,7 +236,7 @@
|
|
if (base_filename != NULL) {
|
|
tmpcdir = g_path_get_dirname (base_filename);
|
|
g_free (base_filename);
|
|
- } else
|
|
+ } else
|
|
return NULL;
|
|
} else
|
|
tmpcdir = g_get_current_dir ();
|
|
@@ -92,8 +253,10 @@
|
|
{
|
|
GByteArray *array;
|
|
gchar *path;
|
|
- gchar *data = NULL;
|
|
- gsize length;
|
|
+
|
|
+ guchar buffer[4096];
|
|
+ int length;
|
|
+ FILE *f;
|
|
|
|
rsvg_return_val_if_fail (filename != NULL, NULL, error);
|
|
|
|
@@ -101,20 +264,53 @@
|
|
if (path == NULL)
|
|
return NULL;
|
|
|
|
- if (!g_file_get_contents (path, &data, &length, error)) {
|
|
- g_free (path);
|
|
+ f = fopen (path, "rb");
|
|
+ g_free (path);
|
|
+
|
|
+ if (!f) {
|
|
+ g_set_error (error,
|
|
+ G_FILE_ERROR,
|
|
+ g_file_error_from_errno (errno),
|
|
+ _("Failed to open file '%s': %s"), filename, g_strerror (errno));
|
|
return NULL;
|
|
}
|
|
|
|
+ /* TODO: an optimization is to use the file's size */
|
|
array = g_byte_array_new ();
|
|
|
|
- g_byte_array_append (array, (guint8 *)data, length);
|
|
- g_free (data);
|
|
- g_free (path);
|
|
+ while (!feof (f)) {
|
|
+ length = fread (buffer, 1, sizeof (buffer), f);
|
|
+ if (length > 0) {
|
|
+ if (g_byte_array_append (array, buffer, length) == NULL) {
|
|
+ fclose (f);
|
|
+ g_byte_array_free (array, TRUE);
|
|
+ return NULL;
|
|
+ }
|
|
+ } else if (ferror (f)) {
|
|
+ fclose (f);
|
|
+ g_byte_array_free (array, TRUE);
|
|
+ return NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ fclose (f);
|
|
|
|
return array;
|
|
}
|
|
|
|
+#ifdef HAVE_GIO
|
|
+
|
|
+static void
|
|
+rsvg_free_error (GError ** err)
|
|
+{
|
|
+ if (err) {
|
|
+ if (*err) {
|
|
+ g_error_free (*err);
|
|
+ *err = NULL;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
static GByteArray *
|
|
rsvg_acquire_vfs_resource (const char *filename, const char *base_uri, GError ** error)
|
|
{
|
|
@@ -133,19 +329,19 @@
|
|
if (base_uri != NULL) {
|
|
GFile *base;
|
|
|
|
- g_clear_error (error);
|
|
-
|
|
- g_object_unref (file);
|
|
+ rsvg_free_error(error);
|
|
+
|
|
+ g_object_unref (file);
|
|
|
|
base = g_file_new_for_uri (base_uri);
|
|
file = g_file_resolve_relative_path (base, filename);
|
|
g_object_unref (base);
|
|
|
|
- res = g_file_load_contents (file, NULL, &data, &size, NULL, error);
|
|
+ res = g_file_load_contents (file, NULL, &data, &size, NULL, error);
|
|
}
|
|
}
|
|
|
|
- g_object_unref (file);
|
|
+ g_object_unref (file);
|
|
|
|
if (res) {
|
|
array = g_byte_array_new ();
|
|
@@ -158,6 +354,7 @@
|
|
|
|
return array;
|
|
}
|
|
+#endif
|
|
|
|
GByteArray *
|
|
_rsvg_acquire_xlink_href_resource (const char *href, const char *base_uri, GError ** err)
|
|
@@ -173,8 +370,10 @@
|
|
if (!arr)
|
|
arr = rsvg_acquire_file_resource (href, base_uri, NULL);
|
|
|
|
+#ifdef HAVE_GIO
|
|
if (!arr)
|
|
arr = rsvg_acquire_vfs_resource (href, base_uri, NULL);
|
|
+#endif
|
|
|
|
return arr;
|
|
}
|
|
@@ -274,10 +473,9 @@
|
|
RsvgNodeImage *z = (RsvgNodeImage *) self;
|
|
rsvg_state_finalize (z->super.state);
|
|
g_free (z->super.state);
|
|
- z->super.state = NULL;
|
|
if (z->img)
|
|
- g_object_unref (z->img);
|
|
- _rsvg_node_free(self);
|
|
+ g_object_unref (G_OBJECT (z->img));
|
|
+ g_free (z);
|
|
}
|
|
|
|
static void
|
|
@@ -300,7 +498,7 @@
|
|
|
|
rsvg_push_discrete_layer (ctx);
|
|
|
|
- if (!rsvg_current_state (ctx)->overflow && (aspect_ratio & RSVG_ASPECT_RATIO_SLICE)) {
|
|
+ if (!rsvg_current_state(ctx)->overflow && (aspect_ratio & RSVG_ASPECT_RATIO_SLICE)) {
|
|
rsvg_add_clipping_rect (ctx, x, y, w, h);
|
|
}
|
|
|
|
@@ -357,10 +555,11 @@
|
|
RsvgNodeImage *image;
|
|
image = g_new (RsvgNodeImage, 1);
|
|
_rsvg_node_init (&image->super);
|
|
- g_assert (image->super.state);
|
|
image->img = NULL;
|
|
image->preserve_aspect_ratio = RSVG_ASPECT_RATIO_XMID_YMID;
|
|
image->x = image->y = image->w = image->h = _rsvg_css_parse_length ("0");
|
|
+ image->super.state = g_new (RsvgState, 1);
|
|
+ rsvg_state_init (image->super.state);
|
|
image->super.free = rsvg_node_image_free;
|
|
image->super.draw = rsvg_node_image_draw;
|
|
image->super.set_atts = rsvg_node_image_set_atts;
|
|
--- misc/librsvg-2.32.1/config.h 2011-03-28 20:38:20.301880800 +0200
|
|
+++ misc/build/librsvg-2.32.1/config.h 2011-03-28 20:40:54.958130800 +0200
|
|
@@ -1 +1,27 @@
|
|
-dummy
|
|
+#define HAVE_FLOAT_H 1
|
|
+/* #undef ENABLE_XEMBED */
|
|
+/* #undef HAVE_BASENAME */
|
|
+/* #undef HAVE_DLFCN_H */
|
|
+#define HAVE_GIO 1
|
|
+/* #undef HAVE_INTTYPES_H */
|
|
+/* #undef HAVE_LC_MESSAGES */
|
|
+#define HAVE_LOCALE_H 1
|
|
+#define HAVE_MEMORY_H 1
|
|
+/* #undef HAVE_STDINT_H */
|
|
+#define HAVE_STDLIB_H 1
|
|
+/* #undef HAVE_STRINGS_H */
|
|
+#define HAVE_STRING_H 1
|
|
+/* #undef HAVE_STRTOK_R */
|
|
+#define HAVE_SYS_STAT_H 1
|
|
+#define HAVE_SYS_TYPES_H 1
|
|
+/* #undef HAVE_UNISTD_H */
|
|
+
|
|
+#define PACKAGE "librsvg"
|
|
+#define PACKAGE_BUGREPORT ""
|
|
+#define PACKAGE_NAME ""
|
|
+#define PACKAGE_STRING ""
|
|
+#define PACKAGE_TARNAME ""
|
|
+#define PACKAGE_VERSION ""
|
|
+#define VERSION "2.32.1"
|
|
+#define STDC_HEADERS 1
|
|
+#define X_DISPLAY_MISSING 1
|
|
--- misc/librsvg-2.32.1/makefile.mk 2011-03-28 20:38:20.489380800 +0200
|
|
+++ misc/build/librsvg-2.32.1/makefile.mk 2011-03-28 20:40:38.786255800 +0200
|
|
@@ -1 +1,111 @@
|
|
-dummy
|
|
+#*************************************************************************
|
|
+#
|
|
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
+#
|
|
+# Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
+#
|
|
+# OpenOffice.org - a multi-platform office productivity suite
|
|
+#
|
|
+# This file is part of OpenOffice.org.
|
|
+#
|
|
+# OpenOffice.org is free software: you can redistribute it and/or modify
|
|
+# it under the terms of the GNU Lesser General Public License version 3
|
|
+# only, as published by the Free Software Foundation.
|
|
+#
|
|
+# OpenOffice.org 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 Lesser General Public License version 3 for more details
|
|
+# (a copy is included in the LICENSE file that accompanied this code).
|
|
+#
|
|
+# You should have received a copy of the GNU Lesser General Public License
|
|
+# version 3 along with OpenOffice.org. If not, see
|
|
+# <http://www.openoffice.org/license.html>
|
|
+# for a copy of the LGPLv3 License.
|
|
+#
|
|
+#*************************************************************************
|
|
+
|
|
+PRJ=..$/..$/..$/..
|
|
+PRJINC=.
|
|
+PRJNAME=librsvg
|
|
+TARGET=librsvg-2-2
|
|
+
|
|
+VISIBILITY_HIDDEN=TRUE
|
|
+EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
|
|
+
|
|
+# --- Settings ----------------------------------
|
|
+
|
|
+.INCLUDE : settings.mk
|
|
+
|
|
+CFLAGS+= -DHAVE_GSF -DHAVE_LIBCROCO \
|
|
+ -I. -I$(SOLARINCDIR)$/external/glib-2.0 \
|
|
+ -I. -I$(SOLARINCDIR)$/external/gdk-pixbuf-2.0 \
|
|
+ -I$(SOLARINCDIR)$/external/pango-1.0 \
|
|
+ -I$(SOLARINCDIR)$/external/cairo \
|
|
+ -I$(SOLARINCDIR)$/external/libgsf-1 \
|
|
+ -I$(SOLARINCDIR)$/external/libcroco-0.6
|
|
+
|
|
+# --- Files -------------------------------------
|
|
+
|
|
+SLOFILES=\
|
|
+ $(SLO)$/librsvg-enum-types.obj \
|
|
+ $(SLO)$/librsvg-features.obj \
|
|
+ $(SLO)$/rsvg-affine.obj \
|
|
+ $(SLO)$/rsvg-base-file-util.obj \
|
|
+ $(SLO)$/rsvg-base.obj \
|
|
+ $(SLO)$/rsvg-bpath-util.obj \
|
|
+ $(SLO)$/rsvg-cairo-clip.obj \
|
|
+ $(SLO)$/rsvg-cairo-draw.obj \
|
|
+ $(SLO)$/rsvg-cairo-render.obj \
|
|
+ $(SLO)$/rsvg-cond.obj \
|
|
+ $(SLO)$/rsvg-convert.obj \
|
|
+ $(SLO)$/rsvg-css.obj \
|
|
+ $(SLO)$/rsvg-defs.obj \
|
|
+ $(SLO)$/rsvg-file-util.obj \
|
|
+ $(SLO)$/rsvg-filter.obj \
|
|
+ $(SLO)$/rsvg-gobject.obj \
|
|
+ $(SLO)$/rsvg-image.obj \
|
|
+ $(SLO)$/rsvg-marker.obj \
|
|
+ $(SLO)$/rsvg-mask.obj \
|
|
+ $(SLO)$/rsvg-paint-server.obj \
|
|
+ $(SLO)$/rsvg-path.obj \
|
|
+ $(SLO)$/rsvg-shapes.obj \
|
|
+ $(SLO)$/rsvg-structure.obj \
|
|
+ $(SLO)$/rsvg-styles.obj \
|
|
+ $(SLO)$/rsvg-text.obj \
|
|
+ $(SLO)$/rsvg-xml.obj \
|
|
+ $(SLO)$/rsvg.obj
|
|
+
|
|
+# --- Library -----------------------------------
|
|
+
|
|
+SHL1TARGET= $(TARGET)
|
|
+SHL1OBJS=$(SLOFILES)
|
|
+SHL1STDLIBS=\
|
|
+ intl.lib \
|
|
+ gobject-2.0.lib \
|
|
+ gmodule-2.0.lib \
|
|
+ glib-2.0.lib \
|
|
+ gio-2.0.lib \
|
|
+ gthread-2.0.lib \
|
|
+ gdk_pixbuf-2.0.lib \
|
|
+ cairo.lib \
|
|
+ libxml2.lib \
|
|
+ igsf-1.lib \
|
|
+ libcroco-0.6-3.lib \
|
|
+ pango-1.0.lib \
|
|
+ pangocairo-1.0.lib
|
|
+
|
|
+SHL1IMPLIB= i$(TARGET)
|
|
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
|
|
+DEF1NAME= $(SHL1TARGET)
|
|
+DEF1DEPN= $(MISC)$/$(SHL1TARGET).flt $(SLB)$/$(TARGET).lib
|
|
+DEFLIB1NAME= $(TARGET)
|
|
+
|
|
+# --- Targets ----------------------------------
|
|
+
|
|
+.INCLUDE : target.mk
|
|
+
|
|
+# --- filter file ------------------------------
|
|
+
|
|
+$(MISC)$/$(SHL1TARGET).flt: makefile.mk
|
|
+ @echo CLEAR_THE_FILE > $@
|