зеркало из https://github.com/mozilla/gecko-dev.git
202 строки
5.7 KiB
C
202 строки
5.7 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.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
#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
|
|
}
|