20#ifndef DRC_RE_BASE_CONSTRAINT_DATA_H_
21#define DRC_RE_BASE_CONSTRAINT_DATA_H_
150 if( aRuleName.IsEmpty() )
151 return wxString( wxS(
"\"\"" ) );
153 bool needsQuoting =
false;
157 for(
size_t ii = 0; ii <
sizeof( ruleName ) && ii < aRuleName.size(); ++ii )
158 ruleName[ii] = aRuleName[ii];
160 if(
DSNLEXER::isNumber( ruleName, ruleName + std::min( aRuleName.size(),
sizeof( ruleName ) ) ) )
166 for( wxUniChar c : aRuleName )
168 if( !( wxIsalnum( c ) || c ==
'_' || c ==
'-' || c ==
'.' ) )
180 return wxString( wxS(
"\"" ) ) + escaped + wxS(
"\"" );
191 wxString
result( aValue );
193 if( !
result.Contains(
'.' ) )
199 if(
result.Last() ==
'.' )
207 wxString formatted = wxString::FromCDouble( aValue, aPrecision );
212 const std::vector<wxString>& aConstraintClauses )
const
217 if( !aContext.
comment.IsEmpty() )
219 wxArrayString lines = wxSplit( aContext.
comment,
'\n',
'\0' );
221 for(
const wxString& line : lines )
226 rule << wxS(
"\t# " ) << line << wxS(
"\n" );
234 if( aContext.
layerClause.StartsWith( wxS(
"(condition " ) ) )
236 wxString expr = aContext.
layerClause.AfterFirst(
'"' ).BeforeLast(
'"' );
238 if( !condExpr.IsEmpty() )
239 condExpr = expr + wxS(
" && " ) + condExpr;
245 rule << wxS(
"\t" ) << aContext.
layerClause << wxS(
"\n" );
249 for(
const wxString& clause : aConstraintClauses )
251 if( clause.IsEmpty() )
254 rule << wxS(
"\t" ) << clause << wxS(
"\n" );
257 if( !condExpr.IsEmpty() )
258 rule << wxS(
"\t(condition \"" ) <<
quoteString( condExpr ) << wxS(
"\")\n" );
BITMAPS
A list of all bitmap identifiers.
wxString GetConstraintCode() const
virtual VALIDATION_RESULT Validate() const
Validates the constraint data.
wxString m_layerSource
Original layer text: "inner", "outer", or layer name.
static wxString quoteString(const wxString &aCondition)
static wxString formatRuleName(const wxString &aRuleName)
Format a rule name for use in S-expression output while preserving the exact name the user chose.
void SetConstraintCode(const wxString &aCode)
static wxString formatDouble(double aValue, int aPrecision=6)
void SetLayers(std::vector< PCB_LAYER_ID > aLayers)
void SetGeneratedRule(const wxString &aRule)
virtual ~DRC_RE_BASE_CONSTRAINT_DATA()=default
SEVERITY GetSeverity() const
void SetLayerSource(const wxString &aSource)
virtual std::vector< wxString > GetConstraintClauses(const RULE_GENERATION_CONTEXT &aContext) const
Returns just the constraint clauses without the rule wrapper.
wxString m_constraintCode
int GetOriginalEntryCount() const
void SetWasEdited(bool aEdited)
virtual std::vector< DRC_RE_FIELD_POSITION > GetFieldPositions() const
Returns the field positions for controls overlaid on the constraint bitmap.
wxString buildRule(const RULE_GENERATION_CONTEXT &aContext, const std::vector< wxString > &aConstraintClauses) const
wxString GetLayerSource()
static wxString trimTrailingZeros(const wxString &aValue)
DRC_RE_BASE_CONSTRAINT_DATA(int aId, int aParentId, const wxString &aRuleName)
std::vector< PCB_LAYER_ID > m_layers
void SetOriginalEntryCount(int aCount)
int GetSourceRule() const
wxString GetRuleCondition()
void SetSeverity(SEVERITY aSeverity)
void SetRuleCondition(const wxString &aRuleCondition)
virtual BITMAPS GetOverlayBitmap() const
Returns the bitmap to use for the overlay panel background.
void CopyFrom(const ICopyable &aSource) override
wxString m_originalRuleText
wxString GetOriginalRuleText() const
virtual wxString GenerateRule(const RULE_GENERATION_CONTEXT &aContext)
void SetOriginalRuleText(const wxString &aText)
void SetSourceRule(int aIndex)
std::vector< PCB_LAYER_ID > GetLayers()
int m_sourceRule
Not copied, since a duplicate is a new rule.
wxString GetGeneratedRule() const
DRC_RE_BASE_CONSTRAINT_DATA()=default
static bool isNumber(const char *cp, const char *limit)
Return true if the next sequence of text is a number: either an integer, fixed point,...
Abstract interface class to enable polymorphic copying between objects.
RULE_EDITOR_DATA_BASE()=default
void CopyFrom(const ICopyable &aSource) override
Implementation of the polymorphic CopyFrom method.
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
wxString conditionExpression
Result of a validation operation.
wxString result
Test unit parsing edge cases and error handling.