summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2008-09-03 22:10:30 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2008-09-03 22:10:30 +0000
commit4750d11a6bdf44f650eb4489ffee019ce88fd110 (patch)
treef9c62966da6e0ea0e5162e8bad501f3fae4493bd /amiga
parenteb67a135d10a9981096a135dc5a8a41282820b2e (diff)
downloadnetsurf-4750d11a6bdf44f650eb4489ffee019ce88fd110.tar.gz
netsurf-4750d11a6bdf44f650eb4489ffee019ce88fd110.tar.bz2
Added support code to allow CSET chunks to be read from clipboard IFF FTXT and
converted as necessary. Added option to write UTF-8 direct to clipboard, setting CSET appropriately. Copying and pasting to/from webpages that are not in local charset and to/from other applications that set CSET when not using local charset, should now work correctly if clipboard_write_utf8 is set in the options. If not set, NetSurf will still convert from the charset specified in the clipboard when pasting, but will convert text to local charset and not write a CSET chunk for copy operations. svn path=/trunk/netsurf/; revision=5231
Diffstat (limited to 'amiga')
-rwxr-xr-xamiga/iff_cset.h32
-rw-r--r--amiga/options.h5
-rwxr-xr-xamiga/utf8.c26
-rwxr-xr-xamiga/utf8.h1
4 files changed, 63 insertions, 1 deletions
diff --git a/amiga/iff_cset.h b/amiga/iff_cset.h
new file mode 100755
index 000000000..9885baf35
--- /dev/null
+++ b/amiga/iff_cset.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2008 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef AMIGA_IFF_CSET_H
+#define AMIGA_IFF_CSET_H
+
+/* This structure is for the IFF CSET chunk, registered by Martin Taillefer */
+
+struct CSet {
+ LONG CodeSet; /* 0=ECMA Latin 1 (std Amiga charset) */
+ /* CBM will define additional values */
+ LONG Reserved[7];
+ };
+
+#define ID_CSET MAKE_ID('C','S','E','T')
+
+#endif
diff --git a/amiga/options.h b/amiga/options.h
index ff38c24ea..d6ab89f3a 100644
--- a/amiga/options.h
+++ b/amiga/options.h
@@ -27,6 +27,7 @@ extern bool option_use_wb;
extern int option_modeid;
extern char *option_toolbar_images;
extern bool option_no_iframes;
+extern bool option_utf8_clipboard;
#define EXTRA_OPTION_DEFINE \
bool option_verbose_log = false; \
@@ -36,6 +37,7 @@ bool option_use_wb = false; \
int option_modeid = 0; \
char *option_toolbar_images = 0; \
bool option_no_iframes = false; \
+bool option_utf8_clipboard = false; \
#define EXTRA_OPTION_TABLE \
{ "verbose_log", OPTION_BOOL, &option_verbose_log}, \
@@ -44,5 +46,6 @@ bool option_no_iframes = false; \
{ "use_workbench", OPTION_BOOL, &option_use_wb}, \
{ "screen_modeid", OPTION_INTEGER, &option_modeid}, \
{ "toolbar_images", OPTION_STRING, &option_toolbar_images }, \
-{ "no_iframes", OPTION_BOOL, &option_no_iframes},
+{ "no_iframes", OPTION_BOOL, &option_no_iframes}, \
+{ "clipboard_write_utf8", OPTION_BOOL, &option_utf8_clipboard},
#endif
diff --git a/amiga/utf8.c b/amiga/utf8.c
index 26b2fe2c7..648736c01 100755
--- a/amiga/utf8.c
+++ b/amiga/utf8.c
@@ -53,3 +53,29 @@ char *ami_utf8_easy(char *string)
return NULL;
}
}
+
+char *ami_to_utf8_easy(char *string)
+{
+ char *localtext;
+
+ if(utf8_from_local_encoding(string,strlen(string),&localtext) == UTF8_CONVERT_OK)
+ {
+ return localtext;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+utf8_convert_ret utf8_from_local_encoding(const char *string, size_t len,
+ char **result)
+{
+ ULONG *charset;
+ char *encname;
+
+ charset = GetDiskFontCtrl(DFCTRL_CHARSET);
+ encname = parserutils_charset_mibenum_to_name(charset);
+
+ return utf8_from_enc(string,encname,len,result);
+}
diff --git a/amiga/utf8.h b/amiga/utf8.h
index fd863ca8a..a328b4bef 100755
--- a/amiga/utf8.h
+++ b/amiga/utf8.h
@@ -20,4 +20,5 @@
#define AMIGA_UTF8_H
char *ami_utf8_easy(char *string);
void ami_utf8_free(char *ptr);
+char *ami_to_utf8_easy(char *string);
#endif