59 wxString result = wxEmptyString;
61 *aStr = aStr->Trim(
false );
63 if( aStr->Len() == 0 )
66 if( (*aStr)[0] == wxT(
'"' ) )
69 *aStr = aStr->Mid( 1 );
71 while( aStr->Len() > 0 && (*aStr)[0] != wxT(
'"' ) )
74 *aStr = aStr->Mid( 1 );
77 if( aStr->Len() > 0 && (*aStr)[0] == wxT(
'"' ) )
80 *aStr = aStr->Mid( 1 );
85 while( aStr->Len() > 0
86 && !( (*aStr)[0] == wxT(
' ' )
87 || (*aStr)[0] == wxT(
'(' )
88 || (*aStr)[0] == wxT(
')' ) ) )
91 *aStr = aStr->Mid( 1 );
104 XNODE* result, * lNode;
107 lNode =
FindNode( aNode, wxT(
"attachedPattern" ) );
110 result =
FindNode( lNode, wxT(
"padPinMap" ) );
117 const wxString& aActualConversion )
129 u = ls[ls.Len() - 1];
132 && !( ls[ls.Len() - 1] == wxT(
'.' )
133 || ls[ls.Len() - 1] == wxT(
',' )
134 || (ls[ls.Len() - 1] >= wxT(
'0' ) && ls[ls.Len() - 1] <= wxT(
'9' ) ) ) )
136 ls = ls.Left( ls.Len() - 1 );
140 && !( ls[0] == wxT(
'-' )
141 || ls[0] == wxT(
'+' )
142 || ls[0] == wxT(
'.' )
143 || ls[0] == wxT(
',' )
144 || (ls[0] >= wxT(
'0' ) && ls[0] <= wxT(
'9' ) ) ) )
149 if( u == wxT(
'm' ) )
153 #ifdef PCAD2KICAD_SCALE_SCH_TO_INCH_GRID 154 if( aActualConversion == wxT(
"SCH" )
155 || aActualConversion == wxT(
"SCHLIB" ) )
156 i = i * (0.0254 / 0.025);
172 if( ( aActualConversion == wxT(
"PCB" ) || aActualConversion == wxT(
"SCH" ) )
173 && aAxe == wxT(
'Y' ) )
180 int StrToIntUnits(
const wxString& aStr,
char aAxe,
const wxString& aActualConversion )
191 result = wxEmptyString;
194 while( aStr->Len() > 0 && (*aStr)[0] != wxT(
' ' ) )
196 result += (*aStr)[0];
197 *aStr = aStr->Mid( 1 );
203 while( aStr->Len() > 0
204 && ( ( (*aStr)[0] >= wxT(
'a' ) && (*aStr)[0] <= wxT(
'z' ) )
205 || ( (*aStr)[0] >= wxT(
'A' ) && (*aStr)[0] <= wxT(
'Z' ) ) ) )
207 result += (*aStr)[0];
208 *aStr = aStr->Mid( 1 );
213 && ( result[result.Len() - 1] == wxT(
'.' )
214 || result[result.Len() - 1] == wxT(
',' )
215 || (result[result.Len() - 1] >= wxT(
'0' )
216 && result[result.Len() - 1] <= wxT(
'9' ) ) ) )
218 result += aDefaultMeasurementUnit;
227 double num, precision = 10;
229 aStr.ToCDouble( &num );
230 return KiROUND( num * precision );
236 wxString retv = aName;
237 retv.Replace( wxT(
" " ), wxT(
"_" ) );
246 reRef.Compile( wxT(
"^[[:digit:]][[:digit:]]*$" ) );
248 wxString retv = aRef;
250 if( reRef.Matches( retv ) )
251 retv.Prepend( wxT(
'.' ) );
257 void SetWidth(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aWidth,
258 const wxString& aActualConversion )
263 wxT(
' ' ), aActualConversion );
267 void SetHeight(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aHeight,
268 const wxString& aActualConversion )
273 wxT(
' ' ), aActualConversion );
277 void SetPosition(
const wxString& aStr,
const wxString& aDefaultMeasurementUnit,
int* aX,
int* aY,
278 const wxString& aActualConversion )
283 wxT(
'X' ), aActualConversion );
285 wxT(
'Y' ), aActualConversion );
290 double* aX,
double* aY,
const wxString& aActualConversion )
307 if( aJustify.IsSameAs( wxT(
"LowerCenter" ),
false ) )
309 else if( aJustify.IsSameAs( wxT(
"LowerRight" ),
false ) )
311 else if( aJustify.IsSameAs( wxT(
"UpperLeft" ),
false ) )
313 else if( aJustify.IsSameAs( wxT(
"UpperCenter" ),
false ) )
315 else if( aJustify.IsSameAs( wxT(
"UpperRight" ),
false ) )
317 else if( aJustify.IsSameAs( wxT(
"Left" ),
false ) )
319 else if( aJustify.IsSameAs( wxT(
"Center" ),
false ) )
321 else if( aJustify.IsSameAs( wxT(
"Right" ),
false ) )
331 const wxString& aDefaultMeasurementUnit,
const wxString& aActualConversion )
336 tNode =
FindNode( aNode, wxT(
"pt" ) );
342 tNode =
FindNode( aNode, wxT(
"rotation" ) );
346 str = tNode->GetNodeContent();
357 if( str.IsSameAs( wxT(
"True" ),
false ) )
367 if( str.IsSameAs( wxT(
"True" ),
false ) )
372 tNode =
FindNode( aNode, wxT(
"textStyleRef" ) );
375 SetFontProperty( tNode, aTextValue, aDefaultMeasurementUnit, aActualConversion );
380 const wxString& aActualConversion )
382 wxString n, propValue;
384 aNode->GetAttribute( wxT(
"Name" ), &n );
386 while( aNode->GetName() != wxT(
"www.lura.sk" ) )
389 aNode =
FindNode( aNode, wxT(
"library" ) );
392 aNode =
FindNode( aNode, wxT(
"textStyleDef" ) );
396 aNode->GetAttribute( wxT(
"Name" ), &propValue );
397 propValue.Trim(
false );
398 propValue.Trim(
true );
411 aTextValue->
isTrueType = ( propValue.IsSameAs( wxT(
"True" ),
false ) );
413 aNode =
FindNode( aNode, wxT(
"font" ) );
416 if( ( aTextValue->
isTrueType && !fontType.IsSameAs( wxT(
"TrueType" ),
false ) ) ||
417 ( !aTextValue->
isTrueType && !fontType.IsSameAs( wxT(
"Stroke" ),
false ) ) )
425 aTextValue->
isItalic = propValue.IsSameAs( wxT(
"True" ),
false );
429 if( propValue != wxEmptyString )
433 propValue.ToLong( &fontWeight );
440 lNode =
FindNode( aNode, wxT(
"fontHeight" ) );
443 SetHeight( lNode->GetNodeContent(), aDefaultMeasurementUnit,
455 lNode =
FindNode( aNode, wxT(
"strokeWidth" ) );
458 SetWidth( lNode->GetNodeContent(), aDefaultMeasurementUnit,
519 int cm = aValue->
mirror ? -1 : 1;
565 if( aChild->GetName().IsSameAs( aTag,
false ) )
577 wxString str = wxEmptyString;
583 str = aChild->GetNodeContent();
594 aTextValue->
text = wxEmptyString;
606 aTextValue->
isBold =
false;
const long TRUETYPE_BOLD_MIN_WEIGHT
wxString ValidateName(const wxString &aName)
wxString GetWord(wxString *aStr)
void SetFontProperty(XNODE *aNode, TTEXTVALUE *aTextValue, const wxString &aDefaultMeasurementUnit, const wxString &aActualConversion)
void SetWidth(const wxString &aStr, const wxString &aDefaultMeasurementUnit, int *aWidth, const wxString &aActualConversion)
double StrToDoublePrecisionUnits(const wxString &aStr, char aAxe, const wxString &aActualConversion)
const double TRUETYPE_BOLD_THICK_MUL
const double TEXT_WIDTH_TO_SIZE_AVERAGE
const double TRUETYPE_THICK_PER_HEIGHT
wxString GetAndCutWordWithMeasureUnits(wxString *aStr, const wxString &aDefaultMeasurementUnit)
void SetTextSize(const wxSize &aNewSize)
const double TRUETYPE_WIDTH_TO_SIZE
void RotatePoint(int *pX, int *pY, double angle)
void SetTextSizeFromTrueTypeFontHeight(EDA_TEXT *aText, int aTextHeight)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
int CalculateTextLengthSize(TTEXTVALUE *aText)
XNODE * GetChildren() const
const double STROKE_WIDTH_TO_SIZE
XNODE * GetParent() const
wxString FindNodeGetContent(XNODE *aChild, const wxString &aTag)
void SetVertJustify(EDA_TEXT_VJUSTIFY_T aType)
void SetTextParameters(XNODE *aNode, TTEXTVALUE *aTextValue, const wxString &aDefaultMeasurementUnit, const wxString &aActualConversion)
const double STROKE_HEIGHT_TO_SIZE
int StrToIntUnits(const wxString &aStr, char aAxe, const wxString &aActualConversion)
Hold an XML or S-expression element.
void SetTextJustify(EDA_TEXT *aText, TTEXT_JUSTIFY aJustify)
const double TRUETYPE_HEIGHT_TO_SIZE
void SetHorizJustify(EDA_TEXT_HJUSTIFY_T aType)
void CorrectTextPosition(TTEXTVALUE *aValue)
TTEXT_JUSTIFY GetJustifyIdentificator(const wxString &aJustify)
wxString ValidateReference(const wxString &aRef)
XNODE * FindNode(XNODE *aChild, const wxString &aTag)
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
void InitTTextValue(TTEXTVALUE *aTextValue)
void SetDoublePrecisionPosition(const wxString &aStr, const wxString &aDefaultMeasurementUnit, double *aX, double *aY, const wxString &aActualConversion)
void SetTextSizeFromStrokeFontHeight(EDA_TEXT *aText, int aTextHeight)
XNODE * FindPinMap(XNODE *aNode)
void SetHeight(const wxString &aStr, const wxString &aDefaultMeasurementUnit, int *aHeight, const wxString &aActualConversion)
static constexpr int Millimeter2iu(double mm)
int StrToInt1Units(const wxString &aStr)
void SetPosition(const wxString &aStr, const wxString &aDefaultMeasurementUnit, int *aX, int *aY, const wxString &aActualConversion)