Convert smart quotes and dashes to ASCII in DRC rules.

Fixes https://gitlab.com/kicad/code/kicad/issues/5135
This commit is contained in:
Jeff Young 2020-08-10 18:16:22 +01:00
parent 0a6a91b5ad
commit de6314e3b5
2 changed files with 41 additions and 4 deletions

View File

@ -23,10 +23,12 @@
#include <fctsys.h> #include <fctsys.h>
#include <kicad_string.h>
#include <scintilla_tricks.h> #include <scintilla_tricks.h>
#include <wx/stc/stc.h> #include <wx/stc/stc.h>
#include <gal/color4d.h> #include <gal/color4d.h>
#include <dialog_shim.h> #include <dialog_shim.h>
#include <wx/clipbrd.h>
SCINTILLA_TRICKS::SCINTILLA_TRICKS( wxStyledTextCtrl* aScintilla, const wxString& aBraces ) : SCINTILLA_TRICKS::SCINTILLA_TRICKS( wxStyledTextCtrl* aScintilla, const wxString& aBraces ) :
m_te( aScintilla ), m_te( aScintilla ),
@ -66,7 +68,13 @@ SCINTILLA_TRICKS::SCINTILLA_TRICKS( wxStyledTextCtrl* aScintilla, const wxString
void SCINTILLA_TRICKS::onCharHook( wxKeyEvent& aEvent ) void SCINTILLA_TRICKS::onCharHook( wxKeyEvent& aEvent )
{ {
if( aEvent.GetKeyCode() == WXK_TAB ) wxString c = aEvent.GetUnicodeKey();
if( ConvertSmartQuotesAndDashes( &c ) )
{
m_te->AddText( c );
}
else if( aEvent.GetKeyCode() == WXK_TAB )
{ {
if( aEvent.ControlDown() ) if( aEvent.ControlDown() )
{ {
@ -107,7 +115,25 @@ void SCINTILLA_TRICKS::onCharHook( wxKeyEvent& aEvent )
} }
else if( aEvent.GetModifiers() == wxMOD_CONTROL && aEvent.GetKeyCode() == 'V' ) else if( aEvent.GetModifiers() == wxMOD_CONTROL && aEvent.GetKeyCode() == 'V' )
{ {
m_te->Paste(); if( m_te->GetSelectionEnd() > m_te->GetSelectionStart() )
m_te->DeleteBack();
if( wxTheClipboard->Open() )
{
if( wxTheClipboard->IsSupported( wxDF_TEXT ) )
{
wxTextDataObject data;
wxString str;
wxTheClipboard->GetData( data );
str = data.GetText();
ConvertSmartQuotesAndDashes( &str );
m_te->AddText( str );
}
wxTheClipboard->Close();
}
} }
else if( aEvent.GetKeyCode() == WXK_BACK ) else if( aEvent.GetKeyCode() == WXK_BACK )
{ {

View File

@ -294,7 +294,18 @@ bool PANEL_SETUP_RULES::TransferDataToWindow()
wxFileName rulesFile( rulesFilepath ); wxFileName rulesFile( rulesFilepath );
if( rulesFile.FileExists() ) if( rulesFile.FileExists() )
m_textEditor->LoadFile( rulesFile.GetFullPath() ); {
wxTextFile file( rulesFile.GetFullPath() );
if( file.Open() )
{
for ( wxString str = file.GetFirstLine(); !file.Eof(); str = file.GetNextLine() )
{
ConvertSmartQuotesAndDashes( &str );
m_textEditor->AddText( str << '\n' );
}
}
}
m_originalText = m_textEditor->GetText(); m_originalText = m_textEditor->GetText();
@ -309,7 +320,7 @@ bool PANEL_SETUP_RULES::TransferDataFromWindow()
try try
{ {
std::vector<DRC_RULE*> dummyRules; std::vector<DRC_RULE*> dummyRules;
DRC_RULES_PARSER parser( m_frame->GetBoard(), m_textEditor->GetText(), _( "DRC rules" ) ); DRC_RULES_PARSER parser( m_frame->GetBoard(), m_textEditor->GetText(), _( "DRC rules" ) );