blob: 456e8b5044b2b27faf28ff3f18b7715a419b0a42 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svl.hxx"
#include <tools/table.hxx>
#include <tools/wldcrd.hxx>
#include <svl/inettype.hxx>
#include <svl/svldata.hxx>
#include <svl/svl.hrc>
#ifndef _SVSTDARR_STRINGSSORT_DECL
#define _SVSTDARR_STRINGSSORT
#include <svl/svstdarr.hxx>
#undef _SVSTDARR_STRINGSSORT
#endif
namespace unnamed_svl_inettype {}
using namespace unnamed_svl_inettype;
// unnamed namespaces don't work well yet
//============================================================================
namespace unnamed_svl_inettype {
//============================================================================
struct MediaTypeEntry
{
sal_Char const * m_pTypeName;
INetContentType m_eTypeID;
sal_Char const * m_pExtension;
};
//============================================================================
struct TypeIDMapEntry
{
UniString m_aTypeName;
UniString m_aPresentation;
UniString m_aSystemFileType;
};
//============================================================================
struct TypeNameMapEntry: public UniString
{
UniString m_aExtension;
INetContentType m_eTypeID;
TypeNameMapEntry(const UniString & rType):
UniString(rType), m_eTypeID(CONTENT_TYPE_UNKNOWN) {}
};
//============================================================================
struct ExtensionMapEntry: public UniString
{
INetContentType m_eTypeID;
ExtensionMapEntry(const UniString & rExt):
UniString(rExt), m_eTypeID(CONTENT_TYPE_UNKNOWN) {}
};
//============================================================================
class Registration
{
static Registration * m_pRegistration;
Table m_aTypeIDMap; // map TypeID to TypeName, Presentation
SvStringsSort m_aTypeNameMap; // map TypeName to TypeID, Extension
SvStringsSort m_aExtensionMap; // map Extension to TypeID
sal_uInt32 m_nNextDynamicID;
public:
Registration(): m_nNextDynamicID(CONTENT_TYPE_LAST + 1) {}
~Registration();
static inline void deinitialize();
static inline TypeIDMapEntry * getEntry(INetContentType eTypeID);
static TypeNameMapEntry * getExtensionEntry(UniString const & rTypeName);
static INetContentType RegisterContentType(UniString const & rTypeName,
UniString const &
rPresentation,
UniString const * pExtension,
UniString const *
pSystemFileType);
static INetContentType GetContentType(UniString const & rTypeName);
static UniString GetContentType(INetContentType eTypeID);
static UniString GetPresentation(INetContentType eTypeID);
static UniString GetExtension(const UniString & rTypeName);
static INetContentType GetContentType4Extension(UniString const &
rExtension);
};
// static
inline void Registration::deinitialize()
{
delete m_pRegistration;
m_pRegistration = 0;
}
// static
inline TypeIDMapEntry * Registration::getEntry(INetContentType eTypeID)
{
return
m_pRegistration ?
static_cast< TypeIDMapEntry * >(m_pRegistration->
m_aTypeIDMap.Get(eTypeID)) :
0;
}
//============================================================================
MediaTypeEntry const * seekEntry(UniString const & rTypeName,
MediaTypeEntry const * pMap, sal_Size nSize);
//============================================================================
/** A mapping from type names to type ids and extensions. Sorted by type
name.
*/
MediaTypeEntry const aStaticTypeNameMap[CONTENT_TYPE_LAST + 1]
= { { " ", CONTENT_TYPE_UNKNOWN, "" },
{ CONTENT_TYPE_STR_X_CNT_DOCUMENT, CONTENT_TYPE_X_CNT_DOCUMENT,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_FSYSBOX, CONTENT_TYPE_X_CNT_FSYSBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_CDROM_VOLUME,
CONTENT_TYPE_X_CNT_CDROM_VOLUME, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_DISK_35, CONTENT_TYPE_X_CNT_DISK_35, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_DISK_525, CONTENT_TYPE_X_CNT_DISK_525,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_FSYSFILE, CONTENT_TYPE_X_CNT_FSYSFILE,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_FIXED_VOLUME,
CONTENT_TYPE_X_CNT_FIXED_VOLUME, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_FSYSFOLDER, CONTENT_TYPE_X_CNT_FSYSFOLDER,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_RAM_VOLUME, CONTENT_TYPE_X_CNT_RAM_VOLUME,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_REMOTE_VOLUME,
CONTENT_TYPE_X_CNT_REMOTE_VOLUME, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_REMOVEABLE_VOLUME,
CONTENT_TYPE_X_CNT_REMOVEABLE_VOLUME, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_FSYSSPECIALFILE,
CONTENT_TYPE_X_CNT_FSYSSPECIALFILE, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_FSYSSPECIALFOLDER,
CONTENT_TYPE_X_CNT_FSYSSPECIALFOLDER, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_TAPEDRIVE, CONTENT_TYPE_X_CNT_TAPEDRIVE,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_FSYSURLFILE, CONTENT_TYPE_X_CNT_FSYSURLFILE,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_FTPBOX, CONTENT_TYPE_X_CNT_FTPBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_FTPFILE, CONTENT_TYPE_X_CNT_FTPFILE, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_FTPFOLDER, CONTENT_TYPE_X_CNT_FTPFOLDER,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_FTPLINK, CONTENT_TYPE_X_CNT_FTPLINK, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_HTTPBOX, CONTENT_TYPE_X_CNT_HTTPBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_HTTPFILE, CONTENT_TYPE_X_CNT_HTTPFILE,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_IMAPBOX, CONTENT_TYPE_X_CNT_IMAPBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_IMAPFOLDER, CONTENT_TYPE_X_CNT_IMAPFOLDER,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_MESSAGE, CONTENT_TYPE_X_CNT_MESSAGE, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_NEWSBOX, CONTENT_TYPE_X_CNT_NEWSBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_NEWSGROUP, CONTENT_TYPE_X_CNT_NEWSGROUP,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_OUTBOX, CONTENT_TYPE_X_CNT_OUTBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_POP3BOX, CONTENT_TYPE_X_CNT_POP3BOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_PUBLISHBOX, CONTENT_TYPE_X_CNT_PUBLISHBOX,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_SEARCHBOX, CONTENT_TYPE_X_CNT_SEARCHBOX,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_SEPARATOR, CONTENT_TYPE_X_CNT_SEPARATOR,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_BOOKMARK, CONTENT_TYPE_X_CNT_BOOKMARK,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_SUBSCRIBEBOX,
CONTENT_TYPE_X_CNT_SUBSCRIBEBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_CDF, CONTENT_TYPE_X_CNT_CDF, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_CDFITEM, CONTENT_TYPE_X_CNT_CDFITEM, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_CDFSUB, CONTENT_TYPE_X_CNT_CDFSUB, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_STARCHANNEL, CONTENT_TYPE_X_CNT_STARCHANNEL,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_TRASHBOX, CONTENT_TYPE_X_CNT_TRASHBOX,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_TRASH, CONTENT_TYPE_X_CNT_TRASH, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_VIMBBOARD, CONTENT_TYPE_X_CNT_VIMBBOARD,
"tmp" },
{ CONTENT_TYPE_STR_X_CNT_VIMBBOARDBOX,
CONTENT_TYPE_X_CNT_VIMBBOARDBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_VIMBOX, CONTENT_TYPE_X_CNT_VIMBOX, "tmp" },
{ CONTENT_TYPE_STR_X_CNT_VIMINBOX, CONTENT_TYPE_X_CNT_VIMINBOX,
"tmp" },
{ CONTENT_TYPE_STR_APP_OCTSTREAM, CONTENT_TYPE_APP_OCTSTREAM, "tmp" },
{ CONTENT_TYPE_STR_APP_PDF, CONTENT_TYPE_APP_PDF, "pdf" },
{ CONTENT_TYPE_STR_APP_RTF, CONTENT_TYPE_APP_RTF, "rtf" },
{ CONTENT_TYPE_STR_APP_VND_CALC, CONTENT_TYPE_APP_VND_CALC, "sdc" },
{ CONTENT_TYPE_STR_APP_VND_CHART, CONTENT_TYPE_APP_VND_CHART, "sds" },
{ CONTENT_TYPE_STR_APP_VND_DRAW, CONTENT_TYPE_APP_VND_DRAW, "sda" },
{ CONTENT_TYPE_STR_APP_VND_IMAGE, CONTENT_TYPE_APP_VND_IMAGE, "sim" },
{ CONTENT_TYPE_STR_APP_VND_IMPRESS, CONTENT_TYPE_APP_VND_IMPRESS,
"sdd" },
{ CONTENT_TYPE_STR_APP_VND_IMPRESSPACKED,
CONTENT_TYPE_APP_VND_IMPRESSPACKED, "sdp" },
{ CONTENT_TYPE_STR_APP_VND_MAIL, CONTENT_TYPE_APP_VND_MAIL, "sdm" },
{ CONTENT_TYPE_STR_APP_VND_MATH, CONTENT_TYPE_APP_VND_MATH, "smf" },
{ CONTENT_TYPE_STR_APP_VND_NEWS, CONTENT_TYPE_APP_VND_NEWS, "sdm" },
{ CONTENT_TYPE_STR_APP_VND_OUTTRAY, CONTENT_TYPE_APP_VND_OUTTRAY,
"sdm" },
{ CONTENT_TYPE_STR_APP_VND_TEMPLATE, CONTENT_TYPE_APP_VND_TEMPLATE,
"vor" },
{ CONTENT_TYPE_STR_APP_VND_WRITER, CONTENT_TYPE_APP_VND_WRITER,
"sdw" },
{ CONTENT_TYPE_STR_APP_VND_WRITER_GLOBAL,
CONTENT_TYPE_APP_VND_WRITER_GLOBAL, "sgl" },
{ CONTENT_TYPE_STR_APP_VND_WRITER_WEB,
CONTENT_TYPE_APP_VND_WRITER_WEB, "htm" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_CALC, CONTENT_TYPE_APP_VND_SUN_XML_CALC, "sxc" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_CHART, CONTENT_TYPE_APP_VND_SUN_XML_CHART, "sxs" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_DRAW, CONTENT_TYPE_APP_VND_SUN_XML_DRAW, "sxd" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_IMPRESS, CONTENT_TYPE_APP_VND_SUN_XML_IMPRESS, "sxi" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_IMPRESSPACKED, CONTENT_TYPE_APP_VND_SUN_XML_IMPRESSPACKED, "sxp" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_MATH, CONTENT_TYPE_APP_VND_SUN_XML_MATH, "sxm" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_WRITER, CONTENT_TYPE_APP_VND_SUN_XML_WRITER, "sxw" },
{ CONTENT_TYPE_STR_APP_VND_SUN_XML_WRITER_GLOBAL, CONTENT_TYPE_APP_VND_SUN_XML_WRITER_GLOBAL, "sxg" },
{ CONTENT_TYPE_STR_APP_FRAMESET, CONTENT_TYPE_APP_FRAMESET, "sfs" },
{ CONTENT_TYPE_STR_APP_GALLERY, CONTENT_TYPE_APP_GALLERY, "gal" },
{ CONTENT_TYPE_STR_APP_GALLERY_THEME, CONTENT_TYPE_APP_GALLERY_THEME,
"thm" },
{ CONTENT_TYPE_STR_APP_JAR, CONTENT_TYPE_APP_JAR, "jar" },
{ CONTENT_TYPE_STR_APP_MACRO, CONTENT_TYPE_APP_MACRO, "tmp" },
{ CONTENT_TYPE_STR_APP_MSEXCEL, CONTENT_TYPE_APP_MSEXCEL, "xls" },
{ CONTENT_TYPE_STR_APP_MSEXCEL_TEMPL, CONTENT_TYPE_APP_MSEXCEL_TEMPL,
"xlt" },
{ CONTENT_TYPE_STR_APP_MSPPOINT, CONTENT_TYPE_APP_MSPPOINT, "ppt" },
{ CONTENT_TYPE_STR_APP_MSPPOINT_TEMPL,
CONTENT_TYPE_APP_MSPPOINT_TEMPL, "pot" },
{ CONTENT_TYPE_STR_APP_MSWORD, CONTENT_TYPE_APP_MSWORD, "doc" },
{ CONTENT_TYPE_STR_APP_MSWORD_TEMPL, CONTENT_TYPE_APP_MSWORD_TEMPL,
"dot" },
{ CONTENT_TYPE_STR_APP_SCHEDULE_CMB, CONTENT_TYPE_APP_SCHEDULE,
"tmp" },
{ CONTENT_TYPE_STR_APP_SCHEDULE_EVT, CONTENT_TYPE_APP_SCHEDULE_EVT,
"tmp" },
{ CONTENT_TYPE_STR_APP_SCHEDULE_FEVT,
CONTENT_TYPE_APP_SCHEDULE_FORM_EVT, "tmp" },
{ CONTENT_TYPE_STR_APP_SCHEDULE_FTASK,
CONTENT_TYPE_APP_SCHEDULE_FORM_TASK, "tmp" },
{ CONTENT_TYPE_STR_APP_SCHEDULE_TASK, CONTENT_TYPE_APP_SCHEDULE_TASK,
"tmp" },
{ CONTENT_TYPE_STR_APP_STARCALC, CONTENT_TYPE_APP_STARCALC, "sdc" },
{ CONTENT_TYPE_STR_APP_STARCHART, CONTENT_TYPE_APP_STARCHART, "sds" },
{ CONTENT_TYPE_STR_APP_STARDRAW, CONTENT_TYPE_APP_STARDRAW, "sda" },
{ CONTENT_TYPE_STR_APP_STARHELP, CONTENT_TYPE_APP_STARHELP, "svh" },
{ CONTENT_TYPE_STR_APP_STARIMAGE, CONTENT_TYPE_APP_STARIMAGE, "sim" },
{ CONTENT_TYPE_STR_APP_STARIMPRESS, CONTENT_TYPE_APP_STARIMPRESS,
"sdd" },
{ CONTENT_TYPE_STR_APP_STARMAIL_SDM, CONTENT_TYPE_APP_STARMAIL_SDM,
"sdm" },
{ CONTENT_TYPE_STR_APP_STARMAIL_SMD, CONTENT_TYPE_APP_STARMAIL_SMD,
"smd" },
{ CONTENT_TYPE_STR_APP_STARMATH, CONTENT_TYPE_APP_STARMATH, "smf" },
{ CONTENT_TYPE_STR_APP_STARWRITER, CONTENT_TYPE_APP_STARWRITER,
"sdw" },
{ CONTENT_TYPE_STR_APP_STARWRITER_GLOB,
CONTENT_TYPE_APP_STARWRITER_GLOB, "sgl" },
{ CONTENT_TYPE_STR_APP_CDE_CALENDAR_APP,
CONTENT_TYPE_APP_CDE_CALENDAR_APP, "appt" },
{ CONTENT_TYPE_STR_APP_ZIP, CONTENT_TYPE_APP_ZIP, "zip" },
{ CONTENT_TYPE_STR_AUDIO_AIFF, CONTENT_TYPE_AUDIO_AIFF, "aif" },
{ CONTENT_TYPE_STR_AUDIO_BASIC, CONTENT_TYPE_AUDIO_BASIC, "au" },
{ CONTENT_TYPE_STR_AUDIO_MIDI, CONTENT_TYPE_AUDIO_MIDI, "mid" },
{ CONTENT_TYPE_STR_AUDIO_WAV, CONTENT_TYPE_AUDIO_WAV, "wav" },
{ CONTENT_TYPE_STR_IMAGE_GENERIC, CONTENT_TYPE_IMAGE_GENERIC, "tmp" },
{ CONTENT_TYPE_STR_IMAGE_GIF, CONTENT_TYPE_IMAGE_GIF, "gif" },
{ CONTENT_TYPE_STR_IMAGE_JPEG, CONTENT_TYPE_IMAGE_JPEG, "jpg" },
{ CONTENT_TYPE_STR_IMAGE_PCX, CONTENT_TYPE_IMAGE_PCX, "pcx" },
{ CONTENT_TYPE_STR_IMAGE_PNG, CONTENT_TYPE_IMAGE_PNG, "png" },
{ CONTENT_TYPE_STR_IMAGE_TIFF, CONTENT_TYPE_IMAGE_TIFF, "tif" },
{ CONTENT_TYPE_STR_IMAGE_BMP, CONTENT_TYPE_IMAGE_BMP, "bmp" },
{ CONTENT_TYPE_STR_INET_MSG_RFC822, CONTENT_TYPE_INET_MESSAGE_RFC822,
"tmp" },
{ CONTENT_TYPE_STR_INET_MULTI_ALTERNATIVE,
CONTENT_TYPE_INET_MULTIPART_ALTERNATIVE, "tmp" },
{ CONTENT_TYPE_STR_INET_MULTI_DIGEST,
CONTENT_TYPE_INET_MULTIPART_DIGEST, "tmp" },
{ CONTENT_TYPE_STR_INET_MULTI_MIXED,
CONTENT_TYPE_INET_MULTIPART_MIXED, "tmp" },
{ CONTENT_TYPE_STR_INET_MULTI_PARALLEL,
CONTENT_TYPE_INET_MULTIPART_PARALLEL, "tmp" },
{ CONTENT_TYPE_STR_INET_MULTI_RELATED,
CONTENT_TYPE_INET_MULTIPART_RELATED, "tmp" },
{ CONTENT_TYPE_STR_TEXT_ICALENDAR, CONTENT_TYPE_TEXT_ICALENDAR,
"ics" },
{ CONTENT_TYPE_STR_TEXT_HTML, CONTENT_TYPE_TEXT_HTML, "htm" },
{ CONTENT_TYPE_STR_TEXT_PLAIN, CONTENT_TYPE_TEXT_PLAIN, "txt" },
{ CONTENT_TYPE_STR_TEXT_XMLICALENDAR, CONTENT_TYPE_TEXT_XMLICALENDAR,
"xcs" },
{ CONTENT_TYPE_STR_TEXT_URL, CONTENT_TYPE_TEXT_URL, "url" },
{ CONTENT_TYPE_STR_TEXT_VCALENDAR, CONTENT_TYPE_TEXT_VCALENDAR,
"vcs" },
{ CONTENT_TYPE_STR_TEXT_VCARD, CONTENT_TYPE_TEXT_VCARD, "vcf" },
{ CONTENT_TYPE_STR_VIDEO_VDO, CONTENT_TYPE_VIDEO_VDO, "vdo" },
{ CONTENT_TYPE_STR_VIDEO_MSVIDEO, CONTENT_TYPE_VIDEO_MSVIDEO, "avi" },
{ CONTENT_TYPE_STR_X_STARMAIL, CONTENT_TYPE_X_STARMAIL, "smd" },
{ CONTENT_TYPE_STR_X_VRML, CONTENT_TYPE_X_VRML, "wrl" }
};
//============================================================================
/** A mapping from type IDs to presentation resource IDs. Sorted by type ID.
*/
sal_uInt16 const aStaticResourceIDMap[CONTENT_TYPE_LAST + 1]
= { STR_SVT_MIMETYPE_APP_OCTSTREAM, // CONTENT_TYPE_UNKNOWN
STR_SVT_MIMETYPE_APP_OCTSTREAM, // CONTENT_TYPE_APP_OCTSTREAM
STR_SVT_MIMETYPE_APP_PDF, // CONTENT_TYPE_APP_PDF
STR_SVT_MIMETYPE_APP_RTF, // CONTENT_TYPE_APP_RTF
STR_SVT_MIMETYPE_APP_MSWORD, // CONTENT_TYPE_APP_MSWORD
STR_SVT_MIMETYPE_APP_MSWORD, // CONTENT_TYPE_APP_MSWORD_TEMPL //@todo new presentation string?
STR_SVT_MIMETYPE_APP_STARCALC, // CONTENT_TYPE_APP_STARCALC
STR_SVT_MIMETYPE_APP_STARCHART, // CONTENT_TYPE_APP_STARCHART
STR_SVT_MIMETYPE_APP_STARDRAW, // CONTENT_TYPE_APP_STARDRAW
STR_SVT_MIMETYPE_APP_STARHELP, // CONTENT_TYPE_APP_STARHELP
STR_SVT_MIMETYPE_APP_STARIMAGE, // CONTENT_TYPE_APP_STARIMAGE
STR_SVT_MIMETYPE_APP_STARIMPRESS, // CONTENT_TYPE_APP_STARIMPRESS
STR_SVT_MIMETYPE_APP_STARMATH, // CONTENT_TYPE_APP_STARMATH
STR_SVT_MIMETYPE_APP_STARWRITER, // CONTENT_TYPE_APP_STARWRITER
STR_SVT_MIMETYPE_APP_ZIP, // CONTENT_TYPE_APP_ZIP
STR_SVT_MIMETYPE_AUDIO_AIFF, // CONTENT_TYPE_AUDIO_AIFF
STR_SVT_MIMETYPE_AUDIO_BASIC, // CONTENT_TYPE_AUDIO_BASIC
STR_SVT_MIMETYPE_AUDIO_MIDI, // CONTENT_TYPE_AUDIO_MIDI
STR_SVT_MIMETYPE_AUDIO_WAV, // CONTENT_TYPE_AUDIO_WAV
STR_SVT_MIMETYPE_IMAGE_GIF, // CONTENT_TYPE_IMAGE_GIF
STR_SVT_MIMETYPE_IMAGE_JPEG, // CONTENT_TYPE_IMAGE_JPEG
STR_SVT_MIMETYPE_IMAGE_PCX, // CONTENT_TYPE_IMAGE_PCX
STR_SVT_MIMETYPE_IMAGE_PNG, // CONTENT_TYPE_IMAGE_PNG
STR_SVT_MIMETYPE_IMAGE_TIFF, // CONTENT_TYPE_IMAGE_TIFF
STR_SVT_MIMETYPE_IMAGE_BMP, // CONTENT_TYPE_IMAGE_BMP
STR_SVT_MIMETYPE_TEXT_HTML, // CONTENT_TYPE_TEXT_HTML
STR_SVT_MIMETYPE_TEXT_PLAIN, // CONTENT_TYPE_TEXT_PLAIN
STR_SVT_MIMETYPE_TEXT_URL, // CONTENT_TYPE_TEXT_URL
STR_SVT_MIMETYPE_TEXT_VCARD, // CONTENT_TYPE_TEXT_VCARD
STR_SVT_MIMETYPE_VIDEO_VDO, // CONTENT_TYPE_VIDEO_VDO
STR_SVT_MIMETYPE_VIDEO_MSVIDEO, // CONTENT_TYPE_VIDEO_MSVIDEO
STR_SVT_MIMETYPE_CNT_MSG, // CONTENT_TYPE_X_CNT_MESSAGE
STR_SVT_MIMETYPE_CNT_DOCUMENT, // CONTENT_TYPE_X_CNT_DOCUMENT
STR_SVT_MIMETYPE_CNT_POP3BOX, // CONTENT_TYPE_X_CNT_POP3BOX
STR_SVT_MIMETYPE_CNT_IMAPBOX, // CONTENT_TYPE_X_CNT_IMAPBOX
STR_SVT_MIMETYPE_CNT_IMAPFLD, // CONTENT_TYPE_X_CNT_IMAPFOLDER
STR_SVT_MIMETYPE_CNT_VIMBOX, // CONTENT_TYPE_X_CNT_VIMBOX
STR_SVT_MIMETYPE_CNT_VIMINBOX, // CONTENT_TYPE_X_CNT_VIMINBOX
STR_SVT_MIMETYPE_CNT_BBBOX, // CONTENT_TYPE_X_CNT_VIMBBOARDBOX
STR_SVT_MIMETYPE_CNT_VIM_BB, // CONTENT_TYPE_X_CNT_VIMBBOARD
STR_SVT_MIMETYPE_CNT_NEWSBOX, // CONTENT_TYPE_X_CNT_NEWSBOX
STR_SVT_MIMETYPE_CNT_NEWSGRP, // CONTENT_TYPE_X_CNT_NEWSGROUP
STR_SVT_MIMETYPE_CNT_OUTBOX, // CONTENT_TYPE_X_CNT_OUTBOX
STR_SVT_MIMETYPE_CNT_FTPBOX, // CONTENT_TYPE_X_CNT_FTPBOX
STR_SVT_MIMETYPE_CNT_FTPFLD, // CONTENT_TYPE_X_CNT_FTPFOLDER
STR_SVT_MIMETYPE_CNT_FTPFILE, // CONTENT_TYPE_X_CNT_FTPFILE
STR_SVT_MIMETYPE_CNT_FTPLINK, // CONTENT_TYPE_X_CNT_FTPLINK
STR_SVT_MIMETYPE_CNT_HTTPBOX, // CONTENT_TYPE_X_CNT_HTTPBOX
STR_SVT_MIMETYPE_CNT_FSYSBOX, // CONTENT_TYPE_X_CNT_FSYSBOX
STR_SVT_MIMETYPE_CNT_FSYSFLD, // CONTENT_TYPE_X_CNT_FSYSFOLDER
STR_SVT_MIMETYPE_CNT_FSYSFILE, // CONTENT_TYPE_X_CNT_FSYSFILE
STR_SVT_MIMETYPE_CNT_FSYSURLFILE, // CONTENT_TYPE_X_CNT_FSYSURLFILE
STR_SVT_MIMETYPE_CNT_PUBLBOX, // CONTENT_TYPE_X_CNT_PUBLISHBOX
STR_SVT_MIMETYPE_CNT_SRCHBOX, // CONTENT_TYPE_X_CNT_SEARCHBOX
STR_SVT_MIMETYPE_CNT_SUBSCRBOX, // CONTENT_TYPE_X_CNT_SUBSCRIBEBOX
STR_SVT_MIMETYPE_CNT_BOOKMARK, // CONTENT_TYPE_X_CNT_BOOKMARK
STR_SVT_MIMETYPE_CNT_CDF, // CONTENT_TYPE_X_CNT_CDF
STR_SVT_MIMETYPE_CNT_CDFSUB, // CONTENT_TYPE_X_CNT_CDFSUB
STR_SVT_MIMETYPE_CNT_CDFITEM, // CONTENT_TYPE_X_CNT_CDFITEM
STR_SVT_MIMETYPE_CNT_TRASHBOX, // CONTENT_TYPE_X_CNT_TRASHBOX
STR_SVT_MIMETYPE_CNT_TRASH, // CONTENT_TYPE_X_CNT_TRASH
STR_SVT_MIMETYPE_X_STARMAIL, // CONTENT_TYPE_X_STARMAIL
STR_SVT_MIMETYPE_X_VRML, // CONTENT_TYPE_X_VRML
STR_SVT_MIMETYPE_CNT_REMOV_VOL,
// CONTENT_TYPE_X_CNT_REMOVEABLE_VOLUME
STR_SVT_MIMETYPE_CNT_FIX_VOL, // CONTENT_TYPE_X_CNT_FIXED_VOLUME
STR_SVT_MIMETYPE_CNT_REM_VOL, // CONTENT_TYPE_X_CNT_REMOTE_VOLUME
STR_SVT_MIMETYPE_CNT_RAM_VOL, // CONTENT_TYPE_X_CNT_RAM_VOLUME
STR_SVT_MIMETYPE_CNT_CDROM, // CONTENT_TYPE_X_CNT_CDROM_VOLUME
STR_SVT_MIMETYPE_CNT_DISK_35, // CONTENT_TYPE_X_CNT_DISK_35
STR_SVT_MIMETYPE_CNT_DISK_525, // CONTENT_TYPE_X_CNT_DISK_525
STR_SVT_MIMETYPE_CNT_TAPEDRIVE, // CONTENT_TYPE_X_CNT_TAPEDRIVE
STR_SVT_MIMETYPE_APP_GAL, // CONTENT_TYPE_APP_GALLERY
STR_SVT_MIMETYPE_APP_GAL_THEME, // CONTENT_TYPE_APP_GALLERY_THEME
STR_SVT_MIMETYPE_CNT_STARCHANNEL, // CONTENT_TYPE_X_CNT_STARCHANNEL
STR_SVT_MIMETYPE_CNT_SEPARATOR, // CONTENT_TYPE_X_CNT_SEPARATOR
STR_SVT_MIMETYPE_APP_STARW_GLOB, // CONTENT_TYPE_APP_STARWRITER_GLOB
STR_SVT_MIMETYPE_APP_SDM, // CONTENT_TYPE_APP_STARMAIL_SDM
STR_SVT_MIMETYPE_APP_SMD, // CONTENT_TYPE_APP_STARMAIL_SMD
STR_SVT_MIMETYPE_APP_STARCALC, // CONTENT_TYPE_APP_VND_CALC
STR_SVT_MIMETYPE_APP_STARCHART, // CONTENT_TYPE_APP_VND_CHART
STR_SVT_MIMETYPE_APP_STARDRAW, // CONTENT_TYPE_APP_VND_DRAW
STR_SVT_MIMETYPE_APP_STARIMAGE, // CONTENT_TYPE_APP_VND_IMAGE
STR_SVT_MIMETYPE_APP_STARIMPRESS, // CONTENT_TYPE_APP_VND_IMPRESS
STR_SVT_MIMETYPE_X_STARMAIL, // CONTENT_TYPE_APP_VND_MAIL
STR_SVT_MIMETYPE_APP_STARMATH, // CONTENT_TYPE_APP_VND_MATH
STR_SVT_MIMETYPE_APP_STARWRITER, // CONTENT_TYPE_APP_VND_WRITER
STR_SVT_MIMETYPE_APP_STARW_GLOB, // CONTENT_TYPE_APP_VND_WRITER_GLOBAL
STR_SVT_MIMETYPE_APP_STARW_WEB, // CONTENT_TYPE_APP_VND_WRITER_WEB
STR_SVT_MIMETYPE_SCHEDULE, // CONTENT_TYPE_APP_SCHEDULE
STR_SVT_MIMETYPE_SCHEDULE_EVT, // CONTENT_TYPE_APP_SCHEDULE_EVT
STR_SVT_MIMETYPE_SCHEDULE_TASK, // CONTENT_TYPE_APP_SCHEDULE_TASK
STR_SVT_MIMETYPE_SCHEDULE_FEVT, // CONTENT_TYPE_APP_SCHEDULE_FORM_EVT
STR_SVT_MIMETYPE_SCHEDULE_FTASK,
// CONTENT_TYPE_APP_SCHEDULE_FORM_TASK
STR_SVT_MIMETYPE_FRAMESET, // CONTENT_TYPE_APP_FRAMESET
STR_SVT_MIMETYPE_MACRO, // CONTENT_TYPE_APP_MACRO
STR_SVT_MIMETYPE_CNT_SFSYSFOLDER,
// CONTENT_TYPE_X_CNT_FSYSSPECIALFOLDER
STR_SVT_MIMETYPE_CNT_SFSYSFILE, // CONTENT_TYPE_X_CNT_FSYSSPECIALFILE
STR_SVT_MIMETYPE_APP_TEMPLATE, // CONTENT_TYPE_APP_VND_TEMPLATE
STR_SVT_MIMETYPE_IMAGE_GENERIC, // CONTENT_TYPE_IMAGE_GENERIC
STR_SVT_MIMETYPE_X_STARMAIL, // CONTENT_TYPE_APP_VND_NEWS
STR_SVT_MIMETYPE_X_STARMAIL, // CONTENT_TYPE_APP_VND_OUTTRAY
STR_SVT_MIMETYPE_TEXT_HTML, // CONTENT_TYPE_X_CNT_HTTPFILE
STR_SVT_MIMETYPE_APP_MSEXCEL, // CONTENT_TYPE_APP_MSEXCEL
STR_SVT_MIMETYPE_APP_MSEXCEL_TEMPL, // CONTENT_TYPE_APP_MSEXCEL_TEMPL
STR_SVT_MIMETYPE_APP_MSPPOINT, // CONTENT_TYPE_APP_MSPPOINT
STR_SVT_MIMETYPE_APP_MSPPOINT, // CONTENT_TYPE_APP_MSPPOINT_TEMPL //@todo new presentation string?
STR_SVT_MIMETYPE_TEXT_VCALENDAR, // CONTENT_TYPE_TEXT_VCALENDAR
STR_SVT_MIMETYPE_TEXT_ICALENDAR, // CONTENT_TYPE_TEXT_ICALENDAR
STR_SVT_MIMETYPE_TEXT_XMLICALENDAR, // CONTENT_TYPE_TEXT_XMLICALENDAR
STR_SVT_MIMETYPE_TEXT_CDE_CALENDAR_APP,
// CONTENT_TYPE_APP_CDE_CALENDAR_APP
STR_SVT_MIMETYPE_INET_MSG_RFC822, // CONTENT_TYPE_INET_MESSAGE_RFC822
STR_SVT_MIMETYPE_INET_MULTI_ALTERNATIVE,
// CONTENT_TYPE_INET_MULTIPART_ALTERNATIVE
STR_SVT_MIMETYPE_INET_MULTI_DIGEST,
// CONTENT_TYPE_INET_MULTIPART_DIGEST
STR_SVT_MIMETYPE_INET_MULTI_PARALLEL,
// CONTENT_TYPE_INET_MULTIPART_PARALLEL
STR_SVT_MIMETYPE_INET_MULTI_RELATED,
// CONTENT_TYPE_INET_MULTIPART_RELATED
STR_SVT_MIMETYPE_INET_MULTI_MIXED,
// CONTENT_TYPE_INET_MULTIPART_MIXED
STR_SVT_MIMETYPE_APP_IMPRESSPACKED,
// CONTENT_TYPE_APP_VND_IMPRESSPACKED
STR_SVT_MIMETYPE_APP_JAR, // CONTENT_TYPE_APP_JAR
STR_SVT_MIMETYPE_APP_SXWRITER, // CONTENT_TYPE_APP_VND_SUN_XML_WRITER
STR_SVT_MIMETYPE_APP_SXCALC, // CONTENT_TYPE_APP_VND_SUN_XML_CALC
STR_SVT_MIMETYPE_APP_SXIMPRESS, // CONTENT_TYPE_APP_VND_SUN_XML_IMPRESS
STR_SVT_MIMETYPE_APP_SXDRAW, // CONTENT_TYPE_APP_VND_SUN_XML_DRAW
STR_SVT_MIMETYPE_APP_SXCHART, // CONTENT_TYPE_APP_VND_SUN_XML_CHART
STR_SVT_MIMETYPE_APP_SXMATH, // CONTENT_TYPE_APP_VND_SUN_XML_MATH
STR_SVT_MIMETYPE_APP_SXGLOBAL, // CONTENT_TYPE_APP_VND_SUN_XML_WRITER_GLOBAL
STR_SVT_MIMETYPE_APP_SXIPACKED, // CONTENT_TYPE_APP_VND_SUN_XML_IMPRESSPACKED
};
//============================================================================
/** A mapping from extensions to type IDs. Sorted by extension.
*/
MediaTypeEntry const aStaticExtensionMap[]
= { { "aif", CONTENT_TYPE_AUDIO_AIFF, "" },
{ "aiff", CONTENT_TYPE_AUDIO_AIFF, "" },
{ "appt", CONTENT_TYPE_APP_CDE_CALENDAR_APP, "" },
{ "au", CONTENT_TYPE_AUDIO_BASIC, "" },
{ "avi", CONTENT_TYPE_VIDEO_MSVIDEO, "" },
{ "bmp", CONTENT_TYPE_IMAGE_BMP, "" },
{ "cgm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "doc", CONTENT_TYPE_APP_MSWORD, "" },
{ "dot", CONTENT_TYPE_APP_MSWORD_TEMPL, "" },
{ "dxf", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "eps", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "gal", CONTENT_TYPE_APP_GALLERY, "" },
{ "gif", CONTENT_TYPE_IMAGE_GIF, "" },
{ "htm", CONTENT_TYPE_TEXT_HTML, "" },
{ "html", CONTENT_TYPE_TEXT_HTML, "" },
{ "ics", CONTENT_TYPE_TEXT_ICALENDAR, "" },
{ "jar", CONTENT_TYPE_APP_JAR, "" },
{ "jpeg", CONTENT_TYPE_IMAGE_JPEG, "" },
{ "jpg", CONTENT_TYPE_IMAGE_JPEG, "" },
{ "met", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "mid", CONTENT_TYPE_AUDIO_MIDI, "" },
{ "midi", CONTENT_TYPE_AUDIO_MIDI, "" },
{ "pbm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "pcd", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "pct", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "pcx", CONTENT_TYPE_IMAGE_PCX, "" },
{ "pdf", CONTENT_TYPE_APP_PDF, "" },
{ "pgm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "png", CONTENT_TYPE_IMAGE_PNG, "" },
{ "pot", CONTENT_TYPE_APP_MSPPOINT_TEMPL, "" },
{ "ppm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "ppt", CONTENT_TYPE_APP_MSPPOINT, "" },
{ "psd", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "ras", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "rtf", CONTENT_TYPE_APP_RTF, "" },
{ "sda", CONTENT_TYPE_APP_VND_DRAW, "" },
{ "sdc", CONTENT_TYPE_APP_VND_CALC, "" },
{ "sdd", CONTENT_TYPE_APP_VND_IMPRESS, "" },
{ "sdm", CONTENT_TYPE_APP_VND_MAIL, "" },
{ "sdp", CONTENT_TYPE_APP_VND_IMPRESSPACKED, "" },
{ "sds", CONTENT_TYPE_APP_VND_CHART, "" },
{ "sdw", CONTENT_TYPE_APP_VND_WRITER, "" },
{ "sd~", CONTENT_TYPE_X_STARMAIL, "" },
{ "sfs", CONTENT_TYPE_APP_FRAMESET , "" },
{ "sgl", CONTENT_TYPE_APP_VND_WRITER_GLOBAL , "" },
{ "sim", CONTENT_TYPE_APP_VND_IMAGE, "" },
{ "smd", CONTENT_TYPE_APP_STARMAIL_SMD, "" }, //CONTENT_TYPE_X_STARMAIL
{ "smf", CONTENT_TYPE_APP_VND_MATH, "" },
{ "svh", CONTENT_TYPE_APP_STARHELP, "" },
{ "svm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "sxc", CONTENT_TYPE_APP_VND_SUN_XML_CALC, "" },
{ "sxd", CONTENT_TYPE_APP_VND_SUN_XML_DRAW, "" },
{ "sxg", CONTENT_TYPE_APP_VND_SUN_XML_WRITER_GLOBAL, "" },
{ "sxi", CONTENT_TYPE_APP_VND_SUN_XML_IMPRESS, "" },
{ "sxm", CONTENT_TYPE_APP_VND_SUN_XML_MATH, "" },
{ "sxp", CONTENT_TYPE_APP_VND_SUN_XML_IMPRESSPACKED, "" },
{ "sxs", CONTENT_TYPE_APP_VND_SUN_XML_CHART, "" },
{ "sxw", CONTENT_TYPE_APP_VND_SUN_XML_WRITER, "" },
{ "tga", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "thm", CONTENT_TYPE_APP_GALLERY_THEME, "" },
{ "tif", CONTENT_TYPE_IMAGE_TIFF, "" },
{ "tiff", CONTENT_TYPE_IMAGE_TIFF, "" },
{ "txt", CONTENT_TYPE_TEXT_PLAIN, "" },
{ "url", CONTENT_TYPE_TEXT_URL, "" },
{ "vcf", CONTENT_TYPE_TEXT_VCARD, "" },
{ "vcs", CONTENT_TYPE_TEXT_VCALENDAR, "" },
{ "vdo", CONTENT_TYPE_VIDEO_VDO, "" },
{ "vor", CONTENT_TYPE_APP_VND_TEMPLATE, "" },
{ "wav", CONTENT_TYPE_AUDIO_WAV, "" },
{ "wmf", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "wrl", CONTENT_TYPE_X_VRML, "" },
{ "xbm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "xcs", CONTENT_TYPE_TEXT_XMLICALENDAR, "" },
{ "xls", CONTENT_TYPE_APP_MSEXCEL, "" },
{ "xlt", CONTENT_TYPE_APP_MSEXCEL_TEMPL, "" },
{ "xlw", CONTENT_TYPE_APP_MSEXCEL, "" },
{ "xpm", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "zip", CONTENT_TYPE_APP_ZIP, "" } };
//============================================================================
/** A mapping from presentations to type IDs. Sorted by presentations.
*/
MediaTypeEntry const aStaticPresentationMap[]
= { { "Binary Data", CONTENT_TYPE_APP_OCTSTREAM, "" },
{ "Bitmap", CONTENT_TYPE_IMAGE_BMP, "" },
{ "DOS Command File", CONTENT_TYPE_APP_OCTSTREAM, "" },
{ "Digital Video", CONTENT_TYPE_VIDEO_MSVIDEO, "" },
{ "Executable", CONTENT_TYPE_APP_OCTSTREAM, "" },
{ "Grafik", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "HTM", CONTENT_TYPE_TEXT_HTML, "" },
{ "HTML", CONTENT_TYPE_TEXT_HTML, "" },
{ "Hypertext", CONTENT_TYPE_TEXT_HTML, "" },
{ "Icon", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "Image File", CONTENT_TYPE_IMAGE_GENERIC, "" },
{ "MIDI", CONTENT_TYPE_AUDIO_MIDI, "" },
{ "Master Document", CONTENT_TYPE_APP_VND_WRITER_GLOBAL, "" },
{ "Plain Text", CONTENT_TYPE_TEXT_PLAIN, "" },
{ "StarCalc", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarCalc 3.0", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarCalc 4.0", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarCalc 5.0", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarCalc Datei", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarCalc Document", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarCalc File", CONTENT_TYPE_APP_VND_CALC, "" },
{ "StarChart 3.0", CONTENT_TYPE_APP_VND_CHART, "" },
{ "StarChart 4.0", CONTENT_TYPE_APP_VND_CHART, "" },
{ "StarChart 5.0", CONTENT_TYPE_APP_VND_CHART, "" },
{ "StarChart Document", CONTENT_TYPE_APP_VND_CHART, "" },
{ "StarDraw 3.0", CONTENT_TYPE_APP_VND_DRAW, "" },
{ "StarDraw 5.0", CONTENT_TYPE_APP_VND_DRAW, "" },
{ "StarDraw", CONTENT_TYPE_APP_VND_DRAW, "" },
{ "StarDraw Document", CONTENT_TYPE_APP_VND_DRAW, "" },
{ "StarImpress 4.0", CONTENT_TYPE_APP_VND_IMPRESS, "" },
{ "StarImpress 5.0 (packed)", CONTENT_TYPE_APP_VND_IMPRESSPACKED, "" },
{ "StarImpress 5.0", CONTENT_TYPE_APP_VND_IMPRESS, "" },
{ "StarImpress Document", CONTENT_TYPE_APP_VND_IMPRESS, "" },
{ "StarMath 3.0", CONTENT_TYPE_APP_VND_MATH, "" },
{ "StarMath 4.0", CONTENT_TYPE_APP_VND_MATH, "" },
{ "StarMath 5.0", CONTENT_TYPE_APP_VND_MATH, "" },
{ "StarMath Document", CONTENT_TYPE_APP_VND_MATH, "" },
{ "StarMessage5", CONTENT_TYPE_APP_VND_MAIL, "" },
{ "StarOffice XML (Calc)", CONTENT_TYPE_APP_VND_SUN_XML_CALC, "" },
{ "StarOffice XML (Impress)", CONTENT_TYPE_APP_VND_SUN_XML_IMPRESS, "" },
{ "StarOffice XML (Draw)", CONTENT_TYPE_APP_VND_SUN_XML_DRAW, "" },
{ "StarOffice XML (Chart)", CONTENT_TYPE_APP_VND_SUN_XML_CHART, "" },
{ "StarOffice XML (Writer)", CONTENT_TYPE_APP_VND_SUN_XML_WRITER, "" },
{ "StarWriter", CONTENT_TYPE_APP_VND_WRITER, "" },
{ "StarWriter 3.0", CONTENT_TYPE_APP_VND_WRITER, "" },
{ "StarWriter 4.0", CONTENT_TYPE_APP_VND_WRITER, "" },
{ "StarWriter 5.0", CONTENT_TYPE_APP_VND_WRITER, "" },
{ "StarWriter Document", CONTENT_TYPE_APP_VND_WRITER, "" },
{ "StarWriter/Global 5.0", CONTENT_TYPE_APP_VND_WRITER_GLOBAL, "" },
{ "StarWriter/Global Document", CONTENT_TYPE_APP_VND_WRITER_GLOBAL, "" },
{ "StarWriter/Web 5.0", CONTENT_TYPE_APP_VND_WRITER_WEB, "" },
{ "StarWriterGlobal Document", CONTENT_TYPE_APP_VND_WRITER_GLOBAL, "" },
{ "StarWriterHtml Document", CONTENT_TYPE_APP_VND_WRITER_WEB, "" },
{ "UniformResourceLocator", CONTENT_TYPE_TEXT_URL, "" },
{ "text/html", CONTENT_TYPE_TEXT_HTML, "" } };
}
//============================================================================
//
// Registration
//
//============================================================================
// static
Registration * Registration::m_pRegistration = 0;
//============================================================================
Registration::~Registration()
{
{for (sal_uLong i = 0; i < m_aTypeIDMap.Count(); ++i)
delete static_cast< TypeIDMapEntry * >(m_aTypeIDMap.GetObject(i));
}
m_aTypeIDMap.Clear();
{for (sal_uInt16 i = 0; i < m_aTypeNameMap.Count(); ++i)
delete static_cast< TypeNameMapEntry * >(m_aTypeNameMap.GetObject(i));
}
m_aTypeNameMap.Remove(sal_uInt16(0), m_aTypeNameMap.Count());
{for (sal_uInt16 i = 0; i < m_aExtensionMap.Count(); ++i)
delete
static_cast< ExtensionMapEntry * >(m_aExtensionMap.GetObject(i));
}
m_aExtensionMap.Remove(sal_uInt16(0), m_aExtensionMap.Count());
}
//============================================================================
// static
TypeNameMapEntry * Registration::getExtensionEntry(UniString const &
rTypeName)
{
if (m_pRegistration)
{
UniString aTheTypeName = rTypeName;
aTheTypeName.ToLowerAscii();
sal_uInt16 nPos;
if (m_pRegistration->m_aTypeNameMap.Seek_Entry(&aTheTypeName, &nPos))
return static_cast< TypeNameMapEntry * >(m_pRegistration->
m_aTypeNameMap.
GetObject(nPos));
}
return 0;
}
//============================================================================
// static
INetContentType Registration::RegisterContentType(UniString const & rTypeName,
UniString const &
rPresentation,
UniString const *
pExtension,
UniString const *
pSystemFileType)
{
if (!m_pRegistration)
m_pRegistration = new Registration;
DBG_ASSERT(GetContentType(rTypeName) == CONTENT_TYPE_UNKNOWN,
"Registration::RegisterContentType(): Already registered");
INetContentType eTypeID
= INetContentType(m_pRegistration->m_nNextDynamicID++);
UniString aTheTypeName = rTypeName;
aTheTypeName.ToLowerAscii();
TypeIDMapEntry * pTypeIDMapEntry = new TypeIDMapEntry;
pTypeIDMapEntry->m_aTypeName = aTheTypeName;
pTypeIDMapEntry->m_aPresentation = rPresentation;
if (pSystemFileType)
pTypeIDMapEntry->m_aSystemFileType = *pSystemFileType;
m_pRegistration->m_aTypeIDMap.Insert(eTypeID, pTypeIDMapEntry);
TypeNameMapEntry * pTypeNameMapEntry = new TypeNameMapEntry(aTheTypeName);
if (pExtension)
pTypeNameMapEntry->m_aExtension = *pExtension;
pTypeNameMapEntry->m_eTypeID = eTypeID;
m_pRegistration->m_aTypeNameMap.Insert(pTypeNameMapEntry);
if (pExtension)
{
ExtensionMapEntry * pExtensionMapEntry
= new ExtensionMapEntry(*pExtension);
pExtensionMapEntry->m_eTypeID = eTypeID;
m_pRegistration->m_aExtensionMap.Insert(pExtensionMapEntry);
}
return eTypeID;
}
//============================================================================
// static
INetContentType Registration::GetContentType(UniString const & rTypeName)
{
if (!m_pRegistration)
m_pRegistration = new Registration;
UniString aTheTypeName = rTypeName;
aTheTypeName.ToLowerAscii();
sal_uInt16 nPos;
return m_pRegistration->m_aTypeNameMap.Seek_Entry(&aTheTypeName, &nPos) ?
static_cast< TypeNameMapEntry * >(m_pRegistration->
m_aTypeNameMap.
GetObject(nPos))->
m_eTypeID :
CONTENT_TYPE_UNKNOWN;
}
//============================================================================
// static
UniString Registration::GetContentType(INetContentType eTypeID)
{
if (!m_pRegistration)
m_pRegistration = new Registration;
TypeIDMapEntry * pEntry
= static_cast< TypeIDMapEntry * >(m_pRegistration->
m_aTypeIDMap.Get(eTypeID));
return pEntry ? pEntry->m_aTypeName : UniString();
}
//============================================================================
// static
UniString Registration::GetPresentation(INetContentType eTypeID)
{
if (!m_pRegistration)
m_pRegistration = new Registration;
TypeIDMapEntry * pEntry
= static_cast< TypeIDMapEntry * >(m_pRegistration->
m_aTypeIDMap.Get(eTypeID));
return pEntry ? pEntry->m_aPresentation : UniString();
}
//============================================================================
// static
UniString Registration::GetExtension(UniString const & rTypeName)
{
if (!m_pRegistration)
m_pRegistration = new Registration;
UniString aTheTypeName = rTypeName;
aTheTypeName.ToLowerAscii();
sal_uInt16 nPos;
return m_pRegistration->m_aTypeNameMap.Seek_Entry(&aTheTypeName, &nPos) ?
static_cast< TypeNameMapEntry * >(m_pRegistration->
m_aTypeNameMap.
GetObject(nPos))->
m_aExtension :
UniString();
}
//============================================================================
// static
INetContentType Registration::GetContentType4Extension(UniString const &
rExtension)
{
if (!m_pRegistration)
m_pRegistration = new Registration;
sal_uInt16 nPos;
return m_pRegistration->
m_aExtensionMap.
Seek_Entry(const_cast< UniString * >(&rExtension),
&nPos) ?
static_cast< ExtensionMapEntry * >(m_pRegistration->
m_aExtensionMap.
GetObject(nPos))->
m_eTypeID :
CONTENT_TYPE_UNKNOWN;
}
//============================================================================
//
// seekEntry
//
//============================================================================
namespace unnamed_svl_inettype {
MediaTypeEntry const * seekEntry(UniString const & rTypeName,
MediaTypeEntry const * pMap, sal_Size nSize)
{
#if defined DBG_UTIL
for (sal_Size i = 0; i < nSize - 1; ++i)
DBG_ASSERT(
rtl_str_compare(
pMap[i].m_pTypeName, pMap[i + 1].m_pTypeName) < 0,
"seekEntry(): Bad map");
#endif
sal_Size nLow = 0;
sal_Size nHigh = nSize;
while (nLow != nHigh)
{
sal_Size nMiddle = (nLow + nHigh) / 2;
MediaTypeEntry const * pEntry = pMap + nMiddle;
switch (rTypeName.CompareIgnoreCaseToAscii(pEntry->m_pTypeName))
{
case COMPARE_LESS:
nHigh = nMiddle;
break;
case COMPARE_EQUAL:
return pEntry;
case COMPARE_GREATER:
nLow = nMiddle + 1;
break;
}
}
return 0;
}
}
//============================================================================
//
// INetContentTypes
//
//============================================================================
//static
void INetContentTypes::Uninitialize()
{
Registration::deinitialize();
}
//============================================================================
//static
INetContentType INetContentTypes::RegisterContentType(UniString const &
rTypeName,
UniString const &
rPresentation,
UniString const *
pExtension,
UniString const *
pSystemFileType)
{
INetContentType eTypeID = GetContentType(rTypeName);
if (eTypeID == CONTENT_TYPE_UNKNOWN)
eTypeID = Registration::RegisterContentType(rTypeName, rPresentation,
pExtension,
pSystemFileType);
else if (eTypeID > CONTENT_TYPE_LAST)
{
TypeIDMapEntry * pTypeEntry = Registration::getEntry(eTypeID);
if (pTypeEntry)
{
if (rPresentation.Len() != 0)
pTypeEntry->m_aPresentation = rPresentation;
if (pSystemFileType)
pTypeEntry->m_aSystemFileType = *pSystemFileType;
}
if (pExtension)
{
TypeNameMapEntry * pEntry
= Registration::getExtensionEntry(rTypeName);
if (pEntry)
pEntry->m_aExtension = *pExtension;
}
}
return eTypeID;
}
//============================================================================
// static
INetContentType INetContentTypes::GetContentType(UniString const & rTypeName)
{
UniString aType;
UniString aSubType;
if (parse(rTypeName, aType, aSubType))
{
aType += '/';
aType += aSubType;
MediaTypeEntry const * pEntry = seekEntry(aType, aStaticTypeNameMap,
CONTENT_TYPE_LAST + 1);
return pEntry ? pEntry->m_eTypeID :
Registration::GetContentType(aType);
}
else
return
rTypeName.EqualsIgnoreCaseAscii(CONTENT_TYPE_STR_X_STARMAIL) ?
CONTENT_TYPE_X_STARMAIL : CONTENT_TYPE_UNKNOWN;
// the content type "x-starmail" has no sub type
}
//============================================================================
//static
UniString INetContentTypes::GetContentType(INetContentType eTypeID)
{
static sal_Char const * aMap[CONTENT_TYPE_LAST + 1];
static bool bInitialized = false;
if (!bInitialized)
{
for (sal_Size i = 0; i <= CONTENT_TYPE_LAST; ++i)
aMap[aStaticTypeNameMap[i].m_eTypeID]
= aStaticTypeNameMap[i].m_pTypeName;
aMap[CONTENT_TYPE_UNKNOWN] = CONTENT_TYPE_STR_APP_OCTSTREAM;
aMap[CONTENT_TYPE_TEXT_PLAIN] = CONTENT_TYPE_STR_TEXT_PLAIN
"; charset=iso-8859-1";
bInitialized = true;
}
UniString aTypeName = eTypeID <= CONTENT_TYPE_LAST ?
UniString::CreateFromAscii(aMap[eTypeID]) :
Registration::GetContentType(eTypeID);
if (aTypeName.Len() == 0)
{
DBG_ERROR("INetContentTypes::GetContentType(): Bad ID");
return
UniString::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(
CONTENT_TYPE_STR_APP_OCTSTREAM));
}
return aTypeName;
}
//============================================================================
//static
UniString INetContentTypes::GetPresentation(INetContentType eTypeID,
const ::com::sun::star::lang::Locale& aLocale)
{
sal_uInt16 nResID = sal_uInt16();
if (eTypeID <= CONTENT_TYPE_LAST)
nResID = aStaticResourceIDMap[eTypeID];
else
{
UniString aPresentation = Registration::GetPresentation(eTypeID);
if (aPresentation.Len() == 0)
nResID = STR_SVT_MIMETYPE_APP_OCTSTREAM;
else
return aPresentation;
}
return SvtSimpleResId(nResID, aLocale);
}
//============================================================================
//static
UniString INetContentTypes::GetExtension(UniString const & rTypeName)
{
MediaTypeEntry const * pEntry = seekEntry(rTypeName, aStaticTypeNameMap,
CONTENT_TYPE_LAST + 1);
if (pEntry)
return UniString::CreateFromAscii(pEntry->m_pExtension);
UniString aExtension = Registration::GetExtension(rTypeName);
if (aExtension.Len() != 0)
return aExtension;
// special handling of text types, which come in uncounted variations:
return rTypeName.EqualsIgnoreCaseAscii("text", 0,
RTL_CONSTASCII_LENGTH("text")) ?
UniString::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("txt")) :
UniString::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("tmp"));
}
//============================================================================
//static
INetContentType INetContentTypes::GetContentType4Extension(UniString const &
rExtension)
{
MediaTypeEntry const * pEntry = seekEntry(rExtension, aStaticExtensionMap,
sizeof aStaticExtensionMap
/ sizeof (MediaTypeEntry));
if (pEntry)
return pEntry->m_eTypeID;
INetContentType eTypeID
= Registration::GetContentType4Extension(rExtension);
return eTypeID == CONTENT_TYPE_UNKNOWN ? CONTENT_TYPE_APP_OCTSTREAM :
eTypeID;
}
//============================================================================
//static
INetContentType INetContentTypes::GetContentTypeFromURL(UniString const &
rURL)
{
INetContentType eTypeID = CONTENT_TYPE_UNKNOWN;
UniString aToken = rURL.GetToken(0, ':');
if (aToken.Len() != 0)
{
if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_FILE))
if (rURL.GetChar(rURL.Len() - 1) == '/') // folder
if (rURL.Len() > RTL_CONSTASCII_LENGTH("file:///"))
if (WildCard(UniString(RTL_CONSTASCII_USTRINGPARAM(
"*/{*}/"))).
Matches(rURL)) // special folder
eTypeID = CONTENT_TYPE_X_CNT_FSYSSPECIALFOLDER;
else
// drive? -> "file:///?|/"
if (rURL.Len() == 11
&& rURL.GetChar(rURL.Len() - 2) == '|')
{
// Drives need further processing, because of
// dynamic type according to underlying volume,
// which cannot be determined here.
}
else // normal folder
eTypeID = CONTENT_TYPE_X_CNT_FSYSFOLDER;
else // file system root
eTypeID = CONTENT_TYPE_X_CNT_FSYSBOX;
else // file
{
//@@@
}
else if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_HTTP)
|| aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_HTTPS))
eTypeID = CONTENT_TYPE_TEXT_HTML;
else if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_PRIVATE))
{
UniString aSecondPart = rURL.GetToken(1, ':');
aToken = aSecondPart.GetToken(0, '/');
if (aToken.EqualsAscii(INETTYPE_URL_SUB_FACTORY))
{
aToken = aSecondPart.GetToken(1, '/');
if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SWRITER))
{
aToken = aSecondPart.GetToken(2, '/');
eTypeID = aToken.EqualsAscii(INETTYPE_URL_SSSUB_WEB) ?
CONTENT_TYPE_APP_VND_WRITER_WEB :
aToken.EqualsAscii(INETTYPE_URL_SSSUB_GLOB) ?
CONTENT_TYPE_APP_VND_WRITER_GLOBAL :
CONTENT_TYPE_APP_VND_WRITER;
}
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SCALC))
eTypeID = CONTENT_TYPE_APP_VND_CALC;
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SDRAW))
eTypeID = CONTENT_TYPE_APP_VND_DRAW;
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SIMPRESS))
eTypeID = CONTENT_TYPE_APP_VND_IMPRESS;
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SCHART))
eTypeID = CONTENT_TYPE_APP_VND_CHART;
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SIMAGE))
eTypeID = CONTENT_TYPE_APP_VND_IMAGE;
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SMATH))
eTypeID = CONTENT_TYPE_APP_VND_MATH;
else if (aToken.EqualsAscii(INETTYPE_URL_SSUB_FRAMESET))
eTypeID = CONTENT_TYPE_APP_FRAMESET;
}
else if (aToken.EqualsAscii(INETTYPE_URL_SUB_HELPID))
eTypeID = CONTENT_TYPE_APP_STARHELP;
}
else if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_COMPONENT))
{
aToken = rURL.GetToken(1, ':'); // aToken now equals ss / *
aToken = aToken.GetToken(0, '/');
if (aToken.EqualsAscii(INETTYPE_URL_SSUB_SS))
eTypeID = rURL.SearchAscii(INETTYPE_URL_SCHED_CMB)
== STRING_NOTFOUND
&& rURL.SearchAscii(INETTYPE_URL_SCHED_FORM)
== STRING_NOTFOUND ?
CONTENT_TYPE_APP_SCHEDULE :
rURL.SearchAscii(INETTYPE_URL_SCHED_TASK)
== STRING_NOTFOUND ?
CONTENT_TYPE_APP_SCHEDULE_EVT :
CONTENT_TYPE_APP_SCHEDULE_TASK;
}
else if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_MAILTO))
eTypeID = CONTENT_TYPE_APP_VND_OUTTRAY;
else if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_MACRO))
eTypeID = CONTENT_TYPE_APP_MACRO;
else if (aToken.EqualsIgnoreCaseAscii(INETTYPE_URL_PROT_DATA))
{
UniString aSecondPart = rURL.GetToken(1, ':');
aToken = aSecondPart.GetToken(0, ',');
eTypeID = GetContentType(aToken);
}
}
if (eTypeID == CONTENT_TYPE_UNKNOWN)
{
UniString aExtension;
if (GetExtensionFromURL(rURL, aExtension))
eTypeID = GetContentType4Extension(aExtension);
}
return eTypeID;
}
//============================================================================
//static
bool INetContentTypes::GetExtensionFromURL(UniString const & rURL,
UniString & rExtension)
{
xub_StrLen nSlashPos = 0;
xub_StrLen i = 0;
while (i != STRING_NOTFOUND)
{
nSlashPos = i;
i = rURL.Search('/', i + 1);
}
if (nSlashPos != 0)
{
xub_StrLen nLastDotPos = i = rURL.Search('.', nSlashPos);
while (i != STRING_NOTFOUND)
{
nLastDotPos = i;
i = rURL.Search('.', i + 1);
}
if (nLastDotPos != STRING_NOTFOUND)
rExtension = rURL.Copy(nLastDotPos + 1);
return true;
}
return false;
}
//============================================================================
//static
INetContentType INetContentTypes::MapStringToContentType(UniString const &
rPresentation)
{
MediaTypeEntry const * pEntry = seekEntry(rPresentation,
aStaticPresentationMap,
sizeof aStaticPresentationMap
/ sizeof (MediaTypeEntry));
return pEntry ? pEntry->m_eTypeID : CONTENT_TYPE_UNKNOWN;
}
//============================================================================
// static
bool INetContentTypes::parse(ByteString const & rMediaType,
ByteString & rType, ByteString & rSubType,
INetContentTypeParameterList * pParameters)
{
sal_Char const * p = rMediaType.GetBuffer();
sal_Char const * pEnd = p + rMediaType.Len();
p = INetMIME::skipLinearWhiteSpaceComment(p, pEnd);
sal_Char const * pToken = p;
bool bDowncase = false;
while (p != pEnd && INetMIME::isTokenChar(*p))
{
bDowncase = bDowncase || INetMIME::isUpperCase(*p);
++p;
}
if (p == pToken)
return false;
rType = ByteString(pToken, sal::static_int_cast< xub_StrLen >(p - pToken));
if (bDowncase)
rType.ToLowerAscii();
p = INetMIME::skipLinearWhiteSpaceComment(p, pEnd);
if (p == pEnd || *p++ != '/')
return false;
p = INetMIME::skipLinearWhiteSpaceComment(p, pEnd);
pToken = p;
bDowncase = false;
while (p != pEnd && INetMIME::isTokenChar(*p))
{
bDowncase = bDowncase || INetMIME::isUpperCase(*p);
++p;
}
if (p == pToken)
return false;
rSubType = ByteString(
pToken, sal::static_int_cast< xub_StrLen >(p - pToken));
if (bDowncase)
rSubType.ToLowerAscii();
return INetMIME::scanParameters(p, pEnd, pParameters) == pEnd;
}
//============================================================================
// static
bool INetContentTypes::parse(UniString const & rMediaType,
UniString & rType, UniString & rSubType,
INetContentTypeParameterList * pParameters)
{
sal_Unicode const * p = rMediaType.GetBuffer();
sal_Unicode const * pEnd = p + rMediaType.Len();
p = INetMIME::skipLinearWhiteSpaceComment(p, pEnd);
sal_Unicode const * pToken = p;
bool bDowncase = false;
while (p != pEnd && INetMIME::isTokenChar(*p))
{
bDowncase = bDowncase || INetMIME::isUpperCase(*p);
++p;
}
if (p == pToken)
return false;
rType = UniString(pToken, sal::static_int_cast< xub_StrLen >(p - pToken));
if (bDowncase)
rType.ToLowerAscii();
p = INetMIME::skipLinearWhiteSpaceComment(p, pEnd);
if (p == pEnd || *p++ != '/')
return false;
p = INetMIME::skipLinearWhiteSpaceComment(p, pEnd);
pToken = p;
bDowncase = false;
while (p != pEnd && INetMIME::isTokenChar(*p))
{
bDowncase = bDowncase || INetMIME::isUpperCase(*p);
++p;
}
if (p == pToken)
return false;
rSubType = UniString(
pToken, sal::static_int_cast< xub_StrLen >(p - pToken));
if (bDowncase)
rSubType.ToLowerAscii();
return INetMIME::scanParameters(p, pEnd, pParameters) == pEnd;
}
//============================================================================
// static
ByteString INetContentTypes::appendUSASCIIParameter(ByteString const &
rMediaType,
ByteString const &
rAttribute,
ByteString const & rValue)
{
ByteString aResult = rMediaType;
aResult.Append(RTL_CONSTASCII_STRINGPARAM("; "));
aResult += rAttribute;
aResult += '=';
bool bQuote = false;
for (xub_StrLen i = 0; i < rValue.Len(); ++i)
{
// When the value contains any ' characters, use a quoted string
// instead of a token, in order to avoid confusion with RFC 2231
// extensions:
sal_uInt32 nChar = sal_uChar(rValue.GetChar(i));
DBG_ASSERT(INetMIME::isUSASCII(nChar),
"INetContentTypes::appendUSASCIIParameter(): Bad value");
if (!INetMIME::isTokenChar(nChar) || nChar == '\'')
{
bQuote = true;
break;
}
}
if (bQuote)
{
aResult += '"';
for (xub_StrLen i = 0; i < rValue.Len(); ++i)
{
// Escape LF as well as CR to avoid confusion with line folding:
sal_uInt32 nChar = sal_uChar(rValue.GetChar(i));
DBG_ASSERT(INetMIME::isUSASCII(nChar),
"INetContentTypes::appendUSASCIIParameter():"
" Bad value");
switch (nChar)
{
case 0x0A: // LF
case 0x0D: // CR
case '"':
case '\\':
aResult += '\\';
default:
aResult += static_cast< char >(nChar);
break;
}
}
aResult += '"';
}
else
aResult += rValue;
return aResult;
}
//============================================================================
// static
UniString INetContentTypes::appendUSASCIIParameter(UniString const &
rMediaType,
UniString const &
rAttribute,
UniString const & rValue)
{
UniString aResult = rMediaType;
aResult.AppendAscii(RTL_CONSTASCII_STRINGPARAM("; "));
aResult += rAttribute;
aResult += '=';
bool bQuote = false;
for (xub_StrLen i = 0; i < rValue.Len(); ++i)
{
// When the value contains any ' characters, use a quoted string
// instead of a token, in order to avoid confusion with RFC 2231
// extensions:
sal_uInt32 nChar = rValue.GetChar(i);
DBG_ASSERT(INetMIME::isUSASCII(nChar),
"INetContentTypes::appendUSASCIIParameter(): Bad value");
if (!INetMIME::isTokenChar(nChar) || nChar == '\'')
{
bQuote = true;
break;
}
}
if (bQuote)
{
aResult += '"';
for (xub_StrLen i = 0; i < rValue.Len(); ++i)
{
// Escape LF as well as CR to avoid confusion with line folding:
sal_uInt32 nChar = rValue.GetChar(i);
DBG_ASSERT(INetMIME::isUSASCII(nChar),
"INetContentTypes::appendUSASCIIParameter():"
" Bad value");
switch (nChar)
{
case 0x0A: // LF
case 0x0D: // CR
case '"':
case '\\':
aResult += '\\';
default:
aResult += sal_Unicode(nChar);
break;
}
}
aResult += '"';
}
else
aResult += rValue;
return aResult;
}