From 0a6a91b5adebf47e8d42ca8853707caa430be101 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 10 Aug 2020 18:15:44 +0100 Subject: [PATCH] Convert smart quotes and dashes in reports to ASCII quotes and dashes. Fixes https://gitlab.com/kicad/code/kicad/issues/1861 --- common/dialogs/wx_html_report_panel.cpp | 6 +++++- common/string.cpp | 27 +++++++++++++++++++++++++ include/kicad_string.h | 7 +++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/common/dialogs/wx_html_report_panel.cpp b/common/dialogs/wx_html_report_panel.cpp index eb8910a26a..be67fe88d5 100644 --- a/common/dialogs/wx_html_report_panel.cpp +++ b/common/dialogs/wx_html_report_panel.cpp @@ -26,6 +26,7 @@ #include #include #include +#include WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow* parent, wxWindowID id, @@ -343,7 +344,10 @@ void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event ) for( const REPORT_LINE& l : m_report ) { - f.Write( generatePlainText( l ) ); + wxString s = generatePlainText( l ); + + ConvertSmartQuotesAndDashes( &s ); + f.Write( s ); } m_ReportFileName = fn.GetFullPath(); f.Close(); diff --git a/common/string.cpp b/common/string.cpp index bafc0abae5..b468da163a 100644 --- a/common/string.cpp +++ b/common/string.cpp @@ -40,6 +40,33 @@ static const char illegalFileNameChars[] = "\\/:\"<>|"; +bool ConvertSmartQuotesAndDashes( wxString* aString ) +{ + bool retVal = false; + + for( wxString::iterator ii = aString->begin(); ii != aString->end(); ++ii ) + { + if( *ii == L'\u0060' || *ii == L'\u00B4' || *ii == L'\u2018' || *ii == L'\u2019' ) + { + *ii = '\''; + retVal = true; + } + if( *ii == L'\u201C' || *ii == L'\u201D' ) + { + *ii = '"'; + retVal = true; + } + if( *ii == L'\u2013' || *ii == L'\u2014' ) + { + *ii = '-'; + retVal = true; + } + } + + return retVal; +} + + /** * These Escape/Unescape routines use HTML-entity-reference-style encoding to handle * characters which are: diff --git a/include/kicad_string.h b/include/kicad_string.h index 692ec505b6..3cdbb6da79 100644 --- a/include/kicad_string.h +++ b/include/kicad_string.h @@ -38,6 +38,13 @@ #include +/** + * Converts curly quotes and em/en dashes to straight quotes and dashes. + * @param aString + * @return true if any characters required conversion. + */ +bool ConvertSmartQuotesAndDashes( wxString* aString ); + /** * Escape/Unescape routines to safely encode reserved-characters in various * contexts.