mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 06:05:44 +00:00
198 lines
5.6 KiB
C
198 lines
5.6 KiB
C
|
/* -*- Mode: C++; tab-width: 8; 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.
|
||
|
*/
|
||
|
|
||
|
#include "structs.h"
|
||
|
#include "ntypes.h"
|
||
|
#include "net.h"
|
||
|
|
||
|
void
|
||
|
fe_RegisterConverters (void)
|
||
|
{
|
||
|
#ifdef NEW_DECODERS
|
||
|
NET_ClearAllConverters ();
|
||
|
#endif /* NEW_DECODERS */
|
||
|
|
||
|
#if 0
|
||
|
if (fe_encoding_extensions)
|
||
|
{
|
||
|
int i = 0;
|
||
|
while (fe_encoding_extensions [i])
|
||
|
free (fe_encoding_extensions [i++]);
|
||
|
free (fe_encoding_extensions);
|
||
|
fe_encoding_extensions = 0;
|
||
|
}
|
||
|
|
||
|
/* register X specific decoders
|
||
|
*/
|
||
|
if (fe_globalData.encoding_filters)
|
||
|
{
|
||
|
char *copy = strdup (fe_globalData.encoding_filters);
|
||
|
char *rest = copy;
|
||
|
char *end = rest + strlen (rest);
|
||
|
|
||
|
int exts_count = 0;
|
||
|
int exts_size = 10;
|
||
|
char **all_exts = (char **) malloc (sizeof (char *) * exts_size);
|
||
|
|
||
|
while (rest < end)
|
||
|
{
|
||
|
char *start;
|
||
|
char *eol, *colon;
|
||
|
char *input, *output, *extensions, *command;
|
||
|
eol = strchr (rest, '\n');
|
||
|
if (eol) *eol = 0;
|
||
|
|
||
|
rest = fe_StringTrim (rest);
|
||
|
if (! *rest)
|
||
|
/* blank lines are ok */
|
||
|
continue;
|
||
|
|
||
|
start = rest;
|
||
|
|
||
|
colon = strchr (rest, ':');
|
||
|
if (! colon) goto LOSER;
|
||
|
*colon = 0;
|
||
|
input = fe_StringTrim (rest);
|
||
|
rest = colon + 1;
|
||
|
|
||
|
colon = strchr (rest, ':');
|
||
|
if (! colon) goto LOSER;
|
||
|
*colon = 0;
|
||
|
output = fe_StringTrim (rest);
|
||
|
rest = colon + 1;
|
||
|
|
||
|
colon = strchr (rest, ':');
|
||
|
if (! colon) goto LOSER;
|
||
|
*colon = 0;
|
||
|
extensions = fe_StringTrim (rest);
|
||
|
rest = colon + 1;
|
||
|
|
||
|
command = fe_StringTrim (rest);
|
||
|
rest = colon + 1;
|
||
|
|
||
|
if (*command)
|
||
|
{
|
||
|
/* First save away the extensions. */
|
||
|
char *rest = extensions;
|
||
|
while (*rest)
|
||
|
{
|
||
|
char *start;
|
||
|
char *comma, *end;
|
||
|
while (isspace (*rest))
|
||
|
rest++;
|
||
|
start = rest;
|
||
|
comma = XP_STRCHR (start, ',');
|
||
|
end = (comma ? comma - 1 : start + strlen (start));
|
||
|
while (end >= start && isspace (*end))
|
||
|
end--;
|
||
|
if (comma) end++;
|
||
|
if (start < end)
|
||
|
{
|
||
|
all_exts [exts_count] =
|
||
|
(char *) malloc (end - start + 1);
|
||
|
strncpy (all_exts [exts_count], start, end - start);
|
||
|
all_exts [exts_count][end - start] = 0;
|
||
|
if (++exts_count == exts_size)
|
||
|
all_exts = (char **)
|
||
|
realloc (all_exts,
|
||
|
sizeof (char *) * (exts_size += 10));
|
||
|
}
|
||
|
rest = (comma ? comma + 1 : end);
|
||
|
}
|
||
|
all_exts [exts_count] = 0;
|
||
|
fe_encoding_extensions = all_exts;
|
||
|
|
||
|
/* Now register the converter. */
|
||
|
NET_RegisterExternalDecoderCommand (input, output, command);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LOSER:
|
||
|
fprintf (stderr,
|
||
|
XP_GetString(XFE_COMMANDS_UNPARSABLE_ENCODING_FILTER_SPEC),
|
||
|
fe_progname, start);
|
||
|
}
|
||
|
rest = (eol ? eol + 1 : end);
|
||
|
}
|
||
|
free (copy);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/* Register standard decoders
|
||
|
This must come AFTER all calls to NET_RegisterExternalDecoderCommand(),
|
||
|
(at least in the `NEW_DECODERS' world.)
|
||
|
*/
|
||
|
NET_RegisterMIMEDecoders ();
|
||
|
|
||
|
#if 0 /* XXX toshok - for now. */
|
||
|
/* How to save to disk. */
|
||
|
NET_RegisterContentTypeConverter ("*", FO_SAVE_AS, NULL,
|
||
|
fe_MakeSaveAsStream);
|
||
|
|
||
|
/* Saving any binary format as type `text' should save as `source' instead.
|
||
|
*/
|
||
|
NET_RegisterContentTypeConverter ("*", FO_SAVE_AS_TEXT, NULL,
|
||
|
fe_MakeSaveAsStreamNoPrompt);
|
||
|
NET_RegisterContentTypeConverter ("*", FO_QUOTE_MESSAGE, NULL,
|
||
|
fe_MakeSaveAsStreamNoPrompt);
|
||
|
|
||
|
/* default presentation converter - offer to save unknown types. */
|
||
|
NET_RegisterContentTypeConverter ("*", FO_PRESENT, NULL,
|
||
|
fe_MakeSaveAsStream);
|
||
|
#endif
|
||
|
|
||
|
#ifndef NO_MOCHA_CONVERTER_HACK
|
||
|
/* libmocha:LM_InitMocha() installs this convert. We blow away all
|
||
|
* converters that were installed and hence these mocha default converters
|
||
|
* dont get recreated. And mocha has no call to re-register them.
|
||
|
* So this hack. - dp/brendan
|
||
|
*/
|
||
|
NET_RegisterContentTypeConverter(APPLICATION_JAVASCRIPT, FO_PRESENT, 0,
|
||
|
NET_CreateMochaConverter);
|
||
|
#endif /* NO_MOCHA_CONVERTER_HACK */
|
||
|
|
||
|
/* Parse stuff out of the .mime.types and .mailcap files.
|
||
|
* We dont have to check dates of files for modified because all that
|
||
|
* would have been done by the caller. The only place time checking
|
||
|
* happens is
|
||
|
* (1) Helperapp page is created
|
||
|
* (2) Helpers are being saved (OK button pressed on the General Prefs).
|
||
|
*/
|
||
|
NET_InitFileFormatTypes (NULL /* XXX fe_globalPrefs.private_mime_types_file */,
|
||
|
NULL /* XXX fe_globalPrefs.global_mime_types_file*/);
|
||
|
#if 0 /* XXX toshok - for now. */
|
||
|
fe_isFileChanged(fe_globalPrefs.private_mime_types_file, 0,
|
||
|
&fe_globalData.privateMimetypeFileModifiedTime);
|
||
|
|
||
|
NET_RegisterConverters (fe_globalPrefs.private_mailcap_file,
|
||
|
fe_globalPrefs.global_mailcap_file);
|
||
|
fe_isFileChanged(fe_globalPrefs.private_mailcap_file, 0,
|
||
|
&fe_globalData.privateMailcapFileModifiedTime);
|
||
|
|
||
|
fe_RegisterPrefConverters();
|
||
|
|
||
|
#ifndef NO_WEB_FONTS
|
||
|
/* Register webfont converters */
|
||
|
NF_RegisterConverters();
|
||
|
#endif /* NO_WEB_FONTS */
|
||
|
|
||
|
/* Plugins go on top of all this */
|
||
|
fe_RegisterPluginConverters();
|
||
|
#endif
|
||
|
}
|