summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO34
-rw-r--r--PKGBUILD57
-rw-r--r--libtranslate-0.99-charsetparse.diff47
-rw-r--r--libtranslate-0.99-condfix.diff38
-rw-r--r--libtranslate-0.99-int64.diff11
-rw-r--r--libtranslate-0.99-libsoup24.diff558
-rw-r--r--libtranslate-0.99-postmarker.diff13
-rw-r--r--libtranslate-0.99-services.diff174
8 files changed, 905 insertions, 27 deletions
diff --git a/.SRCINFO b/.SRCINFO
index f9b29848a25d..515b0a2d9781 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,19 +1,29 @@
-# Generated by makepkg 5.0.2
-# Thu Mar 15 20:27:11 UTC 2018
pkgbase = libtranslate
- pkgdesc = library for translating text and web pages between natural languages
+ pkgdesc = A natural language translation library
pkgver = 0.99
- pkgrel = 1
+ pkgrel = 3
url = http://www.nongnu.org/libtranslate/
- arch = any
- license = GPL
- makedepends = make,
- makedepends = cpp
- depends = glib
- depends = libsoup
- depends = libxml2
+ arch = x86_64
+ license = BSD
+ makedepends = intltool
+ makedepends = libxml2
+ depends = talkfilters
+ depends = glib2
+ options = !emptydirs
source = http://savannah.nongnu.org/download/libtranslate/libtranslate-0.99.tar.gz
- md5sums = 1fe75a6a6e8a0c6518890b5fa6984d42
+ source = libtranslate-0.99-charsetparse.diff
+ source = libtranslate-0.99-condfix.diff
+ source = libtranslate-0.99-int64.diff
+ source = libtranslate-0.99-libsoup24.diff
+ source = libtranslate-0.99-postmarker.diff
+ source = libtranslate-0.99-services.diff
+ sha256sums = 4b2becb139e51663022d9531c430ebcc81d8b26edc73f6ddc05707ff9950eb34
+ sha256sums = 5b34c339b6c96a4b644d5ebf74ad648413b93f736ed99443b0ec3268e2b4ec27
+ sha256sums = 9470ae97322c5f44b0062c8be3a7a3bb709d98a8a0e01d6d6955851a94506137
+ sha256sums = ff66a9a617cb54e1d53103e62695bafc1fcced826f2d49b5e3a337a4827be3e0
+ sha256sums = 6ece1007d1bb302e6ce041e6847f7fec9e4208a607cfabe6f6f54210e6d13d51
+ sha256sums = ba3439f5ea952e8f2c24b00df215e18f6177cd99da99ffce10f62a9b29e09664
+ sha256sums = 2777704812ca0c51900a2f50c3e8987cd3124d1712c3450c74b2f1452b67c4a9
pkgname = libtranslate
diff --git a/PKGBUILD b/PKGBUILD
index bbfd3b39c306..2c66ca2107b1 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,24 +1,51 @@
-# Maintainer: Eragon <sam.vzh@gmail.com>
+# Contributor: Rafael Fontenelle <rafaelff@gnome.org>
+# Contributor: Eragon <sam.vzh@gmail.com>
+
pkgname=libtranslate
pkgver=0.99
-pkgrel=2
-pkgdesc="library for translating text and web pages between natural languages"
-arch=('any')
-url='http://www.nongnu.org/libtranslate/'
-license=('GPL')
-depends=('glib' 'libsoup' 'libxml2')
-makedepends=('make', 'cpp')
-source=(http://savannah.nongnu.org/download/libtranslate/$pkgname-$pkgver.tar.gz)
-md5sums=('1fe75a6a6e8a0c6518890b5fa6984d42')
+pkgrel=3
+pkgdesc="A natural language translation library"
+arch=('x86_64')
+url="http://www.nongnu.org/libtranslate/"
+license=('BSD')
+depends=('talkfilters' 'glib2')
+makedepends=('intltool' 'libxml2') #libsoup
+options=(!emptydirs)
+source=("http://savannah.nongnu.org/download/$pkgname/$pkgname-$pkgver.tar.gz"
+ 'libtranslate-0.99-charsetparse.diff'
+ 'libtranslate-0.99-condfix.diff'
+ 'libtranslate-0.99-int64.diff'
+ 'libtranslate-0.99-libsoup24.diff'
+ 'libtranslate-0.99-postmarker.diff'
+ 'libtranslate-0.99-services.diff')
+sha256sums=('4b2becb139e51663022d9531c430ebcc81d8b26edc73f6ddc05707ff9950eb34'
+ '5b34c339b6c96a4b644d5ebf74ad648413b93f736ed99443b0ec3268e2b4ec27'
+ '9470ae97322c5f44b0062c8be3a7a3bb709d98a8a0e01d6d6955851a94506137'
+ 'ff66a9a617cb54e1d53103e62695bafc1fcced826f2d49b5e3a337a4827be3e0'
+ '6ece1007d1bb302e6ce041e6847f7fec9e4208a607cfabe6f6f54210e6d13d51'
+ 'ba3439f5ea952e8f2c24b00df215e18f6177cd99da99ffce10f62a9b29e09664'
+ '2777704812ca0c51900a2f50c3e8987cd3124d1712c3450c74b2f1452b67c4a9')
+
+
+prepare() {
+ cd "$srcdir/$pkgname-$pkgver"
+ patch -p0 -i "$srcdir/libtranslate-0.99-charsetparse.diff"
+ patch -p0 -i "$srcdir/libtranslate-0.99-condfix.diff"
+ patch -p0 -i "$srcdir/libtranslate-0.99-int64.diff"
+ patch -p1 -i "$srcdir/libtranslate-0.99-libsoup24.diff"
+ patch -p1 -i "$srcdir/libtranslate-0.99-postmarker.diff"
+ patch -p1 -i "$srcdir/libtranslate-0.99-services.diff"
+}
build() {
- [ -f /etc/profile.d/gnome.sh ] && . /etc/profile.d/gnome.sh
- cd $srcdir/$pkgname-$pkgver
- ./configure --prefix=/usr
+ cd "$srcdir/$pkgname-$pkgver"
+ ./configure --prefix=/usr --mandir=/usr/share --enable-talkfilters \
+ --disable-generic # disables libsoup; breaks compilation
make
}
package() {
- cd $srcdir/$pkgname-$pkgver
- make DESTDIR=$pkgdir install
+ cd "$srcdir/$pkgname-$pkgver"
+ make DESTDIR="$pkgdir/" install
+ install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}
diff --git a/libtranslate-0.99-charsetparse.diff b/libtranslate-0.99-charsetparse.diff
new file mode 100644
index 000000000000..1626f25ff71f
--- /dev/null
+++ b/libtranslate-0.99-charsetparse.diff
@@ -0,0 +1,47 @@
+--- src/modules/translate-generic-service.c.orig Mon Apr 11 23:08:47 2005
++++ src/modules/translate-generic-service.c Mon Apr 11 23:15:54 2005
+@@ -484,7 +484,7 @@
+
+ if (SOUP_STATUS_IS_SUCCESSFUL(message->status_code))
+ {
+- const char *charset = NULL;
++ char *charset = NULL;
+
+ if (flags & TRANSFER_CONVERT)
+ {
+@@ -493,14 +493,31 @@
+ content_type = translate_generic_service_get_header(message, &info, "Content-Type");
+ if (content_type)
+ {
+- charset = translate_ascii_strcasestr(content_type, "charset=");
+- if (charset)
+- charset += 8;
++ const char *tmp;
++
++ tmp = translate_ascii_strcasestr(content_type, "charset=");
++ if (tmp)
++ {
++ int len;
++
++ tmp += 8;
++ if (*tmp == '\'' || *tmp == '"')
++ tmp++;
++
++ len = strlen(tmp);
++ if (len > 0 && (tmp[len - 1] == '\'' || tmp[len - 1] == '"'))
++ len--;
++
++ charset = g_strndup(tmp, len);
++ }
+ }
+ }
+
+ if (charset)
+- response = g_convert(message->response.body, message->response.length, "UTF-8", charset, NULL, NULL, err);
++ {
++ response = g_convert(message->response.body, message->response.length, "UTF-8", charset, NULL, NULL, err);
++ g_free(charset);
++ }
+ else
+ {
+ if ((flags & TRANSFER_CONVERT) && ! g_utf8_validate(message->response.body, message->response.length, NULL))
diff --git a/libtranslate-0.99-condfix.diff b/libtranslate-0.99-condfix.diff
new file mode 100644
index 000000000000..4011dcd7d5c1
--- /dev/null
+++ b/libtranslate-0.99-condfix.diff
@@ -0,0 +1,38 @@
+--- src/translate-session.c.orig Mon Apr 11 22:44:53 2005
++++ src/translate-session.c Mon Apr 11 22:51:48 2005
+@@ -703,7 +703,14 @@
+ GError *tmp_err = NULL;
+
+ g_mutex_lock(info->mutex);
+- ret = info->err != NULL;
++ if (info->err)
++ {
++ ret = TRUE;
++ if (info->progress_cond)
++ g_cond_signal(info->progress_cond);
++ }
++ else
++ ret = FALSE;
+ g_mutex_unlock(info->mutex);
+
+ if (ret)
+@@ -728,6 +735,9 @@
+ else
+ g_propagate_error(&info->err, tmp_err);
+
++ if (info->progress_cond)
++ g_cond_signal(info->progress_cond);
++
+ g_mutex_unlock(info->mutex);
+
+ return;
+@@ -759,6 +769,9 @@
+ info->err = g_error_new(TRANSLATE_SESSION_ERROR,
+ TRANSLATE_SESSION_ERROR_NO_SERVICE,
+ _("no service could translate chunk"));
++
++ if (info->progress_cond)
++ g_cond_signal(info->progress_cond);
+ }
+
+ g_mutex_unlock(info->mutex);
diff --git a/libtranslate-0.99-int64.diff b/libtranslate-0.99-int64.diff
new file mode 100644
index 000000000000..abd28256f9c5
--- /dev/null
+++ b/libtranslate-0.99-int64.diff
@@ -0,0 +1,11 @@
+--- src/translate-util.c.orig Mon Jan 17 17:45:45 2005
++++ src/translate-util.c Fri Dec 30 22:26:26 2005
+@@ -136,7 +136,7 @@
+ g_return_val_if_fail(big != NULL, NULL);
+ g_return_val_if_fail(little != NULL, NULL);
+
+- lower_big = g_ascii_strdown(big, big_len);
++ lower_big = g_ascii_strdown(big, (int) big_len);
+ lower_little = g_ascii_strdown(little, -1);
+
+ s = strstr(lower_big, lower_little);
diff --git a/libtranslate-0.99-libsoup24.diff b/libtranslate-0.99-libsoup24.diff
new file mode 100644
index 000000000000..fa5b9baa9f33
--- /dev/null
+++ b/libtranslate-0.99-libsoup24.diff
@@ -0,0 +1,558 @@
+--- a/configure 2005-01-28 10:35:36.000000000 -0200
++++ b/configure 2016-07-05 06:26:01.424894115 -0300
+@@ -21782,23 +21782,23 @@
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+- echo "$as_me:$LINENO: checking for libsoup-2.2" >&5
+-echo $ECHO_N "checking for libsoup-2.2... $ECHO_C" >&6
++ echo "$as_me:$LINENO: checking for libsoup-2.4" >&5
++echo $ECHO_N "checking for libsoup-2.4... $ECHO_C" >&6
+
+- if $PKG_CONFIG --exists "libsoup-2.2" ; then
++ if $PKG_CONFIG --exists "libsoup-2.4" ; then
+ echo "$as_me:$LINENO: result: yes" >&5
+ echo "${ECHO_T}yes" >&6
+ succeeded=yes
+
+ echo "$as_me:$LINENO: checking SOUP_CFLAGS" >&5
+ echo $ECHO_N "checking SOUP_CFLAGS... $ECHO_C" >&6
+- SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.2"`
++ SOUP_CFLAGS=`$PKG_CONFIG --cflags "libsoup-2.4"`
+ echo "$as_me:$LINENO: result: $SOUP_CFLAGS" >&5
+ echo "${ECHO_T}$SOUP_CFLAGS" >&6
+
+ echo "$as_me:$LINENO: checking SOUP_LIBS" >&5
+ echo $ECHO_N "checking SOUP_LIBS... $ECHO_C" >&6
+- SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.2"`
++ SOUP_LIBS=`$PKG_CONFIG --libs "libsoup-2.4"`
+ echo "$as_me:$LINENO: result: $SOUP_LIBS" >&5
+ echo "${ECHO_T}$SOUP_LIBS" >&6
+ else
+@@ -21806,7 +21806,7 @@
+ SOUP_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+- SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.2"`
++ SOUP_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libsoup-2.4"`
+
+ fi
+
+diff -ur libtranslate-0.99.orig/config.h.in libtranslate-0.99/config.h.in
+--- libtranslate-0.99.orig/config.h.in 2005-01-17 12:06:58.000000000 -0500
++++ libtranslate-0.99/config.h.in 2008-01-28 18:45:19.000000000 -0500
+@@ -24,6 +24,12 @@
+ /* Define if your <locale.h> file defines LC_MESSAGES. */
+ #undef HAVE_LC_MESSAGES
+
++/* Building with libsoup 2.2 */
++#undef HAVE_LIBSOUP22
++
++/* Building with libsoup 2.4 */
++#undef HAVE_LIBSOUP24
++
+ /* Define to 1 if you have the <locale.h> header file. */
+ #undef HAVE_LOCALE_H
+
+diff -ur libtranslate-0.99.orig/src/modules/translate-generic-service.c libtranslate-0.99/src/modules/translate-generic-service.c
+--- libtranslate-0.99.orig/src/modules/translate-generic-service.c 2008-01-28 19:34:27.000000000 -0500
++++ libtranslate-0.99/src/modules/translate-generic-service.c 2008-01-30 09:50:35.000000000 -0500
+@@ -35,7 +35,9 @@
+ #include <stdlib.h>
+ #include <glib/gi18n-lib.h>
+ #include <libsoup/soup.h>
++#ifdef HAVE_LIBSOUP22
+ #include <libsoup/soup-message-filter.h>
++#endif
+ #include <libxml/HTMLparser.h>
+ #include "translate.h"
+ #include "translate-generic-service.h"
+@@ -43,6 +45,17 @@
+ #include "translate-generic-parser.h"
+ #include "translate-generic-soup-cookie-jar.h"
+
++#ifdef HAVE_LIBSOUP22
++#define soup_message_headers_get soup_message_get_header
++#define soup_message_headers_append soup_message_add_header
++#define SoupURI SoupUri
++#define SOUP_MESSAGE_RESPONSE_BODY(msg) ((msg)->response.body)
++#define SOUP_MESSAGE_RESPONSE_LENGTH(msg) ((msg)->response.length)
++#else
++#define SOUP_MESSAGE_RESPONSE_BODY(msg) ((msg)->response_body->data)
++#define SOUP_MESSAGE_RESPONSE_LENGTH(msg) ((msg)->response_body->length)
++#endif
++
+ #define MAKE_WARNING_PREFIX(service, group_pos, attribute, element) \
+ g_strdup_printf(_("in %s, group %i, \"%s\" attribute of \"%s\" element"), \
+ translate_service_get_name((service)), \
+@@ -140,6 +153,7 @@
+ const char *name);
+
+ static void translate_generic_service_log_connect (SoupMessage *message);
++#ifdef HAVE_LIBSOUP22
+ static void translate_generic_service_log_wrote_headers_h (SoupMessage *message,
+ gpointer user_data);
+ static void translate_generic_service_log_wrote_body_h (SoupMessage *message,
+@@ -151,10 +165,20 @@
+ static void translate_generic_service_log_headers_cb (const char *key,
+ const char *value,
+ gpointer user_data);
++#else
++static void translate_generic_service_log_printer (SoupLogger *logger,
++ SoupLoggerLogLevel level,
++ char direction,
++ const char *data,
++ gpointer user_data);
++#endif
+
+ static void translate_generic_service_progress_got_headers_h (SoupMessage *message,
+ gpointer user_data);
+ static void translate_generic_service_progress_got_chunk_h (SoupMessage *message,
++#ifdef HAVE_LIBSOUP24
++ SoupBuffer *chunk,
++#endif
+ gpointer user_data);
+
+ static void translate_generic_service_html_got_headers_h (SoupMessage *message,
+@@ -170,8 +194,10 @@
+ static void translate_generic_service_refresh_got_body_h (SoupMessage *message,
+ gpointer user_data);
+
++#ifdef HAVE_LIBSOUP22
+ static void translate_generic_service_redirect_handler (SoupMessage *message,
+ gpointer user_data);
++#endif
+
+ static char *translate_generic_service_translate_text (TranslateService *service,
+ const char *text,
+@@ -419,7 +445,11 @@
+ g_return_val_if_fail(post_content_type != NULL, NULL);
+ soup_message_set_request(message,
+ post_content_type,
++#ifdef HAVE_LIBSOUP22
+ SOUP_BUFFER_USER_OWNED,
++#else
++ SOUP_MEMORY_TEMPORARY,
++#endif
+ (char *) post,
+ strlen(post));
+ }
+@@ -427,7 +457,7 @@
+ for (l = headers; l != NULL; l = l->next)
+ {
+ TranslateGenericHttpHeader *header = l->data;
+- soup_message_add_header(message->request_headers, header->name, header->value);
++ soup_message_headers_append(message->request_headers, header->name, header->value);
+ }
+
+ info.session = translate_generic_service_soup_session_sync_new();
+@@ -435,12 +465,21 @@
+ info.html_http_equiv = NULL;
+
+ if (translate_generic_debug_flags & TRANSLATE_GENERIC_DEBUG_LOG_TRANSFERS)
+- g_object_connect(message,
+- "signal::wrote-headers", translate_generic_service_log_wrote_headers_h, &info,
+- "signal::wrote-body", translate_generic_service_log_wrote_body_h, &info,
+- "signal::got-headers", translate_generic_service_log_got_headers_h, &info,
+- "signal::got-body", translate_generic_service_log_got_body_h, &info,
+- NULL);
++ {
++#ifdef HAVE_LIBSOUP22
++ g_object_connect(message,
++ "signal::wrote-headers", translate_generic_service_log_wrote_headers_h, &info,
++ "signal::wrote-body", translate_generic_service_log_wrote_body_h, &info,
++ "signal::got-headers", translate_generic_service_log_got_headers_h, &info,
++ "signal::got-body", translate_generic_service_log_got_body_h, &info,
++ NULL);
++#else
++ SoupLogger *logger = soup_logger_new (SOUP_LOGGER_LOG_BODY, -1);
++ soup_logger_set_printer (logger, translate_generic_service_log_printer, NULL, NULL);
++ soup_logger_attach (logger, info.session);
++ g_object_unref (logger);
++#endif
++ }
+
+ if (progress_func)
+ {
+@@ -468,6 +507,7 @@
+ if (flags & TRANSFER_FOLLOW_REFRESH)
+ g_signal_connect(message, "got-body", G_CALLBACK(translate_generic_service_refresh_got_body_h), &info);
+
++#ifdef HAVE_LIBSOUP22
+ /* http://bugzilla.ximian.com/show_bug.cgi?id=70688 */
+ soup_message_set_flags(message, SOUP_MESSAGE_NO_REDIRECT);
+ soup_message_add_status_class_handler(message,
+@@ -475,6 +515,7 @@
+ SOUP_HANDLER_POST_BODY,
+ translate_generic_service_redirect_handler,
+ info.session);
++#endif
+
+ if (translate_generic_debug_flags & TRANSLATE_GENERIC_DEBUG_LOG_TRANSFERS)
+ translate_generic_service_log_connect(message);
+@@ -515,18 +556,18 @@
+
+ if (charset)
+ {
+- response = g_convert(message->response.body, message->response.length, "UTF-8", charset, NULL, NULL, err);
++ response = g_convert(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message), "UTF-8", charset, NULL, NULL, err);
+ g_free(charset);
+ }
+ else
+ {
+- if ((flags & TRANSFER_CONVERT) && ! g_utf8_validate(message->response.body, message->response.length, NULL))
++ if ((flags & TRANSFER_CONVERT) && ! g_utf8_validate(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message), NULL))
+ g_set_error(err,
+ TRANSLATE_GENERIC_SERVICE_ERROR,
+ TRANSLATE_GENERIC_SERVICE_ERROR_TRANSFER,
+ _("invalid UTF-8"));
+ else
+- response = g_strndup(message->response.body, message->response.length);
++ response = g_strndup(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message));
+ }
+ }
+ else
+@@ -567,7 +608,7 @@
+ : NULL;
+
+ if (! value)
+- value = soup_message_get_header(message->response_headers, name);
++ value = soup_message_headers_get(message->response_headers, name);
+
+ return value;
+ }
+@@ -575,12 +616,14 @@
+ static void
+ translate_generic_service_log_connect (SoupMessage *message)
+ {
+- const SoupUri *uri;
++ const SoupURI *uri;
+
+ uri = soup_message_get_uri(message);
+ g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, _("connecting to %s:%i"), uri->host, uri->port);
+ }
+
++#ifdef HAVE_LIBSOUP22
++
+ static void
+ translate_generic_service_log_wrote_headers_h (SoupMessage *message,
+ gpointer user_data)
+@@ -635,6 +678,20 @@
+ g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s %s: %s", prefix, key, value);
+ }
+
++#else /* !HAVE_LIBSOUP22 */
++
++static void
++translate_generic_service_log_printer (SoupLogger *logger,
++ SoupLoggerLogLevel level,
++ char direction,
++ const char *data,
++ gpointer user_data)
++{
++ g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%c %s", direction, data);
++}
++
++#endif /* HAVE_LIBSOUP22 */
++
+ static void
+ translate_generic_service_progress_got_headers_h (SoupMessage *message,
+ gpointer user_data)
+@@ -642,7 +699,7 @@
+ TransferInfo *info = user_data;
+ const char *content_length;
+
+- content_length = soup_message_get_header(message->response_headers, "Content-Length");
++ content_length = soup_message_headers_get(message->response_headers, "Content-Length");
+ info->length = (content_length
+ && *content_length
+ && strspn(content_length, "0123456789") == strlen(content_length))
+@@ -652,6 +709,9 @@
+
+ static void
+ translate_generic_service_progress_got_chunk_h (SoupMessage *message,
++#ifdef HAVE_LIBSOUP24
++ SoupBuffer *chunk,
++#endif
+ gpointer user_data)
+ {
+ TransferInfo *info = user_data;
+@@ -661,7 +721,11 @@
+ progress = -1;
+ else
+ {
++#ifdef HAVE_LIBSOUP22
+ info->received += message->response.length;
++#else
++ info->received += chunk->length;
++#endif
+ progress = (double) info->received / info->length;
+ progress = CLAMP(progress, 0.0, 1.0);
+ }
+@@ -677,7 +741,7 @@
+ TransferInfo *info = user_data;
+ const char *content_type;
+
+- content_type = soup_message_get_header(message->response_headers, "Content-Type");
++ content_type = soup_message_headers_get(message->response_headers, "Content-Type");
+ info->parse_html = content_type
+ && (g_str_has_prefix(content_type, "text/html")
+ || g_str_has_prefix(content_type, "application/xhtml+xml")
+@@ -697,7 +761,7 @@
+ info->html_http_equiv = NULL;
+ }
+
+- if (info->parse_html && message->response.length > 0)
++ if (info->parse_html && SOUP_MESSAGE_RESPONSE_LENGTH (message) > 0)
+ {
+ char *body;
+ xmlSAXHandler sax_handler = { NULL };
+@@ -711,7 +775,7 @@
+ sax_handler.startElement = translate_generic_service_html_start_element_cb;
+ sax_handler.endElement = translate_generic_service_html_end_element_cb;
+
+- body = g_strndup(message->response.body, message->response.length);
++ body = g_strndup(SOUP_MESSAGE_RESPONSE_BODY (message), SOUP_MESSAGE_RESPONSE_LENGTH (message));
+ htmlSAXParseDoc(body, NULL, &sax_handler, user_data);
+ g_free(body);
+ }
+@@ -778,7 +842,7 @@
+ {
+ TransferInfo *info = user_data;
+ const char *refresh_uri;
+- SoupUri *new_uri = NULL;
++ SoupURI *new_uri = NULL;
+
+ refresh_uri = translate_generic_service_get_header(message, info, "Refresh");
+ if (refresh_uri)
+@@ -793,9 +857,9 @@
+ new_uri = soup_uri_new(refresh_uri);
+ if (! new_uri)
+ {
+- const SoupUri *base_uri;
++ SoupURI *base_uri;
+
+- base_uri = soup_message_get_uri(message);
++ base_uri = (SoupURI *)soup_message_get_uri(message);
+ new_uri = soup_uri_new_with_base(base_uri, refresh_uri);
+ }
+ }
+@@ -812,6 +876,7 @@
+ }
+ }
+
++#ifdef HAVE_LIBSOUP22
+ static void
+ translate_generic_service_redirect_handler (SoupMessage *message,
+ gpointer user_data)
+@@ -848,6 +913,7 @@
+ soup_session_requeue_message(session, message);
+ }
+ }
++#endif
+
+ static char *
+ translate_generic_service_translate_text (TranslateService *service,
+@@ -1314,7 +1380,7 @@
+ translate_generic_service_soup_session_sync_new (void)
+ {
+ char *proxy_text_uri;
+- SoupUri *proxy_uri = NULL;
++ SoupURI *proxy_uri = NULL;
+ SoupSession *session;
+ TranslateGenericSoupCookieJar *cookie_jar;
+
+@@ -1334,7 +1400,7 @@
+ soup_uri_free(proxy_uri);
+
+ cookie_jar = translate_generic_soup_cookie_jar_new();
+- soup_session_add_filter(session, SOUP_MESSAGE_FILTER(cookie_jar));
++ translate_generic_soup_cookie_jar_attach(cookie_jar, session);
+ g_object_unref(cookie_jar);
+
+ return session;
+diff -ur libtranslate-0.99.orig/src/modules/translate-generic-soup-cookie-jar.c libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.c
+--- libtranslate-0.99.orig/src/modules/translate-generic-soup-cookie-jar.c 2005-01-17 11:46:53.000000000 -0500
++++ libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.c 2008-01-28 19:48:21.000000000 -0500
+@@ -29,9 +29,12 @@
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
++#include "config.h"
+ #include <string.h>
+ #include <libsoup/soup.h>
++#ifdef HAVE_LIBSOUP22
+ #include <libsoup/soup-message-filter.h>
++#endif
+ #include "translate-generic-soup-cookie-jar.h"
+
+ struct _TranslateGenericSoupCookieJarPrivate
+@@ -44,9 +47,12 @@
+ static void translate_generic_soup_cookie_jar_register_type (GType *type);
+ static void translate_generic_soup_cookie_jar_class_init (TranslateGenericSoupCookieJarClass *class);
+ static void translate_generic_soup_cookie_jar_init (TranslateGenericSoupCookieJar *jar);
++#ifdef HAVE_LIBSOUP22
+ static void translate_generic_soup_cookie_jar_filter_init (SoupMessageFilterClass *iface);
++#else
++#define SoupMessageFilter TranslateGenericSoupCookieJar
++#endif
+ static void translate_generic_soup_cookie_jar_finalize (GObject *object);
+-
+ static void translate_generic_soup_cookie_jar_setup_message (SoupMessageFilter *filter,
+ SoupMessage *message);
+
+@@ -75,17 +81,21 @@
+ 0,
+ (GInstanceInitFunc) translate_generic_soup_cookie_jar_init
+ };
++#ifdef HAVE_LIBSOUP22
+ static const GInterfaceInfo filter_info = {
+ (GInterfaceInitFunc) translate_generic_soup_cookie_jar_filter_init,
+ NULL,
+ NULL
+ };
++#endif
+
+ *type = g_type_register_static(G_TYPE_OBJECT,
+ "TranslateGenericSoupCookieJar",
+ &info,
+ 0);
++#ifdef HAVE_LIBSOUP22
+ g_type_add_interface_static(*type, SOUP_TYPE_MESSAGE_FILTER, &filter_info);
++#endif
+ }
+
+ static void
+@@ -107,11 +117,13 @@
+ TranslateGenericSoupCookieJarPrivate);
+ }
+
++#ifdef HAVE_LIBSOUP22
+ static void
+ translate_generic_soup_cookie_jar_filter_init (SoupMessageFilterClass *iface)
+ {
+ iface->setup_message = translate_generic_soup_cookie_jar_setup_message;
+ }
++#endif
+
+ static void
+ translate_generic_soup_cookie_jar_finalize (GObject *object)
+@@ -125,26 +137,46 @@
+ }
+
+ static void
++add_cookie_to_jar (TranslateGenericSoupCookieJar *jar, const char *cookie)
++{
++ char *s;
++
++ s = strchr(cookie, ';');
++ if (s)
++ jar->priv->cookies = g_slist_append(jar->priv->cookies, g_strndup(cookie, s - cookie));
++}
++
++#ifdef HAVE_LIBSOUP24
++static void
++maybe_add_cookie_to_jar (const char *header, const char *value, gpointer jar)
++{
++ if (!g_ascii_strcasecmp (header, "Set-Cookie"))
++ add_cookie_to_jar (jar, value);
++}
++#endif
++
++static void
+ translate_generic_soup_cookie_jar_setup_message (SoupMessageFilter *filter,
+- SoupMessage *message)
++ SoupMessage *message)
+ {
+ TranslateGenericSoupCookieJar *jar = TRANSLATE_GENERIC_SOUP_COOKIE_JAR(filter);
+- const GSList *cookies;
+ const GSList *l;
+
+ /* FIXME: add full RFC 2965 support */
+
++#ifdef HAVE_LIBSOUP22
++ const GSList *cookies;
++
+ cookies = soup_message_get_header_list(message->response_headers, "Set-Cookie");
+ for (l = cookies; l != NULL; l = l->next)
+ {
+ const char *cookie = l->data;
+- char *s;
+-
+- s = strchr(cookie, ';');
+- if (s)
+- jar->priv->cookies = g_slist_append(jar->priv->cookies, g_strndup(cookie, s - cookie));
++ add_cookie_to_jar(jar, cookie);
+ }
+-
++#else
++ soup_message_headers_foreach(message->response_headers, maybe_add_cookie_to_jar, jar);
++#endif
++
+ if (jar->priv->cookies)
+ {
+ GString *string;
+@@ -159,13 +191,44 @@
+ g_string_append(string, "; ");
+ }
+
++#ifdef HAVE_LIBSOUP22
+ soup_message_add_header(message->request_headers, "Cookie", string->str);
++#else
++ soup_message_headers_append(message->request_headers, "Cookie", string->str);
++#endif
+ g_string_free(string, TRUE);
+ }
+ }
+
++#ifdef HAVE_LIBSOUP24
++static void
++translate_generic_soup_cookie_jar_request_started (SoupSession *session,
++ SoupMessage *message,
++ SoupSocket *socket,
++ gpointer cookie_jar)
++{
++ translate_generic_soup_cookie_jar_setup_message (cookie_jar, message);
++}
++#endif
++
+ TranslateGenericSoupCookieJar *
+ translate_generic_soup_cookie_jar_new (void)
+ {
+ return g_object_new(TRANSLATE_GENERIC_TYPE_SOUP_COOKIE_JAR, NULL);
+ }
++
++void
++translate_generic_soup_cookie_jar_attach (TranslateGenericSoupCookieJar *cookie_jar,
++ SoupSession *session)
++{
++#ifdef HAVE_LIBSOUP22
++ soup_session_add_filter (session, SOUP_MESSAGE_FILTER(cookie_jar));
++#else
++ g_signal_connect (session, "request_started",
++ G_CALLBACK (translate_generic_soup_cookie_jar_request_started),
++ cookie_jar);
++ g_object_set_data_full (G_OBJECT (session), "TranslateGenericSoupCookieJar",
++ g_object_ref (cookie_jar), g_object_unref);
++#endif
++}
++
+diff -ur libtranslate-0.99.orig/src/modules/translate-generic-soup-cookie-jar.h libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.h
+--- libtranslate-0.99.orig/src/modules/translate-generic-soup-cookie-jar.h 2005-01-17 11:47:00.000000000 -0500
++++ libtranslate-0.99/src/modules/translate-generic-soup-cookie-jar.h 2008-01-28 19:17:24.000000000 -0500
+@@ -33,6 +33,7 @@
+ #define _TRANSLATE_GENERIC_SOUP_COOKIE_JAR_H
+
+ #include <glib-object.h>
++#include <libsoup/soup-session.h>
+
+ #define TRANSLATE_GENERIC_TYPE_SOUP_COOKIE_JAR (translate_generic_soup_cookie_jar_get_type())
+ #define TRANSLATE_GENERIC_SOUP_COOKIE_JAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), TRANSLATE_GENERIC_TYPE_SOUP_COOKIE_JAR, TranslateGenericSoupCookieJar))
+@@ -59,5 +60,6 @@
+
+ GType translate_generic_soup_cookie_jar_get_type (void);
+ TranslateGenericSoupCookieJar *translate_generic_soup_cookie_jar_new (void);
++void translate_generic_soup_cookie_jar_attach (TranslateGenericSoupCookieJar *cookie_jar, SoupSession *session);
+
+ #endif /* _TRANSLATE_GENERIC_SOUP_COOKIE_JAR_H */
+
diff --git a/libtranslate-0.99-postmarker.diff b/libtranslate-0.99-postmarker.diff
new file mode 100644
index 000000000000..38112a3340a7
--- /dev/null
+++ b/libtranslate-0.99-postmarker.diff
@@ -0,0 +1,13 @@
+diff -Nrbu libtranslate-0.99/src/modules/translate-generic-service.c libtranslate-0.99-OK/src/modules/translate-generic-service.c
+--- libtranslate-0.99/src/modules/translate-generic-service.c 2007-12-06 17:27:26.000000000 +0300
++++ libtranslate-0.99-OK/src/modules/translate-generic-service.c 2007-12-06 17:27:10.000000000 +0300
+@@ -955,7 +955,7 @@
+ raw = g_strndup(work, s - work);
+ }
+ else
+- raw = g_strdup(response);
++ raw = g_strdup(work);
+ }
+
+ if (raw)
+
diff --git a/libtranslate-0.99-services.diff b/libtranslate-0.99-services.diff
new file mode 100644
index 000000000000..5b0fa5037445
--- /dev/null
+++ b/libtranslate-0.99-services.diff
@@ -0,0 +1,174 @@
+diff -Nrbu libtranslate-0.99/data/services.xml.in libtranslate-0.99-OK/data/services.xml.in
+--- libtranslate-0.99/data/services.xml.in 2005-01-17 19:54:27.000000000 +0300
++++ libtranslate-0.99-OK/data/services.xml.in 2007-12-10 15:09:25.000000000 +0300
+@@ -73,28 +73,34 @@
+ <language tag="ru" to="en"/>
+ <language tag="es" to="en,fr"/>
+ <language tag="sv" to="en"/>
+- <http-header name="Referer" value="http://www.systransoft.com/"/>
+- <text-translation url="http://www.systranbox.com/systran/box?systran_charset=utf-8&amp;ttype=text&amp;systran_text=${text:escape}&amp;systran_lp=${from}_${to}">
+- <pre-marker text="&lt;textarea name=&quot;translation&quot;"/>
+- <pre-marker text="&gt;"/>
+- <post-marker text="&lt;/textarea&gt;"/>
++ <text-translation url="http://www2.systranbox.com/sai?gui=sbox/normal/systran/sboxEN&amp;lp=${from}_${to}&amp;service=translate" post="${text}">
++ <pre-marker text="body=&#10;"/>
+ </text-translation>
+- <web-page-translation url="http://www.systranbox.com/systran/box?systran_id=SystranSoft-en&amp;systran_url=${url:escape}&amp;systran_lp=${from}_${to}&amp;systran_f=${time}"/>
++ <web-page-translation url="http://svsurl.systransoft.com/?trans=1&amp;gui=sbox/normal/systran/systranEN&amp;lp=${from}_${to}&amp;loc_lang=en&amp;path=systran/systranEN&amp;frame=1&amp;url=${url:escape}"/>
+ </group>
+ </service>
+
+ <service name="google" nick="Google">
+ <group>
+ <language tag="en" to="*"/>
+- <language tag="fr" to="en,de"/>
++ <language tag="ar" to="en"/>
+ <language tag="de" to="en,fr"/>
++ <language tag="el" to="en"/>
++ <language tag="es" to="en"/>
++ <language tag="fr" to="en,de"/>
+ <language tag="it" to="en"/>
++ <language tag="ja" to="en"/>
++ <language tag="ko" to="en"/>
++ <language tag="nl" to="en"/>
+ <language tag="pt" to="en"/>
+- <language tag="es" to="en"/>
++ <language tag="ru" to="en"/>
++ <language tag="zh" service-tag="zh-CN" to="en,zh-TW"/>
++ <language tag="zh-TW" to="zh"/>
+ <text-translation url="http://www.google.com/translate_t?text=${text:escape}&amp;langpair=${from}|${to}&amp;ie=utf8&amp;oe=utf8">
+- <pre-marker text="&lt;textarea"/>
++ <pre-marker text="&lt;div id="/>
++ <pre-marker text="result_box"/>
+ <pre-marker text="&gt;"/>
+- <post-marker text="&lt;/textarea&gt;"/>
++ <post-marker text="&lt;/div&gt;"/>
+ </text-translation>
+ <web-page-translation url="http://www.google.com/translate_c?u=${url:escape}&amp;langpair=${from}|${to}"/>
+ </group>
+@@ -120,29 +126,10 @@
+ <language tag="ru" service-tag="russian" to="en"/>
+ <text-translation url="http://ets6.freetranslation.com/?sequence=core&amp;srctext=${text:escape}&amp;language=${from}/${to}&amp;charset=utf-8"/>
+ </group>
+- </service>
+-
+- <service name="worldlingo" nick="WorldLingo">
+ <group>
+- <language tag="en" to="*"/>
+- <language tag="zh" service-tag="zh_cn" to="*"/>
+- <language tag="zh-TW" service-tag="zh_tw" to="*"/>
+- <language tag="nl" to="*"/>
+- <language tag="fr" to="*"/>
+- <language tag="de" to="*"/>
+- <language tag="el" to="*"/>
+- <language tag="it" to="*"/>
+- <language tag="ja" to="*"/>
+- <language tag="ko" to="*"/>
+- <language tag="pt" to="*"/>
+- <language tag="ru" to="*"/>
+- <language tag="es" to="*"/>
+- <text-translation url="http://www.worldlingo.com/wl/translate?wl_text=${text:escape}&amp;wl_srclang=${from}&amp;wl_trglang=${to}&amp;wl_ucp=1">
+- <pre-marker text="&lt;textarea name=&quot;wl_result"/>
+- <pre-marker text="&gt;"/>
+- <post-marker text="&lt;/textarea&gt;"/>
+- </text-translation>
+- <web-page-translation url="http://www.worldlingo.com/wl/translate?wl_url=${url:escape}&amp;wl_srclang=${from}&amp;wl_trglang=${to}&amp;wl_fl=2"/>
++ <language tag="en" service-tag="english" to="*"/>
++ <language tag="ja" service-tag="japanese" to ="en"/>
++ <text-translation url="http://tets9.freetranslation.com/?sequence=core&amp;srctext=${text:escape}&amp;language=${from}/${to}&amp;charset=utf-8"/>
+ </group>
+ </service>
+
+@@ -167,7 +154,7 @@
+ <language tag="uk" service-tag="Ukrainian" to="*"/>
+ <text-translation
+ url="http://www.1-800-translate.com/machine_trans/process_free_trans.asp"
+- post="transfrom=${from}&amp;transto=${to}&amp;sourcetext=${text:escape}&amp;expiredlang=no">
++ post="transfrom=${from}&amp;transto=${to}&amp;transtext=${text:escape}&amp;expiredlang=no">
+ <pre-marker text="&lt;textarea name=&quot;transresult"/>
+ <pre-marker text="&gt;&#10;"/>
+ <post-marker text="&#10;&lt;/textarea&gt;"/>
+@@ -175,48 +162,6 @@
+ </group>
+ </service>
+
+- <service name="tsunami" nick="Tsunami">
+- <group>
+- <language tag="ar" service-tag="AR"/>
+- <language tag="bg" service-tag="BL" to="*"/>
+- <language tag="zh" service-tag="ZH" to="*"/>
+- <language tag="zh-TW" service-tag="ZH_TW" to="*"/>
+- <language tag="hr" service-tag="CR" to="*"/>
+- <language tag="cs" service-tag="CZ" to="*"/>
+- <language tag="da" service-tag="DN" to="*"/>
+- <language tag="nl" service-tag="NL" to="*"/>
+- <language tag="en" service-tag="EN" to="*"/>
+- <language tag="fi" service-tag="FI" to="*"/>
+- <language tag="fr" service-tag="FR" to="*"/>
+- <language tag="de" service-tag="DE" to="*"/>
+- <language tag="el" service-tag="EL" to="*"/>
+- <language tag="hu" service-tag="HN" to="*"/>
+- <language tag="is" service-tag="IC" to="*"/>
+- <language tag="it" service-tag="IT" to="*"/>
+- <language tag="ja" service-tag="JA" to="*"/>
+- <language tag="ko" service-tag="KO" to="*"/>
+- <language tag="la" service-tag="LT" to="*"/>
+- <language tag="no" service-tag="NW" to="*"/>
+- <language tag="pl" service-tag="PO" to="*"/>
+- <language tag="pt" service-tag="PT" to="*"/>
+- <language tag="ro" service-tag="RO" to="*"/>
+- <language tag="ru" service-tag="RU" to="*"/>
+- <language tag="sr" service-tag="SB" to="*"/>
+- <language tag="sk" service-tag="SL" to="*"/>
+- <language tag="es" service-tag="ES" to="*"/>
+- <language tag="sv" service-tag="SW" to="*"/>
+- <language tag="tr" service-tag="TK" to="*"/>
+- <language tag="cy" service-tag="WE" to="*"/>
+- <text-translation url="http://www.translationbooth.com/tb/aojb/Tpl/freeTranslation/?textCheck=1&amp;original=${text:escape}&amp;srcLang=${from}&amp;trgLang=${to}">
+- <pre-marker text="&lt;textarea name=&quot;original"/>
+- <pre-marker text="&lt;textarea"/>
+- <pre-marker text="&gt;"/>
+- <post-marker text="&lt;/textarea&gt;"/>
+- <error-marker text="&gt;Translation Server Busy, Please Retry.&lt;"/>
+- </text-translation>
+- </group>
+- </service>
+-
+ <service name="kataku" nick="Kataku">
+ <group>
+ <language tag="en" to="*"/>
+@@ -237,11 +182,30 @@
+ <group>
+ <language tag="en" service-tag="E" to="*"/>
+ <language tag="pap" service-tag="P" to="*"/>
+- <text-translation url="http://www.donamaro.nl/papiamentu/index.php3?pAction=tradusi&amp;pSel=${from}2${to}&amp;pFrom=${text:charset=ISO8859-1,escape}">
+- <pre-marker text="&lt;TEXTAREA NAME=&quot;pTo&quot;"/>
++ <text-translation url="http://www.donamaro.nl/papiamentu/index.php?pAction=tradusi&amp;pSel=${from}2${to}&amp;pFrom=${text:charset=ISO8859-1,escape}">
++ <pre-marker text="&lt;textarea name=&quot;pTo&quot;"/>
++ <pre-marker text="&gt;"/>
++ <post-marker text="&lt;/textarea&gt;"/>
++ </text-translation>
++ </group>
++ </service>
++
++ <service nick="PROMT Online-Translator" name="promt" max-chunk-len="450">
++ <group>
++ <language to="de,es,fr,pt,ru" tag="en" service-tag="e"/>
++ <language to="en,fr,es,ru" tag="de" service-tag="g"/>
++ <language to="de,en,fr,ru" tag="es" service-tag="s"/>
++ <language to="de,en,es,ru" tag="fr" service-tag="f"/>
++ <language to="en,ru" tag="it" service-tag="i"/>
++ <language to="en" tag="pt" service-tag="p"/>
++ <language to="de,en,es,fr" tag="ru" service-tag="r"/>
++ <text-translation url="http://www.online-translator.com/text.asp" post="lang=en&amp;status=translate&amp;source=${text:charset=windows-1251,escape}&amp;direction=${from}${to}&amp;template=General">
++ <pre-marker text="&lt;div id=&quot;r_text"/>
+ <pre-marker text="&gt;"/>
+- <post-marker text="&lt;/TEXTAREA&gt;"/>
++ <pre-marker text="&#10;"/>
++ <post-marker text="&lt;/div&gt;"/>
+ </text-translation>
++ <web-page-translation url="http://www.online-translator.com/url/tran_url.asp?lang=en&amp;url=${url:escape}&amp;$direction=${from}${to}&amp;template=General&amp;cp1=NO&amp;cp2=NO&amp;autotranslate=on"/>
+ </group>
+ </service>
+ </services>
+