Add contexts to EDA_COMBINED_MATCHER.
This commit is contained in:
parent
6b349fdb0a
commit
18ac169ac7
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015-2017 Chris Pavlina <pavlina.chris@gmail.com>
|
* Copyright (C) 2015-2017 Chris Pavlina <pavlina.chris@gmail.com>
|
||||||
* Copyright (C) 2015-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2015-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -85,6 +85,20 @@ bool EDA_PATTERN_MATCH_REGEX::SetPattern( const wxString& aPattern )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool EDA_PATTERN_MATCH_REGEX_EXPLICIT::SetPattern( const wxString& aPattern )
|
||||||
|
{
|
||||||
|
wxString pattern( aPattern );
|
||||||
|
|
||||||
|
if( !pattern.StartsWith( wxT( "^" ) ) )
|
||||||
|
pattern = wxT( "^" ) + pattern;
|
||||||
|
|
||||||
|
if( !pattern.EndsWith( wxT( "$" ) ) )
|
||||||
|
pattern += wxT( "$" );
|
||||||
|
|
||||||
|
return EDA_PATTERN_MATCH_REGEX::SetPattern( pattern );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString const& EDA_PATTERN_MATCH_REGEX::GetPattern() const
|
wxString const& EDA_PATTERN_MATCH_REGEX::GetPattern() const
|
||||||
{
|
{
|
||||||
return m_pattern;
|
return m_pattern;
|
||||||
|
@ -349,16 +363,27 @@ const std::map<wxString, double> EDA_PATTERN_MATCH_RELATIONAL::m_units = {
|
||||||
{ "ti", 1099511627776. } };
|
{ "ti", 1099511627776. } };
|
||||||
|
|
||||||
|
|
||||||
EDA_COMBINED_MATCHER::EDA_COMBINED_MATCHER( const wxString& aPattern )
|
EDA_COMBINED_MATCHER::EDA_COMBINED_MATCHER( const wxString& aPattern,
|
||||||
|
COMBINED_MATCHER_CONTEXT aContext )
|
||||||
: m_pattern( aPattern )
|
: m_pattern( aPattern )
|
||||||
{
|
{
|
||||||
// Whatever syntax users prefer, it shall be matched.
|
switch( aContext )
|
||||||
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_REGEX>() );
|
{
|
||||||
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_WILDCARD>() );
|
case CTX_LIBITEM:
|
||||||
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_RELATIONAL>() );
|
// Whatever syntax users prefer, it shall be matched.
|
||||||
// If any of the above matchers couldn't be created because the pattern
|
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_REGEX>() );
|
||||||
// syntax does not match, the substring will try its best.
|
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_WILDCARD>() );
|
||||||
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_SUBSTR>() );
|
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_RELATIONAL>() );
|
||||||
|
// If any of the above matchers couldn't be created because the pattern
|
||||||
|
// syntax does not match, the substring will try its best.
|
||||||
|
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_SUBSTR>() );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CTX_NETCLASS:
|
||||||
|
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_REGEX_EXPLICIT>() );
|
||||||
|
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_WILDCARD_EXPLICIT>() );
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ void FOOTPRINT_FILTER::FilterByTextPattern( wxString const& aPattern )
|
||||||
while( tokenizer.HasMoreTokens() )
|
while( tokenizer.HasMoreTokens() )
|
||||||
{
|
{
|
||||||
const wxString term = tokenizer.GetNextToken().Lower();
|
const wxString term = tokenizer.GetNextToken().Lower();
|
||||||
m_pattern_filters.push_back( std::make_unique<EDA_COMBINED_MATCHER>( term ) );
|
m_pattern_filters.push_back( std::make_unique<EDA_COMBINED_MATCHER>( term, CTX_LIBITEM ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_filter_type |= FILTERING_BY_TEXT_PATTERN;
|
m_filter_type |= FILTERING_BY_TEXT_PATTERN;
|
||||||
|
|
|
@ -191,7 +191,7 @@ void LIB_TREE_MODEL_ADAPTER::UpdateSearchString( const wxString& aSearch, bool a
|
||||||
term = term.AfterFirst( ':' );
|
term = term.AfterFirst( ':' );
|
||||||
}
|
}
|
||||||
|
|
||||||
EDA_COMBINED_MATCHER matcher( term );
|
EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
|
||||||
|
|
||||||
m_tree.UpdateScore( matcher, lib );
|
m_tree.UpdateScore( matcher, lib );
|
||||||
}
|
}
|
||||||
|
|
|
@ -610,7 +610,7 @@ bool SYMBOL_VIEWER_FRAME::ReCreateLibList()
|
||||||
while( tokenizer.HasMoreTokens() )
|
while( tokenizer.HasMoreTokens() )
|
||||||
{
|
{
|
||||||
const wxString term = tokenizer.GetNextToken().Lower();
|
const wxString term = tokenizer.GetNextToken().Lower();
|
||||||
EDA_COMBINED_MATCHER matcher( term );
|
EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
|
||||||
int matches, position;
|
int matches, position;
|
||||||
|
|
||||||
for( const wxString& lib : libs )
|
for( const wxString& lib : libs )
|
||||||
|
@ -683,7 +683,7 @@ bool SYMBOL_VIEWER_FRAME::ReCreateSymbolList()
|
||||||
while( tokenizer.HasMoreTokens() )
|
while( tokenizer.HasMoreTokens() )
|
||||||
{
|
{
|
||||||
const wxString term = tokenizer.GetNextToken().Lower();
|
const wxString term = tokenizer.GetNextToken().Lower();
|
||||||
EDA_COMBINED_MATCHER matcher( term );
|
EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
|
||||||
int matches, position;
|
int matches, position;
|
||||||
|
|
||||||
for( LIB_SYMBOL* symbol : symbols )
|
for( LIB_SYMBOL* symbol : symbols )
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2015-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -112,6 +112,13 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class EDA_PATTERN_MATCH_REGEX_EXPLICIT : public EDA_PATTERN_MATCH_REGEX
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool SetPattern( const wxString& aPattern ) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class EDA_PATTERN_MATCH_WILDCARD : public EDA_PATTERN_MATCH_REGEX
|
class EDA_PATTERN_MATCH_WILDCARD : public EDA_PATTERN_MATCH_REGEX
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -167,10 +174,17 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum COMBINED_MATCHER_CONTEXT
|
||||||
|
{
|
||||||
|
CTX_LIBITEM,
|
||||||
|
CTX_NETCLASS
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class EDA_COMBINED_MATCHER
|
class EDA_COMBINED_MATCHER
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EDA_COMBINED_MATCHER( const wxString& aPattern );
|
EDA_COMBINED_MATCHER( const wxString& aPattern, COMBINED_MATCHER_CONTEXT aContext );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Look in all existing matchers, return the earliest match of any of
|
* Look in all existing matchers, return the earliest match of any of
|
||||||
|
|
|
@ -202,7 +202,7 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||||
// In viewer, the default net clearance is not known (it depends on the actual board).
|
// In viewer, the default net clearance is not known (it depends on the actual board).
|
||||||
// So we do not show the default clearance, by setting it to 0
|
// So we do not show the default clearance, by setting it to 0
|
||||||
// The footprint or pad specific clearance will be shown
|
// The footprint or pad specific clearance will be shown
|
||||||
GetBoard()->GetDesignSettings().GetDefault()->SetClearance( 0 );
|
GetBoard()->GetDesignSettings().m_NetSettings->m_DefaultNetClass->SetClearance( 0 );
|
||||||
|
|
||||||
// Don't show the default board solder mask clearance in the footprint viewer. Only the
|
// Don't show the default board solder mask clearance in the footprint viewer. Only the
|
||||||
// footprint or pad clearance setting should be shown if it is not 0.
|
// footprint or pad clearance setting should be shown if it is not 0.
|
||||||
|
@ -477,7 +477,7 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList()
|
||||||
while( tokenizer.HasMoreTokens() )
|
while( tokenizer.HasMoreTokens() )
|
||||||
{
|
{
|
||||||
const wxString term = tokenizer.GetNextToken().Lower();
|
const wxString term = tokenizer.GetNextToken().Lower();
|
||||||
EDA_COMBINED_MATCHER matcher( term );
|
EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
|
||||||
int matches, position;
|
int matches, position;
|
||||||
|
|
||||||
for( const wxString& nickname : nicknames )
|
for( const wxString& nickname : nicknames )
|
||||||
|
@ -554,7 +554,7 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList()
|
||||||
while( tokenizer.HasMoreTokens() )
|
while( tokenizer.HasMoreTokens() )
|
||||||
{
|
{
|
||||||
const wxString term = tokenizer.GetNextToken().Lower();
|
const wxString term = tokenizer.GetNextToken().Lower();
|
||||||
EDA_COMBINED_MATCHER matcher( term );
|
EDA_COMBINED_MATCHER matcher( term, CTX_LIBITEM );
|
||||||
int matches, position;
|
int matches, position;
|
||||||
|
|
||||||
for( const std::unique_ptr<FOOTPRINT_INFO>& footprint : fp_info_list->GetList() )
|
for( const std::unique_ptr<FOOTPRINT_INFO>& footprint : fp_info_list->GetList() )
|
||||||
|
|
Loading…
Reference in New Issue