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
3a934d92
Kaydet (Commit)
3a934d92
authored
Şub 26, 2013
tarafından
Miklos Vajna
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
msfilter: support checking if conversion to legacy encoding is lossless or not
Change-Id: I69405c5883af6d3b119b177f51229c8a78f8c24d
üst
5baf32af
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
8 deletions
+62
-8
rtfutil.hxx
filter/inc/filter/msfilter/rtfutil.hxx
+20
-3
rtfutil.cxx
filter/source/msfilter/rtfutil.cxx
+42
-5
No files found.
filter/inc/filter/msfilter/rtfutil.hxx
Dosyayı görüntüle @
3a934d92
...
...
@@ -41,10 +41,27 @@ namespace rtfutil {
MSFILTER_DLLPUBLIC
OString
OutHex
(
sal_uLong
nHex
,
sal_uInt8
nLen
);
/// Handles correct unicode and legacy export of a single character.
MSFILTER_DLLPUBLIC
OString
OutChar
(
sal_Unicode
c
,
int
*
pUCMode
,
rtl_TextEncoding
eDestEnc
);
MSFILTER_DLLPUBLIC
OString
OutChar
(
sal_Unicode
c
,
int
*
pUCMode
,
rtl_TextEncoding
eDestEnc
,
bool
*
pSuccess
=
0
,
bool
bUnicode
=
true
);
/// Handles correct unicode and legacy export of a string.
MSFILTER_DLLPUBLIC
OString
OutString
(
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
);
/**
* Handles correct unicode and legacy export of a string.
*
* @param rStr the string to export
* @param eDestEnc the legacy encoding to use
* @param bUnicode if unicode output is wanted as well, or just legacy
*/
MSFILTER_DLLPUBLIC
OString
OutString
(
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
,
bool
bUnicode
=
true
);
/**
* Handles correct unicode and legacy export of a string, when a
* '{' \upr '{' keyword ansi_text '}{\*' \ud '{' keyword Unicode_text '}}}'
* construct should be used.
*
* @param pToken the keyword
* @param rStr the text to export
* @param eDestEnc the legacy encoding to use
*/
MSFILTER_DLLPUBLIC
OString
OutStringUpr
(
const
sal_Char
*
pToken
,
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
);
}
}
...
...
filter/source/msfilter/rtfutil.cxx
Dosyayı görüntüle @
3a934d92
...
...
@@ -53,8 +53,10 @@ OString OutHex(sal_uLong nHex, sal_uInt8 nLen)
return
OString
(
pStr
);
}
OString
OutChar
(
sal_Unicode
c
,
int
*
pUCMode
,
rtl_TextEncoding
eDestEnc
)
OString
OutChar
(
sal_Unicode
c
,
int
*
pUCMode
,
rtl_TextEncoding
eDestEnc
,
bool
*
pSuccess
,
bool
bUnicode
)
{
if
(
pSuccess
)
*
pSuccess
=
true
;
OStringBuffer
aBuf
;
const
sal_Char
*
pStr
=
0
;
// 0x0b instead of \n, etc because of the replacements in SwWW8AttrIter::GetSnippet()
...
...
@@ -91,10 +93,13 @@ OString OutChar(sal_Unicode c, int *pUCMode, rtl_TextEncoding eDestEnc)
else
{
OUString
sBuf
(
&
c
,
1
);
OString
sConverted
;
sBuf
.
convertToString
(
&
sConverted
,
eDestEnc
,
OUSTRING_TO_OSTRING_CVTFLAGS
);
if
(
pSuccess
)
*
pSuccess
&=
sBuf
.
convertToString
(
&
sConverted
,
eDestEnc
,
RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR
|
RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR
);
else
sBuf
.
convertToString
(
&
sConverted
,
eDestEnc
,
OUSTRING_TO_OSTRING_CVTFLAGS
);
const
sal_Int32
nLen
=
sConverted
.
getLength
();
if
(
pUCMode
)
if
(
pUCMode
&&
bUnicode
)
{
if
(
*
pUCMode
!=
nLen
)
{
...
...
@@ -130,13 +135,13 @@ OString OutChar(sal_Unicode c, int *pUCMode, rtl_TextEncoding eDestEnc)
return
aBuf
.
makeStringAndClear
();
}
OString
OutString
(
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
)
OString
OutString
(
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
,
bool
bUnicode
)
{
SAL_INFO
(
"filter.ms"
,
OSL_THIS_FUNC
<<
", rStr = '"
<<
OUString
(
rStr
)
<<
"'"
);
OStringBuffer
aBuf
;
int
nUCMode
=
1
;
for
(
xub_StrLen
n
=
0
;
n
<
rStr
.
Len
();
++
n
)
aBuf
.
append
(
OutChar
(
rStr
.
GetChar
(
n
),
&
nUCMode
,
eDestEnc
));
aBuf
.
append
(
OutChar
(
rStr
.
GetChar
(
n
),
&
nUCMode
,
eDestEnc
,
0
,
bUnicode
));
if
(
nUCMode
!=
1
)
{
aBuf
.
append
(
OOO_STRING_SVTOOLS_RTF_UC
);
aBuf
.
append
((
sal_Int32
)
1
);
...
...
@@ -145,6 +150,38 @@ OString OutString(const String &rStr, rtl_TextEncoding eDestEnc)
return
aBuf
.
makeStringAndClear
();
}
/// Checks if lossless conversion of the string to eDestEnc is possible or not.
static
bool
TryOutString
(
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
)
{
int
nUCMode
=
1
;
for
(
xub_StrLen
n
=
0
;
n
<
rStr
.
Len
();
++
n
)
{
bool
bRet
;
OutChar
(
rStr
.
GetChar
(
n
),
&
nUCMode
,
eDestEnc
,
&
bRet
);
if
(
!
bRet
)
return
false
;
}
return
true
;
}
OString
OutStringUpr
(
const
sal_Char
*
pToken
,
const
String
&
rStr
,
rtl_TextEncoding
eDestEnc
)
{
if
(
TryOutString
(
rStr
,
eDestEnc
))
return
OString
(
"{"
)
+
pToken
+
" "
+
OutString
(
rStr
,
eDestEnc
)
+
"}"
;
OStringBuffer
aRet
;
aRet
.
append
(
"{"
OOO_STRING_SVTOOLS_RTF_UPR
"{"
);
aRet
.
append
(
pToken
);
aRet
.
append
(
" "
);
aRet
.
append
(
OutString
(
rStr
,
eDestEnc
,
/*bUnicode =*/
false
));
aRet
.
append
(
"}{"
OOO_STRING_SVTOOLS_RTF_IGNORE
OOO_STRING_SVTOOLS_RTF_UD
"{"
);
aRet
.
append
(
pToken
);
aRet
.
append
(
" "
);
aRet
.
append
(
OutString
(
rStr
,
eDestEnc
));
aRet
.
append
(
"}}}"
);
return
aRet
.
makeStringAndClear
();
}
}
}
...
...
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