diff options
Diffstat (limited to 'svtools/source/misc1/inettype.cxx')
-rw-r--r-- | svtools/source/misc1/inettype.cxx | 1348 |
1 files changed, 0 insertions, 1348 deletions
diff --git a/svtools/source/misc1/inettype.cxx b/svtools/source/misc1/inettype.cxx deleted file mode 100644 index ce62d7f3b2fc..000000000000 --- a/svtools/source/misc1/inettype.cxx +++ /dev/null @@ -1,1348 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: inettype.cxx,v $ - * $Revision: 1.9 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svtools.hxx" -#include <tools/table.hxx> -#include <tools/wldcrd.hxx> -#include <svtools/inettype.hxx> -#include <svtools/svtdata.hxx> -#ifndef _SVTOOLS_HRC -#include <svtools/svtools.hrc> -#endif - -#ifndef _SVSTDARR_STRINGSSORT_DECL -#define _SVSTDARR_STRINGSSORT -#include <svtools/svstdarr.hxx> -#undef _SVSTDARR_STRINGSSORT -#endif - -namespace unnamed_svtools_inettype {} -using namespace unnamed_svtools_inettype; - // unnamed namespaces don't work well yet - -//============================================================================ -namespace unnamed_svtools_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. - */ -USHORT 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 (ULONG i = 0; i < m_aTypeIDMap.Count(); ++i) - delete static_cast< TypeIDMapEntry * >(m_aTypeIDMap.GetObject(i)); - } - m_aTypeIDMap.Clear(); - {for (USHORT i = 0; i < m_aTypeNameMap.Count(); ++i) - delete static_cast< TypeNameMapEntry * >(m_aTypeNameMap.GetObject(i)); - } - m_aTypeNameMap.Remove(USHORT(0), m_aTypeNameMap.Count()); - {for (USHORT i = 0; i < m_aExtensionMap.Count(); ++i) - delete - static_cast< ExtensionMapEntry * >(m_aExtensionMap.GetObject(i)); - } - m_aExtensionMap.Remove(USHORT(0), m_aExtensionMap.Count()); -} - -//============================================================================ -// static -TypeNameMapEntry * Registration::getExtensionEntry(UniString const & - rTypeName) -{ - if (m_pRegistration) - { - UniString aTheTypeName = rTypeName; - aTheTypeName.ToLowerAscii(); - USHORT 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(); - USHORT 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(); - USHORT 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; - - USHORT 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_svtools_inettype { - -MediaTypeEntry const * seekEntry(UniString const & rTypeName, - MediaTypeEntry const * pMap, sal_Size nSize) -{ -#if defined DBG_UTIL || defined INETTYPE_DEBUG - static bool bChecked = false; - if (!bChecked) - { - for (sal_Size i = 0; i < nSize - 1; ++i) - DBG_ASSERT(pMap[i].m_pTypeName < pMap[i + 1].m_pTypeName, - "seekEntry(): Bad map"); - bChecked = true; - } -#endif // DBG_UTIL, INETTYPE_DEBUG - - 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) -{ - USHORT nResID = USHORT(); - 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; -} - |