[Libreoffice-commits] core.git: sw/inc sw/source sw/uiconfig
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue Nov 13 13:03:41 UTC 2018
sw/inc/shellio.hxx | 5 +++
sw/source/filter/ascii/wrtasc.cxx | 18 ++++++++++--
sw/source/filter/basflt/fltini.cxx | 15 ++++++++++
sw/source/ui/dialog/ascfldlg.cxx | 41 +++++++++++++++++++++++++++-
sw/source/uibase/inc/ascfldlg.hxx | 4 ++
sw/uiconfig/swriter/ui/asciifilterdialog.ui | 16 ++++++++++
6 files changed, 95 insertions(+), 4 deletions(-)
New commits:
commit 607ab542d043c24bfbd6a08bb62fbebd095114e3
Author: Martin van Zijl <martin.vanzijl at gmail.com>
AuthorDate: Tue Feb 27 07:35:25 2018 +1300
Commit: Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Tue Nov 13 14:03:18 2018 +0100
Fix tdf#44291. Allow saving text without byte-order mark.
Change-Id: Ib16a4f37adcb2cfb3d2af9b6af21a4b32e4ae54c
Reviewed-on: https://gerrit.libreoffice.org/50388
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
diff --git a/sw/inc/shellio.hxx b/sw/inc/shellio.hxx
index 137cc4e4b50a..2e1e8b8af4f9 100644
--- a/sw/inc/shellio.hxx
+++ b/sw/inc/shellio.hxx
@@ -66,6 +66,7 @@ class SW_DLLPUBLIC SwAsciiOptions
rtl_TextEncoding eCharSet;
LanguageType nLanguage;
LineEnd eCRLF_Flag;
+ bool bIncludeBOM; // Whether to include a byte-order-mark in the output.
public:
@@ -81,12 +82,16 @@ public:
LineEnd GetParaFlags() const { return eCRLF_Flag; }
void SetParaFlags( LineEnd eVal ) { eCRLF_Flag = eVal; }
+ bool GetIncludeBOM() const { return bIncludeBOM; }
+ void SetIncludeBOM( bool bVal ) { bIncludeBOM = bVal; }
+
void Reset()
{
sFont.clear();
eCRLF_Flag = GetSystemLineEnd();
eCharSet = ::osl_getThreadTextEncoding();
nLanguage = LANGUAGE_SYSTEM;
+ bIncludeBOM = true;
}
// for the automatic conversion (mail/news/...)
void ReadUserData( const OUString& );
diff --git a/sw/source/filter/ascii/wrtasc.cxx b/sw/source/filter/ascii/wrtasc.cxx
index b8964aaadd8b..c5f6f3fba971 100644
--- a/sw/source/filter/ascii/wrtasc.cxx
+++ b/sw/source/filter/ascii/wrtasc.cxx
@@ -85,6 +85,8 @@ SwASCWriter::~SwASCWriter() {}
ErrCode SwASCWriter::WriteStream()
{
+ bool bIncludeBOM = GetAsciiOptions().GetIncludeBOM();
+
if( m_bASCII_ParaAsCR ) // If predefined
m_sLineEnd = "\015";
else if( m_bASCII_ParaAsBlank )
@@ -154,15 +156,25 @@ ErrCode SwASCWriter::WriteStream()
switch(GetAsciiOptions().GetCharSet())
{
case RTL_TEXTENCODING_UTF8:
- Strm().WriteUChar( 0xEF ).WriteUChar( 0xBB ).WriteUChar( 0xBF );
+ if( bIncludeBOM )
+ {
+ Strm().WriteUChar( 0xEF ).WriteUChar( 0xBB ).WriteUChar( 0xBF );
+ }
+
break;
case RTL_TEXTENCODING_UCS2:
#ifdef OSL_LITENDIAN
Strm().SetEndian(SvStreamEndian::LITTLE);
- Strm().WriteUChar( 0xFF ).WriteUChar( 0xFE );
+ if( bIncludeBOM )
+ {
+ Strm().WriteUChar( 0xFF ).WriteUChar( 0xFE );
+ }
#else
Strm().SetEndian(SvStreamEndian::BIG);
- Strm().WriteUChar( 0xFE ).WriteUChar( 0xFF );
+ if( bIncludeBOM )
+ {
+ Strm().WriteUChar( 0xFE ).WriteUChar( 0xFF );
+ }
#endif
break;
diff --git a/sw/source/filter/basflt/fltini.cxx b/sw/source/filter/basflt/fltini.cxx
index 16756e475729..8ecd122d8757 100644
--- a/sw/source/filter/basflt/fltini.cxx
+++ b/sw/source/filter/basflt/fltini.cxx
@@ -570,6 +570,7 @@ OUString NameFromCharSet(rtl_TextEncoding nChrSet)
// 2. LineEnd - as CR/LR/CRLF
// 3. Fontname
// 4. Language
+// 5. Whether to include byte-order-mark
// the delimiter character is ","
void SwAsciiOptions::ReadUserData( const OUString& rStr )
@@ -599,6 +600,9 @@ void SwAsciiOptions::ReadUserData( const OUString& rStr )
case 3: // Language
nLanguage = LanguageTag::convertToLanguageTypeWithFallback( sToken );
break;
+ case 4:
+ bIncludeBOM = !(sToken.equalsIgnoreAsciiCase("FALSE"));
+ break;
}
}
++nCnt;
@@ -634,6 +638,17 @@ void SwAsciiOptions::WriteUserData(OUString& rStr)
rStr += LanguageTag::convertToBcp47(nLanguage);
}
rStr += ",";
+
+ // 5. Whether to include byte-order-mark
+ if( bIncludeBOM )
+ {
+ rStr += "true";
+ }
+ else
+ {
+ rStr += "false";
+ }
+ rStr += ",";
}
#ifdef DISABLE_DYNLOADING
diff --git a/sw/source/ui/dialog/ascfldlg.cxx b/sw/source/ui/dialog/ascfldlg.cxx
index 3b36d6f858d2..1637fc70c56d 100644
--- a/sw/source/ui/dialog/ascfldlg.cxx
+++ b/sw/source/ui/dialog/ascfldlg.cxx
@@ -71,6 +71,7 @@ SwAsciiFilterDlg::SwAsciiFilterDlg( weld::Window* pParent, SwDocShell& rDocSh,
, m_xCRLF_RB(m_xBuilder->weld_radio_button("crlf"))
, m_xCR_RB(m_xBuilder->weld_radio_button("cr"))
, m_xLF_RB(m_xBuilder->weld_radio_button("lf"))
+ , m_xIncludeBOM_CB(m_xBuilder->weld_check_button("includebom"))
{
m_xFontLB->make_sorted();
@@ -222,6 +223,8 @@ SwAsciiFilterDlg::SwAsciiFilterDlg( weld::Window* pParent, SwDocShell& rDocSh,
pPrt.disposeAndClear();
}
+ // hide the unused Controls for Export
+ m_xIncludeBOM_CB->hide();
}
else
{
@@ -230,6 +233,10 @@ SwAsciiFilterDlg::SwAsciiFilterDlg( weld::Window* pParent, SwDocShell& rDocSh,
m_xFontLB->hide();
m_xLanguageFT->hide();
m_xLanguageLB->hide();
+
+
+ SetIncludeBOM(aOpt.GetIncludeBOM());
+ m_xIncludeBOM_CB->save_state();
}
// initialize character set
@@ -246,6 +253,8 @@ SwAsciiFilterDlg::SwAsciiFilterDlg( weld::Window* pParent, SwDocShell& rDocSh,
m_xCRLF_RB->save_state();
m_xLF_RB->save_state();
m_xCR_RB->save_state();
+
+ UpdateIncludeBOMSensitiveState();
}
SwAsciiFilterDlg::~SwAsciiFilterDlg()
@@ -269,6 +278,7 @@ void SwAsciiFilterDlg::FillOptions( SwAsciiOptions& rOptions )
rOptions.SetCharSet( rtl_TextEncoding( nCCode ) );
rOptions.SetLanguage( nLng );
rOptions.SetParaFlags( GetCRLF() );
+ rOptions.SetIncludeBOM( GetIncludeBOM() );
// save the user settings
OUString sData;
@@ -319,7 +329,34 @@ LineEnd SwAsciiFilterDlg::GetCRLF() const
return eEnd;
}
-IMPL_LINK_NOARG( SwAsciiFilterDlg, CharSetSelHdl, weld::ComboBox&, void )
+void SwAsciiFilterDlg::SetIncludeBOM( bool bIncludeBOM )
+{
+ m_xIncludeBOM_CB->set_state(bIncludeBOM ? TRISTATE_TRUE : TRISTATE_FALSE);
+}
+
+bool SwAsciiFilterDlg::GetIncludeBOM() const
+{
+ return m_xIncludeBOM_CB->get_state() != TRISTATE_FALSE;
+}
+
+void SwAsciiFilterDlg::UpdateIncludeBOMSensitiveState()
+{
+ if (m_xIncludeBOM_CB->get_visible())
+ {
+ switch (m_xCharSetLB->GetSelectTextEncoding())
+ {
+ case RTL_TEXTENCODING_UTF8:
+ case RTL_TEXTENCODING_UCS2:
+ m_xIncludeBOM_CB->set_sensitive(true);
+ break;
+ default:
+ m_xIncludeBOM_CB->set_sensitive(false);
+ break;
+ }
+ }
+}
+
+IMPL_LINK_NOARG(SwAsciiFilterDlg, CharSetSelHdl, weld::ComboBox&, void)
{
LineEnd eOldEnd = GetCRLF(), eEnd = LineEnd(-1);
LanguageType nLng = m_xFontLB->get_visible()
@@ -391,6 +428,8 @@ IMPL_LINK_NOARG( SwAsciiFilterDlg, CharSetSelHdl, weld::ComboBox&, void )
if (nOldLng != nLng && m_xFontLB->get_visible())
m_xLanguageLB->set_active_id(nLng);
+
+ UpdateIncludeBOMSensitiveState();
}
IMPL_LINK(SwAsciiFilterDlg, LineEndHdl, weld::ToggleButton&, rBtn, void)
diff --git a/sw/source/uibase/inc/ascfldlg.hxx b/sw/source/uibase/inc/ascfldlg.hxx
index 038d57098b85..1a1fb115ba12 100644
--- a/sw/source/uibase/inc/ascfldlg.hxx
+++ b/sw/source/uibase/inc/ascfldlg.hxx
@@ -43,11 +43,15 @@ class SwAsciiFilterDlg : public SfxDialogController
std::unique_ptr<weld::RadioButton> m_xCRLF_RB;
std::unique_ptr<weld::RadioButton> m_xCR_RB;
std::unique_ptr<weld::RadioButton> m_xLF_RB;
+ std::unique_ptr<weld::CheckButton> m_xIncludeBOM_CB;
DECL_LINK(CharSetSelHdl, weld::ComboBox&, void);
DECL_LINK(LineEndHdl, weld::ToggleButton&, void);
void SetCRLF( LineEnd eEnd );
LineEnd GetCRLF() const;
+ void SetIncludeBOM( bool bIncludeBOM );
+ bool GetIncludeBOM() const;
+ void UpdateIncludeBOMSensitiveState();
public:
// CTOR: for import - pStream is the inputstream
diff --git a/sw/uiconfig/swriter/ui/asciifilterdialog.ui b/sw/uiconfig/swriter/ui/asciifilterdialog.ui
index 2338fc8cb706..52b382558059 100644
--- a/sw/uiconfig/swriter/ui/asciifilterdialog.ui
+++ b/sw/uiconfig/swriter/ui/asciifilterdialog.ui
@@ -253,6 +253,22 @@
<property name="top_attach">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="includebom">
+ <property name="label" translatable="yes" context="asciifilterdialog|includebom">Include byte-order-mark</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">4</property>
+ <property name="width">2</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
</object>
</child>
</object>
More information about the Libreoffice-commits
mailing list