Convert smart quotes and dashes to ASCII in DRC rules.
Fixes https://gitlab.com/kicad/code/kicad/issues/5135
This commit is contained in:
parent
0a6a91b5ad
commit
de6314e3b5
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -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" ) );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue