55 wxString
result = wxEmptyString;
57 *aStr = aStr->Trim(
false );
59 if( aStr->Len() == 0 )
62 if( (*aStr)[0] == wxT(
'"' ) )
65 *aStr = aStr->Mid( 1 );
67 while( aStr->Len() > 0 && (*aStr)[0] != wxT(
'"' ) )
70 *aStr = aStr->Mid( 1 );
73 if( aStr->Len() > 0 && (*aStr)[0] == wxT(
'"' ) )
76 *aStr = aStr->Mid( 1 );
81 while( aStr->Len() > 0
82 && !( (*aStr)[0] == wxT(
' ' )
83 || (*aStr)[0] == wxT(
'(' )
84 || (*aStr)[0] == wxT(
')' ) ) )
87 *aStr = aStr->Mid( 1 );
103 lNode =
FindNode( aNode, wxT(
"attachedPattern" ) );
113 const wxString& aActualConversion )
125 u = ls[ls.Len() - 1];
128 && !( ls[ls.Len() - 1] == wxT(
'.' )
129 || ls[ls.Len() - 1] == wxT(
',' )
130 || (ls[ls.Len() - 1] >= wxT(
'0' ) && ls[ls.Len() - 1] <= wxT(
'9' ) ) ) )
132 ls = ls.Left( ls.Len() - 1 );
136 && !( ls[0] == wxT(
'-' )
137 || ls[0] == wxT(
'+' )
138 || ls[0] == wxT(
'.' )
139 || ls[0] == wxT(
',' )
140 || (ls[0] >= wxT(
'0' ) && ls[0] <= wxT(
'9' ) ) ) )
145 if( u == wxT(
'm' ) )
149#ifdef PCAD2KICAD_SCALE_SCH_TO_INCH_GRID
150 if( aActualConversion == wxT(
"SCH" )
151 || aActualConversion == wxT(
"SCHLIB" ) )
152 i = i * (0.0254 / 0.025);
168 if( ( aActualConversion == wxT(
"PCB" ) || aActualConversion == wxT(
"SCH" ) )
169 && aAxe == wxT(
'Y' ) )
176int StrToIntUnits(
const wxString& aStr,
char aAxe,
const wxString& aActualConversion )
190 while( aStr->Len() > 0 && (*aStr)[0] != wxT(
' ' ) )
193 *aStr = aStr->Mid( 1 );
199 while( aStr->Len() > 0
200 && ( ( (*aStr)[0] >= wxT(
'a' ) && (*aStr)[0] <= wxT(
'z' ) )
201 || ( (*aStr)[0] >= wxT(
'A' ) && (*aStr)[0] <= wxT(
'Z' ) ) ) )
204 *aStr = aStr->Mid( 1 );
214 result += aDefaultMeasurementUnit;
223 double num, precision = 10;
225 aStr.ToCDouble( &num );
226 return KiROUND( num * precision );
232 wxString retv = aName;
233 retv.Replace( wxT(
" " ), wxT(
"_" ) );
242 reRef.Compile( wxT(
"^[[:digit:]][[:digit:]]*$" ) );
244 wxString retv = aRef;
246 if( reRef.Matches( retv ) )
247 retv.Prepend( wxT(
'.' ) );
253void SetWidth(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aWidth,
254 const wxString& aActualConversion )
259 wxT(
' ' ), aActualConversion );
263void SetHeight(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aHeight,
264 const wxString& aActualConversion )
269 wxT(
' ' ), aActualConversion );
273void SetPosition(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aX,
int* aY,
274 const wxString& aActualConversion )
279 wxT(
'X' ), aActualConversion );
281 wxT(
'Y' ), aActualConversion );
286 double* aX,
double* aY,
const wxString& aActualConversion )
303 if( aJustify.IsSameAs( wxT(
"LowerCenter" ),
false ) )
305 else if( aJustify.IsSameAs( wxT(
"LowerRight" ),
false ) )
307 else if( aJustify.IsSameAs( wxT(
"UpperLeft" ),
false ) )
309 else if( aJustify.IsSameAs( wxT(
"UpperCenter" ),
false ) )
311 else if( aJustify.IsSameAs( wxT(
"UpperRight" ),
false ) )
313 else if( aJustify.IsSameAs( wxT(
"Left" ),
false ) )
315 else if( aJustify.IsSameAs( wxT(
"Center" ),
false ) )
317 else if( aJustify.IsSameAs( wxT(
"Right" ),
false ) )
327 const wxString& aDefaultMeasurementUnit,
const wxString& aActualConversion )
332 tNode =
FindNode( aNode, wxT(
"pt" ) );
338 tNode =
FindNode( aNode, wxT(
"rotation" ) );
342 str = tNode->GetNodeContent();
353 if( str.IsSameAs( wxT(
"True" ),
false ) )
363 if( str.IsSameAs( wxT(
"True" ),
false ) )
368 tNode =
FindNode( aNode, wxT(
"textStyleRef" ) );
371 SetFontProperty( tNode, aTextValue, aDefaultMeasurementUnit, aActualConversion );
376 const wxString& aActualConversion )
378 wxString n, propValue;
380 aNode->GetAttribute( wxT(
"Name" ), &n );
382 while( aNode->GetName() != wxT(
"www.lura.sk" ) )
385 aNode =
FindNode( aNode, wxT(
"library" ) );
388 aNode =
FindNode( aNode, wxT(
"textStyleDef" ) );
392 aNode->GetAttribute( wxT(
"Name" ), &propValue );
393 propValue.Trim(
false );
394 propValue.Trim(
true );
407 aTextValue->
isTrueType = ( propValue.IsSameAs( wxT(
"True" ),
false ) );
409 aNode =
FindNode( aNode, wxT(
"font" ) );
412 if( ( aTextValue->
isTrueType && !fontType.IsSameAs( wxT(
"TrueType" ),
false ) ) ||
413 ( !aTextValue->
isTrueType && !fontType.IsSameAs( wxT(
"Stroke" ),
false ) ) )
421 aTextValue->
isItalic = propValue.IsSameAs( wxT(
"True" ),
false );
425 if( propValue != wxEmptyString )
429 propValue.ToLong( &fontWeight );
436 lNode =
FindNode( aNode, wxT(
"fontHeight" ) );
439 SetHeight( lNode->GetNodeContent(), aDefaultMeasurementUnit,
451 lNode =
FindNode( aNode, wxT(
"strokeWidth" ) );
454 SetWidth( lNode->GetNodeContent(), aDefaultMeasurementUnit,
515 int cm = aValue->
mirror ? -1 : 1;
559 if( aChild->GetName().IsSameAs( aTag,
false ) )
571 wxString str = wxEmptyString;
577 str = aChild->GetNodeContent();
588 aTextValue->
text = wxEmptyString;
600 aTextValue->
isBold =
false;
constexpr EDA_IU_SCALE pcbIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
An extension of wxXmlNode that can format its contents as KiCad-style s-expressions.
XNODE * GetParent() const
XNODE * GetChildren() const
static constexpr EDA_ANGLE ANGLE_0
wxString ValidateName(const wxString &aName)
wxString GetWord(wxString *aStr)
int StrToIntUnits(const wxString &aStr, char aAxe, const wxString &aActualConversion)
int StrToInt1Units(const wxString &aStr)
void SetWidth(const wxString &aStr, const wxString &aDefaultMeasurementUnit, int *aWidth, const wxString &aActualConversion)
void SetHeight(const wxString &aStr, const wxString &aDefaultMeasurementUnit, int *aHeight, const wxString &aActualConversion)
XNODE * FindNode(XNODE *aChild, const wxString &aTag)
const double TRUETYPE_THICK_PER_HEIGHT
double StrToDoublePrecisionUnits(const wxString &aStr, char aAxe, const wxString &aActualConversion)
wxString ValidateReference(const wxString &aRef)
const double STROKE_WIDTH_TO_SIZE
void SetTextSizeFromStrokeFontHeight(EDA_TEXT *aText, int aTextHeight)
const double TRUETYPE_BOLD_THICK_MUL
void SetPosition(const wxString &aStr, const wxString &aDefaultMeasurementUnit, int *aX, int *aY, const wxString &aActualConversion)
void SetDoublePrecisionPosition(const wxString &aStr, const wxString &aDefaultMeasurementUnit, double *aX, double *aY, const wxString &aActualConversion)
TTEXT_JUSTIFY GetJustifyIdentificator(const wxString &aJustify)
const double TRUETYPE_HEIGHT_TO_SIZE
void SetTextJustify(EDA_TEXT *aText, TTEXT_JUSTIFY aJustify)
const double STROKE_HEIGHT_TO_SIZE
int CalculateTextLengthSize(TTEXTVALUE *aText)
XNODE * FindPinMap(XNODE *aNode)
void CorrectTextPosition(TTEXTVALUE *aValue)
const double TEXT_WIDTH_TO_SIZE_AVERAGE
const long TRUETYPE_BOLD_MIN_WEIGHT
void SetFontProperty(XNODE *aNode, TTEXTVALUE *aTextValue, const wxString &aDefaultMeasurementUnit, const wxString &aActualConversion)
wxString FindNodeGetContent(XNODE *aChild, const wxString &aTag)
void SetTextParameters(XNODE *aNode, TTEXTVALUE *aTextValue, const wxString &aDefaultMeasurementUnit, const wxString &aActualConversion)
wxString GetAndCutWordWithMeasureUnits(wxString *aStr, const wxString &aDefaultMeasurementUnit)
void InitTTextValue(TTEXTVALUE *aTextValue)
void SetTextSizeFromTrueTypeFontHeight(EDA_TEXT *aText, int aTextHeight)
const double TRUETYPE_WIDTH_TO_SIZE
wxString result
Test unit parsing edge cases and error handling.
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.