54 wxString
result = wxEmptyString;
56 *aStr = aStr->Trim(
false );
58 if( aStr->Len() == 0 )
61 if( (*aStr)[0] == wxT(
'"' ) )
64 *aStr = aStr->Mid( 1 );
66 while( aStr->Len() > 0 && (*aStr)[0] != wxT(
'"' ) )
69 *aStr = aStr->Mid( 1 );
72 if( aStr->Len() > 0 && (*aStr)[0] == wxT(
'"' ) )
75 *aStr = aStr->Mid( 1 );
80 while( aStr->Len() > 0
81 && !( (*aStr)[0] == wxT(
' ' )
82 || (*aStr)[0] == wxT(
'(' )
83 || (*aStr)[0] == wxT(
')' ) ) )
86 *aStr = aStr->Mid( 1 );
102 lNode =
FindNode( aNode, wxT(
"attachedPattern" ) );
112 const wxString& aActualConversion )
124 u = ls[ls.Len() - 1];
127 && !( ls[ls.Len() - 1] == wxT(
'.' )
128 || ls[ls.Len() - 1] == wxT(
',' )
129 || (ls[ls.Len() - 1] >= wxT(
'0' ) && ls[ls.Len() - 1] <= wxT(
'9' ) ) ) )
131 ls = ls.Left( ls.Len() - 1 );
135 && !( ls[0] == wxT(
'-' )
136 || ls[0] == wxT(
'+' )
137 || ls[0] == wxT(
'.' )
138 || ls[0] == wxT(
',' )
139 || (ls[0] >= wxT(
'0' ) && ls[0] <= wxT(
'9' ) ) ) )
144 if( u == wxT(
'm' ) )
148#ifdef PCAD2KICAD_SCALE_SCH_TO_INCH_GRID
149 if( aActualConversion == wxT(
"SCH" )
150 || aActualConversion == wxT(
"SCHLIB" ) )
151 i = i * (0.0254 / 0.025);
167 if( ( aActualConversion == wxT(
"PCB" ) || aActualConversion == wxT(
"SCH" ) )
168 && aAxe == wxT(
'Y' ) )
175int StrToIntUnits(
const wxString& aStr,
char aAxe,
const wxString& aActualConversion )
189 while( aStr->Len() > 0 && (*aStr)[0] != wxT(
' ' ) )
192 *aStr = aStr->Mid( 1 );
198 while( aStr->Len() > 0
199 && ( ( (*aStr)[0] >= wxT(
'a' ) && (*aStr)[0] <= wxT(
'z' ) )
200 || ( (*aStr)[0] >= wxT(
'A' ) && (*aStr)[0] <= wxT(
'Z' ) ) ) )
203 *aStr = aStr->Mid( 1 );
213 result += aDefaultMeasurementUnit;
222 double num, precision = 10;
224 aStr.ToCDouble( &num );
225 return KiROUND( num * precision );
231 wxString retv = aName;
232 retv.Replace( wxT(
" " ), wxT(
"_" ) );
241 reRef.Compile( wxT(
"^[[:digit:]][[:digit:]]*$" ) );
243 wxString retv = aRef;
245 if( reRef.Matches( retv ) )
246 retv.Prepend( wxT(
'.' ) );
252void SetWidth(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aWidth,
253 const wxString& aActualConversion )
258 wxT(
' ' ), aActualConversion );
262void SetHeight(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aHeight,
263 const wxString& aActualConversion )
268 wxT(
' ' ), aActualConversion );
272void SetPosition(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aX,
int* aY,
273 const wxString& aActualConversion )
278 wxT(
'X' ), aActualConversion );
280 wxT(
'Y' ), aActualConversion );
285 double* aX,
double* aY,
const wxString& aActualConversion )
302 if( aJustify.IsSameAs( wxT(
"LowerCenter" ),
false ) )
304 else if( aJustify.IsSameAs( wxT(
"LowerRight" ),
false ) )
306 else if( aJustify.IsSameAs( wxT(
"UpperLeft" ),
false ) )
308 else if( aJustify.IsSameAs( wxT(
"UpperCenter" ),
false ) )
310 else if( aJustify.IsSameAs( wxT(
"UpperRight" ),
false ) )
312 else if( aJustify.IsSameAs( wxT(
"Left" ),
false ) )
314 else if( aJustify.IsSameAs( wxT(
"Center" ),
false ) )
316 else if( aJustify.IsSameAs( wxT(
"Right" ),
false ) )
326 const wxString& aDefaultMeasurementUnit,
const wxString& aActualConversion )
331 tNode =
FindNode( aNode, wxT(
"pt" ) );
337 tNode =
FindNode( aNode, wxT(
"rotation" ) );
341 str = tNode->GetNodeContent();
352 if( str.IsSameAs( wxT(
"True" ),
false ) )
362 if( str.IsSameAs( wxT(
"True" ),
false ) )
367 tNode =
FindNode( aNode, wxT(
"textStyleRef" ) );
370 SetFontProperty( tNode, aTextValue, aDefaultMeasurementUnit, aActualConversion );
375 const wxString& aActualConversion )
377 wxString n, propValue;
379 aNode->GetAttribute( wxT(
"Name" ), &n );
381 while( aNode->GetName() != wxT(
"www.lura.sk" ) )
384 aNode =
FindNode( aNode, wxT(
"library" ) );
387 aNode =
FindNode( aNode, wxT(
"textStyleDef" ) );
391 aNode->GetAttribute( wxT(
"Name" ), &propValue );
392 propValue.Trim(
false );
393 propValue.Trim(
true );
406 aTextValue->
isTrueType = ( propValue.IsSameAs( wxT(
"True" ),
false ) );
408 aNode =
FindNode( aNode, wxT(
"font" ) );
411 if( ( aTextValue->
isTrueType && !fontType.IsSameAs( wxT(
"TrueType" ),
false ) ) ||
412 ( !aTextValue->
isTrueType && !fontType.IsSameAs( wxT(
"Stroke" ),
false ) ) )
420 aTextValue->
isItalic = propValue.IsSameAs( wxT(
"True" ),
false );
424 if( propValue != wxEmptyString )
428 propValue.ToLong( &fontWeight );
435 lNode =
FindNode( aNode, wxT(
"fontHeight" ) );
438 SetHeight( lNode->GetNodeContent(), aDefaultMeasurementUnit,
450 lNode =
FindNode( aNode, wxT(
"strokeWidth" ) );
453 SetWidth( lNode->GetNodeContent(), aDefaultMeasurementUnit,
514 int cm = aValue->
mirror ? -1 : 1;
558 if( aChild->GetName().IsSameAs( aTag,
false ) )
570 wxString str = wxEmptyString;
576 str = aChild->GetNodeContent();
587 aTextValue->
text = wxEmptyString;
599 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.