#include "list.h"
#include "misc.h"
@@ -285,6 +286,9 @@ static gboolean Interface_quit(GtkWidget
if (bw->question_dialog_window != NULL)
gtk_widget_destroy(bw->question_dialog_window);
+ if (bw->autoencoding)
+ g_free (bw->autoencoding);
+
if (bw->menu_popup.over_back)
gtk_widget_destroy(bw->menu_popup.over_back);
if (bw->menu_popup.over_forw)
@@ -891,6 +895,15 @@ a_Interface_browser_window_new(gint widt
bw->question_dialog_window = NULL;
bw->question_dialog_data = NULL;
bw->viewsource_window = NULL;
+ /* bw->encoding is filled in
+ * Char_encoding_add_to_menu called from
+ * a_Char_encoding_fill_new_menu called from
+ * a_Menu_mainbar_new called from
+ * this function */
+ /* bw->encoding = NULL; */
+ bw->autoencoding = NULL;
+ bw->dcv.c_from = (iconv_t)-1; /* no conversion yet */
+ bw->dcv.c_to = (iconv_t)-1;
/* now that the bw is made, let's customize it.. */
Interface_browser_window_customize(bw);
diff -pruN dillo-0.7.2/src/IO/file.c dillo-0.7.2-encodings/src/IO/file.c
--- dillo-0.7.2/src/IO/file.c 2003-04-16 02:16:21.000000000 +0700
+++ dillo-0.7.2-encodings/src/IO/file.c 2003-05-06 16:29:34.000000000 +0700
@@ -37,6 +37,7 @@
#include "../misc.h"
#include "../web.h"
#include "../interface.h"
+#include "../char_encodings.h"
typedef struct _DilloDir {
gint FD_Write, FD_Read;
@@ -256,8 +257,10 @@ static void *File_transfer_dir(void *dat
Hdirname = (s1 = File_html_escape(Ddir->dirname)) ? s1 : Ddir->dirname;
CHdirname = (s2 = a_Misc_escape_chars(Hdirname, "% ")) ? s2 : Hdirname;
g_string_sprintf(gstr, "\n\n \n"
+ " \n"
" %s%s\n\n",
"file:", CHdirname,
+ locale_charset,
"file:", Hdirname);
write(Ddir->FD_Write, gstr->str, gstr->len);
g_string_sprintf(gstr, "%s %s
\n\n",
diff -pruN dillo-0.7.2/src/IO/http.c dillo-0.7.2-encodings/src/IO/http.c
--- dillo-0.7.2/src/IO/http.c 2003-04-16 02:16:21.000000000 +0700
+++ dillo-0.7.2-encodings/src/IO/http.c 2003-05-06 16:29:34.000000000 +0700
@@ -33,6 +33,7 @@
#include "../dns.h"
#include "../cache.h"
#include "../web.h"
+#include "../char_encodings.h"
#include "../interface.h"
#include "../cookies.h"
#include "../prefs.h"
@@ -124,7 +125,7 @@ static void Http_socket_free(gint SKey)
*/
static char *Http_query(const DilloUrl *url, gboolean use_proxy)
{
- gchar *str, *ptr, *cookies;
+ gchar *str, *ptr, *cookies, *accept_charsets;
GString *s_port = g_string_new(""),
*query = g_string_new(""),
*full_path = g_string_new("");
@@ -148,10 +149,14 @@ static char *Http_query(const DilloUrl *
}
cookies = a_Cookies_get(url);
+ accept_charsets = a_Char_encoding_accept_charset_string ();
+
if ( URL_FLAGS(url) & URL_Post ){
g_string_sprintfa(
query,
"POST %s HTTP/1.0\r\n"
+ "%s\r\n"
+ "Accept-Language: %s\r\n"
"Host: %s%s\r\n"
"User-Agent: Dillo/%s\r\n"
"Cookie2: $Version=\"1\"\r\n"
@@ -160,7 +165,8 @@ static char *Http_query(const DilloUrl *
"Content-length: %ld\r\n"
"\r\n"
"%s",
- full_path->str, URL_HOST(url), s_port->str, VERSION, cookies,
+ full_path->str, accept_charsets, prefs.accept_language,
+ URL_HOST(url), s_port->str, VERSION, cookies,
(glong)strlen(URL_DATA(url)),
URL_DATA(url));
@@ -169,17 +175,21 @@ static char *Http_query(const DilloUrl *
query,
"GET %s HTTP/1.0\r\n"
"%s"
+ "%s\r\n"
+ "Accept-Language: %s\r\n"
"Host: %s%s\r\n"
"User-Agent: Dillo/%s\r\n"
"Cookie2: $Version=\"1\"\r\n"
"%s"
"\r\n",
- full_path->str,
+ full_path->str,
(URL_FLAGS(url) & URL_E2EReload) ?
"Cache-Control: no-cache\r\nPragma: no-cache\r\n" : "",
+ accept_charsets, prefs.accept_language,
URL_HOST(url), s_port->str, VERSION,
cookies);
}
+ g_free(accept_charsets);
g_free(cookies);
str = query->str;
diff -pruN dillo-0.7.2/src/Makefile.am dillo-0.7.2-encodings/src/Makefile.am
--- dillo-0.7.2/src/Makefile.am 2003-04-03 22:42:12.000000000 +0700
+++ dillo-0.7.2-encodings/src/Makefile.am 2003-05-06 16:29:34.000000000 +0700
@@ -59,6 +59,9 @@ dillo_SOURCES = \
dw_tooltip.h \
dw_widget.c \
dw_widget.h \
+ char_encodings.c \
+ char_encodings.h \
+ char_encoding-types.h \
findtext.c \
findtext.h \
selection.c \
diff -pruN dillo-0.7.2/src/menu.c dillo-0.7.2-encodings/src/menu.c
--- dillo-0.7.2/src/menu.c 2003-04-16 02:16:14.000000000 +0700
+++ dillo-0.7.2-encodings/src/menu.c 2003-05-06 16:29:34.000000000 +0700
@@ -33,6 +33,7 @@
#include "bookmark.h"
#include "interface.h"
#include "menu.h"
+#include "char_encodings.h"
/*
* Forward declarations
@@ -123,6 +124,7 @@ GtkWidget *a_Menu_mainbar_new(BrowserWin
GtkWidget *menubar;
GtkWidget *file_menu;
/* GtkWidget *bookmarks_menu; */
+ GtkWidget *enc_menu;
/* GtkWidget *help_menu; */
bw->menubar = menubar = gtk_menu_bar_new();
@@ -160,6 +162,11 @@ GtkWidget *a_Menu_mainbar_new(BrowserWin
Menu_add(help_menu, "Dillo _Manual", NULL, bw,
a_Commands_manual_callback, bw);
*/
+
+ enc_menu = Menu_new(menubar, tiny ? "_E" : "_Char_encoding", FALSE, bw);
+ bw->enc_menu = enc_menu;
+ a_Char_encoding_fill_new_menu(bw);
+
return menubar;
}
diff -pruN dillo-0.7.2/src/plain.c dillo-0.7.2-encodings/src/plain.c
--- dillo-0.7.2/src/plain.c 2003-04-16 02:16:15.000000000 +0700
+++ dillo-0.7.2-encodings/src/plain.c 2003-05-06 16:29:34.000000000 +0700
@@ -29,7 +29,8 @@
#include "history.h"
#include "nav.h"
#include "menu.h"
-
+#include "encodings-types.h"
+#include "char_encodings.h"
typedef struct _DilloPlain {
DwWidget *dw;
@@ -98,6 +99,8 @@ static DilloPlain *Plain_new(BrowserWind
plain->bw->main_window->window);
//a_Dw_widget_set_style (plain->dw, plain->style);
+ a_Char_encoding_configure_conversion (bw);
+
/* The context menu */
gtk_signal_connect_while_alive
(GTK_OBJECT(GTK_BIN(plain->bw->docwin)->child),"button_press_event",
@@ -156,7 +159,7 @@ static void Plain_write(DilloPlain *plai
{
DwPage *page = (DwPage *)plain->dw;
char *Start;
- char *data;
+ char *translated_data;
gint i, len, MaxBytes;
Start = (char*)Buf + plain->Start_Ofs;
@@ -172,9 +175,10 @@ static void Plain_write(DilloPlain *plai
}
break;
case ST_Eol:
- data = g_strndup(Start + i - len, len);
- a_Dw_page_add_text(page, a_Misc_expand_tabs(data), plain->style);
- g_free(data);
+ translated_data = a_Char_encoding_translate_encoding (
+ plain->bw, Start + i - len, len, DE_DECODE);
+ a_Dw_page_add_text(page, a_Misc_expand_tabs(translated_data), plain->style);
+ g_free(translated_data);
a_Dw_page_add_parbreak(page, 0, plain->style);
if ( Start[i] == '\r' && Start[i + 1] == '\n' ) ++i;
if ( i < MaxBytes ) ++i;
@@ -185,9 +189,10 @@ static void Plain_write(DilloPlain *plai
}
plain->Start_Ofs += i - len;
if ( Eof && len ) {
- data = g_strndup(Start + i - len, len);
- a_Dw_page_add_text(page, a_Misc_expand_tabs(data), plain->style);
- g_free(data);
+ translated_data = a_Char_encoding_translate_encoding (
+ plain->bw, Start + i - len, len, DE_DECODE);
+ a_Dw_page_add_text(page, a_Misc_expand_tabs(translated_data), plain->style);
+ g_free(translated_data);
a_Dw_page_add_parbreak(page, 0, plain->style);
plain->Start_Ofs += len;
}
diff -pruN dillo-0.7.2/src/prefs.c dillo-0.7.2-encodings/src/prefs.c
--- dillo-0.7.2/src/prefs.c 2003-04-16 02:16:15.000000000 +0700
+++ dillo-0.7.2-encodings/src/prefs.c 2003-05-06 16:29:34.000000000 +0700
@@ -37,6 +37,7 @@ static const struct {
{ "geometry", DRC_TOKEN_GEOMETRY },
{ "http_proxy", DRC_TOKEN_PROXY },
{ "no_proxy", DRC_TOKEN_NOPROXY },
+ { "accept_language", DRC_TOKEN_ACCEPT_LANGUAGE },
{ "link_color", DRC_TOKEN_LINK_COLOR },
{ "visited_color", DRC_TOKEN_VISITED_COLOR, },
{ "bg_color", DRC_TOKEN_BG_COLOR },
@@ -123,6 +124,10 @@ static guint Prefs_parser(GScanner *scan
prefs.no_proxy = g_strdup(scanner->value.v_string);
prefs.no_proxy_vec = g_strsplit(prefs.no_proxy, " ", 0);
break;
+ case DRC_TOKEN_ACCEPT_LANGUAGE:
+ g_free (prefs.accept_language);
+ prefs.accept_language = g_strdup(scanner->value.v_string);
+ break;
case DRC_TOKEN_LINK_COLOR:
prefs.link_color = a_Color_parse(scanner->value.v_string,
prefs.link_color);
@@ -332,6 +337,7 @@ void a_Prefs_init(void)
prefs.http_proxy = NULL;
prefs.no_proxy = NULL;
prefs.no_proxy_vec = NULL;
+ prefs.accept_language = g_strdup("*");
prefs.link_color = DW_COLOR_DEFAULT_BLUE;
prefs.visited_color = DW_COLOR_DEFAULT_PURPLE;
prefs.bg_color = DW_COLOR_DEFAULT_BGND;
@@ -381,6 +387,7 @@ void a_Prefs_init(void)
*/
void a_Prefs_freeall(void)
{
+ g_free(prefs.accept_language);
g_free(prefs.no_proxy);
if (prefs.no_proxy_vec)
g_strfreev(prefs.no_proxy_vec);
diff -pruN dillo-0.7.2/src/prefs.h dillo-0.7.2-encodings/src/prefs.h
--- dillo-0.7.2/src/prefs.h 2003-04-16 02:16:15.000000000 +0700
+++ dillo-0.7.2-encodings/src/prefs.h 2003-05-06 16:29:34.000000000 +0700
@@ -29,6 +29,7 @@ typedef enum {
DRC_TOKEN_GEOMETRY,
DRC_TOKEN_PROXY,
DRC_TOKEN_NOPROXY,
+ DRC_TOKEN_ACCEPT_LANGUAGE,
DRC_TOKEN_LINK_COLOR,
DRC_TOKEN_VISITED_COLOR,
DRC_TOKEN_BG_COLOR,
@@ -73,6 +74,7 @@ struct _DilloPrefs {
DilloUrl *http_proxy;
gchar *no_proxy;
gchar **no_proxy_vec;
+ gchar *accept_language;
DilloUrl *home;
guint32 link_color;
guint32 visited_color;