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
This commit is contained in:
Chris Young 2008-09-03 22:10:30 +00:00
parent eb67a135d1
commit 4750d11a6b
4 changed files with 63 additions and 1 deletions

32
amiga/iff_cset.h Executable file
View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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