зеркало из https://github.com/mozilla/pjs.git
New function supplied by ftang for Composer checking of bad charsets when loading a page
This commit is contained in:
Родитель
616d7bd904
Коммит
1699ba6a74
|
@ -1,201 +0,0 @@
|
|||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
/* csnamefn.c */
|
||||
|
||||
#include "intlpriv.h"
|
||||
|
||||
extern csname2id_t csname2id_tbl[];
|
||||
|
||||
/* for XP_GetString() */
|
||||
#include "xpgetstr.h"
|
||||
extern int XP_DOCINFO_1;
|
||||
extern int XP_DOCINFO_2;
|
||||
extern int XP_DOCINFO_3;
|
||||
extern int XP_DOCINFO_4;
|
||||
|
||||
/*#include "allxpstr.h"*/
|
||||
|
||||
PUBLIC int16
|
||||
INTL_CharSetNameToID(char *charset)
|
||||
{
|
||||
csname2id_t *csn2idp;
|
||||
int16 csid;
|
||||
|
||||
/* Parse the URL charset string for the charset ID.
|
||||
* If no MIME Content-Type charset pararm., default.
|
||||
* HTML specifies ASCII, but let user override cuz
|
||||
* of prior conventions (i.e. Japan).
|
||||
*/
|
||||
csn2idp = csname2id_tbl;
|
||||
csid = csn2idp->cs_id; /* 1st entry is default codeset ID */
|
||||
|
||||
if (charset != NULL) { /* Linear search for charset string */
|
||||
while (*(csn2idp->cs_name) != '\0') {
|
||||
if (strcasecomp(charset, (char *)csn2idp->cs_name) == 0) {
|
||||
return(csn2idp->cs_id);
|
||||
}
|
||||
csn2idp++;
|
||||
}
|
||||
}
|
||||
return(csn2idp->cs_id); /* last entry is CS_UNKNOWN */
|
||||
}
|
||||
PUBLIC unsigned char *INTL_CsidToCharsetNamePt(int16 csid)
|
||||
{
|
||||
csname2id_t *csn2idp;
|
||||
|
||||
csid &= ~CS_AUTO;
|
||||
csn2idp = &csname2id_tbl[1]; /* First one is reserved, skip it. */
|
||||
csid &= 0xff;
|
||||
|
||||
/* Linear search for charset string */
|
||||
while (*(csn2idp->cs_name) != '\0') {
|
||||
if ((csn2idp->cs_id & 0xff) == csid)
|
||||
return csn2idp->cs_name;
|
||||
csn2idp++;
|
||||
}
|
||||
return (unsigned char *)"";
|
||||
}
|
||||
|
||||
PUBLIC unsigned char *INTL_CsidToJavaCharsetNamePt(int16 csid)
|
||||
{
|
||||
csname2id_t *csn2idp;
|
||||
|
||||
csn2idp = &csname2id_tbl[1]; /* First one is reserved, skip it. */
|
||||
csid &= 0xff;
|
||||
|
||||
/* Linear search for charset string */
|
||||
while (*(csn2idp->cs_name) != '\0') {
|
||||
if ((csn2idp->cs_id & 0xff) == csid)
|
||||
return csn2idp->java_name;
|
||||
csn2idp++;
|
||||
}
|
||||
return (unsigned char *)"";
|
||||
}
|
||||
|
||||
|
||||
PUBLIC void
|
||||
INTL_CharSetIDToName(int16 csid, char *charset)
|
||||
{
|
||||
if (charset) {
|
||||
strcpy(charset,(char *)INTL_CsidToCharsetNamePt(csid));
|
||||
}
|
||||
}
|
||||
|
||||
PUBLIC void
|
||||
INTL_CharSetIDToJavaName(int16 csid, char *charset)
|
||||
{
|
||||
if (charset) {
|
||||
strcpy(charset,(char *)INTL_CsidToJavaCharsetNamePt(csid));
|
||||
}
|
||||
}
|
||||
|
||||
PUBLIC const char* PR_CALLBACK
|
||||
INTL_CharSetIDToJavaCharSetName(int16 csid) {
|
||||
return (char *)INTL_CsidToJavaCharsetNamePt(csid);
|
||||
}
|
||||
|
||||
PUBLIC char *
|
||||
INTL_CharSetDocInfo(iDocumentContext context)
|
||||
{
|
||||
INTL_CharSetInfo c = LO_GetDocumentCharacterSetInfo(context);
|
||||
register int16 doc_csid = INTL_GetCSIDocCSID(c);
|
||||
register csname2id_t *csn2idp;
|
||||
char *s = NULL;
|
||||
int detected = 0;
|
||||
|
||||
if (doc_csid == CS_DEFAULT) {
|
||||
doc_csid = INTL_DefaultDocCharSetID(context) & ~CS_AUTO; /* Get CSID from prefs */
|
||||
} else if (doc_csid & CS_AUTO) {
|
||||
doc_csid &= ~CS_AUTO; /* mask off bit for name lookup */
|
||||
detected = 1;
|
||||
} else {
|
||||
StrAllocCopy(s, INTL_GetCSIMimeCharset(c)); /* string from MIME header */
|
||||
|
||||
if (doc_csid == CS_UNKNOWN)
|
||||
StrAllocCat(s, XP_GetString(XP_DOCINFO_1));
|
||||
return(s);
|
||||
}
|
||||
/* Look up name for default & autodetected CSIDs */
|
||||
#if defined(XP_WIN) || defined(XP_OS2)
|
||||
csn2idp = &csname2id_tbl[1] ; /* skip first default one */
|
||||
for (; *(csn2idp->cs_name) != '\0'; csn2idp++)
|
||||
#else
|
||||
for (csn2idp = csname2id_tbl; *(csn2idp->cs_name) != '\0'; csn2idp++)
|
||||
#endif
|
||||
{
|
||||
if (doc_csid == csn2idp->cs_id) {
|
||||
StrAllocCopy(s, (char *)csn2idp->cs_name);
|
||||
if (detected)
|
||||
StrAllocCat(s, XP_GetString(XP_DOCINFO_2));
|
||||
else
|
||||
StrAllocCat(s, XP_GetString(XP_DOCINFO_3));
|
||||
return(s);
|
||||
}
|
||||
}
|
||||
StrAllocCopy(s, INTL_GetCSIMimeCharset(c)); /* string from MIME header */
|
||||
StrAllocCat(s, XP_GetString(XP_DOCINFO_4));
|
||||
return (s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#if defined(XP_WIN) || defined(XP_OS2)
|
||||
|
||||
|
||||
/*
|
||||
This routine will change the default URL charset to
|
||||
newCharset, BTW newCharset is passed from UI.
|
||||
*/
|
||||
void
|
||||
FE_ChangeURLCharset(const char *charset)
|
||||
{
|
||||
csname2id_t *csn2idp;
|
||||
char *cp;
|
||||
|
||||
if (charset == NULL)
|
||||
return;
|
||||
|
||||
csn2idp = csname2id_tbl;
|
||||
|
||||
cp = (char *)charset;
|
||||
if (cp)
|
||||
while (*cp != '\0') {
|
||||
*cp = tolower(*cp);
|
||||
cp++;
|
||||
}
|
||||
|
||||
while (*(csn2idp->cs_name) != '\0') {
|
||||
if (strcasecomp(charset, (char *)csn2idp->cs_name) == 0) {
|
||||
INTL_ChangeDefaultCharSetID(csn2idp->cs_id);
|
||||
return;
|
||||
}
|
||||
csn2idp++;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
INTL_ChangeDefaultCharSetID(int16 csid)
|
||||
{
|
||||
csname2id_tbl[0].cs_id = csid;
|
||||
}
|
||||
|
||||
#endif /* XP_WIN */
|
||||
|
||||
|
||||
|
Загрузка…
Ссылка в новой задаче