Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
ec243f43
Kaydet (Commit)
ec243f43
authored
Tem 16, 2015
tarafından
Norbert Thiebaud
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Revert "tools: replace boost::ptr_vector with std::unordered_map"
This reverts commit
218be53f
. MacOSX breaker
üst
578969c5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
128 additions
and
104 deletions
+128
-104
dp_manager.cxx
desktop/source/deployment/manager/dp_manager.cxx
+3
-2
dp_component.cxx
...top/source/deployment/registry/component/dp_component.cxx
+11
-11
dp_package.cxx
desktop/source/deployment/registry/package/dp_package.cxx
+5
-6
inetmime.hxx
include/tools/inetmime.hxx
+77
-71
test_INetContentType.cxx
svl/qa/unit/test_INetContentType.cxx
+7
-5
parhtml.cxx
svtools/source/svhtml/parhtml.cxx
+2
-3
inetmime.cxx
tools/source/inet/inetmime.cxx
+23
-6
No files found.
desktop/source/deployment/manager/dp_manager.cxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -971,8 +971,9 @@ Reference<deployment::XPackage> PackageManagerImpl::getDeployedPackage_(
INetContentTypeParameterList
params
;
if
(
INetContentTypes
::
parse
(
data
.
mediaType
,
type
,
subType
,
&
params
))
{
auto
const
iter
=
params
.
find
(
OString
(
"platform"
));
if
(
iter
!=
params
.
end
()
&&
!
platform_fits
(
iter
->
second
.
m_sValue
))
INetContentTypeParameter
const
*
param
=
params
.
find
(
OString
(
"platform"
)
);
if
(
param
!=
0
&&
!
platform_fits
(
param
->
m_sValue
))
throw
lang
::
IllegalArgumentException
(
getResourceString
(
RID_STR_NO_SUCH_PACKAGE
)
+
id
,
static_cast
<
OWeakObject
*>
(
this
),
...
...
desktop/source/deployment/registry/component/dp_component.cxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -670,21 +670,21 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
// xxx todo: probe and evaluate component xml description
auto
const
iter
=
params
.
find
(
OString
(
"platform"
));
bool
bPlatformFits
(
iter
==
params
.
end
()
);
INetContentTypeParameter
const
*
param
=
params
.
find
(
OString
(
"platform"
));
bool
bPlatformFits
(
param
==
0
);
OUString
aPlatform
;
if
(
!
bPlatformFits
)
// platform is specified, we have to check
{
aPlatform
=
iter
->
second
.
m_sValue
;
aPlatform
=
param
->
m_sValue
;
bPlatformFits
=
platform_fits
(
aPlatform
);
}
// If the package is being removed, do not care whether
// platform fits. We won't be using it anyway.
if
(
bPlatformFits
||
bRemoved
)
{
auto
const
iterType
=
params
.
find
(
OString
(
"type"
));
if
(
iterType
!=
params
.
end
()
)
param
=
params
.
find
(
OString
(
"type"
));
if
(
param
!=
0
)
{
OUString
const
&
value
=
iterType
->
second
.
m_sValue
;
OUString
const
&
value
=
param
->
m_sValue
;
if
(
value
.
equalsIgnoreAsciiCase
(
"native"
))
{
if
(
bPlatformFits
)
return
new
BackendImpl
::
ComponentPackageImpl
(
...
...
@@ -713,8 +713,8 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
}
else
if
(
subType
.
equalsIgnoreAsciiCase
(
"vnd.sun.star.uno-components"
))
{
auto
const
iter
=
params
.
find
(
OString
(
"platform"
));
if
(
iter
==
params
.
end
()
||
platform_fits
(
iter
->
second
.
m_sValue
))
{
INetContentTypeParameter
const
*
param
=
params
.
find
(
OString
(
"platform"
));
if
(
param
==
0
||
platform_fits
(
param
->
m_sValue
))
{
return
new
BackendImpl
::
ComponentsPackageImpl
(
this
,
url
,
name
,
m_xComponentsTypeInfo
,
bRemoved
,
identifier
);
...
...
@@ -722,9 +722,9 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
}
else
if
(
subType
.
equalsIgnoreAsciiCase
(
"vnd.sun.star.uno-typelibrary"
))
{
auto
const
iter
=
params
.
find
(
OString
(
"type"
));
if
(
iter
!=
params
.
end
()
)
{
OUString
const
&
value
=
iter
->
second
.
m_sValue
;
INetContentTypeParameter
const
*
param
=
params
.
find
(
OString
(
"type"
));
if
(
param
!=
0
)
{
OUString
const
&
value
=
param
->
m_sValue
;
if
(
value
.
equalsIgnoreAsciiCase
(
"RDB"
))
{
return
new
BackendImpl
::
TypelibraryPackageImpl
(
...
...
desktop/source/deployment/registry/package/dp_package.cxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -1473,8 +1473,8 @@ void BackendImpl::PackageImpl::scanBundle(
if
(
!
INetContentTypes
::
parse
(
mediaType
,
type
,
subType
,
&
params
))
continue
;
auto
const
iter
=
params
.
find
(
"platform"
);
if
(
iter
!=
params
.
end
()
&&
!
platform_fits
(
iter
->
second
.
m_sValue
))
INetContentTypeParameter
const
*
param
=
params
.
find
(
"platform"
);
if
(
param
!=
0
&&
!
platform_fits
(
param
->
m_sValue
))
continue
;
const
OUString
url
(
makeURL
(
packageRootURL
,
fullPath
)
);
...
...
@@ -1483,15 +1483,14 @@ void BackendImpl::PackageImpl::scanBundle(
subType
.
equalsIgnoreAsciiCase
(
"vnd.sun.star.package-bundle-description"
))
{
// check locale:
auto
const
iterLocale
=
params
.
find
(
"locale"
);
if
(
iterLocale
==
params
.
end
())
{
param
=
params
.
find
(
"locale"
);
if
(
param
==
0
)
{
if
(
descrFile
.
isEmpty
())
descrFile
=
url
;
}
else
{
// match best locale:
LanguageTag
descrTag
(
iter
->
second
.
m_sValue
);
LanguageTag
descrTag
(
param
->
m_sValue
);
if
(
officeLocale
.
getLanguage
()
==
descrTag
.
getLanguage
())
{
size_t
nPenalty
=
nPenaltyMax
;
...
...
include/tools/inetmime.hxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -19,6 +19,8 @@
#ifndef INCLUDED_TOOLS_INETMIME_HXX
#define INCLUDED_TOOLS_INETMIME_HXX
#include <boost/ptr_container/ptr_vector.hpp>
#include <tools/toolsdllapi.h>
#include <rtl/alloc.h>
#include <rtl/character.hxx>
...
...
@@ -29,81 +31,11 @@
#include <tools/debug.hxx>
#include <tools/errcode.hxx>
#include <unordered_map>
class
DateTime
;
class
INetContentTypeParameterList
;
class
INetMIMECharsetList_Impl
;
class
INetMIMEOutputSink
;
struct
INetContentTypeParameter
{
/** The name of the attribute, in US-ASCII encoding and converted to lower
case. If a parameter value is split as described in RFC 2231, there
will only be one item for the complete parameter, with the attribute
name lacking any section suffix.
*/
const
OString
m_sAttribute
;
/** The optional character set specification (see RFC 2231), in US-ASCII
encoding and converted to lower case.
*/
const
OString
m_sCharset
;
/** The optional language specification (see RFC 2231), in US-ASCII
encoding and converted to lower case.
*/
const
OString
m_sLanguage
;
/** The attribute value. If the value is a quoted-string, it is
'unpacked.' If a character set is specified, and the value can be
converted to Unicode, this is done. Also, if no character set is
specified, it is first tried to convert the value from UTF-8 encoding
to Unicode, and if that doesn't work (because the value is not in
UTF-8 encoding), it is converted from ISO-8859-1 encoding to Unicode
(which will always work). But if a character set is specified and the
value cannot be converted from that character set to Unicode, special
action is taken to produce a value that can possibly be transformed
back into its original form: Any 8-bit character from a non-encoded
part of the original value is directly converted to Unicode
(effectively handling it as if it was ISO-8859-1 encoded), and any
8-bit character from an encoded part of the original value is mapped
to the range U+F800..U+F8FF at the top of the Corporate Use Subarea
within Unicode's Private Use Area (effectively adding 0xF800 to the
character's numeric value).
*/
const
OUString
m_sValue
;
/** This is true if the value is successfully converted to Unicode, and
false if the value is a special mixture of ISO-LATIN-1 characters and
characters from Unicode's Private Use Area.
*/
const
bool
m_bConverted
;
INetContentTypeParameter
(
const
OString
&
rTheAttribute
,
const
OString
&
rTheCharset
,
const
OString
&
rTheLanguage
,
const
OUString
&
rTheValue
,
bool
bTheConverted
)
:
m_sAttribute
(
rTheAttribute
)
,
m_sCharset
(
rTheCharset
)
,
m_sLanguage
(
rTheLanguage
)
,
m_sValue
(
rTheValue
)
,
m_bConverted
(
bTheConverted
)
{
}
};
struct
OString_equalsIgnoreAsciiCase
{
bool
operator
()(
const
OString
&
r1
,
const
OString
&
r2
)
const
{
return
r1
.
equalsIgnoreAsciiCase
(
r2
);
}
};
// the key is the m_sAttribute again
typedef
std
::
unordered_map
<
OString
,
INetContentTypeParameter
,
OStringHash
,
OString_equalsIgnoreAsciiCase
>
INetContentTypeParameterList
;
class
TOOLS_DLLPUBLIC
INetMIME
{
public
:
...
...
@@ -1003,6 +935,80 @@ inline bool INetMIMEEncodedWordOutputSink::flush()
return
m_ePrevCoding
!=
CODING_NONE
;
}
struct
INetContentTypeParameter
{
/** The name of the attribute, in US-ASCII encoding and converted to lower
case. If a parameter value is split as described in RFC 2231, there
will only be one item for the complete parameter, with the attribute
name lacking any section suffix.
*/
const
OString
m_sAttribute
;
/** The optional character set specification (see RFC 2231), in US-ASCII
encoding and converted to lower case.
*/
const
OString
m_sCharset
;
/** The optional language specification (see RFC 2231), in US-ASCII
encoding and converted to lower case.
*/
const
OString
m_sLanguage
;
/** The attribute value. If the value is a quoted-string, it is
'unpacked.' If a character set is specified, and the value can be
converted to Unicode, this is done. Also, if no character set is
specified, it is first tried to convert the value from UTF-8 encoding
to Unicode, and if that doesn't work (because the value is not in
UTF-8 encoding), it is converted from ISO-8859-1 encoding to Unicode
(which will always work). But if a character set is specified and the
value cannot be converted from that character set to Unicode, special
action is taken to produce a value that can possibly be transformed
back into its original form: Any 8-bit character from a non-encoded
part of the original value is directly converted to Unicode
(effectively handling it as if it was ISO-8859-1 encoded), and any
8-bit character from an encoded part of the original value is mapped
to the range U+F800..U+F8FF at the top of the Corporate Use Subarea
within Unicode's Private Use Area (effectively adding 0xF800 to the
character's numeric value).
*/
const
OUString
m_sValue
;
/** This is true if the value is successfully converted to Unicode, and
false if the value is a special mixture of ISO-LATIN-1 characters and
characters from Unicode's Private Use Area.
*/
const
bool
m_bConverted
;
INetContentTypeParameter
(
const
OString
&
rTheAttribute
,
const
OString
&
rTheCharset
,
const
OString
&
rTheLanguage
,
const
OUString
&
rTheValue
,
bool
bTheConverted
)
:
m_sAttribute
(
rTheAttribute
)
,
m_sCharset
(
rTheCharset
)
,
m_sLanguage
(
rTheLanguage
)
,
m_sValue
(
rTheValue
)
,
m_bConverted
(
bTheConverted
)
{
}
};
class
TOOLS_DLLPUBLIC
INetContentTypeParameterList
{
public
:
void
Clear
();
void
Append
(
INetContentTypeParameter
*
pParameter
)
{
maEntries
.
push_back
(
pParameter
);
}
const
INetContentTypeParameter
*
find
(
const
OString
&
rAttribute
)
const
;
private
:
boost
::
ptr_vector
<
INetContentTypeParameter
>
maEntries
;
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
svl/qa/unit/test_INetContentType.cxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -48,7 +48,8 @@ void Test::testBad() {
CPPUNIT_ASSERT
(
!
INetContentTypes
::
parse
(
in
,
t
,
s
,
&
ps
));
CPPUNIT_ASSERT
(
t
.
isEmpty
());
CPPUNIT_ASSERT
(
s
.
isEmpty
());
CPPUNIT_ASSERT
(
ps
.
end
()
==
ps
.
find
(
"foo"
));
CPPUNIT_ASSERT_EQUAL
(
static_cast
<
INetContentTypeParameter
const
*>
(
0
),
ps
.
find
(
"foo"
));
}
void
Test
::
testFull
()
{
...
...
@@ -62,9 +63,9 @@ void Test::testFull() {
CPPUNIT_ASSERT
(
INetContentTypes
::
parse
(
in
,
t
,
s
,
&
ps
));
CPPUNIT_ASSERT_EQUAL
(
OUString
(
"foo"
),
t
);
CPPUNIT_ASSERT_EQUAL
(
OUString
(
"bar"
),
s
);
auto
iter
=
ps
.
find
(
"baz"
);
CPPUNIT_ASSERT
(
iter
!=
ps
.
end
()
);
CPPUNIT_ASSERT_EQUAL
(
OUString
(
"boz"
),
iter
->
second
.
m_sValue
);
INetContentTypeParameter
const
*
p
=
ps
.
find
(
"baz"
);
CPPUNIT_ASSERT
(
p
!=
0
);
CPPUNIT_ASSERT_EQUAL
(
OUString
(
"boz"
),
p
->
m_sValue
);
}
void
Test
::
testFollow
()
{
...
...
@@ -78,7 +79,8 @@ void Test::testFollow() {
CPPUNIT_ASSERT
(
!
INetContentTypes
::
parse
(
in
,
t
,
s
));
CPPUNIT_ASSERT
(
t
.
isEmpty
());
CPPUNIT_ASSERT
(
s
.
isEmpty
());
CPPUNIT_ASSERT
(
ps
.
end
()
==
ps
.
find
(
"baz"
));
CPPUNIT_ASSERT_EQUAL
(
static_cast
<
INetContentTypeParameter
const
*>
(
0
),
ps
.
find
(
"baz"
));
}
CPPUNIT_TEST_SUITE_REGISTRATION
(
Test
);
...
...
svtools/source/svhtml/parhtml.cxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -2092,10 +2092,9 @@ rtl_TextEncoding HTMLParser::GetEncodingByMIME( const OUString& rMime )
INetContentTypeParameterList
aParameters
;
if
(
INetContentTypes
::
parse
(
rMime
,
sType
,
sSubType
,
&
aParameters
))
{
auto
const
iter
=
aParameters
.
find
(
"charset"
);
if
(
iter
!=
aParameters
.
end
()
)
const
INetContentTypeParameter
*
pCharset
=
aParameters
.
find
(
"charset"
);
if
(
pCharset
!=
0
)
{
const
INetContentTypeParameter
*
pCharset
=
&
iter
->
second
;
OString
sValue
(
OUStringToOString
(
pCharset
->
m_sValue
,
RTL_TEXTENCODING_ASCII_US
));
return
GetExtendedCompatibilityTextEncoding
(
rtl_getTextEncodingFromMimeCharset
(
sValue
.
getStr
()
)
);
}
...
...
tools/source/inet/inetmime.cxx
Dosyayı görüntüle @
ec243f43
...
...
@@ -257,7 +257,7 @@ bool parseParameters(ParameterList const & rInput,
INetContentTypeParameterList
*
pOutput
)
{
if
(
pOutput
)
pOutput
->
c
lear
();
pOutput
->
C
lear
();
Parameter
*
pPrev
=
0
;
for
(
Parameter
*
p
=
rInput
.
m_pList
;
p
;
p
=
p
->
m_pNext
)
...
...
@@ -335,14 +335,11 @@ bool parseParameters(ParameterList const & rInput,
break
;
};
}
auto
const
ret
=
pOutput
->
insert
(
std
::
make_pair
(
p
->
m_aAttribute
,
INetContentTypeParameter
(
p
->
m_aAttribute
,
pOutput
->
Append
(
new
INetContentTypeParameter
(
p
->
m_aAttribute
,
p
->
m_aCharset
,
p
->
m_aLanguage
,
aValue
,
!
bBadEncoding
)));
SAL_INFO_IF
(
!
ret
.
second
,
"tools"
,
"INetMIME: dropping duplicate parameter: "
<<
p
->
m_aAttribute
);
!
bBadEncoding
));
p
=
pNext
;
}
return
true
;
...
...
@@ -3741,4 +3738,24 @@ INetMIMEEncodedWordOutputSink::WriteUInt32(sal_uInt32 nChar)
return
*
this
;
}
// INetContentTypeParameterList
void
INetContentTypeParameterList
::
Clear
()
{
maEntries
.
clear
();
}
const
INetContentTypeParameter
*
INetContentTypeParameterList
::
find
(
const
OString
&
rAttribute
)
const
{
boost
::
ptr_vector
<
INetContentTypeParameter
>::
const_iterator
iter
;
for
(
iter
=
maEntries
.
begin
();
iter
!=
maEntries
.
end
();
++
iter
)
{
if
(
iter
->
m_sAttribute
.
equalsIgnoreAsciiCase
(
rAttribute
))
return
&
(
*
iter
);
}
return
NULL
;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment